Browse Source

Merge branch '5.0' of git@github.com:Dolibarr/dolibarr.git into develop

Conflicts:
	htdocs/accountancy/admin/categories.php
	htdocs/admin/dict.php
	htdocs/langs/de_DE/bills.lang
	htdocs/langs/en_US/main.lang
	htdocs/langs/fr_FR/bills.lang
Laurent Destailleur 8 years ago
parent
commit
eef3824f8c
100 changed files with 2203 additions and 539 deletions
  1. 15 9
      dev/translation/txpull.sh
  2. 13 9
      htdocs/accountancy/admin/categories.php
  3. 1351 0
      htdocs/accountancy/admin/categories_list.php
  4. 3 3
      htdocs/accountancy/bookkeeping/balance.php
  5. 12 8
      htdocs/accountancy/bookkeeping/card.php
  6. 76 77
      htdocs/accountancy/bookkeeping/list.php
  7. 9 5
      htdocs/accountancy/class/accountancycategory.class.php
  8. 10 10
      htdocs/accountancy/customer/lines.php
  9. 1 0
      htdocs/accountancy/journal/expensereportsjournal.php
  10. 9 9
      htdocs/accountancy/supplier/lines.php
  11. 12 12
      htdocs/admin/dict.php
  12. 2 2
      htdocs/comm/mailing/card.php
  13. 1 1
      htdocs/compta/paiement.php
  14. 7 6
      htdocs/core/class/html.formaccounting.class.php
  15. 6 5
      htdocs/core/menus/init_menu_auguria.sql
  16. 1 0
      htdocs/core/menus/standard/eldy.lib.php
  17. 3 1
      htdocs/install/mysql/migration/repair.sql
  18. 3 0
      htdocs/langs/ar_SA/accountancy.lang
  19. 34 27
      htdocs/langs/ar_SA/admin.lang
  20. 2 2
      htdocs/langs/ar_SA/banks.lang
  21. 30 17
      htdocs/langs/ar_SA/bills.lang
  22. 7 7
      htdocs/langs/ar_SA/boxes.lang
  23. 4 3
      htdocs/langs/ar_SA/companies.lang
  24. 2 1
      htdocs/langs/ar_SA/compta.lang
  25. 6 6
      htdocs/langs/ar_SA/cron.lang
  26. 4 1
      htdocs/langs/ar_SA/errors.lang
  27. 2 2
      htdocs/langs/ar_SA/holiday.lang
  28. 2 2
      htdocs/langs/ar_SA/ldap.lang
  29. 9 2
      htdocs/langs/ar_SA/mails.lang
  30. 9 3
      htdocs/langs/ar_SA/main.lang
  31. 3 3
      htdocs/langs/ar_SA/members.lang
  32. 2 2
      htdocs/langs/ar_SA/orders.lang
  33. 5 4
      htdocs/langs/ar_SA/other.lang
  34. 40 2
      htdocs/langs/ar_SA/products.lang
  35. 8 7
      htdocs/langs/ar_SA/projects.lang
  36. 3 3
      htdocs/langs/ar_SA/propal.lang
  37. 4 2
      htdocs/langs/ar_SA/stocks.lang
  38. 2 2
      htdocs/langs/ar_SA/supplier_proposal.lang
  39. 5 4
      htdocs/langs/ar_SA/suppliers.lang
  40. 1 1
      htdocs/langs/ar_SA/users.lang
  41. 3 2
      htdocs/langs/ar_SA/withdrawals.lang
  42. 3 0
      htdocs/langs/bg_BG/accountancy.lang
  43. 34 27
      htdocs/langs/bg_BG/admin.lang
  44. 31 18
      htdocs/langs/bg_BG/bills.lang
  45. 7 7
      htdocs/langs/bg_BG/boxes.lang
  46. 3 2
      htdocs/langs/bg_BG/companies.lang
  47. 2 1
      htdocs/langs/bg_BG/compta.lang
  48. 6 6
      htdocs/langs/bg_BG/cron.lang
  49. 4 1
      htdocs/langs/bg_BG/errors.lang
  50. 2 2
      htdocs/langs/bg_BG/holiday.lang
  51. 2 2
      htdocs/langs/bg_BG/ldap.lang
  52. 9 2
      htdocs/langs/bg_BG/mails.lang
  53. 8 2
      htdocs/langs/bg_BG/main.lang
  54. 3 3
      htdocs/langs/bg_BG/members.lang
  55. 2 2
      htdocs/langs/bg_BG/orders.lang
  56. 5 4
      htdocs/langs/bg_BG/other.lang
  57. 40 2
      htdocs/langs/bg_BG/products.lang
  58. 8 7
      htdocs/langs/bg_BG/projects.lang
  59. 2 2
      htdocs/langs/bg_BG/propal.lang
  60. 4 2
      htdocs/langs/bg_BG/stocks.lang
  61. 2 2
      htdocs/langs/bg_BG/supplier_proposal.lang
  62. 5 4
      htdocs/langs/bg_BG/suppliers.lang
  63. 1 1
      htdocs/langs/bg_BG/users.lang
  64. 3 2
      htdocs/langs/bg_BG/withdrawals.lang
  65. 3 0
      htdocs/langs/bn_BD/accountancy.lang
  66. 34 27
      htdocs/langs/bn_BD/admin.lang
  67. 2 2
      htdocs/langs/bn_BD/banks.lang
  68. 32 19
      htdocs/langs/bn_BD/bills.lang
  69. 7 7
      htdocs/langs/bn_BD/boxes.lang
  70. 4 3
      htdocs/langs/bn_BD/companies.lang
  71. 2 1
      htdocs/langs/bn_BD/compta.lang
  72. 4 4
      htdocs/langs/bn_BD/cron.lang
  73. 4 1
      htdocs/langs/bn_BD/errors.lang
  74. 2 2
      htdocs/langs/bn_BD/holiday.lang
  75. 2 2
      htdocs/langs/bn_BD/ldap.lang
  76. 9 2
      htdocs/langs/bn_BD/mails.lang
  77. 9 3
      htdocs/langs/bn_BD/main.lang
  78. 3 3
      htdocs/langs/bn_BD/members.lang
  79. 2 2
      htdocs/langs/bn_BD/orders.lang
  80. 5 4
      htdocs/langs/bn_BD/other.lang
  81. 40 2
      htdocs/langs/bn_BD/products.lang
  82. 8 7
      htdocs/langs/bn_BD/projects.lang
  83. 3 3
      htdocs/langs/bn_BD/propal.lang
  84. 4 2
      htdocs/langs/bn_BD/stocks.lang
  85. 2 2
      htdocs/langs/bn_BD/supplier_proposal.lang
  86. 4 3
      htdocs/langs/bn_BD/suppliers.lang
  87. 1 1
      htdocs/langs/bn_BD/users.lang
  88. 3 2
      htdocs/langs/bn_BD/withdrawals.lang
  89. 3 0
      htdocs/langs/bs_BA/accountancy.lang
  90. 34 27
      htdocs/langs/bs_BA/admin.lang
  91. 2 2
      htdocs/langs/bs_BA/banks.lang
  92. 32 19
      htdocs/langs/bs_BA/bills.lang
  93. 7 7
      htdocs/langs/bs_BA/boxes.lang
  94. 4 3
      htdocs/langs/bs_BA/companies.lang
  95. 2 1
      htdocs/langs/bs_BA/compta.lang
  96. 6 6
      htdocs/langs/bs_BA/cron.lang
  97. 4 1
      htdocs/langs/bs_BA/errors.lang
  98. 2 2
      htdocs/langs/bs_BA/holiday.lang
  99. 2 2
      htdocs/langs/bs_BA/ldap.lang
  100. 9 2
      htdocs/langs/bs_BA/mails.lang

+ 15 - 9
dev/translation/txpull.sh

@@ -26,15 +26,21 @@ fi
 
 if [ "x$1" = "xall" ]
 then
-	for dir in `find htdocs/langs/* -type d`
-	do
-	    fic=`basename $dir`
-	    if [ $fic != "en_US" ]
-	    then
-		    echo "tx pull -l $fic $2 $3"
-		    tx pull -l $fic $2 $3
-		fi
-	done
+	if [ "x$2" = "x" ]
+	then
+	    echo "tx pull"
+	    tx pull
+	else
+		for dir in `find htdocs/langs/* -type d`
+		do
+		    fic=`basename $dir`
+		    if [ $fic != "en_US" ]
+		    then
+			    echo "tx pull -l $fic $2 $3"
+			    tx pull -l $fic $2 $3
+			fi
+		done
+	fi
 	cd -
 else
 	echo "tx pull -l $1 $2 $3 $4 $5"

+ 13 - 9
htdocs/accountancy/admin/categories.php

@@ -21,6 +21,7 @@
  * \ingroup Advanced accountancy
  * \brief	Page to assign mass categories to accounts
  */
+
 require '../../main.inc.php';
 require_once DOL_DOCUMENT_ROOT . '/core/lib/accounting.lib.php';
 require_once DOL_DOCUMENT_ROOT . '/accountancy/class/accountancycategory.class.php';
@@ -45,7 +46,10 @@ if ($cat_id == 0) {
 }
 
 // Security check
-if (! $user->admin) accessforbidden();
+if (! empty($user->rights->accountancy->chartofaccount))
+{
+	accessforbidden();
+}
 
 $accountingcategory = new AccountancyCategory($db);
 
@@ -84,7 +88,7 @@ $formaccounting = new FormAccounting($db);
 
 llxheader('', $langs->trans('AccountAccounting'));
 
-print load_fiche_titre($langs->trans('Categories'));
+print load_fiche_titre($langs->trans('AccountingCategory'));
 
 print '<form name="add" action="' . $_SERVER["PHP_SELF"] . '" method="POST">' . "\n";
 print '<input type="hidden" name="token" value="' . $_SESSION['newtoken'] . '">';
@@ -96,8 +100,8 @@ print '<table class="border" width="100%">';
 // Category
 print '<tr><td>' . $langs->trans("AccountingCategory") . '</td>';
 print '<td>';
