diff --git a/ChangeLog b/ChangeLog
index cd9397939f5..de1482ea183 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,65 @@
English Dolibarr ChangeLog
--------------------------------------------------------------
+
+***** ChangeLog for 15.0.0 compared to 14.0.0 *****
+
+For developers:
+---------------
+
+WARNING:
+
+Following changes may create regressions for some external modules, but were necessary to make Dolibarr better:
+* Update hook 'printOriginObjectLine', removed check on product type and special code. Need now reshook.
+* Old deprecated module "SimplePOS" has been completely removed. Use module "TakePOS" is you need a Point Of Sale.
+* The method static ActionComm::getActions($db, ...) is no more static. Use $actioncomm->getActions(...) instead (without $db param).
+
+
+
+***** ChangeLog for 14.0.2 compared to 14.0.1 *****
+
+FIX: #18353 Invoice list translation issue
+FIX: #18375 SQL Error on tasks statistics
+FIX: #18465
+FIX: #18484
+FIX: #18531
+FIX: #18542 REST API: set global $user variable to DolibarrApiAccess::user.
+FIX: #18544 Shipment REST API: load thirdparty object into the shipment before validating.
+FIX: #18544 Shipment rest api: load thirdparty object when validating
+FIX: #18565
+FIX: #18589 #18617
+FIX: #18591 : Remove double quotes of SQL Queries for postgresql compatibility
+FIX: #18666 Order / Shipment list: Don't SQL JOIN category table when not necessary.
+FIX: Accountancy - Some problems of length with general & subledger account
+FIX: add DISTINCT
+FIX: Add option $noescapecommand in executeCLI for better compatibility
+FIX: Add token to remove error when removing widget
+FIX: Add token when remove the last widget on home page
+FIX: an approved holiday can be canceled by an admin.
+FIX: better sql request
+FIX: change LOG_DEBUG with LOG_WARNING in syslog and remove sql error in syslog (already done)
+FIX: Collapsing of extrafields has disappeared.
+FIX: Date of payment of subscription must not be set to 1970-01-01.
+FIX: Export of website generates a package that contains a sql error
+FIX: Field already present in SQL request
+FIX: increase maxlength of password input
+FIX: invoice fetch not found syslog debug level instead of error
+FIX: Invoice list - Wrong name for column total_tva
+FIX: invoice validation: when checking if any vat rate has a negative amount, prevent false positives with -1E-14 amounts
+FIX: Manage credit note on situation invoice for calculate margin
+FIX: Menu List of project was not visible.
+FIX: migration script
+FIX: multicompany transverse mode compatibility
+FIX: option "Default value for field 'Refuse bulk emailings'"
+FIX: Recommended session.cookie_samesite must be 'Lax' not 'Strict'.
+FIX: Relative discount with high nb of decimals
+FIX: salary extrafields don't work and table is not well named
+FIX: Supplier invoice list - Wrong language key used
+FIX: wrong table_element_line
+FIX: wrong users count in multicompany transverse mode
+FIX: #yogosha6944 Protection against traversal path.
+
+
***** ChangeLog for 14.0.1 compared to 14.0.0 *****
FIX: $conf->task used but it does not exist, use $conf->projet instead
@@ -42,19 +101,6 @@ FIX: using Tulip, deposit mask was not saved
FIX: #yogosha6907
-***** ChangeLog for 15.0.0 compared to 14.0.0 *****
-
-For developers:
----------------
-
-WARNING:
-
-Following changes may create regressions for some external modules, but were necessary to make Dolibarr better:
-* Update hook 'printOriginObjectLine', removed check on product type and special code. Need now reshook.
-* Old deprecated module "SimplePOS" has been completely removed. Use module "TakePOS" is you need a Point Of Sale.
-
-
-
***** ChangeLog for 14.0.0 compared to 13.0.0 *****
For users:
diff --git a/README.md b/README.md
index 834cc09236e..2cfe4138d62 100644
--- a/README.md
+++ b/README.md
@@ -81,7 +81,7 @@ If you don't have time to install it yourself, you can try some commercial 'read
Dolibarr supports upgrading, usually without the need for any (commercial) support (depending on if you use any commercial extensions). It supports upgrading all the way from any version after 2.8 without breakage. This is unique in the ERP ecosystem and a benefit our users highly appreciate!
-- At first make a backup of your Dolibarr files & than [see](https://wiki.dolibarr.org/index.php/Installation_-_Upgrade#Upgrade_Dolibarr)
+- At first make a backup of your Dolibarr files & then [see](https://wiki.dolibarr.org/index.php/Installation_-_Upgrade#Upgrade_Dolibarr)
- Check that your installed PHP version is supported by the new version [see PHP support](./doc/phpmatrix.md).
- Overwrite all old files from 'dolibarr' directory with files provided into the new version's package.
- At first next access, Dolibarr will redirect you to the "install/" page to follow the upgrade process.
diff --git a/SECURITY.md b/SECURITY.md
index 7d65b7e98e4..61f4a392db8 100644
--- a/SECURITY.md
+++ b/SECURITY.md
@@ -4,11 +4,11 @@ This file contains some policies about the security reports on Dolibarr ERP CRM
## Supported Versions for security reports
-| Version | Supported |
-| --------- | ------------------ |
-| <= 12.* | :x: |
-| >= 13.* | :white_check_mark: |
-
+| Version | Supported |
+| ---------- | ---------------------- |
+| <= 14.0.1 | :x: |
+| >= 14.0.2+ | :white_check_mark: except CSRF attacks|
+| >= develop | :white_check_mark: |
## Reporting a Vulnerability
@@ -54,7 +54,7 @@ ONLY vulnerabilities discovered, when the following setup on test platform is us
* $dolibarr_main_prod must be set to 1 into conf.php
* $dolibarr_nocsrfcheck must be kept to the value 0 into conf.php (this is the default value)
* $dolibarr_main_force_https must be set to something else than 0.
-* The constant MAIN_SECURITY_CSRF_WITH_TOKEN must be set to 1 into backoffice menu Home - Setup - Other (this protection should be set to 1 soon by default)
+* The constant MAIN_SECURITY_CSRF_WITH_TOKEN must be set to 2 into backoffice menu Home - Setup - Other (this protection should be set to 2 soon by default)
* The module DebugBar and ModuleBuilder must NOT be enabled (by default, these modules are not enabled. They are developer tools)
* ONLY security reports on modules provided by default and with the "stable" status are valid (troubles into "experimental", "developement" or external modules are not valid vulnerabilities).
* The root of web server must link to htdocs and the documents directory must be outside of the web server root (this is the default when using the default installer but may differs with external installer).
@@ -90,9 +90,8 @@ Scope is the web application (back office) and the APIs.
* Clickjacking/UI redressing
* Physical or social engineering attempts or issues that require physical access to a victim’s computer/device
* Presence of autocomplete attribute on web forms
-* Vulnerabilities affecting outdated browsers or platforms
+* Vulnerabilities affecting outdated browsers or platforms, or vulnerabilities inside browsers themself.
* Logout and other instances of low-severity Cross-Site Request Forgery
-* Missing cookie flags
* Missing security-related HTTP headers which do not lead directly to a vulnerability
* Reports from automated web vulnerability scanners (Acunetix, Vega, etc.) that have not been validated
* Invalid or missing SPF (Sender Policy Framework) records (Incomplete or missing SPF/DKIM/DMARC)
diff --git a/build/docker/Dockerfile b/build/docker/Dockerfile
index dca74e9e720..eb8e3ade6dc 100644
--- a/build/docker/Dockerfile
+++ b/build/docker/Dockerfile
@@ -57,7 +57,6 @@ RUN echo "host mail" >> /etc/msmtprc
RUN echo "from local@localdomain.com" >> /etc/msmtprc
RUN echo "domain localhost.localdomain" >> /etc/msmtprc
RUN echo "sendmail_path=/usr/bin/msmtp -t" >> /usr/local/etc/php/conf.d/php-sendmail.ini
-RUN echo "localhost localhost.localdomain" >> /etc/hosts
EXPOSE 80
diff --git a/build/docker/docker-compose.yml b/build/docker/docker-compose.yml
index 2167f069f25..b72118de5fb 100644
--- a/build/docker/docker-compose.yml
+++ b/build/docker/docker-compose.yml
@@ -46,6 +46,8 @@ services:
networks:
- internal-pod
- external-pod
+ extra_hosts:
+ - "localhost.localdomain:127.0.0.1"
mail:
image: maildev/maildev
diff --git a/build/generate_filelist_xml.php b/build/generate_filelist_xml.php
index 8e7ef3ef46c..7065e20f92b 100755
--- a/build/generate_filelist_xml.php
+++ b/build/generate_filelist_xml.php
@@ -239,10 +239,18 @@ fclose($fp);
if (empty($buildzip)) {
print "File ".$outputfile." generated\n";
} else {
- $result = dol_compress_file($outputfile, $outputfile.'.zip');
- if ($result > 0) {
- dol_delete_file($outputfile);
- print "File ".$outputfile.".zip generated\n";
+ if ($buildzip == '1' || $buildzip == 'zip') {
+ $result = dol_compress_file($outputfile, $outputfile.'.zip', 'zip');
+ if ($result > 0) {
+ dol_delete_file($outputfile);
+ print "File ".$outputfile.".zip generated\n";
+ }
+ } elseif ($buildzip == '2' || $buildzip == 'gz') {
+ $result = dol_compress_file($outputfile, $outputfile.'.gz', 'gz');
+ if ($result > 0) {
+ dol_delete_file($outputfile);
+ print "File ".$outputfile.".gz generated\n";
+ }
}
}
diff --git a/dev/examples/ldap/ldapsearch_sample1.txt b/dev/examples/ldap/ldapsearch_sample1.txt
index 5f667ffd7a4..a02ad632cd0 100644
--- a/dev/examples/ldap/ldapsearch_sample1.txt
+++ b/dev/examples/ldap/ldapsearch_sample1.txt
@@ -3,11 +3,26 @@
#
# Use this sample to search into a ldap
#
-# ldapsearch -h hostname -x
-# ldapsearch -h hostname -x -b "ou=people,dc=teclib,dc=infra"
-# ldapsearch -h hostname -x -z 0 -b "o=somecompany.com" -D "cn=manager,o=somecompany.com" -w password "(objectclass=*)"
-# ldapsearch -h hostname -x -b "o=somecompany.com" -D "cn=manager,o=somecompany.com" -w password "(objectclass=*)"
+
+# Anonymous access
+# ldapsearch -h hostname -p 389
+#
+# Login access (using a Bind DN)
+# ldapsearch -h hostname -p 389 -z 0 -D "uid=root,cn=users,dc=ldap,dc=test,dc=local" -w password
+# ldapsearch -H ldap://hostname:389 -z 0 -D "uid=root,cn=users,dc=ldap,dc=test,dc=local" -w password
+# ldapsearch -d1 -H ldap://hostname:389 -x -z 0 -D "uid=root,cn=users,dc=ldap,dc=test,dc=local" -w password
+# ldapsearch -H ldap://hostname:389 -z 0 -D "uid=root,cn=users,dc=ldap,dc=test,dc=local" -w password
+#
+# Login access in SSL (using a Bind DN)
+# ldapsearch -H ldaps://hostnamme:636 -z 0 -D "uid=root,cn=users,dc=ldap,dc=test,dc=local" -w password -b "cn=users,dc=ldap,dc=test,dc=local
+# If it fails, you may try to use "hostname" that is real name of certificate.
+# You must also check that /etc/ldap/ldap.conf contains the line TLS_CACERT /etc/ssl/certs/ca-certificates.crt
+
+# What to search
+# ldapsearch -h hostname -p 389 -x -D "uid=root,cn=users,dc=ldap,dc=test,dc=local" -w password -b "cn=users,dc=ldap,dc=test,dc=local"
+# ldapsearch -h hostname -p 389 -x -D "cn=manager,o=somecompany.com" -w password -b "ou=people,dc=teclib,dc=infra"
+# ldapsearch -h hostname -p 389 -x -D "cn=manager,o=somecompany.com" -w password -b "o=somecompany.com" "(objectclass=*)"
#
# Example to test a ldap search:
-# ldapsearch -h hostname -x -z 5 -b 'OU=Collaborateurs,OU=Utilisateurs,OU=MyCompany,DC=bocal,DC=lan' -D 'CN=UserAdmin,OU=Informatique,OU=Utilisateurs,OU=MyCompany,DC=bocal,DC=lan' -w password
+# ldapsearch -h hostname -p 389 -x -z 5 -b 'OU=Collaborateurs,OU=Utilisateurs,OU=MyCompany,DC=bocal,DC=lan' -D 'CN=UserAdmin,OU=Informatique,OU=Utilisateurs,OU=MyCompany,DC=bocal,DC=lan' -w password
diff --git a/dev/initdemo/initdemopassword.sh b/dev/initdemo/initdemopassword.sh
index 933c3b1afa2..37264fb8e4d 100755
--- a/dev/initdemo/initdemopassword.sh
+++ b/dev/initdemo/initdemopassword.sh
@@ -171,7 +171,10 @@ if [ $res -ne 0 ]; then
fi
if [ -s "$mydir/initdemopostsql.sql" ]; then
+ echo A file initdemopostsql.sql was found, we execute it.
mysql -P$port $base < "$mydir/initdemopostsql.sql"
+else
+ echo No file initdemopostsql.sql found, we extra sql action done.
fi
diff --git a/dev/tools/github_authors_peryear.sh b/dev/tools/github_authors_and_commits_peryear.sh
similarity index 100%
rename from dev/tools/github_authors_peryear.sh
rename to dev/tools/github_authors_and_commits_peryear.sh
diff --git a/htdocs/accountancy/admin/account.php b/htdocs/accountancy/admin/account.php
index 930e76c7690..c9849f9f54f 100644
--- a/htdocs/accountancy/admin/account.php
+++ b/htdocs/accountancy/admin/account.php
@@ -195,7 +195,7 @@ if (empty($reshook)) {
} elseif ($action == 'enable' && $permissiontoadd) {
if ($accounting->fetch($id)) {
$mode = GETPOST('mode', 'int');
- $result = $accounting->account_activate($id, $mode);
+ $result = $accounting->accountActivate($id, $mode);
}
$action = 'update';
if ($result < 0) {
diff --git a/htdocs/accountancy/admin/card.php b/htdocs/accountancy/admin/card.php
index 86efee3a04a..cd48526e62b 100644
--- a/htdocs/accountancy/admin/card.php
+++ b/htdocs/accountancy/admin/card.php
@@ -61,7 +61,7 @@ $object = new AccountingAccount($db);
*/
if (GETPOST('cancel', 'alpha')) {
- $urltogo = $backtopage ? $backtopage : dol_buildpath('/accountancy/admin/account.php', 1);
+ $urltogo = $backtopage ? $backtopage : DOL_URL_ROOT.'/accountancy/admin/account.php';
header("Location: ".$urltogo);
exit;
}
@@ -121,7 +121,7 @@ if ($action == 'add' && $user->rights->accounting->chartofaccount) {
}
if (!$error) {
setEventMessages("RecordCreatedSuccessfully", null, 'mesgs');
- $urltogo = $backtopage ? $backtopage : dol_buildpath('/accountancy/admin/account.php', 1);
+ $urltogo = $backtopage ? $backtopage : DOL_URL_ROOT.'/accountancy/admin/account.php';
header("Location: " . $urltogo);
exit;
}
diff --git a/htdocs/accountancy/admin/categories_list.php b/htdocs/accountancy/admin/categories_list.php
index 4be890de7d5..2e369e19de1 100644
--- a/htdocs/accountancy/admin/categories_list.php
+++ b/htdocs/accountancy/admin/categories_list.php
@@ -811,7 +811,7 @@ if ($resql) {
// Modify link
if ($canbemodified) {
- print '
';
if (isset($label2)) {
diff --git a/htdocs/adherents/subscription.php b/htdocs/adherents/subscription.php
index 384b00af25e..26a45271801 100644
--- a/htdocs/adherents/subscription.php
+++ b/htdocs/adherents/subscription.php
@@ -209,7 +209,7 @@ if ($user->rights->adherent->cotisation->creer && $action == 'subscription' && !
// Subscription informations
$datesubscription = 0;
$datesubend = 0;
- $paymentdate = ''; // Do not use 0 here, default value is '' that means not filled where 0 means 1970-01-01
+ $paymentdate = ''; // Do not use 0 here, default value is '' that means not filled where 0 means 1970-01-01
if (GETPOST("reyear", "int") && GETPOST("remonth", "int") && GETPOST("reday", "int")) {
$datesubscription = dol_mktime(0, 0, 0, GETPOST("remonth", "int"), GETPOST("reday", "int"), GETPOST("reyear", "int"));
}
@@ -587,7 +587,7 @@ if ($rowid > 0) {
print $langs->trans("LinkedToDolibarrThirdParty");
print '';
if ($action != 'editthirdparty' && $user->rights->adherent->creer) {
- print '
\n";
if ($mysoc->useLocalTax(1)) {
// Note: When option is not set, it must not appears as set on on, because there is no default value for this option
- print '
\n";
} else {
if (empty($mysoc->country_code)) {
@@ -765,7 +765,7 @@ print "\n";
if ($mysoc->useLocalTax(2)) {
// Note: When option is not set, it must not appears as set on on, because there is no default value for this option
- print '
';
}
@@ -1606,26 +1622,26 @@ if ($action == 'create') {
if (!empty($conf->global->FICHINTER_CLASSIFY_BILLED)) { // Option deprecated. In a future, billed must be managed with a dedicated field to 0 or 1
if ($object->statut != Fichinter::STATUS_BILLED) {
- print '
\n";
+ print "Please run dolibarr setup by calling page /install. \n";
+ exit;
+}
+
+
+// Included by default (must be before the CSRF check so wa can use the dol_syslog)
+include_once DOL_DOCUMENT_ROOT.'/core/lib/functions.lib.php';
+include_once DOL_DOCUMENT_ROOT.'/core/lib/security.lib.php';
+//print memory_get_usage();
+
+
// Security: CSRF protection
// This test check if referrer ($_SERVER['HTTP_REFERER']) is same web site than Dolibarr ($_SERVER['HTTP_HOST'])
// when we post forms (we allow GET and HEAD to accept direct link from a particular page).
@@ -228,7 +243,6 @@ if (empty($dolibarr_main_data_root)) {
// Define some constants
define('DOL_CLASS_PATH', 'class/'); // Filesystem path to class dir (defined only for some code that want to be compatible with old versions without this parameter)
define('DOL_DATA_ROOT', $dolibarr_main_data_root); // Filesystem data (documents)
-define('DOL_DOCUMENT_ROOT', $dolibarr_main_document_root); // Filesystem core php (htdocs)
// Try to autodetect DOL_MAIN_URL_ROOT and DOL_URL_ROOT.
// Note: autodetect works only in case 1, 2, 3 and 4 of phpunit test CoreTest.php. For case 5, 6, only setting value into conf.php will works.
$tmp = '';
@@ -333,18 +347,6 @@ if (!defined('ADODB_DATE_VERSION')) {
include_once ADODB_PATH.'adodb-time.inc.php';
}
-if (!file_exists(DOL_DOCUMENT_ROOT."/core/lib/functions.lib.php")) {
- print "Error: Dolibarr config file content seems to be not correctly defined. \n";
- print "Please run dolibarr setup by calling page /install. \n";
- exit;
-}
-
-
-// Included by default
-include_once DOL_DOCUMENT_ROOT.'/core/lib/functions.lib.php';
-include_once DOL_DOCUMENT_ROOT.'/core/lib/security.lib.php';
-//print memory_get_usage();
-
// If password is encoded, we decode it. Note: When page is called for install, $dolibarr_main_db_pass may not be defined yet.
if ((!empty($dolibarr_main_db_pass) && preg_match('/crypted:/i', $dolibarr_main_db_pass)) || !empty($dolibarr_main_db_encrypted_pass)) {
if (!empty($dolibarr_main_db_pass) && preg_match('/crypted:/i', $dolibarr_main_db_pass)) {
diff --git a/htdocs/fourn/card.php b/htdocs/fourn/card.php
index 599242375d2..9cfb2fe475f 100644
--- a/htdocs/fourn/card.php
+++ b/htdocs/fourn/card.php
@@ -54,7 +54,7 @@ $langs->loadLangs(array(
));
$action = GETPOST('action', 'aZ09');
-$cancelbutton = GETPOST('cancel', 'alpha');
+$cancel = GETPOST('cancel', 'alpha');
// Security check
$id = (GETPOST('socid', 'int') ? GETPOST('socid', 'int') : GETPOST('id', 'int'));
@@ -73,7 +73,7 @@ $extrafields->fetch_name_optionals_label($object->table_element);
$hookmanager->initHooks(array('suppliercard', 'globalcard'));
// Security check
-$result = restrictedArea($user, 'societe', $socid, '&societe', '', 'fk_soc', 'rowid', 0);
+$result = restrictedArea($user, 'societe', $id, '&societe', '', 'fk_soc', 'rowid', 0);
if ($object->id > 0) {
if (!($object->fournisseur > 0) || empty($user->rights->fournisseur->lire)) {
@@ -93,7 +93,7 @@ if ($reshook < 0) {
}
if (empty($reshook)) {
- if ($cancelbutton) {
+ if ($cancel) {
$action = "";
}
@@ -261,7 +261,7 @@ if ($object->id > 0) {
print $langs->trans('PaymentConditions');
print '
';
if ($cancreate && $object->statut == Holiday::STATUS_DRAFT) {
- print 'id.'&action=edit" class="butAction">'.$langs->trans("EditCP").'';
+ print 'id.'&action=edit&token='.newToken().'" class="butAction">'.$langs->trans("EditCP").'';
}
if ($cancreate && $object->statut == Holiday::STATUS_DRAFT) { // If draft
- print 'id.'&action=sendToValidate" class="butAction">'.$langs->trans("Validate").'';
+ print 'id.'&action=sendToValidate&token='.newToken().'" class="butAction">'.$langs->trans("Validate").'';
}
if ($object->statut == Holiday::STATUS_VALIDATED) { // If validated
@@ -1537,10 +1549,6 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') {
$MAXEVENT = 10;
- /*$morehtmlright = '';
- $morehtmlright .= $langs->trans("SeeAll");
- $morehtmlright .= '';*/
-
// List of actions on element
include_once DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php';
$formactions = new FormActions($db);
diff --git a/htdocs/holiday/class/holiday.class.php b/htdocs/holiday/class/holiday.class.php
index ec7b4c463b6..e13d43c612d 100644
--- a/htdocs/holiday/class/holiday.class.php
+++ b/htdocs/holiday/class/holiday.class.php
@@ -1601,7 +1601,7 @@ class Holiday extends CommonObject
/**
- * Retourne le solde de congés payés pour un utilisateur
+ * Return balance of holiday for one user
*
* @param int $user_id ID de l'utilisateur
* @param int $fk_type Filter on type
@@ -1936,7 +1936,7 @@ class Holiday extends CommonObject
*
* @param int $fk_user_action Id user creation
* @param int $fk_user_update Id user update
- * @param string $label Label
+ * @param string $label Label (Example: 'Leave', 'Manual update', 'Leave request cancelation'...)
* @param int $new_solde New value
* @param int $fk_type Type of vacation
* @return int Id of record added, 0 if nothing done, < 0 if KO
diff --git a/htdocs/holiday/list.php b/htdocs/holiday/list.php
index 6aecff5eac0..953f5eabb2f 100644
--- a/htdocs/holiday/list.php
+++ b/htdocs/holiday/list.php
@@ -631,6 +631,12 @@ if ($resql) {
print '';
}
+ // End date
+ if (!empty($arrayfields['cp.date_valid']['checked'])) {
+ print '
';
+ print '
';
+ }
+
// Extra fields
include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php';
// Fields from hook
@@ -691,6 +697,9 @@ if ($resql) {
if (!empty($arrayfields['cp.date_fin']['checked'])) {
print_liste_field_titre($arrayfields['cp.date_fin']['label'], $_SERVER["PHP_SELF"], "cp.date_fin", "", $param, '', $sortfield, $sortorder, 'center ');
}
+ if (!empty($arrayfields['cp.date_valid']['checked'])) {
+ print_liste_field_titre($arrayfields['cp.date_valid']['label'], $_SERVER["PHP_SELF"], "cp.date_valid", "", $param, '', $sortfield, $sortorder, 'center ');
+ }
// Extra fields
include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php';
// Hook fields
@@ -820,6 +829,18 @@ if ($resql) {
$totalarray['nbfield']++;
}
}
+ if (!empty($arrayfields['cp.date_valid']['checked'])) { // date_valid is both date_valid but also date_approval
+ print '
__(Sincerely)__ __USER_SIGNATURE__', null, '1', null);
ALTER TABLE llx_projet ADD COLUMN accept_conference_suggestions integer DEFAULT 0;
ALTER TABLE llx_projet ADD COLUMN accept_booth_suggestions integer DEFAULT 0;
@@ -349,6 +351,13 @@ UPDATE llx_payment_salary SET ref = rowid WHERE ref IS NULL;
ALTER TABLE llx_salary ALTER COLUMN paye set default 0;
+UPDATE llx_extrafields SET elementtype = 'salary' WHERE elementtype = 'payment_salary';
+ALTER TABLE llx_payment_salary_extrafields RENAME TO llx_salary_extrafields;
+-- VMYSQL4.1 DROP INDEX idx_payment_salary_extrafields on llx_salary_extrafields;
+-- VPGSQL8.2 DROP INDEX idx_payment_salary_extrafields;
+ALTER TABLE llx_salary_extrafields ADD INDEX idx_salary_extrafields (fk_object);
+
+
DELETE FROM llx_boxes WHERE box_id IN (SELECT rowid FROM llx_boxes_def WHERE file IN ('box_graph_ticket_by_severity', 'box_ticket_by_severity.php', 'box_nb_ticket_last_x_days.php', 'box_nb_tickets_type.php', 'box_new_vs_close_ticket.php'));
DELETE FROM llx_boxes_def WHERE file IN ('box_graph_ticket_by_severity', 'box_ticket_by_severity.php', 'box_nb_ticket_last_x_days.php', 'box_nb_tickets_type.php', 'box_new_vs_close_ticket.php');
@@ -392,7 +401,9 @@ CREATE TABLE llx_eventorganization_conferenceorboothattendee(
rowid integer AUTO_INCREMENT PRIMARY KEY NOT NULL,
ref varchar(128) NOT NULL,
fk_soc integer,
- fk_actioncomm integer NOT NULL,
+ fk_actioncomm integer,
+ fk_project integer NOT NULL,
+ fk_invoice integer NULL,
email varchar(100),
date_subscription datetime,
amount double DEFAULT NULL,
@@ -408,14 +419,28 @@ CREATE TABLE llx_eventorganization_conferenceorboothattendee(
status smallint NOT NULL
) ENGINE=innodb;
+-- VMYSQL4.3 ALTER TABLE llx_eventorganization_conferenceorboothattendee MODIFY COLUMN fk_actioncomm integer NULL;
+-- VPGSQL8.2 ALTER TABLE llx_eventorganization_conferenceorboothattendee ALTER COLUMN fk_actioncomm DROP NOT NULL;
+
+ALTER TABLE llx_eventorganization_conferenceorboothattendee ADD COLUMN fk_project integer NOT NULL;
+ALTER TABLE llx_eventorganization_conferenceorboothattendee ADD COLUMN fk_invoice integer NULL;
+
+ALTER TABLE llx_eventorganization_conferenceorboothattendee DROP FOREIGN KEY fx_eventorganization_conferenceorboothattendee_fk_soc;
+ALTER TABLE llx_eventorganization_conferenceorboothattendee DROP FOREIGN KEY fx_eventorganization_conferenceorboothattendee_fk_actioncomm;
+ALTER TABLE llx_eventorganization_conferenceorboothattendee DROP FOREIGN KEY fx_eventorganization_conferenceorboothattendee_fk_project;
+
ALTER TABLE llx_eventorganization_conferenceorboothattendee ADD INDEX idx_eventorganization_conferenceorboothattendee_rowid (rowid);
ALTER TABLE llx_eventorganization_conferenceorboothattendee ADD INDEX idx_eventorganization_conferenceorboothattendee_ref (ref);
ALTER TABLE llx_eventorganization_conferenceorboothattendee ADD INDEX idx_eventorganization_conferenceorboothattendee_fk_soc (fk_soc);
ALTER TABLE llx_eventorganization_conferenceorboothattendee ADD INDEX idx_eventorganization_conferenceorboothattendee_fk_actioncomm (fk_actioncomm);
-ALTER TABLE llx_eventorganization_conferenceorboothattendee ADD CONSTRAINT fx_eventorganization_conferenceorboothattendee_fk_actioncomm FOREIGN KEY (fk_actioncomm) REFERENCES llx_actioncomm(id);
ALTER TABLE llx_eventorganization_conferenceorboothattendee ADD INDEX idx_eventorganization_conferenceorboothattendee_email (email);
ALTER TABLE llx_eventorganization_conferenceorboothattendee ADD INDEX idx_eventorganization_conferenceorboothattendee_status (status);
-ALTER TABLE llx_eventorganization_conferenceorboothattendee ADD UNIQUE INDEX uk_eventorganization_conferenceorboothattendee(fk_soc, fk_actioncomm, email);
+
+-- VMYSQL4.1 DROP INDEX uk_eventorganization_conferenceorboothattendee on llx_eventorganization_conferenceorboothattendee;
+-- VPGSQL8.2 DROP INDEX uk_eventorganization_conferenceorboothattendee;
+
+ALTER TABLE llx_eventorganization_conferenceorboothattendee ADD UNIQUE INDEX uk_eventorganization_conferenceorboothattendee(fk_project, email, fk_actioncomm);
+
create table llx_eventorganization_conferenceorboothattendee_extrafields
(
@@ -459,7 +484,7 @@ CREATE TABLE llx_partnership(
fk_soc integer,
fk_member integer,
date_partnership_start date NOT NULL,
- date_partnership_end date NOT NULL,
+ date_partnership_end date NULL,
entity integer DEFAULT 1 NOT NULL, -- multi company id, 0 = all
reason_decline_or_cancel text NULL,
date_creation datetime NOT NULL,
@@ -583,7 +608,7 @@ DROP TABLE llx_categorie_association;
DROP TABLE llx_cond_reglement;
DROP TABLE llx_zapier_hook_extrafields;
-create table llx_onlinesignature
+CREATE TABLE llx_onlinesignature
(
rowid integer AUTO_INCREMENT PRIMARY KEY,
entity integer DEFAULT 1 NOT NULL,
@@ -598,3 +623,6 @@ create table llx_onlinesignature
-- VMYSQL4.3 ALTER TABLE llx_partnership MODIFY COLUMN date_partnership_end date NULL;
-- VPGSQL8.2 ALTER TABLE llx_partnership ALTER COLUMN date_partnership_end DROP NOT NULL;
+
+ALTER TABLE llx_facture_fourn CHANGE COLUMN fk_mode_transport fk_transport_mode integer;
+
diff --git a/htdocs/install/mysql/migration/14.0.0-15.0.0.sql b/htdocs/install/mysql/migration/14.0.0-15.0.0.sql
index cd6cbeae3e6..912eb7fe0eb 100644
--- a/htdocs/install/mysql/migration/14.0.0-15.0.0.sql
+++ b/htdocs/install/mysql/migration/14.0.0-15.0.0.sql
@@ -12,8 +12,8 @@
-- To change type of field: ALTER TABLE llx_table MODIFY COLUMN name varchar(60);
-- To drop a foreign key: ALTER TABLE llx_table DROP FOREIGN KEY fk_name;
-- To create a unique index ALTER TABLE llx_table ADD UNIQUE INDEX uk_table_field (field);
--- To drop an index: -- VMYSQL4.1 DROP INDEX nomindex on llx_table
--- To drop an index: -- VPGSQL8.2 DROP INDEX nomindex
+-- To drop an index: -- VMYSQL4.1 DROP INDEX nomindex on llx_table;
+-- To drop an index: -- VPGSQL8.2 DROP INDEX nomindex;
-- To make pk to be auto increment (mysql): -- VMYSQL4.3 ALTER TABLE llx_table CHANGE COLUMN rowid rowid INTEGER NOT NULL AUTO_INCREMENT;
-- To make pk to be auto increment (postgres):
-- -- VPGSQL8.2 CREATE SEQUENCE llx_table_rowid_seq OWNED BY llx_table.rowid;
@@ -36,11 +36,57 @@
-- VPGSQL8.2 ALTER TABLE llx_partnership ALTER COLUMN date_partnership_end DROP NOT NULL;
+ALTER TABLE llx_eventorganization_conferenceorboothattendee ADD COLUMN fk_project integer NOT NULL;
+ALTER TABLE llx_eventorganization_conferenceorboothattendee ADD COLUMN fk_invoice integer NULL;
+
+ALTER TABLE llx_eventorganization_conferenceorboothattendee DROP FOREIGN KEY fx_eventorganization_conferenceorboothattendee_fk_soc;
+ALTER TABLE llx_eventorganization_conferenceorboothattendee DROP FOREIGN KEY fx_eventorganization_conferenceorboothattendee_fk_actioncomm;
+ALTER TABLE llx_eventorganization_conferenceorboothattendee DROP FOREIGN KEY fx_eventorganization_conferenceorboothattendee_fk_project;
+
+ALTER TABLE llx_eventorganization_conferenceorboothattendee ADD INDEX idx_eventorganization_conferenceorboothattendee_rowid (rowid);
+ALTER TABLE llx_eventorganization_conferenceorboothattendee ADD INDEX idx_eventorganization_conferenceorboothattendee_ref (ref);
+ALTER TABLE llx_eventorganization_conferenceorboothattendee ADD INDEX idx_eventorganization_conferenceorboothattendee_fk_soc (fk_soc);
+ALTER TABLE llx_eventorganization_conferenceorboothattendee ADD INDEX idx_eventorganization_conferenceorboothattendee_fk_actioncomm (fk_actioncomm);
+ALTER TABLE llx_eventorganization_conferenceorboothattendee ADD INDEX idx_eventorganization_conferenceorboothattendee_email (email);
+ALTER TABLE llx_eventorganization_conferenceorboothattendee ADD INDEX idx_eventorganization_conferenceorboothattendee_status (status);
+
+-- VMYSQL4.1 DROP INDEX uk_eventorganization_conferenceorboothattendee on llx_eventorganization_conferenceorboothattendee;
+-- VPGSQL8.2 DROP INDEX uk_eventorganization_conferenceorboothattendee;
+
+ALTER TABLE llx_eventorganization_conferenceorboothattendee ADD UNIQUE INDEX uk_eventorganization_conferenceorboothattendee(fk_project, email, fk_actioncomm);
+
+
+-- VMYSQL4.3 ALTER TABLE llx_eventorganization_conferenceorboothattendee MODIFY COLUMN fk_actioncomm integer NULL;
+-- VPGSQL8.2 ALTER TABLE llx_eventorganization_conferenceorboothattendee ALTER COLUMN fk_actioncomm DROP NOT NULL;
+
+
+
+UPDATE llx_extrafields SET elementtype = 'salary' WHERE elementtype = 'payment_salary';
+ALTER TABLE llx_payment_salary_extrafields RENAME TO llx_salary_extrafields;
+-- VMYSQL4.1 DROP INDEX idx_payment_salary_extrafields on llx_salary_extrafields;
+-- VPGSQL8.2 DROP INDEX idx_payment_salary_extrafields;
+ALTER TABLE llx_salary_extrafields ADD INDEX idx_salary_extrafields (fk_object);
+
+
+INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'conferenceorbooth', '', 0, null, null, '(EventOrganizationEmailAskConf)', 10, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationEmailAskConf)__', '__(Hello)__,
';
}
diff --git a/htdocs/knowledgemanagement/knowledgerecord_note.php b/htdocs/knowledgemanagement/knowledgerecord_note.php
index 87d9eed9bdb..2e58480adec 100644
--- a/htdocs/knowledgemanagement/knowledgerecord_note.php
+++ b/htdocs/knowledgemanagement/knowledgerecord_note.php
@@ -111,7 +111,7 @@ if ($id > 0 || !empty($ref)) {
if ($permissiontoadd)
{
if ($action != 'classify')
- //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : ';
+ //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : ';
$morehtmlref.=' : ';
if ($action == 'classify') {
//$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1);
diff --git a/htdocs/langs/am_ET/mrp.lang b/htdocs/langs/am_ET/mrp.lang
index 2414a92cefb..5d226c0f77b 100644
--- a/htdocs/langs/am_ET/mrp.lang
+++ b/htdocs/langs/am_ET/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Manufacturing Orders
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/ar_IQ/mrp.lang b/htdocs/langs/ar_IQ/mrp.lang
index 2414a92cefb..5d226c0f77b 100644
--- a/htdocs/langs/ar_IQ/mrp.lang
+++ b/htdocs/langs/ar_IQ/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Manufacturing Orders
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/ar_SA/mrp.lang b/htdocs/langs/ar_SA/mrp.lang
index 97c6e6378bb..fe2c1a87769 100644
--- a/htdocs/langs/ar_SA/mrp.lang
+++ b/htdocs/langs/ar_SA/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=أوامر التصنيع
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/az_AZ/mrp.lang b/htdocs/langs/az_AZ/mrp.lang
index 2414a92cefb..5d226c0f77b 100644
--- a/htdocs/langs/az_AZ/mrp.lang
+++ b/htdocs/langs/az_AZ/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Manufacturing Orders
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/bg_BG/mrp.lang b/htdocs/langs/bg_BG/mrp.lang
index 0c39bca3291..933315a64d4 100644
--- a/htdocs/langs/bg_BG/mrp.lang
+++ b/htdocs/langs/bg_BG/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Стойност 0,95 означава сре
DeleteBillOfMaterials=Изтриване на списък с материали
DeleteMo=Изтриване на поръчка за производство
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Поръчки за производство
NewMO=Нова поръчка за производство
QtyToProduce=Кол. за производство
diff --git a/htdocs/langs/bn_BD/mrp.lang b/htdocs/langs/bn_BD/mrp.lang
index 2414a92cefb..5d226c0f77b 100644
--- a/htdocs/langs/bn_BD/mrp.lang
+++ b/htdocs/langs/bn_BD/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Manufacturing Orders
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/bn_IN/mrp.lang b/htdocs/langs/bn_IN/mrp.lang
index 2414a92cefb..5d226c0f77b 100644
--- a/htdocs/langs/bn_IN/mrp.lang
+++ b/htdocs/langs/bn_IN/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Manufacturing Orders
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/bs_BA/mrp.lang b/htdocs/langs/bs_BA/mrp.lang
index 16ab0c8ac49..999a6ec67b8 100644
--- a/htdocs/langs/bs_BA/mrp.lang
+++ b/htdocs/langs/bs_BA/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Manufacturing Orders
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/cs_CZ/mrp.lang b/htdocs/langs/cs_CZ/mrp.lang
index 948205b3887..13d519a79b7 100644
--- a/htdocs/langs/cs_CZ/mrp.lang
+++ b/htdocs/langs/cs_CZ/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Hodnota 0,95 znamená průměrně ztrátu vyr
DeleteBillOfMaterials=Odstranit kusovník
DeleteMo=Smazat výrobní zakázku
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Výrobní zakázky
NewMO=Nová výrobní objednávka
QtyToProduce=Množství k výrobě
diff --git a/htdocs/langs/de_DE/mrp.lang b/htdocs/langs/de_DE/mrp.lang
index 0c90379fd43..323bbe74d59 100644
--- a/htdocs/langs/de_DE/mrp.lang
+++ b/htdocs/langs/de_DE/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Ein Wert von 0,95 bedeutet im Durchschnitt 5%
DeleteBillOfMaterials=Stückliste löschen
DeleteMo=Fertigungsauftrag löschen
ConfirmDeleteBillOfMaterials=Möchten Sie diese Stückliste wirklich löschen?
-ConfirmDeleteMo=Möchten Sie diese Stückliste wirklich löschen?
+ConfirmDeleteMo=Möchten Sie diese Fertigungsauftrag wirklich löschen?
MenuMRP=Fertigungsaufträge
NewMO=Neuer Fertigungsauftrag
QtyToProduce=Produktionsmenge
diff --git a/htdocs/langs/el_GR/mrp.lang b/htdocs/langs/el_GR/mrp.lang
index 3d622d1de8b..f70ffcd3117 100644
--- a/htdocs/langs/el_GR/mrp.lang
+++ b/htdocs/langs/el_GR/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Η τιμή 0,95 σημαίνει κατά μ
DeleteBillOfMaterials=Διαγραφή λογαριασμού υλικών
DeleteMo=Διαγραφή Παραγγελίας Παραγωγής
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Παραγγελίες Παραγωγής
NewMO=Νέα Παραγγελία Παραγωγής
QtyToProduce=Ποσότητα για παραγωγή
diff --git a/htdocs/langs/en_US/accountancy.lang b/htdocs/langs/en_US/accountancy.lang
index 771f0a83e7b..c20e0a339f6 100644
--- a/htdocs/langs/en_US/accountancy.lang
+++ b/htdocs/langs/en_US/accountancy.lang
@@ -37,8 +37,8 @@ OtherInfo=Other information
DeleteCptCategory=Remove accounting account from group
ConfirmDeleteCptCategory=Are you sure you want to remove this accounting account from the accounting account group?
JournalizationInLedgerStatus=Status of journalization
-AlreadyInGeneralLedger=Already transferred in accounting journals and ledger
-NotYetInGeneralLedger=Not yet transferred in accouting journals and ledger
+AlreadyInGeneralLedger=Already transferred to accounting journals and ledger
+NotYetInGeneralLedger=Not yet transferred to accouting journals and ledger
GroupIsEmptyCheckSetup=Group is empty, check setup of the personalized accounting group
DetailByAccount=Show detail by account
AccountWithNonZeroValues=Accounts with non-zero values
@@ -298,7 +298,7 @@ NoNewRecordSaved=No more record to journalize
ListOfProductsWithoutAccountingAccount=List of products not bound to any accounting account
ChangeBinding=Change the binding
Accounted=Accounted in ledger
-NotYetAccounted=Not yet accounted in the ledger
+NotYetAccounted=Not yet transferred to accounting
ShowTutorial=Show Tutorial
NotReconciled=Not reconciled
WarningRecordWithoutSubledgerAreExcluded=Warning, all operations without subledger account defined are filtered and excluded from this view
@@ -329,8 +329,8 @@ ACCOUNTING_DISABLE_BINDING_ON_PURCHASES=Disable binding & transfer in accountanc
ACCOUNTING_DISABLE_BINDING_ON_EXPENSEREPORTS=Disable binding & transfer in accountancy on expense reports (expense reports will not be taken into account in accounting)
## Export
-NotifiedExportDate=Notified export date (modification of the entries will not be possible)
-NotifiedValidationDate=Validation of the entries (modification or deletion of the entries will not be possible)
+NotifiedExportDate=Flag exported lines as exported (modification of the lines will not be possible)
+NotifiedValidationDate=Validate the exported entries (modification or deletion of the lines will not be possible)
ConfirmExportFile=Confirmation of the generation of the accounting export file ?
ExportDraftJournal=Export draft journal
Modelcsv=Model of export
@@ -343,7 +343,7 @@ Modelcsv_ciel=Export for Sage50, Ciel Compta or Compta Evo. (Format XIMPORT)
Modelcsv_quadratus=Export for Quadratus QuadraCompta
Modelcsv_ebp=Export for EBP
Modelcsv_cogilog=Export for Cogilog
-Modelcsv_agiris=Export for Agiris
+Modelcsv_agiris=Export for Agiris Isacompta
Modelcsv_LDCompta=Export for LD Compta (v9) (Test)
Modelcsv_LDCompta10=Export for LD Compta (v10 & higher)
Modelcsv_openconcerto=Export for OpenConcerto (Test)
@@ -351,9 +351,10 @@ Modelcsv_configurable=Export CSV Configurable
Modelcsv_FEC=Export FEC
Modelcsv_FEC2=Export FEC (With dates generation writing / document reversed)
Modelcsv_Sage50_Swiss=Export for Sage 50 Switzerland
-Modelcsv_winfic=Export Winfic - eWinfic - WinSis Compta
+Modelcsv_winfic=Export for Winfic - eWinfic - WinSis Compta
Modelcsv_Gestinumv3=Export for Gestinum (v3)
-Modelcsv_Gestinumv5Export for Gestinum (v5)
+Modelcsv_Gestinumv5=Export for Gestinum (v5)
+Modelcsv_charlemagne=Export for Aplim Charlemagne
ChartofaccountsId=Chart of accounts Id
## Tools - Init accounting account on product / service
diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang
index 454df4ed28e..48887552e7e 100644
--- a/htdocs/langs/en_US/admin.lang
+++ b/htdocs/langs/en_US/admin.lang
@@ -75,7 +75,7 @@ Dictionary=Dictionaries
ErrorReservedTypeSystemSystemAuto=Value 'system' and 'systemauto' for type is reserved. You can use 'user' as value to add your own record
ErrorCodeCantContainZero=Code can't contain value 0
DisableJavascript=Disable JavaScript and Ajax functions
-DisableJavascriptNote=Note: For test or debug purpose. For optimization for blind person or text browsers, you may prefer to use the setup on the profile of user
+DisableJavascriptNote=Note: For test or debug purpose only. For optimization for blind person or text browsers, you may prefer to use the setup on the profile of user
UseSearchToSelectCompanyTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant COMPANY_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
UseSearchToSelectContactTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant CONTACT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list. This may increase performance if you have a large number of third parties, but it is less convenient.
@@ -375,8 +375,8 @@ UMask=UMask parameter for new files on Unix/Linux/BSD/Mac file system.
UMaskExplanation=This parameter allow you to define permissions set by default on files created by Dolibarr on server (during upload for example). It must be the octal value (for example, 0666 means read and write for everyone). This parameter is useless on a Windows server.
SeeWikiForAllTeam=Take a look at the Wiki page for a list of contributors and their organization
UseACacheDelay= Delay for caching export response in seconds (0 or empty for no cache)
-DisableLinkToHelpCenter=Hide link "Need help or support" on login page
-DisableLinkToHelp=Hide link to online help "%s"
+DisableLinkToHelpCenter=Hide the link "Need help or support" on the login page
+DisableLinkToHelp=Hide the link to the online help "%s"
AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
ConfirmPurge=Are you sure you want to execute this purge? This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
MinLength=Minimum length
@@ -498,7 +498,7 @@ WarningPHPMail=WARNING: The setup to send emails from the application is using t
WarningPHPMailA=- Using the server of the Email Service Provider increases the trustability of your email, so it increases the deliverablity without being flagged as SPAM
WarningPHPMailB=- Some Email Service Providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not theirs, so few of your sent Emails may not be accepted for delivery (be careful also of your email provider's sending quota).
WarningPHPMailC=- Using the SMTP server of your own Email Service Provider to send emails is also interesting so all emails sent from application will also be saved into your "Sent" directory of your mailbox.
-WarningPHPMailD=If the method 'PHP Mail' is really the method you would like to use, you can remove this warning by adding the constant MAIN_HIDE_WARNING_TO_ENCOURAGE_SMTP_SETUP to 1 in Home - Setup - Other.
+WarningPHPMailD=Also, it is therefore recommended to change the sending method of e-mails to the value "SMTP". If you really want to keep the default "PHP" method to send emails, just ignore this warning, or remove it by setting the MAIN_HIDE_WARNING_TO_ENCOURAGE_SMTP_SETUP constant to 1 in Home - Setup - Other.
WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: %s.
WarningPHPMailSPF=If the domain name in your sender email address is protected by a SPF record (ask you domain name registar), you must add the following IPs in the SPF record of the DNS of your domain: %s.
ClickToShowDescription=Click to show description
@@ -606,7 +606,7 @@ Module400Desc=Management of projects, leads/opportunities and/or tasks. You can
Module410Name=Webcalendar
Module410Desc=Webcalendar integration
Module500Name=Taxes & Special Expenses
-Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
+Module500Desc=Management of other expenses (sales taxes, social or fiscal taxes, dividends, ...)
Module510Name=Salaries
Module510Desc=Record and track employee payments
Module520Name=Loans
@@ -898,6 +898,11 @@ Permission1002=Create/modify warehouses
Permission1003=Delete warehouses
Permission1004=Read stock movements
Permission1005=Create/modify stock movements
+Permission1011=View inventories
+Permission1012=Create new inventory
+Permission1014=Validate inventory
+Permission1015=Allow to change PMP value for a product
+Permission1016=Delete inventory
Permission1101=Read delivery receipts
Permission1102=Create/modify delivery receipts
Permission1104=Validate delivery receipts
@@ -1168,7 +1173,8 @@ DoNotSuggestPaymentMode=Do not suggest
NoActiveBankAccountDefined=No active bank account defined
OwnerOfBankAccount=Owner of bank account %s
BankModuleNotActive=Bank accounts module not enabled
-ShowBugTrackLink=Define the link "%s" (empty to not display this link, 'github' for the link to the Dolibarr project or define directly an url 'https://...')
+ShowBugTrackLink=Show the link "%s"
+ShowBugTrackLinkDesc=Keep empty to not display this link, use value 'github' for the link to the Dolibarr project or define directly an url 'https://...'
Alerts=Alerts
DelaysOfToleranceBeforeWarning=Delay before displaying a warning alert for:
DelaysOfToleranceDesc=Set the delay before an alert icon %s is shown onscreen for the late element.
@@ -1218,7 +1224,7 @@ SystemAreaForAdminOnly=This area is available to administrator users only. Dolib
CompanyFundationDesc=Edit the information of your company/organization. Click on "%s" button at the bottom of the page when done.
AccountantDesc=If you have an external accountant/bookkeeper, you can edit here its information.
AccountantFileNumber=Accountant code
-DisplayDesc=Parameters affecting the look and behaviour of the application can be modified here.
+DisplayDesc=Parameters affecting the look and presentation of the application can be modified here.
AvailableModules=Available app/modules
ToActivateModule=To activate modules, go on setup Area (Home->Setup->Modules).
SessionTimeOut=Time out for session
@@ -1270,7 +1276,7 @@ SimpleNumRefNoDateModelDesc=Returns the reference number in the format %s-nnnn w
ShowProfIdInAddress=Show professional ID with addresses
ShowVATIntaInAddress=Hide intra-Community VAT number
TranslationUncomplete=Partial translation
-MAIN_DISABLE_METEO=Disable meteorological view
+MAIN_DISABLE_METEO=Disable weather thumb
MeteoStdMod=Standard mode
MeteoStdModEnabled=Standard mode enabled
MeteoPercentageMod=Percentage mode
@@ -1472,10 +1478,10 @@ LDAPSynchronizeMembersTypes=Organization of foundation's members types in LDAP
LDAPPrimaryServer=Primary server
LDAPSecondaryServer=Secondary server
LDAPServerPort=Server port
-LDAPServerPortExample=Default port: 389
+LDAPServerPortExample=Standard or StartTLS: 389, LDAPs: 636
LDAPServerProtocolVersion=Protocol version
LDAPServerUseTLS=Use TLS
-LDAPServerUseTLSExample=Your LDAP server use TLS
+LDAPServerUseTLSExample=Your LDAP server use StartTLS
LDAPServerDn=Server DN
LDAPAdminDn=Administrator DN
LDAPAdminDnExample=Complete DN (ex: cn=admin,dc=example,dc=com or cn=Administrator,cn=Users,dc=example,dc=com for active directory)
@@ -1625,8 +1631,7 @@ ProductSetup=Products module setup
ServiceSetup=Services module setup
ProductServiceSetup=Products and Services modules setup
NumberOfProductShowInSelect=Maximum number of products to show in combo select lists (0=no limit)
-ViewProductDescInFormAbility=Display product descriptions in forms (otherwise shown in a tooltip popup)
-DoNotAddProductDescAtAddLines=Do not add product description (from product card) on submit add lines on forms
+ViewProductDescInFormAbility=Display product descriptions in lines of items (otherwise show description in a tooltip popup)
OnProductSelectAddProductDesc=How to use the description of the products when adding a product as a line of a document
AutoFillFormFieldBeforeSubmit=Auto fill the description input field with the description of product
DoNotAutofillButAutoConcat=Do not autofill the input field with description of product. Description of the product will be concatenated to the entered description automatically.
@@ -1705,8 +1710,10 @@ FreeLegalTextOnDeliveryReceipts=Free text on delivery receipts
##### FCKeditor #####
AdvancedEditor=Advanced editor
ActivateFCKeditor=Activate advanced editor for:
-FCKeditorForCompany=WYSIWIG creation/edition of elements description and note (except products/services)
-FCKeditorForProduct=WYSIWIG creation/edition of products/services description and note
+FCKeditorForNotePublic=WYSIWIG creation/edition of the field public notes of elements
+FCKeditorForNotePrivate=WYSIWIG creation/edition of the field private notes of elements
+FCKeditorForCompany=WYSIWIG creation/edition of the field description of elements (except products/services)
+FCKeditorForProduct=WYSIWIG creation/edition of the field description of products/services
FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.
FCKeditorForMailing= WYSIWIG creation/edition for mass eMailings (Tools->eMailing)
FCKeditorForUserSignature=WYSIWIG creation/edition of user signature
@@ -1915,11 +1922,11 @@ UnicodeCurrency=Enter here between braces, list of byte number that represent th
ColorFormat=The RGB color is in HEX format, eg: FF0000
PictoHelp=Icon name in dolibarr format ('image.png' if into the current theme directory, 'image.png@nom_du_module' if into the directory /img/ of a module)
PositionIntoComboList=Position of line into combo lists
-SellTaxRate=Sale tax rate
+SellTaxRate=Sales tax rate
RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
UrlTrackingDesc=If the provider or transport service offers a page or web site to check the status of your shipments, you may enter it here. You can use the key {TRACKID} in the URL parameters so the system will replace it with the tracking number the user entered into the shipment card.
OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of the lead, this amount may be multiplied by this rate to evaluate a total amount all your leads may generate. Value is a percentage (between 0 and 100).
-TemplateForElement=This template record is dedicated to which element
+TemplateForElement=This mail template is related to what type of object? An email template is available only when using the "Send Email" button from the related object.
TypeOfTemplate=Type of template
TemplateIsVisibleByOwnerOnly=Template is visible to owner only
VisibleEverywhere=Visible everywhere
@@ -2163,3 +2170,24 @@ APIsAreNotEnabled=APIs modules are not enabled
YouShouldSetThisToOff=You should set this to 0 or off
InstallAndUpgradeLockedBy=Install and upgrades are locked by the file %s
OldImplementation=Old implementation
+PDF_SHOW_LINK_TO_ONLINE_PAYMENT=If some online payment modules are enabled (Paypal, Stripe, ...), add a link on the PDF to make the online payment
+DashboardDisableGlobal=Disable globally all the thumbs of open objects
+BoxstatsDisableGlobal=Disable totally box statistics
+DashboardDisableBlocks=Thumbs of open objects (to process or late) on main dashboard
+DashboardDisableBlockAgenda=Disable the thumb for agenda
+DashboardDisableBlockProject=Disable the thumb for projects
+DashboardDisableBlockCustomer=Disable the thumb for customers
+DashboardDisableBlockSupplier=Disable the thumb for suppliers
+DashboardDisableBlockContract=Disable the thumb for contracts
+DashboardDisableBlockTicket=Disable the thumb for tickets
+DashboardDisableBlockBank=Disable the thumb for banks
+DashboardDisableBlockAdherent=Disable the thumb for memberships
+DashboardDisableBlockExpenseReport=Disable the thumb for expense reports
+DashboardDisableBlockHoliday=Disable the thumb for leaves
+EnabledCondition=Condition to have field enabled (if not enabled, visibility will always be off)
+IfYouUseASecondTaxYouMustSetYouUseTheMainTax=If you want to use a second tax, you must enable also the first sale tax
+IfYouUseAThirdTaxYouMustSetYouUseTheMainTax=If you want to use a third tax, you must enable also the first sale tax
+LanguageAndPresentation=Language and presentation
+SkinAndColors=Skin and colors
+IfYouUseASecondTaxYouMustSetYouUseTheMainTax=If you want to use a second tax, you must enable also the first sales tax
+IfYouUseAThirdTaxYouMustSetYouUseTheMainTax=If you want to use a third tax, you must enable also the first sales tax
diff --git a/htdocs/langs/en_US/agenda.lang b/htdocs/langs/en_US/agenda.lang
index bab409dd036..bc9c7dab537 100644
--- a/htdocs/langs/en_US/agenda.lang
+++ b/htdocs/langs/en_US/agenda.lang
@@ -64,6 +64,7 @@ ShipmentClassifyClosedInDolibarr=Shipment %s classified billed
ShipmentUnClassifyCloseddInDolibarr=Shipment %s classified re-open
ShipmentBackToDraftInDolibarr=Shipment %s go back to draft status
ShipmentDeletedInDolibarr=Shipment %s deleted
+ShipmentCanceledInDolibarr=Shipment %s canceled
ReceptionValidatedInDolibarr=Reception %s validated
OrderCreatedInDolibarr=Order %s created
OrderValidatedInDolibarr=Order %s validated
@@ -169,4 +170,5 @@ TimeType=Duration type
ReminderType=Callback type
AddReminder=Create an automatic reminder notification for this event
ErrorReminderActionCommCreation=Error creating the reminder notification for this event
-BrowserPush=Browser Popup Notification
\ No newline at end of file
+BrowserPush=Browser Popup Notification
+ActiveByDefault=Enabled by default
diff --git a/htdocs/langs/en_US/categories.lang b/htdocs/langs/en_US/categories.lang
index 29e08f66541..cf0de898bdb 100644
--- a/htdocs/langs/en_US/categories.lang
+++ b/htdocs/langs/en_US/categories.lang
@@ -96,4 +96,5 @@ ChooseCategory=Choose category
StocksCategoriesArea=Warehouse Categories
ActionCommCategoriesArea=Event Categories
WebsitePagesCategoriesArea=Page-Container Categories
+KnowledgemanagementsCategoriesArea=KM article Categories
UseOrOperatorForCategories=Use 'OR' operator for categories
diff --git a/htdocs/langs/en_US/companies.lang b/htdocs/langs/en_US/companies.lang
index b52ab6131be..7deee6a9d55 100644
--- a/htdocs/langs/en_US/companies.lang
+++ b/htdocs/langs/en_US/companies.lang
@@ -80,7 +80,7 @@ Web=Web
Poste= Position
DefaultLang=Default language
VATIsUsed=Sales tax used
-VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
+VATIsUsedWhenSelling=This defines if this third party includes a sales tax or not when it makes an invoice to its own customers
VATIsNotUsed=Sales tax is not used
CopyAddressFromSoc=Copy address from third-party details
ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
diff --git a/htdocs/langs/en_US/compta.lang b/htdocs/langs/en_US/compta.lang
index 8329346c163..753f83ba6ad 100644
--- a/htdocs/langs/en_US/compta.lang
+++ b/htdocs/langs/en_US/compta.lang
@@ -188,25 +188,25 @@ LT1ReportByCustomers=Report tax 2 by third party
LT2ReportByCustomers=Report tax 3 by third party
LT1ReportByCustomersES=Report by third party RE
LT2ReportByCustomersES=Report by third party IRPF
-VATReport=Sale tax report
-VATReportByPeriods=Sale tax report by period
-VATReportByMonth=Sale tax report by month
-VATReportByRates=Sale tax report by rates
-VATReportByThirdParties=Sale tax report by third parties
-VATReportByCustomers=Sale tax report by customer
+VATReport=Sales tax report
+VATReportByPeriods=Sales tax report by period
+VATReportByMonth=Sales tax report by month
+VATReportByRates=Sales tax report by rate
+VATReportByThirdParties=Sales tax report by third party
+VATReportByCustomers=Sales tax report by customer
VATReportByCustomersInInputOutputMode=Report by the customer VAT collected and paid
-VATReportByQuartersInInputOutputMode=Report by Sale tax rate of the tax collected and paid
+VATReportByQuartersInInputOutputMode=Report by Sales tax rate of the tax collected and paid
VATReportShowByRateDetails=Show details of this rate
LT1ReportByQuarters=Report tax 2 by rate
LT2ReportByQuarters=Report tax 3 by rate
LT1ReportByQuartersES=Report by RE rate
LT2ReportByQuartersES=Report by IRPF rate
-SeeVATReportInInputOutputMode=See report %sVAT encasement%s for a standard calculation
-SeeVATReportInDueDebtMode=See report %sVAT on flow%s for a calculation with an option on the flow
-RulesVATInServices=- For services, the report includes the VAT regulations actually received or issued on the basis of the date of payment.
-RulesVATInProducts=- For material assets, the report includes the VAT received or issued on the basis of the date of payment.
-RulesVATDueServices=- For services, the report includes VAT invoices due, paid or not, based on the invoice date.
-RulesVATDueProducts=- For material assets, the report includes the VAT invoices, based on the invoice date.
+SeeVATReportInInputOutputMode=See report %sVAT collection%s for a standard calculation
+SeeVATReportInDueDebtMode=See report %sVAT on debit%s for a calculation with an option on the invoicing
+RulesVATInServices=- For services, the report includes the VAT of payments actually received or paid on the basis of the date of payment.
+RulesVATInProducts=- For material assets, the report includes the VAT on the basis of the date of payment.
+RulesVATDueServices=- For services, the report includes VAT of due invoices, paid or not, based on the invoice date.
+RulesVATDueProducts=- For material assets, the report includes the VAT of due invoices, based on the invoice date.
OptionVatInfoModuleComptabilite=Note: For material assets, it should use the date of delivery to be more fair.
ThisIsAnEstimatedValue=This is a preview, based on business events and not from the final ledger table, so final results may differ from this preview values
PercentOfInvoice=%%/invoice
diff --git a/htdocs/langs/en_US/contracts.lang b/htdocs/langs/en_US/contracts.lang
index 49a65fdb39d..937c5a7397b 100644
--- a/htdocs/langs/en_US/contracts.lang
+++ b/htdocs/langs/en_US/contracts.lang
@@ -36,7 +36,7 @@ CloseAContract=Close a contract
ConfirmDeleteAContract=Are you sure you want to delete this contract and all its services?
ConfirmValidateContract=Are you sure you want to validate this contract under name %s?
ConfirmActivateAllOnContract=This will open all services (not yet active). Are you sure you want to open all services?
-ConfirmCloseContract=This will close all services (active or not). Are you sure you want to close this contract?
+ConfirmCloseContract=This will close all services (expired or not). Are you sure you want to close this contract?
ConfirmCloseService=Are you sure you want to close this service with date %s?
ValidateAContract=Validate a contract
ActivateService=Activate service
diff --git a/htdocs/langs/en_US/ecm.lang b/htdocs/langs/en_US/ecm.lang
index bc18bed4a29..494a6c55164 100644
--- a/htdocs/langs/en_US/ecm.lang
+++ b/htdocs/langs/en_US/ecm.lang
@@ -45,3 +45,5 @@ GenerateImgWebp=Duplicate all images with another version with .webp format
ConfirmGenerateImgWebp=If you confirm, you will generate an image in .webp format for all images currently into this folder (subfolders are not included)...
ConfirmImgWebpCreation=Confirm all images duplication
SucessConvertImgWebp=Images successfully duplicated
+ECMDirName=Dir name
+ECMParentDirectory=Parent directory
diff --git a/htdocs/langs/en_US/errors.lang b/htdocs/langs/en_US/errors.lang
index 89a3ec36af5..efe5e069b60 100644
--- a/htdocs/langs/en_US/errors.lang
+++ b/htdocs/langs/en_US/errors.lang
@@ -83,7 +83,7 @@ ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not s
ErrorRefAlreadyExists=Ref used for creation already exists.
ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
ErrorRecordHasChildren=Failed to delete record since it has some child records.
-ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
+ErrorRecordHasAtLeastOneChildOfType=Object %s has at least one child of type %s
ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
ErrorModuleRequireJavascript=Javascript must not be disabled to have this feature working. To enable/disable Javascript, go to menu Home->Setup->Display.
ErrorPasswordsMustMatch=Both typed passwords must match each other
@@ -270,6 +270,7 @@ ErrorActionCommBadType=Selected event type (id: %n, code: %s) do not exist in Ev
CheckVersionFail=Version check fail
ErrorWrongFileName=Name of the file cannot have __SOMETHING__ in it
ErrorNotInDictionaryPaymentConditions=Not in Payment Terms Dictionary, please modify.
+ErrorIsNotADraft=%s is not a draft
# Warnings
WarningParamUploadMaxFileSizeHigherThanPostMaxSize=Your PHP parameter upload_max_filesize (%s) is higher than PHP parameter post_max_size (%s). This is not a consistent setup.
@@ -307,10 +308,10 @@ WarningPaypalPaymentNotCompatibleWithStrict=The value 'Strict' makes the online
# Validate
RequireValidValue = Value not valid
-RequireAtLeastXString = Requires at least % character(s)
-RequireXStringMax = Requires % character(s) max
-RequireAtLeastXDigits = Requires at least % digit(s)
-RequireXDigitsMax = Requires % digit(s) max
+RequireAtLeastXString = Requires at least %s character(s)
+RequireXStringMax = Requires %s character(s) max
+RequireAtLeastXDigits = Requires at least %s digit(s)
+RequireXDigitsMax = Requires %s digit(s) max
RequireValidEmail = Email address is not valid
RequireMaxLength = Length must be less than %s chars
RequireMinLength = Length must be more than %s char(s)
diff --git a/htdocs/langs/en_US/eventorganization.lang b/htdocs/langs/en_US/eventorganization.lang
index a8953bf64a3..5da6be656e5 100644
--- a/htdocs/langs/en_US/eventorganization.lang
+++ b/htdocs/langs/en_US/eventorganization.lang
@@ -19,18 +19,22 @@
#
ModuleEventOrganizationName = Event Organization
EventOrganizationDescription = Event Organization through Module Project
-EventOrganizationDescriptionLong= Manage the organization of an events including conferences, speakers or attendees, with public submission and subscription page
+EventOrganizationDescriptionLong= Manage the organization of an event (show, conferences, attendees or speakers, with public pages for suggestion, vote or registration)
#
# Menu
#
EventOrganizationMenuLeft = Organized events
EventOrganizationConferenceOrBoothMenuLeft = Conference Or Booth
+PaymentEvent=Payment of event
+
#
# Admin page
#
-EventOrganizationSetup = Event Organization setup
-Settings = Settings
+NewRegistration=Registration
+EventOrganizationSetup=Event Organization setup
+EventOrganization=Event organization
+Settings=Settings
EventOrganizationSetupPage = Event Organization setup page
EVENTORGANIZATION_TASK_LABEL = Label of tasks to create automatically when project is validated
EVENTORGANIZATION_TASK_LABELTooltip = When you validate an organized event, some tasks can be automatically created in the project
For example: Send Call for Conference Send Call for Booth Receive call for conferences Receive call for Booth Open subscriptions to events for attendees Send remind of event to speakers Send remind of event to Booth hoster Send remind of event to attendees
@@ -38,8 +42,8 @@ EVENTORGANIZATION_CATEG_THIRDPARTY_CONF = Category to add to third-parties autom
EVENTORGANIZATION_CATEG_THIRDPARTY_BOOTH = Category to add to third-parties automatically created when they suggests a booth
EVENTORGANIZATION_TEMPLATE_EMAIL_ASK_CONF = Template of email to send after receiving a suggestion of a conference.
EVENTORGANIZATION_TEMPLATE_EMAIL_ASK_BOOTH = Template of email to send after receiving a suggestion of a booth.
-EVENTORGANIZATION_TEMPLATE_EMAIL_AFT_SUBS_BOOTH = Template of email to send after a subscription to a booth has been paid.
-EVENTORGANIZATION_TEMPLATE_EMAIL_AFT_SUBS_EVENT = Template of email to send after a subscription to an event has been paid.
+EVENTORGANIZATION_TEMPLATE_EMAIL_AFT_SUBS_BOOTH = Template of email to send after a registration to a booth has been paid.
+EVENTORGANIZATION_TEMPLATE_EMAIL_AFT_SUBS_EVENT = Template of email to send after a registration to an event has been paid.
EVENTORGANIZATION_TEMPLATE_EMAIL_BULK_SPEAKER = Template of email of massaction to attendes
EVENTORGANIZATION_TEMPLATE_EMAIL_BULK_ATTENDES = Template of email of massaction to speakers
EVENTORGANIZATION_FILTERATTENDEES_CAT = Filter thirdpartie's select list in attendees creation card/form with category
@@ -49,11 +53,11 @@ EVENTORGANIZATION_FILTERATTENDEES_TYPE = Filter thirdpartie's select list in att
# Object
#
EventOrganizationConfOrBooth= Conference Or Booth
-ManageOrganizeEvent = Manage event organisation
+ManageOrganizeEvent = Manage the organization of an event
ConferenceOrBooth = Conference Or Booth
ConferenceOrBoothTab = Conference Or Booth
-AmountOfSubscriptionPaid = Amount of subscription paid
-DateSubscription = Date of subscription
+AmountPaid = Amount paid
+DateOfRegistration = Date of registration
ConferenceOrBoothAttendee = Conference Or Booth Attendee
#
@@ -63,8 +67,8 @@ YourOrganizationEventConfRequestWasReceived = Your request for conference was re
YourOrganizationEventBoothRequestWasReceived = Your request for booth was received
EventOrganizationEmailAskConf = Request for conference
EventOrganizationEmailAskBooth = Request for booth
-EventOrganizationEmailSubsBooth = Subscription for booth
-EventOrganizationEmailSubsEvent = Subscription for an event
+EventOrganizationEmailBoothPayment = Payment of your booth
+EventOrganizationEmailRegistrationPayment = Registration for an event
EventOrganizationMassEmailAttendees = Communication to attendees
EventOrganizationMassEmailSpeakers = Communication to speakers
@@ -76,12 +80,13 @@ AllowUnknownPeopleSuggestConfHelp=Allow unknown people to suggest conferences
AllowUnknownPeopleSuggestBooth=Allow unknown people to suggest booth
AllowUnknownPeopleSuggestBoothHelp=Allow unknown people to suggest booth
PriceOfRegistration=Price of registration
-PriceOfRegistrationHelp=Price of registration
+PriceOfRegistrationHelp=Price to pay to register or participate in the event
PriceOfBooth=Subscription price to stand a booth
PriceOfBoothHelp=Subscription price to stand a booth
EventOrganizationICSLink=Link ICS for events
ConferenceOrBoothInformation=Conference Or Booth informations
-Attendees = Attendees
+Attendees=Attendees
+ListOfAttendeesOfEvent=List of attendees of the event project
DownloadICSLink = Download ICS link
EVENTORGANIZATION_SECUREKEY = Secure Key of the public registration link to a conference
SERVICE_BOOTH_LOCATION = Service used for the invoice row about a booth location
@@ -100,28 +105,38 @@ EvntOrgCancelled = Cancelled
# Public page
#
SuggestForm = Suggestion page
-RegisterPage = Page for conferences or booth
-EvntOrgRegistrationHelpMessage = Here, you can vote for an event, or suggest a new conference or booth for the project
+SuggestOrVoteForConfOrBooth = Page for suggestion or vote
+EvntOrgRegistrationHelpMessage = Here, you can vote for a conference or booth or suggest a new one for the event
EvntOrgRegistrationConfHelpMessage = Here, you can suggest a new conference for the project
EvntOrgRegistrationBoothHelpMessage = Here, you can suggest a new booth for the project
ListOfSuggestedConferences = List of suggested conferences
ListOfSuggestedBooths = List of suggested booths
+ListOfConferencesOrBooths=List of conferences or booths of event project
SuggestConference = Suggest a new conference
SuggestBooth = Suggest a booth
ViewAndVote = View and vote for suggested events
-PublicAttendeeSubscriptionPage = Public link of registration to a conference
+PublicAttendeeSubscriptionGlobalPage = Public link for registration to the event
+PublicAttendeeSubscriptionPage = Public link for registration to this event only
MissingOrBadSecureKey = The security key is invalid or missing
-EvntOrgWelcomeMessage = This form allows you to register as a new participant to the conference : '%s'
+EvntOrgWelcomeMessage = This form allows you to register as a new participant to the event : %s
EvntOrgDuration = This conference starts on %s and ends on %s.
ConferenceAttendeeFee = Conference attendee fee for the event : '%s' occurring from %s to %s.
BoothLocationFee = Booth location for the event : '%s' occurring from %s to %s
EventType = Event type
LabelOfBooth=Booth label
LabelOfconference=Conference label
-ConferenceIsNotConfirmed=Subcription not available, conference is not confirmed yet
+ConferenceIsNotConfirmed=Registration not available, conference is not confirmed yet
DateMustBeBeforeThan=%s must be before %s
DateMustBeAfterThan=%s must be after %s
+NewSubscription=Registration
+OrganizationEventConfRequestWasReceived=Your suggestion for a conference has been received
+OrganizationEventBoothRequestWasReceived=Your request for a booth has been received
+OrganizationEventPaymentOfBoothWasReceived=Your payment for your booth has been recorded
+OrganizationEventPaymentOfRegistrationWasReceived=Your payment for your event registration has been recorded
+OrganizationEventBulkMailToAttendees=This is a remind about your participation in the event as an attendee
+OrganizationEventBulkMailToSpeakers=This is a reminder on your participation in the event as a speaker
+
#
# Vote page
#
@@ -133,17 +148,14 @@ VoteOk = Your vote has been accepted.
AlreadyVoted = You have already voted for this event.
VoteError = An error has occurred during the vote, please try again.
-#
-# SubscriptionOk page
-#
-SubscriptionOk = Your subscription to this conference has been validated
-#
-# Subscription validation mail
-#
-ConfAttendeeSubscriptionConfirmation = Confirmation of your subscription to a conference
-#
-# Payment page
-#
+SubscriptionOk = Your registration has been validated
+ConfAttendeeSubscriptionConfirmation = Confirmation of your subscription to an event
Attendee = Attendee
PaymentConferenceAttendee = Conference attendee payment
PaymentBoothLocation = Booth location payment
+
+RegistrationAndPaymentWereAlreadyRecorder=A registration and a payment were already recorded for the email %s
+EmailAttendee=Attendee email
+EmailCompanyForInvoice=Company email (for invoice, if different of attendee email)
+ErrorSeveralCompaniesWithEmailContactUs=Several companies with this email has been found so we can't validate automaticaly your registration. Please contact us at %s for a manual validation
+ErrorSeveralCompaniesWithNameContactUs=Several companies with this name has been found so we can't validate automaticaly your registration. Please contact us at %s for a manual validation
\ No newline at end of file
diff --git a/htdocs/langs/en_US/languages.lang b/htdocs/langs/en_US/languages.lang
index e3b6bed94c8..d486fef0f5c 100644
--- a/htdocs/langs/en_US/languages.lang
+++ b/htdocs/langs/en_US/languages.lang
@@ -6,6 +6,7 @@ Language_ar_MA=Arabic (Moroco)
Language_ar_SA=Arabic
Language_ar_TN=Arabic (Tunisia)
Language_ar_IQ=Arabic (Iraq)
+Language_as_IN=Assamese
Language_az_AZ=Azerbaijani
Language_bn_BD=Bengali
Language_bn_IN=Bengali (India)
@@ -72,6 +73,7 @@ Language_it_IT=Italian
Language_it_CH=Italian (Switzerland)
Language_ja_JP=Japanese
Language_ka_GE=Georgian
+Language_kk_KZ=Kazakh
Language_km_KH=Khmer
Language_kn_IN=Kannada
Language_ko_KR=Korean
@@ -92,6 +94,7 @@ Language_ro_MD=Romanian (Moldavia)
Language_ro_RO=Romanian
Language_ru_RU=Russian
Language_ru_UA=Russian (Ukraine)
+Language_tg_TJ=Tajik
Language_tr_TR=Turkish
Language_sl_SI=Slovenian
Language_sv_SV=Swedish
diff --git a/htdocs/langs/en_US/mails.lang b/htdocs/langs/en_US/mails.lang
index 1c0dd638eeb..033f86b63aa 100644
--- a/htdocs/langs/en_US/mails.lang
+++ b/htdocs/langs/en_US/mails.lang
@@ -175,5 +175,5 @@ Answered=Answered
IsNotAnAnswer=Is not answer (initial email)
IsAnAnswer=Is an answer of an initial email
RecordCreatedByEmailCollector=Record created by the Email Collector %s from email %s
-DefaultBlacklistMailingStatus=Default contact status for refuse bulk emailing
+DefaultBlacklistMailingStatus=Default value for field '%s' when creating a new contact
DefaultStatusEmptyMandatory=Empty but mandatory
diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang
index 569c709e169..b68b62c2a43 100644
--- a/htdocs/langs/en_US/main.lang
+++ b/htdocs/langs/en_US/main.lang
@@ -804,6 +804,7 @@ LinkToSupplierInvoice=Link to vendor invoice
LinkToContract=Link to contract
LinkToIntervention=Link to intervention
LinkToTicket=Link to ticket
+LinkToMo=Link to Mo
CreateDraft=Create draft
SetToDraft=Back to draft
ClickToEdit=Click to edit
@@ -1153,3 +1154,5 @@ ConfirmMassLeaveApprovalQuestion=Are you sure you want to approve the %s selecte
ConfirmMassLeaveApproval=Mass leave approval confirmation
RecordAproved=Record approved
RecordsApproved=%s Record(s) approved
+Properties=Properties
+hasBeenValidated=%s has been validated
\ No newline at end of file
diff --git a/htdocs/langs/en_US/margins.lang b/htdocs/langs/en_US/margins.lang
index ad5406409b4..a91b139ec7b 100644
--- a/htdocs/langs/en_US/margins.lang
+++ b/htdocs/langs/en_US/margins.lang
@@ -22,7 +22,7 @@ ProductService=Product or Service
AllProducts=All products and services
ChooseProduct/Service=Choose product or service
ForceBuyingPriceIfNull=Force buying/cost price to selling price if not defined
-ForceBuyingPriceIfNullDetails=If buying/cost price not provided when we add a new line, and this option is "ON", the margin will be 0 on the new line (buying/cost price = selling price). If this option is "OFF" (recommended), margin will be equal to the value suggested by default (and may be 100% if no default value can be found).
+ForceBuyingPriceIfNullDetails=If buying/cost price not provided when we add a new line, and this option is "ON", the margin will be 0%% on the new line (buying/cost price = selling price). If this option is "OFF" (recommended), margin will be equal to the value suggested by default (and may be 100%% if no default value can be found).
MARGIN_METHODE_FOR_DISCOUNT=Margin method for global discounts
UseDiscountAsProduct=As a product
UseDiscountAsService=As a service
diff --git a/htdocs/langs/en_US/members.lang b/htdocs/langs/en_US/members.lang
index 2c4409caa88..9605e7a8df7 100644
--- a/htdocs/langs/en_US/members.lang
+++ b/htdocs/langs/en_US/members.lang
@@ -7,7 +7,7 @@ Members=Members
ShowMember=Show member card
UserNotLinkedToMember=User not linked to a member
ThirdpartyNotLinkedToMember=Third party not linked to a member
-MembersTickets=Members Tickets
+MembersTickets=Membership address sheet
FundationMembers=Foundation members
ListOfValidatedPublicMembers=List of validated public members
ErrorThisMemberIsNotPublic=This member is not public
@@ -19,8 +19,8 @@ MembersCards=Business cards for members
MembersList=List of members
MembersListToValid=List of draft members (to be validated)
MembersListValid=List of valid members
-MembersListUpToDate=List of valid members with up-to-date subscription
-MembersListNotUpToDate=List of valid members with out-of-date subscription
+MembersListUpToDate=List of valid members with up-to-date contribution
+MembersListNotUpToDate=List of valid members with out-of-date contribution
MembersListExcluded=List of excluded members
MembersListResiliated=List of terminated members
MembersListQualified=List of qualified members
@@ -28,13 +28,13 @@ MenuMembersToValidate=Draft members
MenuMembersValidated=Validated members
MenuMembersExcluded=Excluded members
MenuMembersResiliated=Terminated members
-MembersWithSubscriptionToReceive=Members with subscription to receive
-MembersWithSubscriptionToReceiveShort=Subscription to receive
-DateSubscription=Subscription date
-DateEndSubscription=Subscription end date
-EndSubscription=Subscription Ends
-SubscriptionId=Subscription id
-WithoutSubscription=Without subscription
+MembersWithSubscriptionToReceive=Members with contribution to receive
+MembersWithSubscriptionToReceiveShort=Contributions to receive
+DateSubscription=Date of membership
+DateEndSubscription=End date of membership
+EndSubscription=End of membership
+SubscriptionId=Contribution ID
+WithoutSubscription=Without contribution
MemberId=Member id
NewMember=New member
MemberType=Member type
@@ -43,9 +43,9 @@ MemberTypeLabel=Member type label
MembersTypes=Members types
MemberStatusDraft=Draft (needs to be validated)
MemberStatusDraftShort=Draft
-MemberStatusActive=Validated (waiting subscription)
+MemberStatusActive=Validated (waiting contribution)
MemberStatusActiveShort=Validated
-MemberStatusActiveLate=Subscription expired
+MemberStatusActiveLate=Contribution expired
MemberStatusActiveLateShort=Expired
MemberStatusPaid=Subscription up to date
MemberStatusPaidShort=Up to date
@@ -56,9 +56,9 @@ MemberStatusResiliatedShort=Terminated
MembersStatusToValid=Draft members
MembersStatusExcluded=Excluded members
MembersStatusResiliated=Terminated members
-MemberStatusNoSubscription=Validated (no subscription needed)
+MemberStatusNoSubscription=Validated (no contribution required)
MemberStatusNoSubscriptionShort=Validated
-SubscriptionNotNeeded=No subscription needed
+SubscriptionNotNeeded=No contribution required
NewCotisation=New contribution
PaymentSubscription=New contribution payment
SubscriptionEndDate=Subscription's end date
@@ -68,19 +68,19 @@ DeleteAMemberType=Delete a member type
ConfirmDeleteMemberType=Are you sure you want to delete this member type?
MemberTypeDeleted=Member type deleted
MemberTypeCanNotBeDeleted=Member type can not be deleted
-NewSubscription=New subscription
+NewSubscription=New contribution
NewSubscriptionDesc=This form allows you to record your subscription as a new member of the foundation. If you want to renew your subscription (if already a member), please contact foundation board instead by email %s.
-Subscription=Subscription
-Subscriptions=Subscriptions
+Subscription=Contribution
+Subscriptions=Contributions
SubscriptionLate=Late
-SubscriptionNotReceived=Subscription never received
-ListOfSubscriptions=List of subscriptions
+SubscriptionNotReceived=Contribution never received
+ListOfSubscriptions=List of contributions
SendCardByMail=Send card by email
AddMember=Create member
NoTypeDefinedGoToSetup=No member types defined. Go to menu "Members types"
NewMemberType=New member type
WelcomeEMail=Welcome email
-SubscriptionRequired=Subscription required
+SubscriptionRequired=Contribution required
DeleteType=Delete
VoteAllowed=Vote allowed
Physical=Individual
@@ -88,47 +88,48 @@ Moral=Corporation
MorAndPhy=Corporation and Individual
Reenable=Re-Enable
ExcludeMember=Exclude a member
+Exclude=Exclude
ConfirmExcludeMember=Are you sure you want to exclude this member ?
ResiliateMember=Terminate a member
ConfirmResiliateMember=Are you sure you want to terminate this member?
DeleteMember=Delete a member
-ConfirmDeleteMember=Are you sure you want to delete this member (Deleting a member will delete all his subscriptions)?
+ConfirmDeleteMember=Are you sure you want to delete this member (Deleting a member will delete all his contributions)?
DeleteSubscription=Delete a subscription
-ConfirmDeleteSubscription=Are you sure you want to delete this subscription?
+ConfirmDeleteSubscription=Are you sure you want to delete this contribution?
Filehtpasswd=htpasswd file
ValidateMember=Validate a member
ConfirmValidateMember=Are you sure you want to validate this member?
FollowingLinksArePublic=The following links are open pages not protected by any Dolibarr permission. They are not formatted pages, provided as example to show how to list members database.
PublicMemberList=Public member list
-BlankSubscriptionForm=Public self-subscription form
+BlankSubscriptionForm=Public self-registration form
BlankSubscriptionFormDesc=Dolibarr can provide you a public URL/website to allow external visitors to ask to subscribe to the foundation. If an online payment module is enabled, a payment form may also be automatically provided.
EnablePublicSubscriptionForm=Enable the public website with self-subscription form
ForceMemberType=Force the member type
-ExportDataset_member_1=Members and subscriptions
+ExportDataset_member_1=Members and contributions
ImportDataset_member_1=Members
LastMembersModified=Latest %s modified members
-LastSubscriptionsModified=Latest %s modified subscriptions
+LastSubscriptionsModified=Latest %s modified contributions
String=String
Text=Text
Int=Int
DateAndTime=Date and time
PublicMemberCard=Member public card
-SubscriptionNotRecorded=Subscription not recorded
-AddSubscription=Create subscription
-ShowSubscription=Show subscription
+SubscriptionNotRecorded=Contribution not recorded
+AddSubscription=Create contribution
+ShowSubscription=Show contribution
# Label of email templates
SendingAnEMailToMember=Sending information email to member
SendingEmailOnAutoSubscription=Sending email on auto registration
SendingEmailOnMemberValidation=Sending email on new member validation
-SendingEmailOnNewSubscription=Sending email on new subscription
-SendingReminderForExpiredSubscription=Sending reminder for expired subscriptions
+SendingEmailOnNewSubscription=Sending email on new contribution
+SendingReminderForExpiredSubscription=Sending reminder for expired contributions
SendingEmailOnCancelation=Sending email on cancelation
SendingReminderActionComm=Sending reminder for agenda event
# Topic of email templates
YourMembershipRequestWasReceived=Your membership was received.
YourMembershipWasValidated=Your membership was validated
-YourSubscriptionWasRecorded=Your new subscription was recorded
-SubscriptionReminderEmail=Subscription reminder
+YourSubscriptionWasRecorded=Your new contribution was recorded
+SubscriptionReminderEmail=contribution reminder
YourMembershipWasCanceled=Your membership was canceled
CardContent=Content of your member card
# Text of email templates
@@ -139,10 +140,10 @@ ThisIsContentOfSubscriptionReminderEmail=We want to let you know that your subsc
ThisIsContentOfYourCard=This is a summary of the information we have about you. Please contact us if anything is incorrect.
DescADHERENT_AUTOREGISTER_NOTIF_MAIL_SUBJECT=Subject of the notification email received in case of auto-inscription of a guest
DescADHERENT_AUTOREGISTER_NOTIF_MAIL=Content of the notification email received in case of auto-inscription of a guest
-DescADHERENT_EMAIL_TEMPLATE_AUTOREGISTER=Email template to use to send email to a member on member autosubscription
+DescADHERENT_EMAIL_TEMPLATE_AUTOREGISTER=Email template to use to send email to a member on member auto-registration
DescADHERENT_EMAIL_TEMPLATE_MEMBER_VALIDATION=Email template to use to send email to a member on member validation
-DescADHERENT_EMAIL_TEMPLATE_SUBSCRIPTION=Email template to use to send email to a member on new subscription recording
-DescADHERENT_EMAIL_TEMPLATE_REMIND_EXPIRATION=Email template to use to send email reminder when subscription is about to expire
+DescADHERENT_EMAIL_TEMPLATE_SUBSCRIPTION=Email template to use to send email to a member on new contribution recording
+DescADHERENT_EMAIL_TEMPLATE_REMIND_EXPIRATION=Email template to use to send email reminder when contribution is about to expire
DescADHERENT_EMAIL_TEMPLATE_CANCELATION=Email template to use to send email to a member on member cancelation
DescADHERENT_EMAIL_TEMPLATE_EXCLUSION=Email template to use to send email to a member on member exclusion
DescADHERENT_MAIL_FROM=Sender Email for automatic emails
@@ -155,10 +156,10 @@ DescADHERENT_CARD_TEXT_RIGHT=Text printed on member cards (align on right)
DescADHERENT_CARD_FOOTER_TEXT=Text printed on bottom of member cards
ShowTypeCard=Show type '%s'
HTPasswordExport=htpassword file generation
-NoThirdPartyAssociatedToMember=No third party associated to this member
-MembersAndSubscriptions= Members and Subscriptions
+NoThirdPartyAssociatedToMember=No third party associated with this member
+MembersAndSubscriptions=Members and Contributions
MoreActions=Complementary action on recording
-MoreActionsOnSubscription=Complementary action, suggested by default when recording a subscription
+MoreActionsOnSubscription=Complementary action, suggested by default when recording a contribution
MoreActionBankDirect=Create a direct entry on bank account
MoreActionBankViaInvoice=Create an invoice, and a payment on bank account
MoreActionInvoiceOnly=Create an invoice with no payment
@@ -167,9 +168,9 @@ LinkToGeneratedPagesDesc=This screen allows you to generate PDF files with busin
DocForAllMembersCards=Generate business cards for all members
DocForOneMemberCards=Generate business cards for a particular member
DocForLabels=Generate address sheets
-SubscriptionPayment=Subscription payment
-LastSubscriptionDate=Date of latest subscription payment
-LastSubscriptionAmount=Amount of latest subscription
+SubscriptionPayment=Contribution payment
+LastSubscriptionDate=Date of latest contribution payment
+LastSubscriptionAmount=Amount of latest contribution
LastMemberType=Last Member type
MembersStatisticsByCountries=Members statistics by country
MembersStatisticsByState=Members statistics by state/province
@@ -186,32 +187,34 @@ MembersByRegion=This screen show you statistics of members by region.
MembersStatisticsDesc=Choose statistics you want to read...
MenuMembersStats=Statistics
LastMemberDate=Latest membership date
-LatestSubscriptionDate=Latest subscription date
+LatestSubscriptionDate=Latest contribution date
MemberNature=Nature of the member
MembersNature=Nature of the members
Public=Information is public
NewMemberbyWeb=New member added. Awaiting approval
NewMemberForm=New member form
-SubscriptionsStatistics=Subscriptions statistics
-NbOfSubscriptions=Number of subscriptions
-AmountOfSubscriptions=Amount collected from subscriptions
+SubscriptionsStatistics=Contributions statistics
+NbOfSubscriptions=Number of contributions
+AmountOfSubscriptions=Amount collected from contributions
TurnoverOrBudget=Turnover (for a company) or Budget (for a foundation)
-DefaultAmount=Default amount of subscription
-CanEditAmount=Visitor can choose/edit amount of its subscription
+DefaultAmount=Default amount of contribution
+CanEditAmount=Visitor can choose/edit amount of its contribution
MEMBER_NEWFORM_PAYONLINE=Jump on integrated online payment page
ByProperties=By nature
MembersStatisticsByProperties=Members statistics by nature
-VATToUseForSubscriptions=VAT rate to use for subscriptions
-NoVatOnSubscription=No VAT for subscriptions
-ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS=Product used for subscription line into invoice: %s
+VATToUseForSubscriptions=VAT rate to use for contributionss
+NoVatOnSubscription=No VAT for contributions
+ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS=Product used for contribution line into invoice: %s
NameOrCompany=Name or company
-SubscriptionRecorded=Subscription recorded
+SubscriptionRecorded=Contribution recorded
NoEmailSentToMember=No email sent to member
EmailSentToMember=Email sent to member at %s
-SendReminderForExpiredSubscriptionTitle=Send reminder by email for expired subscription
-SendReminderForExpiredSubscription=Send reminder by email to members when subscription is about to expire (parameter is number of days before end of subscription to send the remind. It can be a list of days separated by a semicolon, for example '10;5;0;-5')
+SendReminderForExpiredSubscriptionTitle=Send reminder by email for expired contributions
+SendReminderForExpiredSubscription=Send reminder by email to members when contribution is about to expire (parameter is number of days before end of membership to send the remind. It can be a list of days separated by a semicolon, for example '10;5;0;-5')
MembershipPaid=Membership paid for current period (until %s)
YouMayFindYourInvoiceInThisEmail=You may find your invoice attached to this email
XMembersClosed=%s member(s) closed
XExternalUserCreated=%s external user(s) created
ForceMemberNature=Force member nature (Individual or Corporation)
+CreateDolibarrLoginDesc=The creation of a user login for members allows them to connect to the application. Depending on the authorizations granted, they will be able, for example, to consult or modify their file themselves.
+CreateDolibarrThirdPartyDesc=A thirdparty is the legal entity that will be used on the invoice if you decide to generate invoice for each contribution. You will be able to create it later during the process of recording the contribution.
diff --git a/htdocs/langs/en_US/mrp.lang b/htdocs/langs/en_US/mrp.lang
index 2414a92cefb..10e81316ee4 100644
--- a/htdocs/langs/en_US/mrp.lang
+++ b/htdocs/langs/en_US/mrp.lang
@@ -9,6 +9,7 @@ LatestBOMModified=Latest %s Bills of materials modified
LatestMOModified=Latest %s Manufacturing Orders modified
Bom=Bills of Material
BillOfMaterials=Bill of Materials
+BillOfMaterialsLines=Bill of Materials lines
BOMsSetup=Setup of module BOM
ListOfBOMs=List of bills of material - BOM
ListOfManufacturingOrders=List of Manufacturing Orders
@@ -31,7 +32,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Manufacturing Orders
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
@@ -55,6 +56,7 @@ WarehouseForProduction=Warehouse for production
CreateMO=Create MO
ToConsume=To consume
ToProduce=To produce
+ToObtain=To obtain
QtyAlreadyConsumed=Qty already consumed
QtyAlreadyProduced=Qty already produced
QtyRequiredIfNoLoss=Qty required if there is no loss (Manufacturing efficiency is 100%%)
@@ -72,6 +74,7 @@ NoStockChangeOnServices=No stock change on services
ProductQtyToConsumeByMO=Product quantity still to consume by open MO
ProductQtyToProduceByMO=Product quantity still to produce by open MO
AddNewConsumeLines=Add new line to consume
+AddNewProduceLines=Add new line to produce
ProductsToConsume=Products to consume
ProductsToProduce=Products to produce
UnitCost=Unit cost
@@ -101,3 +104,4 @@ HumanMachine=Human / Machine
WorkstationArea=Workstation area
Machines=Machines
THMEstimatedHelp=This rate makes it possible to define a forecast cost of the item
+MOAndLines=Manufacturing Orders and lines
diff --git a/htdocs/langs/en_US/opensurvey.lang b/htdocs/langs/en_US/opensurvey.lang
index 7d26151fa16..9fafacaf8bf 100644
--- a/htdocs/langs/en_US/opensurvey.lang
+++ b/htdocs/langs/en_US/opensurvey.lang
@@ -48,6 +48,8 @@ AddEndHour=Add end hour
votes=vote(s)
NoCommentYet=No comments have been posted for this poll yet
CanComment=Voters can comment in the poll
+YourVoteIsPrivate=This poll is private, nobody can see your vote.
+YourVoteIsPublic=This poll is public, anybody with the link can see your vote.
CanSeeOthersVote=Voters can see other people's vote
SelectDayDesc=For each selected day, you can choose, or not, meeting hours in the following format: - empty, - "8h", "8H" or "8:00" to give a meeting's start hour, - "8-11", "8h-11h", "8H-11H" or "8:00-11:00" to give a meeting's start and end hour, - "8h15-11h15", "8H15-11H15" or "8:15-11:15" for the same thing but with minutes.
BackToCurrentMonth=Back to current month
diff --git a/htdocs/langs/en_US/orders.lang b/htdocs/langs/en_US/orders.lang
index aad0010b4af..11220633d61 100644
--- a/htdocs/langs/en_US/orders.lang
+++ b/htdocs/langs/en_US/orders.lang
@@ -124,6 +124,8 @@ SupplierOrderReceivedInDolibarr=Purchase Order %s received %s
SupplierOrderSubmitedInDolibarr=Purchase Order %s submitted
SupplierOrderClassifiedBilled=Purchase Order %s set billed
OtherOrders=Other orders
+SupplierOrderValidatedAndApproved=Supplier order is validated and approved : %s
+SupplierOrderValidated=Supplier order is validated : %s
##### Types de contacts #####
TypeContact_commande_internal_SALESREPFOLL=Representative following-up sales order
TypeContact_commande_internal_SHIPPING=Representative following-up shipping
diff --git a/htdocs/langs/en_US/printing.lang b/htdocs/langs/en_US/printing.lang
index 16494583550..bd9094f213d 100644
--- a/htdocs/langs/en_US/printing.lang
+++ b/htdocs/langs/en_US/printing.lang
@@ -1,10 +1,10 @@
# Dolibarr language file - Source file is en_US - printing
-Module64000Name=Direct Printing
-Module64000Desc=Enable Direct Printing System
-PrintingSetup=Setup of Direct Printing System
-PrintingDesc=This module adds a Print button to various modules to allow documents to be printed directly to a printer without needing to open the document in another application.
-MenuDirectPrinting=Direct Printing jobs
-DirectPrint=Direct print
+Module64000Name=One click Printing
+Module64000Desc=Enable One click Printing System
+PrintingSetup=Setup of One click Printing System
+PrintingDesc=This module adds a Print button to various modules to allow documents to be printed directly to a printer with no need to open the document into another application.
+MenuDirectPrinting=One click Printing jobs
+DirectPrint=One click Print
PrintingDriverDesc=Configuration variables for printing driver.
ListDrivers=List of drivers
PrintTestDesc=List of Printers.
diff --git a/htdocs/langs/en_US/products.lang b/htdocs/langs/en_US/products.lang
index 31aa253af93..19349fb35a8 100644
--- a/htdocs/langs/en_US/products.lang
+++ b/htdocs/langs/en_US/products.lang
@@ -75,6 +75,7 @@ SellingPriceTTC=Selling price (inc. tax)
SellingMinPriceTTC=Minimum Selling price (inc. tax)
CostPriceDescription=This price field (excl. tax) can be used to capture the average amount this product costs to your company. It may be any price you calculate yourself, for example, from the average buying price plus average production and distribution cost.
CostPriceUsage=This value could be used for margin calculation.
+ManufacturingPrice=Manufacturing price
SoldAmount=Sold amount
PurchasedAmount=Purchased amount
NewPrice=New price
@@ -397,8 +398,13 @@ ActionAvailableOnVariantProductOnly=Action only available on the variant of prod
ProductsPricePerCustomer=Product prices per customers
ProductSupplierExtraFields=Additional Attributes (Supplier Prices)
DeleteLinkedProduct=Delete the child product linked to the combination
+AmountUsedToUpdateWAP=Amount to use to update the Weighted Average Price
PMPValue=Weighted average price
PMPValueShort=WAP
+mandatoryperiod=Mandatory periods
+mandatoryPeriodNeedTobeSet=Attention periods not entered and mandatory
+mandatoryPeriodNeedTobeSetMsgValidate=A service requires a start and end period
+mandatoryHelper=Message to the user on the need to enter a start date and an end date on a service when creating / validating an invoice, commercial proposal, sales order. This action is not blocking in the process of confirmation
DefaultBOM=Default BOM
DefaultBOMDesc=The default BOM recommended to use to manufacture this product. This field can be set only if nature of product is '%s'.
Rank=Rank
diff --git a/htdocs/langs/en_US/projects.lang b/htdocs/langs/en_US/projects.lang
index e6a84ad9736..6531a74840d 100644
--- a/htdocs/langs/en_US/projects.lang
+++ b/htdocs/langs/en_US/projects.lang
@@ -274,6 +274,7 @@ NewInter=New intervention
OneLinePerTask=One line per task
OneLinePerPeriod=One line per period
OneLinePerTimeSpentLine=One line for each time spent declaration
+AddDetailDateAndDuration=With date and duration into line description
RefTaskParent=Ref. Parent Task
ProfitIsCalculatedWith=Profit is calculated using
AddPersonToTask=Add also to tasks
@@ -281,3 +282,4 @@ UsageOrganizeEvent=Usage: Event Organization
PROJECT_CLASSIFY_CLOSED_WHEN_ALL_TASKS_DONE=Classify project as closed when all its tasks are completed (100%% progress)
PROJECT_CLASSIFY_CLOSED_WHEN_ALL_TASKS_DONE_help=Note: existing projects with all tasks at 100 %% progress won't be affected: you will have to close them manually. This option only affects open projects.
SelectLinesOfTimeSpentToInvoice=Select lines of time spent that are unbilled, then bulk action "Generate Invoice" to bill them
+ProjectTasksWithoutTimeSpent=Project tasks without time spent
diff --git a/htdocs/langs/en_US/receptions.lang b/htdocs/langs/en_US/receptions.lang
index 4ee0555c396..46b2d689609 100644
--- a/htdocs/langs/en_US/receptions.lang
+++ b/htdocs/langs/en_US/receptions.lang
@@ -45,3 +45,4 @@ ReceptionsNumberingModules=Numbering module for receptions
ReceptionsReceiptModel=Document templates for receptions
NoMorePredefinedProductToDispatch=No more predefined products to dispatch
ReceptionExist=A reception exists
+ByingPrice=Bying price
diff --git a/htdocs/langs/en_US/salaries.lang b/htdocs/langs/en_US/salaries.lang
index 504f0fbcc16..d4dc53f42ed 100644
--- a/htdocs/langs/en_US/salaries.lang
+++ b/htdocs/langs/en_US/salaries.lang
@@ -21,4 +21,5 @@ LastSalaries=Latest %s salaries
AllSalaries=All salaries
SalariesStatistics=Salary statistics
SalariesAndPayments=Salaries and payments
-ConfirmDeleteSalaryPayment=Do you want to delete this salary payment ?
\ No newline at end of file
+ConfirmDeleteSalaryPayment=Do you want to delete this salary payment ?
+FillFieldFirst=Fill employee field first
diff --git a/htdocs/langs/en_US/stocks.lang b/htdocs/langs/en_US/stocks.lang
index 78b095d9f11..62d9ac6cc99 100644
--- a/htdocs/langs/en_US/stocks.lang
+++ b/htdocs/langs/en_US/stocks.lang
@@ -12,9 +12,9 @@ AddWarehouse=Create warehouse
AddOne=Add one
DefaultWarehouse=Default warehouse
WarehouseTarget=Target warehouse
-ValidateSending=Delete sending
-CancelSending=Cancel sending
-DeleteSending=Delete sending
+ValidateSending=Confirm shipment
+CancelSending=Cancel shipment
+DeleteSending=Delete shipment
Stock=Stock
Stocks=Stocks
MissingStocks=Missing stocks
@@ -261,3 +261,5 @@ ProductDoesNotExist=Product does not exist
ErrorSameBatchNumber=Same batch number found in inventory list
ProductBatchDoesNotExist=Product with batch/serial does not exist
ProductBarcodeDoesNotExist=Product with barcode does not exist
+WarehouseId=Warehouse ID
+WarehouseRef=Warehouse Ref
\ No newline at end of file
diff --git a/htdocs/langs/en_US/ticket.lang b/htdocs/langs/en_US/ticket.lang
index 0b54b1d5fa8..0134b96b935 100644
--- a/htdocs/langs/en_US/ticket.lang
+++ b/htdocs/langs/en_US/ticket.lang
@@ -45,6 +45,8 @@ TicketSeverityShortNORMAL=Normal
TicketSeverityShortHIGH=High
TicketSeverityShortBLOCKING=Critical, Blocking
+TicketCategoryShortOTHER=Other
+
ErrorBadEmailAddress=Field '%s' incorrect
MenuTicketMyAssign=My tickets
MenuTicketMyAssignNonClosed=My open tickets
@@ -180,7 +182,7 @@ MessageSuccessfullyAdded=Ticket added
TicketMessageSuccessfullyAdded=Message successfully added
TicketMessagesList=Message list
NoMsgForThisTicket=No message for this ticket
-Properties=Classification
+TicketProperties=Classification
LatestNewTickets=Latest %s newest tickets (not read)
TicketSeverity=Severity
ShowTicket=See ticket
@@ -318,4 +320,5 @@ BoxNoTicketLastXDays=No new tickets the last %s days
BoxNumberOfTicketByDay=Number of new tickets by day
BoxNewTicketVSClose=Number of today's new tickets versus today's closed tickets
TicketCreatedToday=Ticket created today
-TicketClosedToday=Ticket closed today
\ No newline at end of file
+TicketClosedToday=Ticket closed today
+KMFoundForTicketGroup=We found topics and FAQs that may answers your question, thanks to check them before submitting the ticket
diff --git a/htdocs/langs/en_US/users.lang b/htdocs/langs/en_US/users.lang
index 841ee0f3daf..888c9f52161 100644
--- a/htdocs/langs/en_US/users.lang
+++ b/htdocs/langs/en_US/users.lang
@@ -62,8 +62,8 @@ ListOfUsersInGroup=List of users in this group
ListOfGroupsForUser=List of groups for this user
LinkToCompanyContact=Link to third party / contact
LinkedToDolibarrMember=Link to member
-LinkedToDolibarrUser=Link to Dolibarr user
-LinkedToDolibarrThirdParty=Link to Dolibarr third party
+LinkedToDolibarrUser=Link to user
+LinkedToDolibarrThirdParty=Link to third party
CreateDolibarrLogin=Create a user
CreateDolibarrThirdParty=Create a third party
LoginAccountDisableInDolibarr=Account disabled in Dolibarr.
diff --git a/htdocs/langs/et_EE/mrp.lang b/htdocs/langs/et_EE/mrp.lang
index c7146c45dfe..32e99e6e6b7 100644
--- a/htdocs/langs/et_EE/mrp.lang
+++ b/htdocs/langs/et_EE/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Manufacturing Orders
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/eu_ES/mrp.lang b/htdocs/langs/eu_ES/mrp.lang
index acf5a23db9b..a6e57a1168a 100644
--- a/htdocs/langs/eu_ES/mrp.lang
+++ b/htdocs/langs/eu_ES/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Manufacturing Orders
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/fa_IR/mrp.lang b/htdocs/langs/fa_IR/mrp.lang
index c00afb9dd3a..d536b6b661c 100644
--- a/htdocs/langs/fa_IR/mrp.lang
+++ b/htdocs/langs/fa_IR/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Manufacturing Orders
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/fi_FI/mrp.lang b/htdocs/langs/fi_FI/mrp.lang
index 2eafe6926bb..14f2af7e1fe 100644
--- a/htdocs/langs/fi_FI/mrp.lang
+++ b/htdocs/langs/fi_FI/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Valmistustilaukset
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang
index cbddc22a1bf..efab72ea66b 100644
--- a/htdocs/langs/fr_FR/admin.lang
+++ b/htdocs/langs/fr_FR/admin.lang
@@ -498,7 +498,7 @@ WarningPHPMail=AVERTISSEMENT: la configuration pour envoyer des e-mails à parti
WarningPHPMailA= - L'utilisation des serveurs de prestataires de messagerie augmente le niveau confiance des e-mails, cela augmente donc les chances de délivrabilité en n'étant pas considéré comme spam.
WarningPHPMailB=- Certains fournisseurs de services de messagerie (comme Yahoo) ne vous permettent pas d'envoyer un e-mail à partir d'un autre serveur que leur propre serveur. Votre configuration actuelle utilise le serveur de l'application pour envoyer des e-mails et non le serveur de votre fournisseur de messagerie, donc certains destinataires (ceux compatibles avec le protocole DMARC restrictif), demanderont à votre fournisseur de messagerie si ils peuvent accepter votre message et ce fournisseur de messagerie (comme Yahoo) peut répondre «non» parce que le serveur d'envoi n'est pas le leur, aussi une partie de vos e-mails envoyés peuvent ne pas être acceptés pour la livraison (faites également attention au quota d'envoi de votre fournisseur de messagerie).
WarningPHPMailC=- Utiliser le serveur SMTP de votre propre fournisseur de services de messagerie pour envoyer des e-mails est également intéressant afin que tous les e-mails envoyés depuis l'application soient également enregistrés dans votre répertoire "Envoyés" de votre boîte aux lettres.
-WarningPHPMailD=Si PHP est vraiment la méthode d'envoi des e-mails que vous avez choisi d'utiliser, supprimer cette alerte en activant à 1 la constante MAIN_HIDE_WARNING_TO_ENCOURAGE_SMTP_SETUP dans Accueil - Configuration - Divers
+WarningPHPMailD=Aussi, il est donc recommandé de modifier la méthode d'envoi des e-mails sur la valeur "SMTP". Si vous voulez vraiment conserver la méthode par défaut "PHP", alors vous pouvez ignorer cette alerte ou la supprimer en activant à 1 la constante MAIN_HIDE_WARNING_TO_ENCOURAGE_SMTP_SETUP dans Accueil - Configuration - Divers
WarningPHPMail2=Si votre fournisseur de messagerie SMTP a besoin de restreindre le client de messagerie à certaines adresses IP (très rare), voici l'adresse IP du mail user agent (MUA) de votre application CRM ERP : %s .
WarningPHPMailSPF=Si le nom de domaine de votre adresse e-mail d'expéditeur est protégé par un enregistrement SPF (demandez à votre fournisseur de nom de domaine), vous devez inclure les adresses IP suivantes dans l'enregistrement SPF du DNS de votre domaine: %s .
ClickToShowDescription=Cliquer pour afficher la description
diff --git a/htdocs/langs/fr_FR/agenda.lang b/htdocs/langs/fr_FR/agenda.lang
index 977681356d5..33faad30cdf 100644
--- a/htdocs/langs/fr_FR/agenda.lang
+++ b/htdocs/langs/fr_FR/agenda.lang
@@ -170,3 +170,4 @@ ReminderType=Type de rappel
AddReminder=Créer une notification de rappel automatique pour cet événement
ErrorReminderActionCommCreation=Erreur lors de la création de la notification de rappel pour cet événement
BrowserPush=Notification par Popup navigateur
+ActiveByDefault=Activation par défaut
diff --git a/htdocs/langs/fr_FR/ecm.lang b/htdocs/langs/fr_FR/ecm.lang
index 605cc97625d..c5867cbc7ed 100644
--- a/htdocs/langs/fr_FR/ecm.lang
+++ b/htdocs/langs/fr_FR/ecm.lang
@@ -45,3 +45,5 @@ GenerateImgWebp=Dupliquer toutes les images avec une autre version au format .we
ConfirmGenerateImgWebp=Si vous confirmez, vous générerez une image au format .webp pour toutes les images actuellement dans ce dossier (les sous-dossiers ne sont pas inclus)...
ConfirmImgWebpCreation=Confirmer la duplication de toutes les images
SucessConvertImgWebp=Images dupliquées avec succès
+ECMDirName=Nom du dossier
+ECMParentDirectory=Dossier parent
diff --git a/htdocs/langs/fr_FR/errors.lang b/htdocs/langs/fr_FR/errors.lang
index d7955df97e6..32090a13126 100644
--- a/htdocs/langs/fr_FR/errors.lang
+++ b/htdocs/langs/fr_FR/errors.lang
@@ -83,7 +83,7 @@ ErrorCantSaveADoneUserWithZeroPercentage=Impossible de sauver une action à l'é
ErrorRefAlreadyExists=Le référence %s existe déjà.
ErrorPleaseTypeBankTransactionReportName=Choisissez le nom du relevé bancaire sur lequel la ligne est rapportées (Format AAAAMM ou AAAAMMJJ)
ErrorRecordHasChildren=Impossible de supprimer l'enregistrement car il possède des enregistrements fils.
-ErrorRecordHasAtLeastOneChildOfType=L'objet a au moins un enfant de type %s
+ErrorRecordHasAtLeastOneChildOfType=L'objet %s a au moins un enfant de type %s
ErrorRecordIsUsedCantDelete=Ne peut effacer l'enregistrement. Ce dernier est déjà utilisé ou inclut dans un autre élément.
ErrorModuleRequireJavascript=Le javascript ne doit pas être désactivé pour que cette fonctionnalité soit utilisable. Pour activer/désactiver l'utilisation de javascript, allez dans le menu Accueil->Configuration->Affichage.
ErrorPasswordsMustMatch=Les 2 mots de passe saisis doivent correspondre
diff --git a/htdocs/langs/fr_FR/members.lang b/htdocs/langs/fr_FR/members.lang
index 88a0aa11246..2e1498e4507 100644
--- a/htdocs/langs/fr_FR/members.lang
+++ b/htdocs/langs/fr_FR/members.lang
@@ -70,8 +70,8 @@ MemberTypeDeleted=Type d'adhérent supprimé
MemberTypeCanNotBeDeleted=Ce type d'adhérent ne peut pas être supprimé
NewSubscription=Nouvelle adhésion
NewSubscriptionDesc=Ce formulaire permet de vous inscrire comme nouvel adhérent de l'association. Pour un renouvellement (si vous êtes déjà adhérent), contactez plutôt l'association par email %s.
-Subscription=Adhésion/cotisation
-Subscriptions=Adhésions/cotisations
+Subscription=Adhésion / cotisation
+Subscriptions=Adhésions / cotisations
SubscriptionLate=En retard
SubscriptionNotReceived=Cotisation non reçue
ListOfSubscriptions=Liste des cotisations
diff --git a/htdocs/langs/fr_FR/mrp.lang b/htdocs/langs/fr_FR/mrp.lang
index cdff650c34b..a0ab429a70c 100644
--- a/htdocs/langs/fr_FR/mrp.lang
+++ b/htdocs/langs/fr_FR/mrp.lang
@@ -72,6 +72,7 @@ NoStockChangeOnServices=Aucune variation de stock sur les services
ProductQtyToConsumeByMO=Quantité de produit restant à consommer par OF ouvert
ProductQtyToProduceByMO=Quantités restant à produire avec les OF ouverts
AddNewConsumeLines=Ajouter une nouvelle ligne à consommer
+AddNewProduceLines=Ajouter une nouvelle ligne à produire
ProductsToConsume=Produits à consommer
ProductsToProduce=Produits à produire
UnitCost=Coût unitaire
diff --git a/htdocs/langs/fr_FR/products.lang b/htdocs/langs/fr_FR/products.lang
index f67cfd8423d..24e5c062cc7 100644
--- a/htdocs/langs/fr_FR/products.lang
+++ b/htdocs/langs/fr_FR/products.lang
@@ -400,3 +400,7 @@ DeleteLinkedProduct=Supprimer le produit enfant lié à la combinaison
PMPValue=Prix moyen pondéré (PMP)
PMPValueShort=PMP
Rank=Rang
+mandatoryperiod=Périodes obligatoires
+mandatoryPeriodNeedTobeSet=Attention périodes non saisies et obligatoires
+mandatoryPeriodNeedTobeSetMsgValidate=Un service nécessite une période de début et de fin
+mandatoryHelper=Message à l'utilisateur sur la necessité de saisir une date de début et une date de fin sur un service lors de la création/validation de facture, proposition commerciale , commande client. Cette action n'est pas bloquante dans le processus de validation
diff --git a/htdocs/langs/fr_FR/receptions.lang b/htdocs/langs/fr_FR/receptions.lang
index 2becadf52c4..5d01e6a75bd 100644
--- a/htdocs/langs/fr_FR/receptions.lang
+++ b/htdocs/langs/fr_FR/receptions.lang
@@ -45,3 +45,4 @@ ReceptionsNumberingModules=Module de numérotation pour les réceptions
ReceptionsReceiptModel=Modèles de document pour les réceptions
NoMorePredefinedProductToDispatch=Plus de produits prédéfinis à expédier
ReceptionExist=Une réception existe
+ByingPrice=Prix d'achat
diff --git a/htdocs/langs/fr_FR/salaries.lang b/htdocs/langs/fr_FR/salaries.lang
index cdabb1c9f35..0dcf1a6d869 100644
--- a/htdocs/langs/fr_FR/salaries.lang
+++ b/htdocs/langs/fr_FR/salaries.lang
@@ -22,3 +22,4 @@ AllSalaries=Tous les salaires
SalariesStatistics=Statistiques
SalariesAndPayments=Salaires et paiements
ConfirmDeleteSalaryPayment=Voulez-vous supprimer ce paiement de salaire ?
+FillFieldFirst=Remplisez d'abord le champ salarié
diff --git a/htdocs/langs/fr_FR/ticket.lang b/htdocs/langs/fr_FR/ticket.lang
index b166e963caf..5bc4ef364bd 100644
--- a/htdocs/langs/fr_FR/ticket.lang
+++ b/htdocs/langs/fr_FR/ticket.lang
@@ -45,6 +45,8 @@ TicketSeverityShortNORMAL=Normal
TicketSeverityShortHIGH=Élevé
TicketSeverityShortBLOCKING=Critique, bloquant
+TicketCategoryShortOTHER=Autre
+
ErrorBadEmailAddress=Champ '%s' incorrect
MenuTicketMyAssign=Mes tickets
MenuTicketMyAssignNonClosed=Mes tickets ouverts
@@ -319,3 +321,4 @@ BoxNumberOfTicketByDay=Nombre de nouveaux tickets par jour
BoxNewTicketVSClose=Nombre de nouveaux tickets aujourd’hui par rapport aux tickets fermés aujourd’hui
TicketCreatedToday=Ticket créé aujourd'hui
TicketClosedToday=Ticket fermé aujourd'hui
+KMFoundForTicketGroup=Nous avons trouvé des sujets et des FAQ susceptibles de répondre à votre question, merci de les vérifier avant de soumettre le ticket
diff --git a/htdocs/langs/gl_ES/main.lang b/htdocs/langs/gl_ES/main.lang
index a330cb6d7c1..1e13deb814d 100644
--- a/htdocs/langs/gl_ES/main.lang
+++ b/htdocs/langs/gl_ES/main.lang
@@ -4,7 +4,7 @@ DIRECTION=ltr
# msungstdlight or cid0ct are for traditional Chinese (traditional does not render with Ubuntu pdf reader)
# stsongstdlight or cid0cs are for simplified Chinese
# To read Chinese pdf with Linux: sudo apt-get install poppler-data
-FONTFORPDF=helvética
+FONTFORPDF=helvetica
FONTSIZEFORPDF=10
SeparatorDecimal=,
SeparatorThousand=.
diff --git a/htdocs/langs/he_IL/mrp.lang b/htdocs/langs/he_IL/mrp.lang
index 2414a92cefb..5d226c0f77b 100644
--- a/htdocs/langs/he_IL/mrp.lang
+++ b/htdocs/langs/he_IL/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Manufacturing Orders
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/hi_IN/mrp.lang b/htdocs/langs/hi_IN/mrp.lang
index 2414a92cefb..5d226c0f77b 100644
--- a/htdocs/langs/hi_IN/mrp.lang
+++ b/htdocs/langs/hi_IN/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Manufacturing Orders
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/hr_HR/mrp.lang b/htdocs/langs/hr_HR/mrp.lang
index dd2c40eda6c..00710061f2a 100644
--- a/htdocs/langs/hr_HR/mrp.lang
+++ b/htdocs/langs/hr_HR/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Proizvodni nalozi
NewMO=Novi proizvodni nalog
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/hu_HU/mrp.lang b/htdocs/langs/hu_HU/mrp.lang
index 350817adedb..0623b3a8447 100644
--- a/htdocs/langs/hu_HU/mrp.lang
+++ b/htdocs/langs/hu_HU/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Gyártási rendelések
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/id_ID/mrp.lang b/htdocs/langs/id_ID/mrp.lang
index 76290ed5ea9..6f0d5c87b0a 100644
--- a/htdocs/langs/id_ID/mrp.lang
+++ b/htdocs/langs/id_ID/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Nilai 0,95 berarti rata-rata 5%% dari kehilan
DeleteBillOfMaterials=Hapus Bill Of Material
DeleteMo=Hapus Pesanan Pembuatan
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Pesanan Manufaktur
NewMO=Pesanan Manufaktur Baru
QtyToProduce=Jumlah yang akan diproduksi
diff --git a/htdocs/langs/is_IS/mrp.lang b/htdocs/langs/is_IS/mrp.lang
index 8fe3fd8f4c1..ca52ce21b60 100644
--- a/htdocs/langs/is_IS/mrp.lang
+++ b/htdocs/langs/is_IS/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Manufacturing Orders
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/it_IT/mrp.lang b/htdocs/langs/it_IT/mrp.lang
index 1e6247f3799..6d54470bf3f 100644
--- a/htdocs/langs/it_IT/mrp.lang
+++ b/htdocs/langs/it_IT/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Il valore di 0,95 indica una media di 5%% di
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Elimina Ordine di Produzione
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Ordini di produzione
NewMO=Nuovo ordine di produzione
QtyToProduce=Qtà da produrre
diff --git a/htdocs/langs/ka_GE/mrp.lang b/htdocs/langs/ka_GE/mrp.lang
index 2414a92cefb..5d226c0f77b 100644
--- a/htdocs/langs/ka_GE/mrp.lang
+++ b/htdocs/langs/ka_GE/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Manufacturing Orders
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/kk_KZ/mrp.lang b/htdocs/langs/kk_KZ/mrp.lang
index 2414a92cefb..5d226c0f77b 100644
--- a/htdocs/langs/kk_KZ/mrp.lang
+++ b/htdocs/langs/kk_KZ/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Manufacturing Orders
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/km_KH/mrp.lang b/htdocs/langs/km_KH/mrp.lang
index 2414a92cefb..5d226c0f77b 100644
--- a/htdocs/langs/km_KH/mrp.lang
+++ b/htdocs/langs/km_KH/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Manufacturing Orders
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/kn_IN/mrp.lang b/htdocs/langs/kn_IN/mrp.lang
index 2414a92cefb..5d226c0f77b 100644
--- a/htdocs/langs/kn_IN/mrp.lang
+++ b/htdocs/langs/kn_IN/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Manufacturing Orders
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/ko_KR/main.lang b/htdocs/langs/ko_KR/main.lang
index d4c9db86587..4866f431c83 100644
--- a/htdocs/langs/ko_KR/main.lang
+++ b/htdocs/langs/ko_KR/main.lang
@@ -4,7 +4,7 @@ DIRECTION=ltr
# msungstdlight or cid0ct are for traditional Chinese (traditional does not render with Ubuntu pdf reader)
# stsongstdlight or cid0cs are for simplified Chinese
# To read Chinese pdf with Linux: sudo apt-get install poppler-data
-FONTFORPDF=헬 베티 카
+FONTFORPDF=cid0kr
FONTSIZEFORPDF=10
SeparatorDecimal=.
SeparatorThousand=None
diff --git a/htdocs/langs/ko_KR/mrp.lang b/htdocs/langs/ko_KR/mrp.lang
index 131e1f376ac..9ea63ea0c0c 100644
--- a/htdocs/langs/ko_KR/mrp.lang
+++ b/htdocs/langs/ko_KR/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Manufacturing Orders
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/lo_LA/mrp.lang b/htdocs/langs/lo_LA/mrp.lang
index 00db7f202ec..daffab535ba 100644
--- a/htdocs/langs/lo_LA/mrp.lang
+++ b/htdocs/langs/lo_LA/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Manufacturing Orders
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/lt_LT/mrp.lang b/htdocs/langs/lt_LT/mrp.lang
index 9760b1babbe..a88ffc2687d 100644
--- a/htdocs/langs/lt_LT/mrp.lang
+++ b/htdocs/langs/lt_LT/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Manufacturing Orders
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/lv_LV/main.lang b/htdocs/langs/lv_LV/main.lang
index d380a59d050..9f0539dac39 100644
--- a/htdocs/langs/lv_LV/main.lang
+++ b/htdocs/langs/lv_LV/main.lang
@@ -4,7 +4,7 @@ DIRECTION=ltr
# msungstdlight or cid0ct are for traditional Chinese (traditional does not render with Ubuntu pdf reader)
# stsongstdlight or cid0cs are for simplified Chinese
# To read Chinese pdf with Linux: sudo apt-get install poppler-data
-FONTFORPDF=Helvetica
+FONTFORPDF=helvetica
FONTSIZEFORPDF=10
SeparatorDecimal=,
SeparatorThousand=None
diff --git a/htdocs/langs/mk_MK/mrp.lang b/htdocs/langs/mk_MK/mrp.lang
index 2414a92cefb..5d226c0f77b 100644
--- a/htdocs/langs/mk_MK/mrp.lang
+++ b/htdocs/langs/mk_MK/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Manufacturing Orders
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/mn_MN/mrp.lang b/htdocs/langs/mn_MN/mrp.lang
index 2414a92cefb..5d226c0f77b 100644
--- a/htdocs/langs/mn_MN/mrp.lang
+++ b/htdocs/langs/mn_MN/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Manufacturing Orders
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/ne_NP/mrp.lang b/htdocs/langs/ne_NP/mrp.lang
index 2414a92cefb..5d226c0f77b 100644
--- a/htdocs/langs/ne_NP/mrp.lang
+++ b/htdocs/langs/ne_NP/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Manufacturing Orders
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/nl_NL/mrp.lang b/htdocs/langs/nl_NL/mrp.lang
index d94344175c0..143e3cb4d55 100644
--- a/htdocs/langs/nl_NL/mrp.lang
+++ b/htdocs/langs/nl_NL/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Waarde van 0,95 betekent een gemiddelde van 5
DeleteBillOfMaterials=Stuklijst verwijderen
DeleteMo=Productieorder verwijderen
ConfirmDeleteBillOfMaterials=Weet u zeker dat u deze stuklijst wilt verwijderen?
-ConfirmDeleteMo=Weet u zeker dat u deze stuklijst wilt verwijderen?
+ConfirmDeleteMo=Weet u zeker dat u deze Productieorder wilt verwijderen?
MenuMRP=Productieorders
NewMO=Nieuwe productieorder
QtyToProduce=Te produceren aantal
diff --git a/htdocs/langs/pt_PT/mrp.lang b/htdocs/langs/pt_PT/mrp.lang
index 025f164f94e..39982e5bd35 100644
--- a/htdocs/langs/pt_PT/mrp.lang
+++ b/htdocs/langs/pt_PT/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Eliminar Faturas de Materiais
DeleteMo=Eliminar Encomenda de Manufaturação
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Encomendas de Manufatura
NewMO=Nova Encomenda de Manufatura
QtyToProduce=Qt. a produzir
diff --git a/htdocs/langs/sk_SK/mrp.lang b/htdocs/langs/sk_SK/mrp.lang
index d620b7e31e3..9917552ba94 100644
--- a/htdocs/langs/sk_SK/mrp.lang
+++ b/htdocs/langs/sk_SK/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Manufacturing Orders
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/sl_SI/mrp.lang b/htdocs/langs/sl_SI/mrp.lang
index 30bf0ca0238..b700927dd12 100644
--- a/htdocs/langs/sl_SI/mrp.lang
+++ b/htdocs/langs/sl_SI/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Manufacturing Orders
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/sq_AL/mrp.lang b/htdocs/langs/sq_AL/mrp.lang
index 29554c164a3..20a6d7238de 100644
--- a/htdocs/langs/sq_AL/mrp.lang
+++ b/htdocs/langs/sq_AL/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Manufacturing Orders
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/sr_RS/mrp.lang b/htdocs/langs/sr_RS/mrp.lang
index 16ab0c8ac49..999a6ec67b8 100644
--- a/htdocs/langs/sr_RS/mrp.lang
+++ b/htdocs/langs/sr_RS/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Manufacturing Orders
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/sw_SW/mrp.lang b/htdocs/langs/sw_SW/mrp.lang
index 2414a92cefb..5d226c0f77b 100644
--- a/htdocs/langs/sw_SW/mrp.lang
+++ b/htdocs/langs/sw_SW/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Manufacturing Orders
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/tg_TJ/mrp.lang b/htdocs/langs/tg_TJ/mrp.lang
index 2414a92cefb..5d226c0f77b 100644
--- a/htdocs/langs/tg_TJ/mrp.lang
+++ b/htdocs/langs/tg_TJ/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Manufacturing Orders
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/th_TH/main.lang b/htdocs/langs/th_TH/main.lang
index 367ef49849e..7f635f1da50 100644
--- a/htdocs/langs/th_TH/main.lang
+++ b/htdocs/langs/th_TH/main.lang
@@ -4,7 +4,7 @@ DIRECTION=ltr
# msungstdlight or cid0ct are for traditional Chinese (traditional does not render with Ubuntu pdf reader)
# stsongstdlight or cid0cs are for simplified Chinese
# To read Chinese pdf with Linux: sudo apt-get install poppler-data
-FONTFORPDF=Helvetica
+FONTFORPDF=helvetica
FONTSIZEFORPDF=10
SeparatorDecimal=.
SeparatorThousand=,
diff --git a/htdocs/langs/th_TH/mrp.lang b/htdocs/langs/th_TH/mrp.lang
index d5d061b855b..229690f76fd 100644
--- a/htdocs/langs/th_TH/mrp.lang
+++ b/htdocs/langs/th_TH/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Manufacturing Orders
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/tr_TR/mrp.lang b/htdocs/langs/tr_TR/mrp.lang
index 574ddefd491..b9c69a56364 100644
--- a/htdocs/langs/tr_TR/mrp.lang
+++ b/htdocs/langs/tr_TR/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Üretim Emri Sil
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Üretim Emirleri
NewMO=Yeni Üretim Emiri
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/uk_UA/mrp.lang b/htdocs/langs/uk_UA/mrp.lang
index 2414a92cefb..5d226c0f77b 100644
--- a/htdocs/langs/uk_UA/mrp.lang
+++ b/htdocs/langs/uk_UA/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Manufacturing Orders
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/vi_VN/mrp.lang b/htdocs/langs/vi_VN/mrp.lang
index f708bed87af..d24ddfe3b48 100644
--- a/htdocs/langs/vi_VN/mrp.lang
+++ b/htdocs/langs/vi_VN/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Xóa hóa đơn vật liệu
DeleteMo=Xóa đơn hàng sản xuất
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Đơn đặt hàng sản xuất
NewMO=Thêm Đơn hàng sản xuất
QtyToProduce=Số lượng để sản xuất
diff --git a/htdocs/langs/zh_CN/mrp.lang b/htdocs/langs/zh_CN/mrp.lang
index 86170bd9d91..e9f0381124a 100644
--- a/htdocs/langs/zh_CN/mrp.lang
+++ b/htdocs/langs/zh_CN/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Manufacturing Orders
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
diff --git a/htdocs/langs/zh_HK/mrp.lang b/htdocs/langs/zh_HK/mrp.lang
index 2414a92cefb..5d226c0f77b 100644
--- a/htdocs/langs/zh_HK/mrp.lang
+++ b/htdocs/langs/zh_HK/mrp.lang
@@ -31,7 +31,7 @@ ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss
DeleteBillOfMaterials=Delete Bill Of Materials
DeleteMo=Delete Manufacturing Order
ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials?
-ConfirmDeleteMo=Are you sure you want to delete this Bill Of Materials?
+ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order?
MenuMRP=Manufacturing Orders
NewMO=New Manufacturing Order
QtyToProduce=Qty to produce
diff --git a/htdocs/loan/card.php b/htdocs/loan/card.php
index f54da087731..a15f6c926a6 100644
--- a/htdocs/loan/card.php
+++ b/htdocs/loan/card.php
@@ -429,7 +429,7 @@ if ($id > 0) {
$morehtmlref .= ' '.$langs->trans('Project').' ';
if ($user->rights->loan->write) {
if ($action != 'classify') {
- $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' : ';
+ $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' : ';
}
if ($action == 'classify') {
//$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1);
@@ -717,22 +717,22 @@ if ($id > 0) {
// Edit
if (($object->paid == 0 || $object->paid == 2) && $user->rights->loan->write) {
- print '
';
diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php
index 6bb5b39507b..6f6d74c0cda 100644
--- a/htdocs/main.inc.php
+++ b/htdocs/main.inc.php
@@ -450,43 +450,46 @@ if (!defined('NOTOKENRENEWAL') && !defined('NOSESSION')) {
$_SESSION['token'] = $_SESSION['newtoken'];
}
- // Save in $_SESSION['newtoken'] what will be next token. Into forms, we will add param token = $_SESSION['newtoken']
- $token = dol_hash(uniqid(mt_rand(), false), 'md5'); // Generates a hash of a random number. We don't need a secured hash, just a changing random value.
- $_SESSION['newtoken'] = $token;
- dol_syslog("NEW TOKEN generated by : " . $_SERVER['PHP_SELF'], LOG_DEBUG);
+ if (!isset($_SESSION['newtoken']) || getDolGlobalInt('MAIN_SECURITY_CSRF_TOKEN_RENEWAL_ON_EACH_CALL')) {
+ // Save in $_SESSION['newtoken'] what will be next token. Into forms, we will add param token = $_SESSION['newtoken']
+ $token = dol_hash(uniqid(mt_rand(), false), 'md5'); // Generates a hash of a random number. We don't need a secured hash, just a changing random value.
+ $_SESSION['newtoken'] = $token;
+ dol_syslog("NEW TOKEN generated by : " . $_SERVER['PHP_SELF'], LOG_DEBUG);
+ }
}
}
//dol_syslog("aaaa - ".defined('NOCSRFCHECK')." - ".$dolibarr_nocsrfcheck." - ".$conf->global->MAIN_SECURITY_CSRF_WITH_TOKEN." - ".$_SERVER['REQUEST_METHOD']." - ".GETPOST('token', 'alpha'));
// Check validity of token, only if option MAIN_SECURITY_CSRF_WITH_TOKEN enabled or if constant CSRFCHECK_WITH_TOKEN is set into page
-if ((!defined('NOCSRFCHECK') && empty($dolibarr_nocsrfcheck) && !empty($conf->global->MAIN_SECURITY_CSRF_WITH_TOKEN)) || defined('CSRFCHECK_WITH_TOKEN')) {
+if ((!defined('NOCSRFCHECK') && empty($dolibarr_nocsrfcheck) && getDolGlobalInt('MAIN_SECURITY_CSRF_WITH_TOKEN')) || defined('CSRFCHECK_WITH_TOKEN')) {
// Array of action code where CSRFCHECK with token will be forced (so token must be provided on url request)
- $arrayofactiontoforcetokencheck = array(
- 'activate', 'add', 'addrights', 'addtimespent',
- 'confirm_create_user', 'confirm_create_thirdparty', 'confirm_delete', 'confirm_deletedir', 'confirm_deletefile', 'confirm_purge', 'confirm_reject_check',
- 'delete', 'deletefilter', 'deleteoperation', 'deleteprof', 'deletepayment', 'delrights',
- 'disable',
- 'doprev', 'donext', 'dvprev', 'dvnext',
- 'enable',
- 'install',
- 'setpricelevel',
- 'update'
- );
$sensitiveget = false;
- if (in_array(GETPOST('action', 'aZ09'), $arrayofactiontoforcetokencheck)) {
+ if ((GETPOSTISSET('massaction') || GETPOST('action', 'aZ09')) && getDolGlobalInt('MAIN_SECURITY_CSRF_WITH_TOKEN') == 2) {
+ // All GET actions and mass actions are processed as sensitive.
$sensitiveget = true;
+ } else {
+ // Only GET actions coded with a &token into url are processed as sensitive.
+ $arrayofactiontoforcetokencheck = array(
+ 'activate', 'add', 'addrights', 'addtimespent',
+ 'doprev', 'donext', 'dvprev', 'dvnext',
+ 'install',
+ 'reopen'
+ );
+ if (in_array(GETPOST('action', 'aZ09'), $arrayofactiontoforcetokencheck)) {
+ $sensitiveget = true;
+ }
+ if (preg_match('/^(classify|close|confirm|del|disable|enable|remove|set|unset|update)/', GETPOST('action', 'aZ09'))) {
+ $sensitiveget = true;
+ }
}
- if (preg_match('/^(disable_|enable_|setremise)/', GETPOST('action', 'aZ09'))) {
- $sensitiveget = true;
- }
-
// Check a token is provided for all cases that need a mandatory token
// (all POST actions + all login, actions and mass actions on pages with CSRFCHECK_WITH_TOKEN set + all sensitive GET actions)
if (
$_SERVER['REQUEST_METHOD'] == 'POST' ||
$sensitiveget ||
- ((GETPOSTISSET('actionlogin') || GETPOSTISSET('action') || GETPOSTISSET('massaction')) && defined('CSRFCHECK_WITH_TOKEN'))
+ GETPOSTISSET('massaction') ||
+ ((GETPOSTISSET('actionlogin') || GETPOSTISSET('action')) && defined('CSRFCHECK_WITH_TOKEN'))
) {
// If token is not provided or empty, error (we are in case it is mandatory)
if (!GETPOST('token', 'alpha') || GETPOST('token', 'alpha') == 'notrequired') {
@@ -503,7 +506,11 @@ if ((!defined('NOCSRFCHECK') && empty($dolibarr_nocsrfcheck) && !empty($conf->gl
} else {
dol_syslog("--- Access to ".(empty($_SERVER["REQUEST_METHOD"])?'':$_SERVER["REQUEST_METHOD"].' ').$_SERVER["PHP_SELF"]." refused by CSRF protection (POST method or GET with a sensible value for 'action' parameter) in main.inc.php. Token not provided.", LOG_WARNING);
print "Access to this page this way (POST method or GET with a sensible value for 'action' parameter) is refused by CSRF protection in main.inc.php. Token not provided.\n";
- print "If you access your server behind a proxy using url rewriting and the parameter is provided by caller, you might check that all HTTP header are propagated (or add the line \$dolibarr_nocsrfcheck=1 into your conf.php file or MAIN_SECURITY_CSRF_WITH_TOKEN to 0 into setup).\n";
+ print "If you access your server behind a proxy using url rewriting and the parameter is provided by caller, you might check that all HTTP header are propagated (or add the line \$dolibarr_nocsrfcheck=1 into your conf.php file or MAIN_SECURITY_CSRF_WITH_TOKEN to 0";
+ if (! empty($conf->global->MAIN_SECURITY_CSRF_WITH_TOKEN)) {
+ print " instead of ".$conf->global->MAIN_SECURITY_CSRF_WITH_TOKEN;
+ }
+ print " into setup).\n";
}
die;
}
@@ -1039,6 +1046,28 @@ if (!defined('NOLOGIN')) {
$user->rights->user->user->supprimer = 1;
$user->rights->user->self->creer = 1;
$user->rights->user->self->password = 1;
+
+ //Required if advanced permissions are used with MAIN_USE_ADVANCED_PERMS
+ if (!empty($conf->global->MAIN_USE_ADVANCED_PERMS)) {
+ if (empty($user->rights->user->user_advance)) {
+ $user->rights->user->user_advance = new stdClass(); // To avoid warnings
+ }
+ if (empty($user->rights->user->self_advance)) {
+ $user->rights->user->self_advance = new stdClass(); // To avoid warnings
+ }
+ if (empty($user->rights->user->group_advance)) {
+ $user->rights->user->group_advance = new stdClass(); // To avoid warnings
+ }
+
+ $user->rights->user->user_advance->readperms = 1;
+ $user->rights->user->user_advance->write = 1;
+ $user->rights->user->self_advance->readperms = 1;
+ $user->rights->user->self_advance->writeperms = 1;
+ $user->rights->user->group_advance->read = 1;
+ $user->rights->user->group_advance->readperms = 1;
+ $user->rights->user->group_advance->write = 1;
+ $user->rights->user->group_advance->delete = 1;
+ }
}
/*
@@ -1998,6 +2027,8 @@ function top_menu_user($hideloginname = 0, $urllogout = '')
global $dolibarr_main_authentication, $dolibarr_main_demo;
global $menumanager;
+ $langs->load('companies');
+
$userImage = $userDropDownImage = '';
if (!empty($user->photo)) {
$userImage = Form::showphoto('userphoto', $user, 0, 0, 0, 'photouserphoto userphoto', 'small', 0, 1);
diff --git a/htdocs/margin/admin/margin.php b/htdocs/margin/admin/margin.php
index 2c224678f60..30c85197337 100644
--- a/htdocs/margin/admin/margin.php
+++ b/htdocs/margin/admin/margin.php
@@ -155,9 +155,9 @@ if (!empty($conf->use_javascript_ajax)) {
print ajax_constantonoff('DISPLAY_MARGIN_RATES');
} else {
if (empty($conf->global->DISPLAY_MARGIN_RATES)) {
- print ''.img_picto($langs->trans("Disabled"), 'off').'';
+ print ''.img_picto($langs->trans("Disabled"), 'off').'';
} else {
- print ''.img_picto($langs->trans("Enabled"), 'on').'';
+ print ''.img_picto($langs->trans("Enabled"), 'on').'';
}
}
print '';
@@ -172,9 +172,9 @@ if (!empty($conf->use_javascript_ajax)) {
print ajax_constantonoff('DISPLAY_MARK_RATES');
} else {
if (empty($conf->global->DISPLAY_MARK_RATES)) {
- print ''.img_picto($langs->trans("Disabled"), 'off').'';
+ print ''.img_picto($langs->trans("Disabled"), 'off').'';
} else {
- print ''.img_picto($langs->trans("Enabled"), 'on').'';
+ print ''.img_picto($langs->trans("Enabled"), 'on').'';
}
}
print '';
@@ -189,9 +189,9 @@ if (!empty($conf->use_javascript_ajax)) {
print ajax_constantonoff('ForceBuyingPriceIfNull');
} else {
if (empty($conf->global->ForceBuyingPriceIfNull)) {
- print ''.img_picto($langs->trans("Disabled"), 'off').'';
+ print ''.img_picto($langs->trans("Disabled"), 'off').'';
} else {
- print ''.img_picto($langs->trans("Enabled"), 'on').'';
+ print ''.img_picto($langs->trans("Enabled"), 'on').'';
}
}
print '';
@@ -208,7 +208,7 @@ $methods = array(
print '
';
print '';
-print "";
+print '';
print '
';
print '
'.$langs->trans("MARGIN_METHODE_FOR_DISCOUNT").'
';
print '
';
@@ -224,13 +224,13 @@ print '';
// INTERNAL CONTACT TYPE USED AS COMMERCIAL AGENT
print '
';
+ } elseif ($key == 'lang') {
+ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formadmin.class.php';
+ $formadmin = new FormAdmin($db);
+ print $formadmin->select_language($search[$key], 'search_lang', 0, null, 1, 0, 0, 'minwidth150 maxwidth200', 2);
+ } else {
+ print '';
}
print '';
}
diff --git a/htdocs/modulebuilder/template/myobject_note.php b/htdocs/modulebuilder/template/myobject_note.php
index 7f324fbd456..d1c4e4c8837 100644
--- a/htdocs/modulebuilder/template/myobject_note.php
+++ b/htdocs/modulebuilder/template/myobject_note.php
@@ -162,7 +162,7 @@ if ($id > 0 || !empty($ref)) {
if ($permissiontoadd)
{
if ($action != 'classify')
- //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : ';
+ //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : ';
$morehtmlref.=' : ';
if ($action == 'classify') {
//$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1);
diff --git a/htdocs/mrp/class/api_mos.class.php b/htdocs/mrp/class/api_mos.class.php
index ed17db03db6..8fbd25090c7 100644
--- a/htdocs/mrp/class/api_mos.class.php
+++ b/htdocs/mrp/class/api_mos.class.php
@@ -370,12 +370,12 @@ class Mos extends DolibarrApi
$qtytoprocess = $value["qty"];
if (isset($value["fk_warehouse"])) { // If there is a warehouse to set
if (!($value["fk_warehouse"] > 0)) { // If there is no warehouse set.
- throw new RestException(500, "Field fk_warehouse must be > 0 in ".$arrayname);
$error++;
+ throw new RestException(500, "Field fk_warehouse must be > 0 in ".$arrayname);
}
if ($tmpproduct->status_batch) {
- throw new RestException(500, "Product ".$tmpproduct->ref."must be in batch");
$error++;
+ throw new RestException(500, "Product ".$tmpproduct->ref."must be in batch");
}
}
$idstockmove = 0;
@@ -476,13 +476,13 @@ class Mos extends DolibarrApi
if (isset($line->fk_warehouse)) { // If there is a warehouse to set
if (!($line->fk_warehouse > 0)) { // If there is no warehouse set.
$langs->load("errors");
- throw new RestException(500, $langs->trans("ErrorFieldRequiredForProduct", $langs->transnoentitiesnoconv("Warehouse"), $tmpproduct->ref));
$error++;
+ throw new RestException(500, $langs->trans("ErrorFieldRequiredForProduct", $langs->transnoentitiesnoconv("Warehouse"), $tmpproduct->ref));
}
if ($tmpproduct->status_batch) {
$langs->load("errors");
- throw new RestException(500, $langs->trans("ErrorFieldRequiredForProduct", $langs->transnoentitiesnoconv("Batch"), $tmpproduct->ref));
$error++;
+ throw new RestException(500, $langs->trans("ErrorFieldRequiredForProduct", $langs->transnoentitiesnoconv("Batch"), $tmpproduct->ref));
}
}
$idstockmove = 0;
@@ -535,13 +535,13 @@ class Mos extends DolibarrApi
if (isset($line->fk_warehouse)) { // If there is a warehouse to set
if (!($line->fk_warehouse > 0)) { // If there is no warehouse set.
$langs->load("errors");
- throw new RestException(500, $langs->trans("ErrorFieldRequiredForProduct", $langs->transnoentitiesnoconv("Warehouse"), $tmpproduct->ref));
$error++;
+ throw new RestException(500, $langs->trans("ErrorFieldRequiredForProduct", $langs->transnoentitiesnoconv("Warehouse"), $tmpproduct->ref));
}
if ($tmpproduct->status_batch) {
$langs->load("errors");
- throw new RestException(500, $langs->trans("ErrorFieldRequiredForProduct", $langs->transnoentitiesnoconv("Batch"), $tmpproduct->ref));
$error++;
+ throw new RestException(500, $langs->trans("ErrorFieldRequiredForProduct", $langs->transnoentitiesnoconv("Batch"), $tmpproduct->ref));
}
}
$idstockmove = 0;
@@ -716,7 +716,7 @@ class Mos extends DolibarrApi
if (!isset($data[$field])) {
throw new RestException(400, "$field field missing");
}
- $myobject[$field] = $data[$field];
+ $myobject[$field] = $data[$field];
}
return $myobject;
}
diff --git a/htdocs/mrp/class/mo.class.php b/htdocs/mrp/class/mo.class.php
index c88f0f44b48..a7ed52687df 100644
--- a/htdocs/mrp/class/mo.class.php
+++ b/htdocs/mrp/class/mo.class.php
@@ -101,6 +101,7 @@ class Mo extends CommonObject
'entity' => array('type'=>'integer', 'label'=>'Entity', 'enabled'=>1, 'visible'=>0, 'position'=>5, 'notnull'=>1, 'default'=>'1', 'index'=>1),
'ref' => array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>1, 'visible'=>4, 'position'=>10, 'notnull'=>1, 'default'=>'(PROV)', 'index'=>1, 'searchall'=>1, 'comment'=>"Reference of object", 'showoncombobox'=>'1', 'noteditable'=>1),
'fk_bom' => array('type'=>'integer:Bom:bom/class/bom.class.php:0:t.status=1', 'filter'=>'active=1', 'label'=>'BOM', 'enabled'=>1, 'visible'=>1, 'position'=>33, 'notnull'=>-1, 'index'=>1, 'comment'=>"Original BOM", 'css'=>'minwidth100 maxwidth300', 'csslist'=>'nowraponall'),
+ 'mrptype' => array('type'=>'integer', 'label'=>'Type', 'enabled'=>1, 'visible'=>1, 'position'=>34, 'notnull'=>1, 'default'=>'0', 'arrayofkeyval'=>array(0=>'Manufacturing', 1=>'Disassemble'), 'css'=>'minwidth150', 'csslist'=>'minwidth150 center'),
'fk_product' => array('type'=>'integer:Product:product/class/product.class.php:0', 'label'=>'Product', 'enabled'=>1, 'visible'=>1, 'position'=>35, 'notnull'=>1, 'index'=>1, 'comment'=>"Product to produce", 'css'=>'maxwidth300', 'csslist'=>'tdoverflowmax100', 'picto'=>'product'),
'qty' => array('type'=>'real', 'label'=>'QtyToProduce', 'enabled'=>1, 'visible'=>1, 'position'=>40, 'notnull'=>1, 'comment'=>"Qty to produce", 'css'=>'width75', 'default'=>1, 'isameasure'=>1),
'label' => array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>1, 'visible'=>1, 'position'=>42, 'notnull'=>-1, 'searchall'=>1, 'showoncombobox'=>'2', 'css'=>'maxwidth300', 'csslist'=>'tdoverflowmax200'),
@@ -121,8 +122,9 @@ class Mo extends CommonObject
'status' => array('type'=>'integer', 'label'=>'Status', 'enabled'=>1, 'visible'=>2, 'position'=>1000, 'default'=>0, 'notnull'=>1, 'index'=>1, 'arrayofkeyval'=>array('0'=>'Draft', '1'=>'Validated', '2'=>'InProgress', '3'=>'StatusMOProduced', '9'=>'Canceled')),
);
public $rowid;
- public $ref;
public $entity;
+ public $ref;
+ public $mrptype;
public $label;
public $qty;
public $fk_warehouse;
@@ -253,7 +255,7 @@ class Mo extends CommonObject
$this->db->begin();
// Check that product is not a kit/virtual product
- if (empty($conf->global->ALLOW_USE_KITS_INTO_BOM_AND_MO) and $this->fk_product > 0) {
+ if (empty($conf->global->ALLOW_USE_KITS_INTO_BOM_AND_MO) && $this->fk_product > 0) {
include_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
$tmpproduct = new Product($this->db);
$tmpproduct->fetch($this->fk_product);
@@ -265,6 +267,14 @@ class Mo extends CommonObject
}
}
+ if ($this->fk_bom > 0) {
+ // If there is a nown BOM, we force the type of MO to the type of BOM
+ $tmpbom = new BOM($this->db);
+ $tmpbom->fetch($this->fk_bom);
+
+ $this->mrptype = $tmpbom->bomtype;
+ }
+
if (!$error) {
$idcreated = $this->createCommon($user, $notrigger);
if ($idcreated <= 0) {
@@ -273,7 +283,7 @@ class Mo extends CommonObject
}
if (!$error) {
- $result = $this->updateProduction($user, $notrigger);
+ $result = $this->updateProduction($user, $notrigger); // Insert lines from BOM
if ($result <= 0) {
$error++;
}
@@ -448,7 +458,7 @@ class Mo extends CommonObject
}
}
if (count($sqlwhere) > 0) {
- $sql .= ' AND ('.implode(' '.$filtermode.' ', $sqlwhere).')';
+ $sql .= ' AND ('.implode(' '.$this->db->escape($filtermode).' ', $sqlwhere).')';
}
if (!empty($sortfield)) {
@@ -638,7 +648,7 @@ class Mo extends CommonObject
$moline->fk_product = $this->fk_product;
$moline->position = 1;
- if ($this->fk_bom > 0) { // If a BOM is defined, we know what to consume.
+ if ($this->fk_bom > 0) { // If a BOM is defined, we know what to produce.
include_once DOL_DOCUMENT_ROOT.'/bom/class/bom.class.php';
$bom = new Bom($this->db);
$bom->fetch($this->fk_bom);
@@ -649,6 +659,12 @@ class Mo extends CommonObject
$role = 'toconsume';
$moline->role = 'toproduce';
}
+ } else {
+ if ($this->mrptype == 1) {
+ $moline->role = 'toconsume';
+ } else {
+ $moline->role = 'toproduce';
+ }
}
$resultline = $moline->create($user, false); // Never use triggers here
@@ -1011,9 +1027,9 @@ class Mo extends CommonObject
$label .= ' '.$langs->trans('Label').': '.$this->label;
}
- $url = dol_buildpath('/mrp/mo_card.php', 1).'?id='.$this->id;
+ $url = DOL_URL_ROOT.'/mrp/mo_card.php?id='.$this->id;
if ($option == 'production') {
- $url = dol_buildpath('/mrp/mo_production.php', 1).'?id='.$this->id;
+ $url = DOL_URL_ROOT.'/mrp/mo_production.php?id='.$this->id;
}
if ($option != 'nolink') {
@@ -1176,6 +1192,8 @@ class Mo extends CommonObject
public function initAsSpecimen()
{
$this->initAsSpecimenCommon();
+
+ $this->lines = array();
}
/**
@@ -1188,7 +1206,7 @@ class Mo extends CommonObject
$this->lines = array();
$objectline = new MoLine($this->db);
- $result = $objectline->fetchAll('ASC', 'position', 0, 0, array('customsql'=>'fk_mo = '.$this->id));
+ $result = $objectline->fetchAll('ASC', 'position', 0, 0, array('customsql'=>'fk_mo = '.((int) $this->id)));
if (is_numeric($result)) {
$this->error = $this->error;
@@ -1557,7 +1575,7 @@ class MoLine extends CommonObjectLine
}
}
if (count($sqlwhere) > 0) {
- $sql .= ' AND ('.implode(' '.$filtermode.' ', $sqlwhere).')';
+ $sql .= ' AND ('.implode(' '.$this->db->escape($filtermode).' ', $sqlwhere).')';
}
if (!empty($sortfield)) {
diff --git a/htdocs/mrp/mo_agenda.php b/htdocs/mrp/mo_agenda.php
index bbd2724fb1c..95dab4e62ab 100644
--- a/htdocs/mrp/mo_agenda.php
+++ b/htdocs/mrp/mo_agenda.php
@@ -158,7 +158,7 @@ if ($object->id > 0) {
$morehtmlref .= ' '.$langs->trans('Project').' ';
if ($permissiontoadd) {
if ($action != 'classify') {
- $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' : ';
+ $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' : ';
}
if ($action == 'classify') {
//$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->fk_soc, $object->fk_project, 'projectid', 0, 0, 1, 1);
diff --git a/htdocs/mrp/mo_card.php b/htdocs/mrp/mo_card.php
index 6eaf42ed833..136952662cc 100644
--- a/htdocs/mrp/mo_card.php
+++ b/htdocs/mrp/mo_card.php
@@ -49,6 +49,7 @@ $backtopageforcancel = GETPOST('backtopageforcancel', 'alpha');
// Initialize technical objects
$object = new Mo($db);
$objectbom = new BOM($db);
+
$extrafields = new ExtraFields($db);
$diroutputmassaction = $conf->mrp->dir_output.'/temp/massgeneration/'.$user->id;
$hookmanager->initHooks(array('mocard', 'globalcard')); // Note that conf->hooks_modules contains array
@@ -74,13 +75,14 @@ if (empty($action) && empty($id) && empty($ref)) {
// Load object
include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once.
-if (GETPOST('fk_bom', 'int')) {
+if (GETPOST('fk_bom', 'int') > 0) {
$objectbom->fetch(GETPOST('fk_bom', 'int'));
if ($action != 'add') {
// We force calling parameters if we are not in the submit of creation of MO
$_POST['fk_product'] = $objectbom->fk_product;
$_POST['qty'] = $objectbom->qty;
+ $_POST['mrptype'] = $objectbom->bomtype;
$_POST['fk_warehouse'] = $objectbom->fk_warehouse;
$_POST['note_private'] = $objectbom->note_private;
}
@@ -197,7 +199,7 @@ $form = new Form($db);
$formfile = new FormFile($db);
$formproject = new FormProjets($db);
-$title = $langs->trans('Mo')." - ".$langs->trans("Card");
+$title = $langs->trans('ManufacturingOrder')." - ".$langs->trans("Card");
llxHeader('', $title, '');
@@ -205,6 +207,13 @@ llxHeader('', $title, '');
// Part to create
if ($action == 'create') {
+ if (GETPOST('fk_bom', 'int') > 0) {
+ $titlelist = $langs->trans("ToConsume");
+ if ($objectbom->bomtype == 1) {
+ $titlelist = $langs->trans("ToObtain");
+ }
+ }
+
print load_fiche_titre($langs->trans("NewObject", $langs->transnoentitiesnoconv("Mo")), '', 'mrp');
print '
';
@@ -245,7 +254,10 @@ if ($action == 'create') {
console.log(data);
if (typeof data.rowid != "undefined") {
console.log("New BOM loaded, we set values in form");
+ console.log(data);
$('#qty').val(data.qty);
+ $("#mrptype").val(data.bomtype); // We set bomtype into mrptype
+ $('#mrptype').trigger('change'); // Notify any JS components that the value changed
$("#fk_product").val(data.fk_product);
$('#fk_product').trigger('change'); // Notify any JS components that the value changed
$('#note_private').val(data.description);
@@ -268,7 +280,7 @@ if ($action == 'create') {
else if (jQuery('#fk_bom').val() < 0) {
// Redirect to page with all fields defined except fk_bom set
console.log(jQuery('#fk_product').val());
- window.location.href = '?action=create&qty='+jQuery('#qty').val()+'&fk_product='+jQuery('#fk_product').val()+'&label='+jQuery('#label').val()+'&fk_project='+jQuery('#fk_project').val()+'&fk_warehouse='+jQuery('#fk_warehouse').val();
+ window.location.href = '?action=create&qty='+jQuery('#qty').val()+'&mrptype='+jQuery('#mrptype').val()+'&fk_product='+jQuery('#fk_product').val()+'&label='+jQuery('#label').val()+'&fk_project='+jQuery('#fk_project').val()+'&fk_warehouse='+jQuery('#fk_warehouse').val();
/*
$('#qty').val('');
$("#fk_product").val('');
@@ -288,13 +300,14 @@ if ($action == 'create') {
print $form->buttonsSaveCancel("Create");
- if (GETPOST('fk_bom', 'int') > 0) {
- print load_fiche_titre($langs->trans("ToConsume"));
+ if ($objectbom->id > 0) {
+ print load_fiche_titre($titlelist);
print '
';
diff --git a/htdocs/mrp/tpl/linkedobjectblock.tpl.php b/htdocs/mrp/tpl/linkedobjectblock.tpl.php
new file mode 100644
index 00000000000..ac3a6bafc07
--- /dev/null
+++ b/htdocs/mrp/tpl/linkedobjectblock.tpl.php
@@ -0,0 +1,82 @@
+
+ * Copyright (C) 2013 Juanjo Menent
+ * Copyright (C) 2014 Marcos García
+ * Copyright (C) 2013-2020 Charlene BENKE
+ *
+ * This 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 .
+ */
+
+// Protection to avoid direct call of template
+if (empty($conf) || !is_object($conf)) {
+ print "Error, template page can't be called as URL";
+ exit;
+}
+
+print "\n";
+
+global $user, $db;
+global $noMoreLinkedObjectBlockAfter;
+
+$langs = $GLOBALS['langs'];
+$linkedObjectBlock = $GLOBALS['linkedObjectBlock'];
+
+// Load translation files required by the page
+$langs->load("bom");
+
+$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc', 0, 0, 1);
+
+$total = 0;
+$ilink = 0;
+foreach ($linkedObjectBlock as $key => $objectlink) {
+ $ilink++;
+ $product_static = new Product($db);
+ $trclass = 'oddeven';
+ if ($ilink == count($linkedObjectBlock) && empty($noMoreLinkedObjectBlockAfter) && count($linkedObjectBlock) <= 1) {
+ $trclass .= ' liste_sub_total';
+ }
+ echo '
';
// We use dolibarr_details as type of DolEditor here, because we must not accept images as description is included into PDF and not accepted by TCPDF.
- $doleditor = new DolEditor('note_private', GETPOST('note_private', 'restricthtml'), '', 140, 'dolibarr_details', '', false, true, $conf->global->FCKEDITOR_ENABLE_PRODUCTDESC, ROWS_8, '90%');
+ $doleditor = new DolEditor('note_private', GETPOST('note_private', 'restricthtml'), '', 140, 'dolibarr_details', '', false, true, getDolGlobalString('FCKEDITOR_ENABLE_PRODUCTDESC'), ROWS_8, '90%');
$doleditor->Create();
print "
";
//}
- if ($conf->categorie->enabled) {
+ if (!empty($conf->categorie->enabled)) {
// Categories
print '
';
}
}
diff --git a/htdocs/product/stock/movement_list.php b/htdocs/product/stock/movement_list.php
index 3a162cc640f..6601edd5e10 100644
--- a/htdocs/product/stock/movement_list.php
+++ b/htdocs/product/stock/movement_list.php
@@ -548,7 +548,7 @@ if (!empty($search_user)) {
if (!empty($search_batch)) {
$sql .= natural_search('m.batch', $search_batch);
}
-if (!empty($product_id)) {
+if (!empty($product_id) && $product_id != '-1') {
$sql .= natural_search('p.rowid', $product_id);
}
if (!empty($search_fk_projet) && $search_fk_projet != '-1') {
@@ -579,7 +579,7 @@ if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) {
while ($db->fetch_object($resql)) {
$nbtotalofrecords++;
}*/
- /* This fast and low memory method to get and count full list converts the sql into a sql count */
+ /* The fast and low memory method to get and count full list converts the sql into a sql count */
$sqlforcount = preg_replace('/^SELECT[a-z0-9\._\s\(\),]+FROM/i', 'SELECT COUNT(*) as nbtotalofrecords FROM', $sql);
$resql = $db->query($sqlforcount);
$objforcount = $db->fetch_object($resql);
@@ -654,7 +654,7 @@ if ($object->id > 0) {
$morehtmlref .= ' '.img_picto('', 'project').' '.$langs->trans('Project').' ';
if ($usercancreate && 1 == 2) {
if ($action != 'classify') {
- $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' : ';
+ $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' : ';
}
if ($action == 'classify') {
$projectid = $object->fk_project;
@@ -864,6 +864,7 @@ include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php';
// List of mass actions available
$arrayofmassactions = array(
+ 'generate_doc'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("ReGeneratePDF"),
// 'presend'=>img_picto('', 'email', 'class="pictofixedwidth"').$langs->trans("SendByMail"),
// 'builddoc'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("PDFMerge"),
);
diff --git a/htdocs/product/stock/product.php b/htdocs/product/stock/product.php
index 0e4cf4b6a20..088ea16fcce 100644
--- a/htdocs/product/stock/product.php
+++ b/htdocs/product/stock/product.php
@@ -1105,7 +1105,7 @@ if (!$variants) {
print '';
// Disabled, because edition of stock content must use the "Correct stock menu".
// Do not use this, or data will be wrong (bad tracking of movement label, inventory code, ...
- //print 'id.'#'.$pdluo->id.'">';
+ //print 'id.'#'.$pdluo->id.'">';
//print img_edit().'';
}
print '';
@@ -1117,7 +1117,7 @@ if (!$variants) {
print '';
// Disabled, because edition of stock content must use the "Correct stock menu".
// Do not use this, or data will be wrong (bad tracking of movement label, inventory code, ...
- //print 'id.'#'.$pdluo->id.'">';
+ //print 'id.'#'.$pdluo->id.'">';
//print img_edit().'';
}
print '';
diff --git a/htdocs/product/stock/productlot_card.php b/htdocs/product/stock/productlot_card.php
index 7a75019c8d1..36e230b911d 100644
--- a/htdocs/product/stock/productlot_card.php
+++ b/htdocs/product/stock/productlot_card.php
@@ -532,12 +532,12 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
if (empty($reshook)) {
/*TODO if ($user->rights->stock->lire)
{
- print '
';
@@ -1697,18 +1737,18 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0) {
if ($task_time->fk_user == $user->id || in_array($task_time->fk_user, $childids) || $user->rights->projet->all->creer) {
if ($conf->MAIN_FEATURES_LEVEL >= 2) {
print ' ';
- print 'fk_task.'&action=splitline&lineid='.$task_time->rowid.$param.((empty($id) || $tab == 'timespent') ? '&tab=timespent' : '').'">';
+ print 'fk_task.'&action=splitline&token='.newToken().'&lineid='.$task_time->rowid.$param.((empty($id) || $tab == 'timespent') ? '&tab=timespent' : '').'">';
print img_split();
print '';
}
print ' ';
- print 'fk_task.'&action=editline&lineid='.$task_time->rowid.$param.((empty($id) || $tab == 'timespent') ? '&tab=timespent' : '').'">';
+ print 'fk_task.'&action=editline&token='.newToken().'&lineid='.$task_time->rowid.$param.((empty($id) || $tab == 'timespent') ? '&tab=timespent' : '').'">';
print img_edit();
print '';
print ' ';
- print 'fk_task.'&action=deleteline&token='.newToken().'&lineid='.$task_time->rowid.$param.((empty($id) || $tab == 'timespent') ? '&tab=timespent' : '').'">';
+ print 'fk_task.'&action=deleteline&token='.newToken().'&lineid='.$task_time->rowid.$param.((empty($id) || $tab == 'timespent') ? '&tab=timespent' : '').'">';
print img_delete('default', 'class="pictodelete paddingleft"');
print '';
diff --git a/htdocs/public/cron/cron_run_jobs_by_url.php b/htdocs/public/cron/cron_run_jobs_by_url.php
index 133c5d1b18a..9369a9d78a7 100644
--- a/htdocs/public/cron/cron_run_jobs_by_url.php
+++ b/htdocs/public/cron/cron_run_jobs_by_url.php
@@ -67,6 +67,10 @@ global $langs, $conf;
// Language Management
$langs->loadLangs(array("admin", "cron", "dict"));
+// Security check
+if (empty($conf->cron->enabled)) {
+ accessforbidden('', 0, 0, 1);
+}
diff --git a/htdocs/public/cron/index.html b/htdocs/public/cron/index.html
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/htdocs/public/cron/index.php b/htdocs/public/cron/index.php
new file mode 100644
index 00000000000..a62d2d1ba68
--- /dev/null
+++ b/htdocs/public/cron/index.php
@@ -0,0 +1,27 @@
+
+ *
+ * This 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 .
+ */
+
+/**
+ * \file htdocs/public/cron/index.php
+ * \ingroup core
+ * \brief A redirect page to an error
+ */
+
+require '../../master.inc.php';
+
+header("Location: ".DOL_URL_ROOT.'/public/error-404.php');
+exit;
diff --git a/htdocs/public/eventorganization/attendee_subscription.php b/htdocs/public/eventorganization/attendee_register.php
similarity index 54%
rename from htdocs/public/eventorganization/attendee_subscription.php
rename to htdocs/public/eventorganization/attendee_register.php
index afdfdb9f806..a454f214316 100644
--- a/htdocs/public/eventorganization/attendee_subscription.php
+++ b/htdocs/public/eventorganization/attendee_register.php
@@ -16,9 +16,9 @@
*/
/**
- * \file htdocs/public/members/new.php
- * \ingroup member
- * \brief Example of form to add a new member
+ * \file htdocs/public/eventorganization/attendee_register.php
+ * \ingroup project
+ * \brief Example of form to subscribe to an event
*
* Note that you can add following constant to change behaviour of page
* MEMBER_NEWFORM_AMOUNT Default amount for auto-subscribe form
@@ -64,40 +64,57 @@ require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/paymentterm.class.php';
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
+require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
global $dolibarr_main_instance_unique_id;
global $dolibarr_main_url_root;
// Init vars
$errmsg = '';
-$num = 0;
$error = 0;
$backtopage = GETPOST('backtopage', 'alpha');
$action = GETPOST('action', 'aZ09');
$email = GETPOST("email");
$societe = GETPOST("societe");
+$emailcompany = GETPOST("emailcompany");
+$note_public = GETPOST('note_public', "nohtml");
// Getting id from Post and decoding it
-$id = GETPOST('id');
-
-$conference = new ConferenceOrBooth($db);
-$resultconf = $conference->fetch($id);
-if ($resultconf < 0) {
- setEventMessages(null, $conference->errors, "errors");
+$type = GETPOST('type', 'aZ09');
+if ($type == 'conf') {
+ $id = GETPOST('id', 'int');
+} else {
+ $id = GETPOST('fk_project', 'int') ? GETPOST('fk_project', 'int') : GETPOST('id', 'int');
}
+$conference = new ConferenceOrBooth($db);
$project = new Project($db);
-$resultproject = $project->fetch($conference->fk_project);
-if ($resultproject < 0) {
- $error++;
- $errmsg .= $project->error;
+
+if ($type == 'conf') {
+ $resultconf = $conference->fetch($id);
+ if ($resultconf < 0) {
+ print 'Bad value for parameter id';
+ exit;
+ }
+ $resultproject = $project->fetch($conference->fk_project);
+ if ($resultproject < 0) {
+ $error++;
+ $errmsg .= $project->error;
+ }
+}
+if ($type == 'global') {
+ $resultproject = $project->fetch($id);
+ if ($resultproject < 0) {
+ $error++;
+ $errmsg .= $project->error;
+ }
}
// Security check
$securekeyreceived = GETPOST('securekey', 'alpha');
-$securekeytocompare = dol_hash($conf->global->EVENTORGANIZATION_SECUREKEY.'conferenceorbooth'.$id, 2);
+$securekeytocompare = dol_hash($conf->global->EVENTORGANIZATION_SECUREKEY.'conferenceorbooth'.$id, 'md5');
// We check if the securekey collected is OK
if ($securekeytocompare != $securekeyreceived) {
@@ -196,7 +213,7 @@ function llxFooterVierge()
/*
* Actions
*/
-global $mysoc;
+
$parameters = array();
// Note that $action and $object may have been modified by some hooks
$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action);
@@ -205,7 +222,7 @@ if ($reshook < 0) {
}
// Action called when page is submitted
-if (empty($reshook) && $action == 'add' && $conference->status==2) {
+if (empty($reshook) && $action == 'add' && (!empty($conference->id) && $conference->status!=2 || !empty($project->id) && $project->status == Project::STATUS_VALIDATED)) {
$error = 0;
$urlback = '';
@@ -219,7 +236,7 @@ if (empty($reshook) && $action == 'add' && $conference->status==2) {
// If the price has been set, name is required for the invoice
if (!GETPOST("societe") && !empty(floatval($project->price_registration))) {
$error++;
- $errmsg .= $langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Societe"))." \n";
+ $errmsg .= $langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Company"))." \n";
}
if (GETPOST("email") && !isValidEmail(GETPOST("email"))) {
$error++;
@@ -234,70 +251,170 @@ if (empty($reshook) && $action == 'add' && $conference->status==2) {
if (!$error) {
// Check if attendee already exists (by email and for this event)
$confattendee = new ConferenceOrBoothAttendee($db);
- $resultfetchconfattendee = $confattendee->fetchAll('', '', 0, 0, array('t.fk_actioncomm'=>$id, 'customsql'=>'t.email="'.$email.'"'));
- if ($resultfetchconfattendee > 0 && count($resultfetchconfattendee)>0) {
+
+ if ($type == 'global') {
+ $filter = array('t.fk_project'=>((int) $id), 'customsql'=>'t.email="'.$db->escape($email).'"');
+ }
+ if ($action == 'conf') {
+ $filter = array('t.fk_actioncomm'=>((int) $id), 'customsql'=>'t.email="'.$db->escape($email).'"');
+ }
+
+ // Check if there is already an attendee into table eventorganization_conferenceorboothattendee for same event (or conference/booth)
+ $resultfetchconfattendee = $confattendee->fetchAll('', '', 0, 0, $filter);
+
+ if (is_array($resultfetchconfattendee) && count($resultfetchconfattendee) > 0) {
// Found confattendee
$confattendee = array_shift($resultfetchconfattendee);
} else {
// Need to create a confattendee
- $confattendee->date_subscription = dol_now();
+ $confattendee->date_creation = dol_now();
$confattendee->email = $email;
+ $confattendee->fk_project = $project->id;
$confattendee->fk_actioncomm = $id;
+ $confattendee->note_public = $note_public;
$resultconfattendee = $confattendee->create($user);
if ($resultconfattendee < 0) {
$error++;
$errmsg .= $confattendee->error;
}
}
- // At this point, we have an attendee. It may not be linked to a thirdparty if we just created it
- // If the attendee has already paid
- if ($confattendee->status == 1) {
- $securekeyurl = dol_hash($conf->global->EVENTORGANIZATION_SECUREKEY.'conferenceorbooth'.$id, 2);
- $redirection = $dolibarr_main_url_root.'/public/eventorganization/subscriptionok.php?id='.$id.'&securekey='.$securekeyurl;
+ // At this point, we have an existing $confattendee. It may not be linked to a thirdparty.
+ //var_dump($confattendee);
+
+ // If the registration has already been paid for this attendee
+ if (!empty($confattendee->date_subscription) && !empty($confattendee->amount)) {
+ $securekeyurl = dol_hash($conf->global->EVENTORGANIZATION_SECUREKEY.'conferenceorbooth'.$id, 'master');
+ $redirection = $dolibarr_main_url_root.'/public/eventorganization/subscriptionok.php?id='.((int) $id).'&securekey='.urlencode($securekeyurl);
+
+ $mesg = $langs->trans("RegistrationAndPaymentWereAlreadyRecorder", $email);
+ setEventMessages($mesg, null, 'mesgs');
+
+ $db->commit();
+
Header("Location: ".$redirection);
exit;
}
+
+ $resultfetchthirdparty = 0;
+
+ $genericcompanyname = $langs->trans('EventParticipant').' '.($emailcompany ? $emailcompany : $email); // Keep this label simple so we can retreive same thirdparty for another event
+
// Getting the thirdparty or creating it
$thirdparty = new Societe($db);
- // Fetch using fk_soc if the attendee was already existing
- if (!empty($confattendee->fk_soc)) {
+ $contact = new Contact($db);
+ // Fetch using fk_soc if the attendee was already found
+ if (!empty($confattendee->fk_soc) && $confattendee->fk_soc > 0) {
$resultfetchthirdparty = $thirdparty->fetch($confattendee->fk_soc);
} else {
- // Fetch using the input field by user if we just created the attendee
- if (!empty($societe)) {
- $resultfetchthirdparty = $thirdparty->fetch('', $societe);
- if ($resultfetchthirdparty<=0) {
- // Need to create a new one (not found or multiple with the same name)
- $resultfetchthirdparty = 0;
- } else {
- // We found an unique result with that name, so we put in in fk_soc of attendee
+ if (empty($conf->global->EVENTORGANIZATION_DISABLE_RETREIVE_THIRDPARTY_FROM_NAME)) {
+ // Fetch using the field input by end user if we have just created the attendee
+ if ($resultfetchthirdparty <= 0 && !empty($societe) && !empty($emailcompany)) {
+ $resultfetchthirdparty = $thirdparty->fetch('', $societe, '', '', '', '', '', '', '', '', $emailcompany);
+ if ($resultfetchthirdparty > 0) {
+ // We found a unique result with the name + emailcompany, so we set the fk_soc of attendee
+ $confattendee->fk_soc = $thirdparty->id;
+ $confattendee->update($user);
+ } elseif ($resultfetchthirdparty == -2) {
+ $thirdparty->error = $langs->trans("ErrorSeveralCompaniesWithNameContactUs", $mysoc->email);
+ }
+ }
+ // Fetch using the field input by end user if we have just created the attendee
+ if ($resultfetchthirdparty <= 0 && !empty($societe) && !empty($email) && $email != $emailcompany) {
+ $resultfetchthirdparty = $thirdparty->fetch('', $societe, '', '', '', '', '', '', '', '', $email);
+ if ($resultfetchthirdparty > 0) {
+ // We found a unique result with the name + email, so we set the fk_soc of attendee
+ $confattendee->fk_soc = $thirdparty->id;
+ $confattendee->update($user);
+ } elseif ($resultfetchthirdparty == -2) {
+ $thirdparty->error = $langs->trans("ErrorSeveralCompaniesWithNameContactUs", $mysoc->email);
+ }
+ }
+ }
+ if ($resultfetchthirdparty <= 0 && !empty($emailcompany)) {
+ // Try to find thirdparty from the email only
+ $resultfetchthirdparty = $thirdparty->fetch('', '', '', '', '', '', '', '', '', '', $emailcompany);
+ if ($resultfetchthirdparty > 0) {
+ // We found a unique result with that email only, so we set the fk_soc of attendee
$confattendee->fk_soc = $thirdparty->id;
$confattendee->update($user);
+ } elseif ($resultfetchthirdparty == -2) {
+ $thirdparty->error = $langs->trans("ErrorSeveralCompaniesWithEmailContactUs", $mysoc->email);
+ }
+ }
+ if ($resultfetchthirdparty <= 0 && !empty($email) && $email != $emailcompany) {
+ // Try to find thirdparty from the email only
+ $resultfetchthirdparty = $thirdparty->fetch('', '', '', '', '', '', '', '', '', '', $email);
+ if ($resultfetchthirdparty > 0) {
+ // We found a unique result with that email only, so we set the fk_soc of attendee
+ $confattendee->fk_soc = $thirdparty->id;
+ $confattendee->update($user);
+ } elseif ($resultfetchthirdparty == -2) {
+ $thirdparty->error = $langs->trans("ErrorSeveralCompaniesWithEmailContactUs", $mysoc->email);
+ }
+ }
+ if ($resultfetchthirdparty <= 0 && !empty($genericcompanyname)) {
+ // Try to find thirdparty from the generic mail only
+ $resultfetchthirdparty = $thirdparty->fetch('', $genericcompanyname, '', '', '', '', '', '', '', '', '');
+ if ($resultfetchthirdparty > 0) {
+ // We found a unique result with that name + email, so we set the fk_soc of attendee
+ $confattendee->fk_soc = $thirdparty->id;
+ $confattendee->update($user);
+ } elseif ($resultfetchthirdparty == -2) {
+ $thirdparty->error = $langs->trans("ErrorSeveralCompaniesWithNameContactUs", $mysoc->email);
+ }
+ }
+
+ // TODO Add more tests on a VAT number, profid or a name ?
+
+ if ($resultfetchthirdparty <= 0 && !empty($email)) {
+ // Try to find the thirdparty from the contact
+ $resultfetchcontact = $contact->fetch('', null, '', $email);
+ if ($resultfetchcontact > 0 && $contact->fk_soc > 0) {
+ $thirdparty->fetch($contact->fk_soc);
+ $confattendee->fk_soc = $thirdparty->id;
+ $confattendee->update($user);
+ $resultfetchthirdparty = 1;
+ }
+ }
+
+ if ($resultfetchthirdparty <= 0 && !empty($societe)) {
+ // Try to find thirdparty from the company name only
+ $resultfetchthirdparty = $thirdparty->fetch('', $societe, '', '', '', '', '', '', '', '', '');
+ if ($resultfetchthirdparty > 0) {
+ // We found a unique result with that name only, so we set the fk_soc of attendee
+ $confattendee->fk_soc = $thirdparty->id;
+ $confattendee->update($user);
+ } elseif ($resultfetchthirdparty == -2) {
+ $thirdparty->error = "ErrorSeveralCompaniesWithNameContactUs";
}
- } else {
- // Need to create a thirdparty (put number>0 if we do not want to create a thirdparty for free-conferences)
- $resultfetchthirdparty = 0;
}
}
- if ($resultfetchthirdparty<0) {
+
+ // If price is empty, no need to create a thirdparty, so we force $resultfetchthirdparty as if we have already found thirdp party.
+ if (empty(floatval($project->price_registration))) {
+ $resultfetchthirdparty = 1;
+ }
+
+ if ($resultfetchthirdparty < 0) {
+ // If an error was found
$error++;
$errmsg .= $thirdparty->error;
- } elseif ($resultfetchthirdparty==0) {
- // creation of a new thirdparty
+ } elseif ($resultfetchthirdparty == 0) { // No thirdparty found + a payment is expected
+ // Creation of a new thirdparty
if (!empty($societe)) {
$thirdparty->name = $societe;
} else {
- $thirdparty->name = $email;
+ $thirdparty->name = $genericcompanyname;
}
$thirdparty->address = GETPOST("address");
$thirdparty->zip = GETPOST("zipcode");
$thirdparty->town = GETPOST("town");
- $thirdparty->client = 2;
+ $thirdparty->client = $thirdparty::PROSPECT;
$thirdparty->fournisseur = 0;
$thirdparty->country_id = GETPOST("country_id", 'int');
$thirdparty->state_id = GETPOST("state_id", 'int');
- $thirdparty->email = $email;
+ $thirdparty->email = ($emailcompany ? $emailcompany : $email);
// Load object modCodeTiers
$module = (!empty($conf->global->SOCIETE_CODECLIENT_ADDON) ? $conf->global->SOCIETE_CODECLIENT_ADDON : 'mod_codeclient_leopard');
@@ -318,12 +435,14 @@ if (empty($reshook) && $action == 'add' && $conference->status==2) {
}
$thirdparty->code_client = $tmpcode;
$readythirdparty = $thirdparty->create($user);
- if ($readythirdparty <0) {
+ if ($readythirdparty < 0) {
$error++;
$errmsg .= $thirdparty->error;
} else {
$thirdparty->country_code = getCountry($thirdparty->country_id, 2, $db, $langs);
$thirdparty->country = getCountry($thirdparty->country_code, 0, $db, $langs);
+
+ // Update attendee country to match country of thirdparty
$confattendee->fk_soc = $thirdparty->id;
$confattendee->update($user);
}
@@ -331,66 +450,111 @@ if (empty($reshook) && $action == 'add' && $conference->status==2) {
}
if (!$error) {
- $db->commit();
+ // If the registration needs a payment
if (!empty(floatval($project->price_registration))) {
+ $outputlangs = $langs;
+
+ // TODO Use default language of $thirdparty->default_lang to build $outputlang
+
+ // Get product to use for invoice
$productforinvoicerow = new Product($db);
- $resultprod = $productforinvoicerow->fetch($conf->global->SERVICE_CONFERENCE_ATTENDEE_SUBSCRIPTION);
+ $productforinvoicerow->id = 0;
+
+ $resultprod = 0;
+ if ($conf->global->SERVICE_CONFERENCE_ATTENDEE_SUBSCRIPTION > 0) {
+ $resultprod = $productforinvoicerow->fetch($conf->global->SERVICE_CONFERENCE_ATTENDEE_SUBSCRIPTION);
+ }
+
+ // Create invoice
if ($resultprod < 0) {
$error++;
$errmsg .= $productforinvoicerow->error;
} else {
$facture = new Facture($db);
- $facture->type = Facture::TYPE_STANDARD;
- $facture->socid = $thirdparty->id;
- $facture->paye = 0;
- $facture->date = dol_now();
- $facture->cond_reglement_id = $confattendee->cond_reglement_id;
- $facture->fk_project = $project->id;
- if (empty($facture->cond_reglement_id)) {
- $paymenttermstatic = new PaymentTerm($confattendee->db);
- $facture->cond_reglement_id = $paymenttermstatic->getDefaultId();
+ if (empty($confattendee->fk_invoice)) {
+ $facture->type = Facture::TYPE_STANDARD;
+ $facture->socid = $thirdparty->id;
+ $facture->paye = 0;
+ $facture->date = dol_now();
+ $facture->cond_reglement_id = $confattendee->cond_reglement_id;
+ $facture->fk_project = $project->id;
+ $facture->status = Facture::STATUS_DRAFT;
+
if (empty($facture->cond_reglement_id)) {
- $error++;
- $confattendee->error = 'ErrorNoPaymentTermRECEPFound';
- $confattendee->errors[] = $confattendee->error;
+ $paymenttermstatic = new PaymentTerm($confattendee->db);
+ $facture->cond_reglement_id = $paymenttermstatic->getDefaultId();
+ if (empty($facture->cond_reglement_id)) {
+ $error++;
+ $confattendee->error = 'ErrorNoPaymentTermRECEPFound';
+ $confattendee->errors[] = $confattendee->error;
+ }
+ }
+ $resultfacture = $facture->create($user);
+ if ($resultfacture <= 0) {
+ $confattendee->error = $facture->error;
+ $confattendee->errors = $facture->errors;
+ $error++;
+ } else {
+ $confattendee->fk_invoice = $resultfacture;
+ $confattendee->update($user);
}
- }
- $resultfacture = $facture->create($user);
- if ($resultfacture <= 0) {
- $confattendee->error = $facture->error;
- $confattendee->errors = $facture->errors;
- $error++;
} else {
- $facture->add_object_linked($confattendee->element, $confattendee->id);
+ $facture->fetch($confattendee->fk_invoice);
}
+
+ // Add link between invoice and the attendee registration
+ /*if (!$error) {
+ $facture->add_object_linked($confattendee->element, $confattendee->id);
+ }*/
}
if (!$error) {
// Add line to draft invoice
$vattouse = get_default_tva($mysoc, $thirdparty, $productforinvoicerow->id);
- $result = $facture->addline($langs->trans("ConferenceAttendeeFee", $conference->label, dol_print_date($conference->datep, '%d/%m/%y %H:%M:%S'), dol_print_date($conference->datep2, '%d/%m/%y %H:%M:%S')), floatval($project->price_registration), 1, $vattouse, 0, 0, $productforinvoicerow->id, 0, dol_now(), '', 0, 0, '', 'HT', 0, 1);
- if ($result <= 0) {
- $confattendee->error = $facture->error;
- $confattendee->errors = $facture->errors;
- $error++;
- }
- if (!$error) {
- $valid = true;
- $sourcetouse = 'conferencesubscription';
- $reftouse = $facture->id;
- $redirection = $dolibarr_main_url_root.'/public/payment/newpayment.php?source='.$sourcetouse.'&ref='.$reftouse;
- if (!empty($conf->global->PAYMENT_SECURITY_TOKEN)) {
- if (!empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE)) {
- $redirection .= '&securekey='.dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . $sourcetouse . $reftouse, 2); // Use the source in the hash to avoid duplicates if the references are identical
- } else {
- $redirection .= '&securekey='.$conf->global->PAYMENT_SECURITY_TOKEN;
- }
+
+ $labelforproduct = $outputlangs->trans("EventFee", $project->title);
+ $date_start = $project->date_start;
+ $date_end = $project->date_end;
+
+ // If there is no lines yet, we add one
+ if (empty($facture->lines)) {
+ $result = $facture->addline($labelforproduct, floatval($project->price_registration), 1, $vattouse, 0, 0, $productforinvoicerow->id, 0, $date_start, $date_end, 0, 0, '', 'HT', 0, 1);
+ if ($result <= 0) {
+ $confattendee->error = $facture->error;
+ $confattendee->errors = $facture->errors;
+ $error++;
}
- Header("Location: ".$redirection);
- exit;
}
}
+
+ if (!$error) {
+ $db->commit();
+
+ // Registration was recorded and invoice was generated, but payment not yet done.
+ // TODO
+ // Send an email to says registration shas been received and that we are waiting for the payment.
+ // Should send email template (EventOrganizationEmailRegistrationEvent) saved into conf EVENTORGANIZATION_TEMPLATE_EMAIL_REGISTRATION_EVENT.
+
+ // Now we redirect to the payment page
+ $sourcetouse = 'organizedeventregistration';
+ $reftouse = $facture->id;
+ $redirection = $dolibarr_main_url_root.'/public/payment/newpayment.php?source='.urlencode($sourcetouse).'&ref='.urlencode($reftouse);
+ if (!empty($conf->global->PAYMENT_SECURITY_TOKEN)) {
+ if (!empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE)) {
+ $redirection .= '&securekey='.dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . $sourcetouse . $reftouse, 2); // Use the source in the hash to avoid duplicates if the references are identical
+ } else {
+ $redirection .= '&securekey='.urlencode($conf->global->PAYMENT_SECURITY_TOKEN);
+ }
+ }
+
+ Header("Location: ".$redirection);
+ exit;
+ } else {
+ $db->rollback();
+ }
} else {
+ $db->commit();
+
// No price has been set
// Validating the subscription
$confattendee->setStatut(1);
@@ -439,7 +603,8 @@ if (empty($reshook) && $action == 'add' && $conference->status==2) {
}
$securekeyurl = dol_hash($conf->global->EVENTORGANIZATION_SECUREKEY.'conferenceorbooth'.$id, 2);
- $redirection = $dolibarr_main_url_root.'/public/eventorganization/subscriptionok.php?id='.$id.'&securekey='.$securekeyurl;
+ $redirection = $dolibarr_main_url_root.'/public/eventorganization/subscriptionok.php?id='.((int) $id).'&securekey='.urlencode($securekeyurl);
+
Header("Location: ".$redirection);
exit;
}
@@ -458,10 +623,10 @@ if (empty($reshook) && $action == 'add' && $conference->status==2) {
$form = new Form($db);
$formcompany = new FormCompany($db);
-llxHeaderVierge($langs->trans("NewSubscription"));
+llxHeaderVierge($langs->trans("NewRegistration"));
-
-print load_fiche_titre($langs->trans("NewSubscription"), '', '', 0, 0, 'center');
+print ' ';
+print load_fiche_titre($langs->trans("NewRegistration"), '', '', 0, 0, 'center');
print '
'."\n";
- // Add specific fields used by Dolibarr foundation for example
+// Add specific fields used by Dolibarr foundation for example
+// TODO Move this into generic feature.
if (!empty($conf->global->MEMBER_NEWFORM_DOLIBARRTURNOVER)) {
$arraybudget = array('50'=>'<= 100 000', '100'=>'<= 200 000', '200'=>'<= 500 000', '300'=>'<= 1 500 000', '600'=>'<= 3 000 000', '1000'=>'<= 5 000 000', '2000'=>'5 000 000+');
print '
';
diff --git a/htdocs/public/notice.php b/htdocs/public/notice.php
index c41bf81bea4..d5ac4070ff0 100644
--- a/htdocs/public/notice.php
+++ b/htdocs/public/notice.php
@@ -1,5 +1,5 @@
+/* Copyright (C) 2016-2021 Laurent Destailleur
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,10 +17,10 @@
/**
* \file htdocs/public/notice.php
- * \brief Dolibarr page to show a notice.
- * Default notice is a message to say network connection is off or show another message.
- * You can also call this page with URL:
- * /public/notice.php?lang=xx_XX&transkey=translation_key (key must be inside file main.lang, error.lang or other.lang)
+ * \brief Dolibarr public page to show a notice.
+ * Default notice is a message to say network connection is off. Some parameters can be used to show another message.
+ * You can call this page with URL:
+ * /public/notice.php?lang=xx_XX&transkey=translation_key (key must be inside file main.lang, error.lang or other.lang)
* /public/notice.php?transphrase=url_encoded_sentence_to_show
*/
diff --git a/htdocs/public/opensurvey/studs.php b/htdocs/public/opensurvey/studs.php
index 8b6da7e0b75..7be05684fd2 100644
--- a/htdocs/public/opensurvey/studs.php
+++ b/htdocs/public/opensurvey/studs.php
@@ -165,7 +165,9 @@ if (GETPOST("boutonp") || GETPOST("boutonp.x") || GETPOST("boutonp_x")) { // bo
$application = ($conf->global->MAIN_APPLICATION_TITLE ? $conf->global->MAIN_APPLICATION_TITLE : 'Dolibarr ERP/CRM');
- $body = str_replace('\n', ' ', $langs->transnoentities('EmailSomeoneVoted', $nom, getUrlSondage($numsondage, true)));
+ $link = getUrlSondage($numsondage, true);
+ $link = ''.$link.'';
+ $body = str_replace('\n', ' ', $langs->transnoentities('EmailSomeoneVoted', $nom, $link));
//var_dump($body);exit;
$cmailfile = new CMailFile("[".$application."] ".$langs->trans("Poll").': '.$object->title, $email, $conf->global->MAIN_MAIL_EMAIL_FROM, $body, null, null, null, '', '', 0, -1);
@@ -272,7 +274,13 @@ $toutsujet = str_replace("°", "'", $toutsujet);
print '
'."\n";
diff --git a/htdocs/public/payment/paymentok.php b/htdocs/public/payment/paymentok.php
index f39d6735dad..70a684f5932 100644
--- a/htdocs/public/payment/paymentok.php
+++ b/htdocs/public/payment/paymentok.php
@@ -23,9 +23,10 @@
/**
* \file htdocs/public/payment/paymentok.php
* \ingroup core
- * \brief File to show page after a successful payment
+ * \brief File to show page after a successful payment on a payment line system.
+ * The payment was already really recorded. So an error here must send warning to admin but must still infor user that payment is ok.
* This page is called by payment system with url provided to it completed with parameter TOKEN=xxx
- * This token can be used to get more informations.
+ * This token and session can be used to get more informations.
*/
if (!defined('NOLOGIN')) {
@@ -804,7 +805,7 @@ if ($ispaymentok) {
$ispostactionok = 1;
}
} else {
- $postactionmessages[] = 'Setup of bank account to use in module '.$paymentmethod.' was not set. No way to record the payment.';
+ $postactionmessages[] = 'Setup of bank account to use in module '.$paymentmethod.' was not set. Your payment was really executed but we failed to record it. Please contact us.';
$ispostactionok = -1;
$error++;
}
@@ -1015,7 +1016,7 @@ if ($ispaymentok) {
$ispostactionok = 1;
}
} else {
- $postactionmessages[] = 'Setup of bank account to use in module '.$paymentmethod.' was not set. No way to record the payment.';
+ $postactionmessages[] = 'Setup of bank account to use in module '.$paymentmethod.' was not set. Your payment was really executed but we failed to record it. Please contact us.';
$ispostactionok = -1;
$error++;
}
@@ -1036,9 +1037,9 @@ if ($ispaymentok) {
}
// TODO send email with acknowledgment for the donation
- // (need that the donation module can gen a pdf document for the cerfa with pre filled content)
+ // (we need first that the donation module is able to generate a pdf document for the cerfa with pre filled content)
} elseif (array_key_exists('ATT', $tmptag) && $tmptag['ATT'] > 0) {
- // Record payment for attendee
+ // Record payment for registration to an event for an attendee
include_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
$object = new Facture($db);
$result = $object->fetch($ref);
@@ -1090,7 +1091,7 @@ if ($ispaymentok) {
}
$paiement->paiementid = $paymentTypeId;
$paiement->num_payment = '';
- $paiement->note_public = 'Online payment '.dol_print_date($now, 'standard').' from '.$ipaddress;
+ $paiement->note_public = 'Online payment '.dol_print_date($now, 'standard').' from '.$ipaddress.' for event registration';
$paiement->ext_payment_id = $TRANSACTIONID;
$paiement->ext_payment_site = $service;
@@ -1131,77 +1132,86 @@ if ($ispaymentok) {
$ispostactionok = 1;
}
} else {
- $postactionmessages[] = 'Setup of bank account to use in module '.$paymentmethod.' was not set. No way to record the payment.';
+ $postactionmessages[] = 'Setup of bank account to use in module '.$paymentmethod.' was not set. Your payment was really executed but we failed to record it. Please contact us.';
$ispostactionok = -1;
$error++;
}
}
if (!$error) {
- $db->commit();
-
// Validating the attendee
$attendeetovalidate = new ConferenceOrBoothAttendee($db);
$resultattendee = $attendeetovalidate->fetch($tmptag['ATT']);
if ($resultattendee < 0) {
+ $error++;
setEventMessages(null, $attendeetovalidate->errors, "errors");
} else {
- $attendeetovalidate->amount=$FinalPaymentAmt;
- $attendeetovalidate->update($user);
$attendeetovalidate->validate($user);
- // Sending mail
- $thirdparty = new Societe($db);
- $resultthirdparty = $thirdparty->fetch($attendeetovalidate->fk_soc);
- if ($resultthirdparty < 0) {
- setEventMessages(null, $attendeetovalidate->errors, "errors");
+ $attendeetovalidate->amount = $FinalPaymentAmt;
+ $attendeetovalidate->date_subscription = dol_now();
+ $attendeetovalidate->update($user);
+ }
+ }
+
+ if (!$error) {
+ $db->commit();
+ } else {
+ setEventMessages(null, $postactionmessages, 'warnings');
+
+ $db->rollback();
+ }
+
+ if (! $error) {
+ // Sending mail
+ $thirdparty = new Societe($db);
+ $resultthirdparty = $thirdparty->fetch($attendeetovalidate->fk_soc);
+ if ($resultthirdparty < 0) {
+ setEventMessages(null, $attendeetovalidate->errors, "errors");
+ } else {
+ require_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php';
+ include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php';
+ $formmail = new FormMail($db);
+ // Set output language
+ $outputlangs = new Translate('', $conf);
+ $outputlangs->setDefaultLang(empty($thirdparty->default_lang) ? $mysoc->default_lang : $thirdparty->default_lang);
+ // Load traductions files required by page
+ $outputlangs->loadLangs(array("main", "members"));
+ // Get email content from template
+ $arraydefaultmessage = null;
+
+ $labeltouse = $conf->global->EVENTORGANIZATION_TEMPLATE_EMAIL_AFT_SUBS_EVENT;
+
+ if (!empty($labeltouse)) {
+ $arraydefaultmessage = $formmail->getEMailTemplate($db, 'conferenceorbooth', $user, $outputlangs, $labeltouse, 1, '');
+ }
+
+ if (!empty($labeltouse) && is_object($arraydefaultmessage) && $arraydefaultmessage->id > 0) {
+ $subject = $arraydefaultmessage->topic;
+ $msg = $arraydefaultmessage->content;
+ }
+
+ $substitutionarray = getCommonSubstitutionArray($outputlangs, 0, null, $thirdparty);
+ complete_substitutions_array($substitutionarray, $outputlangs, $object);
+
+ $subjecttosend = make_substitutions($subject, $substitutionarray, $outputlangs);
+ $texttosend = make_substitutions($msg, $substitutionarray, $outputlangs);
+
+ $sendto = $attendeetovalidate->email;
+ $from = $conf->global->MAILING_EMAIL_FROM;
+ $urlback = $_SERVER["REQUEST_URI"];
+
+ $ishtml = dol_textishtml($texttosend); // May contain urls
+
+ $mailfile = new CMailFile($subjecttosend, $sendto, $from, $texttosend, array(), array(), array(), '', '', 0, $ishtml);
+
+ $result = $mailfile->sendfile();
+ if ($result) {
+ dol_syslog("EMail sent to ".$sendto, LOG_DEBUG, 0, '_payment');
} else {
- require_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php';
- include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php';
- $formmail = new FormMail($db);
- // Set output language
- $outputlangs = new Translate('', $conf);
- $outputlangs->setDefaultLang(empty($thirdparty->default_lang) ? $mysoc->default_lang : $thirdparty->default_lang);
- // Load traductions files required by page
- $outputlangs->loadLangs(array("main", "members"));
- // Get email content from template
- $arraydefaultmessage = null;
-
- $labeltouse = $conf->global->EVENTORGANIZATION_TEMPLATE_EMAIL_AFT_SUBS_EVENT;
-
- if (!empty($labeltouse)) {
- $arraydefaultmessage = $formmail->getEMailTemplate($db, 'conferenceorbooth', $user, $outputlangs, $labeltouse, 1, '');
- }
-
- if (!empty($labeltouse) && is_object($arraydefaultmessage) && $arraydefaultmessage->id > 0) {
- $subject = $arraydefaultmessage->topic;
- $msg = $arraydefaultmessage->content;
- }
-
- $substitutionarray = getCommonSubstitutionArray($outputlangs, 0, null, $thirdparty);
- complete_substitutions_array($substitutionarray, $outputlangs, $object);
-
- $subjecttosend = make_substitutions($subject, $substitutionarray, $outputlangs);
- $texttosend = make_substitutions($msg, $substitutionarray, $outputlangs);
-
- $sendto = $attendeetovalidate->email;
- $from = $conf->global->MAILING_EMAIL_FROM;
- $urlback = $_SERVER["REQUEST_URI"];
-
- $ishtml = dol_textishtml($texttosend); // May contain urls
-
- $mailfile = new CMailFile($subjecttosend, $sendto, $from, $texttosend, array(), array(), array(), '', '', 0, $ishtml);
-
- $result = $mailfile->sendfile();
- if ($result) {
- dol_syslog("EMail sent to ".$sendto, LOG_DEBUG, 0, '_payment');
- } else {
- dol_syslog("Failed to send EMail to ".$sendto, LOG_ERR, 0, '_payment');
- }
+ dol_syslog("Failed to send EMail to ".$sendto, LOG_ERR, 0, '_payment');
}
}
- } else {
- $db->rollback();
}
}
} else {
@@ -1306,7 +1316,7 @@ if ($ispaymentok) {
$ispostactionok = 1;
}
} else {
- $postactionmessages[] = 'Setup of bank account to use in module '.$paymentmethod.' was not set. No way to record the payment.';
+ $postactionmessages[] = 'Setup of bank account to use in module '.$paymentmethod.' was not set. Your payment was really executed but we failed to record it. Please contact us.';
$ispostactionok = -1;
$error++;
}
@@ -1435,6 +1445,7 @@ if ($ispaymentok) {
$key = 'ONLINE_PAYMENT_MESSAGE_OK';
if (!empty($conf->global->$key)) {
+ print ' ';
print $conf->global->$key;
}
diff --git a/htdocs/public/project/index.php b/htdocs/public/project/index.php
index 70e546cdbd9..bb0f9005057 100644
--- a/htdocs/public/project/index.php
+++ b/htdocs/public/project/index.php
@@ -195,8 +195,8 @@ if (!empty($conf->global->PROJECT_IMAGE_PUBLIC_ORGANIZEDEVENT)) {
print '
\n";
if (!$i) {
$totalarray['nbfield']++;
@@ -930,7 +916,7 @@ while ($i < min($num, $limit)) {
// Third party
if (!empty($arrayfields['s.nom']['checked'])) {
- print '
';
+ print '
';
print $companystatic->getNomUrl(1);
print '
';
if (!$i) {
@@ -939,8 +925,8 @@ while ($i < min($num, $limit)) {
}
// Town
if (!empty($arrayfields['s.town']['checked'])) {
- print '