-$formaccounting->select_accounting_category($cat_id, 'account_category', 1);
-print '<input class="button" type="submit" value="' . $langs->trans("Show") . '">';
+$formaccounting->select_accounting_category($cat_id, 'account_category', 1, 0, 0, 1);
+print '<input class="button" type="submit" value="' . $langs->trans("Select") . '">';
 print '</td></tr>';
 
 if (! empty($cat_id)) {
@@ -108,11 +112,11 @@ if (! empty($cat_id)) {
 	print '<tr><td>' . $langs->trans("AddAccountFromBookKeepingWithNoCategories") . '</td>';
 	print '<td>';
 	if (is_array($accountingcategory->lines_cptbk) && count($accountingcategory->lines_cptbk) > 0) {
-		print '<select size="' . count($obj) . '" name="cpt_bk[]" multiple>';
+		print '<select class="flat minwidth200" size="' . count($obj) . '" name="cpt_bk[]" multiple>';
 		foreach ( $accountingcategory->lines_cptbk as $cpt ) {
 			print '<option value="' . length_accountg($cpt->numero_compte) . '">' . length_accountg($cpt->numero_compte) . ' (' . $cpt->label_compte . ' ' . $cpt->doc_ref . ')</option>';
 		}
-		print '</select>';
+		print '</select><br>';
 		print '<input class="button" type="submit" id="" class="action-delete" value="' . $langs->trans("Add") . '"> ';
 	}
 	print '</td></tr>';
@@ -129,8 +133,8 @@ if ($action == 'display' || $action == 'delete') {
 
     print "<table class='noborder' width='100%'>\n";
     print '<tr class="liste_titre">';
-	print '<td>'.$langs->trans("AccountAccounting")."</td>";
-	print '<td colspan="2">'.$langs->trans("Label")."</td>";
+	print '<td class="liste_titre">'.$langs->trans("AccountAccounting")."</td>";
+	print '<td class="liste_titre" colspan="2">'.$langs->trans("Label")."</td>";
 	print "</tr>\n";
 
 	if (! empty($cat_id)) {
@@ -142,7 +146,7 @@ if ($action == 'display' || $action == 'delete') {
 		if (is_array($accountingcategory->lines_display) && count($accountingcategory->lines_display) > 0) {
 			foreach ( $accountingcategory->lines_display as $cpt ) {
 				$var = ! $var;
-				print '<tr' . $bc[$var] . '>';
+				print '<tr ' . $bc[$var] . '>';
 				print '<td>' . length_accountg($cpt->account_number) . '</td>';
 				print '<td>' . $cpt->label . '</td>';
 				print '<td align="right">';

+ 1351 - 0
htdocs/accountancy/admin/categories_list.php

@@ -0,0 +1,1351 @@
+<?php
+/* 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) 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>
+ * Copyright (C) 2012-2015  Marcos García           <marcosgdf@gmail.com>
+ * Copyright (C) 2012       Christophe Battarel     <christophe.battarel@ltairis.fr>
+ * Copyright (C) 2011-2016  Alexandre Spangaro      <aspangaro.dolibarr@gmail.com>
+ * Copyright (C) 2015       Ferran Marcet           <fmarcet@2byte.es>
+ * Copyright (C) 2016       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/accountancy/admin/categories_list.php
+ *		\ingroup    setup
+ *		\brief      Page to administer data tables
+ */
+
+require '../../main.inc.php';
+require_once DOL_DOCUMENT_ROOT.'/core/class/html.formadmin.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/functions2.lib.php';
+require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
+require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
+require_once DOL_DOCUMENT_ROOT.'/accountancy/class/html.formventilation.class.php';
+
+$langs->load("errors");
+$langs->load("admin");
+$langs->load("main");
+$langs->load("companies");
+$langs->load("resource");
+$langs->load("holiday");
+$langs->load("accountancy");
+$langs->load("hrm");
+
+$action=GETPOST('action','alpha')?GETPOST('action','alpha'):'view';
+$confirm=GETPOST('confirm','alpha');
+$id=GETPOST('id','int');
+$rowid=GETPOST('rowid','alpha');
+
+// Security access
+if (! empty($user->rights->accountancy->chartofaccount))
+{
+	accessforbidden();
+}
+
+$acts[0] = "activate";
+$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;
+$active = 1;
+
+$sortfield = GETPOST("sortfield",'alpha');
+$sortorder = GETPOST("sortorder",'alpha');
+$page = GETPOST("page",'int');
+if ($page == -1) { $page = 0 ; }
+$offset = $listlimit * $page ;
+$pageprev = $page - 1;
+$pagenext = $page + 1;
+
+$search_country_id = GETPOST('search_country_id','int');
+
+// Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array
+$hookmanager->initHooks(array('admin'));
+
+// This page is a generic page to edit dictionaries
+// Put here declaration of dictionaries properties
+
+// Sort order to show dictionary (0 is space). All other dictionaries (added by modules) will be at end of this.
+$taborder=array(32);
+
+// Name of SQL tables of dictionaries
+$tabname=array();
+$tabname[32]= MAIN_DB_PREFIX."c_accounting_category";
+
+// Dictionary labels
+$tablib=array();
+$tablib[32]= "DictionaryAccountancyCategory";
+
+// Requests to extract data
+$tabsql=array();
+$tabsql[32]= "SELECT a.rowid as rowid, a.code as code, a.label, a.range_account, a.sens, a.category_type, a.formula, a.position as position, a.fk_country as country_id, c.code as country_code, c.label as country, a.active FROM ".MAIN_DB_PREFIX."c_accounting_category as a, ".MAIN_DB_PREFIX."c_country as c WHERE a.fk_country=c.rowid and c.active=1";
+
+// Criteria to sort dictionaries
+$tabsqlsort=array();
+$tabsqlsort[32]="position ASC";
+
+// Nom des champs en resultat de select pour affichage du dictionnaire
+$tabfield=array();
+$tabfield[32]= "code,label,range_account,sens,category_type,formula,position,country_id,country";
+
+// Nom des champs d'edition pour modification d'un enregistrement
+$tabfieldvalue=array();
+$tabfieldvalue[32]= "code,label,range_account,sens,category_type,formula,position,country";
+
+// Nom des champs dans la table pour insertion d'un enregistrement
+$tabfieldinsert=array();
+$tabfieldinsert[32]= "code,label,range_account,sens,category_type,formula,position,fk_country";
+
+// Nom du rowid si le champ n'est pas de type autoincrement
+// Example: "" if id field is "rowid" and has autoincrement on
+//          "nameoffield" if id field is not "rowid" or has not autoincrement on
+$tabrowid=array();
+$tabrowid[32]= "";
+
+// Condition to show dictionary in setup page
+$tabcond=array();
+$tabcond[32]= ! empty($conf->accounting->enabled);
+
+// List of help for fields
+$tabhelp=array();
+$tabhelp[32] = array('code'=>$langs->trans("EnterAnyCode"));
+
+// List of check for fields (NOT USED YET)
+$tabfieldcheck=array();
+$tabfieldcheck[32] = array();
+
+// Complete all arrays with entries found into modules
+complete_dictionary_with_modules($taborder,$tabname,$tablib,$tabsql,$tabsqlsort,$tabfield,$tabfieldvalue,$tabfieldinsert,$tabrowid,$tabcond,$tabhelp,$tabfieldcheck);
+
+
+// Define elementList and sourceList (used for dictionary type of contacts "llx_c_type_contact")
+$elementList = array();
+$sourceList=array();
+
+
+
+/*
+ * Actions
+ */
+
+if (GETPOST('button_removefilter') || GETPOST('button_removefilter.x') || GETPOST('button_removefilter_x'))
+{
+    $search_country_id = '';    
+}
+
+// Actions add or modify an entry into a dictionary
+if (GETPOST('actionadd') || GETPOST('actionmodify'))
+{
+    $listfield=explode(',', str_replace(' ', '',$tabfield[$id]));
+    $listfieldinsert=explode(',',$tabfieldinsert[$id]);
+    $listfieldmodify=explode(',',$tabfieldinsert[$id]);
+    $listfieldvalue=explode(',',$tabfieldvalue[$id]);
+
+    // Check that all fields are filled
+    $ok=1;
+    foreach ($listfield as $f => $value)
+    {
+        if ($value == 'country_id' && in_array($tablib[$id],array('DictionaryVAT','DictionaryRegion','DictionaryCompanyType','DictionaryHolidayTypes','DictionaryRevenueStamp','DictionaryAccountancysystem','DictionaryAccountancyCategory'))) continue;		// For some pages, country is not mandatory
+    	if ($value == 'country' && in_array($tablib[$id],array('DictionaryCanton','DictionaryCompanyType','DictionaryRevenueStamp'))) continue;		// For some pages, country is not mandatory
+        if ($value == 'localtax1' && empty($_POST['localtax1_type'])) continue;
+        if ($value == 'localtax2' && empty($_POST['localtax2_type'])) continue;
+        if ($value == 'color' && empty($_POST['color'])) continue;
+		if ($value == 'formula' && empty($_POST['formula'])) continue;
+        if ((! isset($_POST[$value]) || $_POST[$value]=='')
+        	&& (! in_array($listfield[$f], array('decalage','module','accountancy_code','accountancy_code_sell','accountancy_code_buy'))  // Fields that are not mandatory
+        	&& (! ($id == 10 && $listfield[$f] == 'code')) // Code is mandatory fir table 10
+        	)
+		)
+        {
+            $ok=0;
+            $fieldnamekey=$listfield[$f];
+            // We take translate key of field
+            if ($fieldnamekey == 'libelle' || ($fieldnamekey == 'label'))  $fieldnamekey='Label';
+            if ($fieldnamekey == 'libelle_facture') $fieldnamekey = 'LabelOnDocuments';
+            if ($fieldnamekey == 'nbjour')   $fieldnamekey='NbOfDays';
+            if ($fieldnamekey == 'decalage') $fieldnamekey='Offset';
+            if ($fieldnamekey == 'module')   $fieldnamekey='Module';
+            if ($fieldnamekey == 'code') $fieldnamekey = 'Code';
+            if ($fieldnamekey == 'note') $fieldnamekey = 'Note';
+            if ($fieldnamekey == 'taux') $fieldnamekey = 'Rate';
+            if ($fieldnamekey == 'type') $fieldnamekey = 'Type';
+            if ($fieldnamekey == 'position') $fieldnamekey = 'Position';
+            if ($fieldnamekey == 'unicode') $fieldnamekey = 'Unicode';
+            if ($fieldnamekey == 'deductible') $fieldnamekey = 'Deductible';
+            if ($fieldnamekey == 'sortorder') $fieldnamekey = 'SortOrder';
+			if ($fieldnamekey == 'category_type') $fieldnamekey = 'Calculated';
+
+            setEventMessages($langs->transnoentities("ErrorFieldRequired", $langs->transnoentities($fieldnamekey)), null, 'errors');
+        }
+    }
+    // Other checks
+    if ($tabname[$id] == MAIN_DB_PREFIX."c_actioncomm" && isset($_POST["type"]) && in_array($_POST["type"],array('system','systemauto'))) {
+        $ok=0;
+        setEventMessages($langs->transnoentities('ErrorReservedTypeSystemSystemAuto'), null, 'errors');
+    }
+    if (isset($_POST["code"]))
+    {
+    	if ($_POST["code"]=='0')
+    	{
+        	$ok=0;
+    		setEventMessages($langs->transnoentities('ErrorCodeCantContainZero'), null, 'errors');
+        }
+        /*if (!is_numeric($_POST['code']))	// disabled, code may not be in numeric base
+    	{
+	    	$ok = 0;
+	    	$msg .= $langs->transnoentities('ErrorFieldFormat', $langs->transnoentities('Code')).'<br />';
+	    }*/
+    }
+    if (isset($_POST["country"]) && ($_POST["country"]=='0') && ($id != 2))
+    {
+    	if (in_array($tablib[$id],array('DictionaryCompanyType','DictionaryHolidayTypes')))	// Field country is no mandatory for such dictionaries
+    	{
+    		$_POST["country"]='';
+    	}
+    	else
+    	{
+        	$ok=0;
+        	setEventMessages($langs->transnoentities("ErrorFieldRequired",$langs->transnoentities("Country")), null, 'errors');
+    	}
+    }
+    if ($id == 3 && ! is_numeric($_POST["code"]))
+    {
+       	$ok=0;
+       	setEventMessages($langs->transnoentities("ErrorFieldMustBeANumeric",$langs->transnoentities("Code")), null, 'errors');
+    }
+
+	// Clean some parameters
+    if ((! empty($_POST["localtax1_type"]) || ($_POST['localtax1_type'] == '0')) && empty($_POST["localtax1"])) $_POST["localtax1"]='0';	// If empty, we force to 0
+    if ((! empty($_POST["localtax2_type"]) || ($_POST['localtax2_type'] == '0')) && empty($_POST["localtax2"])) $_POST["localtax2"]='0';	// If empty, we force to 0
+	if ($_POST["accountancy_code"] <= 0) $_POST["accountancy_code"]='';	// If empty, we force to null
+	if ($_POST["accountancy_code_sell"] <= 0) $_POST["accountancy_code_sell"]='';	// If empty, we force to null
+	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 ($tabrowid[$id])
+        {
+            // Recupere id libre pour insertion
+            $newid=0;
+            $sql = "SELECT max(".$tabrowid[$id].") newid from ".$tabname[$id];
+            $result = $db->query($sql);
+            if ($result)
+            {
+                $obj = $db->fetch_object($result);
+                $newid=($obj->newid + 1);
+
+            } else {
+                dol_print_error($db);
+            }
+        }
+
+        // Add new entry
+        $sql = "INSERT INTO ".$tabname[$id]." (";
+        // List of fields
+        if ($tabrowid[$id] && ! in_array($tabrowid[$id],$listfieldinsert))
+        	$sql.= $tabrowid[$id].",";
+        $sql.= $tabfieldinsert[$id];
+        $sql.=",active)";
+        $sql.= " VALUES(";
+
+        // List of values
+        if ($tabrowid[$id] && ! in_array($tabrowid[$id],$listfieldinsert))
+        	$sql.= $newid.",";
+        $i=0;
+        foreach ($listfieldinsert as $f => $value)
+        {
+            if ($value == 'price' || preg_match('/^amount/i',$value) || $value == 'taux') {
+            	$_POST[$listfieldvalue[$i]] = price2num($_POST[$listfieldvalue[$i]],'MU');
+            }
+            else if ($value == 'entity') {
+            	$_POST[$listfieldvalue[$i]] = $conf->entity;
+            }
+            if ($i) $sql.=",";
+            if ($_POST[$listfieldvalue[$i]] == '' && ! ($listfieldvalue[$i] == 'code' && $id == 10)) $sql.="null";  // For vat, we want/accept code = ''
+            else $sql.="'".$db->escape($_POST[$listfieldvalue[$i]])."'";
+            $i++;
+        }
+        $sql.=",1)";
+
+        dol_syslog("actionadd", LOG_DEBUG);
+        $result = $db->query($sql);
+        if ($result)	// Add is ok
+        {
+            setEventMessages($langs->transnoentities("RecordSaved"), null, 'mesgs');
+        	$_POST=array('id'=>$id);	// Clean $_POST array, we keep only
+        }
+        else
+        {
+            if ($db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS') {
+                setEventMessages($langs->transnoentities("ErrorRecordAlreadyExists"), null, 'errors');
+            }
+            else {
+                dol_print_error($db);
+            }
+        }
+    }
+
+    // Si verif ok et action modify, on modifie la ligne
+    if ($ok && GETPOST('actionmodify'))
+    {
+        if ($tabrowid[$id]) { $rowidcol=$tabrowid[$id]; }
+        else { $rowidcol="rowid"; }
+
+        // Modify entry
+        $sql = "UPDATE ".$tabname[$id]." SET ";
+        // Modifie valeur des champs
+        if ($tabrowid[$id] && ! in_array($tabrowid[$id],$listfieldmodify))
+        {
+            $sql.= $tabrowid[$id]."=";
+            $sql.= "'".$db->escape($rowid)."', ";
+        }
+        $i = 0;
+        foreach ($listfieldmodify as $field)
+        {
+            if ($field == 'price' || preg_match('/^amount/i',$field) || $field == 'taux') {
+            	$_POST[$listfieldvalue[$i]] = price2num($_POST[$listfieldvalue[$i]],'MU');
+            }
+            else if ($field == 'entity') {
+            	$_POST[$listfieldvalue[$i]] = $conf->entity;
+            }
+            if ($i) $sql.=",";
+            $sql.= $field."=";
+            if ($_POST[$listfieldvalue[$i]] == '' && ! ($listfieldvalue[$i] == 'code' && $id == 10)) $sql.="null";  // For vat, we want/accept code = ''
+            else $sql.="'".$db->escape($_POST[$listfieldvalue[$i]])."'";
+            $i++;
+        }
+        $sql.= " WHERE ".$rowidcol." = '".$rowid."'";
+
+        dol_syslog("actionmodify", LOG_DEBUG);
+        //print $sql;
+        $resql = $db->query($sql);
+        if (! $resql)
+        {
+            setEventMessages($db->error(), null, 'errors');
+        }
+    }
+    //$_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 ($action == 'confirm_delete' && $confirm == 'yes')       // delete
+{
+    if ($tabrowid[$id]) { $rowidcol=$tabrowid[$id]; }
+    else { $rowidcol="rowid"; }
+
+    $sql = "DELETE from ".$tabname[$id]." WHERE ".$rowidcol."='".$rowid."'";
+
+    dol_syslog("delete", LOG_DEBUG);
+    $result = $db->query($sql);
+    if (! $result)
+    {
+        if ($db->errno() == 'DB_ERROR_CHILD_EXISTS')
+        {
+            setEventMessages($langs->transnoentities("ErrorRecordIsUsedByChild"), null, 'errors');
+        }
+        else
+        {
+            dol_print_error($db);
+        }
+    }
+}
+
+// activate
+if ($action == $acts[0])
+{
+    if ($tabrowid[$id]) { $rowidcol=$tabrowid[$id]; }
+    else { $rowidcol="rowid"; }
+
+    if ($rowid) {
+        $sql = "UPDATE ".$tabname[$id]." SET active = 1 WHERE ".$rowidcol."='".$rowid."'";
+    }
+    elseif ($_GET["code"]) {
+        $sql = "UPDATE ".$tabname[$id]." SET active = 1 WHERE code='".$_GET["code"]."'";
+    }
+
+    $result = $db->query($sql);
+    if (!$result)
+    {
+        dol_print_error($db);
+    }
+}
+
+// disable
+if ($action == $acts[1])
+{
+    if ($tabrowid[$id]) { $rowidcol=$tabrowid[$id]; }
+    else { $rowidcol="rowid"; }
+
+    if ($rowid) {
+        $sql = "UPDATE ".$tabname[$id]." SET active = 0 WHERE ".$rowidcol."='".$rowid."'";
+    }
+    elseif ($_GET["code"]) {
+        $sql = "UPDATE ".$tabname[$id]." SET active = 0 WHERE code='".$_GET["code"]."'";
+    }
+
+    $result = $db->query($sql);
+    if (!$result)
+    {
+        dol_print_error($db);
+    }
+}
+
+// favorite
+if ($action == 'activate_favorite')
+{
+    if ($tabrowid[$id]) { $rowidcol=$tabrowid[$id]; }
+    else { $rowidcol="rowid"; }
+
+    if ($rowid) {
+        $sql = "UPDATE ".$tabname[$id]." SET favorite = 1 WHERE ".$rowidcol."='".$rowid."'";
+    }
+    elseif ($_GET["code"]) {
+        $sql = "UPDATE ".$tabname[$id]." SET favorite = 1 WHERE code='".$_GET["code"]."'";
+    }
+
+    $result = $db->query($sql);
+    if (!$result)
+    {
+        dol_print_error($db);
+    }
+}
+
+// disable favorite
+if ($action == 'disable_favorite')
+{
+    if ($tabrowid[$id]) { $rowidcol=$tabrowid[$id]; }
+    else { $rowidcol="rowid"; }
+
+    if ($rowid) {
+        $sql = "UPDATE ".$tabname[$id]." SET favorite = 0 WHERE ".$rowidcol."='".$rowid."'";
+    }
+    elseif ($_GET["code"]) {
+        $sql = "UPDATE ".$tabname[$id]." SET favorite = 0 WHERE code='".$_GET["code"]."'";
+    }
+
+    $result = $db->query($sql);
+    if (!$result)
+    {
+        dol_print_error($db);
+    }
+}
+
+
+/*
+ * View
+ */
+
+$form = new Form($db);
+$formadmin=new FormAdmin($db);
+
+llxHeader();
+
+$titre=$langs->trans("DictionarySetup");
+$linkback='';
+if ($id)
+{
+    $titre.=' - '.$langs->trans($tablib[$id]);
+    $linkback='<a href="'.$_SERVER['PHP_SELF'].'">'.$langs->trans("BackToDictionaryList").'</a>';
+}
+$titlepicto='title_setup';
+if ($id == 10 && GETPOST('from') == 'accountancy')
+{
+    $titre=$langs->trans("MenuVatAccounts");
+    $titlepicto='title_accountancy';
+}
+if ($id == 7 && GETPOST('from') == 'accountancy')
+{
+    $titre=$langs->trans("MenuTaxAccounts");
+    $titlepicto='title_accountancy';
+}
+
+print load_fiche_titre($titre,$linkback,$titlepicto);
+
+if (empty($id))
+{
+    print $langs->trans("DictionaryDesc");
+    print " ".$langs->trans("OnlyActiveElementsAreShown")."<br>\n";
+}
+print "<br>\n";
+
+
+// Confirmation de la suppression de la ligne
+if ($action == 'delete')
+{
+    print $form->formconfirm($_SERVER["PHP_SELF"].'?'.($page?'page='.$page.'&':'').'sortfield='.$sortfield.'&sortorder='.$sortorder.'&rowid='.$rowid.'&code='.$_GET["code"].'&id='.$id, $langs->trans('DeleteLine'), $langs->trans('ConfirmDeleteLine'), 'confirm_delete','',0,1);
+}
+//var_dump($elementList);
+
+/*
+ * Show a dictionary
+ */
+if ($id)
+{
+    // Complete requete recherche valeurs avec critere de tri
+    $sql=$tabsql[$id];
+
+    if ($search_country_id > 0)
+    {
+        if (preg_match('/ WHERE /',$sql)) $sql.= " AND ";
+        else $sql.=" WHERE ";
+        $sql.= " c.rowid = ".$search_country_id;
+    }
+    
+    if ($sortfield)
+    {
+        // If sort order is "country", we use country_code instead
+    	if ($sortfield == 'country') $sortfield='country_code';
+        $sql.= " ORDER BY ".$sortfield;
+        if ($sortorder)
+        {
+            $sql.=" ".strtoupper($sortorder);
+        }
+        $sql.=", ";
+        // Clear the required sort criteria for the tabsqlsort to be able to force it with selected value
+        $tabsqlsort[$id]=preg_replace('/([a-z]+\.)?'.$sortfield.' '.$sortorder.',/i','',$tabsqlsort[$id]);
+        $tabsqlsort[$id]=preg_replace('/([a-z]+\.)?'.$sortfield.',/i','',$tabsqlsort[$id]);
+    }
+    else {
+        $sql.=" ORDER BY ";
+    }
+    $sql.=$tabsqlsort[$id];
+    $sql.=$db->plimit($listlimit+1,$offset);
+    //print $sql;
+
+    $fieldlist=explode(',',$tabfield[$id]);
+
+    print '<form action="'.$_SERVER['PHP_SELF'].'?id='.$id.'" method="POST">';
+    print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
+    print '<input type="hidden" name="from" value="'.dol_escape_htmltag(GETPOST('from','alpha')).'">';
+    
+    print '<table class="noborder" width="100%">';
+
+    // Form to add a new line
+    if ($tabname[$id])
+    {
+        $alabelisused=0;
+        $var=false;
+
+        $fieldlist=explode(',',$tabfield[$id]);
+
+        // Line for title
+        print '<tr class="liste_titre">';
+        foreach ($fieldlist as $field => $value)
+        {
+            // Determine le nom du champ par rapport aux noms possibles
+            // dans les dictionnaires de donnees
+            $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='center';
+            }
+            if ($fieldlist[$field]=='localtax1_type')  { $valuetoshow=$langs->trans("UseLocalTax")." 2"; $align="center"; $sortable=0; }
+            if ($fieldlist[$field]=='localtax1')       { $valuetoshow=$langs->trans("Rate")." 2"; $align="center"; }
+            if ($fieldlist[$field]=='localtax2_type')  { $valuetoshow=$langs->trans("UseLocalTax")." 3"; $align="center"; $sortable=0; }
+            if ($fieldlist[$field]=='localtax2')       { $valuetoshow=$langs->trans("Rate")." 3"; $align="center"; }
+            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' || $fieldlist[$field]=='nx') { $valuetoshow=$langs->trans("Width"); }
+            if ($fieldlist[$field]=='height' || $fieldlist[$field]=='ny') { $valuetoshow=$langs->trans("Height"); }
+            if ($fieldlist[$field]=='unit' || $fieldlist[$field]=='metric') { $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]=='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 ($fieldlist[$field]=='paper_size')      { $valuetoshow=$langs->trans("PaperSize"); }
+			if ($fieldlist[$field]=='orientation')     { $valuetoshow=$langs->trans("Orientation"); }
+			if ($fieldlist[$field]=='leftmargin')      { $valuetoshow=$langs->trans("LeftMargin"); }
+			if ($fieldlist[$field]=='topmargin')       { $valuetoshow=$langs->trans("TopMargin"); }
+			if ($fieldlist[$field]=='spacex')          { $valuetoshow=$langs->trans("SpaceX"); }
+			if ($fieldlist[$field]=='spacey')          { $valuetoshow=$langs->trans("SpaceY"); }
+			if ($fieldlist[$field]=='font_size')       { $valuetoshow=$langs->trans("FontSize"); }
+			if ($fieldlist[$field]=='custom_x')        { $valuetoshow=$langs->trans("CustomX"); }
+			if ($fieldlist[$field]=='custom_y')        { $valuetoshow=$langs->trans("CustomY"); }
+			if ($fieldlist[$field]=='content')         { $valuetoshow=$langs->trans("Content"); }
+			if ($fieldlist[$field]=='percent')         { $valuetoshow=$langs->trans("Percentage"); }
+			if ($fieldlist[$field]=='affect')          { $valuetoshow=$langs->trans("Info"); }
+			if ($fieldlist[$field]=='delay')           { $valuetoshow=$langs->trans("NoticePeriod"); }
+			if ($fieldlist[$field]=='newbymonth')      { $valuetoshow=$langs->trans("NewByMonth"); }
+				
+            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 != '')
+            {
+                print '<td align="'.$align.'">';
+            	if (! empty($tabhelp[$id][$value]) && preg_match('/^http(s*):/i',$tabhelp[$id][$value])) print '<a href="'.$tabhelp[$id][$value].'" target="_blank">'.$valuetoshow.' '.img_help(1,$valuetoshow).'</a>';
+            	else if (! empty($tabhelp[$id][$value])) print $form->textwithpicto($valuetoshow,$tabhelp[$id][$value]);
+            	else print $valuetoshow;
+                print '</td>';
+             }
+             if ($fieldlist[$field]=='libelle' || $fieldlist[$field]=='label') $alabelisused=1;
+        }
+
+        if ($id == 4) print '<td></td>';
+        print '<td>';
+        print '<input type="hidden" name="id" value="'.$id.'">';
+        print '</td>';
+        print '<td style="min-width: 26px;"></td>';
+        print '<td style="min-width: 26px;"></td>';
+        print '<td style="min-width: 26px;"></td>';
+        print '</tr>';
+
+        // Line to enter new values
+        print "<tr ".$bcnd[$var].">";
+
+        $obj = new stdClass();
+        // If data was already input, we define them in obj to populate input fields.
+        if (GETPOST('actionadd'))
+        {
+            foreach ($fieldlist as $key=>$val)
+            {
+                if (GETPOST($val) != '')
+                	$obj->$val=GETPOST($val);
+            }
+        }
+
+        $tmpaction = 'create';
+        $parameters=array('fieldlist'=>$fieldlist, 'tabname'=>$tabname[$id]);
+        $reshook=$hookmanager->executeHooks('createDictionaryFieldlist',$parameters, $obj, $tmpaction);    // Note that $action and $object may have been modified by some hooks
+        $error=$hookmanager->error; $errors=$hookmanager->errors;
+
+        if (empty($reshook))
+        {
+        	if ($tabname[$id] == MAIN_DB_PREFIX.'c_email_templates' && $action == 'edit')
+        	{
+				fieldList($fieldlist,$obj,$tabname[$id],'hide');
+        	}
+        	else
+        	{
+        		fieldList($fieldlist,$obj,$tabname[$id],'add');
+        	}
+        }
+
+        print '<td colspan="4" align="right">';
+        if ($tabname[$id] != MAIN_DB_PREFIX.'c_email_templates' || $action != 'edit')
+        {
+        	print '<input type="submit" class="button" name="actionadd" value="'.$langs->trans("Add").'">';
+        }
+        print '</td>';
+        print "</tr>";
+
+        if ($tabname[$id] == MAIN_DB_PREFIX.'c_email_templates')
+        {
+        	print '<tr><td colspan="8">* '.$langs->trans("AvailableVariables").": ";
+        	require_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php';
+        	$formmail=new FormMail($db);
+        	$tmp=$formmail->getAvailableSubstitKey('form');
+        	print implode(', ', $tmp);
+        	print '</td></tr>';
+        }
+
+        $colspan=count($fieldlist)+3;
+        if ($id == 4) $colspan++;
+
+        if (! empty($alabelisused))  // If there is one label among fields, we show legend of *
+        {
+        	print '<tr><td colspan="'.$colspan.'">* '.$langs->trans("LabelUsedByDefault").'.</td></tr>';
+        }
+        print '<tr><td colspan="'.$colspan.'">&nbsp;</td></tr>';	// Keep &nbsp; to have a line with enough height
+    }
+
+
+
+    // List of available record in database
+    dol_syslog("htdocs/admin/dict", LOG_DEBUG);
+    $resql=$db->query($sql);
+    if ($resql)
+    {
+        $num = $db->num_rows($resql);
+        $i = 0;
+        $var=true;
+
+        $param = '&id='.$id;
+        if ($search_country_id > 0) $param.= '&search_country_id='.$search_country_id;
+        $paramwithsearch = $param;
+        if ($sortorder) $paramwithsearch.= '&sortorder='.$sortorder;
+        if ($sortfield) $paramwithsearch.= '&sortfield='.$sortfield;
+        if (GETPOST('from')) $paramwithsearch.= '&from='.GETPOST('from','alpha');
+        
+        // There is several pages
+        if ($num > $listlimit)
+        {
+            print '<tr class="none"><td align="right" colspan="'.(3+count($fieldlist)).'">';
+            print_fleche_navigation($page, $_SERVER["PHP_SELF"], $paramwithsearch, ($num > $listlimit), '<li class="pagination"><span>'.$langs->trans("Page").' '.($page+1).'</span></li>');
+            print '</td></tr>';
+        }
+
+        // Title of lines
+        print '<tr class="liste_titre liste_titre_add">';
+        foreach ($fieldlist as $field => $value)
+        {
+            // Determine le nom du champ par rapport aux noms possibles
+            // dans les dictionnaires de donnees
+            $showfield=1;							  	// By defaut
+            $align="left";
+            $sortable=1;
+            $valuetoshow='';
+            /*
+            $tmparray=getLabelOfField($fieldlist[$field]);
+            $showfield=$tmp['showfield'];
+            $valuetoshow=$tmp['valuetoshow'];
+            $align=$tmp['align'];
+            $sortable=$tmp['sortable'];
+			*/
+            $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='center';
+            }
+            if ($fieldlist[$field]=='localtax1_type')  { $valuetoshow=$langs->trans("UseLocalTax")." 2"; $align="center"; $sortable=0; }
+            if ($fieldlist[$field]=='localtax1')       { $valuetoshow=$langs->trans("Rate")." 2"; $align="center"; $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"; $align="center"; $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' || $fieldlist[$field]=='nx') { $valuetoshow=$langs->trans("Width"); }
+            if ($fieldlist[$field]=='height' || $fieldlist[$field]=='ny') { $valuetoshow=$langs->trans("Height"); }
+            if ($fieldlist[$field]=='unit' || $fieldlist[$field]=='metric') { $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]=='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"); }
+			if ($fieldlist[$field]=='paper_size')      { $valuetoshow=$langs->trans("PaperSize"); }
+			if ($fieldlist[$field]=='orientation')     { $valuetoshow=$langs->trans("Orientation"); }
+			if ($fieldlist[$field]=='leftmargin')      { $valuetoshow=$langs->trans("LeftMargin"); }
+			if ($fieldlist[$field]=='topmargin')       { $valuetoshow=$langs->trans("TopMargin"); }
+			if ($fieldlist[$field]=='spacex')          { $valuetoshow=$langs->trans("SpaceX"); }
+			if ($fieldlist[$field]=='spacey')          { $valuetoshow=$langs->trans("SpaceY"); }
+			if ($fieldlist[$field]=='font_size')       { $valuetoshow=$langs->trans("FontSize"); }
+			if ($fieldlist[$field]=='custom_x')        { $valuetoshow=$langs->trans("CustomX"); }
+			if ($fieldlist[$field]=='custom_y')        { $valuetoshow=$langs->trans("CustomY"); }
+			if ($fieldlist[$field]=='content')         { $valuetoshow=$langs->trans("Content"); }
+			if ($fieldlist[$field]=='percent')         { $valuetoshow=$langs->trans("Percentage"); }
+			if ($fieldlist[$field]=='affect')          { $valuetoshow=$langs->trans("Info"); }
+			if ($fieldlist[$field]=='delay')           { $valuetoshow=$langs->trans("NoticePeriod"); }
+			if ($fieldlist[$field]=='newbymonth')      { $valuetoshow=$langs->trans("NewByMonth"); }
+
+            // Affiche nom du champ
+            if ($showfield)
+            {
+                print getTitleFieldOfList($valuetoshow, 0, $_SERVER["PHP_SELF"], ($sortable?$fieldlist[$field]:''), ($page?'page='.$page.'&':''), $param, "align=".$align, $sortfield, $sortorder);
+            }
+        }
+		// Favorite - Only activated on country dictionary
+        if ($id == 4) print getTitleFieldOfList($langs->trans("Favorite"), 0, $_SERVER["PHP_SELF"], "favorite", ($page?'page='.$page.'&':''), $param, 'align="center"', $sortfield, $sortorder);
+
+		print getTitleFieldOfList($langs->trans("Status"), 0, $_SERVER["PHP_SELF"], "active", ($page?'page='.$page.'&':''), $param, 'align="center"', $sortfield, $sortorder);
+        print getTitleFieldOfList('');
+        print getTitleFieldOfList('');
+        print getTitleFieldOfList('');
+        print '</tr>';
+
+        // Title line with search boxes
+        print '<tr class="liste_titre">';
+        $filterfound=0;
+        foreach ($fieldlist as $field => $value)
+        {
+            $showfield=1;							  	// By defaut
+            
+            if ($fieldlist[$field]=='region_id' || $fieldlist[$field]=='country_id') { $showfield=0; }
+            
+            if ($showfield)
+            {
+                if ($value == 'country')
+                {
+                    print '<td class="liste_titre">';
+                    print $form->select_country($search_country_id, 'search_country_id', '', 28, 'maxwidth200 maxwidthonsmartphone');
+                    print '</td>';
+                    $filterfound++;
+                }
+                else
+                {
+                    print '<td class="liste_titre"></td>';
+                }
+            }
+        }
+        if ($id == 4) print '<td></td>';
+        print '<td class="liste_titre"></td>';
+    	print '<td class="liste_titre" colspan="3" align="center">';
+    	if ($filterfound)
+    	{
+        	$searchpitco=$form->showFilterAndCheckAddButtons(0);
+        	print $searchpitco;
+    	}
+    	print '</td>';
+        print '</tr>';
+            
+        if ($num)
+        {
+            // Lines with values
+            while ($i < $num)
+            {
+                $var = ! $var;
+
+                $obj = $db->fetch_object($resql);
+                //print_r($obj);
+                print '<tr '.$bc[$var].' id="rowid-'.$obj->rowid.'">';
+                if ($action == 'edit' && ($rowid == (! empty($obj->rowid)?$obj->rowid:$obj->code)))
+                {
+                    $tmpaction='edit';
+                    $parameters=array('fieldlist'=>$fieldlist, 'tabname'=>$tabname[$id]);
+                    $reshook=$hookmanager->executeHooks('editDictionaryFieldlist',$parameters,$obj, $tmpaction);    // Note that $action and $object may have been modified by some hooks
+                    $error=$hookmanager->error; $errors=$hookmanager->errors;
+
+                    // Show fields
+                    if (empty($reshook)) fieldList($fieldlist,$obj,$tabname[$id],'edit');
+
+                    print '<td colspan="3" align="center">';
+                    print '<input type="hidden" name="page" value="'.$page.'">';
+                    print '<input type="hidden" name="rowid" value="'.$rowid.'">';
+                    print '<input type="submit" class="button" name="actionmodify" value="'.$langs->trans("Modify").'">';
+                    print '<div name="'.(! empty($obj->rowid)?$obj->rowid:$obj->code).'"></div>';
+                    print '<input type="submit" class="button" name="actioncancel" value="'.$langs->trans("Cancel").'">';
+                    print '</td>';
+                }
+                else
+                {
+	              	$tmpaction = 'view';
+                    $parameters=array('var'=>$var, 'fieldlist'=>$fieldlist, 'tabname'=>$tabname[$id]);
+                    $reshook=$hookmanager->executeHooks('viewDictionaryFieldlist',$parameters,$obj, $tmpaction);    // Note that $action and $object may have been modified by some hooks
+
+                    $error=$hookmanager->error; $errors=$hookmanager->errors;
+
+                    if (empty($reshook))
+                    {
+                        foreach ($fieldlist as $field => $value)
+                        {
+                            
+                            $showfield=1;
+                        	$align="left";
+                            $valuetoshow=$obj->{$fieldlist[$field]};
+                            if ($value == 'type_template')
+                            {
+                                $valuetoshow = isset($elementList[$valuetoshow])?$elementList[$valuetoshow]:$valuetoshow;
+                            }
+                            if ($value == 'element')
+                            {
+                                $valuetoshow = isset($elementList[$valuetoshow])?$elementList[$valuetoshow]:$valuetoshow;
+                            }
+                            else if ($value == 'source')
+                            {
+                                $valuetoshow = isset($sourceList[$valuetoshow])?$sourceList[$valuetoshow]:$valuetoshow;
+                            }
+                            else if ($valuetoshow=='all') {
+                                $valuetoshow=$langs->trans('All');
+                            }
+                            else if ($fieldlist[$field]=='country') {
+                                if (empty($obj->country_code))
+                                {
+                                    $valuetoshow='-';
+                                }
+                                else
+                                {
+                                    $key=$langs->trans("Country".strtoupper($obj->country_code));
+                                    $valuetoshow=($key != "Country".strtoupper($obj->country_code)?$obj->country_code." - ".$key:$obj->country);
+                                }
+                            }
+                            else if ($fieldlist[$field]=='recuperableonly' || $fieldlist[$field] == 'deductible' || $fieldlist[$field] == 'category_type') {
+                                $valuetoshow=yn($valuetoshow);
+                                $align="center";
+                            }
+                            else if ($fieldlist[$field]=='type_cdr') {
+                				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->load("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->load("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->load('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->load("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->load("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->load("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->load("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->load('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') {
+                                $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->load("products");
+	                            $valuetoshow=$langs->trans($obj->{$fieldlist[$field]});
+                            }
+                            else if ($fieldlist[$field]=='short_label' && $tabname[$_GET["id"]]==MAIN_DB_PREFIX.'c_units') {
+	                            $langs->load("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]=='localtax1' || $fieldlist[$field]=='localtax2') {
+							    $align="center";
+							}
+							else if ($fieldlist[$field]=='localtax1_type') {
+                              if ($obj->localtax1 != 0)
+							    $valuetoshow=$localtax_typeList[$valuetoshow];
+							  else
+							    $valuetoshow = '';
+							  $align="center";
+							}
+							else if ($fieldlist[$field]=='localtax2_type') {
+							 if ($obj->localtax2 != 0)
+							    $valuetoshow=$localtax_typeList[$valuetoshow];
+							  else
+							    $valuetoshow = '';
+							  $align="center";
+							}
+							else if ($fieldlist[$field]=='taux') {
+                                $valuetoshow = price($valuetoshow, 0, $langs, 0, 0);
+							    $align="center";
+							}
+							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';
+							// Show value for field
+							if ($showfield) print '<!-- '.$fieldlist[$field].' --><td align="'.$align.'" class="'.$class.'">'.$valuetoshow.'</td>';
+                        }
+                    }
+
+                    // 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;
+                    $url.='&';
+
+					// Favorite
+					// Only activated on country dictionary
+                    if ($id == 4)
+					{
+						print '<td align="center" class="nowrap">';
+						if ($iserasable) print '<a href="'.$url.'action='.$acts[$obj->favorite].'_favorite">'.$actl[$obj->favorite].'</a>';
+						else print $langs->trans("AlwaysActive");
+						print '</td>';
+					}
+
+                    // Active
+                    print '<td align="center" class="nowrap">';
+                    if ($canbedisabled) print '<a href="'.$url.'action='.$acts[$obj->active].'">'.$actl[$obj->active].'</a>';
+                    else
+                 	{
+                 		if (in_array($obj->code, array('AC_OTH','AC_OTH_AUTO'))) print $langs->trans("AlwaysActive");
+                 		else if (isset($obj->type) && in_array($obj->type, array('systemauto')) && empty($obj->active)) print $langs->trans("Deprecated");
+                  		else if (isset($obj->type) && in_array($obj->type, array('system')) && ! empty($obj->active) && $obj->code != 'AC_OTH') print $langs->trans("UsedOnlyWithTypeOption");
+                    	else print $langs->trans("AlwaysActive");
+                    }
+                    print "</td>";
+
+                    // Modify link
+                    if ($canbemodified) print '<td align="center"><a class="reposition" href="'.$url.'action=edit">'.img_edit().'</a></td>';
+                    else print '<td>&nbsp;</td>';
+
+                    // Delete link
+                    if ($iserasable)
+                    {
+                        print '<td align="center">';
+                        if ($user->admin) print '<a href="'.$url.'action=delete">'.img_delete().'</a>';
+                        //else print '<a href="#">'.img_delete().'</a>';    // Some dictionnary can be edited by other profile than admin
+                        print '</td>';
+                    }
+                    else print '<td>&nbsp;</td>';
+
+                    // Link to setup the group
+                    print '<td>';
+                    if (empty($obj->formula))
+                    {
+                        print '<a href="'.DOL_URL_ROOT.'/accountancy/admin/categories.php?action=display&account_category='.$obj->rowid.'">'.$langs->trans("Setup").'</a>';
+                    }
+                    print '</td>';
+                    print "</tr>\n";
+                }
+                $i++;
+            }
+        }
+    }
+    else {
+        dol_print_error($db);
+    }
+
+    print '</table>';
+
+    print '</form>';
+}
+
+print '<br>';
+
+
+llxFooter();
+$db->close();
+
+
+/**
+ *	Show fields in insert/edit mode
+ *
+ * 	@param		array	$fieldlist		Array of fields
+ * 	@param		Object	$obj			If we show a particular record, obj is filled with record fields
+ *  @param		string	$tabname		Name of SQL table
+ *  @param		string	$context		'add'=Output field for the "add form", 'edit'=Output field for the "edit form", 'hide'=Output field for the "add form" but we dont want it to be rendered
+ *	@return		void
+ */
+function fieldList($fieldlist, $obj='', $tabname='', $context='')
+{
+	global $conf,$langs,$db;
+	global $form;
+	global $region_id;
+	global $elementList,$sourceList,$localtax_typeList;
+	global $bc;
+
+	$formadmin = new FormAdmin($db);
+	$formcompany = new FormCompany($db);
+	if (! empty($conf->accounting->enabled)) $formaccountancy = new FormVentilation($db);
+
+	foreach ($fieldlist as $field => $value)
+	{
+		if ($fieldlist[$field] == 'country')
+		{
+			if (in_array('region_id',$fieldlist))
+			{
+				print '<td>';
+				//print join(',',$fieldlist);
+				print '</td>';
+				continue;
+			}	// For state page, we do not show the country input (we link to region, not country)
+			print '<td>';
+			$fieldname='country';
+			print $form->select_country((! empty($obj->country_code)?$obj->country_code:(! empty($obj->country)?$obj->country:'')), $fieldname, '', 28, 'maxwidth200 maxwidthonsmartphone');
+			print '</td>';
+		}
+		elseif ($fieldlist[$field] == 'country_id')
+		{
+			if (! in_array('country',$fieldlist))	// If there is already a field country, we don't show country_id (avoid duplicate)
+			{
+				$country_id = (! empty($obj->{$fieldlist[$field]}) ? $obj->{$fieldlist[$field]} : 0);
+				print '<td>';
+				print '<input type="hidden" name="'.$fieldlist[$field].'" value="'.$country_id.'">';
+				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') {
+		    if ($fieldlist[$field] == 'type_cdr') print '<td align="center">';
+		    else print '<td>';
+			if ($fieldlist[$field] == 'type_cdr') {
+				print $form->selectarray($fieldlist[$field], array(0=>$langs->trans('None'), 1=>$langs->trans('AtEndOfMonth'), 2=>$langs->trans('CurrentNext')), (! empty($obj->{$fieldlist[$field]})?$obj->{$fieldlist[$field]}:''));
+			} else {
+				print $form->selectyesno($fieldlist[$field],(! empty($obj->{$fieldlist[$field]})?$obj->{$fieldlist[$field]}:''),1);
+			}
+			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="center";	// 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')))
+		{
+			if ($tabname == MAIN_DB_PREFIX.'c_email_templates')
+			{
+				print '<td colspan="4"></td></tr><tr class="pair nohover"><td colspan="5">';		// To create an artificial CR for the current tr we are on
+			}
+			else 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;
+				if ($tabname == MAIN_DB_PREFIX.'c_email_templates' && empty($conf->global->FCKEDITOR_ENABLE_MAIL)) $okforextended=false;
+				$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 minwidth75" value="'.price((! empty($obj->{$fieldlist[$field]})?$obj->{$fieldlist[$field]}:'')).'" name="'.$fieldlist[$field].'"></td>';
+		}
+		elseif ($fieldlist[$field] == 'code' && isset($obj->{$fieldlist[$field]})) {
+			print '<td><input type="text" class="flat minwidth100" value="'.(! empty($obj->{$fieldlist[$field]})?$obj->{$fieldlist[$field]}:'').'" name="'.$fieldlist[$field].'"></td>';
+		}
+		elseif ($fieldlist[$field]=='unit') {
+			print '<td>';
+			$units = array(
+					'mm' => $langs->trans('SizeUnitmm'),
+					'cm' => $langs->trans('SizeUnitcm'),
+					'point' => $langs->trans('SizeUnitpoint'),
+					'inch' => $langs->trans('SizeUnitinch')
+			);
+			print $form->selectarray('unit', $units, (! empty($obj->{$fieldlist[$field]})?$obj->{$fieldlist[$field]}:''), 0, 0, 0);
+			print '</td>';
+		}
+		// Le type de taxe locale
+		elseif ($fieldlist[$field] == 'localtax1_type' || $fieldlist[$field] == 'localtax2_type')
+		{
+			print '<td align="center">';
+			print $form->selectarray($fieldlist[$field], $localtax_typeList, (! empty($obj->{$fieldlist[$field]})?$obj->{$fieldlist[$field]}:''));
+			print '</td>';
+		}
+		elseif ($fieldlist[$field] == 'accountancy_code' || $fieldlist[$field] == 'accountancy_code_sell' || $fieldlist[$field] == 'accountancy_code_buy')
+		{
+			print '<td>';
+			if (! empty($conf->accounting->enabled))
+			{
+			    $fieldname = $fieldlist[$field];
+				$accountancy_account = (! empty($obj->$fieldname) ? $obj->$fieldname : 0);
+				print $formaccountancy->select_account($accountancy_account, $fieldlist[$field], 1, '', 1, 1, 'maxwidth200 maxwidthonsmartphone');
+			}
+			else
+			{
+			    $fieldname = $fieldlist[$field];
+			    print '<input type="text" size="10" class="flat" value="'.(isset($obj->$fieldname)?$obj->$fieldname:'').'" name="'.$fieldlist[$field].'">';
+			}
+			print '</td>';
+		}
+		else
+		{
+			print '<td>';
+			$size=''; $class='';
+			if ($fieldlist[$field]=='code') $class='maxwidth100';
+			if ($fieldlist[$field]=='position') $class='maxwidth50';
+			if ($fieldlist[$field]=='libelle') $class='quatrevingtpercent';
+			if ($fieldlist[$field]=='tracking') $class='quatrevingtpercent';
+			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>';
+		}
+	}
+}
+

+ 3 - 3
htdocs/accountancy/bookkeeping/balance.php

@@ -184,7 +184,7 @@ else {
     print '<table class="liste ' . ($moreforfilter ? "listwithfilterbefore" : "") . '">';
     print '<tr class="liste_titre">';
     print_liste_field_titre($langs->trans("AccountAccounting"), $_SERVER['PHP_SELF'], "t.numero_compte", "", $options, "", $sortfield, $sortorder);
-    print_liste_field_titre($langs->trans("Labelcompte"), $_SERVER['PHP_SELF'], "t.label_compte", "", $options, "", $sortfield, $sortorder);
+    print_liste_field_titre($langs->trans("Label"), $_SERVER['PHP_SELF'], "t.label_compte", "", $options, "", $sortfield, $sortorder);
     print_liste_field_titre($langs->trans("Debit"), $_SERVER['PHP_SELF'], "t.debit", "", $options, 'align="right"', $sortfield, $sortorder);
     print_liste_field_titre($langs->trans("Credit"), $_SERVER['PHP_SELF'], "t.credit", "", $options, 'align="right"', $sortfield, $sortorder);
     print_liste_field_titre($langs->trans("Solde"), $_SERVER["PHP_SELF"], "", $options, "", 'align="right"', $sortfield, $sortorder);
@@ -192,7 +192,7 @@ else {
     print "</tr>\n";
     
     print '<tr class="liste_titre">';
-    print '<td class="liste_titre center" colspan="2">';
+    print '<td class="liste_titre" colspan="2">';
     print $langs->trans('From');
     print $formventilation->select_account($search_accountancy_code_start, 'search_accountancy_code_start', 1, array(), 1, 1, '');
     print '<br>';
@@ -229,7 +229,7 @@ else {
         if (empty($description)) {
             $link = '<a href="../admin/card.php?action=create&compte=' . length_accountg($line->numero_compte) . '">' . img_edit_add() . '</a>';
         }
-        print '<tr' . $bc[$var] . '>';
+        print '<tr ' . $bc[$var] . '>';
         
         // Permet d'afficher le compte comptable
         if ($root_account_description != $displayed_account) {

+ 12 - 8
htdocs/accountancy/bookkeeping/card.php

@@ -202,9 +202,11 @@ else if ($action == "confirm_create") {
 	}
 }
 
+
 /*
  * View
  */
+
 llxHeader();
 
 $html = new Form($db);
@@ -274,12 +276,12 @@ if ($action == 'create') {
 
 	print '<tr>';
 	print '<td>' . $langs->trans("Docref") . '</td>';
-	print '<td><input type="text" size="20" name="doc_ref" value=""/></td>';
+	print '<td><input type="text" class="minwidth200" name="doc_ref" value=""/></td>';
 	print '</tr>';
 
 	print '<tr>';
 	print '<td>' . $langs->trans("Doctype") . '</td>';
-	print '<td><input type="text" size="20" name="doc_type" value=""/></td>';
+	print '<td><input type="text" class="minwidth200" name="doc_type" value=""/></td>';
 	print '</tr>';
 
 	print '</table>';
@@ -345,6 +347,8 @@ if ($action == 'create') {
 			print '<input type="hidden" name="fk_doc" value="' . $book->fk_doc . '">' . "\n";
 			print '<input type="hidden" name="fk_docdet" value="' . $book->fk_docdet . '">' . "\n";
 
+			$var=False;
+			
 			print "<table class=\"noborder\" width=\"100%\">";
 			if (count($book->linesmvt) > 0) {
 
@@ -356,17 +360,17 @@ if ($action == 'create') {
 				print_liste_field_titre($langs->trans("AccountAccountingShort"));
 				print_liste_field_titre($langs->trans("Code_tiers"));
 				print_liste_field_titre($langs->trans("Labelcompte"));
-				print_liste_field_titre($langs->trans("Debit"), "", "", "", "", 'align="center"');
-				print_liste_field_titre($langs->trans("Credit"), "", "", "", "", 'align="center"');
-				print_liste_field_titre($langs->trans("Amount"), "", "", "", "", 'align="center"');
+				print_liste_field_titre($langs->trans("Debit"), "", "", "", "", 'align="right"');
+				print_liste_field_titre($langs->trans("Credit"), "", "", "", "", 'align="right"');
+				print_liste_field_titre($langs->trans("Amount"), "", "", "", "", 'align="right"');
 				print_liste_field_titre($langs->trans("Sens"), "", "", "", "", 'align="center"');
 				print_liste_field_titre($langs->trans("Action"), "", "", "", "", 'width="60" align="center"');
 
 				print "</tr>\n";
 
-				foreach ( $book->linesmvt as $line ) {
+				foreach ($book->linesmvt as $line) {
 					$var = ! $var;
-					print '<tr' . $bc[$var] . '>';
+					print '<tr ' . $bc[$var] . '>';
 
 					$total_debit += $line->debit;
 					$total_credit += $line->credit;
@@ -417,7 +421,7 @@ if ($action == 'create') {
 
 				if ($action == "" || $action == 'add') {
 					$var = ! $var;
-					print '<tr' . $bc[$var] . '>';
+					print '<tr ' . $bc[$var] . '>';
 					print '<td>';
 					print $formventilation->select_account($account_number, 'account_number', 0, array (), 1, 1, '');
 					print '</td>';

+ 76 - 77
htdocs/accountancy/bookkeeping/list.php

@@ -105,7 +105,6 @@ if ($action != 'export_csv' && ! isset($_POST['begin']) && ! isset($_GET['begin'
 
 
 
-
 /*
  * Action
  */
@@ -132,74 +131,7 @@ if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter.x") || GETP
 	$search_date_end = '';
 }
 
-if ($action == 'delbookkeeping') {
-
-	$import_key = GETPOST('importkey', 'alpha');
-
-	if (! empty($import_key)) {
-		$result = $object->deleteByImportkey($import_key);
-		if ($result < 0) {
-			setEventMessages($object->error, $object->errors, 'errors');
-		}
-		Header("Location: list.php");
-		exit();
-	}
-}
-if ($action == 'delbookkeepingyearconfirm') {
-
-	$delyear = GETPOST('delyear', 'int');
-	if ($delyear==-1) {
-		$delyear=0;
-	}
-	$deljournal = GETPOST('deljournal','alpha');
-	if ($deljournal==-1) {
-		$deljournal=0;
-	}
-
-	if (! empty($delyear) || ! empty($deljournal)) 
-	{
-		$result = $object->deleteByYearAndJournal($delyear,$deljournal);
-		if ($result < 0) {
-			setEventMessages($object->error, $object->errors, 'errors');
-		}
-		else
-		{
-		    setEventMessages("RecordDeleted", null, 'mesgs');
-		}
-		Header("Location: list.php");
-		exit;
-	}
-	else
-	{
-	    setEventMessages("NoRecordDeleted", null, 'warnings');
-	    Header("Location: list.php");
-	    exit;
-	}
-}
-if ($action == 'delmouvconfirm') {
-
-	$mvt_num = GETPOST('mvt_num', 'int');
-
-	if (! empty($mvt_num)) {
-		$result = $object->deleteMvtNum($mvt_num);
-		if ($result < 0) {
-		    setEventMessages($object->error, $object->errors, 'errors');
-		}
-		else
-		{
-		    setEventMessages($langs->trans("RecordDeleted"), null, 'mesgs');
-		}
-		Header("Location: list.php");
-		exit;
-	}
-}
-
-
-
-/*
- * View
- */
-
+// Must be after the remove filter action, before the export.
 $param = '';
 $filter = array ();
 if (! empty($search_date_start)) {
@@ -266,6 +198,68 @@ if (! empty($search_mvt_num)) {
     $param .= '&search_mvt_num=' . $search_mvt_num;
 }
 
+if ($action == 'delbookkeeping') {
+
+	$import_key = GETPOST('importkey', 'alpha');
+
+	if (! empty($import_key)) {
+		$result = $object->deleteByImportkey($import_key);
+		if ($result < 0) {
+			setEventMessages($object->error, $object->errors, 'errors');
+		}
+		Header("Location: list.php");
+		exit();
+	}
+}
+if ($action == 'delbookkeepingyearconfirm') {
+
+	$delyear = GETPOST('delyear', 'int');
+	if ($delyear==-1) {
+		$delyear=0;
+	}
+	$deljournal = GETPOST('deljournal','alpha');
+	if ($deljournal==-1) {
+		$deljournal=0;
+	}
+
+	if (! empty($delyear) || ! empty($deljournal)) 
+	{
+		$result = $object->deleteByYearAndJournal($delyear,$deljournal);
+		if ($result < 0) {
+			setEventMessages($object->error, $object->errors, 'errors');
+		}
+		else
+		{
+		    setEventMessages("RecordDeleted", null, 'mesgs');
+		}
+		Header("Location: list.php");
+		exit;
+	}
+	else
+	{
+	    setEventMessages("NoRecordDeleted", null, 'warnings');
+	    Header("Location: list.php");
+	    exit;
+	}
+}
+if ($action == 'delmouvconfirm') {
+
+	$mvt_num = GETPOST('mvt_num', 'int');
+
+	if (! empty($mvt_num)) {
+		$result = $object->deleteMvtNum($mvt_num);
+		if ($result < 0) {
+		    setEventMessages($object->error, $object->errors, 'errors');
+		}
+		else
+		{
+		    setEventMessages($langs->trans("RecordDeleted"), null, 'mesgs');
+		}
+		Header("Location: list.php");
+		exit;
+	}
+}
+
 if ($action == 'export_csv') {
 
     include DOL_DOCUMENT_ROOT . '/accountancy/class/accountancyexport.class.php';
@@ -287,6 +281,11 @@ if ($action == 'export_csv') {
     }
 }
 
+
+/*
+ * View
+ */
+
 $title_page = $langs->trans("Bookkeeping");
 
 llxHeader('', $title_page);
@@ -378,15 +377,15 @@ print_liste_field_titre($langs->trans("Docdate"), $_SERVER['PHP_SELF'], "t.doc_d
 print_liste_field_titre($langs->trans("Docref"), $_SERVER['PHP_SELF'], "t.doc_ref", "", $param, "", $sortfield, $sortorder);
 print_liste_field_titre($langs->trans("AccountAccountingShort"), $_SERVER['PHP_SELF'], "t.numero_compte", "", $param, "", $sortfield, $sortorder);
 print_liste_field_titre($langs->trans("Code_tiers"), $_SERVER['PHP_SELF'], "t.code_tiers", "", $param, "", $sortfield, $sortorder);
-print_liste_field_titre($langs->trans("Labelcompte"), $_SERVER['PHP_SELF'], "t.label_compte", "", $param, "", $sortfield, $sortorder);
+print_liste_field_titre($langs->trans("Label"), $_SERVER['PHP_SELF'], "t.label_compte", "", $param, "", $sortfield, $sortorder);
 print_liste_field_titre($langs->trans("Debit"), $_SERVER['PHP_SELF'], "t.debit", "", $param, 'align="right"', $sortfield, $sortorder);
 print_liste_field_titre($langs->trans("Credit"), $_SERVER['PHP_SELF'], "t.credit", "", $param, 'align="right"', $sortfield, $sortorder);
-print_liste_field_titre($langs->trans("Codejournal"), $_SERVER['PHP_SELF'], "t.code_journal", "", $param, 'align="right"', $sortfield, $sortorder);
+print_liste_field_titre($langs->trans("Codejournal"), $_SERVER['PHP_SELF'], "t.code_journal", "", $param, 'align="center"', $sortfield, $sortorder);
 print_liste_field_titre('', $_SERVER["PHP_SELF"], "", $param, "", 'width="60" align="center"', $sortfield, $sortorder);
 print "</tr>\n";
 
 print '<tr class="liste_titre">';
-print '<td class="liste_titre center"><input type="text" name="search_mvt_num" size="6" value="' . $search_mvt_num . '"></td>';
+print '<td class="liste_titre"><input type="text" name="search_mvt_num" size="6" value="' . dol_escape_htmltag($search_mvt_num) . '"></td>';
 print '<td class="liste_titre center">';
 print $langs->trans('From') . ': ';
 print $form->select_date($search_date_start, 'date_start', 0, 0, 1);
@@ -394,15 +393,15 @@ print '<br>';
 print $langs->trans('to') . ': ';
 print $form->select_date($search_date_end, 'date_end', 0, 0, 1);
 print '</td>';
-print '<td class="liste_titre center"><input type="text" name="search_doc_ref" size="8" value="' . $search_doc_ref . '"></td>';
-print '<td class="liste_titre center">';
+print '<td class="liste_titre"><input type="text" name="search_doc_ref" size="8" value="' . dol_escape_htmltag($search_doc_ref) . '"></td>';
+print '<td class="liste_titre">';
 print $langs->trans('From');
 print $formventilation->select_account($search_accountancy_code_start, 'search_accountancy_code_start', 1, array (), 1, 1, '');
 print '<br>';
 print $langs->trans('to');
 print $formventilation->select_account($search_accountancy_code_end, 'search_accountancy_code_end', 1, array (), 1, 1, '');
 print '</td>';
-print '<td class="liste_titre center">';
+print '<td class="liste_titre">';
 print $langs->trans('From');
 print $formventilation->select_auxaccount($search_accountancy_aux_code_start, 'search_accountancy_aux_code_start', 1);
 print '<br>';
@@ -414,8 +413,8 @@ print '<input type="text" size="7" class="flat" name="search_mvt_label" value="'
 print '</td>';
 print '<td class="liste_titre center">&nbsp;</td>';
 print '<td class="liste_titre center">&nbsp;</td>';
-print '<td class="liste_titre center" align="right"><input type="text" name="search_ledger_code" size="3" value="' . $search_ledger_code . '"></td>';
-print '<td class="liste_titre center" align="right">';
+print '<td class="liste_titre center"><input type="text" name="search_ledger_code" size="3" value="' . $search_ledger_code . '"></td>';
+print '<td class="liste_titre center">';
 $searchpitco=$form->showFilterAndCheckAddButtons(0);
 print $searchpitco;
 print '</td>';

+ 9 - 5
htdocs/accountancy/class/accountancycategory.class.php

@@ -149,23 +149,27 @@ class AccountancyCategory
 		$sql .= " AND asy.rowid = " . $conf->global->CHARTOFACCOUNTS;
 		$sql .= " AND aa.active = 1";
 
+		$this->db->begin();
+		
 		dol_syslog(__METHOD__, LOG_DEBUG);
 		$resql = $this->db->query($sql);
 		if (! $resql) {
 			$error ++;
 			$this->errors[] = "Error " . $this->db->lasterror();
+			$this->db->rollback();
 			return -1;
 		}
 
-		$this->db->begin();
-		while ( $obj = $this->db->fetch_object($resql)) {
-			if (array_key_exists(length_accountg($obj->account_number), $cpts)) {
+		while ( $obj = $this->db->fetch_object($resql)) 
+		{
+			if (array_key_exists(length_accountg($obj->account_number), $cpts)) 
+			{
 				$sql = "UPDATE " . MAIN_DB_PREFIX . "accounting_account";
 				$sql .= " SET fk_accounting_category=" . $id_cat;
 				$sql .= " WHERE rowid=".$obj->rowid;
 				dol_syslog(__METHOD__, LOG_DEBUG);
-				$resql = $this->db->query($sql);
-				if (! $resql) {
+				$resqlupdate = $this->db->query($sql);
+				if (! $resqlupdate) {
 					$error ++;
 					$this->errors[] = "Error " . $this->db->lasterror();
 				}

+ 10 - 10
htdocs/accountancy/customer/lines.php

@@ -170,31 +170,31 @@ if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) {
 	$sql .= " AND f.type IN (" . Facture::TYPE_STANDARD . "," . Facture::TYPE_STANDARD . "," . Facture::TYPE_CREDIT_NOTE . "," . Facture::TYPE_DEPOSIT . "," . Facture::TYPE_SITUATION . ")";
 }
 if (strlen(trim($search_invoice))) {
-	$sql .= " AND f.facnumber like '%" . $search_invoice . "%'";
+	$sql .= natural_search("f.facnumber", $search_invoice);
 }
 if (strlen(trim($search_ref))) {
-	$sql .= " AND p.ref like '%" . $search_ref . "%'";
+	$sql .= natural_search("p.ref", $search_ref);
 }
 if (strlen(trim($search_label))) {
-	$sql .= " AND p.label like '%" . $search_label . "%'";
+	$sql .= natural_search("p.label", $search_label);
 }
 if (strlen(trim($search_desc))) {
-	$sql .= " AND fd.description like '%" . $search_desc . "%'";
+	$sql .= natural_search("fd.description", $search_desc);
 }
 if (strlen(trim($search_amount))) {
-	$sql .= " AND fd.total_ht like '%" . $search_amount . "%'";
+	$sql .= natural_search("fd.total_ht", $search_amount, 1);
 }
 if (strlen(trim($search_account))) {
-	$sql .= " AND aa.account_number like '%" . $search_account . "%'";
+	$sql .= natural_search("aa.account_number", $search_account);
 }
 if (strlen(trim($search_vat))) {
-	$sql .= " AND (fd.tva_tx like '" . $search_vat . "%')";
+	$sql .= natural_search("fd.tva_tx", $search_vat);
 }
 if (strlen(trim($search_country))) {
-	$sql .= " AND (co.label like'" . $search_country . "%')";
+	$sql .= natural_search("co.label", $search_country);
 }
 if (strlen(trim($search_tvaintra))) {
-	$sql .= " AND (s.tva_intra like'" . $search_tvaintra . "%')";
+	$sql .= natural_search("s.tva_intra", $search_tva_intra);
 }
 $sql .= " AND f.entity IN (" . getEntity("facture", 0) . ")";    // We don't share object for accountancy
 $sql .= $db->order($sortfield, $sortorder);
@@ -283,7 +283,7 @@ if ($result) {
 	print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_account" value="' . dol_escape_htmltag($search_account) . '"></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"><input type="text" class="flat maxwidth50" name="search_tavintra" value="' . dol_escape_htmltag($search_tavintra) . '"></td>';
-	print '<td class="liste_titre" align="right">';
+	print '<td class="liste_titre" align="center">';
 	$searchpitco=$form->showFilterAndCheckAddButtons(1);
 	print $searchpitco;
 	print "</td></tr>\n";

+ 1 - 0
htdocs/accountancy/journal/expensereportsjournal.php

@@ -43,6 +43,7 @@ $langs->load("bills");
 $langs->load("other");
 $langs->load("main");
 $langs->load("accountancy");
+$langs->load("trips");
 
 $date_startmonth = GETPOST('date_startmonth');
 $date_startday = GETPOST('date_startday');

+ 9 - 9
htdocs/accountancy/supplier/lines.php

@@ -157,25 +157,25 @@ $sql.= " LEFT JOIN " . MAIN_DB_PREFIX . "product as p ON p.rowid = l.fk_product"
 $sql.= " WHERE f.rowid = l.fk_facture_fourn and f.fk_statut >= 1 AND l.fk_code_ventilation <> 0 ";
 $sql.= " AND aa.rowid = l.fk_code_ventilation";
 if (strlen(trim($search_invoice))) {
-	$sql .= " AND f.ref like '%" . $search_invoice . "%'";
+	$sql .= natural_search("f.ref", $search_invoice);
 }
 if (strlen(trim($search_ref))) {
-	$sql .= " AND p.ref like '%" . $search_ref . "%'";
+	$sql .= natural_search("p.ref", $search_ref);
 }
 if (strlen(trim($search_label))) {
-	$sql .= " AND p.label like '%" . $search_label . "%'";
+	$sql .= natural_search("p.label", $search_label);
 }
 if (strlen(trim($search_desc))) {
-	$sql .= " AND l.description like '%" . $search_desc . "%'";
+	$sql .= natural_search("l.description", $search_desc);
 }
 if (strlen(trim($search_amount))) {
-	$sql .= " AND l.total_ht like '%" . $search_amount . "%'";
+	$sql .= natural_search("l.total_ht", $search_amount, 1);
 }
 if (strlen(trim($search_account))) {
-	$sql .= " AND aa.account_number like '%" . $search_account . "%'";
+	$sql .= natural_search("aa.account_number", $search_account, 1);
 }
 if (strlen(trim($search_vat))) {
-	$sql .= " AND (l.tva_tx like '" . $search_vat . "%')";
+	$sql .= natural_search("l.tva_tx", $search_vat, 1);
 }
 $sql .= " AND f.entity IN (" . getEntity("facture_fourn", 0) . ")";  // We don't share object for accountancy
 
@@ -255,7 +255,7 @@ if ($result) {
 	
 	print '<tr class="liste_titre">';
     print '<td class="liste_titre"></td>';
-	print '<td><input type="text" class="flat maxwidth50" name="search_invoice" value="' . dol_escape_htmltag($search_invoice) . '"></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"></td>';
 	print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_ref" value="' . dol_escape_htmltag($search_ref) . '"></td>';
@@ -264,7 +264,7 @@ if ($result) {
 	print '<td class="liste_titre" align="right"><input type="text" class="flat maxwidth50" name="search_amount" value="' . dol_escape_htmltag($search_amount) . '"></td>';
 	print '<td class="liste_titre" align="center"><input type="text" class="flat maxwidth50" 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_account" value="' . dol_escape_htmltag($search_account) . '"></td>';
-    print '<td class="liste_titre" align="right">';
+    print '<td class="liste_titre" align="center">';
     $searchpitco=$form->showFilterAndCheckAddButtons(1);
     print $searchpitco;
     print '</td>';

+ 12 - 12
htdocs/admin/dict.php

@@ -86,7 +86,7 @@ $hookmanager->initHooks(array('admin'));
 // Put here declaration of dictionaries properties
 
 // Sort order to show dictionary (0 is space). All other dictionaries (added by modules) will be at end of this.
-$taborder=array(9,0,4,3,2,0,1,8,19,16,27,0,5,11,0,33,34,0,6,0,29,0,7,17,24,28,0,10,23,12,13,0,14,0,22,20,18,21,0,15,30,0,26,0,32,0);
+$taborder=array(9,0,4,3,2,0,1,8,19,16,27,0,5,11,0,33,34,0,6,0,29,0,7,17,24,28,0,10,23,12,13,0,14,0,22,20,18,21,0,15,30,0,26,0);
 
 // Name of SQL tables of dictionaries
 $tabname=array();
@@ -121,7 +121,7 @@ $tabname[28]= MAIN_DB_PREFIX."c_holiday_types";
 $tabname[29]= MAIN_DB_PREFIX."c_lead_status";
 $tabname[30]= MAIN_DB_PREFIX."c_format_cards";
 //$tabname[31]= MAIN_DB_PREFIX."accounting_system";
-$tabname[32]= MAIN_DB_PREFIX."c_accounting_category";
+//$tabname[32]= MAIN_DB_PREFIX."c_accounting_category";
 $tabname[33]= MAIN_DB_PREFIX."c_hrm_department";
 $tabname[34]= MAIN_DB_PREFIX."c_hrm_function";
 
@@ -158,7 +158,7 @@ $tablib[28]= "DictionaryHolidayTypes";
 $tablib[29]= "DictionaryOpportunityStatus";
 $tablib[30]= "DictionaryFormatCards";
 //$tablib[31]= "DictionaryAccountancysystem";
-$tablib[32]= "DictionaryAccountancyCategory";
+//$tablib[32]= "DictionaryAccountancyCategory";
 $tablib[33]= "DictionaryDepartment";
 $tablib[34]= "DictionaryFunction";
 
@@ -195,7 +195,7 @@ $tabsql[28]= "SELECT h.rowid as rowid, h.code, h.label, h.affect, h.delay, h.new
 $tabsql[29]= "SELECT rowid   as rowid, code, label, percent, position, active FROM ".MAIN_DB_PREFIX."c_lead_status";
 $tabsql[30]= "SELECT rowid, code, name, paper_size, orientation, metric, leftmargin, topmargin, nx, ny, spacex, spacey, width, height, font_size, custom_x, custom_y, active FROM ".MAIN_DB_PREFIX."c_format_cards";
 //$tabsql[31]= "SELECT s.rowid as rowid, pcg_version, s.label, s.active FROM ".MAIN_DB_PREFIX."accounting_system as s";
-$tabsql[32]= "SELECT a.rowid as rowid, a.code as code, a.label, a.range_account, a.sens, a.category_type, a.formula, a.position as position, a.fk_country as country_id, c.code as country_code, c.label as country, a.active FROM ".MAIN_DB_PREFIX."c_accounting_category as a, ".MAIN_DB_PREFIX."c_country as c WHERE a.fk_country=c.rowid and c.active=1";
+//$tabsql[32]= "SELECT a.rowid as rowid, a.code as code, a.label, a.range_account, a.sens, a.category_type, a.formula, a.position as position, a.fk_country as country_id, c.code as country_code, c.label as country, a.active FROM ".MAIN_DB_PREFIX."c_accounting_category as a, ".MAIN_DB_PREFIX."c_country as c WHERE a.fk_country=c.rowid and c.active=1";
 $tabsql[33]= "SELECT rowid, pos, code, label, active FROM ".MAIN_DB_PREFIX."c_hrm_department";
 $tabsql[34]= "SELECT rowid, pos, code, label, c_level, active FROM ".MAIN_DB_PREFIX."c_hrm_function";
 
@@ -232,7 +232,7 @@ $tabsqlsort[28]="country ASC, code ASC";
 $tabsqlsort[29]="position ASC";
 $tabsqlsort[30]="code ASC";
 //$tabsqlsort[31]="pcg_version ASC";
-$tabsqlsort[32]="position ASC";
+//$tabsqlsort[32]="position ASC";
 $tabsqlsort[33]="code ASC";
 $tabsqlsort[34]="code ASC";
 
@@ -269,7 +269,7 @@ $tabfield[28]= "code,label,affect,delay,newbymonth,country_id,country";
 $tabfield[29]= "code,label,percent,position";
 $tabfield[30]= "code,name,paper_size,orientation,metric,leftmargin,topmargin,nx,ny,spacex,spacey,width,height,font_size,custom_x,custom_y";
 //$tabfield[31]= "pcg_version,label";
-$tabfield[32]= "code,label,range_account,sens,category_type,formula,position,country_id,country";
+//$tabfield[32]= "code,label,range_account,sens,category_type,formula,position,country_id,country";
 $tabfield[33]= "code,label";
 $tabfield[34]= "code,label";
 
@@ -306,7 +306,7 @@ $tabfieldvalue[28]= "code,label,affect,delay,newbymonth,country";
 $tabfieldvalue[29]= "code,label,percent,position";
 $tabfieldvalue[30]= "code,name,paper_size,orientation,metric,leftmargin,topmargin,nx,ny,spacex,spacey,width,height,font_size,custom_x,custom_y";
 //$tabfieldvalue[31]= "pcg_version,label";
-$tabfieldvalue[32]= "code,label,range_account,sens,category_type,formula,position,country";
+//$tabfieldvalue[32]= "code,label,range_account,sens,category_type,formula,position,country";
 $tabfieldvalue[33]= "code,label";
 $tabfieldvalue[34]= "code,label";
 
@@ -343,7 +343,7 @@ $tabfieldinsert[28]= "code,label,affect,delay,newbymonth,fk_country";
 $tabfieldinsert[29]= "code,label,percent,position";
 $tabfieldinsert[30]= "code,name,paper_size,orientation,metric,leftmargin,topmargin,nx,ny,spacex,spacey,width,height,font_size,custom_x,custom_y";
 //$tabfieldinsert[31]= "pcg_version,label";
-$tabfieldinsert[32]= "code,label,range_account,sens,category_type,formula,position,fk_country";
+//$tabfieldinsert[32]= "code,label,range_account,sens,category_type,formula,position,fk_country";
 $tabfieldinsert[33]= "code,label";
 $tabfieldinsert[34]= "code,label";
 
@@ -382,7 +382,7 @@ $tabrowid[28]= "";
 $tabrowid[29]= "";
 $tabrowid[30]= "";
 //$tabrowid[31]= "";
-$tabrowid[32]= "";
+//$tabrowid[32]= "";
 $tabrowid[33]= "rowid";
 $tabrowid[34]= "rowid";
 
@@ -419,7 +419,7 @@ $tabcond[28]= ! empty($conf->holiday->enabled);
 $tabcond[29]= ! empty($conf->projet->enabled);
 $tabcond[30]= ! empty($conf->label->enabled);
 //$tabcond[31]= ! empty($conf->accounting->enabled);
-$tabcond[32]= ! empty($conf->accounting->enabled);
+//$tabcond[32]= ! empty($conf->accounting->enabled);
 $tabcond[33]= ! empty($conf->hrm->enabled);
 $tabcond[34]= ! empty($conf->hrm->enabled);
 
@@ -456,7 +456,7 @@ $tabhelp[28] = array('affect'=>$langs->trans("FollowedByACounter"),'delay'=>$lan
 $tabhelp[29] = array('code'=>$langs->trans("EnterAnyCode"), 'percent'=>$langs->trans("OpportunityPercent"), 'position'=>$langs->trans("PositionIntoComboList"));
 $tabhelp[30] = array('code'=>$langs->trans("EnterAnyCode"), 'name'=>$langs->trans("LabelName"), 'paper_size'=>$langs->trans("LabelPaperSize"));
 //$tabhelp[31] = array('pcg_version'=>$langs->trans("EnterAnyCode"));
-$tabhelp[32] = array('code'=>$langs->trans("EnterAnyCode"));
+//$tabhelp[32] = array('code'=>$langs->trans("EnterAnyCode"));
 $tabhelp[33] = array('code'=>$langs->trans("EnterAnyCode"));
 $tabhelp[34] = array('code'=>$langs->trans("EnterAnyCode"));
 
@@ -493,7 +493,7 @@ $tabfieldcheck[28] = array();
 $tabfieldcheck[29] = array();
 $tabfieldcheck[30] = array();
 //$tabfieldcheck[31] = array();
-$tabfieldcheck[32] = array();
+//$tabfieldcheck[32] = array();
 $tabfieldcheck[33] = array();
 $tabfieldcheck[34] = array();
 

+ 2 - 2
htdocs/comm/mailing/card.php

@@ -709,7 +709,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 minwidth200" 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')).'"></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>';
 
@@ -725,7 +725,7 @@ if ($action == 'create')
 	print '</br><br>';
 
 	print '<table class="border" width="100%">';
-	print '<tr><td class="fieldrequired titlefieldcreate">'.$langs->trans("MailTopic").'</td><td><input class="flat minwidth200" name="sujet" value="'.dol_escape_htmltag(GETPOST('sujet')).'"></td></tr>';
+	print '<tr><td class="fieldrequired titlefieldcreate">'.$langs->trans("MailTopic").'</td><td><input class="flat minwidth200 quatrevingtpercent" name="sujet" value="'.dol_escape_htmltag(GETPOST('sujet')).'"></td></tr>';
 	print '<tr><td>'.$langs->trans("BackgroundColorByDefault").'</td><td colspan="3">';
 	print $htmlother->selectColor($_POST['bgcolor'],'bgcolor','new_mailing',0);
 	print '</td></tr>';

+ 1 - 1
htdocs/compta/paiement.php

@@ -369,7 +369,7 @@ if ($action == 'create' || $action == 'confirm_paiement' || $action == 'add_paie
 			                    }
             					if ($(\'#fieldchqemetteur\').val() == \'\')
             					{
-            						var emetteur = ('.$facture->type.' == 2) ? \''.dol_escape_htmltag($conf->global->MAIN_INFO_SOCIETE_NOM).'\' : jQuery(\'#thirdpartylabel\').val();
+            						var emetteur = ('.$facture->type.' == 2) ? \''.dol_escape_js(dol_escape_htmltag($conf->global->MAIN_INFO_SOCIETE_NOM)).'\' : jQuery(\'#thirdpartylabel\').val();
             						$(\'#fieldchqemetteur\').val(emetteur);
             					}
             				}

+ 7 - 6
htdocs/core/class/html.formaccounting.class.php

@@ -50,13 +50,14 @@ class FormAccounting
      * 	@param	int		$useempty		Set to 1 if we want an empty value
      * 	@param	int		$maxlen			Max length of text in combo box
      * 	@param	int		$help			Add or not the admin help picto
+     *  @param  int     $allcountries   All countries
      * 	@return	void
      */
-    function select_accounting_category($selected='',$htmlname='account_category', $useempty=0, $maxlen=64, $help=1)
+    function select_accounting_category($selected='',$htmlname='account_category', $useempty=0, $maxlen=0, $help=1, $allcountries=0)
     {
         global $db,$langs,$user,$mysoc;
 
-        if (empty($mysoc->country_id) && empty($mysoc->country_code))
+        if (empty($mysoc->country_id) && empty($mysoc->country_code) && empty($allcountries))
         {
             dol_print_error('','Call to select_accounting_account with mysoc country not yet defined');
             exit;
@@ -68,7 +69,7 @@ class FormAccounting
             $sql.= " FROM ".MAIN_DB_PREFIX."c_accounting_category as c";
             $sql.= " WHERE c.active = 1";
 			$sql.= " AND c.category_type = 0";
-            $sql.= " AND c.fk_country = ".$mysoc->country_id;
+            if (empty($allcountries)) $sql.= " AND c.fk_country = ".$mysoc->country_id;
             $sql.= " ORDER BY c.label ASC";
         }
         else
@@ -78,7 +79,7 @@ class FormAccounting
             $sql.= " WHERE c.active = 1";
 			$sql.= " AND c.category_type = 0";
 			$sql.= " AND c.fk_country = co.rowid";
-            $sql.= " AND co.code = '".$mysoc->country_code."'";
+            if (empty($allcountries)) $sql.= " AND co.code = '".$mysoc->country_code."'";
             $sql.= " ORDER BY c.label ASC";
         }
 
@@ -89,7 +90,7 @@ class FormAccounting
             $num = $db->num_rows($resql);
             if ($num)
             {
-                print '<select class="flat" name="'.$htmlname.'">';
+                print '<select class="flat minwidth200" name="'.$htmlname.'">';
                 $i = 0;
 
                 if ($useempty) print '<option value="0">&nbsp;</option>';
@@ -98,7 +99,7 @@ class FormAccounting
                     $obj = $db->fetch_object($resql);
                     print '<option value="'.$obj->rowid.'"';
                     if ($obj->rowid == $selected) print ' selected';
-                    print '>'.dol_trunc($obj->type,$maxlen);
+                    print '>'.($maxlen ? dol_trunc($obj->type,$maxlen) : $obj->type);
 					print ' ('.$obj->range_account.')';
                     $i++;
                 }

+ 6 - 5
htdocs/core/menus/init_menu_auguria.sql

@@ -214,11 +214,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->accounting->enabled', __HANDLER__, 'left', 2451__+MAX_llx_menu__, 'accountancy', 'accountancy_admin',            2400__+MAX_llx_menu__, '/accountancy/index.php?mainmenu=accountancy&leftmenu=accountancy_admin', 'Setup', 1, 'accountancy', '$user->rights->accounting->chartofaccount', '', 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->accounting->enabled && $leftmenu=="accountancy_admin"', __HANDLER__, 'left', 2455__+MAX_llx_menu__, 'accountancy', 'accountancy_admin_chartmodel',    2451__+MAX_llx_menu__, '/accountancy/admin/account.php?mainmenu=accountancy&leftmenu=accountancy_admin', 'Pcg_version', 2, 'accountancy', '$user->rights->accounting->chartofaccount', '', 0, 10, __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->accounting->enabled && $leftmenu=="accountancy_admin"', __HANDLER__, 'left', 2456__+MAX_llx_menu__, 'accountancy', 'accountancy_admin_chart',         2451__+MAX_llx_menu__, '/accountancy/admin/account.php?mainmenu=accountancy&leftmenu=accountancy_admin', 'Chartofaccounts', 2, 'accountancy', '$user->rights->accounting->chartofaccount', '', 0, 20, __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->accounting->enabled && $leftmenu=="accountancy_admin"', __HANDLER__, 'left', 2457__+MAX_llx_menu__, 'accountancy', 'accountancy_admin_default',       2451__+MAX_llx_menu__, '/accountancy/admin/index.php?mainmenu=accountancy&leftmenu=accountancy_admin', 'MenuDefaultAccounts', 2, 'accountancy', '$user->rights->accounting->chartofaccount', '', 0, 30, __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->accounting->enabled && $leftmenu=="accountancy_admin"', __HANDLER__, 'left', 2458__+MAX_llx_menu__, 'accountancy', 'accountancy_admin_vat',           2451__+MAX_llx_menu__, '/admin/dict.php?id=10&from=accountancy&search_country_id='.$mysoc->country_id.'&mainmenu=accountancy&leftmenu=accountancy_admin', 'MenuVatAccounts', 2, 'accountancy', '$user->rights->accounting->chartofaccount', '', 0, 40, __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->accounting->enabled && $leftmenu=="accountancy_admin"', __HANDLER__, 'left', 2459__+MAX_llx_menu__, 'accountancy', 'accountancy_admin_tax',           2451__+MAX_llx_menu__, '/admin/dict.php?id=7&from=accountancy&search_country_id='.$mysoc->country_id.'&mainmenu=accountancy&leftmenu=accountancy_admin', 'MenuTaxAccounts', 2, 'accountancy', '$user->rights->accounting->chartofaccount', '', 0, 50, __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->accounting->enabled && $leftmenu=="accountancy_admin"', __HANDLER__, 'left', 2460__+MAX_llx_menu__, 'accountancy', 'accountancy_admin_expensereport', 2451__+MAX_llx_menu__, '/admin/dict.php?id=17&from=accountancy&mainmenu=accountancy&leftmenu=accountancy_admin', 'MenuExpenseReportAccounts', 2, 'accountancy', '$user->rights->accounting->chartofaccount', '', 0, 60, __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->accounting->enabled && $leftmenu=="accountancy_admin"', __HANDLER__, 'left', 2461__+MAX_llx_menu__, 'accountancy', 'accountancy_admin_product',       2451__+MAX_llx_menu__, '/accountancy/admin/productaccount.php?mainmenu=accountancy&leftmenu=accountancy_admin', 'MenuProductsAccounts', 2, 'accountancy', '$user->rights->accounting->chartofaccount', '', 0, 70, __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->accounting->enabled && $leftmenu=="accountancy_admin"', __HANDLER__, 'left', 2457__+MAX_llx_menu__, 'accountancy', 'accountancy_admin_chart_group',   2451__+MAX_llx_menu__, '/accountancy/admin/categories_list.php?id=32&mainmenu=accountancy&leftmenu=accountancy_admin', 'AccountingCategory', 2, 'accountancy', '$user->rights->accounting->chartofaccount', '', 0, 22, __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->accounting->enabled && $leftmenu=="accountancy_admin"', __HANDLER__, 'left', 2458__+MAX_llx_menu__, 'accountancy', 'accountancy_admin_default',       2451__+MAX_llx_menu__, '/accountancy/admin/defaultaccounts.php?mainmenu=accountancy&leftmenu=accountancy_admin', 'MenuDefaultAccounts', 2, 'accountancy', '$user->rights->accounting->chartofaccount', '', 0, 30, __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->accounting->enabled && $leftmenu=="accountancy_admin"', __HANDLER__, 'left', 2459__+MAX_llx_menu__, 'accountancy', 'accountancy_admin_vat',           2451__+MAX_llx_menu__, '/admin/dict.php?id=10&from=accountancy&search_country_id='.$mysoc->country_id.'&mainmenu=accountancy&leftmenu=accountancy_admin', 'MenuVatAccounts', 2, 'accountancy', '$user->rights->accounting->chartofaccount', '', 0, 40, __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->accounting->enabled && $leftmenu=="accountancy_admin"', __HANDLER__, 'left', 2460__+MAX_llx_menu__, 'accountancy', 'accountancy_admin_tax',           2451__+MAX_llx_menu__, '/admin/dict.php?id=7&from=accountancy&search_country_id='.$mysoc->country_id.'&mainmenu=accountancy&leftmenu=accountancy_admin', 'MenuTaxAccounts', 2, 'accountancy', '$user->rights->accounting->chartofaccount', '', 0, 50, __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->accounting->enabled && $leftmenu=="accountancy_admin"', __HANDLER__, 'left', 2461__+MAX_llx_menu__, 'accountancy', 'accountancy_admin_expensereport', 2451__+MAX_llx_menu__, '/admin/dict.php?id=17&from=accountancy&mainmenu=accountancy&leftmenu=accountancy_admin', 'MenuExpenseReportAccounts', 2, 'accountancy', '$user->rights->accounting->chartofaccount', '', 0, 60, __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->accounting->enabled && $leftmenu=="accountancy_admin"', __HANDLER__, 'left', 2462__+MAX_llx_menu__, 'accountancy', 'accountancy_admin_product',       2451__+MAX_llx_menu__, '/accountancy/admin/productaccount.php?mainmenu=accountancy&leftmenu=accountancy_admin', 'MenuProductsAccounts', 2, 'accountancy', '$user->rights->accounting->chartofaccount', '', 0, 70, __ENTITY__);
 	-- Binding
 	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', 2401__+MAX_llx_menu__, 'accountancy', 'dispatch_customer', 2400__+MAX_llx_menu__, '/accountancy/customer/index.php?leftmenu=dispatch_customer', 'CustomersVentilation', 1, 'accountancy', '$user->rights->accounting->bind->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->accounting->enabled && $leftmenu=="dispatch_customer"', __HANDLER__, 'left', 2402__+MAX_llx_menu__, 'accountancy', '', 2401__+MAX_llx_menu__, '/accountancy/customer/list.php', 'ToDispatch', 2, 'accountancy', '$user->rights->accounting->bind->write', '', 0, 3, __ENTITY__);

+ 1 - 0
htdocs/core/menus/standard/eldy.lib.php

@@ -945,6 +945,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
 				if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy/',$leftmenu)) $newmenu->add("/accountancy/index.php?leftmenu=accountancy_admin", $langs->trans("Setup"),1,$user->rights->accounting->chartofaccount, '', $mainmenu, 'accountancy_admin', 1);
 				if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy_admin/',$leftmenu)) $newmenu->add("/accountancy/admin/accountmodel.php?id=31&mainmenu=accountancy&leftmenu=accountancy_admin", $langs->trans("Pcg_version"),2, $user->rights->accounting->chartofaccount, '', $mainmenu, 'accountancy_admin_chartmodel', 10);
 				if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy_admin/',$leftmenu)) $newmenu->add("/accountancy/admin/account.php?mainmenu=accountancy&leftmenu=accountancy_admin", $langs->trans("Chartofaccounts"),2, $user->rights->accounting->chartofaccount, '', $mainmenu, 'accountancy_admin_chart', 20);
+				if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy_admin/',$leftmenu)) $newmenu->add("/accountancy/admin/categories_list.php?id=32&search_country_id=".$mysoc->country_id."&mainmenu=accountancy&leftmenu=accountancy_admin", $langs->trans("AccountingCategory"),2, $user->rights->accounting->chartofaccount, '', $mainmenu, 'accountancy_admin_chart', 22);
 				if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy_admin/',$leftmenu)) $newmenu->add("/accountancy/admin/defaultaccounts.php?mainmenu=accountancy&leftmenu=accountancy_admin", $langs->trans("MenuDefaultAccounts"),2, $user->rights->accounting->chartofaccount, '', $mainmenu, 'accountancy_admin_default', 40);
 				if (! empty($conf->facture->enabled) || ! empty($conf->fournisseur->enabled)) 
 				{

+ 3 - 1
htdocs/install/mysql/migration/repair.sql

@@ -305,7 +305,6 @@ DELETE FROM llx_c_shipment_mode where code IN (select code from tmp_c_shipment_m
 drop table tmp_c_shipment_mode;
 
 
-
 -- VMYSQL4.1 SET sql_mode = 'ALLOW_INVALID_DATES';
 -- VMYSQL4.1 update llx_expensereport set date_debut = date_create where DATE(STR_TO_DATE(date_debut, '%Y-%m-%d')) IS NULL;
 -- VMYSQL4.1 SET sql_mode = 'NO_ZERO_DATE';
@@ -321,3 +320,6 @@ drop table tmp_c_shipment_mode;
 -- VMYSQL4.1 SET sql_mode = 'NO_ZERO_DATE';
 -- VMYSQL4.1 update llx_expensereport set date_valid = date_fin where DATE(STR_TO_DATE(date_valid, '%Y-%m-%d')) IS NULL;
 
+-- VMYSQL4.1 SET sql_mode = 'ALLOW_INVALID_DATES';
+-- VMYSQL4.1 update llx_expensereport_det as ed set date = (select date_debut from llx_expensereport as e where ed.fk_expensereport = e.rowid) where DATE(STR_TO_DATE(date, '%Y-%m-%d')) < '1000-00-00';
+-- VMYSQL4.1 SET sql_mode = 'NO_ZERO_DATE';

+ 3 - 0
htdocs/langs/ar_SA/accountancy.lang

@@ -194,6 +194,8 @@ ChangeBinding=Change the binding
 
 ## Admin
 ApplyMassCategories=Apply mass categories
+AddAccountFromBookKeepingWithNoCategories=Add acccount already used with no categories
+CategoryDeleted=Category for the accounting account has been removed
 
 ## Export
 Exports=صادرات
@@ -209,6 +211,7 @@ Modelcsv_ciel=Export towards Sage Ciel Compta or Compta Evolution
 Modelcsv_quadratus=Export towards Quadratus QuadraCompta
 Modelcsv_ebp=Export towards EBP
 Modelcsv_cogilog=Export towards Cogilog
+ChartofaccountsId=Chart of accounts Id
 
 ## Tools - Init accounting account on product / service
 InitAccountancy=Init accountancy

+ 34 - 27
htdocs/langs/ar_SA/admin.lang

@@ -9,17 +9,20 @@ VersionDevelopment=تطويرية
 VersionUnknown=غير معروف
 VersionRecommanded=موصى بها
 FileCheck=Files integrity checker
-FileCheckDesc=This tool allows you to check the integrity of files of your application, comparing each files with the official ones. 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 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.
-FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified of removed.
+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)
 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 a certified 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=معالج لحفظ الجلسات
@@ -188,7 +191,9 @@ BoxesDesc=Widgets are components showing some information that you can add to pe
 OnlyActiveElementsAreShown=فقط العناصر من <a href="%s">النماذج المفعلة </a> سوف تظهر.
 ModulesDesc=Dolibarr modules define which functionality is enabled in software. Some modules require permissions you must grant to users, after enabling module. Click on button on/off to enable a module/feature.
 ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
-ModulesMarketPlaces=مزيد من وحدات...
+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 modules...
+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...
@@ -280,20 +285,21 @@ MenuHandlers=قائمة مناولي
 MenuAdmin=قائمة تحرير
 DoNotUseInProduction=لا تستخدمها مع المنتج
 ThisIsProcessToFollow=This is steps to process:
-ThisIsAlternativeProcessToFollow=هذا هو الإعداد بديل للعملية:
+ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
 StepNb=الخطوة %s
 FindPackageFromWebSite=العثور على الحزمة التي توفر ميزة تريد (على سبيل المثال على موقع الويب %s).
 DownloadPackageFromWebSite=تحميل الحزمة (على سبيل المثال من الموقع الرسمي على الإنترنت%s).
-UnpackPackageInDolibarrRoot=ملف حزمة فك إلى Dolibarr دليل خادم مخصص لوحدات <b>الخارجية:%s</b>
-SetupIsReadyForUse=الانتهاء من تركيب وDolibarr على استعداد لاستخدام هذا العنصر الجديد.
-NotExistsDirect=لم يتم تعريف الدليل الجذر بديل. <br>
-InfDirAlt=منذ الإصدار 3 من الممكن تعريف directory.This الجذر بديلة يسمح لك لتخزين ونفس المكان، والمكونات الإضافية والقوالب المخصصة. <br> مجرد إنشاء دليل على جذر Dolibarr (على سبيل المثال: مخصص). <br>
-InfDirExample=<br> ثم نعلن ذلك في conf.php ملف <br> $ dolibarr_main_url_root_alt = 'HTTP: // MYSERVER / مخصص " <br> $ dolibarr_main_document_root_alt = '/ مسار / لعام / dolibarr / htdocs / مخصص " <br> * وعلق هذه الخطوط مع "#"، إلى غير تعليق فقط إزالة الطابع.
+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='http://myserver/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=لهذه الخطوة، يمكنك إرسال حزمة باستخدام هذه الأداة: اختر ملف الوحدة النمطية
 CurrentVersion=Dolibarr النسخة الحالية
 CallUpdatePage=Go to the page that updates the database structure and data: %s.
 LastStableVersion=Latest stable version
-LastActivationDate=Last activation date
+LastActivationDate=Latest activation date
 UpdateServerOffline=خادم التحديث متواجد حاليا
 GenericMaskCodes=يمكنك إدخال أي قناع الترقيم. في هذا القناع ، وبعد ويمكن استخدام العلامات : <br> <b>(000000)</b> يطابق عدد الذي سيكون على كل يزداد ٪ s. كما تدخل العديد من أصفار على النحو المنشود طول المضادة. المضاد وسيتم الانتهاء من اصفار من اليسار من أجل الحصول على أكبر عدد اصفار كما القناع. <br> <b>000000 +000) (نفس</b> السابقة ولكن يقابل المقابلة لعدد للحق من علامة + يطبق اعتبارا من أول ٪ s. <br> <b>000000 @ (س)</b> نفس السابقة ولكن المضاد هو إعادة الصفر عندما يتم التوصل إلى الشهر خ خ ما بين 1 و 12). إذا كان هذا الخيار هو المستخدمة وس 2 أو أعلى ، ثم تسلسل (ذ ذ م م)) ((سنة أو ملم)) (مطلوب أيضا. <br> <b>(ب)</b> اليوم (01 الى 31). <br> <b>() ملم</b> في الشهر (01 الى 12). <br> <b>(كذا)</b> ، <b>(سنة))</b> أو <b>(ذ</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 dictionary-thirdparty types).<br>
@@ -376,11 +382,11 @@ ExtrafieldCheckBox=Checkbox
 ExtrafieldRadio=Radio button
 ExtrafieldCheckBoxFromList= مربع من الجدول
 ExtrafieldLink=رابط إلى كائن
-ExtrafieldParamHelpselect=Parameters list have to be like key,value<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...<br><br>In order to have the list depending on another :<br>1,value1|parent_list_code:parent_key<br>2,value2|parent_list_code:parent_key
+ExtrafieldParamHelpselect=Parameters list have to be like key,value<br><br> for example : <br>1,value1<br>2,value2<br>3,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=Parameters list have to be like key,value<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
 ExtrafieldParamHelpradio=Parameters list have to be like key,value<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
-ExtrafieldParamHelpsellist=Parameters list 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 :<br>c_typent:libelle:id:parent_list_code|parent_column:filter
-ExtrafieldParamHelpchkbxlst=Parameters list 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 :<br>c_typent:libelle:id:parent_list_code|parent_column:filter
+ExtrafieldParamHelpsellist=Parameters list 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
+ExtrafieldParamHelpchkbxlst=Parameters list 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=يجب أن يكون المعلمات ObjectName: CLASSPATH <br> بناء الجملة: ObjectName: CLASSPATH <br> مثال: سوسيتيه: سوسيتيه / فئة / societe.class.php
 LibraryToBuildPDF=Library used for PDF generation
 WarningUsingFPDF=Warning: Your <b>conf.php</b> contains directive <b>dolibarr_pdf_force_fpdf=1</b>. This means you use the FPDF library to generate PDF files. This library is old and does not support a lot of features (Unicode, image transparency, cyrillic, arab and asiatic languages, ...), so you may experience errors during PDF generation.<br>To solve this and have a full support of PDF generation, please download <a href="http://www.tcpdf.org/" target="_blank">TCPDF library</a>, then comment or remove the line <b>$dolibarr_pdf_force_fpdf=1</b>, and add instead <b>$dolibarr_lib_TCPDF_PATH='path_to_TCPDF_dir'</b>
@@ -415,10 +421,10 @@ ModuleCompanyCodeDigitaria=قانون المحاسبة طرف ثالث يعتم
 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: Some email providers (like Yahoo) does not allow you to send an email from another server than the Yahoo server if the email address used as a sender is your Yahoo email (like myemail@yahoo.com, myemail@yahoo.fr, ...). Your current setup use the server of the application to send email, so some recipients (the one compatible with the restrictive DMARC protocol), will ask Yahoo if they can accept your email and Yahoo will respond "no" because the server is not a server owned by Yahoo, so few of your sent Emails may not be accepted.<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).
-
+ClickToShowDescription=Click to show description
 # Modules
 Module0Name=& مجموعات المستخدمين
-Module0Desc=إدارة المستخدمين والمجموعات
+Module0Desc=Users / Employees and Groups management
 Module1Name=أطراف ثالثة
 Module1Desc=شركات الاتصالات وإدارة
 Module2Name=التجارية
@@ -689,7 +695,7 @@ PermissionAdvanced253=إنشاء / تعديل المستخدمين خارجي /
 Permission254=حذف أو تعطيل المستخدمين الآخرين
 Permission255=إنشاء / تعديل بلده معلومات المستخدم
 Permission256=تعديل بنفسه كلمة المرور
-Permission262=Extend access to all third parties (not only third parties that user is a sale representative). Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc). 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).<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).
 Permission271=قراءة في كاليفورنيا
 Permission272=قراءة الفواتير
 Permission273=قضية الفواتير
@@ -891,7 +897,7 @@ Offset=ويقابل
 AlwaysActive=حركة دائمة
 Upgrade=ترقية
 MenuUpgrade=ترقية / توسيع
-AddExtensionThemeModuleOrOther=إضافة التمديد) الموضوع ، وحدة ،...)
+AddExtensionThemeModuleOrOther=Deploy/install external module
 WebServer=خادم الويب
 DocumentRootServer=خادم الويب 'sالدليل الرئيسي
 DataRootServer=دليل ملفات البيانات
@@ -1165,10 +1171,6 @@ FreeLegalTextOnOrders=بناء على أوامر النص الحر
 WatermarkOnDraftOrders=العلامة المائية على مشاريع المراسيم (أي إذا فارغ)
 ShippableOrderIconInList=إضافة رمز في قائمة الطلبيات التي تشير إلى أمر غير قابل للشحن إذا
 BANK_ASK_PAYMENT_BANK_DURING_ORDER=اسأل عن وجهة حساب مصرفي من أجل
-##### Clicktodial #####
-ClickToDialSetup=انقر لإعداد وحدة الاتصال الهاتفي
-ClickToDialUrlDesc=ودعا الموقع عندما تنقر على الهاتف picto ذلك. Dans l' رابط ، vous pouvez utiliser ليه balises <br> <b>٪ ٪ 1 $ ق</b> qui الأمصال remplacé قدم المساواة جنيه téléphone دي l' appelé <br> <b>٪ ٪</b> 2 $ <b>ق</b> qui الأمصال remplacé لو قدم المساواة téléphone دي l' appelant جنيه مصري vôtre) <br> <b>٪ ٪ ل 3</b> دولار qui الأمصال remplacé vôtre ادخل clicktodial الفقرة (défini سور vôtre فيشه utilisateur) <br> <b>٪ ٪</b> 4 <b>$</b> ق qui الأمصال remplacé الفقرة vôtre يذكره دي clicktodial عتيق (défini سور vôtre فيشه utilisateur).
-##### Bookmark4u #####
 ##### Interventions #####
 InterventionsSetup=وحدة التدخل الإعداد
 FreeLegalTextOnInterventions=حرر النص على وثائق التدخل
@@ -1395,7 +1397,7 @@ SendingsSetup=ارسال وحدة الإعداد
 SendingsReceiptModel=ارسال استلام نموذج
 SendingsNumberingModules=Sendings ترقيم الوحدات
 SendingsAbility=أوراق دعم الشحن للشحنات العملاء
-NoNeedForDeliveryReceipts=في معظم الحالات ، تستخدم الإرسال إيصالات سواء صحائف لتسليم العميل (قائمة المنتجات ارسال) ، وصحائف التي وقعت عليها recevied الزبون. حتى المنتج تسليم الإيصالات هي سمة مزدوجة ونادرا ما تفعيلها.
+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.
 FreeLegalTextOnShippings=النص الحر على الشحنات
 ##### Deliveries #####
 DeliveryOrderNumberingModules=تلقي شحنات المنتجات الترقيم وحدة
@@ -1477,7 +1479,9 @@ AGENDA_DEFAULT_FILTER_STATUS=تلقائيا تعيين هذه الحالة مع
 AGENDA_DEFAULT_VIEW=علامة التبويب التي تريد فتح افتراضيا عند اختيار القائمة جدول الأعمال
 AGENDA_NOTIFICATION=Enable event notification on user browsers when event date is reached (each user is able to refuse this from the browser confirmation question)
 AGENDA_NOTIFICATION_SOUND=Enable sound notification
-##### ClickToDial #####
+##### Clicktodial #####
+ClickToDialSetup=انقر لإعداد وحدة الاتصال الهاتفي
+ClickToDialUrlDesc=ودعا الموقع عندما تنقر على الهاتف picto ذلك. Dans l' رابط ، vous pouvez utiliser ليه balises <br> <b>٪ ٪ 1 $ ق</b> qui الأمصال remplacé قدم المساواة جنيه téléphone دي l' appelé <br> <b>٪ ٪</b> 2 $ <b>ق</b> qui الأمصال remplacé لو قدم المساواة téléphone دي l' appelant جنيه مصري vôtre) <br> <b>٪ ٪ ل 3</b> دولار qui الأمصال remplacé vôtre ادخل clicktodial الفقرة (défini سور vôtre فيشه utilisateur) <br> <b>٪ ٪</b> 4 <b>$</b> ق qui الأمصال remplacé الفقرة vôtre يذكره دي clicktodial عتيق (défini سور vôtre فيشه utilisateur).
 ClickToDialDesc=هذه الوحدة تسمح لجعل أرقام هواتف يمكن النقر عليها. وهناك انقر على هذه الأيقونة دعوة تجعل هاتفك إلى الاتصال برقم الهاتف. وهذا يمكن أن تستخدم لاستدعاء نظام مركز الاتصال من Dolibarr يمكن أن نسميه ورقم الهاتف على نظام SIP على سبيل المثال.
 ClickToDialUseTelLink=مجرد استخدام الرابط "الهاتف:" على أرقام الهواتف
 ClickToDialUseTelLinkDesc=استخدام هذا الأسلوب إذا كان المستخدمون يكون الهاتف الرقمي أو واجهة البرامج المثبتة على الكمبيوتر نفسه من المتصفح، ويسمى عند النقر على رابط في المتصفح التي تبدأ ب "الهاتف". إذا كنت في حاجة الى حل خادم الكامل (لا حاجة لتثبيت البرامج المحلية)، يجب عليك تعيين هذا إلى "لا" وملء الحقل التالي.
@@ -1505,10 +1509,11 @@ EndPointIs=SOAP clients must send their requests to the Dolibarr endpoint availa
 ##### API ####
 ApiSetup=API وحدة الإعداد
 ApiDesc=من خلال تمكين هذه الوحدة، Dolibarr يصبح الخادم REST لتوفير خدمات الإنترنت المتنوعة.
-ApiProductionMode=تمكين وضع الإنتاج (وهذا سوف تفعيل استخدام مخابئ لإدارة الخدمات)
+ApiProductionMode=Enable production mode (this will activate use of a cache for services management)
 ApiExporerIs=You can explore the APIs at url
 OnlyActiveElementsAreExposed=ويتعرض عناصر فقط من وحدات تمكين
 ApiKey=مفتاح 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=إعداد وحدة مصرفية
 FreeLegalTextOnChequeReceipts=نص حر على الشيكات والإيصالات
@@ -1577,7 +1582,7 @@ BackupDumpWizard=المعالج لبناء قاعدة بيانات النسخ ا
 SomethingMakeInstallFromWebNotPossible=تركيب وحدة خارجية غير ممكن من واجهة ويب للسبب التالي:
 SomethingMakeInstallFromWebNotPossible2=لهذا السبب، عملية لترقية وصفت هنا هو دليل على بعد خطوات قليلة يمكن للمستخدم متميز القيام به.
 InstallModuleFromWebHasBeenDisabledByFile=تثبيت وحدة خارجية من التطبيق قد تم تعطيلها من قبل المسؤول. يجب أن يطلب منه إزالة <strong>الملف٪ s</strong> للسماح هذه الميزة.
-ConfFileMuseContainCustom=Installing 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 have option<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
+ConfFileMuseContainCustom=Installing 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=تسليط الضوء على لون الخط عند تمرير الماوس فوق (الحفاظ فارغة دون تمييز)
 TextTitleColor=Color of page title
@@ -1607,6 +1612,7 @@ FixTZ=الإصلاح والوقت
 FillFixTZOnlyIfRequired=مثال: +2 (ملء فقط إذا كانت المشكلة من ذوي الخبرة)
 ExpectedChecksum=اختباري المتوقع
 CurrentChecksum=اختباري الحالي
+ForcedConstants=Required constant values
 MailToSendProposal=لإرسال اقتراح العملاء
 MailToSendOrder=لإرسال طلب العميل
 MailToSendInvoice=لإرسال فاتورة العملاء
@@ -1615,9 +1621,10 @@ MailToSendIntervention=لإرسال التدخل
 MailToSendSupplierRequestForQuotation=لإرسال طلب الاقتباس إلى المورد
 MailToSendSupplierOrder=لإرسال المورد أجل
 MailToSendSupplierInvoice=لإرسال فاتورة المورد
+MailToSendContract=To send a contract
 MailToThirdparty=To send email from third party page
 ByDefaultInList=تظهر بشكل افتراضي على عرض القائمة
-YouUseLastStableVersion=كنت تستخدم إصدار مستقر الماضي
+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.

+ 2 - 2
htdocs/langs/ar_SA/banks.lang

@@ -74,13 +74,13 @@ Conciliate=التوفيق
 Conciliation=توفيق
 ReconciliationLate=Reconciliation late
 IncludeClosedAccount=وتشمل حسابات مغلقة
-OnlyOpenedAccount=حسابات مفتوحة فقط
+OnlyOpenedAccount=إلا فتح حسابات
 AccountToCredit=الحساب على الائتمان
 AccountToDebit=لحساب الخصم
 DisableConciliation=تعطيل ميزة التوفيق لهذا الحساب
 ConciliationDisabled=توفيق سمة المعوقين
 LinkedToAConciliatedTransaction=Linked to a conciliated entry
-StatusAccountOpened=فتح
+StatusAccountOpened=Opened
 StatusAccountClosed=مغلقة
 AccountIdShort=عدد
 LineRecord=المعاملات

+ 30 - 17
htdocs/langs/ar_SA/bills.lang

@@ -2,12 +2,12 @@
 Bill=فاتورة
 Bills=فواتير
 BillsCustomers=فواتير العملاء
-BillsCustomer=فاتورة العملاء
+BillsCustomer=الزبون فاتورة
 BillsSuppliers=فواتير الموردين
-BillsCustomersUnpaid=فواتير العملاء الغير مدفوعة
-BillsCustomersUnpaidForCompany=فواتير العميل الغير مدفوعة لـ%s
-BillsSuppliersUnpaid=غير المدفوعة الموردين
-BillsSuppliersUnpaidForCompany=مورد غير المسددة لفواتير %s
+BillsCustomersUnpaid=فواتير العملاء غير المسددة
+BillsCustomersUnpaidForCompany=Unpaid customer invoices for %s
+BillsSuppliersUnpaid=فواتير الموردين غير المدفوعة
+BillsSuppliersUnpaidForCompany=Unpaid supplier invoices for %s
 BillsLate=في وقت متأخر المدفوعات
 BillsStatistics=عملاء الفواتير إحصاءات
 BillsStatisticsSuppliers=فواتير الموردين إحصاءات
@@ -62,8 +62,8 @@ PaymentsBack=عودة المدفوعات
 paymentInInvoiceCurrency=in invoices currency
 PaidBack=تسديدها
 DeletePayment=حذف الدفع
-ConfirmDeletePayment=Are you sure you want to delete this payment?
-ConfirmConvertToReduc=Do you want to convert this credit note or deposit 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.
+ConfirmDeletePayment=هل أنت متأكد من أنك تريد حذف هذا المبلغ؟
+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.
 SupplierPayments=الموردين والمدفوعات
 ReceivedPayments=تلقت مدفوعات
 ReceivedCustomersPayments=المدفوعات المقبوضة من الزبائن
@@ -78,6 +78,7 @@ PaymentMode=نوع الدفع
 PaymentTypeDC=Debit/Credit Card
 PaymentTypePP=PayPal
 IdPaymentMode=Payment type (id)
+CodePaymentMode=Payment type (code)
 LabelPaymentMode=Payment type (label)
 PaymentModeShort=نوع الدفع
 PaymentTerm=مصطلح الدفع
@@ -102,9 +103,10 @@ SearchACustomerInvoice=البحث عن زبون فاتورة
 SearchASupplierInvoice=البحث عن مورد فاتورة
 CancelBill=شطب فاتورة
 SendRemindByMail=إرسال تذكرة عن طريق البريد الإلكتروني
-DoPayment=هل لدفع
-DoPaymentBack=هل لدفع الظهر
+DoPayment=Enter payment
+DoPaymentBack=Enter refund
 ConvertToReduc=تحويل الخصم في المستقبل
+ConvertExcessReceivedToReduc=Convert excess received into future discount
 EnterPaymentReceivedFromCustomer=دخول الدفع الواردة من العملاء
 EnterPaymentDueToCustomer=من المقرر أن يسدد العميل
 DisabledBecauseRemainderToPayIsZero=تعطيل بسبب المتبقية غير المدفوعة صفر
@@ -151,14 +153,14 @@ NoQualifiedRecurringInvoiceTemplateFound=No recurring template invoice qualified
 FoundXQualifiedRecurringInvoiceTemplate=Found %s recurring template invoice(s) qualified for generation.
 NotARecurringInvoiceTemplate=Not a recurring template invoice
 NewBill=فاتورة جديدة
-LastBills=آخر الفواتير %s
-LastCustomersBills=%s الماضي فواتير العملاء
-LastSuppliersBills=%s الماضي فواتير الموردين
+LastBills=Latest %s invoices
+LastCustomersBills=Latest %s customer invoices
+LastSuppliersBills=Latest %s supplier invoices
 AllBills=جميع الفواتير
 OtherBills=غيرها من الفواتير
 DraftBills=مشروع الفواتير
-CustomersDraftInvoices=مشروع فواتير العملاء
-SuppliersDraftInvoices=مشروع فواتير الموردين
+CustomersDraftInvoices=Customer draft invoices
+SuppliersDraftInvoices=Supplier draft invoices
 Unpaid=غير المدفوعة
 ConfirmDeleteBill=Are you sure you want to delete this invoice?
 ConfirmValidateBill=Are you sure you want to validate this invoice with reference <b>%s</b>?
@@ -272,6 +274,7 @@ Deposit=إيداع
 Deposits=الودائع
 DiscountFromCreditNote=خصم من دائن  %s
 DiscountFromDeposit=المدفوعات من فاتورة  %s
+DiscountFromExcessReceived=Payments from excess received of invoice %s
 AbsoluteDiscountUse=هذا النوع من الائتمان يمكن استخدامها على الفاتورة قبل المصادقة
 CreditNoteDepositUse=Invoice must be validated to use this kind of credits
 NewGlobalDiscount=تحديد خصم جديد
@@ -279,8 +282,8 @@ NewRelativeDiscount=خصم جديد النسبية
 NoteReason=ملاحظة / السبب
 ReasonDiscount=السبب
 DiscountOfferedBy=التي تمنحها
-DiscountStillRemaining=خصم لا يزالون
-DiscountAlreadyCounted=بالفعل خصم أحصى
+DiscountStillRemaining=Discounts available
+DiscountAlreadyCounted=Discounts already consumed
 BillAddress=مشروع قانون معالجة
 HelpEscompte=هذا الخصم هو الخصم الممنوح للعميل لأن الدفع قبل البعيد.
 HelpAbandonBadCustomer=هذا المبلغ قد تم التخلي عنها (وذكر أن العملاء سيئة العملاء) ، ويعتبر أحد exceptionnal فضفاضة.
@@ -333,6 +336,8 @@ InvoiceAutoValidate=Validate invoices automatically
 GeneratedFromRecurringInvoice=Generated from template recurring invoice %s
 DateIsNotEnough=Date not reached yet
 InvoiceGeneratedFromTemplate=Invoice %s generated from recurring template invoice %s
+WarningInvoiceDateInFuture=Warning, the invoice date is higher than current date
+WarningInvoiceDateTooFarInFuture=Warning, the invoice date is too far from current date
 # PaymentConditions
 Statut=الحالة
 PaymentConditionShortRECEP=Due Upon Receipt
@@ -351,6 +356,14 @@ PaymentConditionShortPT_ORDER=الطلبية
 PaymentConditionPT_ORDER=على الطلب
 PaymentConditionShortPT_5050=50-50
 PaymentConditionPT_5050=50 ٪٪ مقدما، 50 ٪٪ عند التسليم
+PaymentConditionShort10D=10 days
+PaymentCondition10D=10 days
+PaymentConditionShort10DENDMONTH=10 days of month-end
+PaymentCondition10DENDMONTH=Within 10 days following the end of the month
+PaymentConditionShort14D=14 days
+PaymentCondition14D=14 days
+PaymentConditionShort14DENDMONTH=14 days of month-end
+PaymentCondition14DENDMONTH=Within 14 days following the end of the month
 FixAmount=كمية الإصلاح
 VarAmount=مقدار متغير (٪٪ TOT).
 # PaymentType
@@ -420,7 +433,7 @@ ChequeDeposits=الشيكات الودائع
 Cheques=الشيكات
 DepositId=إيداع معرف
 NbCheque=عدد الشيكات
-CreditNoteConvertedIntoDiscount=هذه المذكرة الائتمان أو إيداع فاتورة تم تحويلها إلى %s
+CreditNoteConvertedIntoDiscount=This %s has been converted into %s
 UsBillingContactAsIncoiveRecipientIfExist=فواتير العملاء استخدام عنوان الاتصال بدلا من التصدي لطرف ثالث كما المتلقية للفواتير
 ShowUnpaidAll=وتظهر جميع الفواتير غير المسددة
 ShowUnpaidLateOnly=وتبين في وقت متأخر من الفواتير غير المدفوعة فقط

+ 7 - 7
htdocs/langs/ar_SA/boxes.lang

@@ -25,8 +25,8 @@ BoxTitleLastSuppliers=Latest %s recorded suppliers
 BoxTitleLastModifiedSuppliers=Latest %s modified suppliers
 BoxTitleLastModifiedCustomers=Latest %s modified customers
 BoxTitleLastCustomersOrProspects=Latest %s customers or prospects
-BoxTitleLastCustomerBills=Latest %s customer's invoices
-BoxTitleLastSupplierBills=Latest %s supplier's invoices
+BoxTitleLastCustomerBills=Latest %s customer invoices
+BoxTitleLastSupplierBills=Latest %s supplier invoices
 BoxTitleLastModifiedProspects=Latest %s modified prospects
 BoxTitleLastModifiedMembers=Latest %s members
 BoxTitleLastFicheInter=Latest %s modified interventions
@@ -51,12 +51,12 @@ ClickToAdd=انقر هنا لإضافة.
 NoRecordedCustomers=لا العملاء تسجيل
 NoRecordedContacts=أي اتصالات تسجيل
 NoActionsToDo=توجد إجراءات لتفعل
-NoRecordedOrders=أوامر العملاء لا يسجل في
+NoRecordedOrders=No recorded customer orders
 NoRecordedProposals=أي مقترحات تسجيل
-NoRecordedInvoices=فواتير لم تسجل العملاء ل
-NoUnpaidCustomerBills=فواتير غير مدفوعة الأجر في أي العملاء
-NoUnpaidSupplierBills=فواتير غير مدفوعة الأجر في أي المورد
-NoModifiedSupplierBills=فواتير لم المورد المسجلة في
+NoRecordedInvoices=No recorded customer invoices
+NoUnpaidCustomerBills=No unpaid customer invoices
+NoUnpaidSupplierBills=No unpaid supplier invoices
+NoModifiedSupplierBills=No recorded supplier invoices
 NoRecordedProducts=لم تسجل المنتجات / الخدمات
 NoRecordedProspects=لا آفاق المسجلة
 NoContractedProducts=لا توجد منتجات / خدمات التعاقد

+ 4 - 3
htdocs/langs/ar_SA/companies.lang

@@ -81,6 +81,7 @@ PaymentBankAccount=Payment bank account
 OverAllProposals=Total proposals
 OverAllOrders=Total orders
 OverAllInvoices=Total invoices
+OverAllSupplierProposals=Total price requests
 ##### Local Taxes #####
 LocalTax1IsUsed=استخدام الضرائب الثانية
 LocalTax1IsUsedES= يتم استخدام الطاقة المتجددة
@@ -389,7 +390,7 @@ ListCustomersShort=قائمة العملاء
 ThirdPartiesArea=أطراف ثالثة، ومنطقة الاتصال
 LastModifiedThirdParties=Latest %s modified third parties
 UniqueThirdParties=مجموع الأطراف الثالثة فريدة من نوعها
-InActivity=فتح
+InActivity=Opened
 ActivityCeased=مغلق
 ThirdPartyIsClosed=Third party is closed
 ProductsIntoElements=قائمة المنتجات / الخدمات إلى %s
@@ -404,7 +405,7 @@ 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 so you will be able to delete the duplicate one.
 ThirdpartiesMergeSuccess=تم دمج Thirdparties
 SaleRepresentativeLogin=Login of sales representative
-SaleRepresentativeFirstname=Firstname of sales representative
-SaleRepresentativeLastname=Lastname of sales representative
+SaleRepresentativeFirstname=First name of sales representative
+SaleRepresentativeLastname=Last name of sales representative
 ErrorThirdpartiesMerge=كان هناك خطأ عند حذف thirdparties. يرجى التحقق من السجل. وقد عادت التغييرات.
 NewCustomerSupplierCodeProposed=New customer or supplier code suggested on duplicate code

+ 2 - 1
htdocs/langs/ar_SA/compta.lang

@@ -65,6 +65,7 @@ PaymentSocialContribution=اجتماعي / دفع الضرائب المالية
 PaymentVat=دفع ضريبة القيمة المضافة
 ListPayment=قائمة المدفوعات
 ListOfCustomerPayments=قائمة مدفوعات العملاء
+ListOfSupplierPayments=قائمة الموردين المدفوعات
 DateStartPeriod=تاريخ بداية الفترة
 DateEndPeriod=تاريخ انتهاء الفترة
 newLT1Payment=جديد الضريبية 2 الدفع
@@ -81,7 +82,7 @@ LT2PaymentES=IRPF الدفع
 LT2PaymentsES=الدفعات IRPF
 VATPayment=Sales tax payment
 VATPayments=Sales tax payments
-VATRefund=Sales tax refund Refund
+VATRefund=Sales tax refund
 Refund=رد
 SocialContributionsPayments=الاجتماعية المدفوعات / الضرائب المالية
 ShowVatPayment=وتظهر دفع ضريبة القيمة المضافة

+ 6 - 6
htdocs/langs/ar_SA/cron.lang

@@ -17,14 +17,14 @@ CronMethodDoesNotExists=Class %s does not contains any method %s
 # Menu
 EnabledAndDisabled=Enabled and disabled
 # Page list
-CronLastOutput=نشاط انتاج المدى
-CronLastResult=آخر رمز النتيجة
+CronLastOutput=Latest run output
+CronLastResult=Latest result code
 CronCommand=أمر
 CronList=المهام المجدولة
 CronDelete=حذف المهام المجدولة
-CronConfirmDelete=هل أنت متأكد أنك تريد حذف هذه المهام المجدولة؟
+CronConfirmDelete=Are you sure you want to delete these scheduled jobs?
 CronExecute=Launch scheduled job
-CronConfirmExecute=هل أنت متأكد أنك تريد تنفيذ هذه المهام المجدولة الآن؟
+CronConfirmExecute=Are you sure you want to execute these scheduled jobs now?
 CronInfo=وحدة مهمة مجدولة تسمح لتنفيذ المهمة التي تم التخطيط لها
 CronTask=وظيفة
 CronNone=بلا
@@ -39,7 +39,7 @@ CronMethod=الطريقة
 CronModule=وحدة
 CronNoJobs=أي وظيفة سجلت
 CronPriority=الأولوية
-CronLabel=Label
+CronLabel=ملصق
 CronNbRun=ملحوظة. إطلاق
 CronMaxRun=Max nb. launch
 CronEach=كل
@@ -73,7 +73,7 @@ CronType_method=استدعاء الأسلوب من فئة Dolibarr
 CronType_command=الأمر Shell
 CronCannotLoadClass=لا يمكن تحميل الطبقة %s أو الكائن %s
 UseMenuModuleToolsToAddCronJobs=Go into menu "Home - Admin tools - Scheduled jobs" to see and edit scheduled jobs.
-JobDisabled=Job disabled
+JobDisabled=تعطيل وظيفة
 MakeLocalDatabaseDumpShort=Local database backup
 MakeLocalDatabaseDump=Create a local database dump
 WarningCronDelayed=Attention, for performance purpose, whatever is next date of execution of active jobs, your jobs may be delayed to a maximum of %s hours before being run.

+ 4 - 1
htdocs/langs/ar_SA/errors.lang

@@ -11,6 +11,7 @@ ErrorLoginAlreadyExists=ادخل ٪ ق موجود بالفعل.
 ErrorGroupAlreadyExists=المجموعة ٪ ق موجود بالفعل.
 ErrorRecordNotFound=لم يتم العثور على السجل.
 ErrorFailToCopyFile=فشل في نسخ الملف <b>'%s'</b> إلى <b>'%s</b> &quot;.
+ErrorFailToCopyDir=Failed to copy directory '<b>%s</b>' into '<b>%s</b>'.
 ErrorFailToRenameFile=فشل لإعادة تسمية الملف <b>'%s'</b> إلى <b>'%s</b> &quot;.
 ErrorFailToDeleteFile=فشل إزالة الملف <b>'٪ ق.</b>
 ErrorFailToCreateFile=فشل إنشاء الملف <b>'٪ ق.</b>
@@ -115,7 +116,7 @@ ErrorNoActivatedBarcode=لا يوجد نوع الباركود تفعيلها
 ErrUnzipFails=فشل بفك٪ الصورة مع ZipArchive
 ErrNoZipEngine=لا المحرك لبفك الصورة ملف٪ في هذا PHP
 ErrorFileMustBeADolibarrPackage=يجب أن يكون الملف٪ s حزمة البريدي Dolibarr
-ErrorFileRequired=فإنه يأخذ ملف حزمة Dolibarr
+ErrorModuleFileRequired=You must select a Dolibarr module package file
 ErrorPhpCurlNotInstalled=وPHP الضفيرة لم يتم تثبيت، وهذا أمر ضروري لاجراء محادثات مع باي بال
 ErrorFailedToAddToMailmanList=فشل لاضافة التسجيلة٪ s إلى قائمة ميلمان٪ الصورة أو قاعدة SPIP
 ErrorFailedToRemoveToMailmanList=فشل لإزالة سجل٪ s إلى قائمة ميلمان٪ الصورة أو قاعدة SPIP
@@ -181,6 +182,8 @@ ErrorBankStatementNameMustFollowRegex=Error, bank statement name must follow the
 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>
 
 # Warnings
 WarningPasswordSetWithNoAccount=تم تعيين كلمة مرور لهذا العضو. ومع ذلك، تم إنشاء أي حساب المستخدم. لذلك يتم تخزين كلمة المرور هذه ولكن لا يمكن استخدامها للدخول إلى Dolibarr. ويمكن استخدامه من قبل وحدة / واجهة خارجية ولكن إذا كنت لا تحتاج إلى تعريف أي تسجيل دخول أو كلمة المرور لأحد أفراد، يمكنك تعطيل خيار "إدارة تسجيل دخول لكل عضو" من إعداد وحدة الأعضاء. إذا كنت بحاجة إلى إدارة تسجيل الدخول ولكن لا تحتاج إلى أي كلمة المرور، يمكنك الحفاظ على هذا الحقل فارغا لتجنب هذا التحذير. ملاحظة: يمكن أيضا أن تستخدم البريد الإلكتروني لتسجيل الدخول إذا تم ربط عضو إلى المستخدم.

+ 2 - 2
htdocs/langs/ar_SA/holiday.lang

@@ -76,8 +76,8 @@ BoxTitleLastLeaveRequests=Latest %s modified leave requests
 HolidaysMonthlyUpdate=تحديث شهري
 ManualUpdate=التحديث اليدوي
 HolidaysCancelation=ترك طلب الإلغاء
-EmployeeLastname=Employee lastname
-EmployeeFirstname=Employee firstname
+EmployeeLastname=Employee last name
+EmployeeFirstname=Employee first name
 TypeWasDisabledOrRemoved=Leave type (id %s) was disabled or removed
 
 ## Configuration du Module ##

+ 2 - 2
htdocs/langs/ar_SA/ldap.lang

@@ -13,8 +13,8 @@ LDAPUsers=المستخدمين في قاعدة البيانات LDAP
 LDAPFieldStatus=حالة
 LDAPFieldFirstSubscriptionDate=أول موعد الاكتتاب
 LDAPFieldFirstSubscriptionAmount=قبضة مبلغ الاشتراك
-LDAPFieldLastSubscriptionDate=آخر موعد الاكتتاب
-LDAPFieldLastSubscriptionAmount=الاكتتاب المبلغ الأخير
+LDAPFieldLastSubscriptionDate=Latest subscription date
+LDAPFieldLastSubscriptionAmount=Latest subscription amount
 LDAPFieldSkype=Skype id
 LDAPFieldSkypeExample=Example : skypeName
 UserSynchronized=وتزامن المستخدم

+ 9 - 2
htdocs/langs/ar_SA/mails.lang

@@ -74,14 +74,18 @@ ResultOfMailSending=نتيجة لإرسال البريد الإلكتروني ا
 NbSelected=ملحوظة مختارة
 NbIgnored=ملحوظة تجاهلها
 NbSent=أرسلت ملحوظة
-ContactsWithThirdpartyFilter=Contact with customer filters
+ConfirmUnvalidateEmailing=Are you sure you want to change email <b>%s</b> to draft status?
+MailingModuleDescContactsWithThirdpartyFilter=Contact with customer filters
+MailingModuleDescContactsByCompanyCategory=Contacts by third party category
+MailingModuleDescContactsByCategory=Contacts by categories
+MailingModuleDescContactsByFunction=Contacts by position
 
 # Libelle des modules de liste de destinataires mailing
 LineInFile=خط المستندات في ملف ٪
 RecipientSelectionModules=حددت لطلبات المستفيدين الاختيار
 MailSelectedRecipients=اختيار المستفيدين
 MailingArea=EMailings المنطقة
-LastMailings=ق emailings الماضي ٪
+LastMailings=Latest %s emailings
 TargetsStatistics=أهداف الإحصاءات
 NbOfCompaniesContacts=فريدة من شركات الاتصالات
 MailNoChangePossible=صادق المتلقين للمراسلة لا يمكن تغيير
@@ -146,3 +150,6 @@ AdvTgtCreateFilter=Create filter
 AdvTgtOrCreateNewFilter=Name of new filter
 NoContactWithCategoryFound=No contact/address with a category found
 NoContactLinkedToThirdpartieWithCategoryFound=No contact/address with a category found
+OutGoingEmailSetup=Outgoing email setup
+InGoingEmailSetup=Incoming email setup
+

+ 9 - 3
htdocs/langs/ar_SA/main.lang

@@ -69,6 +69,7 @@ SetDate=التاريخ المحدد
 SelectDate=تحديد تاريخ
 SeeAlso=انظر أيضا الصورة٪
 SeeHere=انظر هنا
+Apply=تطبيق
 BackgroundColorByDefault=لون الخلفية الافتراضية
 FileRenamed=The file was successfully renamed
 FileUploaded=تم تحميل الملف بنجاح
@@ -87,7 +88,7 @@ Undefined=غير محدد
 PasswordForgotten=Password forgotten?
 SeeAbove=أنظر فوق
 HomeArea=المنطقة الرئيسية
-LastConnexion=آخر إتصال
+LastConnexion=Latest connection
 PreviousConnexion=الاتصال السابق
 PreviousValue=Previous value
 ConnectedOnMultiCompany=إتصال على البيئة
@@ -237,7 +238,7 @@ DateCreation=تاريخ الإنشاء
 DateCreationShort=يخلق. التاريخ
 DateModification=تاريخ التعديل
 DateModificationShort=Modif. التاريخ
-DateLastModification=تاريخ آخر تعديل
+DateLastModification=Latest modification date
 DateValidation=تاريخ التحقق من الصحة
 DateClosing=الموعد النهائي
 DateDue=تاريخ الاستحقاق
@@ -433,7 +434,7 @@ Reportings=التقارير
 Draft=مسودة
 Drafts=الداما
 Validated=التحقق من صحة
-Opened=فتح
+Opened=Opened
 New=جديد
 Discount=تخفيض السعر
 Unknown=غير معروف
@@ -599,6 +600,8 @@ SessionName=اسم الدورة
 Method=الطريقة
 Receive=استقبال
 CompleteOrNoMoreReceptionExpected=Complete or nothing more expected
+ExpectedValue=Expected Value
+CurrentValue=القيمة الحالية
 PartialWoman=جزئي
 TotalWoman=المجموع
 NeverReceived=لم يتلق
@@ -756,6 +759,7 @@ SomeTranslationAreUncomplete=Some languages may be partially translated or may c
 DirectDownloadLink=Direct download link
 Download=Download
 ActualizeCurrency=Update currency rate
+Fiscalyear=السنة المالية
 # Week day
 Monday=يوم الاثنين
 Tuesday=الثلاثاء
@@ -812,3 +816,5 @@ SearchIntoContracts=عقود
 SearchIntoCustomerShipments=Customer shipments
 SearchIntoExpenseReports=تقارير المصاريف
 SearchIntoLeaves=أوراق
+
+BulkActions=Bulk actions

+ 3 - 3
htdocs/langs/ar_SA/members.lang

@@ -136,8 +136,8 @@ DocForAllMembersCards=إنشاء بطاقات العمل لجميع أعضاء (
 DocForOneMemberCards=إنشاء بطاقات العمل لعضو معين (تنسيق الإعداد للإخراج في الواقع : <b>%s)</b>
 DocForLabels=أوراق عنوان انتج (تنسيق الإعداد للإخراج فعلا : <b>%s)</b>
 SubscriptionPayment=دفع الاشتراك
-LastSubscriptionDate=آخر موعد الاكتتاب
-LastSubscriptionAmount=آخر مبلغ الاشتراك
+LastSubscriptionDate=Latest subscription date
+LastSubscriptionAmount=Latest subscription amount
 MembersStatisticsByCountries=أعضاء إحصاءات حسب البلد
 MembersStatisticsByState=أعضاء إحصاءات الولاية / المقاطعة
 MembersStatisticsByTown=أعضاء إحصاءات بلدة
@@ -149,7 +149,7 @@ MembersByStateDesc=هذه الشاشة تظهر لك إحصاءات عن أفر
 MembersByTownDesc=هذه الشاشة تظهر لك إحصاءات عن أفراد من البلدة.
 MembersStatisticsDesc=اختيار الإحصاءات التي ترغب في قراءتها ...
 MenuMembersStats=إحصائيات
-LastMemberDate=آخر عضو تاريخ
+LastMemberDate=Latest member date
 Nature=طبيعة
 Public=معلومات علنية
 NewMemberbyWeb=وأضاف عضو جديد. تنتظر الموافقة

+ 2 - 2
htdocs/langs/ar_SA/orders.lang

@@ -39,7 +39,7 @@ StatusOrderRefusedShort=رفض
 StatusOrderBilledShort=المنقار
 StatusOrderToProcessShort=لعملية
 StatusOrderReceivedPartiallyShort=تلقى جزئيا
-StatusOrderReceivedAllShort=وتلقى كل شيء
+StatusOrderReceivedAllShort=Products received
 StatusOrderCanceled=ألغى
 StatusOrderDraft=مشروع (لا بد من التحقق من صحة)
 StatusOrderValidated=صادق
@@ -51,7 +51,7 @@ StatusOrderApproved=وافق
 StatusOrderRefused=رفض
 StatusOrderBilled=المنقار
 StatusOrderReceivedPartially=تلقى جزئيا
-StatusOrderReceivedAll=وتلقى كل شيء
+StatusOrderReceivedAll=All products received
 ShippingExist=شحنة موجود
 QtyOrdered=الكمية أمرت
 ProductQtyInDraft=كمية المنتج في مشاريع المراسيم

+ 5 - 4
htdocs/langs/ar_SA/other.lang

@@ -68,14 +68,15 @@ PredefinedMailContentSendSupplierInvoice=__CONTACTCIVNAME__ سوف تجد هنا
 PredefinedMailContentSendShipping=__CONTACTCIVNAME__ سوف تجد هنا الشحن __SHIPPINGREF__ __PERSONALIZED__Sincerely __SIGNATURE__
 PredefinedMailContentSendFichInter=__CONTACTCIVNAME__ سوف تجد هنا تدخل __FICHINTERREF__ __PERSONALIZED__Sincerely __SIGNATURE__
 PredefinedMailContentThirdparty=__CONTACTCIVNAME__ __PERSONALIZED__ __SIGNATURE__
-DemoDesc=Dolibarr is a compact ERP/CRM supporting several functional modules. A demo showcasing all modules makes no sense as this scenario never occurs. So, several demo profiles are available.
+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...
+ChooseYourDemoProfilMore=...or build your own profile<br>(manual module selection)
 DemoFundation=أعضاء في إدارة مؤسسة
 DemoFundation2=إدارة وأعضاء في الحساب المصرفي للمؤسسة
-DemoCompanyServiceOnly=إدارة نشاط بيع الخدمة لحسابهم الخاص فقط
+DemoCompanyServiceOnly=Company or freelance selling service only
 DemoCompanyShopWithCashDesk=تدير متجر مع مكتب النقدية
-DemoCompanyProductAndStocks=إدارة شركة صغيرة أو متوسطة بيع المنتجات
-DemoCompanyAll=إدارة شركة صغيرة أو متوسطة متعددة الأنشطة الرئيسية لجميع وحدات)
+DemoCompanyProductAndStocks=Company selling products with a shop
+DemoCompanyAll=Company with multiple activities (all main modules)
 CreatedBy=أوجدتها ٪ ق
 ModifiedBy=المعدلة ق ٪
 ValidatedBy=يصادق عليها ق ٪

+ 40 - 2
htdocs/langs/ar_SA/products.lang

@@ -60,7 +60,7 @@ SellingPrice=سعر البيع
 SellingPriceHT=سعر البيع (صافي الضرائب)
 SellingPriceTTC=سعر البيع (شركة الضريبية)
 CostPriceDescription=هذا السعر (صافية من الضرائب) يمكن استخدامها لتخزين متوسط ​​كمية هذا تكلفة المنتج لشركتك. قد يكون بأي ثمن على حساب نفسك، على سبيل المثال من متوسط ​​سعر الشراء بالإضافة إلى متوسط ​​إنتاج وتوزيع التكاليف.
-CostPriceUsage=في النسخة المقبلة، ويمكن استخدام هذه القيمة لحساب الهامش.
+CostPriceUsage=This value could be used for margin calculation.
 SoldAmount=Sold amount
 PurchasedAmount=Purchased amount
 NewPrice=السعر الجديد
@@ -142,6 +142,7 @@ ConfirmCloneProduct=Are you sure you want to clone product or service <b>%s</b>?
 CloneContentProduct=استنساخ جميع المعلومات الرئيسية من المنتجات / الخدمات
 ClonePricesProduct=استنساخ الرئيسية معلومات والأسعار
 CloneCompositionProduct=استنساخ حزم المنتج / الخدمة
+CloneCombinationsProduct=Clone product variants
 ProductIsUsed=ويستخدم هذا المنتج
 NewRefForClone=المرجع. من المنتجات الجديدة / خدمة
 SellingPrices=أسعار بيع
@@ -238,7 +239,7 @@ GlobalVariables=المتغيرات العالمية
 VariableToUpdate=Variable to update
 GlobalVariableUpdaters=updaters متغير العالمية
 UpdateInterval=تحديث الفاصل الزمني (دقائق)
-LastUpdated=آخر تحديث
+LastUpdated=Latest update
 CorrectlyUpdated=تحديثها بشكل صحيح
 PropalMergePdfProductActualFile=استخدام الملفات لإضافة إلى PDF دازور هي / هو
 PropalMergePdfProductChooseFile=اختر ملفات PDF
@@ -258,4 +259,41 @@ VolumeUnits=Volume unit
 SizeUnits=Size unit
 DeleteProductBuyPrice=Delete buying price
 ConfirmDeleteProductBuyPrice=Are you sure you want to delete this buying price?
+SubProduct=Sub 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
+HideProductCombinations=Hide products variant in the products selector
+ProductCombination=Variant
+NewProductCombination=New variant
+EditProductCombination=Editing variant
+ProductCombinationGenerator=Variants generator
+Features=Features
+PriceImpact=Price impact
+WeightImpact=Weight impact
+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 child products
+ConfirmCloneProductCombinations=Would you like to copy all the product variant to the 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

+ 8 - 7
htdocs/langs/ar_SA/projects.lang

@@ -29,9 +29,9 @@ DeleteAProject=حذف مشروع
 DeleteATask=حذف مهمة
 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
+OpenedProjects=مشاريع فتح
+OpenedTasks=Opened tasks
+OpportunitiesStatusForOpenedProjects=فرص كمية من المشاريع فتحت حسب الحالة
 OpportunitiesStatusForProjects=Opportunities amount of projects by status
 ShowProject=وتبين للمشروع
 SetProject=وضع المشروع
@@ -47,7 +47,7 @@ TaskTimeSpent=الوقت المستغرق في المهام
 TaskTimeUser=المستعمل
 TaskTimeNote=ملاحظة
 TaskTimeDate=Date
-TasksOnOpenedProject=المهام على المشاريع المفتوحة
+TasksOnOpenedProject=Tasks on opened projects
 WorkloadNotDefined=عبء العمل غير محددة
 NewTimeSpent=جديد الوقت الذي يقضيه
 MyTimeSpent=وقتي قضى
@@ -96,6 +96,7 @@ ValidateProject=تحقق من مشروع غابة
 ConfirmValidateProject=Are you sure you want to validate this project?
 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)
 ReOpenAProject=فتح مشروع
 ConfirmReOpenAProject=Are you sure you want to re-open this project?
 ProjectContact=مشروع اتصالات
@@ -121,7 +122,7 @@ CloneProjectFiles=انضم مشروع استنساخ ملفات
 CloneTaskFiles=مهمة استنساخ (ق) انضم الملفات (إن مهمة (ق) المستنسخة)
 CloneMoveDate=Update project/tasks dates from now?
 ConfirmCloneProject=Are you sure to clone this project?
-ProjectReportDate=تغيير موعد المهمة وفقا المشروع تاريخ بداية
+ProjectReportDate=Change task dates according to new project start date
 ErrorShiftTaskDate=من المستحيل تحويل التاريخ المهمة وفقا لتاريخ بدء المشروع الجديد
 ProjectsAndTasksLines=المشاريع والمهام
 ProjectCreatedInDolibarr=مشروع٪ الصورة التي تم إنشاؤها
@@ -178,9 +179,9 @@ ProjectsStatistics=إحصاءات عن المشاريع / يؤدي
 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 thirdparties
+OpenedProjectsByThirdparties=مشاريع افتتحه thirdparties
 OnlyOpportunitiesShort=Only opportunities
-OpenedOpportunitiesShort=Open opportunities
+OpenedOpportunitiesShort=Opened opportunities
 NotAnOpportunityShort=Not an opportunity
 OpportunityTotalAmount=فرص المبلغ الإجمالي
 OpportunityPonderatedAmount=كمية الفرص المرجحة

+ 3 - 3
htdocs/langs/ar_SA/propal.lang

@@ -3,7 +3,7 @@ Proposals=مقترحات تجارية
 Proposal=اقتراح التجارية
 ProposalShort=اقتراح
 ProposalsDraft=مقترحات مشاريع تجارية
-ProposalsOpened=مقترحات التجارية المفتوحة
+ProposalsOpened=افتتح مقترحات تجارية
 Prop=مقترحات تجارية
 CommercialProposal=اقتراح التجارية
 ProposalCard=اقتراح بطاقة
@@ -26,9 +26,9 @@ AmountOfProposalsByMonthHT=المبلغ في الشهر (بعد خصم الضر
 NbOfProposals=عدد من المقترحات والتجاري
 ShowPropal=وتظهر اقتراح
 PropalsDraft=المسودات
-PropalsOpened=فتح
+PropalsOpened=Opened
 PropalStatusDraft=مشروع (لا بد من التحقق من صحة)
-PropalStatusValidated=صادق (اقتراح فتح)
+PropalStatusValidated=Validated (proposal is opened)
 PropalStatusSigned=وقعت (لمشروع القانون)
 PropalStatusNotSigned=لم يتم التوقيع (مغلقة)
 PropalStatusBilled=فواتير

+ 4 - 2
htdocs/langs/ar_SA/stocks.lang

@@ -22,13 +22,15 @@ Movements=حركات
 ErrorWarehouseRefRequired=مستودع الاشارة اسم مطلوب
 ListOfWarehouses=لائحة المخازن
 ListOfStockMovements=قائمة الحركات الأسهم
+StockMovementForId=Movement ID %d
+ListMouvementStockProject=List of stock movements associated to project
 StocksArea=منطقة المستودعات
 Location=عوضا عن
 LocationSummary=باختصار اسم الموقع
 NumberOfDifferentProducts=عدد من المنتجات المختلفة
 NumberOfProducts=العدد الإجمالي للمنتجات
-LastMovement=الماضي حركة
-LastMovements=التحركات الأخيرة
+LastMovement=Latest movement
+LastMovements=Latest movements
 Units=الوحدات
 Unit=وحدة
 StockCorrection=تصحيح الأوراق المالية

+ 2 - 2
htdocs/langs/ar_SA/supplier_proposal.lang

@@ -8,7 +8,7 @@ SearchRequest=العثور على الطلب
 DraftRequests=مشروع طلبات
 SupplierProposalsDraft=Draft supplier proposals
 LastModifiedRequests=Latest %s modified price requests
-RequestsOpened=طلبات السعر المفتوحة
+RequestsOpened=Opened price requests
 SupplierProposalArea=منطقة مقترحات المورد
 SupplierProposalShort=اقتراح المورد
 SupplierProposals=مقترحات المورد
@@ -23,7 +23,7 @@ ConfirmValidateAsk=Are you sure you want to validate this price request under na
 DeleteAsk=حذف الطلب
 ValidateAsk=التحقق من صحة الطلب
 SupplierProposalStatusDraft=مشروع (يجب التحقق من صحة)
-SupplierProposalStatusValidated=التحقق من صحة (طلب مفتوح)
+SupplierProposalStatusValidated=Validated (request is opened)
 SupplierProposalStatusClosed=مغلق
 SupplierProposalStatusSigned=قبلت
 SupplierProposalStatusNotSigned=رفض

+ 5 - 4
htdocs/langs/ar_SA/suppliers.lang

@@ -9,7 +9,7 @@ ShowSupplier=وتظهر المورد
 OrderDate=من أجل التاريخ
 BuyingPriceMin=Best buying price
 BuyingPriceMinShort=Best buying price
-TotalBuyingPriceMinShort=Total of subproducts buying prices
+TotalBuyingPriceMinShort=مجموعه subproducts شراء أسعار
 TotalSellingPriceMinShort=Total of subproducts selling prices
 SomeSubProductHaveNoPrices=بعض المنتجات الفرعية التي لا تعرف السعر
 AddSupplierPrice=Add buying price
@@ -24,10 +24,10 @@ ExportDataset_fournisseur_1=قائمة فواتير الموردين والفو
 ExportDataset_fournisseur_2=فواتير الموردين والمدفوعات
 ExportDataset_fournisseur_3=أوامر المورد وخطوط أجل
 ApproveThisOrder=الموافقة على هذا النظام
-ConfirmApproveThisOrder=هل أنت متأكد من أن يوافق على هذا الأمر؟
+ConfirmApproveThisOrder=Are you sure you want to approve order <b>%s</b>?
 DenyingThisOrder=إنكار هذا النظام
-ConfirmDenyingThisOrder=هل أنت متأكد من إنكار هذا الأمر؟
-ConfirmCancelThisOrder=هل أنت متأكد من أنك تريد إلغاء هذا النظام؟
+ConfirmDenyingThisOrder=Are you sure you want to deny this order <b>%s</b>?
+ConfirmCancelThisOrder=Are you sure you want to cancel this order <b>%s</b>?
 AddSupplierOrder=من أجل إنشاء مورد
 AddSupplierInvoice=إنشاء مورد فاتورة
 ListOfSupplierProductForSupplier=قائمة المنتجات والأسعار لمورد <b>ق ٪</b>
@@ -41,3 +41,4 @@ DoNotOrderThisProductToThisSupplier=Do not order
 NotTheGoodQualitySupplier=Wrong quality
 ReputationForThisProduct=Reputation
 BuyerName=Buyer name
+AllProductServicePrices=All product / service prices

+ 1 - 1
htdocs/langs/ar_SA/users.lang

@@ -36,7 +36,7 @@ AdministratorDesc=مدير
 DefaultRights=الافتراضي أذونات
 DefaultRightsDesc=التقصير هنا تحديد الاذونات التي تمنح تلقائيا للمستخدم إنشاء جديد.
 DolibarrUsers=Dolibarr المستخدمين
-LastName=Last Name
+LastName=اللقب
 FirstName=الاسم الأول
 ListOfGroups=قائمة المجموعات
 NewGroup=مجموعة جديدة

+ 3 - 2
htdocs/langs/ar_SA/withdrawals.lang

@@ -24,6 +24,7 @@ WithdrawStatistics=Direct debit payment statistics
 WithdrawRejectStatistics=Direct debit payment reject statistics
 LastWithdrawalReceipt=Latest %s direct debit receipts
 MakeWithdrawRequest=Make a direct debit payment request
+WithdrawRequestsDone=%s direct debit payment requests recorded
 ThirdPartyBankCode=طرف ثالث بنك مدونة
 NoInvoiceCouldBeWithdrawed=أي فاتورة withdrawed بالنجاح. تأكد من أن الفاتورة على الشركات الحظر ساري المفعول.
 ClassCredited=تصنيف حساب
@@ -76,8 +77,8 @@ RUM=UMR
 RUMLong=Unique Mandate Reference
 RUMWillBeGenerated=UMR number will be generated once bank account information are saved
 WithdrawMode=Direct debit mode (FRST or RECUR)
-WithdrawRequestAmount=سحب طلب كمية:
-WithdrawRequestErrorNilAmount=غير قادر على إنشاء سحب طلب مبلغ لا شيء.
+WithdrawRequestAmount=Amount of Direct debit request:
+WithdrawRequestErrorNilAmount=Unable to create direct debit request for empty amount.
 SepaMandate=SEPA Direct Debit Mandate
 SepaMandateShort=SEPA Mandate
 PleaseReturnMandate=Please return this mandate form by email to %s or by mail to

+ 3 - 0
htdocs/langs/bg_BG/accountancy.lang

@@ -194,6 +194,8 @@ ChangeBinding=Change the binding
 
 ## Admin
 ApplyMassCategories=Apply mass categories
+AddAccountFromBookKeepingWithNoCategories=Add acccount already used with no categories
+CategoryDeleted=Category for the accounting account has been removed
 
 ## Export
 Exports=Exports
@@ -209,6 +211,7 @@ Modelcsv_ciel=Export towards Sage Ciel Compta or Compta Evolution
 Modelcsv_quadratus=Export towards Quadratus QuadraCompta
 Modelcsv_ebp=Export towards EBP
 Modelcsv_cogilog=Export towards Cogilog
+ChartofaccountsId=Chart of accounts Id
 
 ## Tools - Init accounting account on product / service
 InitAccountancy=Init accountancy

+ 34 - 27
htdocs/langs/bg_BG/admin.lang

@@ -9,17 +9,20 @@ VersionDevelopment=Разработка
 VersionUnknown=Неизвестен
 VersionRecommanded=Препоръчва се
 FileCheck=Files integrity checker
-FileCheckDesc=This tool allows you to check the integrity of files of your application, comparing each files with the official ones. 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 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.
-FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified of removed.
+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)
 FilesMissing=Missing Files
 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 a certified 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=ID на сесията
 SessionSaveHandler=Handler за да запазите сесията
@@ -188,7 +191,9 @@ BoxesDesc=Widgets are components showing some information that you can add to pe
 OnlyActiveElementsAreShown=Показани са само елементи от <a href="%s">активирани модули</a>.
 ModulesDesc=Dolibarr modules define which functionality is enabled in software. Some modules require permissions you must grant to users, after enabling module. Click on button on/off to enable a module/feature.
 ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
-ModulesMarketPlaces=Повече модули ...
+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 modules...
+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...
@@ -280,20 +285,21 @@ MenuHandlers=Меню работещи
 MenuAdmin=Menu Editor
 DoNotUseInProduction=Не използвайте на продукшън платформа
 ThisIsProcessToFollow=This is steps to process:
-ThisIsAlternativeProcessToFollow=This is an alternative setup to process:
+ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
 StepNb=Стъпка %s
 FindPackageFromWebSite=Намери пакет, който осигурява функция искате (например относно официалния уеб сайт %s).
 DownloadPackageFromWebSite=Download package (for example from official web site %s).
-UnpackPackageInDolibarrRoot=Unpack package file into Dolibarr server directory dedicated to external modules: <b>%s</b>
-SetupIsReadyForUse=Install е завършен и Dolibarr е готов за използване с този нов компонент.
-NotExistsDirect=Алтернатива главната директория не е дефинирано. <br>
-InfDirAlt=От версия 3 е възможно да се определи алтернативен directory.This корен ви позволява да съхранявате, едно и също място, плъгини и собствени шаблони. <br> Просто създайте директория, в основата на Dolibarr (напр. по поръчка). <br>
-InfDirExample=<br> След това заяви в файла conf.php <br> $ Dolibarr_main_url_root_alt = 'http://myserver/custom &quot; <br> $ Dolibarr_main_document_root_alt = &quot;/ път / / dolibarr / htdocs / по избор&quot; <br> * Тези линии са коментирани с &quot;#&quot;, да разкоментирате само да премахнете характер.
+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='http://myserver/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 send package using this tool: Select module file
 CurrentVersion=Текуща версия на Dolibarr
 CallUpdatePage=Go to the page that updates the database structure and data: %s.
 LastStableVersion=Latest stable version
-LastActivationDate=Last activation date
+LastActivationDate=Latest activation date
 UpdateServerOffline=Update server offline
 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 dictionary-thirdparty types).<br>
@@ -376,11 +382,11 @@ ExtrafieldCheckBox=Отметка
 ExtrafieldRadio=Радио бутон
 ExtrafieldCheckBoxFromList= Checkbox from table
 ExtrafieldLink=Link to an object
-ExtrafieldParamHelpselect=Parameters list have to be like key,value<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...<br><br>In order to have the list depending on another :<br>1,value1|parent_list_code:parent_key<br>2,value2|parent_list_code:parent_key
+ExtrafieldParamHelpselect=Parameters list have to be like key,value<br><br> for example : <br>1,value1<br>2,value2<br>3,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=Parameters list have to be like key,value<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
 ExtrafieldParamHelpradio=Parameters list have to be like key,value<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
-ExtrafieldParamHelpsellist=Parameters list 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 :<br>c_typent:libelle:id:parent_list_code|parent_column:filter
-ExtrafieldParamHelpchkbxlst=Parameters list 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 :<br>c_typent:libelle:id:parent_list_code|parent_column:filter
+ExtrafieldParamHelpsellist=Parameters list 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
+ExtrafieldParamHelpchkbxlst=Parameters list 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>Example : Societe:societe/class/societe.class.php
 LibraryToBuildPDF=Library used for PDF generation
 WarningUsingFPDF=Warning: Your <b>conf.php</b> contains directive <b>dolibarr_pdf_force_fpdf=1</b>. This means you use the FPDF library to generate PDF files. This library is old and does not support a lot of features (Unicode, image transparency, cyrillic, arab and asiatic languages, ...), so you may experience errors during PDF generation.<br>To solve this and have a full support of PDF generation, please download <a href="http://www.tcpdf.org/" target="_blank">TCPDF library</a>, then comment or remove the line <b>$dolibarr_pdf_force_fpdf=1</b>, and add instead <b>$dolibarr_lib_TCPDF_PATH='path_to_TCPDF_dir'</b>
@@ -415,10 +421,10 @@ ModuleCompanyCodeDigitaria=Счетоводството код зависи от
 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: Some email providers (like Yahoo) does not allow you to send an email from another server than the Yahoo server if the email address used as a sender is your Yahoo email (like myemail@yahoo.com, myemail@yahoo.fr, ...). Your current setup use the server of the application to send email, so some recipients (the one compatible with the restrictive DMARC protocol), will ask Yahoo if they can accept your email and Yahoo will respond "no" because the server is not a server owned by Yahoo, so few of your sent Emails may not be accepted.<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).
-
+ClickToShowDescription=Click to show description
 # Modules
 Module0Name=Потребители и групи
-Module0Desc=Управление на потребители и групи
+Module0Desc=Users / Employees and Groups management
 Module1Name=Контрагенти
 Module1Desc=Фирми и управление на контакти
 Module2Name=Търговски
@@ -689,7 +695,7 @@ PermissionAdvanced253=Създаване / промяна на вътрешни
 Permission254=Създаване / промяна на външни потребители
 Permission255=Промяна на други потребители парола
 Permission256=Изтрий или забраняване на други потребители
-Permission262=Extend access to all third parties (not only third parties that user is a sale representative). Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc). 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).<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).
 Permission271=Прочети CA
 Permission272=Прочети фактури
 Permission273=Издаване на фактури
@@ -891,7 +897,7 @@ Offset=Офсет
 AlwaysActive=Винаги активна
 Upgrade=Обновяване
 MenuUpgrade=Обновяване/Удължаване
-AddExtensionThemeModuleOrOther=Добавяне на разширение (тема, модул, ...)
+AddExtensionThemeModuleOrOther=Deploy/install external module
 WebServer=Уеб сървър
 DocumentRootServer=Главната директория на уеб сървъра
 DataRootServer=Файлове с данни
@@ -1165,10 +1171,6 @@ FreeLegalTextOnOrders=Свободен текст на поръчки
 WatermarkOnDraftOrders=Watermark on draft orders (none if empty)
 ShippableOrderIconInList=Add an icon in Orders list which indicate if order is shippable
 BANK_ASK_PAYMENT_BANK_DURING_ORDER=Ask for bank account destination of order
-##### Clicktodial #####
-ClickToDialSetup=Кликнете, за да наберете настройка модул
-ClickToDialUrlDesc=Адреса нарича, когато се извършва едно кликване на телефона пиктограма. URL, можете да използвате маркери <br> <b>__PHONETO__,</b> Които ще бъдат заменени с телефонния номер на лицето, да се обадите <br> <b>__PHONEFROM__,</b> Че ще бъде заменен с телефонния номер на повикващата лице (твое) <br> <b>__LOGIN__,</b> Които ще бъдат заменени с clicktodial вход (определено на вашето потребителско карта) <br> <b>__PASS__,</b> Които ще бъдат заменени с clicktodial вашата парола (определено на вашето потребителско карта).
-##### Bookmark4u #####
 ##### Interventions #####
 InterventionsSetup=Интервенциите модул за настройка
 FreeLegalTextOnInterventions=Свободен текст на интервенционни документи
@@ -1395,7 +1397,7 @@ SendingsSetup=Изпращане модул за настройка
 SendingsReceiptModel=Изпращане получаване модел
 SendingsNumberingModules=Sendings номериране модули
 SendingsAbility=Support shipping sheets for customer deliveries
-NoNeedForDeliveryReceipts=В повечето случаи, sendings постъпления се използват както за листа за клиентите доставки (списък на продукти за изпращане) и листове, че е recevied и подписан от клиента. Така че продукти доставки постъпления е дублирана функция и рядко се активира.
+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.
 FreeLegalTextOnShippings=Free text on shipments
 ##### Deliveries #####
 DeliveryOrderNumberingModules=Продукти доставки получаване номерацията модул
@@ -1477,7 +1479,9 @@ AGENDA_DEFAULT_FILTER_STATUS=Set automatically this status for events into searc
 AGENDA_DEFAULT_VIEW=Which tab do you want to open by default when selecting menu Agenda
 AGENDA_NOTIFICATION=Enable event notification on user browsers when event date is reached (each user is able to refuse this from the browser confirmation question)
 AGENDA_NOTIFICATION_SOUND=Enable sound notification
-##### ClickToDial #####
+##### Clicktodial #####
+ClickToDialSetup=Кликнете, за да наберете настройка модул
+ClickToDialUrlDesc=Адреса нарича, когато се извършва едно кликване на телефона пиктограма. URL, можете да използвате маркери <br> <b>__PHONETO__,</b> Които ще бъдат заменени с телефонния номер на лицето, да се обадите <br> <b>__PHONEFROM__,</b> Че ще бъде заменен с телефонния номер на повикващата лице (твое) <br> <b>__LOGIN__,</b> Които ще бъдат заменени с clicktodial вход (определено на вашето потребителско карта) <br> <b>__PASS__,</b> Които ще бъдат заменени с clicktodial вашата парола (определено на вашето потребителско карта).
 ClickToDialDesc=Този модул позволява телефонните номера да могат да се кликват. Кликване върху тази икона ще предизвика вашият телефон да набере телефонния номер. Това може да бъде използвано за обаждане към кол център система, която може да набере телефония номер на SIP система например.
 ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
 ClickToDialUseTelLinkDesc=Използвайте този метод ако вашите потребители имат софт-телефон или софтуерен интерфейс на същия компютър, на който е браузера, и повиквани с клик на линк във вашия браузер, който започва с "tel:". Ако се нуждаете от пълно сървърно решение (без нужда за локална софтуерна инсталация), трябва да зададете на това "Не" или да попълните следващото поле.
@@ -1505,10 +1509,11 @@ EndPointIs=SOAP clients must send their requests to the Dolibarr endpoint availa
 ##### API ####
 ApiSetup=API module setup
 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 caches for services management)
+ApiProductionMode=Enable production mode (this will activate use of a cache for services management)
 ApiExporerIs=You can explore 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.
 ##### Bank #####
 BankSetupModule=Модул за настройка на банката
 FreeLegalTextOnChequeReceipts=Свободен текст чековите разписки
@@ -1577,7 +1582,7 @@ 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.
 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.
-ConfFileMuseContainCustom=Installing 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 have option<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
+ConfFileMuseContainCustom=Installing 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=Цвят за подчертаване на линията, когато мишката мине отгоре (оставете празно за без подчертаване)
 TextTitleColor=Цвят на заглавието на страницата
@@ -1607,6 +1612,7 @@ FixTZ=TimeZone fix
 FillFixTZOnlyIfRequired=Example: +2 (fill only if problem experienced)
 ExpectedChecksum=Expected Checksum
 CurrentChecksum=Current Checksum
+ForcedConstants=Required constant values
 MailToSendProposal=To send customer proposal
 MailToSendOrder=To send customer order
 MailToSendInvoice=To send customer invoice
@@ -1615,9 +1621,10 @@ MailToSendIntervention=To send intervention
 MailToSendSupplierRequestForQuotation=To send quotation request to supplier
 MailToSendSupplierOrder=To send supplier order
 MailToSendSupplierInvoice=To send supplier invoice
+MailToSendContract=To send a contract
 MailToThirdparty=To send email from third party page
 ByDefaultInList=Показване по подразбиране при показа на списък
-YouUseLastStableVersion=Използвате последната стабилна версия
+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.

+ 31 - 18
htdocs/langs/bg_BG/bills.lang

@@ -1,13 +1,13 @@
 # Dolibarr language file - Source file is en_US - bills
 Bill=Фактура
 Bills=Фактури
-BillsCustomers=Продажни фактури
+BillsCustomers=Клиентски фактури
 BillsCustomer=Продажна фактура
-BillsSuppliers=Доставни фактури
-BillsCustomersUnpaid=Неплатени продажни фактури
-BillsCustomersUnpaidForCompany=Неплатени продажни фактури за %s
-BillsSuppliersUnpaid=Неплатени доставни фактури
-BillsSuppliersUnpaidForCompany=Неплатени доставни фактури за %s
+BillsSuppliers=Фактури доставчици
+BillsCustomersUnpaid=Неплатени клиентски фактури
+BillsCustomersUnpaidForCompany=Unpaid customer invoices for %s
+BillsSuppliersUnpaid=Неплатени фактури от доставчици
+BillsSuppliersUnpaidForCompany=Unpaid supplier invoices for %s
 BillsLate=Забавени плащания
 BillsStatistics=Статистика за продажни фактури
 BillsStatisticsSuppliers=Статистика за доставни фактури
@@ -62,8 +62,8 @@ PaymentsBack=Обратни плащания
 paymentInInvoiceCurrency=in invoices currency
 PaidBack=Платено обратно
 DeletePayment=Изтрий плащане
-ConfirmDeletePayment=Are you sure you want to delete this payment?
-ConfirmConvertToReduc=Do you want to convert this credit note or deposit 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.
+ConfirmDeletePayment=Сигурен ли сте, че искате да изтриете това плащане?
+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.
 SupplierPayments=Плащания към доставчици
 ReceivedPayments=Получени плащания
 ReceivedCustomersPayments=Плащания получени от клиенти
@@ -78,6 +78,7 @@ PaymentMode=Тип на плащане
 PaymentTypeDC=Debit/Credit Card
 PaymentTypePP=PayPal
 IdPaymentMode=Payment type (id)
+CodePaymentMode=Payment type (code)
 LabelPaymentMode=Payment type (label)
 PaymentModeShort=Начин на плащане
 PaymentTerm=Условие за плащане
@@ -102,9 +103,10 @@ SearchACustomerInvoice=Търсене за продажна фактура
 SearchASupplierInvoice=Търсене за доставна фактура
 CancelBill=Отказване на фактура
 SendRemindByMail=Изпращане на напомняне по имейл
-DoPayment=Направете плащане
-DoPaymentBack=Направете плащане със задна дата
+DoPayment=Enter payment
+DoPaymentBack=Enter refund
 ConvertToReduc=Конвертиране в бъдеще отстъпка
+ConvertExcessReceivedToReduc=Convert excess received into future discount
 EnterPaymentReceivedFromCustomer=Въведете плащане получено от клиент
 EnterPaymentDueToCustomer=Дължимото плащане на клиента
 DisabledBecauseRemainderToPayIsZero=Деактивирано понеже остатъка за плащане е нула
@@ -151,14 +153,14 @@ NoQualifiedRecurringInvoiceTemplateFound=No recurring template invoice qualified
 FoundXQualifiedRecurringInvoiceTemplate=Found %s recurring template invoice(s) qualified for generation.
 NotARecurringInvoiceTemplate=Not a recurring template invoice
 NewBill=Нова фактура
-LastBills=Последните %s фактури
-LastCustomersBills=Последните %s продажни фактури
-LastSuppliersBills=Последните %s доставни фактури
+LastBills=Latest %s invoices
+LastCustomersBills=Latest %s customer invoices
+LastSuppliersBills=Latest %s supplier invoices
 AllBills=Всички фактури
 OtherBills=Други фактури
 DraftBills=Чернови фактури
-CustomersDraftInvoices=Чернови за продажни фактури
-SuppliersDraftInvoices=Чернови за доставни фактури
+CustomersDraftInvoices=Customer draft invoices
+SuppliersDraftInvoices=Supplier draft invoices
 Unpaid=Неплатен
 ConfirmDeleteBill=Are you sure you want to delete this invoice?
 ConfirmValidateBill=Are you sure you want to validate this invoice with reference <b>%s</b>?
@@ -272,6 +274,7 @@ Deposit=Депозит
 Deposits=Депозити
 DiscountFromCreditNote=Отстъпка от кредитно известие %s
 DiscountFromDeposit=Плащания от депозитна фактура %s
+DiscountFromExcessReceived=Payments from excess received of invoice %s
 AbsoluteDiscountUse=Този вид кредит може да се използва по фактура преди нейното валидиране
 CreditNoteDepositUse=Invoice must be validated to use this kind of credits
 NewGlobalDiscount=Нова абсолютна отстъпка
@@ -279,8 +282,8 @@ NewRelativeDiscount=Нова относителна отстъпка
 NoteReason=Бележка/Причина
 ReasonDiscount=Причина
 DiscountOfferedBy=Предоставено от
-DiscountStillRemaining=Отстъпки все още останали
-DiscountAlreadyCounted=Отстъпки вече приложени
+DiscountStillRemaining=Discounts available
+DiscountAlreadyCounted=Discounts already consumed
 BillAddress=Фактурен адрес
 HelpEscompte=Тази отстъпка е предоставена на клиента, тъй като плащането е извършено преди срока.
 HelpAbandonBadCustomer=Тази сума е изоставена (клиентът се оказва лош клиент) и се счита като извънредна загуба.
@@ -333,6 +336,8 @@ InvoiceAutoValidate=Validate invoices automatically
 GeneratedFromRecurringInvoice=Generated from template recurring invoice %s
 DateIsNotEnough=Date not reached yet
 InvoiceGeneratedFromTemplate=Invoice %s generated from recurring template invoice %s
+WarningInvoiceDateInFuture=Warning, the invoice date is higher than current date
+WarningInvoiceDateTooFarInFuture=Warning, the invoice date is too far from current date
 # PaymentConditions
 Statut=Състояние
 PaymentConditionShortRECEP=Due Upon Receipt
@@ -351,6 +356,14 @@ PaymentConditionShortPT_ORDER=Поръчка
 PaymentConditionPT_ORDER=При поръчка
 PaymentConditionShortPT_5050=50-50
 PaymentConditionPT_5050=50% авансово, 50% при доставка
+PaymentConditionShort10D=10 days
+PaymentCondition10D=10 days
+PaymentConditionShort10DENDMONTH=10 days of month-end
+PaymentCondition10DENDMONTH=Within 10 days following the end of the month
+PaymentConditionShort14D=14 days
+PaymentCondition14D=14 days
+PaymentConditionShort14DENDMONTH=14 days of month-end
+PaymentCondition14DENDMONTH=Within 14 days following the end of the month
 FixAmount=Фиксирана сума
 VarAmount=Променлива сума (%% общ.)
 # PaymentType
@@ -420,7 +433,7 @@ ChequeDeposits=Чекови депозити
 Cheques=Чекове
 DepositId=Id депозит
 NbCheque=Брой чекове
-CreditNoteConvertedIntoDiscount=Това кредитно известие или депозитна фактура е превърната в %s
+CreditNoteConvertedIntoDiscount=This %s has been converted into %s
 UsBillingContactAsIncoiveRecipientIfExist=Използвай адрес за фактуриране на клиента, вместо адреса на контрагента като получател за фактури
 ShowUnpaidAll=Покажи всички неплатени фактури
 ShowUnpaidLateOnly=Покажи само неплатените фактури с просрочено плащане

+ 7 - 7
htdocs/langs/bg_BG/boxes.lang

@@ -25,8 +25,8 @@ BoxTitleLastSuppliers=Latest %s recorded suppliers
 BoxTitleLastModifiedSuppliers=Latest %s modified suppliers
 BoxTitleLastModifiedCustomers=Latest %s modified customers
 BoxTitleLastCustomersOrProspects=Latest %s customers or prospects
-BoxTitleLastCustomerBills=Latest %s customer's invoices
-BoxTitleLastSupplierBills=Latest %s supplier's invoices
+BoxTitleLastCustomerBills=Latest %s customer invoices
+BoxTitleLastSupplierBills=Latest %s supplier invoices
 BoxTitleLastModifiedProspects=Latest %s modified prospects
 BoxTitleLastModifiedMembers=Latest %s members
 BoxTitleLastFicheInter=Latest %s modified interventions
@@ -51,12 +51,12 @@ ClickToAdd=Щракнете тук, за да добавите.
 NoRecordedCustomers=Няма записани клиенти
 NoRecordedContacts=Няма записани контакти
 NoActionsToDo=Няма дейности за вършене
-NoRecordedOrders=Няма записани клиентски поръчки
+NoRecordedOrders=No recorded customer orders
 NoRecordedProposals=Няма записани предложения
-NoRecordedInvoices=Няма регистрирани клиенти фактури
-NoUnpaidCustomerBills=Няма непогасени клиента фактури
-NoUnpaidSupplierBills=Няма непогасени доставчика фактури
-NoModifiedSupplierBills=Няма регистрирани доставчика фактури
+NoRecordedInvoices=No recorded customer invoices
+NoUnpaidCustomerBills=No unpaid customer invoices
+NoUnpaidSupplierBills=No unpaid supplier invoices
+NoModifiedSupplierBills=No recorded supplier invoices
 NoRecordedProducts=Няма регистрирани продукти / услуги
 NoRecordedProspects=Няма регистрирани перспективи
 NoContractedProducts=Няма договорени продукти / услуги

+ 3 - 2
htdocs/langs/bg_BG/companies.lang

@@ -81,6 +81,7 @@ PaymentBankAccount=Payment bank account
 OverAllProposals=Total proposals
 OverAllOrders=Total orders
 OverAllInvoices=Total invoices
+OverAllSupplierProposals=Total price requests
 ##### Local Taxes #####
 LocalTax1IsUsed=Използване на втора такса
 LocalTax1IsUsedES= RE се използва
@@ -404,7 +405,7 @@ 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 so you will be able to delete the duplicate one.
 ThirdpartiesMergeSuccess=Контрагентите бяха обединени
 SaleRepresentativeLogin=Login of sales representative
-SaleRepresentativeFirstname=Firstname of sales representative
-SaleRepresentativeLastname=Lastname of sales representative
+SaleRepresentativeFirstname=First name of sales representative
+SaleRepresentativeLastname=Last name of sales representative
 ErrorThirdpartiesMerge=Има грешка при изтриването на контрагентите. Моля проверете системните записи. Промените са възвърнати.
 NewCustomerSupplierCodeProposed=New customer or supplier code suggested on duplicate code

+ 2 - 1
htdocs/langs/bg_BG/compta.lang

@@ -65,6 +65,7 @@ PaymentSocialContribution=Social/fiscal tax payment
 PaymentVat=Плащането на ДДС
 ListPayment=Списък на плащанията
 ListOfCustomerPayments=Списък на клиентски плащания
+ListOfSupplierPayments=Списък на доставчика плащания
 DateStartPeriod=Date start period
 DateEndPeriod=Date end period
 newLT1Payment=New tax 2 payment
@@ -81,7 +82,7 @@ LT2PaymentES=IRPF плащане
 LT2PaymentsES=IRPF Плащания
 VATPayment=Sales tax payment
 VATPayments=Sales tax payments
-VATRefund=Sales tax refund Refund
+VATRefund=Sales tax refund
 Refund=Refund
 SocialContributionsPayments=Social/fiscal taxes payments
 ShowVatPayment=Покажи плащане на ДДС

+ 6 - 6
htdocs/langs/bg_BG/cron.lang

@@ -17,14 +17,14 @@ CronMethodDoesNotExists=Class %s does not contains any method %s
 # Menu
 EnabledAndDisabled=Enabled and disabled
 # Page list
-CronLastOutput=Изходен резултат от последно изпълнени 
-CronLastResult=Послед резултатен код
+CronLastOutput=Latest run output
+CronLastResult=Latest result code
 CronCommand=Команда
 CronList=Планирани задачи
 CronDelete=Изтриване на планирани задачи
-CronConfirmDelete=Сигурни ли сте, че искате да изтриете тези планирани задачи ?
+CronConfirmDelete=Are you sure you want to delete these scheduled jobs?
 CronExecute=Launch scheduled job
-CronConfirmExecute=Сигурни ли сте, че искате да се изпълнят тези планирани задачи сега ?
+CronConfirmExecute=Are you sure you want to execute these scheduled jobs now?
 CronInfo=Модул Планирана задача позволява да се изпълни задача, която е била планирана
 CronTask=Задача
 CronNone=Няма
@@ -39,7 +39,7 @@ CronMethod=Метод
 CronModule=Модул
 CronNoJobs=Няма регистрирани задачи
 CronPriority=Приоритет
-CronLabel=Label
+CronLabel=Етикет
 CronNbRun=Nb. зареждане
 CronMaxRun=Max nb. launch
 CronEach=Всеки
@@ -73,7 +73,7 @@ CronType_method=Изпълни метод на Dolibarr клас
 CronType_command=Терминална команда
 CronCannotLoadClass=Неможе да се зареди класа %s или обекта %s
 UseMenuModuleToolsToAddCronJobs=Go into menu "Home - Admin tools - Scheduled jobs" to see and edit scheduled jobs.
-JobDisabled=Job disabled
+JobDisabled=Неактивирани задачи
 MakeLocalDatabaseDumpShort=Local database backup
 MakeLocalDatabaseDump=Create a local database dump
 WarningCronDelayed=Attention, for performance purpose, whatever is next date of execution of active jobs, your jobs may be delayed to a maximum of %s hours before being run.

+ 4 - 1
htdocs/langs/bg_BG/errors.lang

@@ -11,6 +11,7 @@ ErrorLoginAlreadyExists=Вход %s вече съществува.
 ErrorGroupAlreadyExists=Група %s вече съществува.
 ErrorRecordNotFound=Запишете не е намерен.
 ErrorFailToCopyFile=Не успя да копира файла <b>&quot;%s&quot;</b> в <b>&quot;%s&quot;.</b>
+ErrorFailToCopyDir=Failed to copy directory '<b>%s</b>' into '<b>%s</b>'.
 ErrorFailToRenameFile=Неуспешно преименуване на файлове <b>&quot;%s&quot;</b> в <b>&quot;%s&quot;.</b>
 ErrorFailToDeleteFile=Неуспех при премахването на файл <b>&quot;%s&quot;.</b>
 ErrorFailToCreateFile=Грешка при създаване на файл <b>&quot;%s&quot;.</b>
@@ -115,7 +116,7 @@ ErrorNoActivatedBarcode=Не е тип баркод активира
 ErrUnzipFails=Неуспех да разархивирате %s с ZipArchive
 ErrNoZipEngine=No engine to unzip %s file in this PHP
 ErrorFileMustBeADolibarrPackage=Файла %s трябва да бъде Dolibarr zip архив
-ErrorFileRequired=Отнема файла пакет Dolibarr
+ErrorModuleFileRequired=You must select a Dolibarr module package file
 ErrorPhpCurlNotInstalled=PHP навийте не е инсталиран, това е от съществено значение, за да разговаря с Paypal
 ErrorFailedToAddToMailmanList=Неуспешно добавяне на запис на пощальона списък или база СПИП
 ErrorFailedToRemoveToMailmanList=Failed to remove record %s to Mailman list %s or SPIP base
@@ -181,6 +182,8 @@ ErrorBankStatementNameMustFollowRegex=Error, bank statement name must follow the
 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>
 
 # Warnings
 WarningPasswordSetWithNoAccount=Парола е зададено за този член. Обаче, няма създаден потребителски акаунт. Следователно тази парола е записана, но не може да бъде използвана за влизане в Dolibarr. Може да бъде използвана от външен модул/интерфейс, но ако нямате нужда да определите нито потребителско име нито парола за член, можете да деактивирате тази опция. Ако имате нужда да управлявате потребителско име, но нямата нужда от парола, можете да оставите това поле празно, за да избегнете това предупреждение. Забележка: Имейл също може да бъде използван като потребителско име ако члена с свързан към потребител.

+ 2 - 2
htdocs/langs/bg_BG/holiday.lang

@@ -76,8 +76,8 @@ BoxTitleLastLeaveRequests=Latest %s modified leave requests
 HolidaysMonthlyUpdate=Месечна актуализация
 ManualUpdate=Ръчна акуализация
 HolidaysCancelation=Отказване на молба за отпуск
-EmployeeLastname=Employee lastname
-EmployeeFirstname=Employee firstname
+EmployeeLastname=Employee last name
+EmployeeFirstname=Employee first name
 TypeWasDisabledOrRemoved=Leave type (id %s) was disabled or removed
 
 ## Configuration du Module ##

+ 2 - 2
htdocs/langs/bg_BG/ldap.lang

@@ -13,8 +13,8 @@ LDAPUsers=Потребителите в LDAP база данни
 LDAPFieldStatus=Статус
 LDAPFieldFirstSubscriptionDate=Първа абонамент дата
 LDAPFieldFirstSubscriptionAmount=Първа размера
-LDAPFieldLastSubscriptionDate=Последно абонамент дата
-LDAPFieldLastSubscriptionAmount=Последно размера
+LDAPFieldLastSubscriptionDate=Latest subscription date
+LDAPFieldLastSubscriptionAmount=Latest subscription amount
 LDAPFieldSkype=Skype id
 LDAPFieldSkypeExample=Example : skypeName
 UserSynchronized=Потребителят синхронизирани

+ 9 - 2
htdocs/langs/bg_BG/mails.lang

@@ -74,14 +74,18 @@ ResultOfMailSending=Резултат от масово изпращане на 
 NbSelected=Nb selected
 NbIgnored=Nb ignored
 NbSent=Nb sent
-ContactsWithThirdpartyFilter=Contact with customer filters
+ConfirmUnvalidateEmailing=Are you sure you want to change email <b>%s</b> to draft status?
+MailingModuleDescContactsWithThirdpartyFilter=Contact with customer filters
+MailingModuleDescContactsByCompanyCategory=Contacts by third party category
+MailingModuleDescContactsByCategory=Contacts by categories
+MailingModuleDescContactsByFunction=Contacts by position
 
 # Libelle des modules de liste de destinataires mailing
 LineInFile=Line %s във файла
 RecipientSelectionModules=Определени искания за подбор на получателя
 MailSelectedRecipients=Избрани получателите
 MailingArea=Имейли
-LastMailings=Последните %s имейла
+LastMailings=Latest %s emailings
 TargetsStatistics=Насочена е към статистиката
 NbOfCompaniesContacts=Уникални контакти на фирми
 MailNoChangePossible=Получатели на за валидирани електронната поща не може да бъде променена
@@ -146,3 +150,6 @@ AdvTgtCreateFilter=Create filter
 AdvTgtOrCreateNewFilter=Name of new filter
 NoContactWithCategoryFound=No contact/address with a category found
 NoContactLinkedToThirdpartieWithCategoryFound=No contact/address with a category found
+OutGoingEmailSetup=Outgoing email setup
+InGoingEmailSetup=Incoming email setup
+

+ 8 - 2
htdocs/langs/bg_BG/main.lang

@@ -69,6 +69,7 @@ SetDate=Настройка на дата
 SelectDate=Изберете дата
 SeeAlso=Вижте също %s
 SeeHere=Вижте тук
+Apply=Приложи
 BackgroundColorByDefault=Стандартен цвят на фона
 FileRenamed=The file was successfully renamed
 FileUploaded=Файлът е качен успешно
@@ -87,7 +88,7 @@ Undefined=Неопределен
 PasswordForgotten=Password forgotten?
 SeeAbove=Виж по-горе
 HomeArea=Начало
-LastConnexion=Последно свързване
+LastConnexion=Latest connection
 PreviousConnexion=Предишно свързване
 PreviousValue=Previous value
 ConnectedOnMultiCompany=Свързан към обекта
@@ -237,7 +238,7 @@ DateCreation=Дата на създаване
 DateCreationShort=Дата създ.
 DateModification=Дата на промяна
 DateModificationShort=Дата промяна
-DateLastModification=Дата на последна промяна
+DateLastModification=Latest modification date
 DateValidation=Дата на валидиране
 DateClosing=Дата на приключване
 DateDue=Дата на падеж
@@ -599,6 +600,8 @@ SessionName=Име на сесията
 Method=Метод
 Receive=Получавам
 CompleteOrNoMoreReceptionExpected=Complete or nothing more expected
+ExpectedValue=Expected Value
+CurrentValue=Текуща стойност
 PartialWoman=Частична
 TotalWoman=Обща
 NeverReceived=Никога не получено
@@ -756,6 +759,7 @@ SomeTranslationAreUncomplete=Some languages may be partially translated or may c
 DirectDownloadLink=Direct download link
 Download=Download
 ActualizeCurrency=Update currency rate
+Fiscalyear=Fiscal year
 # Week day
 Monday=Понеделник
 Tuesday=Вторник
@@ -812,3 +816,5 @@ SearchIntoContracts=Договори
 SearchIntoCustomerShipments=Customer shipments
 SearchIntoExpenseReports=Опис разходи
 SearchIntoLeaves=Отпуски
+
+BulkActions=Bulk actions

+ 3 - 3
htdocs/langs/bg_BG/members.lang

@@ -136,8 +136,8 @@ DocForAllMembersCards=Генериране на визитни картички
 DocForOneMemberCards=Генериране на бизнес карти за конкретен член
 DocForLabels=Генериране на листи с адреси
 SubscriptionPayment=Плащане на членски внос
-LastSubscriptionDate=Последна дата на чл. внос
-LastSubscriptionAmount=Последна сума на чл. внос
+LastSubscriptionDate=Latest subscription date
+LastSubscriptionAmount=Latest subscription amount
 MembersStatisticsByCountries=Статистика за членовете по държава
 MembersStatisticsByState=Статистика за членовете по област
 MembersStatisticsByTown=Статистика за членовете по град
@@ -149,7 +149,7 @@ MembersByStateDesc=Този екран показва статистически
 MembersByTownDesc=Този екран показва статистическите данни за членовете по град.
 MembersStatisticsDesc=Изберете статистически данни, които искате да прочетете ...
 MenuMembersStats=Статистика
-LastMemberDate=Последна дата на член
+LastMemberDate=Latest member date
 Nature=Естество
 Public=Информацията е публичнна
 NewMemberbyWeb=Новия член е добавен. Очаква се одобрение

+ 2 - 2
htdocs/langs/bg_BG/orders.lang

@@ -39,7 +39,7 @@ StatusOrderRefusedShort=Отказан
 StatusOrderBilledShort=Осчетоводено
 StatusOrderToProcessShort=За изпълнение
 StatusOrderReceivedPartiallyShort=Частично получено
-StatusOrderReceivedAllShort=Всичко получено
+StatusOrderReceivedAllShort=Products received
 StatusOrderCanceled=Отменен
 StatusOrderDraft=Проект (трябва да бъдат валидирани)
 StatusOrderValidated=Валидиран
@@ -51,7 +51,7 @@ StatusOrderApproved=Одобрен
 StatusOrderRefused=Отказан
 StatusOrderBilled=Осчетоводено
 StatusOrderReceivedPartially=Частично получено
-StatusOrderReceivedAll=Всичко получено
+StatusOrderReceivedAll=All products received
 ShippingExist=Доставка съществува
 QtyOrdered=Поръчано к-во
 ProductQtyInDraft=Количество продукти в поръчки чернови

+ 5 - 4
htdocs/langs/bg_BG/other.lang

@@ -68,14 +68,15 @@ PredefinedMailContentSendSupplierInvoice=__CONTACTCIVNAME__\n\nТук ще на
 PredefinedMailContentSendShipping=__CONTACTCIVNAME__\n\nYou will find here the shipping __SHIPPINGREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__
 PredefinedMailContentSendFichInter=__CONTACTCIVNAME__\n\nYou will find here the intervention __FICHINTERREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__
 PredefinedMailContentThirdparty=__CONTACTCIVNAME__\n\n__PERSONALIZED__\n\n__SIGNATURE__
-DemoDesc=Dolibarr is a compact ERP/CRM supporting several functional modules. A demo showcasing all modules makes no sense as this scenario never occurs. So, several demo profiles are available.
+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...
+ChooseYourDemoProfilMore=...or build your own profile<br>(manual module selection)
 DemoFundation=Управление на членовете на организация
 DemoFundation2=Управление на членовете и банковата сметка на организация
-DemoCompanyServiceOnly=Управление на услуги от лице на свободна практика
+DemoCompanyServiceOnly=Company or freelance selling service only
 DemoCompanyShopWithCashDesk=Управление на магазин с каса
-DemoCompanyProductAndStocks=Управление на малка или средна фирма, продаваща продукти
-DemoCompanyAll=Управление на малка или средна фирма с множество дейности (всички основни модули)
+DemoCompanyProductAndStocks=Company selling products with a shop
+DemoCompanyAll=Company with multiple activities (all main modules)
 CreatedBy=Създадено от %s
 ModifiedBy=Променено от %s
 ValidatedBy=Валидирано от %s

+ 40 - 2
htdocs/langs/bg_BG/products.lang

@@ -60,7 +60,7 @@ 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=In a future version, this value could be used for margin calculation.
+CostPriceUsage=This value could be used for margin calculation.
 SoldAmount=Sold amount
 PurchasedAmount=Purchased amount
 NewPrice=Нова цена
@@ -142,6 +142,7 @@ ConfirmCloneProduct=Are you sure you want to clone product or service <b>%s</b>?
 CloneContentProduct=Клониране на всички основни данни за продукта/услугата
 ClonePricesProduct=Клониране на основните данни и цени
 CloneCompositionProduct=Клониране на пакетиран продукт/услуга
+CloneCombinationsProduct=Clone product variants
 ProductIsUsed=Този продукт е използван
 NewRefForClone=Реф. на нов продукт/услуга
 SellingPrices=Selling prices
@@ -238,7 +239,7 @@ GlobalVariables=Глобални променливи
 VariableToUpdate=Variable to update
 GlobalVariableUpdaters=Обновители на глобални променливи
 UpdateInterval=Обновяване на интервал (минути)
-LastUpdated=Последно обновени
+LastUpdated=Latest update
 CorrectlyUpdated=Правилно обновени
 PropalMergePdfProductActualFile=Файловете използвани за добавяне в PDF Azur са/е
 PropalMergePdfProductChooseFile=Избиране на PDF файлове
@@ -258,4 +259,41 @@ VolumeUnits=Volume unit
 SizeUnits=Size unit
 DeleteProductBuyPrice=Delete buying price
 ConfirmDeleteProductBuyPrice=Are you sure you want to delete this buying price?
+SubProduct=Sub 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
+HideProductCombinations=Hide products variant in the products selector
+ProductCombination=Variant
+NewProductCombination=New variant
+EditProductCombination=Editing variant
+ProductCombinationGenerator=Variants generator
+Features=Features
+PriceImpact=Price impact
+WeightImpact=Weight impact
+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 child products
+ConfirmCloneProductCombinations=Would you like to copy all the product variant to the 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

+ 8 - 7
htdocs/langs/bg_BG/projects.lang

@@ -29,9 +29,9 @@ DeleteAProject=Изтриване на проект
 DeleteATask=Изтриване на задача
 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
+OpenedProjects=Отворени проекти
+OpenedTasks=Opened tasks
+OpportunitiesStatusForOpenedProjects=Opportunities amount of opened projects by status
 OpportunitiesStatusForProjects=Opportunities amount of projects by status
 ShowProject=Покажи проект
 SetProject=Задайте проект
@@ -47,7 +47,7 @@ TaskTimeSpent=Време отдадено на задачи
 TaskTimeUser=Потребител
 TaskTimeNote=Бележка
 TaskTimeDate=Дата
-TasksOnOpenedProject=Задачи на отворени проекти
+TasksOnOpenedProject=Tasks on opened projects
 WorkloadNotDefined=Работна натовареност не е определена
 NewTimeSpent=Времето, прекарано на
 MyTimeSpent=Времето, прекарано
@@ -96,6 +96,7 @@ ValidateProject=Одобряване на проект в
 ConfirmValidateProject=Are you sure you want to validate this project?
 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)
 ReOpenAProject=Проект с отворен
 ConfirmReOpenAProject=Are you sure you want to re-open this project?
 ProjectContact=ПРОЕКТА Контакти
@@ -121,7 +122,7 @@ CloneProjectFiles=Клониран проект обединени файлов
 CloneTaskFiles=Клонирана задача(и) обединени файлове (ако задача(и)  клонирана)
 CloneMoveDate=Update project/tasks dates from now?
 ConfirmCloneProject=Are you sure to clone this project?
-ProjectReportDate=Промяна задача дата според началната дата на проекта
+ProjectReportDate=Change task dates according to new project start date
 ErrorShiftTaskDate=Невъзможно е да се смени датата на задача в съответствие с нова дата за началото на проекта
 ProjectsAndTasksLines=Проекти и задачи
 ProjectCreatedInDolibarr=Проект %s е създаден
@@ -178,9 +179,9 @@ ProjectsStatistics=Статистики за проекти/инициативи
 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 thirdparties
+OpenedProjectsByThirdparties=Отворени проекти от трети лица
 OnlyOpportunitiesShort=Only opportunities
-OpenedOpportunitiesShort=Open opportunities
+OpenedOpportunitiesShort=Opened opportunities
 NotAnOpportunityShort=Not an opportunity
 OpportunityTotalAmount=Opportunities total amount
 OpportunityPonderatedAmount=Opportunities weighted amount

+ 2 - 2
htdocs/langs/bg_BG/propal.lang

@@ -3,7 +3,7 @@ Proposals=Търговски предложения
 Proposal=Търговско предложение
 ProposalShort=Предложение
 ProposalsDraft=Проектът на търговски предложения
-ProposalsOpened=Отваряне на търговски предложения
+ProposalsOpened=Отворените търговски предложения
 Prop=Търговски предложения
 CommercialProposal=Търговско предложение
 ProposalCard=Предложение карта
@@ -28,7 +28,7 @@ ShowPropal=Покажи предложение
 PropalsDraft=Чернови
 PropalsOpened=Отворен
 PropalStatusDraft=Проект (трябва да бъдат валидирани)
-PropalStatusValidated=Утвърден (предложението е отворен)
+PropalStatusValidated=Validated (proposal is opened)
 PropalStatusSigned=Подписано (нужди фактуриране)
 PropalStatusNotSigned=Не сте (затворен)
 PropalStatusBilled=Таксува

+ 4 - 2
htdocs/langs/bg_BG/stocks.lang

@@ -22,13 +22,15 @@ Movements=Движения
 ErrorWarehouseRefRequired=Изисква се референтно име на склад
 ListOfWarehouses=Списък на складовете
 ListOfStockMovements=Списък на движението на стоковите наличности
+StockMovementForId=Movement ID %d
+ListMouvementStockProject=List of stock movements associated to project
 StocksArea=Warehouses area
 Location=Място
 LocationSummary=Кратко наименование на място
 NumberOfDifferentProducts=Брой различни продукти
 NumberOfProducts=Общ брой продукти
-LastMovement=Последно движение
-LastMovements=Последни движения
+LastMovement=Latest movement
+LastMovements=Latest movements
 Units=Единици
 Unit=Единица
 StockCorrection=Промяна на наличност

+ 2 - 2
htdocs/langs/bg_BG/supplier_proposal.lang

@@ -8,7 +8,7 @@ SearchRequest=Намиране на запитване
 DraftRequests=Чернови на запитвания
 SupplierProposalsDraft=Draft supplier proposals
 LastModifiedRequests=Latest %s modified price requests
-RequestsOpened=Отваряне на запитване за цена
+RequestsOpened=Opened price requests
 SupplierProposalArea=Зона предложения от доставчици
 SupplierProposalShort=Предложение от доставчик
 SupplierProposals=Предложения доставчици
@@ -23,7 +23,7 @@ ConfirmValidateAsk=Are you sure you want to validate this price request under na
 DeleteAsk=Изтриване на запитване
 ValidateAsk=Валидиране на запитване
 SupplierProposalStatusDraft=Чернова (нуждае се да бъде валидирана)
-SupplierProposalStatusValidated=Валидирано (запитването е отворено)
+SupplierProposalStatusValidated=Validated (request is opened)
 SupplierProposalStatusClosed=Затворено
 SupplierProposalStatusSigned=Прието
 SupplierProposalStatusNotSigned=Отказано

+ 5 - 4
htdocs/langs/bg_BG/suppliers.lang

@@ -9,7 +9,7 @@ ShowSupplier=Вижте доставчик
 OrderDate=Дата на поръчката
 BuyingPriceMin=Best buying price
 BuyingPriceMinShort=Best buying price
-TotalBuyingPriceMinShort=Total of subproducts buying prices
+TotalBuyingPriceMinShort=Обща сума на цени за закупуване на под-продукти
 TotalSellingPriceMinShort=Total of subproducts selling prices
 SomeSubProductHaveNoPrices=Някои под-продукти нямата определена цена
 AddSupplierPrice=Add buying price
@@ -24,10 +24,10 @@ ExportDataset_fournisseur_1=Фактури и фактура линии
 ExportDataset_fournisseur_2=Фактури и наредби
 ExportDataset_fournisseur_3=Поръчки към доставчици и линии на поръчки
 ApproveThisOrder=Одобряване на поръчката
-ConfirmApproveThisOrder=Сигурен ли сте, че искате да одобри <b>%s Поръчката?</b>
+ConfirmApproveThisOrder=Are you sure you want to approve order <b>%s</b>?
 DenyingThisOrder=Отхвърляне на тази поръчка
-ConfirmDenyingThisOrder=Сигурен ли сте, че искате да откаже доставчик <b>%s</b> за?
-ConfirmCancelThisOrder=Сигурен ли сте, че искате да отмените доставчика на <b>%s</b> за?
+ConfirmDenyingThisOrder=Are you sure you want to deny this order <b>%s</b>?
+ConfirmCancelThisOrder=Are you sure you want to cancel this order <b>%s</b>?
 AddSupplierOrder=Създаване на поръчка за покупка
 AddSupplierInvoice=Създаване на фактура
 ListOfSupplierProductForSupplier=Списък на доставчици на стоки и цени <b>%s</b>
@@ -41,3 +41,4 @@ DoNotOrderThisProductToThisSupplier=Do not order
 NotTheGoodQualitySupplier=Wrong quality
 ReputationForThisProduct=Reputation
 BuyerName=Buyer name
+AllProductServicePrices=All product / service prices

+ 1 - 1
htdocs/langs/bg_BG/users.lang

@@ -36,7 +36,7 @@ AdministratorDesc=Администратор
 DefaultRights=Права по подразбиране
 DefaultRightsDesc=Тук определете правата <u>по подразбиране</u>, които автоматично се предоставят на <u>новосъздаден</u> потребител (отидете на потребителската карта, за да промените правата на съществуващ потребител).
 DolibarrUsers=Потребители на системата
-LastName=Last Name
+LastName=Фамилия
 FirstName=Собствено име
 ListOfGroups=Списък на групите
 NewGroup=Нова група

+ 3 - 2
htdocs/langs/bg_BG/withdrawals.lang

@@ -24,6 +24,7 @@ WithdrawStatistics=Direct debit payment statistics
 WithdrawRejectStatistics=Direct debit payment reject statistics
 LastWithdrawalReceipt=Latest %s direct debit receipts
 MakeWithdrawRequest=Make a direct debit payment request
+WithdrawRequestsDone=%s direct debit payment requests recorded
 ThirdPartyBankCode=Банков код на контрагента
 NoInvoiceCouldBeWithdrawed=Не теглене фактура с успех. Уверете се, че фактура са дружества с валиден БАН.
 ClassCredited=Класифицирайте кредитирани
@@ -76,8 +77,8 @@ RUM=UMR
 RUMLong=Unique Mandate Reference
 RUMWillBeGenerated=UMR number will be generated once bank account information are saved
 WithdrawMode=Direct debit mode (FRST or RECUR)
-WithdrawRequestAmount=Withdraw request amount:
-WithdrawRequestErrorNilAmount=Unable to create withdraw request for nil amount.
+WithdrawRequestAmount=Amount of Direct debit request:
+WithdrawRequestErrorNilAmount=Unable to create direct debit request for empty amount.
 SepaMandate=SEPA Direct Debit Mandate
 SepaMandateShort=SEPA Mandate
 PleaseReturnMandate=Please return this mandate form by email to %s or by mail to

+ 3 - 0
htdocs/langs/bn_BD/accountancy.lang

@@ -194,6 +194,8 @@ ChangeBinding=Change the binding
 
 ## Admin
 ApplyMassCategories=Apply mass categories
+AddAccountFromBookKeepingWithNoCategories=Add acccount already used with no categories
+CategoryDeleted=Category for the accounting account has been removed
 
 ## Export
 Exports=Exports
@@ -209,6 +211,7 @@ Modelcsv_ciel=Export towards Sage Ciel Compta or Compta Evolution
 Modelcsv_quadratus=Export towards Quadratus QuadraCompta
 Modelcsv_ebp=Export towards EBP
 Modelcsv_cogilog=Export towards Cogilog
+ChartofaccountsId=Chart of accounts Id
 
 ## Tools - Init accounting account on product / service
 InitAccountancy=Init accountancy

+ 34 - 27
htdocs/langs/bn_BD/admin.lang

@@ -9,17 +9,20 @@ VersionDevelopment=Development
 VersionUnknown=Unknown
 VersionRecommanded=Recommended
 FileCheck=Files integrity checker
-FileCheckDesc=This tool allows you to check the integrity of files of your application, comparing each files with the official ones. 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 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.
-FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified of removed.
+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)
 FilesMissing=Missing Files
 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 a certified 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
@@ -188,7 +191,9 @@ BoxesDesc=Widgets are components showing some information that you can add to pe
 OnlyActiveElementsAreShown=Only elements from <a href="%s">enabled modules</a> are shown.
 ModulesDesc=Dolibarr modules define which functionality is enabled in software. Some modules require permissions you must grant to users, after enabling module. Click on button on/off to enable a module/feature.
 ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
-ModulesMarketPlaces=More modules...
+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 modules...
+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...
@@ -280,20 +285,21 @@ MenuHandlers=Menu handlers
 MenuAdmin=Menu editor
 DoNotUseInProduction=Do not use in production
 ThisIsProcessToFollow=This is steps to process:
-ThisIsAlternativeProcessToFollow=This is an alternative setup 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).
 DownloadPackageFromWebSite=Download package (for example from official web site %s).
-UnpackPackageInDolibarrRoot=Unpack package file into Dolibarr server directory dedicated to external modules: <b>%s</b>
-SetupIsReadyForUse=Install is finished and Dolibarr is ready to use with this new component.
-NotExistsDirect=The alternative root directory is not defined.<br>
-InfDirAlt=Since version 3 it is possible to define an alternative root directory.This allows you to store, same place, 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 conf.php<br> $dolibarr_main_url_root_alt='http://myserver/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>*These lines are commented with "#", to uncomment only remove the character.
+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='http://myserver/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 send package using this tool: Select module file
 CurrentVersion=Dolibarr current version
 CallUpdatePage=Go to the page that updates the database structure and data: %s.
 LastStableVersion=Latest stable version
-LastActivationDate=Last activation date
+LastActivationDate=Latest activation date
 UpdateServerOffline=Update server offline
 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 dictionary-thirdparty types).<br>
@@ -376,11 +382,11 @@ ExtrafieldCheckBox=Checkbox
 ExtrafieldRadio=Radio button
 ExtrafieldCheckBoxFromList= Checkbox from table
 ExtrafieldLink=Link to an object
-ExtrafieldParamHelpselect=Parameters list have to be like key,value<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...<br><br>In order to have the list depending on another :<br>1,value1|parent_list_code:parent_key<br>2,value2|parent_list_code:parent_key
+ExtrafieldParamHelpselect=Parameters list have to be like key,value<br><br> for example : <br>1,value1<br>2,value2<br>3,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=Parameters list have to be like key,value<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
 ExtrafieldParamHelpradio=Parameters list have to be like key,value<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
-ExtrafieldParamHelpsellist=Parameters list 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 :<br>c_typent:libelle:id:parent_list_code|parent_column:filter
-ExtrafieldParamHelpchkbxlst=Parameters list 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 :<br>c_typent:libelle:id:parent_list_code|parent_column:filter
+ExtrafieldParamHelpsellist=Parameters list 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
+ExtrafieldParamHelpchkbxlst=Parameters list 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>Example : Societe:societe/class/societe.class.php
 LibraryToBuildPDF=Library used for PDF generation
 WarningUsingFPDF=Warning: Your <b>conf.php</b> contains directive <b>dolibarr_pdf_force_fpdf=1</b>. This means you use the FPDF library to generate PDF files. This library is old and does not support a lot of features (Unicode, image transparency, cyrillic, arab and asiatic languages, ...), so you may experience errors during PDF generation.<br>To solve this and have a full support of PDF generation, please download <a href="http://www.tcpdf.org/" target="_blank">TCPDF library</a>, then comment or remove the line <b>$dolibarr_pdf_force_fpdf=1</b>, and add instead <b>$dolibarr_lib_TCPDF_PATH='path_to_TCPDF_dir'</b>
@@ -415,10 +421,10 @@ ModuleCompanyCodeDigitaria=Accountancy code depends on third party code. The cod
 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: Some email providers (like Yahoo) does not allow you to send an email from another server than the Yahoo server if the email address used as a sender is your Yahoo email (like myemail@yahoo.com, myemail@yahoo.fr, ...). Your current setup use the server of the application to send email, so some recipients (the one compatible with the restrictive DMARC protocol), will ask Yahoo if they can accept your email and Yahoo will respond "no" because the server is not a server owned by Yahoo, so few of your sent Emails may not be accepted.<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).
-
+ClickToShowDescription=Click to show description
 # Modules
 Module0Name=Users & groups
-Module0Desc=Users and groups management
+Module0Desc=Users / Employees and Groups management
 Module1Name=Third parties
 Module1Desc=Companies and contact management (customers, prospects...)
 Module2Name=Commercial
@@ -689,7 +695,7 @@ 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). Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc). 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).<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).
 Permission271=Read CA
 Permission272=Read invoices
 Permission273=Issue invoices
@@ -891,7 +897,7 @@ Offset=Offset
 AlwaysActive=Always active
 Upgrade=Upgrade
 MenuUpgrade=Upgrade / Extend
-AddExtensionThemeModuleOrOther=Add extension (theme, module, ...)
+AddExtensionThemeModuleOrOther=Deploy/install external module
 WebServer=Web server
 DocumentRootServer=Web server's root directory
 DataRootServer=Data files directory
@@ -1165,10 +1171,6 @@ FreeLegalTextOnOrders=Free text on orders
 WatermarkOnDraftOrders=Watermark on draft orders (none if empty)
 ShippableOrderIconInList=Add an icon in Orders list which indicate if order is shippable
 BANK_ASK_PAYMENT_BANK_DURING_ORDER=Ask for bank account destination of order
-##### 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 your clicktodial login (defined on your user card)<br><b>__PASS__</b> that will be replaced with your clicktodial password (defined on your user card).
-##### Bookmark4u #####
 ##### Interventions #####
 InterventionsSetup=Interventions module setup
 FreeLegalTextOnInterventions=Free text on intervention documents
@@ -1395,7 +1397,7 @@ SendingsSetup=Sending module setup
 SendingsReceiptModel=Sending receipt model
 SendingsNumberingModules=Sendings numbering modules
 SendingsAbility=Support shipping sheets for customer deliveries
-NoNeedForDeliveryReceipts=In most cases, sendings receipts are used both as sheets for customer deliveries (list of products to send) and sheets that is recevied 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 is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
 FreeLegalTextOnShippings=Free text on shipments
 ##### Deliveries #####
 DeliveryOrderNumberingModules=Products deliveries receipt numbering module
@@ -1477,7 +1479,9 @@ AGENDA_DEFAULT_FILTER_STATUS=Set automatically this status for events into searc
 AGENDA_DEFAULT_VIEW=Which tab do you want to open by default when selecting menu Agenda
 AGENDA_NOTIFICATION=Enable event notification on user browsers when event date is reached (each user is able to refuse this from the browser confirmation question)
 AGENDA_NOTIFICATION_SOUND=Enable sound notification
-##### ClickToDial #####
+##### 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 your clicktodial login (defined on your user card)<br><b>__PASS__</b> that will be replaced with your clicktodial password (defined on your 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=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.
@@ -1505,10 +1509,11 @@ EndPointIs=SOAP clients must send their requests to the Dolibarr endpoint availa
 ##### API ####
 ApiSetup=API module setup
 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 caches for services management)
+ApiProductionMode=Enable production mode (this will activate use of a cache for services management)
 ApiExporerIs=You can explore 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.
 ##### Bank #####
 BankSetupModule=Bank module setup
 FreeLegalTextOnChequeReceipts=Free text on cheque receipts
@@ -1577,7 +1582,7 @@ 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.
 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.
-ConfFileMuseContainCustom=Installing 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 have option<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
+ConfFileMuseContainCustom=Installing 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=Color of page title
@@ -1607,6 +1612,7 @@ FixTZ=TimeZone fix
 FillFixTZOnlyIfRequired=Example: +2 (fill only if problem experienced)
 ExpectedChecksum=Expected Checksum
 CurrentChecksum=Current Checksum
+ForcedConstants=Required constant values
 MailToSendProposal=To send customer proposal
 MailToSendOrder=To send customer order
 MailToSendInvoice=To send customer invoice
@@ -1615,9 +1621,10 @@ MailToSendIntervention=To send intervention
 MailToSendSupplierRequestForQuotation=To send quotation request to supplier
 MailToSendSupplierOrder=To send supplier order
 MailToSendSupplierInvoice=To send supplier invoice
+MailToSendContract=To send a contract
 MailToThirdparty=To send email from third party page
 ByDefaultInList=Show by default on list view
-YouUseLastStableVersion=You use the last stable version
+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.

+ 2 - 2
htdocs/langs/bn_BD/banks.lang

@@ -74,13 +74,13 @@ Conciliate=Reconcile
 Conciliation=Reconciliation
 ReconciliationLate=Reconciliation late
 IncludeClosedAccount=Include closed accounts
-OnlyOpenedAccount=Only open accounts
+OnlyOpenedAccount=Only opened accounts
 AccountToCredit=Account to credit
 AccountToDebit=Account to debit
 DisableConciliation=Disable reconciliation feature for this account
 ConciliationDisabled=Reconciliation feature disabled
 LinkedToAConciliatedTransaction=Linked to a conciliated entry
-StatusAccountOpened=Open
+StatusAccountOpened=Opened
 StatusAccountClosed=Closed
 AccountIdShort=Number
 LineRecord=Transaction

+ 32 - 19
htdocs/langs/bn_BD/bills.lang

@@ -1,13 +1,13 @@
 # Dolibarr language file - Source file is en_US - bills
 Bill=Invoice
 Bills=Invoices
-BillsCustomers=Customers invoices
-BillsCustomer=Customers invoice
-BillsSuppliers=Suppliers invoices
-BillsCustomersUnpaid=Unpaid customers invoices
-BillsCustomersUnpaidForCompany=Unpaid customer's invoices for %s
-BillsSuppliersUnpaid=Unpaid supplier's invoices
-BillsSuppliersUnpaidForCompany=Unpaid supplier's invoices for %s
+BillsCustomers=Customer invoices
+BillsCustomer=Customer invoice
+BillsSuppliers=Supplier invoices
+BillsCustomersUnpaid=Unpaid customer invoices
+BillsCustomersUnpaidForCompany=Unpaid customer invoices for %s
+BillsSuppliersUnpaid=Unpaid supplier invoices
+BillsSuppliersUnpaidForCompany=Unpaid supplier invoices for %s
 BillsLate=Late payments
 BillsStatistics=Customers invoices statistics
 BillsStatisticsSuppliers=Suppliers invoices statistics
@@ -62,8 +62,8 @@ PaymentsBack=Payments back
 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 credit note or deposit 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.
+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.
 SupplierPayments=Suppliers payments
 ReceivedPayments=Received payments
 ReceivedCustomersPayments=Payments received from customers
@@ -78,6 +78,7 @@ PaymentMode=Payment type
 PaymentTypeDC=Debit/Credit Card
 PaymentTypePP=PayPal
 IdPaymentMode=Payment type (id)
+CodePaymentMode=Payment type (code)
 LabelPaymentMode=Payment type (label)
 PaymentModeShort=Payment type
 PaymentTerm=Payment term
@@ -102,9 +103,10 @@ SearchACustomerInvoice=Search for a customer invoice
 SearchASupplierInvoice=Search for a supplier invoice
 CancelBill=Cancel an invoice
 SendRemindByMail=Send reminder by EMail
-DoPayment=Do payment
-DoPaymentBack=Do payment back
+DoPayment=Enter payment
+DoPaymentBack=Enter refund
 ConvertToReduc=Convert into future discount
+ConvertExcessReceivedToReduc=Convert excess received into future discount
 EnterPaymentReceivedFromCustomer=Enter payment received from customer
 EnterPaymentDueToCustomer=Make payment due to customer
 DisabledBecauseRemainderToPayIsZero=Disabled because remaining unpaid is zero
@@ -151,14 +153,14 @@ NoQualifiedRecurringInvoiceTemplateFound=No recurring template invoice qualified
 FoundXQualifiedRecurringInvoiceTemplate=Found %s recurring template invoice(s) qualified for generation.
 NotARecurringInvoiceTemplate=Not a recurring template invoice
 NewBill=New invoice
-LastBills=Last %s invoices
-LastCustomersBills=Last %s customers invoices
-LastSuppliersBills=Last %s suppliers invoices
+LastBills=Latest %s invoices
+LastCustomersBills=Latest %s customer invoices
+LastSuppliersBills=Latest %s supplier invoices
 AllBills=All invoices
 OtherBills=Other invoices
 DraftBills=Draft invoices
-CustomersDraftInvoices=Customers draft invoices
-SuppliersDraftInvoices=Suppliers draft invoices
+CustomersDraftInvoices=Customer draft invoices
+SuppliersDraftInvoices=Supplier draft invoices
 Unpaid=Unpaid
 ConfirmDeleteBill=Are you sure you want to delete this invoice?
 ConfirmValidateBill=Are you sure you want to validate this invoice with reference <b>%s</b>?
@@ -272,6 +274,7 @@ Deposit=Deposit
 Deposits=Deposits
 DiscountFromCreditNote=Discount from credit note %s
 DiscountFromDeposit=Payments from deposit invoice %s
+DiscountFromExcessReceived=Payments from excess received of invoice %s
 AbsoluteDiscountUse=This kind of credit can be used on invoice before its validation
 CreditNoteDepositUse=Invoice must be validated to use this kind of credits
 NewGlobalDiscount=New absolute discount
@@ -279,8 +282,8 @@ NewRelativeDiscount=New relative discount
 NoteReason=Note/Reason
 ReasonDiscount=Reason
 DiscountOfferedBy=Granted by
-DiscountStillRemaining=Discounts still remaining
-DiscountAlreadyCounted=Discounts already counted
+DiscountStillRemaining=Discounts available
+DiscountAlreadyCounted=Discounts already consumed
 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.
@@ -333,6 +336,8 @@ InvoiceAutoValidate=Validate invoices automatically
 GeneratedFromRecurringInvoice=Generated from template recurring invoice %s
 DateIsNotEnough=Date not reached yet
 InvoiceGeneratedFromTemplate=Invoice %s generated from recurring template invoice %s
+WarningInvoiceDateInFuture=Warning, the invoice date is higher than current date
+WarningInvoiceDateTooFarInFuture=Warning, the invoice date is too far from current date
 # PaymentConditions
 Statut=Status
 PaymentConditionShortRECEP=Due Upon Receipt
@@ -351,6 +356,14 @@ PaymentConditionShortPT_ORDER=Order
 PaymentConditionPT_ORDER=On order
 PaymentConditionShortPT_5050=50-50
 PaymentConditionPT_5050=50%% in advance, 50%% on delivery
+PaymentConditionShort10D=10 days
+PaymentCondition10D=10 days
+PaymentConditionShort10DENDMONTH=10 days of month-end
+PaymentCondition10DENDMONTH=Within 10 days following the end of the month
+PaymentConditionShort14D=14 days
+PaymentCondition14D=14 days
+PaymentConditionShort14DENDMONTH=14 days of month-end
+PaymentCondition14DENDMONTH=Within 14 days following the end of the month
 FixAmount=Fix amount
 VarAmount=Variable amount (%% tot.)
 # PaymentType
@@ -420,7 +433,7 @@ ChequeDeposits=Checks deposits
 Cheques=Checks
 DepositId=Id deposit
 NbCheque=Number of checks
-CreditNoteConvertedIntoDiscount=This credit note or deposit invoice has been converted into %s
+CreditNoteConvertedIntoDiscount=This %s has been converted into %s
 UsBillingContactAsIncoiveRecipientIfExist=Use customer billing contact address instead of third party address as recipient for invoices
 ShowUnpaidAll=Show all unpaid invoices
 ShowUnpaidLateOnly=Show late unpaid invoices only

+ 7 - 7
htdocs/langs/bn_BD/boxes.lang

@@ -25,8 +25,8 @@ BoxTitleLastSuppliers=Latest %s recorded suppliers
 BoxTitleLastModifiedSuppliers=Latest %s modified suppliers
 BoxTitleLastModifiedCustomers=Latest %s modified customers
 BoxTitleLastCustomersOrProspects=Latest %s customers or prospects
-BoxTitleLastCustomerBills=Latest %s customer's invoices
-BoxTitleLastSupplierBills=Latest %s supplier's invoices
+BoxTitleLastCustomerBills=Latest %s customer invoices
+BoxTitleLastSupplierBills=Latest %s supplier invoices
 BoxTitleLastModifiedProspects=Latest %s modified prospects
 BoxTitleLastModifiedMembers=Latest %s members
 BoxTitleLastFicheInter=Latest %s modified interventions
@@ -51,12 +51,12 @@ ClickToAdd=Click here to add.
 NoRecordedCustomers=No recorded customers
 NoRecordedContacts=No recorded contacts
 NoActionsToDo=No actions to do
-NoRecordedOrders=No recorded customer's orders
+NoRecordedOrders=No recorded customer orders
 NoRecordedProposals=No recorded proposals
-NoRecordedInvoices=No recorded customer's invoices
-NoUnpaidCustomerBills=No unpaid customer's invoices
-NoUnpaidSupplierBills=No unpaid supplier's invoices
-NoModifiedSupplierBills=No recorded supplier's invoices
+NoRecordedInvoices=No recorded customer invoices
+NoUnpaidCustomerBills=No unpaid customer invoices
+NoUnpaidSupplierBills=No unpaid supplier invoices
+NoModifiedSupplierBills=No recorded supplier invoices
 NoRecordedProducts=No recorded products/services
 NoRecordedProspects=No recorded prospects
 NoContractedProducts=No products/services contracted

+ 4 - 3
htdocs/langs/bn_BD/companies.lang

@@ -81,6 +81,7 @@ PaymentBankAccount=Payment bank account
 OverAllProposals=Total proposals
 OverAllOrders=Total orders
 OverAllInvoices=Total invoices
+OverAllSupplierProposals=Total price requests
 ##### Local Taxes #####
 LocalTax1IsUsed=Use second tax
 LocalTax1IsUsedES= RE is used
@@ -389,7 +390,7 @@ ListCustomersShort=List of customers
 ThirdPartiesArea=Third parties and contact area
 LastModifiedThirdParties=Latest %s modified third parties
 UniqueThirdParties=Total of unique third parties
-InActivity=Open
+InActivity=Opened
 ActivityCeased=Closed
 ThirdPartyIsClosed=Third party is closed
 ProductsIntoElements=List of products/services into %s
@@ -404,7 +405,7 @@ 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.
 ThirdpartiesMergeSuccess=Thirdparties have been merged
 SaleRepresentativeLogin=Login of sales representative
-SaleRepresentativeFirstname=Firstname of sales representative
-SaleRepresentativeLastname=Lastname of sales representative
+SaleRepresentativeFirstname=First name of sales representative
+SaleRepresentativeLastname=Last name of sales representative
 ErrorThirdpartiesMerge=There was an error when deleting the thirdparties. Please check the log. Changes have been reverted.
 NewCustomerSupplierCodeProposed=New customer or supplier code suggested on duplicate code

+ 2 - 1
htdocs/langs/bn_BD/compta.lang

@@ -65,6 +65,7 @@ PaymentSocialContribution=Social/fiscal tax payment
 PaymentVat=VAT payment
 ListPayment=List of payments
 ListOfCustomerPayments=List of customer payments
+ListOfSupplierPayments=List of supplier payments
 DateStartPeriod=Date start period
 DateEndPeriod=Date end period
 newLT1Payment=New tax 2 payment
@@ -81,7 +82,7 @@ LT2PaymentES=IRPF Payment
 LT2PaymentsES=IRPF Payments
 VATPayment=Sales tax payment
 VATPayments=Sales tax payments
-VATRefund=Sales tax refund Refund
+VATRefund=Sales tax refund
 Refund=Refund
 SocialContributionsPayments=Social/fiscal taxes payments
 ShowVatPayment=Show VAT payment

+ 4 - 4
htdocs/langs/bn_BD/cron.lang

@@ -17,14 +17,14 @@ CronMethodDoesNotExists=Class %s does not contains any method %s
 # Menu
 EnabledAndDisabled=Enabled and disabled
 # Page list
-CronLastOutput=Last run output
-CronLastResult=Last result code
+CronLastOutput=Latest run output
+CronLastResult=Latest result code
 CronCommand=Command
 CronList=Scheduled jobs
 CronDelete=Delete scheduled jobs
-CronConfirmDelete=Are you sure you want to delete these scheduled jobs ?
+CronConfirmDelete=Are you sure you want to delete these scheduled jobs?
 CronExecute=Launch scheduled job
-CronConfirmExecute=Are you sure you want to execute these scheduled jobs now ?
+CronConfirmExecute=Are you sure you want to execute these scheduled jobs now?
 CronInfo=Scheduled job module allow to execute job that have been planned
 CronTask=Job
 CronNone=None

+ 4 - 1
htdocs/langs/bn_BD/errors.lang

@@ -11,6 +11,7 @@ ErrorLoginAlreadyExists=Login %s already exists.
 ErrorGroupAlreadyExists=Group %s already exists.
 ErrorRecordNotFound=Record not found.
 ErrorFailToCopyFile=Failed to copy file '<b>%s</b>' into '<b>%s</b>'.
+ErrorFailToCopyDir=Failed to copy directory '<b>%s</b>' into '<b>%s</b>'.
 ErrorFailToRenameFile=Failed to rename file '<b>%s</b>' into '<b>%s</b>'.
 ErrorFailToDeleteFile=Failed to remove file '<b>%s</b>'.
 ErrorFailToCreateFile=Failed to create file '<b>%s</b>'.
@@ -115,7 +116,7 @@ ErrorNoActivatedBarcode=No barcode type activated
 ErrUnzipFails=Failed to unzip %s with ZipArchive
 ErrNoZipEngine=No engine to unzip %s file in this PHP
 ErrorFileMustBeADolibarrPackage=The file %s must be a Dolibarr zip package
-ErrorFileRequired=It takes a package Dolibarr file
+ErrorModuleFileRequired=You must select a Dolibarr module package file
 ErrorPhpCurlNotInstalled=The PHP CURL is not installed, this is essential to talk with Paypal
 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
@@ -181,6 +182,8 @@ ErrorBankStatementNameMustFollowRegex=Error, bank statement name must follow the
 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>
 
 # 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.

+ 2 - 2
htdocs/langs/bn_BD/holiday.lang

@@ -76,8 +76,8 @@ BoxTitleLastLeaveRequests=Latest %s modified leave requests
 HolidaysMonthlyUpdate=Monthly update
 ManualUpdate=Manual update
 HolidaysCancelation=Leave request cancelation
-EmployeeLastname=Employee lastname
-EmployeeFirstname=Employee firstname
+EmployeeLastname=Employee last name
+EmployeeFirstname=Employee first name
 TypeWasDisabledOrRemoved=Leave type (id %s) was disabled or removed
 
 ## Configuration du Module ##

+ 2 - 2
htdocs/langs/bn_BD/ldap.lang

@@ -13,8 +13,8 @@ LDAPUsers=Users in LDAP database
 LDAPFieldStatus=Status
 LDAPFieldFirstSubscriptionDate=First subscription date
 LDAPFieldFirstSubscriptionAmount=First subscription amount
-LDAPFieldLastSubscriptionDate=Last subscription date
-LDAPFieldLastSubscriptionAmount=Last subscription amount
+LDAPFieldLastSubscriptionDate=Latest subscription date
+LDAPFieldLastSubscriptionAmount=Latest subscription amount
 LDAPFieldSkype=Skype id
 LDAPFieldSkypeExample=Example : skypeName
 UserSynchronized=User synchronized

+ 9 - 2
htdocs/langs/bn_BD/mails.lang

@@ -74,14 +74,18 @@ ResultOfMailSending=Result of mass EMail sending
 NbSelected=Nb selected
 NbIgnored=Nb ignored
 NbSent=Nb sent
-ContactsWithThirdpartyFilter=Contact with customer filters
+ConfirmUnvalidateEmailing=Are you sure you want to change email <b>%s</b> to draft status?
+MailingModuleDescContactsWithThirdpartyFilter=Contact with customer filters
+MailingModuleDescContactsByCompanyCategory=Contacts by third party category
+MailingModuleDescContactsByCategory=Contacts by categories
+MailingModuleDescContactsByFunction=Contacts by position
 
 # Libelle des modules de liste de destinataires mailing
 LineInFile=Line %s in file
 RecipientSelectionModules=Defined requests for recipient's selection
 MailSelectedRecipients=Selected recipients
 MailingArea=EMailings area
-LastMailings=Last %s emailings
+LastMailings=Latest %s emailings
 TargetsStatistics=Targets statistics
 NbOfCompaniesContacts=Unique contacts/addresses
 MailNoChangePossible=Recipients for validated emailing can't be changed
@@ -146,3 +150,6 @@ AdvTgtCreateFilter=Create filter
 AdvTgtOrCreateNewFilter=Name of new filter
 NoContactWithCategoryFound=No contact/address with a category found
 NoContactLinkedToThirdpartieWithCategoryFound=No contact/address with a category found
+OutGoingEmailSetup=Outgoing email setup
+InGoingEmailSetup=Incoming email setup
+

+ 9 - 3
htdocs/langs/bn_BD/main.lang

@@ -69,6 +69,7 @@ SetDate=Set date
 SelectDate=Select a date
 SeeAlso=See also %s
 SeeHere=See here
+Apply=Apply
 BackgroundColorByDefault=Default background color
 FileRenamed=The file was successfully renamed
 FileUploaded=The file was successfully uploaded
@@ -87,7 +88,7 @@ Undefined=Undefined
 PasswordForgotten=Password forgotten?
 SeeAbove=See above
 HomeArea=Home area
-LastConnexion=Last connection
+LastConnexion=Latest connection
 PreviousConnexion=Previous connection
 PreviousValue=Previous value
 ConnectedOnMultiCompany=Connected on environment
@@ -237,7 +238,7 @@ DateCreation=Creation date
 DateCreationShort=Creat. date
 DateModification=Modification date
 DateModificationShort=Modif. date
-DateLastModification=Last modification date
+DateLastModification=Latest modification date
 DateValidation=Validation date
 DateClosing=Closing date
 DateDue=Due date
@@ -433,7 +434,7 @@ Reportings=Reporting
 Draft=Draft
 Drafts=Drafts
 Validated=Validated
-Opened=Open
+Opened=Opened
 New=New
 Discount=Discount
 Unknown=Unknown
@@ -599,6 +600,8 @@ SessionName=Session name
 Method=Method
 Receive=Receive
 CompleteOrNoMoreReceptionExpected=Complete or nothing more expected
+ExpectedValue=Expected Value
+CurrentValue=Current value
 PartialWoman=Partial
 TotalWoman=Total
 NeverReceived=Never received
@@ -756,6 +759,7 @@ SomeTranslationAreUncomplete=Some languages may be partially translated or may c
 DirectDownloadLink=Direct download link
 Download=Download
 ActualizeCurrency=Update currency rate
+Fiscalyear=Fiscal year
 # Week day
 Monday=Monday
 Tuesday=Tuesday
@@ -812,3 +816,5 @@ SearchIntoContracts=Contracts
 SearchIntoCustomerShipments=Customer shipments
 SearchIntoExpenseReports=Expense reports
 SearchIntoLeaves=Leaves
+
+BulkActions=Bulk actions

+ 3 - 3
htdocs/langs/bn_BD/members.lang

@@ -136,8 +136,8 @@ DocForAllMembersCards=Generate business cards for all members
 DocForOneMemberCards=Generate business cards for a particular member
 DocForLabels=Generate address sheets
 SubscriptionPayment=Subscription payment
-LastSubscriptionDate=Last subscription date
-LastSubscriptionAmount=Last subscription amount
+LastSubscriptionDate=Latest subscription date
+LastSubscriptionAmount=Latest subscription amount
 MembersStatisticsByCountries=Members statistics by country
 MembersStatisticsByState=Members statistics by state/province
 MembersStatisticsByTown=Members statistics by town
@@ -149,7 +149,7 @@ MembersByStateDesc=This screen show you statistics on members by state/provinces
 MembersByTownDesc=This screen show you statistics on members by town.
 MembersStatisticsDesc=Choose statistics you want to read...
 MenuMembersStats=Statistics
-LastMemberDate=Last member date
+LastMemberDate=Latest member date
 Nature=Nature
 Public=Information are public
 NewMemberbyWeb=New member added. Awaiting approval

+ 2 - 2
htdocs/langs/bn_BD/orders.lang

@@ -39,7 +39,7 @@ StatusOrderRefusedShort=Refused
 StatusOrderBilledShort=Billed
 StatusOrderToProcessShort=To process
 StatusOrderReceivedPartiallyShort=Partially received
-StatusOrderReceivedAllShort=Everything received
+StatusOrderReceivedAllShort=Products received
 StatusOrderCanceled=Canceled
 StatusOrderDraft=Draft (needs to be validated)
 StatusOrderValidated=Validated
@@ -51,7 +51,7 @@ StatusOrderApproved=Approved
 StatusOrderRefused=Refused
 StatusOrderBilled=Billed
 StatusOrderReceivedPartially=Partially received
-StatusOrderReceivedAll=Everything received
+StatusOrderReceivedAll=All products received
 ShippingExist=A shipment exists
 QtyOrdered=Qty ordered
 ProductQtyInDraft=Product quantity into draft orders

+ 5 - 4
htdocs/langs/bn_BD/other.lang

@@ -68,14 +68,15 @@ PredefinedMailContentSendSupplierInvoice=__CONTACTCIVNAME__\n\nYou will find her
 PredefinedMailContentSendShipping=__CONTACTCIVNAME__\n\nYou will find here the shipping __SHIPPINGREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__
 PredefinedMailContentSendFichInter=__CONTACTCIVNAME__\n\nYou will find here the intervention __FICHINTERREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__
 PredefinedMailContentThirdparty=__CONTACTCIVNAME__\n\n__PERSONALIZED__\n\n__SIGNATURE__
-DemoDesc=Dolibarr is a compact ERP/CRM supporting several functional modules. A demo showcasing all modules makes no sense as this scenario never occurs. So, several demo profiles are available.
+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...
+ChooseYourDemoProfilMore=...or build your own profile<br>(manual module selection)
 DemoFundation=Manage members of a foundation
 DemoFundation2=Manage members and bank account of a foundation
-DemoCompanyServiceOnly=Manage a freelance activity selling service only
+DemoCompanyServiceOnly=Company or freelance selling service only
 DemoCompanyShopWithCashDesk=Manage a shop with a cash desk
-DemoCompanyProductAndStocks=Manage a small or medium company selling products
-DemoCompanyAll=Manage a small or medium company with multiple activities (all main modules)
+DemoCompanyProductAndStocks=Company selling products with a shop
+DemoCompanyAll=Company with multiple activities (all main modules)
 CreatedBy=Created by %s
 ModifiedBy=Modified by %s
 ValidatedBy=Validated by %s

+ 40 - 2
htdocs/langs/bn_BD/products.lang

@@ -60,7 +60,7 @@ SellingPrice=Selling price
 SellingPriceHT=Selling price (net of tax)
 SellingPriceTTC=Selling price (inc. tax)
 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=In a future version, this value could be used for margin calculation.
+CostPriceUsage=This value could be used for margin calculation.
 SoldAmount=Sold amount
 PurchasedAmount=Purchased amount
 NewPrice=New price
@@ -142,6 +142,7 @@ ConfirmCloneProduct=Are you sure you want to clone product or service <b>%s</b>?
 CloneContentProduct=Clone all main informations of product/service
 ClonePricesProduct=Clone main informations and prices
 CloneCompositionProduct=Clone packaged product/service
+CloneCombinationsProduct=Clone product variants
 ProductIsUsed=This product is used
 NewRefForClone=Ref. of new product/service
 SellingPrices=Selling prices
@@ -238,7 +239,7 @@ GlobalVariables=Global variables
 VariableToUpdate=Variable to update
 GlobalVariableUpdaters=Global variable updaters
 UpdateInterval=Update interval (minutes)
-LastUpdated=Last updated
+LastUpdated=Latest update
 CorrectlyUpdated=Correctly updated
 PropalMergePdfProductActualFile=Files use to add into PDF Azur are/is
 PropalMergePdfProductChooseFile=Select PDF files
@@ -258,4 +259,41 @@ VolumeUnits=Volume unit
 SizeUnits=Size unit
 DeleteProductBuyPrice=Delete buying price
 ConfirmDeleteProductBuyPrice=Are you sure you want to delete this buying price?
+SubProduct=Sub 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
+HideProductCombinations=Hide products variant in the products selector
+ProductCombination=Variant
+NewProductCombination=New variant
+EditProductCombination=Editing variant
+ProductCombinationGenerator=Variants generator
+Features=Features
+PriceImpact=Price impact
+WeightImpact=Weight impact
+NewProductAttribute=New attribute
+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 child products
+ConfirmCloneProductCombinations=Would you like to copy all the product variant to the 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

+ 8 - 7
htdocs/langs/bn_BD/projects.lang

@@ -29,9 +29,9 @@ DeleteAProject=Delete a project
 DeleteATask=Delete a task
 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
+OpenedProjects=Opened projects
+OpenedTasks=Opened tasks
+OpportunitiesStatusForOpenedProjects=Opportunities amount of opened projects by status
 OpportunitiesStatusForProjects=Opportunities amount of projects by status
 ShowProject=Show project
 SetProject=Set project
@@ -47,7 +47,7 @@ TaskTimeSpent=Time spent on tasks
 TaskTimeUser=User
 TaskTimeNote=Note
 TaskTimeDate=Date
-TasksOnOpenedProject=Tasks on open projects
+TasksOnOpenedProject=Tasks on opened projects
 WorkloadNotDefined=Workload not defined
 NewTimeSpent=New time spent
 MyTimeSpent=My time spent
@@ -96,6 +96,7 @@ ValidateProject=Validate projet
 ConfirmValidateProject=Are you sure you want to validate this project?
 CloseAProject=Close project
 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)
 ReOpenAProject=Open project
 ConfirmReOpenAProject=Are you sure you want to re-open this project?
 ProjectContact=Project contacts
@@ -121,7 +122,7 @@ CloneProjectFiles=Clone project joined files
 CloneTaskFiles=Clone task(s) joined files (if task(s) cloned)
 CloneMoveDate=Update project/tasks dates from now?
 ConfirmCloneProject=Are you sure to clone this project?
-ProjectReportDate=Change task date according project start date
+ProjectReportDate=Change task dates according to new project start date
 ErrorShiftTaskDate=Impossible to shift task date according to new project start date
 ProjectsAndTasksLines=Projects and tasks
 ProjectCreatedInDolibarr=Project %s created
@@ -178,9 +179,9 @@ ProjectsStatistics=Statistics on projects/leads
 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 thirdparties
+OpenedProjectsByThirdparties=Opened projects by thirdparties
 OnlyOpportunitiesShort=Only opportunities
-OpenedOpportunitiesShort=Open opportunities
+OpenedOpportunitiesShort=Opened opportunities
 NotAnOpportunityShort=Not an opportunity
 OpportunityTotalAmount=Opportunities total amount
 OpportunityPonderatedAmount=Opportunities weighted amount

+ 3 - 3
htdocs/langs/bn_BD/propal.lang

@@ -3,7 +3,7 @@ Proposals=Commercial proposals
 Proposal=Commercial proposal
 ProposalShort=Proposal
 ProposalsDraft=Draft commercial proposals
-ProposalsOpened=Open commercial proposals
+ProposalsOpened=Opened commercial proposals
 Prop=Commercial proposals
 CommercialProposal=Commercial proposal
 ProposalCard=Proposal card
@@ -26,9 +26,9 @@ AmountOfProposalsByMonthHT=Amount by month (net of tax)
 NbOfProposals=Number of commercial proposals
 ShowPropal=Show proposal
 PropalsDraft=Drafts
-PropalsOpened=Open
+PropalsOpened=Opened
 PropalStatusDraft=Draft (needs to be validated)
-PropalStatusValidated=Validated (proposal is open)
+PropalStatusValidated=Validated (proposal is opened)
 PropalStatusSigned=Signed (needs billing)
 PropalStatusNotSigned=Not signed (closed)
 PropalStatusBilled=Billed

+ 4 - 2
htdocs/langs/bn_BD/stocks.lang

@@ -22,13 +22,15 @@ Movements=Movements
 ErrorWarehouseRefRequired=Warehouse reference name is required
 ListOfWarehouses=List of warehouses
 ListOfStockMovements=List of stock movements
+StockMovementForId=Movement ID %d
+ListMouvementStockProject=List of stock movements associated to project
 StocksArea=Warehouses area
 Location=Location
 LocationSummary=Short name location
 NumberOfDifferentProducts=Number of different products
 NumberOfProducts=Total number of products
-LastMovement=Last movement
-LastMovements=Last movements
+LastMovement=Latest movement
+LastMovements=Latest movements
 Units=Units
 Unit=Unit
 StockCorrection=Correct stock

+ 2 - 2
htdocs/langs/bn_BD/supplier_proposal.lang

@@ -8,7 +8,7 @@ SearchRequest=Find a request
 DraftRequests=Draft requests
 SupplierProposalsDraft=Draft supplier proposals
 LastModifiedRequests=Latest %s modified price requests
-RequestsOpened=Open price requests
+RequestsOpened=Opened price requests
 SupplierProposalArea=Supplier proposals area
 SupplierProposalShort=Supplier proposal
 SupplierProposals=Supplier proposals
@@ -23,7 +23,7 @@ ConfirmValidateAsk=Are you sure you want to validate this price request under na
 DeleteAsk=Delete request
 ValidateAsk=Validate request
 SupplierProposalStatusDraft=Draft (needs to be validated)
-SupplierProposalStatusValidated=Validated (request is open)
+SupplierProposalStatusValidated=Validated (request is opened)
 SupplierProposalStatusClosed=Closed
 SupplierProposalStatusSigned=Accepted
 SupplierProposalStatusNotSigned=Refused

+ 4 - 3
htdocs/langs/bn_BD/suppliers.lang

@@ -24,10 +24,10 @@ ExportDataset_fournisseur_1=Supplier invoices list and invoice lines
 ExportDataset_fournisseur_2=Supplier invoices and payments
 ExportDataset_fournisseur_3=Supplier orders and order lines
 ApproveThisOrder=Approve this order
-ConfirmApproveThisOrder=Are you sure you want to approve order <b>%s</b> ?
+ConfirmApproveThisOrder=Are you sure you want to approve order <b>%s</b>?
 DenyingThisOrder=Deny this order
-ConfirmDenyingThisOrder=Are you sure you want to deny this order <b>%s</b> ?
-ConfirmCancelThisOrder=Are you sure you want to cancel this order <b>%s</b> ?
+ConfirmDenyingThisOrder=Are you sure you want to deny this order <b>%s</b>?
+ConfirmCancelThisOrder=Are you sure you want to cancel this order <b>%s</b>?
 AddSupplierOrder=Create supplier order
 AddSupplierInvoice=Create supplier invoice
 ListOfSupplierProductForSupplier=List of products and prices for supplier <b>%s</b>
@@ -41,3 +41,4 @@ DoNotOrderThisProductToThisSupplier=Do not order
 NotTheGoodQualitySupplier=Wrong quality
 ReputationForThisProduct=Reputation
 BuyerName=Buyer name
+AllProductServicePrices=All product / service prices

+ 1 - 1
htdocs/langs/bn_BD/users.lang

@@ -36,7 +36,7 @@ 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).
 DolibarrUsers=Dolibarr users
-LastName=Last Name
+LastName=Last name
 FirstName=First name
 ListOfGroups=List of groups
 NewGroup=New group

+ 3 - 2
htdocs/langs/bn_BD/withdrawals.lang

@@ -24,6 +24,7 @@ WithdrawStatistics=Direct debit payment statistics
 WithdrawRejectStatistics=Direct debit payment reject statistics
 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 invoice are on companies with a valid BAN.
 ClassCredited=Classify credited
@@ -76,8 +77,8 @@ RUM=UMR
 RUMLong=Unique Mandate Reference
 RUMWillBeGenerated=UMR number will be generated once bank account information are saved
 WithdrawMode=Direct debit mode (FRST or RECUR)
-WithdrawRequestAmount=Withdraw request amount:
-WithdrawRequestErrorNilAmount=Unable to create withdraw request for nil amount.
+WithdrawRequestAmount=Amount of Direct debit request:
+WithdrawRequestErrorNilAmount=Unable to create direct debit request for empty amount.
 SepaMandate=SEPA Direct Debit Mandate
 SepaMandateShort=SEPA Mandate
 PleaseReturnMandate=Please return this mandate form by email to %s or by mail to

+ 3 - 0
htdocs/langs/bs_BA/accountancy.lang

@@ -194,6 +194,8 @@ ChangeBinding=Change the binding
 
 ## Admin
 ApplyMassCategories=Apply mass categories
+AddAccountFromBookKeepingWithNoCategories=Add acccount already used with no categories
+CategoryDeleted=Category for the accounting account has been removed
 
 ## Export
 Exports=Exports
@@ -209,6 +211,7 @@ Modelcsv_ciel=Export towards Sage Ciel Compta or Compta Evolution
 Modelcsv_quadratus=Export towards Quadratus QuadraCompta
 Modelcsv_ebp=Export towards EBP
 Modelcsv_cogilog=Export towards Cogilog
+ChartofaccountsId=Chart of accounts Id
 
 ## Tools - Init accounting account on product / service
 InitAccountancy=Init accountancy

+ 34 - 27
htdocs/langs/bs_BA/admin.lang

@@ -9,17 +9,20 @@ VersionDevelopment=Razvoj
 VersionUnknown=Nepoznato
 VersionRecommanded=Preporučeno
 FileCheck=Files integrity checker
-FileCheckDesc=This tool allows you to check the integrity of files of your application, comparing each files with the official ones. 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 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.
-FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified of removed.
+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)
 FilesMissing=Missing Files
 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 a certified 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=ID sesije
 SessionSaveHandler=Rukovatelj snimanje sesija
@@ -188,7 +191,9 @@ BoxesDesc=Widgets are components showing some information that you can add to pe
 OnlyActiveElementsAreShown=Only elements from <a href="%s">enabled modules</a> are shown.
 ModulesDesc=Dolibarr modules define which functionality is enabled in software. Some modules require permissions you must grant to users, after enabling module. Click on button on/off to enable a module/feature.
 ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
-ModulesMarketPlaces=More modules...
+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 modules...
+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...
@@ -280,20 +285,21 @@ MenuHandlers=Menu handlers
 MenuAdmin=Menu editor
 DoNotUseInProduction=Do not use in production
 ThisIsProcessToFollow=This is steps to process:
-ThisIsAlternativeProcessToFollow=This is an alternative setup 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).
 DownloadPackageFromWebSite=Download package (for example from official web site %s).
-UnpackPackageInDolibarrRoot=Unpack package file into Dolibarr server directory dedicated to external modules: <b>%s</b>
-SetupIsReadyForUse=Install is finished and Dolibarr is ready to use with this new component.
-NotExistsDirect=The alternative root directory is not defined.<br>
-InfDirAlt=Since version 3 it is possible to define an alternative root directory.This allows you to store, same place, 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 conf.php<br> $dolibarr_main_url_root_alt='http://myserver/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>*These lines are commented with "#", to uncomment only remove the character.
+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='http://myserver/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 send package using this tool: Select module file
 CurrentVersion=Dolibarr current version
 CallUpdatePage=Go to the page that updates the database structure and data: %s.
 LastStableVersion=Latest stable version
-LastActivationDate=Last activation date
+LastActivationDate=Latest activation date
 UpdateServerOffline=Update server offline
 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 dictionary-thirdparty types).<br>
@@ -376,11 +382,11 @@ ExtrafieldCheckBox=Checkbox
 ExtrafieldRadio=Radio button
 ExtrafieldCheckBoxFromList= Checkbox from table
 ExtrafieldLink=Link to an object
-ExtrafieldParamHelpselect=Parameters list have to be like key,value<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...<br><br>In order to have the list depending on another :<br>1,value1|parent_list_code:parent_key<br>2,value2|parent_list_code:parent_key
+ExtrafieldParamHelpselect=Parameters list have to be like key,value<br><br> for example : <br>1,value1<br>2,value2<br>3,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=Parameters list have to be like key,value<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
 ExtrafieldParamHelpradio=Parameters list have to be like key,value<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
-ExtrafieldParamHelpsellist=Parameters list 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 :<br>c_typent:libelle:id:parent_list_code|parent_column:filter
-ExtrafieldParamHelpchkbxlst=Parameters list 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 :<br>c_typent:libelle:id:parent_list_code|parent_column:filter
+ExtrafieldParamHelpsellist=Parameters list 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
+ExtrafieldParamHelpchkbxlst=Parameters list 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>Example : Societe:societe/class/societe.class.php
 LibraryToBuildPDF=Library used for PDF generation
 WarningUsingFPDF=Warning: Your <b>conf.php</b> contains directive <b>dolibarr_pdf_force_fpdf=1</b>. This means you use the FPDF library to generate PDF files. This library is old and does not support a lot of features (Unicode, image transparency, cyrillic, arab and asiatic languages, ...), so you may experience errors during PDF generation.<br>To solve this and have a full support of PDF generation, please download <a href="http://www.tcpdf.org/" target="_blank">TCPDF library</a>, then comment or remove the line <b>$dolibarr_pdf_force_fpdf=1</b>, and add instead <b>$dolibarr_lib_TCPDF_PATH='path_to_TCPDF_dir'</b>
@@ -415,10 +421,10 @@ ModuleCompanyCodeDigitaria=Accountancy code depends on third party code. The cod
 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: Some email providers (like Yahoo) does not allow you to send an email from another server than the Yahoo server if the email address used as a sender is your Yahoo email (like myemail@yahoo.com, myemail@yahoo.fr, ...). Your current setup use the server of the application to send email, so some recipients (the one compatible with the restrictive DMARC protocol), will ask Yahoo if they can accept your email and Yahoo will respond "no" because the server is not a server owned by Yahoo, so few of your sent Emails may not be accepted.<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).
-
+ClickToShowDescription=Click to show description
 # Modules
 Module0Name=Users & groups
-Module0Desc=Users and groups management
+Module0Desc=Users / Employees and Groups management
 Module1Name=Treće stranke
 Module1Desc=Companies and contact management (customers, prospects...)
 Module2Name=Poslovno
@@ -689,7 +695,7 @@ 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). Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc). 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).<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).
 Permission271=Read CA
 Permission272=Read invoices
 Permission273=Issue invoices
@@ -891,7 +897,7 @@ Offset=Offset
 AlwaysActive=Always active
 Upgrade=Upgrade
 MenuUpgrade=Upgrade / Extend
-AddExtensionThemeModuleOrOther=Add extension (theme, module, ...)
+AddExtensionThemeModuleOrOther=Deploy/install external module
 WebServer=Web server
 DocumentRootServer=Web server's root directory
 DataRootServer=Data files directory
@@ -1165,10 +1171,6 @@ FreeLegalTextOnOrders=Free text on orders
 WatermarkOnDraftOrders=Vodeni žig na nacrte naloga (ništa, ako je prazno) 
 ShippableOrderIconInList=Add an icon in Orders list which indicate if order is shippable
 BANK_ASK_PAYMENT_BANK_DURING_ORDER=Ask for bank account destination of order
-##### 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 your clicktodial login (defined on your user card)<br><b>__PASS__</b> that will be replaced with your clicktodial password (defined on your user card).
-##### Bookmark4u #####
 ##### Interventions #####
 InterventionsSetup=Interventions module setup
 FreeLegalTextOnInterventions=Free text on intervention documents
@@ -1395,7 +1397,7 @@ SendingsSetup=Sending module setup
 SendingsReceiptModel=Sending receipt model
 SendingsNumberingModules=Sendings numbering modules
 SendingsAbility=Support shipping sheets for customer deliveries
-NoNeedForDeliveryReceipts=In most cases, sendings receipts are used both as sheets for customer deliveries (list of products to send) and sheets that is recevied 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 is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
 FreeLegalTextOnShippings=Free text on shipments
 ##### Deliveries #####
 DeliveryOrderNumberingModules=Products deliveries receipt numbering module
@@ -1477,7 +1479,9 @@ AGENDA_DEFAULT_FILTER_STATUS=Set automatically this status for events into searc
 AGENDA_DEFAULT_VIEW=Which tab do you want to open by default when selecting menu Agenda
 AGENDA_NOTIFICATION=Enable event notification on user browsers when event date is reached (each user is able to refuse this from the browser confirmation question)
 AGENDA_NOTIFICATION_SOUND=Enable sound notification
-##### ClickToDial #####
+##### 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 your clicktodial login (defined on your user card)<br><b>__PASS__</b> that will be replaced with your clicktodial password (defined on your 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=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.
@@ -1505,10 +1509,11 @@ EndPointIs=SOAP clients must send their requests to the Dolibarr endpoint availa
 ##### API ####
 ApiSetup=API module setup
 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 caches for services management)
+ApiProductionMode=Enable production mode (this will activate use of a cache for services management)
 ApiExporerIs=You can explore 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.
 ##### Bank #####
 BankSetupModule=Bank module setup
 FreeLegalTextOnChequeReceipts=Free text on cheque receipts
@@ -1577,7 +1582,7 @@ 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.
 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.
-ConfFileMuseContainCustom=Installing 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 have option<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
+ConfFileMuseContainCustom=Installing 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=Color of page title
@@ -1607,6 +1612,7 @@ FixTZ=TimeZone fix
 FillFixTZOnlyIfRequired=Example: +2 (fill only if problem experienced)
 ExpectedChecksum=Expected Checksum
 CurrentChecksum=Current Checksum
+ForcedConstants=Required constant values
 MailToSendProposal=To send customer proposal
 MailToSendOrder=To send customer order
 MailToSendInvoice=To send customer invoice
@@ -1615,9 +1621,10 @@ MailToSendIntervention=To send intervention
 MailToSendSupplierRequestForQuotation=To send quotation request to supplier
 MailToSendSupplierOrder=To send supplier order
 MailToSendSupplierInvoice=To send supplier invoice
+MailToSendContract=To send a contract
 MailToThirdparty=To send email from third party page
 ByDefaultInList=Show by default on list view
-YouUseLastStableVersion=You use the last stable version
+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.

+ 2 - 2
htdocs/langs/bs_BA/banks.lang

@@ -74,13 +74,13 @@ Conciliate=Izmiriti
 Conciliation=Podmirivanje
 ReconciliationLate=Reconciliation late
 IncludeClosedAccount=Uključiti zatvorene račune
-OnlyOpenedAccount=Only open accounts
+OnlyOpenedAccount=Samo otvoreni računi
 AccountToCredit=Račun za potraživanja
 AccountToDebit=Račun za zaduživanje
 DisableConciliation=Isključi opciju podmirenja za ovaj račun
 ConciliationDisabled=Opcija podmirivanja isključena
 LinkedToAConciliatedTransaction=Linked to a conciliated entry
-StatusAccountOpened=Otvori
+StatusAccountOpened=Otvoreno
 StatusAccountClosed=Zatvoreno
 AccountIdShort=Broj
 LineRecord=Transakcija

+ 32 - 19
htdocs/langs/bs_BA/bills.lang

@@ -1,13 +1,13 @@
 # Dolibarr language file - Source file is en_US - bills
 Bill=Faktura
 Bills=Fakture
-BillsCustomers=Fakture kupaca
-BillsCustomer=Customers invoice
-BillsSuppliers=Fakture dobavljača
-BillsCustomersUnpaid=NEplaćene fakture kupaca
-BillsCustomersUnpaidForCompany=Neplačene fakture kupca za %s
-BillsSuppliersUnpaid=Neplaćene fakture dobavljača
-BillsSuppliersUnpaidForCompany=Neplaćene fakture dobavljača za %s
+BillsCustomers=Customer invoices
+BillsCustomer=Faktura kupca
+BillsSuppliers=Supplier invoices
+BillsCustomersUnpaid=Unpaid customer invoices
+BillsCustomersUnpaidForCompany=Unpaid customer invoices for %s
+BillsSuppliersUnpaid=Unpaid supplier invoices
+BillsSuppliersUnpaidForCompany=Unpaid supplier invoices for %s
 BillsLate=Zakašnjela plaćanja
 BillsStatistics=Customers invoices statistics
 BillsStatisticsSuppliers=Suppliers invoices statistics
@@ -62,8 +62,8 @@ PaymentsBack=Povrat uplata
 paymentInInvoiceCurrency=in invoices currency
 PaidBack=Uplaćeno nazad
 DeletePayment=Obriši uplatu
-ConfirmDeletePayment=Are you sure you want to delete this payment?
-ConfirmConvertToReduc=Do you want to convert this credit note or deposit 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.
+ConfirmDeletePayment=Jeste li sigurni da želite obrisati ovu uplatu?
+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.
 SupplierPayments=Uplate dobavljača
 ReceivedPayments=Primljene uplate
 ReceivedCustomersPayments=Primljene uplate od kupaca
@@ -78,6 +78,7 @@ PaymentMode=Način plaćanja
 PaymentTypeDC=Debit/Credit Card
 PaymentTypePP=PayPal
 IdPaymentMode=Payment type (id)
+CodePaymentMode=Payment type (code)
 LabelPaymentMode=Payment type (label)
 PaymentModeShort=Način plaćanja
 PaymentTerm=Rok plaćanja
@@ -102,9 +103,10 @@ SearchACustomerInvoice=Traži fakturu kupca
 SearchASupplierInvoice=Traži fakturu dobavljača
 CancelBill=Otkaži fakturu
 SendRemindByMail=Pošalji opomenu na E-Mail
-DoPayment=Izvrši plaćanje
-DoPaymentBack=Izvrši povrat uplate
+DoPayment=Enter payment
+DoPaymentBack=Enter refund
 ConvertToReduc=Pretvori u budući popust
+ConvertExcessReceivedToReduc=Convert excess received into future discount
 EnterPaymentReceivedFromCustomer=Unesi uplate primljene od kupca
 EnterPaymentDueToCustomer=Vnesi Rok plaćanja za kupca
 DisabledBecauseRemainderToPayIsZero=Disabled because remaining unpaid is zero
@@ -151,14 +153,14 @@ NoQualifiedRecurringInvoiceTemplateFound=No recurring template invoice qualified
 FoundXQualifiedRecurringInvoiceTemplate=Found %s recurring template invoice(s) qualified for generation.
 NotARecurringInvoiceTemplate=Not a recurring template invoice
 NewBill=Nova faktura
-LastBills=Zadnjih %s faktura
-LastCustomersBills=Zadnjih %s faktura kupca
-LastSuppliersBills=Zadnjih %s faktura dobavljača
+LastBills=Latest %s invoices
+LastCustomersBills=Latest %s customer invoices
+LastSuppliersBills=Latest %s supplier invoices
 AllBills=Sve fakture
 OtherBills=Ostale fakture
 DraftBills=Uzorak faktura
-CustomersDraftInvoices=Uzorci faktura kupca
-SuppliersDraftInvoices=Uzorci faktura dobavljača
+CustomersDraftInvoices=Customer draft invoices
+SuppliersDraftInvoices=Supplier draft invoices
 Unpaid=Neplaćeno
 ConfirmDeleteBill=Are you sure you want to delete this invoice?
 ConfirmValidateBill=Are you sure you want to validate this invoice with reference <b>%s</b>?
@@ -272,6 +274,7 @@ Deposit=Avans
 Deposits=Avansi
 DiscountFromCreditNote=Popust z dobropisa %s
 DiscountFromDeposit=Uplata sa fakture za avans %s
+DiscountFromExcessReceived=Payments from excess received of invoice %s
 AbsoluteDiscountUse=Ova vrsta kredita može se koristiti na fakturi prije potvrde
 CreditNoteDepositUse=Invoice must be validated to use this kind of credits
 NewGlobalDiscount=Nov fiksni popust
@@ -279,8 +282,8 @@ NewRelativeDiscount=Nov relativni popust
 NoteReason=Bilješka/Razlog
 ReasonDiscount=Razlog
 DiscountOfferedBy=Odobreno od strane
-DiscountStillRemaining=Preostali popusti
-DiscountAlreadyCounted=Već uračunati popusti
+DiscountStillRemaining=Discounts available
+DiscountAlreadyCounted=Discounts already consumed
 BillAddress=Adresa fakture
 HelpEscompte=Ovaj popust je odobren za kupca jer je isplata izvršena prije roka.
 HelpAbandonBadCustomer=Ovaj iznos je otkazan (kupac je loš kupac) i smatra se kao potencijalni gubitak.
@@ -333,6 +336,8 @@ InvoiceAutoValidate=Validate invoices automatically
 GeneratedFromRecurringInvoice=Generated from template recurring invoice %s
 DateIsNotEnough=Date not reached yet
 InvoiceGeneratedFromTemplate=Invoice %s generated from recurring template invoice %s
+WarningInvoiceDateInFuture=Warning, the invoice date is higher than current date
+WarningInvoiceDateTooFarInFuture=Warning, the invoice date is too far from current date
 # PaymentConditions
 Statut=Status
 PaymentConditionShortRECEP=Due Upon Receipt
@@ -351,6 +356,14 @@ PaymentConditionShortPT_ORDER=Order
 PaymentConditionPT_ORDER=Na narudžbi
 PaymentConditionShortPT_5050=50-50
 PaymentConditionPT_5050=50%% unaprijed, 50%% na isporuci
+PaymentConditionShort10D=10 days
+PaymentCondition10D=10 days
+PaymentConditionShort10DENDMONTH=10 days of month-end
+PaymentCondition10DENDMONTH=Within 10 days following the end of the month
+PaymentConditionShort14D=14 days
+PaymentCondition14D=14 days
+PaymentConditionShort14DENDMONTH=14 days of month-end
+PaymentCondition14DENDMONTH=Within 14 days following the end of the month
 FixAmount=Fiksni iznos
 VarAmount=Varijabilni iznos (%% tot.)
 # PaymentType
@@ -420,7 +433,7 @@ ChequeDeposits=Depoziti čekova
 Cheques=Čekovi
 DepositId=Id deposit
 NbCheque=Number of checks
-CreditNoteConvertedIntoDiscount=Ta dobropis ali avansni račun je bil spremenjen v %s
+CreditNoteConvertedIntoDiscount=This %s has been converted into %s
 UsBillingContactAsIncoiveRecipientIfExist=Za pošiljanje računa uporabi naslov kontakta za račune pri kupcu namesto naslova partnerja
 ShowUnpaidAll=Prikaži sve neplaćene fakture
 ShowUnpaidLateOnly=Prikaži samo zakašnjele neplaćene fakture

+ 7 - 7
htdocs/langs/bs_BA/boxes.lang

@@ -25,8 +25,8 @@ BoxTitleLastSuppliers=Latest %s recorded suppliers
 BoxTitleLastModifiedSuppliers=Latest %s modified suppliers
 BoxTitleLastModifiedCustomers=Latest %s modified customers
 BoxTitleLastCustomersOrProspects=Latest %s customers or prospects
-BoxTitleLastCustomerBills=Latest %s customer's invoices
-BoxTitleLastSupplierBills=Latest %s supplier's invoices
+BoxTitleLastCustomerBills=Latest %s customer invoices
+BoxTitleLastSupplierBills=Latest %s supplier invoices
 BoxTitleLastModifiedProspects=Latest %s modified prospects
 BoxTitleLastModifiedMembers=Latest %s members
 BoxTitleLastFicheInter=Latest %s modified interventions
@@ -51,12 +51,12 @@ ClickToAdd=Klikni ovdje za dodavanje.
 NoRecordedCustomers=Nema zapisanih kupaca
 NoRecordedContacts=Nema zapisanih kontakata
 NoActionsToDo=Nema akcija za uraditi
-NoRecordedOrders=Nema zapisanih narudži kupca
+NoRecordedOrders=No recorded customer orders
 NoRecordedProposals=Nema zapisanih prijedloga
-NoRecordedInvoices=Nema zapisanih faktura kupca
-NoUnpaidCustomerBills=Nema neplaćenih faktura kupca
-NoUnpaidSupplierBills= Nema neplaćenih faktura dobavljača
-NoModifiedSupplierBills=Nema zapisanih faktura dobavljača
+NoRecordedInvoices=No recorded customer invoices
+NoUnpaidCustomerBills=No unpaid customer invoices
+NoUnpaidSupplierBills=No unpaid supplier invoices
+NoModifiedSupplierBills=No recorded supplier invoices
 NoRecordedProducts=Nema zapisanih proizvoda/usluga
 NoRecordedProspects=No recorded prospects
 NoContractedProducts=Nema ugovorenih proizvoda/usluga

+ 4 - 3
htdocs/langs/bs_BA/companies.lang

@@ -81,6 +81,7 @@ PaymentBankAccount=Payment bank account
 OverAllProposals=Total proposals
 OverAllOrders=Total orders
 OverAllInvoices=Total invoices
+OverAllSupplierProposals=Total price requests
 ##### Local Taxes #####
 LocalTax1IsUsed=Use second tax
 LocalTax1IsUsedES= RE is used
@@ -389,7 +390,7 @@ ListCustomersShort=Lista kupaca
 ThirdPartiesArea=Third parties and contact area
 LastModifiedThirdParties=Latest %s modified third parties
 UniqueThirdParties=Ukupno unikatnih subjekata
-InActivity=Otvori
+InActivity=Otvoreno
 ActivityCeased=Zatvoreno
 ThirdPartyIsClosed=Third party is closed
 ProductsIntoElements=List of products/services into %s
@@ -404,7 +405,7 @@ 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.
 ThirdpartiesMergeSuccess=Thirdparties have been merged
 SaleRepresentativeLogin=Login of sales representative
-SaleRepresentativeFirstname=Firstname of sales representative
-SaleRepresentativeLastname=Lastname of sales representative
+SaleRepresentativeFirstname=First name of sales representative
+SaleRepresentativeLastname=Last name of sales representative
 ErrorThirdpartiesMerge=There was an error when deleting the thirdparties. Please check the log. Changes have been reverted.
 NewCustomerSupplierCodeProposed=New customer or supplier code suggested on duplicate code

+ 2 - 1
htdocs/langs/bs_BA/compta.lang

@@ -65,6 +65,7 @@ PaymentSocialContribution=Social/fiscal tax payment
 PaymentVat=VAT payment
 ListPayment=List of payments
 ListOfCustomerPayments=List of customer payments
+ListOfSupplierPayments=List of supplier payments
 DateStartPeriod=Date start period
 DateEndPeriod=Date end period
 newLT1Payment=New tax 2 payment
@@ -81,7 +82,7 @@ LT2PaymentES=IRPF Payment
 LT2PaymentsES=IRPF Payments
 VATPayment=Sales tax payment
 VATPayments=Sales tax payments
-VATRefund=Sales tax refund Refund
+VATRefund=Sales tax refund
 Refund=Refund
 SocialContributionsPayments=Social/fiscal taxes payments
 ShowVatPayment=Show VAT payment

+ 6 - 6
htdocs/langs/bs_BA/cron.lang

@@ -17,14 +17,14 @@ CronMethodDoesNotExists=Class %s does not contains any method %s
 # Menu
 EnabledAndDisabled=Enabled and disabled
 # Page list
-CronLastOutput=Izvještaj o zadnjem pokretanju
-CronLastResult=Šifra rezultat zadnjeg pokretanja
+CronLastOutput=Latest run output
+CronLastResult=Latest result code
 CronCommand=Komanda
 CronList=Scheduled jobs
 CronDelete=Delete scheduled jobs
-CronConfirmDelete=Are you sure you want to delete these scheduled jobs ?
+CronConfirmDelete=Are you sure you want to delete these scheduled jobs?
 CronExecute=Launch scheduled job
-CronConfirmExecute=Are you sure you want to execute these scheduled jobs now ?
+CronConfirmExecute=Are you sure you want to execute these scheduled jobs now?
 CronInfo=Scheduled job module allow to execute job that have been planned
 CronTask=Job
 CronNone=Ništa
@@ -54,7 +54,7 @@ CronNote=Komentar
 CronFieldMandatory=Polja %s su obavezna
 CronErrEndDateStartDt=Datum završetka ne može biti prije datuma početka
 CronStatusActiveBtn=Enable
-CronStatusInactiveBtn=Disable
+CronStatusInactiveBtn=Iskljući
 CronTaskInactive=This job is disabled
 CronId=ID
 CronClassFile=Classes (filename.class.php)
@@ -65,7 +65,7 @@ CronMethodHelp=The object method to launch. <BR> For exemple to fetch method of
 CronArgsHelp=The method arguments. <BR> For exemple to fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value of paramters can be <i>0, ProductRef</i>
 CronCommandHelp=Sistemska komanda za izvršenje
 CronCreateJob=Create new Scheduled Job
-CronFrom=From
+CronFrom=Od
 # Info
 # Common
 CronType=Job type

+ 4 - 1
htdocs/langs/bs_BA/errors.lang

@@ -11,6 +11,7 @@ ErrorLoginAlreadyExists=Login %s already exists.
 ErrorGroupAlreadyExists=Group %s already exists.
 ErrorRecordNotFound=Record not found.
 ErrorFailToCopyFile=Failed to copy file '<b>%s</b>' into '<b>%s</b>'.
+ErrorFailToCopyDir=Failed to copy directory '<b>%s</b>' into '<b>%s</b>'.
 ErrorFailToRenameFile=Failed to rename file '<b>%s</b>' into '<b>%s</b>'.
 ErrorFailToDeleteFile=Failed to remove file '<b>%s</b>'.
 ErrorFailToCreateFile=Failed to create file '<b>%s</b>'.
@@ -115,7 +116,7 @@ ErrorNoActivatedBarcode=No barcode type activated
 ErrUnzipFails=Failed to unzip %s with ZipArchive
 ErrNoZipEngine=No engine to unzip %s file in this PHP
 ErrorFileMustBeADolibarrPackage=The file %s must be a Dolibarr zip package
-ErrorFileRequired=It takes a package Dolibarr file
+ErrorModuleFileRequired=You must select a Dolibarr module package file
 ErrorPhpCurlNotInstalled=The PHP CURL is not installed, this is essential to talk with Paypal
 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
@@ -181,6 +182,8 @@ ErrorBankStatementNameMustFollowRegex=Error, bank statement name must follow the
 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>
 
 # 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.

+ 2 - 2
htdocs/langs/bs_BA/holiday.lang

@@ -76,8 +76,8 @@ BoxTitleLastLeaveRequests=Latest %s modified leave requests
 HolidaysMonthlyUpdate=Mjesečno ažuriranje
 ManualUpdate=Ručno ažuriranje
 HolidaysCancelation=Leave request cancelation
-EmployeeLastname=Employee lastname
-EmployeeFirstname=Employee firstname
+EmployeeLastname=Employee last name
+EmployeeFirstname=Employee first name
 TypeWasDisabledOrRemoved=Leave type (id %s) was disabled or removed
 
 ## Configuration du Module ##

+ 2 - 2
htdocs/langs/bs_BA/ldap.lang

@@ -13,8 +13,8 @@ LDAPUsers=Users in LDAP database
 LDAPFieldStatus=Status
 LDAPFieldFirstSubscriptionDate=First subscription date
 LDAPFieldFirstSubscriptionAmount=First subscription amount
-LDAPFieldLastSubscriptionDate=Last subscription date
-LDAPFieldLastSubscriptionAmount=Last subscription amount
+LDAPFieldLastSubscriptionDate=Latest subscription date
+LDAPFieldLastSubscriptionAmount=Latest subscription amount
 LDAPFieldSkype=Skype id
 LDAPFieldSkypeExample=Example : skypeName
 UserSynchronized=User synchronized

+ 9 - 2
htdocs/langs/bs_BA/mails.lang

@@ -74,14 +74,18 @@ ResultOfMailSending=Result of mass EMail sending
 NbSelected=Nb selected
 NbIgnored=Nb ignored
 NbSent=Nb sent
-ContactsWithThirdpartyFilter=Contact with customer filters
+ConfirmUnvalidateEmailing=Are you sure you want to change email <b>%s</b> to draft status?
+MailingModuleDescContactsWithThirdpartyFilter=Contact with customer filters
+MailingModuleDescContactsByCompanyCategory=Contacts by third party category
+MailingModuleDescContactsByCategory=Contacts by categories
+MailingModuleDescContactsByFunction=Contacts by position
 
 # Libelle des modules de liste de destinataires mailing
 LineInFile=Linija %s u fajlu
 RecipientSelectionModules=Definisani zahtjevi za odabir primaoca
 MailSelectedRecipients=Odabrani primaoci
 MailingArea=Područje za e-poštu
-LastMailings=Zadnjih %s e-pošta
+LastMailings=Latest %s emailings
 TargetsStatistics=Mete statistike
 NbOfCompaniesContacts=Jedinstveni kontakti/adrese
 MailNoChangePossible=Primaoci za potvrđenu e-poštu ne mogu biti promijenjeni
@@ -146,3 +150,6 @@ AdvTgtCreateFilter=Create filter
 AdvTgtOrCreateNewFilter=Name of new filter
 NoContactWithCategoryFound=No contact/address with a category found
 NoContactLinkedToThirdpartieWithCategoryFound=No contact/address with a category found
+OutGoingEmailSetup=Outgoing email setup
+InGoingEmailSetup=Incoming email setup
+

Some files were not shown because too many files changed in this diff