Merge branch 'Dolibarr:develop' into add-ticket-categories-functions

This commit is contained in:
evarisk-theo 2021-07-13 14:04:14 +02:00 committed by GitHub
commit f0599095ee
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1177 changed files with 8326 additions and 8857 deletions

View File

@ -2,6 +2,27 @@
English Dolibarr ChangeLog English Dolibarr ChangeLog
-------------------------------------------------------------- --------------------------------------------------------------
***** ChangeLog for 13.0.4 compared to 13.0.2 *****
FIX: Allow disabling of a module (not a dangerous action) even if there is problem with token (due to bugged modules).
FIX: 13.0 - fatal - missing inclusion of ajax.lib.php for calling `ajax_autocompleter()`
FIX: #17919 pictures in docs.
FIX: #18006
FIX: Accountancy - if we define a date start, automatic binding try to continue to solve old binding
FIX: Accoutancy Limit date payment not registered on purchases operations
FIX: Can't edit replacement invoice
FIX: deposit can create credit note in payment conf
FIX: division by zero on create
FIX: holiday: balances not updated correctly with pgsql because of case sensitivity field
FIX: holiday: status filter parameter has been renamed but not in links it was used
FIX: List and Create Companies Left Menus
FIX: method exists
FIX: need to add payment sum to getlibstatus function in object linked block
FIX: permission to close a proposal when using advanced permissions
FIX: Problem of z-index with popup and top menu
FIX: same thing on supplier orders
FIX: Status of invoice when making a replacement invoice
FIX: update contact birthday alert
***** ChangeLog for 14.0.0 compared to 13.0.0 ***** ***** ChangeLog for 14.0.0 compared to 13.0.0 *****

File diff suppressed because one or more lines are too long

View File

@ -99,14 +99,16 @@ print "<br>\n";
/** /**
* Edit parameters * Edit parameters
*/ */
print "\n".'<script type="text/javascript" language="javascript">'; if (!empty($conf->use_javascript_ajax)) {
print '$(document).ready(function () { print "\n".'<script type="text/javascript" language="javascript">';
print '$(document).ready(function () {
$("#selectcountry_id").change(function() { $("#selectcountry_id").change(function() {
document.form_index.action.value="updateedit"; document.form_index.action.value="updateedit";
document.form_index.submit(); document.form_index.submit();
}); });
});'; });';
print '</script>'."\n"; print '</script>'."\n";
}
print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'" name="form_index">'; print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'" name="form_index">';
print '<input type="hidden" name="token" value="'.newToken().'">'; print '<input type="hidden" name="token" value="'.newToken().'">';

View File

@ -384,21 +384,23 @@ print "<br>\n";
/** /**
* Edit parameters * Edit parameters
*/ */
print "\n".'<script type="text/javascript" language="javascript">'; if (!empty($conf->use_javascript_ajax)) {
print '$(document).ready(function () { print "\n".'<script type="text/javascript" language="javascript">';
print '$(document).ready(function () {
$("#selectcountry_id").change(function() { $("#selectcountry_id").change(function() {
document.form_index.action.value="updateedit"; document.form_index.action.value="updateedit";
document.form_index.submit(); document.form_index.submit();
}); });
});'; });';
print '</script>'."\n"; print '</script>'."\n";
}
print '<form enctype="multipart/form-data" method="POST" action="'.$_SERVER["PHP_SELF"].'" name="form_index">'; print '<form enctype="multipart/form-data" method="POST" action="'.$_SERVER["PHP_SELF"].'" name="form_index">';
print '<input type="hidden" name="token" value="'.newToken().'">'; print '<input type="hidden" name="token" value="'.newToken().'">';
print '<input type="hidden" name="action" value="update">'; print '<input type="hidden" name="action" value="update">';
print '<table class="noborder centpercent editmode">'; print '<table class="noborder centpercent editmode">';
print '<tr class="liste_titre"><th class="titlefield wordbreak">'.$langs->trans("CompanyInfo").'</th><th>'.$langs->trans("Value").'</th></tr>'."\n"; print '<tr class="liste_titre"><th class="titlefieldcreate wordbreak">'.$langs->trans("CompanyInfo").'</th><th>'.$langs->trans("Value").'</th></tr>'."\n";
// Name // Name
print '<tr class="oddeven"><td class="fieldrequired wordbreak"><label for="name">'.$langs->trans("CompanyName").'</label></td><td>'; print '<tr class="oddeven"><td class="fieldrequired wordbreak"><label for="name">'.$langs->trans("CompanyName").'</label></td><td>';
@ -557,7 +559,7 @@ print '<br>';
// IDs of the company (country-specific) // IDs of the company (country-specific)
print '<div class="div-table-responsive-no-min">'; print '<div class="div-table-responsive-no-min">';
print '<table class="noborder centpercent editmode">'; print '<table class="noborder centpercent editmode">';
print '<tr class="liste_titre"><td class="titlefield wordbreak">'.$langs->trans("CompanyIds").'</td><td>'.$langs->trans("Value").'</td></tr>'; print '<tr class="liste_titre"><td class="titlefieldcreate wordbreak">'.$langs->trans("CompanyIds").'</td><td>'.$langs->trans("Value").'</td></tr>';
$langs->load("companies"); $langs->load("companies");
@ -668,7 +670,7 @@ print '</div>';
print '<br>'; print '<br>';
print '<table class="noborder centpercent editmode">'; print '<table class="noborder centpercent editmode">';
print '<tr class="liste_titre">'; print '<tr class="liste_titre">';
print '<td class="titlefield">'.$langs->trans("FiscalYearInformation").'</td><td>'.$langs->trans("Value").'</td>'; print '<td class="titlefieldcreate">'.$langs->trans("FiscalYearInformation").'</td><td>'.$langs->trans("Value").'</td>';
print "</tr>\n"; print "</tr>\n";
print '<tr class="oddeven"><td><label for="SOCIETE_FISCAL_MONTH_START">'.$langs->trans("FiscalMonthStart").'</label></td><td>'; print '<tr class="oddeven"><td><label for="SOCIETE_FISCAL_MONTH_START">'.$langs->trans("FiscalMonthStart").'</label></td><td>';
@ -683,12 +685,12 @@ print load_fiche_titre($langs->trans("TypeOfSaleTaxes"), '', 'object_payment');
print '<table class="noborder centpercent editmode">'; print '<table class="noborder centpercent editmode">';
print '<tr class="liste_titre">'; print '<tr class="liste_titre">';
print '<td width="25%">'.$langs->trans("VATManagement").'</td><td>'.$langs->trans("Description").'</td>'; print '<td class="titlefieldcreate">'.$langs->trans("VATManagement").'</td><td>'.$langs->trans("Description").'</td>';
print '<td class="right">&nbsp;</td>'; print '<td class="right">&nbsp;</td>';
print "</tr>\n"; print "</tr>\n";
// Main tax // Main tax
print '<tr class="oddeven"><td width="140"><label><input type="radio" name="optiontva" id="use_vat" value="1"'.(empty($conf->global->FACTURE_TVAOPTION) ? "" : " checked")."> ".$langs->trans("VATIsUsed")."</label></td>"; print '<tr class="oddeven"><td><label><input type="radio" name="optiontva" id="use_vat" value="1"'.(empty($conf->global->FACTURE_TVAOPTION) ? "" : " checked")."> ".$langs->trans("VATIsUsed")."</label></td>";
print '<td colspan="2">'; print '<td colspan="2">';
$tooltiphelp = ''; $tooltiphelp = '';
if ($mysoc->country_code == 'FR') { if ($mysoc->country_code == 'FR') {
@ -713,7 +715,7 @@ print "</table>";
print '<br>'; print '<br>';
print '<table class="noborder centpercent editmode">'; print '<table class="noborder centpercent editmode">';
print '<tr class="liste_titre">'; print '<tr class="liste_titre">';
print '<td width="25%">'.$form->textwithpicto($langs->transcountry("LocalTax1Management", $mysoc->country_code), $langs->transcountry("LocalTax1IsUsedDesc", $mysoc->country_code)).'</td><td>'.$langs->trans("Description").'</td>'; print '<td class="titlefieldcreate">'.$form->textwithpicto($langs->transcountry("LocalTax1Management", $mysoc->country_code), $langs->transcountry("LocalTax1IsUsedDesc", $mysoc->country_code)).'</td><td>'.$langs->trans("Description").'</td>';
print '<td class="right">&nbsp;</td>'; print '<td class="right">&nbsp;</td>';
print "</tr>\n"; print "</tr>\n";
@ -747,7 +749,7 @@ if ($mysoc->useLocalTax(1)) {
if (empty($mysoc->country_code)) { if (empty($mysoc->country_code)) {
print '<tr class="oddeven nohover"><td class="">'.$countrynotdefined.'</td><td></td><td></td></tr>'; print '<tr class="oddeven nohover"><td class="">'.$countrynotdefined.'</td><td></td><td></td></tr>';
} else { } else {
print '<tr class="oddeven nohover"><td class="" colspan="3">'.$langs->trans("NoLocalTaxXForThisCountry", $langs->transnoentitiesnoconv("Setup"), $langs->transnoentitiesnoconv("Dictionaries"), $langs->transnoentitiesnoconv("DictionaryVAT"), $langs->transnoentitiesnoconv("LocalTax1Management")).'</td></tr>'; print '<tr class="oddeven nohover"><td class="" colspan="3"><span class="opacitymedium">'.$langs->trans("NoLocalTaxXForThisCountry", $langs->transnoentitiesnoconv("Setup"), $langs->transnoentitiesnoconv("Dictionaries"), $langs->transnoentitiesnoconv("DictionaryVAT"), $langs->transnoentitiesnoconv("LocalTax1Management")).'</span></td></tr>';
} }
} }
@ -757,7 +759,7 @@ print "</table>";
print '<br>'; print '<br>';
print '<table class="noborder centpercent editmode">'; print '<table class="noborder centpercent editmode">';
print '<tr class="liste_titre">'; print '<tr class="liste_titre">';
print '<td width="25%">'.$form->textwithpicto($langs->transcountry("LocalTax2Management", $mysoc->country_code), $langs->transcountry("LocalTax2IsUsedDesc", $mysoc->country_code)).'</td><td>'.$langs->trans("Description").'</td>'; print '<td class="titlefieldcreate">'.$form->textwithpicto($langs->transcountry("LocalTax2Management", $mysoc->country_code), $langs->transcountry("LocalTax2IsUsedDesc", $mysoc->country_code)).'</td><td>'.$langs->trans("Description").'</td>';
print '<td class="right">&nbsp;</td>'; print '<td class="right">&nbsp;</td>';
print "</tr>\n"; print "</tr>\n";
@ -790,7 +792,7 @@ if ($mysoc->useLocalTax(2)) {
if (empty($mysoc->country_code)) { if (empty($mysoc->country_code)) {
print '<tr class="oddeven nohover"><td class="">'.$countrynotdefined.'</td><td></td><td></td></tr>'; print '<tr class="oddeven nohover"><td class="">'.$countrynotdefined.'</td><td></td><td></td></tr>';
} else { } else {
print '<tr class="oddeven nohover"><td class="" colspan="3">'.$langs->trans("NoLocalTaxXForThisCountry", $langs->transnoentitiesnoconv("Setup"), $langs->transnoentitiesnoconv("Dictionaries"), $langs->transnoentitiesnoconv("DictionaryVAT"), $langs->transnoentitiesnoconv("LocalTax2Management")).'</td></tr>'; print '<tr class="oddeven nohover"><td class="" colspan="3"><span class="opacitymedium">'.$langs->trans("NoLocalTaxXForThisCountry", $langs->transnoentitiesnoconv("Setup"), $langs->transnoentitiesnoconv("Dictionaries"), $langs->transnoentitiesnoconv("DictionaryVAT"), $langs->transnoentitiesnoconv("LocalTax2Management")).'</span></td></tr>';
} }
} }
@ -816,7 +818,7 @@ if ($mysoc->useRevenueStamp()) {
if (empty($mysoc->country_code)) { if (empty($mysoc->country_code)) {
print '<tr class="oddeven nohover"><td class="">'.$countrynotdefined.'</td><td></td><td></td></tr>'; print '<tr class="oddeven nohover"><td class="">'.$countrynotdefined.'</td><td></td><td></td></tr>';
} else { } else {
print '<tr class="oddeven nohover"><td class="" colspan="3">'.$langs->trans("NoLocalTaxXForThisCountry", $langs->transnoentitiesnoconv("Setup"), $langs->transnoentitiesnoconv("Dictionaries"), $langs->transnoentitiesnoconv("DictionaryRevenueStamp"), $langs->transnoentitiesnoconv("RevenueStamp")).'</td></tr>'; print '<tr class="oddeven nohover"><td class="" colspan="3"><span class="opacitymedium">'.$langs->trans("NoLocalTaxXForThisCountry", $langs->transnoentitiesnoconv("Setup"), $langs->transnoentitiesnoconv("Dictionaries"), $langs->transnoentitiesnoconv("DictionaryRevenueStamp"), $langs->transnoentitiesnoconv("RevenueStamp")).'</span></td></tr>';
} }
} }

View File

@ -413,8 +413,8 @@ if ($action != 'create') {
print '<input type="hidden" name="contextpage" value="'.$contextpage.'">'; print '<input type="hidden" name="contextpage" value="'.$contextpage.'">';
*/ */
print '<table class="border centpercent tableforfield">'; print '<table class="border centpercent tableforfield">';
print '<tr><td class="fieldrequired">'.$langs->trans("Label").'</td><td><input type="text" name="label" value="'.GETPOST('label', 'alphanohtml').'"></td></tr>'; print '<tr><td class="fieldrequired">'.$langs->trans("Label").'</td><td><input type="text" name="label" value="'.GETPOST('label', 'alphanohtml').'" autofocus></td></tr>';
print '<tr><td>'.$langs->trans("Email").'</td><td><input type="text" name="email" value="'.GETPOST('email', 'alphanohtml').'"></td></tr>'; print '<tr><td class="fieldrequired">'.$langs->trans("Email").'</td><td><input type="text" name="email" value="'.GETPOST('email', 'alphanohtml').'"></td></tr>';
print '<tr><td>'.$langs->trans("Signature").'</td><td>'; print '<tr><td>'.$langs->trans("Signature").'</td><td>';
require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
$doleditor = new DolEditor('signature', GETPOST('signature'), '', 138, 'dolibarr_notes', 'In', true, true, empty($conf->global->FCKEDITOR_ENABLE_USERSIGN) ? 0 : 1, ROWS_4, '90%'); $doleditor = new DolEditor('signature', GETPOST('signature'), '', 138, 'dolibarr_notes', 'In', true, true, empty($conf->global->FCKEDITOR_ENABLE_USERSIGN) ? 0 : 1, ROWS_4, '90%');

View File

@ -481,7 +481,9 @@ print load_fiche_titre($langs->trans("ModulesSetup"), '', 'title_setup');
$deschelp = ''; $deschelp = '';
if ($mode == 'common' || $mode == 'commonkanban') { if ($mode == 'common' || $mode == 'commonkanban') {
$desc = $langs->trans("ModulesDesc", '{picto}'); $desc = $langs->trans("ModulesDesc", '{picto}');
$desc .= ' '.$langs->trans("ModulesDesc2", '{picto2}');
$desc = str_replace('{picto}', img_picto('', 'switch_off'), $desc); $desc = str_replace('{picto}', img_picto('', 'switch_off'), $desc);
$desc = str_replace('{picto2}', img_picto('', 'setup'), $desc);
if (count($conf->modules) <= (empty($conf->global->MAIN_MIN_NB_ENABLED_MODULE_FOR_WARNING) ? 1 : $conf->global->MAIN_MIN_NB_ENABLED_MODULE_FOR_WARNING)) { // If only minimal initial modules enabled if (count($conf->modules) <= (empty($conf->global->MAIN_MIN_NB_ENABLED_MODULE_FOR_WARNING) ? 1 : $conf->global->MAIN_MIN_NB_ENABLED_MODULE_FOR_WARNING)) { // If only minimal initial modules enabled
$deschelp = '<div class="info hideonsmartphone">'.$desc."<br></div><br>\n"; $deschelp = '<div class="info hideonsmartphone">'.$desc."<br></div><br>\n";
} }
@ -1247,7 +1249,13 @@ if ($mode == 'develop') {
print '<div class="imgmaxheight50 logo_setup"></div>'; print '<div class="imgmaxheight50 logo_setup"></div>';
print '</td>'; print '</td>';
print '<td>'.$langs->trans("TryToUseTheModuleBuilder", $langs->transnoentitiesnoconv("ModuleBuilder")).'</td>'; print '<td>'.$langs->trans("TryToUseTheModuleBuilder", $langs->transnoentitiesnoconv("ModuleBuilder")).'</td>';
print '<td>'.$langs->trans("SeeTopRightMenu").'</td>'; print '<td class="maxwidth300">';
if (!empty($conf->modulebuilder->enabled)) {
print $langs->trans("SeeTopRightMenu");
} else {
print '<span class="opacitymedium">'.$langs->trans("ModuleMustBeEnabledFirst", $langs->transnoentitiesnoconv("ModuleBuilder")).'</span>';
}
print '</td>';
print '</tr>'; print '</tr>';
print '<tr class="oddeven" height="80">'."\n"; print '<tr class="oddeven" height="80">'."\n";

View File

@ -25,6 +25,8 @@
*/ */
require '../../main.inc.php'; require '../../main.inc.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
$langs->load("admin"); $langs->load("admin");
@ -35,6 +37,10 @@ if (!$user->admin) {
$action = GETPOST('action', 'aZ09'); $action = GETPOST('action', 'aZ09');
/*
* Actions
*/
if ($action == 'convert') { if ($action == 'convert') {
$sql = "ALTER TABLE ".$db->escape(GETPOST("table", "aZ09"))." ENGINE=INNODB"; $sql = "ALTER TABLE ".$db->escape(GETPOST("table", "aZ09"))." ENGINE=INNODB";
$db->query($sql); $db->query($sql);
@ -82,6 +88,7 @@ if (!$base) {
print '<div class="div-table-responsive-no-min">'; print '<div class="div-table-responsive-no-min">';
print '<table class="noborder">'; print '<table class="noborder">';
print '<tr class="liste_titre">'; print '<tr class="liste_titre">';
print '<td>#</td>';
print '<td>'.$langs->trans("TableName").'</td>'; print '<td>'.$langs->trans("TableName").'</td>';
print '<td colspan="2">'.$langs->trans("Type").'</td>'; print '<td colspan="2">'.$langs->trans("Type").'</td>';
print '<td>'.$langs->trans("Format").'</td>'; print '<td>'.$langs->trans("Format").'</td>';
@ -105,7 +112,18 @@ if (!$base) {
$obj = $db->fetch_object($resql); $obj = $db->fetch_object($resql);
print '<tr class="oddeven">'; print '<tr class="oddeven">';
print '<td><a href="dbtable.php?table='.$obj->Name.'">'.$obj->Name.'</a></td>'; print '<td>'.($i+1).'</td>';
print '<td><a href="dbtable.php?table='.$obj->Name.'">'.$obj->Name.'</a>';
$tablename = preg_replace('/^'.MAIN_DB_PREFIX.'/', 'llx_', $obj->Name);
if (dol_is_file(DOL_DOCUMENT_ROOT.'/install/mysql/tables/'.$tablename.'.sql')) {
$img = "info";
//print img_picto($langs->trans("ExternalModule"), $img);
} else {
$img = "info_black";
//print DOL_DOCUMENT_ROOT.'/install/mysql/tables/'.$tablename.'.sql';
print img_picto($langs->trans("ExternalModule"), $img, 'class="small"');
}
print '</td>';
print '<td>'.$obj->Engine.'</td>'; print '<td>'.$obj->Engine.'</td>';
if (isset($obj->Engine) && $obj->Engine == "MyISAM") { if (isset($obj->Engine) && $obj->Engine == "MyISAM") {
print '<td><a class="reposition" href="database-tables.php?action=convert&amp;table='.$obj->Name.'">'.$langs->trans("Convert").' InnoDb</a></td>'; print '<td><a class="reposition" href="database-tables.php?action=convert&amp;table='.$obj->Name.'">'.$langs->trans("Convert").' InnoDb</a></td>';
@ -142,6 +160,8 @@ if (!$base) {
print '<div class="div-table-responsive-no-min">'; print '<div class="div-table-responsive-no-min">';
print '<table class="noborder">'; print '<table class="noborder">';
print '<tr class="liste_titre">'; print '<tr class="liste_titre">';
print '<td>#</td>';
print '<td>'.$langs->trans("TableName").'</td>'; print '<td>'.$langs->trans("TableName").'</td>';
print '<td>Nb of tuples</td>'; print '<td>Nb of tuples</td>';
print '<td>Nb index fetcher.</td>'; print '<td>Nb index fetcher.</td>';
@ -160,6 +180,7 @@ if (!$base) {
while ($i < $num) { while ($i < $num) {
$row = $db->fetch_row($resql); $row = $db->fetch_row($resql);
print '<tr class="oddeven">'; print '<tr class="oddeven">';
print '<td>'.($i+1).'</td>';
print '<td>'.$row[0].'</td>'; print '<td>'.$row[0].'</td>';
print '<td class="right">'.$row[1].'</td>'; print '<td class="right">'.$row[1].'</td>';
print '<td class="right">'.$row[2].'</td>'; print '<td class="right">'.$row[2].'</td>';
@ -179,6 +200,7 @@ if (!$base) {
print '<div class="div-table-responsive-no-min">'; print '<div class="div-table-responsive-no-min">';
print '<table class="noborder">'; print '<table class="noborder">';
print '<tr class="liste_titre">'; print '<tr class="liste_titre">';
print '<td>#</td>';
print '<td>'.$langs->trans("TableName").'</td>'; print '<td>'.$langs->trans("TableName").'</td>';
print '<td>'.$langs->trans("NbOfRecord").'</td>'; print '<td>'.$langs->trans("NbOfRecord").'</td>';
print "</tr>\n"; print "</tr>\n";
@ -197,6 +219,7 @@ if (!$base) {
} }
print '<tr class="oddeven">'; print '<tr class="oddeven">';
print '<td>'.($i+1).'</td>';
print '<td>'.$row[0].'</td>'; print '<td>'.$row[0].'</td>';
print '<td>'.$count.'</td>'; print '<td>'.$count.'</td>';
print '</tr>'; print '</tr>';

View File

@ -79,7 +79,12 @@ $file_list = array('missing' => array(), 'updated' => array());
// Local file to compare to // Local file to compare to
$xmlshortfile = dol_sanitizeFileName(GETPOST('xmlshortfile', 'alpha') ? GETPOST('xmlshortfile', 'alpha') : 'filelist-'.DOL_VERSION.(empty($conf->global->MAIN_FILECHECK_LOCAL_SUFFIX) ? '' : $conf->global->MAIN_FILECHECK_LOCAL_SUFFIX).'.xml'.(empty($conf->global->MAIN_FILECHECK_LOCAL_EXT) ? '' : $conf->global->MAIN_FILECHECK_LOCAL_EXT)); $xmlshortfile = dol_sanitizeFileName(GETPOST('xmlshortfile', 'alpha') ? GETPOST('xmlshortfile', 'alpha') : 'filelist-'.DOL_VERSION.(empty($conf->global->MAIN_FILECHECK_LOCAL_SUFFIX) ? '' : $conf->global->MAIN_FILECHECK_LOCAL_SUFFIX).'.xml'.(empty($conf->global->MAIN_FILECHECK_LOCAL_EXT) ? '' : $conf->global->MAIN_FILECHECK_LOCAL_EXT));
$xmlfile = DOL_DOCUMENT_ROOT.'/install/'.$xmlshortfile; $xmlfile = DOL_DOCUMENT_ROOT.'/install/'.$xmlshortfile;
if (!preg_match('/\.zip$/i', $xmlfile) && dol_is_file($xmlfile.'.zip')) {
$xmlfile = $xmlfile.'.zip';
}
// Remote file to compare to // Remote file to compare to
$xmlremote = GETPOST('xmlremote', 'alphanohtml'); $xmlremote = GETPOST('xmlremote', 'alphanohtml');
if (empty($xmlremote) && !empty($conf->global->MAIN_FILECHECK_URL)) { if (empty($xmlremote) && !empty($conf->global->MAIN_FILECHECK_URL)) {
@ -150,6 +155,10 @@ if (GETPOST('target') == 'local') {
} }
} }
$xml = simplexml_load_file($xmlfile); $xml = simplexml_load_file($xmlfile);
if ($xml === false) {
print '<div class="warning">'.$langs->trans('XmlCorrupted').': '.$xmlfile.'</span>';
$error++;
}
} else { } else {
print '<div class="warning">'.$langs->trans('XmlNotFound').': '.$xmlfile.'</span>'; print '<div class="warning">'.$langs->trans('XmlNotFound').': '.$xmlfile.'</span>';
$error++; $error++;

View File

@ -270,15 +270,16 @@ class Categorie extends CommonObject
$parameters = array(); $parameters = array();
$reshook = $hookmanager->executeHooks('constructCategory', $parameters, $this); // Note that $action and $object may have been modified by some hooks $reshook = $hookmanager->executeHooks('constructCategory', $parameters, $this); // Note that $action and $object may have been modified by some hooks
if ($reshook >= 0 && !empty($hookmanager->resArray)) { if ($reshook >= 0 && !empty($hookmanager->resArray)) {
$mapList = $hookmanager->resArray; foreach ($hookmanager->resArray as $mapList) {
$mapId = $mapList['id']; $mapId = $mapList['id'];
$mapCode = $mapList['code']; $mapCode = $mapList['code'];
self::$MAP_ID_TO_CODE[$mapId] = $mapCode; self::$MAP_ID_TO_CODE[$mapId] = $mapCode;
$this->MAP_ID[$mapCode] = $mapId; $this->MAP_ID[$mapCode] = $mapId;
$this->MAP_CAT_FK[$mapCode] = $mapList['cat_fk']; $this->MAP_CAT_FK[$mapCode] = $mapList['cat_fk'];
$this->MAP_CAT_TABLE[$mapCode] = $mapList['cat_table']; $this->MAP_CAT_TABLE[$mapCode] = $mapList['cat_table'];
$this->MAP_OBJ_CLASS[$mapCode] = $mapList['obj_class']; $this->MAP_OBJ_CLASS[$mapCode] = $mapList['obj_class'];
$this->MAP_OBJ_TABLE[$mapCode] = $mapList['obj_table']; $this->MAP_OBJ_TABLE[$mapCode] = $mapList['obj_table'];
}
} }
} }
} }
@ -1504,7 +1505,10 @@ class Categorie extends CommonObject
} else { } else {
$sql = "SELECT ct.fk_categorie, c.label, c.rowid"; $sql = "SELECT ct.fk_categorie, c.label, c.rowid";
$sql .= " FROM ".MAIN_DB_PREFIX."categorie_".(empty($this->MAP_CAT_TABLE[$type]) ? $type : $this->MAP_CAT_TABLE[$type])." as ct, ".MAIN_DB_PREFIX."categorie as c"; $sql .= " FROM ".MAIN_DB_PREFIX."categorie_".(empty($this->MAP_CAT_TABLE[$type]) ? $type : $this->MAP_CAT_TABLE[$type])." as ct, ".MAIN_DB_PREFIX."categorie as c";
$sql .= " WHERE ct.fk_categorie = c.rowid AND ct.fk_".(empty($this->MAP_CAT_FK[$type]) ? $type : $this->MAP_CAT_FK[$type])." = ".(int) $id." AND c.type = ".$this->MAP_ID[$type]; $sql .= " WHERE ct.fk_categorie = c.rowid AND ct.fk_".(empty($this->MAP_CAT_FK[$type]) ? $type : $this->MAP_CAT_FK[$type])." = ".(int) $id;
// This seems useless because the table already contains id of category of 1 unique type. So commented.
// So now it works also with external added categories.
//$sql .= " AND c.type = ".$this->MAP_ID[$type];
$sql .= " AND c.entity IN (".getEntity('category').")"; $sql .= " AND c.entity IN (".getEntity('category').")";
$res = $this->db->query($sql); $res = $this->db->query($sql);

View File

@ -1470,6 +1470,80 @@ if (!$error && ($action == 'affecttag' && $confirm == 'yes') && $permissiontoadd
} }
} }
if (!$error && ($massaction == 'enable' || ($action == 'enable' && $confirm == 'yes')) && $permissiontoadd) {
$db->begin();
$objecttmp = new $objectclass($db);
$nbok = 0;
foreach ($toselect as $toselectid) {
$result = $objecttmp->fetch($toselectid);
if ($result>0) {
if (in_array($objecttmp->element, array('societe'))) {
$result =$objecttmp->setStatut(1);
}
if ($result <= 0) {
setEventMessages($objecttmp->error, $objecttmp->errors, 'errors');
$error++;
break;
} else {
$nbok++;
}
} else {
setEventMessages($objecttmp->error, $objecttmp->errors, 'errors');
$error++;
break;
}
}
if (!$error) {
if ($nbok > 1) {
setEventMessages($langs->trans("RecordsEnabled", $nbok), null, 'mesgs');
} else {
setEventMessages($langs->trans("RecordEnabled"), null, 'mesgs');
}
$db->commit();
} else {
$db->rollback();
}
}
if (!$error && ($massaction == 'disable' || ($action == 'disable' && $confirm == 'yes')) && $permissiontoadd) {
$db->begin();
$objecttmp = new $objectclass($db);
$nbok = 0;
foreach ($toselect as $toselectid) {
$result = $objecttmp->fetch($toselectid);
if ($result>0) {
if (in_array($objecttmp->element, array('societe'))) {
$result =$objecttmp->setStatut(0);
}
if ($result <= 0) {
setEventMessages($objecttmp->error, $objecttmp->errors, 'errors');
$error++;
break;
} else {
$nbok++;
}
} else {
setEventMessages($objecttmp->error, $objecttmp->errors, 'errors');
$error++;
break;
}
}
if (!$error) {
if ($nbok > 1) {
setEventMessages($langs->trans("RecordsDisabled", $nbok), null, 'mesgs');
} else {
setEventMessages($langs->trans("RecordDisabled"), null, 'mesgs');
}
$db->commit();
} else {
$db->rollback();
}
}
$parameters['toselect'] = $toselect; $parameters['toselect'] = $toselect;
$parameters['uploaddir'] = $uploaddir; $parameters['uploaddir'] = $uploaddir;
$parameters['massaction'] = $massaction; $parameters['massaction'] = $massaction;

View File

@ -2006,30 +2006,32 @@ class ExtraFields
$collapse_display = ((isset($_COOKIE['DOLCOLLAPSE_'.$object->table_element.'_extrafields_'.$key]) || GETPOST('ignorecollapsesetup', 'int')) ? ($_COOKIE['DOLCOLLAPSE_'.$object->table_element.'_extrafields_'.$key] ? true : false) : ($extrafield_collapse_display_value == 2 ? false : true)); $collapse_display = ((isset($_COOKIE['DOLCOLLAPSE_'.$object->table_element.'_extrafields_'.$key]) || GETPOST('ignorecollapsesetup', 'int')) ? ($_COOKIE['DOLCOLLAPSE_'.$object->table_element.'_extrafields_'.$key] ? true : false) : ($extrafield_collapse_display_value == 2 ? false : true));
$extrafields_collapse_num = $this->attributes[$object->table_element]['pos'][$key].(!empty($object->id)?'_'.$object->id:''); $extrafields_collapse_num = $this->attributes[$object->table_element]['pos'][$key].(!empty($object->id)?'_'.$object->id:'');
$out .= '<!-- Add js script to manage the collapse/uncollapse of extrafields separators '.$key.' -->'."\n"; if (!empty($conf->use_javascript_ajax)) {
$out .= '<script type="text/javascript">'."\n"; $out .= '<!-- Add js script to manage the collapse/uncollapse of extrafields separators '.$key.' -->'."\n";
$out .= 'jQuery(document).ready(function(){'."\n"; $out .= '<script type="text/javascript">'."\n";
if ($collapse_display === false) { $out .= 'jQuery(document).ready(function(){'."\n";
$out .= ' jQuery("#trextrafieldseparator'.$key.(!empty($object->id)?'_'.$object->id:'').' '.$tagtype_dyn.'").prepend("<span class=\"cursorpointer far fa-plus-square\"></span>&nbsp;");'."\n"; if ($collapse_display === false) {
$out .= ' jQuery(".trextrafields_collapse'.$extrafields_collapse_num.'").hide();'."\n"; $out .= ' jQuery("#trextrafieldseparator'.$key.(!empty($object->id)?'_'.$object->id:'').' '.$tagtype_dyn.'").prepend("<span class=\"cursorpointer far fa-plus-square\"></span>&nbsp;");'."\n";
} else { $out .= ' jQuery(".trextrafields_collapse'.$extrafields_collapse_num.'").hide();'."\n";
$out .= ' jQuery("#trextrafieldseparator'.$key.(!empty($object->id)?'_'.$object->id:'').' '.$tagtype_dyn.'").prepend("<span class=\"cursorpointer far fa-minus-square\"></span>&nbsp;");'."\n"; } else {
$out .= ' document.cookie = "DOLCOLLAPSE_'.$object->table_element.'_extrafields_'.$key.'=1; path='.$_SERVER["PHP_SELF"].'"'."\n"; $out .= ' jQuery("#trextrafieldseparator'.$key.(!empty($object->id)?'_'.$object->id:'').' '.$tagtype_dyn.'").prepend("<span class=\"cursorpointer far fa-minus-square\"></span>&nbsp;");'."\n";
$out .= ' document.cookie = "DOLCOLLAPSE_'.$object->table_element.'_extrafields_'.$key.'=1; path='.$_SERVER["PHP_SELF"].'"'."\n";
}
$out .= ' jQuery("#trextrafieldseparator'.$key.(!empty($object->id)?'_'.$object->id:'').'").click(function(){'."\n";
$out .= ' console.log("We click on collapse/uncollapse .trextrafields_collapse'.$extrafields_collapse_num.'");'."\n";
$out .= ' jQuery(".trextrafields_collapse'.$extrafields_collapse_num.'").toggle(300, function(){'."\n";
$out .= ' if (jQuery(".trextrafields_collapse'.$extrafields_collapse_num.'").is(":hidden")) {'."\n";
$out .= ' jQuery("#trextrafieldseparator'.$key.(!empty($object->id)?'_'.$object->id:'').' '.$tagtype_dyn.' span").addClass("fa-plus-square").removeClass("fa-minus-square");'."\n";
$out .= ' document.cookie = "DOLCOLLAPSE_'.$object->table_element.'_extrafields_'.$key.'=0; path='.$_SERVER["PHP_SELF"].'"'."\n";
$out .= ' } else {'."\n";
$out .= ' jQuery("#trextrafieldseparator'.$key.(!empty($object->id)?'_'.$object->id:'').' '.$tagtype_dyn.' span").addClass("fa-minus-square").removeClass("fa-plus-square");'."\n";
$out .= ' document.cookie = "DOLCOLLAPSE_'.$object->table_element.'_extrafields_'.$key.'=1; path='.$_SERVER["PHP_SELF"].'"'."\n";
$out .= ' }'."\n";
$out .= ' });'."\n";
$out .= ' });'."\n";
$out .= '});'."\n";
$out .= '</script>'."\n";
} }
$out .= ' jQuery("#trextrafieldseparator'.$key.(!empty($object->id)?'_'.$object->id:'').'").click(function(){'."\n";
$out .= ' console.log("We click on collapse/uncollapse .trextrafields_collapse'.$extrafields_collapse_num.'");'."\n";
$out .= ' jQuery(".trextrafields_collapse'.$extrafields_collapse_num.'").toggle(300, function(){'."\n";
$out .= ' if (jQuery(".trextrafields_collapse'.$extrafields_collapse_num.'").is(":hidden")) {'."\n";
$out .= ' jQuery("#trextrafieldseparator'.$key.(!empty($object->id)?'_'.$object->id:'').' '.$tagtype_dyn.' span").addClass("fa-plus-square").removeClass("fa-minus-square");'."\n";
$out .= ' document.cookie = "DOLCOLLAPSE_'.$object->table_element.'_extrafields_'.$key.'=0; path='.$_SERVER["PHP_SELF"].'"'."\n";
$out .= ' } else {'."\n";
$out .= ' jQuery("#trextrafieldseparator'.$key.(!empty($object->id)?'_'.$object->id:'').' '.$tagtype_dyn.' span").addClass("fa-minus-square").removeClass("fa-plus-square");'."\n";
$out .= ' document.cookie = "DOLCOLLAPSE_'.$object->table_element.'_extrafields_'.$key.'=1; path='.$_SERVER["PHP_SELF"].'"'."\n";
$out .= ' }'."\n";
$out .= ' });'."\n";
$out .= ' });'."\n";
$out .= '});'."\n";
$out .= '</script>'."\n";
} }
} }
} }

View File

@ -272,8 +272,10 @@ class HookManager
$parameters['currentcontext'] = $context; $parameters['currentcontext'] = $context;
// Hooks that must return int (hooks with type 'addreplace') // Hooks that must return int (hooks with type 'addreplace')
if ($hooktype == 'addreplace') { if ($hooktype == 'addreplace') {
$resaction += $actionclassinstance->$method($parameters, $object, $action, $this); // $object and $action can be changed by method ($object->id during creation for example or $action to go back to other action for example) $resactiontmp = $actionclassinstance->$method($parameters, $object, $action, $this); // $object and $action can be changed by method ($object->id during creation for example or $action to go back to other action for example)
if ($resaction < 0 || !empty($actionclassinstance->error) || (!empty($actionclassinstance->errors) && count($actionclassinstance->errors) > 0)) { $resaction += $resactiontmp;
if ($resactiontmp < 0 || !empty($actionclassinstance->error) || (!empty($actionclassinstance->errors) && count($actionclassinstance->errors) > 0)) {
$error++; $error++;
$this->error = $actionclassinstance->error; $this->error = $actionclassinstance->error;
$this->errors = array_merge($this->errors, (array) $actionclassinstance->errors); $this->errors = array_merge($this->errors, (array) $actionclassinstance->errors);
@ -281,13 +283,22 @@ class HookManager
} }
if (isset($actionclassinstance->results) && is_array($actionclassinstance->results)) { if (isset($actionclassinstance->results) && is_array($actionclassinstance->results)) {
$this->resArray = array_merge($this->resArray, $actionclassinstance->results); if ($resactiontmp > 0) {
$this->resArray = $actionclassinstance->results;
} else {
$this->resArray = array_merge($this->resArray, $actionclassinstance->results);
}
} }
if (!empty($actionclassinstance->resprints)) { if (!empty($actionclassinstance->resprints)) {
$this->resPrint .= $actionclassinstance->resprints; if ($resactiontmp > 0) {
$this->resPrint = $actionclassinstance->resprints;
} else {
$this->resPrint .= $actionclassinstance->resprints;
}
} }
} else { } else {
// Generic hooks that return a string or array (printLeftBlock, formAddObjectLine, formBuilddocOptions, ...) // Generic hooks that return a string or array (printLeftBlock, formAddObjectLine, formBuilddocOptions, ...)
// TODO. this test should be done into the method of hook by returning nothing // TODO. this test should be done into the method of hook by returning nothing
if (is_array($parameters) && !empty($parameters['special_code']) && $parameters['special_code'] > 3 && $parameters['special_code'] != $actionclassinstance->module_number) { if (is_array($parameters) && !empty($parameters['special_code']) && $parameters['special_code'] > 3 && $parameters['special_code'] != $actionclassinstance->module_number) {
continue; continue;

View File

@ -7273,7 +7273,7 @@ class Form
public static function selectArrayAjax($htmlname, $url, $id = '', $moreparam = '', $moreparamtourl = '', $disabled = 0, $minimumInputLength = 1, $morecss = '', $callurlonselect = 0, $placeholder = '', $acceptdelayedhtml = 0) public static function selectArrayAjax($htmlname, $url, $id = '', $moreparam = '', $moreparamtourl = '', $disabled = 0, $minimumInputLength = 1, $morecss = '', $callurlonselect = 0, $placeholder = '', $acceptdelayedhtml = 0)
{ {
global $conf, $langs; global $conf, $langs;
global $delayedhtmlcontent; global $delayedhtmlcontent; // Will be used later outside of this function
// TODO Use an internal dolibarr component instead of select2 // TODO Use an internal dolibarr component instead of select2
if (empty($conf->global->MAIN_USE_JQUERY_MULTISELECT) && !defined('REQUIRE_JQUERY_MULTISELECT')) { if (empty($conf->global->MAIN_USE_JQUERY_MULTISELECT) && !defined('REQUIRE_JQUERY_MULTISELECT')) {
@ -7282,68 +7282,71 @@ class Form
$out = '<select type="text" class="'.$htmlname.($morecss ? ' '.$morecss : '').'" '.($moreparam ? $moreparam.' ' : '').'name="'.$htmlname.'"></select>'; $out = '<select type="text" class="'.$htmlname.($morecss ? ' '.$morecss : '').'" '.($moreparam ? $moreparam.' ' : '').'name="'.$htmlname.'"></select>';
$tmpplugin = 'select2'; $outdelayed = '';
$outdelayed = "\n".'<!-- JS CODE TO ENABLE '.$tmpplugin.' for id '.$htmlname.' --> if (!empty($conf->use_javascript_ajax)) {
<script> $tmpplugin = 'select2';
$(document).ready(function () { $outdelayed = "\n".'<!-- JS CODE TO ENABLE '.$tmpplugin.' for id '.$htmlname.' -->
<script>
$(document).ready(function () {
'.($callurlonselect ? 'var saveRemoteData = [];' : '').' '.($callurlonselect ? 'var saveRemoteData = [];' : '').'
$(".'.$htmlname.'").select2({ $(".'.$htmlname.'").select2({
ajax: { ajax: {
dir: "ltr", dir: "ltr",
url: "'.$url.'", url: "'.$url.'",
dataType: \'json\', dataType: \'json\',
delay: 250, delay: 250,
data: function (params) { data: function (params) {
return { return {
q: params.term, // search term q: params.term, // search term
page: params.page page: params.page
}; };
}, },
processResults: function (data) { processResults: function (data) {
// parse the results into the format expected by Select2. // parse the results into the format expected by Select2.
// since we are using custom formatting functions we do not need to alter the remote JSON data // since we are using custom formatting functions we do not need to alter the remote JSON data
//console.log(data); //console.log(data);
saveRemoteData = data; saveRemoteData = data;
/* format json result for select2 */ /* format json result for select2 */
result = [] result = []
$.each( data, function( key, value ) { $.each( data, function( key, value ) {
result.push({id: key, text: value.text}); result.push({id: key, text: value.text});
}); });
//return {results:[{id:\'none\', text:\'aa\'}, {id:\'rrr\', text:\'Red\'},{id:\'bbb\', text:\'Search a into projects\'}], more:false} //return {results:[{id:\'none\', text:\'aa\'}, {id:\'rrr\', text:\'Red\'},{id:\'bbb\', text:\'Search a into projects\'}], more:false}
//console.log(result); //console.log(result);
return {results: result, more: false} return {results: result, more: false}
}, },
cache: true cache: true
}, },
language: select2arrayoflanguage, language: select2arrayoflanguage,
containerCssClass: \':all:\', /* Line to add class of origin SELECT propagated to the new <span class="select2-selection...> tag */ containerCssClass: \':all:\', /* Line to add class of origin SELECT propagated to the new <span class="select2-selection...> tag */
placeholder: "'.dol_escape_js($placeholder).'", placeholder: "'.dol_escape_js($placeholder).'",
escapeMarkup: function (markup) { return markup; }, // let our custom formatter work escapeMarkup: function (markup) { return markup; }, // let our custom formatter work
minimumInputLength: '.$minimumInputLength.', minimumInputLength: '.$minimumInputLength.',
formatResult: function(result, container, query, escapeMarkup) { formatResult: function(result, container, query, escapeMarkup) {
return escapeMarkup(result.text); return escapeMarkup(result.text);
}, },
}); });
'.($callurlonselect ? ' '.($callurlonselect ? '
/* Code to execute a GET when we select a value */ /* Code to execute a GET when we select a value */
$(".'.$htmlname.'").change(function() { $(".'.$htmlname.'").change(function() {
var selected = $(".'.$htmlname.'").val(); var selected = $(".'.$htmlname.'").val();
console.log("We select in selectArrayAjax the entry "+selected) console.log("We select in selectArrayAjax the entry "+selected)
$(".'.$htmlname.'").val(""); /* reset visible combo value */ $(".'.$htmlname.'").val(""); /* reset visible combo value */
$.each( saveRemoteData, function( key, value ) { $.each( saveRemoteData, function( key, value ) {
if (key == selected) if (key == selected)
{ {
console.log("selectArrayAjax - Do a redirect to "+value.url) console.log("selectArrayAjax - Do a redirect to "+value.url)
location.assign(value.url); location.assign(value.url);
} }
}); });
});' : '').' });' : '').'
}); });
</script>'; </script>';
}
if ($acceptdelayedhtml) { if ($acceptdelayedhtml) {
$delayedhtmlcontent .= $outdelayed; $delayedhtmlcontent .= $outdelayed;
@ -7374,7 +7377,7 @@ class Form
public static function selectArrayFilter($htmlname, $array, $id = '', $moreparam = '', $disableFiltering = 0, $disabled = 0, $minimumInputLength = 1, $morecss = '', $callurlonselect = 0, $placeholder = '', $acceptdelayedhtml = 0) public static function selectArrayFilter($htmlname, $array, $id = '', $moreparam = '', $disableFiltering = 0, $disabled = 0, $minimumInputLength = 1, $morecss = '', $callurlonselect = 0, $placeholder = '', $acceptdelayedhtml = 0)
{ {
global $conf, $langs; global $conf, $langs;
global $delayedhtmlcontent; global $delayedhtmlcontent; // Will be used later outside of this function
// TODO Use an internal dolibarr component instead of select2 // TODO Use an internal dolibarr component instead of select2
if (empty($conf->global->MAIN_USE_JQUERY_MULTISELECT) && !defined('REQUIRE_JQUERY_MULTISELECT')) { if (empty($conf->global->MAIN_USE_JQUERY_MULTISELECT) && !defined('REQUIRE_JQUERY_MULTISELECT')) {
@ -7393,74 +7396,77 @@ class Form
$formattedarrayresult[] = $o; $formattedarrayresult[] = $o;
} }
$tmpplugin = 'select2'; $outdelayed = '';
$outdelayed = "\n".'<!-- JS CODE TO ENABLE '.$tmpplugin.' for id '.$htmlname.' --> if (!empty($conf->use_javascript_ajax)) {
<script> $tmpplugin = 'select2';
$(document).ready(function () { $outdelayed = "\n".'<!-- JS CODE TO ENABLE '.$tmpplugin.' for id '.$htmlname.' -->
var data = '.json_encode($formattedarrayresult).'; <script>
$(document).ready(function () {
var data = '.json_encode($formattedarrayresult).';
'.($callurlonselect ? 'var saveRemoteData = '.json_encode($array).';' : '').' '.($callurlonselect ? 'var saveRemoteData = '.json_encode($array).';' : '').'
$(".'.$htmlname.'").select2({ $(".'.$htmlname.'").select2({
data: data, data: data,
language: select2arrayoflanguage, language: select2arrayoflanguage,
containerCssClass: \':all:\', /* Line to add class of origin SELECT propagated to the new <span class="select2-selection...> tag */ containerCssClass: \':all:\', /* Line to add class of origin SELECT propagated to the new <span class="select2-selection...> tag */
placeholder: "'.dol_escape_js($placeholder).'", placeholder: "'.dol_escape_js($placeholder).'",
escapeMarkup: function (markup) { return markup; }, // let our custom formatter work escapeMarkup: function (markup) { return markup; }, // let our custom formatter work
minimumInputLength: '.$minimumInputLength.', minimumInputLength: '.$minimumInputLength.',
formatResult: function(result, container, query, escapeMarkup) { formatResult: function(result, container, query, escapeMarkup) {
return escapeMarkup(result.text); return escapeMarkup(result.text);
}, },
matcher: function (params, data) { matcher: function (params, data) {
if(! data.id) return null;'; if(! data.id) return null;';
if ($callurlonselect) {
$outdelayed .= '
var urlBase = data.url;
var separ = urlBase.indexOf("?") >= 0 ? "&" : "?";
/* console.log("params.term="+params.term); */
/* console.log("params.term encoded="+encodeURIComponent(params.term)); */
saveRemoteData[data.id].url = urlBase + separ + "sall=" + encodeURIComponent(params.term.replace(/\"/g, ""));';
}
if (!$disableFiltering) {
$outdelayed .= '
if(data.text.match(new RegExp(params.term))) {
return data;
}
return null;';
} else {
$outdelayed .= '
return data;';
}
if ($callurlonselect) {
$outdelayed .= ' $outdelayed .= '
var urlBase = data.url;
var separ = urlBase.indexOf("?") >= 0 ? "&" : "?";
/* console.log("params.term="+params.term); */
/* console.log("params.term encoded="+encodeURIComponent(params.term)); */
saveRemoteData[data.id].url = urlBase + separ + "sall=" + encodeURIComponent(params.term.replace(/\"/g, ""));';
}
if (!$disableFiltering) {
$outdelayed .= '
if(data.text.match(new RegExp(params.term))) {
return data;
}
return null;';
} else {
$outdelayed .= '
return data;';
}
$outdelayed .= '
}
});
'.($callurlonselect ? '
/* Code to execute a GET when we select a value */
$(".'.$htmlname.'").change(function() {
var selected = $(".'.$htmlname.'").val();
console.log("We select "+selected)
$(".'.$htmlname.'").val(""); /* reset visible combo value */
$.each( saveRemoteData, function( key, value ) {
if (key == selected)
{
console.log("selectArrayFilter - Do a redirect to "+value.url)
location.assign(value.url);
} }
}); });
});' : '').'
}); '.($callurlonselect ? '
</script>'; /* Code to execute a GET when we select a value */
$(".'.$htmlname.'").change(function() {
var selected = $(".'.$htmlname.'").val();
console.log("We select "+selected)
$(".'.$htmlname.'").val(""); /* reset visible combo value */
$.each( saveRemoteData, function( key, value ) {
if (key == selected)
{
console.log("selectArrayFilter - Do a redirect to "+value.url)
location.assign(value.url);
}
});
});' : '').'
});
</script>';
}
if ($acceptdelayedhtml) { if ($acceptdelayedhtml) {
$delayedhtmlcontent .= $outdelayed; $delayedhtmlcontent .= $outdelayed;
@ -7503,7 +7509,7 @@ class Form
} }
// Add code for jquery to use multiselect // Add code for jquery to use multiselect
if (!empty($conf->global->MAIN_USE_JQUERY_MULTISELECT) || defined('REQUIRE_JQUERY_MULTISELECT')) { if (!empty($conf->use_javascript_ajax) && !empty($conf->global->MAIN_USE_JQUERY_MULTISELECT) || defined('REQUIRE_JQUERY_MULTISELECT')) {
$out .= "\n".'<!-- JS CODE TO ENABLE select for id '.$htmlname.', addjscombo='.$addjscombo.' -->'; $out .= "\n".'<!-- JS CODE TO ENABLE select for id '.$htmlname.', addjscombo='.$addjscombo.' -->';
$out .= "\n".'<script>'."\n"; $out .= "\n".'<script>'."\n";
if ($addjscombo == 1) { if ($addjscombo == 1) {

View File

@ -665,11 +665,11 @@ class FormTicket
print ajax_combobox('select'.$htmlname); print ajax_combobox('select'.$htmlname);
} elseif ($htmlname!='') { } elseif ($htmlname!='') {
$groupticket=GETPOST($htmlname, 'aZ09'); $groupticket=GETPOST($htmlname, 'aZ09');
$groupticketchild=GETPOST($htmlname.'_child', 'aZ09'); $child_id=GETPOST($htmlname.'_child_id', 'aZ09')?GETPOST($htmlname.'_child_id', 'aZ09'):0;
$arraycodenotparent[] = ""; $arraycodenotparent[] = "";
$arrayidused = array(); $arrayidused = array();
$stringtoprint = '<span class="supportemailfield bold">'.$langs->trans("GroupOfTicket").'</span> '; $stringtoprint = '<span class="supportemailfield bold">'.$langs->trans("GroupOfTicket").'</span> ';
$stringtoprint .= '<select name="'.$htmlname.'" id ="'.$htmlname.'" class="maxwidth500 minwidth400" child_id="0">'; $stringtoprint .= '<select id ="'.$htmlname.'" class="maxwidth500 minwidth400" child_id="0">';
$stringtoprint .= '<option value="">&nbsp;</option>'; $stringtoprint .= '<option value="">&nbsp;</option>';
$sql = "SELECT ctc.rowid, ctc.code, ctc.label, ctc.fk_parent, "; $sql = "SELECT ctc.rowid, ctc.code, ctc.label, ctc.fk_parent, ";
@ -706,13 +706,17 @@ class FormTicket
} }
if ($num_rows_level0 == 1) { if ($num_rows_level0 == 1) {
return '<input type="hidden" name="'.$htmlname.'" id="'.$htmlname.'" value="'.dol_escape_htmltag($groupvalue).'">'; return '<input type="hidden" name="'.$htmlname.'" id="'.$htmlname.'" value="'.dol_escape_htmltag($groupvalue).'">';
} else {
$stringtoprint .= '<input type="hidden" name="'.$htmlname.'" id="'.$htmlname.'_select" class="maxwidth500 minwidth400">';
$stringtoprint .= '<input type="hidden" name="'.$htmlname.'_child_id" id="'.$htmlname.'_select_child_id" class="maxwidth500 minwidth400">';
} }
$stringtoprint .= '<input type="submit" value="Envoyer le formulaire">';
$stringtoprint .= '</select>&nbsp;'; $stringtoprint .= '</select>&nbsp;';
$levelid = 1; $levelid = 1;
while ($levelid <= $use_multilevel) { while ($levelid <= $use_multilevel) {
$tabscript = array(); $tabscript = array();
$stringtoprint .= '<select name="'.$htmlname.'_child_'.$levelid.'" id ="'.$htmlname.'_child_'.$levelid.'" class="maxwidth500 minwidth400 groupticketchild" child_id="'.$levelid.'">'; $stringtoprint .= '<select id ="'.$htmlname.'_child_'.$levelid.'" class="maxwidth500 minwidth400 groupticketchild" child_id="'.$levelid.'">';
$stringtoprint .= '<option value="">&nbsp;</option>'; $stringtoprint .= '<option value="">&nbsp;</option>';
$sql = "SELECT ctc.rowid, ctc.code, ctc.label, ctc.fk_parent, ctcjoin.code as codefather, "; $sql = "SELECT ctc.rowid, ctc.code, ctc.label, ctc.fk_parent, ctcjoin.code as codefather, ";
@ -751,7 +755,7 @@ class FormTicket
if ($isparent == 'NOTPARENT') { if ($isparent == 'NOTPARENT') {
$arraycodenotparent[] = $groupvalue; $arraycodenotparent[] = $groupvalue;
} }
$iselected = $groupticketchild == $obj->code ?'selected':''; $iselected = $groupticket == $obj->code ?'selected':'';
$stringtoprint .= '<option '.$iselected.' class="'.$htmlname.'_'.dol_escape_htmltag($fatherid).'_child_'.$levelid.'" value="'.dol_escape_htmltag($groupvalue).'" data-html="'.dol_escape_htmltag($grouplabel).'">'.dol_escape_htmltag($grouplabel).'</option>'; $stringtoprint .= '<option '.$iselected.' class="'.$htmlname.'_'.dol_escape_htmltag($fatherid).'_child_'.$levelid.'" value="'.dol_escape_htmltag($groupvalue).'" data-html="'.dol_escape_htmltag($grouplabel).'">'.dol_escape_htmltag($grouplabel).'</option>';
if (empty($tabscript[$groupcodefather])) { if (empty($tabscript[$groupcodefather])) {
$tabscript[$groupcodefather] = 'if ($("#'.$htmlname.($levelid > 1 ?'_child_'.$levelid-1:'').'")[0].value == "'.dol_escape_js($groupcodefather).'"){ $tabscript[$groupcodefather] = 'if ($("#'.$htmlname.($levelid > 1 ?'_child_'.$levelid-1:'').'")[0].value == "'.dol_escape_js($groupcodefather).'"){
@ -769,15 +773,43 @@ class FormTicket
dol_print_error($this->db); dol_print_error($this->db);
} }
$stringtoprint .='</select>'; $stringtoprint .='</select>';
//$stringtoprint .= ajax_combobox($htmlname.'_child_'.$levelid);
$stringtoprint .='<script>'; $stringtoprint .='<script>';
$stringtoprint .='arraynotparents = '.json_encode($arraycodenotparent).';'; $stringtoprint .='arraynotparents = '.json_encode($arraycodenotparent).';';
$stringtoprint .='if (arraynotparents.includes($("#'.$htmlname.($levelid > 1 ?'_child_'.$levelid-1:'').'")[0].value)){$("#'.$htmlname.'_child_'.$levelid.'").hide()} $stringtoprint .='if (arraynotparents.includes($("#'.$htmlname.($levelid > 1 ?'_child_'.$levelid-1:'').'")[0].value)){
console.log("'.$htmlname.'_child_'.$levelid.'")
if($("#'.$htmlname.'_child_'.$levelid.'")[0].value == "" && ($("#'.$htmlname.'_child_'.$levelid.'").attr("child_id")>'.$child_id.')){
$("#'.$htmlname.'_child_'.$levelid.'").hide();
console.log("We hide '.$htmlname.'_child_'.$levelid.' input")
}else if(($("#'.$htmlname.'_child_'.$levelid.'").attr("child_id")!=0) && ($("#'.$htmlname.'_child_'.$levelid.'").attr("child_id")<'.$child_id.')){
$("#'.$htmlname.'_child_'.$levelid.'").attr("disabled",true);
console.log("We disable '.$htmlname.'_child_'.$levelid.' input");
}else{
$("#'.$htmlname.'_child_'.$levelid.'").attr("disabled",true);
$("#ticketcategory_select_child_id")[0].value = $("#'.$htmlname.'_child_'.$levelid.'").attr("child_id")
$("#ticketcategory_select")[0].value = $("#'.$htmlname.'_child_'.$levelid.'")[0].value;
console.log("We disable '.$htmlname.'_child_'.$levelid.' input and reload hidden input");
}
if(arraynotparents.includes("'.$groupticket.'") && '.$child_id.' == 0){
$("#ticketcategory_select_child_id")[0].value = $("#'.$htmlname.'").attr("child_id")
$("#ticketcategory_select")[0].value = $("#'.$htmlname.'")[0].value;
console.log("We choose '.$htmlname.' input and reload hidden input");
}
}
$("#'.$htmlname.($levelid > 1 ?'_child_'.$levelid-1:'').'").change(function() { $("#'.$htmlname.($levelid > 1 ?'_child_'.$levelid-1:'').'").change(function() {
child_id = $("#'.$htmlname.($levelid > 1 ?'_child_'.$levelid-1:'').'").attr("child_id"); child_id = $("#'.$htmlname.($levelid > 1 ?'_child_'.$levelid:'').'").attr("child_id");
console.log("We select a new value into combo child_id="+child_id);
/* Change of value to select this value*/
if (arraynotparents.includes(this.value) || $(this).attr("child_id") == '.$use_multilevel.') {
$("#ticketcategory_select")[0].value = this.value;
$("#ticketcategory_select_child_id")[0].value = $(this).attr("child_id");
console.log("We choose to select "+ $("#ticketcategory_select")[0].value );
}else{
$("#ticketcategory_select")[0].value = "";
$("#ticketcategory_select_child_id")[0].value = "";
}
console.log("We select a new value into combo child_id="+child_id);
/* Hide all selected box that are child of the one modified */ /* Hide all selected box that are child of the one modified */
$(".groupticketchild").each(function(){ $(".groupticketchild").each(function(){
@ -803,7 +835,13 @@ class FormTicket
$stringtoprint .='})'; $stringtoprint .='})';
$stringtoprint .='</script>'; $stringtoprint .='</script>';
} }
$stringtoprint .='<script>';
$stringtoprint .='$("#'.$htmlname.'_child_'.$use_multilevel.'").change(function() {
$("#ticketcategory_select")[0].value = this.value;
$("#ticketcategory_select_child_id")[0].value = $(this).attr("child_id");
console.log($("#ticketcategory_select")[0].value);
})';
$stringtoprint .='</script>';
$stringtoprint .= ajax_combobox($htmlname); $stringtoprint .= ajax_combobox($htmlname);
return $stringtoprint; return $stringtoprint;

View File

@ -1899,7 +1899,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon = '', $noprin
} }
// Status // Status
$out .= '<td class="nowrap center">'.$actionstatic->LibStatut($histo[$key]['percent'], 3, 0, $histo[$key]['datestart']).'</td>'; $out .= '<td class="nowrap center">'.$actionstatic->LibStatut($histo[$key]['percent'], 2, 0, $histo[$key]['datestart']).'</td>';
// Actions // Actions
$out .= '<td></td>'; $out .= '<td></td>';

View File

@ -114,8 +114,13 @@ function dol_print_cron_urls()
print '<u>'.$langs->trans("FileToLaunchCronJobs").':</u><br>'; print '<u>'.$langs->trans("FileToLaunchCronJobs").':</u><br>';
$file = '/scripts/cron/cron_run_jobs.php '.(empty($conf->global->CRON_KEY) ? 'securitykey' : ''.$conf->global->CRON_KEY.'').' '.$logintouse.' [cronjobid]'; $pathtoscript = '/pathtoscript';
print '<textarea class="quatrevingtpercent">..'.$file."</textarea><br>\n"; if (!empty($conf->global->MAIN_DOL_SCRIPTS_ROOT)) {
$pathtoscript = $conf->global->MAIN_DOL_SCRIPTS_ROOT;
}
$file = $pathtoscript.'/scripts/cron/cron_run_jobs.php '.(empty($conf->global->CRON_KEY) ? 'securitykey' : ''.$conf->global->CRON_KEY.'').' '.$logintouse.' [cronjobid]';
print '<textarea class="quatrevingtpercent">'.$file."</textarea><br>\n";
print '<br>'; print '<br>';
// Add note // Add note
@ -131,7 +136,7 @@ function dol_print_cron_urls()
if ($linuxlike) { if ($linuxlike) {
print $langs->trans("CronExplainHowToRunUnix"); print $langs->trans("CronExplainHowToRunUnix");
print '<br>'; print '<br>';
print '<textarea class="quatrevingtpercent">*/5 * * * * pathtoscript/scripts/cron/cron_run_jobs.php '.(empty($conf->global->CRON_KEY) ? 'securitykey' : ''.$conf->global->CRON_KEY.'').' '.$logintouse.' &gt; '.DOL_DATA_ROOT.'/cron_run_jobs.php.log</textarea><br>'; print '<textarea class="quatrevingtpercent">*/5 * * * * '.$pathtoscript.'/scripts/cron/cron_run_jobs.php '.(empty($conf->global->CRON_KEY) ? 'securitykey' : ''.$conf->global->CRON_KEY.'').' '.$logintouse.' &gt; '.DOL_DATA_ROOT.'/cron_run_jobs.php.log</textarea><br>';
} else { } else {
print $langs->trans("CronExplainHowToRunWin"); print $langs->trans("CronExplainHowToRunWin");
} }

View File

@ -8487,8 +8487,10 @@ function complete_head_from_modules($conf, $langs, $object, &$head, &$h, $type,
if (!empty($hookmanager)) { if (!empty($hookmanager)) {
$parameters = array('object' => $object, 'mode' => $mode, 'head' => &$head); $parameters = array('object' => $object, 'mode' => $mode, 'head' => &$head);
$reshook = $hookmanager->executeHooks('completeTabsHead', $parameters); $reshook = $hookmanager->executeHooks('completeTabsHead', $parameters);
if ($reshook > 0) { if ($reshook > 0) { // Hook ask to replace completely the array
$head = $hookmanager->resArray; $head = $hookmanager->resArray;
} else { // Hook
$head = array_merge($head, $hookmanager->resArray);
} }
$h = count($head); $h = count($head);
} }

View File

@ -84,14 +84,14 @@ class modProductBatch extends DolibarrModules
$this->const[$r][0] = "PRODUCTBATCH_LOT_ADDON"; $this->const[$r][0] = "PRODUCTBATCH_LOT_ADDON";
$this->const[$r][1] = "chaine"; $this->const[$r][1] = "chaine";
$this->const[$r][2] = "mod_lot_free"; $this->const[$r][2] = "mod_lot_free";
$this->const[$r][3] = 'Module to control product codes'; $this->const[$r][3] = 'Module to control lot number';
$this->const[$r][4] = 0; $this->const[$r][4] = 0;
$r++; $r++;
$this->const[$r][0] = "PRODUCTBATCH_SN_ADDON"; $this->const[$r][0] = "PRODUCTBATCH_SN_ADDON";
$this->const[$r][1] = "chaine"; $this->const[$r][1] = "chaine";
$this->const[$r][2] = "mod_sn_free"; $this->const[$r][2] = "mod_sn_free";
$this->const[$r][3] = 'Module to control product codes'; $this->const[$r][3] = 'Module to control serial number';
$this->const[$r][4] = 0; $this->const[$r][4] = 0;
$r++; $r++;

View File

@ -128,27 +128,27 @@ class mod_lot_advanced extends ModeleNumRefBatch
/** /**
* Return next free value * Return next free value
* *
* @param Product $objprod Object product * @param Societe $objsoc Object Societe
* @param Object $object Object we need next value for * @param Object $object Object we need next value for
* @return string Value if KO, <0 if KO * @return string Value if KO, <0 if KO
*/ */
public function getNextValue($objprod, $object) public function getNextValue($objsoc, $object)
{ {
global $db, $conf; global $db, $conf;
require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
// We get cursor rule // We get cursor rule
$mask = $conf->global->BATCH_ADVANCED_MASK; $mask = $conf->global->LOT_ADVANCED_MASK;
if (!$mask) { if (!$mask) {
$this->error = 'NotConfigured'; $this->error = 'NotConfigured';
return 0; return 0;
} }
$date = $object->date; $date = dol_now();
$numFinal = get_next_value($db, $mask, 'product_lot', 'ref', '', null, $date); $numFinal = get_next_value($db, $mask, 'product_lot', 'batch', '', null, $date);
return $numFinal; return $numFinal;
} }

View File

@ -85,17 +85,21 @@ class mod_lot_standard extends ModeleNumRefBatch
$coyymm = ''; $max = ''; $coyymm = ''; $max = '';
$posindice = strlen($this->prefix) + 6; $posindice = strlen($this->prefix) + 6;
$sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; $sql = "SELECT MAX(CAST(SUBSTRING(batch FROM ".$posindice.") AS SIGNED)) as max";
$sql .= " FROM ".MAIN_DB_PREFIX."product_lot"; $sql .= " FROM ".MAIN_DB_PREFIX."product_lot";
$sql .= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'"; $sql .= " WHERE batch LIKE '".$db->escape($this->prefix)."____-%'";
$sql .= " AND entity = ".$conf->entity; $sql .= " AND entity = ".$conf->entity;
$resql = $db->query($sql); $resql = $db->query($sql);
if ($resql) { if ($resql) {
$row = $db->fetch_row($resql); $obj = $db->fetch_object($resql);
if ($row) { $coyymm = substr($row[0], 0, 6); $max = $row[0]; } if ($obj) {
$max = intval($obj->max);
} else {
$max = 0;
}
} }
if ($coyymm && !preg_match('/'.$this->prefix.'[0-9][0-9][0-9][0-9]/i', $coyymm)) { if ($max && !preg_match('/'.$this->prefix.'[0-9][0-9][0-9][0-9]/i', $max)) {
$langs->load("errors"); $langs->load("errors");
$this->error = $langs->trans('ErrorNumRefModel', $max); $this->error = $langs->trans('ErrorNumRefModel', $max);
return false; return false;
@ -117,23 +121,26 @@ class mod_lot_standard extends ModeleNumRefBatch
// First, we get the max value // First, we get the max value
$posindice = strlen($this->prefix) + 6; $posindice = strlen($this->prefix) + 6;
$sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; $sql = "SELECT MAX(CAST(SUBSTRING(batch FROM ".$posindice.") AS SIGNED)) as max";
$sql .= " FROM ".MAIN_DB_PREFIX."product_lot"; $sql .= " FROM ".MAIN_DB_PREFIX."product_lot";
$sql .= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'"; $sql .= " WHERE batch LIKE '".$db->escape($this->prefix)."____-%'";
$sql .= " AND entity = ".$conf->entity; $sql .= " AND entity = ".$conf->entity;
$resql = $db->query($sql); $resql = $db->query($sql);
if ($resql) { if ($resql) {
$obj = $db->fetch_object($resql); $obj = $db->fetch_object($resql);
if ($obj) $max = intval($obj->max); if ($obj) {
else $max = 0; $max = intval($obj->max);
} else {
$max = 0;
}
} else { } else {
dol_syslog("mod_lot_standard::getNextValue", LOG_DEBUG); dol_syslog("mod_lot_standard::getNextValue", LOG_DEBUG);
return -1; return -1;
} }
//$date=time(); //$date=time();
$date = $object->date_creation; $date = dol_now();
$yymm = strftime("%y%m", $date); $yymm = strftime("%y%m", $date);
if ($max >= (pow(10, 4) - 1)) $num = $max + 1; // If counter > 9999, we do not format on 4 chars, we take number as it is if ($max >= (pow(10, 4) - 1)) $num = $max + 1; // If counter > 9999, we do not format on 4 chars, we take number as it is

View File

@ -139,16 +139,16 @@ class mod_sn_advanced extends ModeleNumRefBatch
require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
// We get cursor rule // We get cursor rule
$mask = $conf->global->BATCH_ADVANCED_MASK; $mask = $conf->global->SN_ADVANCED_MASK;
if (!$mask) { if (!$mask) {
$this->error = 'NotConfigured'; $this->error = 'NotConfigured';
return 0; return 0;
} }
$date = $object->date; $date = dol_now();
$numFinal = get_next_value($db, $mask, 'product_sn', 'ref', '', null, $date); $numFinal = get_next_value($db, $mask, 'product_lot', 'batch', '', null, $date);
return $numFinal; return $numFinal;
} }

View File

@ -85,17 +85,21 @@ class mod_sn_standard extends ModeleNumRefBatch
$coyymm = ''; $max = ''; $coyymm = ''; $max = '';
$posindice = strlen($this->prefix) + 6; $posindice = strlen($this->prefix) + 6;
$sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; $sql = "SELECT MAX(CAST(SUBSTRING(batch FROM ".$posindice.") AS SIGNED)) as max";
$sql .= " FROM ".MAIN_DB_PREFIX."product_lot"; $sql .= " FROM ".MAIN_DB_PREFIX."product_lot";
$sql .= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'"; $sql .= " WHERE batch LIKE '".$db->escape($this->prefix)."____-%'";
$sql .= " AND entity = ".$conf->entity; $sql .= " AND entity = ".$conf->entity;
$resql = $db->query($sql); $resql = $db->query($sql);
if ($resql) { if ($resql) {
$row = $db->fetch_row($resql); $obj = $db->fetch_object($resql);
if ($row) { $coyymm = substr($row[0], 0, 6); $max = $row[0]; } if ($obj) {
$max = intval($obj->max);
} else {
$max = 0;
}
} }
if ($coyymm && !preg_match('/'.$this->prefix.'[0-9][0-9][0-9][0-9]/i', $coyymm)) { if ($max && !preg_match('/'.$this->prefix.'[0-9][0-9][0-9][0-9]/i', $max)) {
$langs->load("errors"); $langs->load("errors");
$this->error = $langs->trans('ErrorNumRefModel', $max); $this->error = $langs->trans('ErrorNumRefModel', $max);
return false; return false;
@ -107,33 +111,36 @@ class mod_sn_standard extends ModeleNumRefBatch
/** /**
* Return next free value * Return next free value
* *
* @param Product $objprod Object product * @param Societe $objsoc Object product
* @param Object $object Object we need next value for * @param Object $object Object we need next value for
* @return string Value if KO, <0 if KO * @return string Value if KO, <0 if KO
*/ */
public function getNextValue($objprod, $object) public function getNextValue($objsoc, $object)
{ {
global $db, $conf; global $db, $conf;
// First, we get the max value // First, we get the max value
$posindice = strlen($this->prefix) + 6; $posindice = strlen($this->prefix) + 6;
$sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; $sql = "SELECT MAX(CAST(SUBSTRING(batch FROM ".$posindice.") AS SIGNED)) as max";
$sql .= " FROM ".MAIN_DB_PREFIX."product_lot"; $sql .= " FROM ".MAIN_DB_PREFIX."product_lot";
$sql .= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'"; $sql .= " WHERE batch LIKE '".$db->escape($this->prefix)."____-%'";
$sql .= " AND entity = ".$conf->entity; $sql .= " AND entity = ".$conf->entity;
$resql = $db->query($sql); $resql = $db->query($sql);
if ($resql) { if ($resql) {
$obj = $db->fetch_object($resql); $obj = $db->fetch_object($resql);
if ($obj) $max = intval($obj->max); if ($obj) {
else $max = 0; $max = intval($obj->max);
} else {
$max = 0;
}
} else { } else {
dol_syslog("mod_sn_standard::getNextValue", LOG_DEBUG); dol_syslog("mod_sn_standard::getNextValue", LOG_DEBUG);
return -1; return -1;
} }
//$date=time(); //$date=time();
$date = $object->date_creation; $date = dol_now();
$yymm = strftime("%y%m", $date); $yymm = strftime("%y%m", $date);
if ($max >= (pow(10, 4) - 1)) $num = $max + 1; // If counter > 9999, we do not format on 4 chars, we take number as it is if ($max >= (pow(10, 4) - 1)) $num = $max + 1; // If counter > 9999, we do not format on 4 chars, we take number as it is

View File

@ -258,7 +258,6 @@ if (empty($reshook) && isset($extrafields->attributes[$object->table_element]['l
} }
} }
// Add code to manage list depending on others // Add code to manage list depending on others
// TODO Test/enhance this with a more generic solution // TODO Test/enhance this with a more generic solution
if (!empty($conf->use_javascript_ajax)) { if (!empty($conf->use_javascript_ajax)) {

View File

@ -194,6 +194,14 @@ if ($massaction == 'presend') {
print dol_get_fiche_end(); print dol_get_fiche_end();
} }
if ($massaction == 'preenable') {
print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassEnabling"), $langs->trans("ConfirmMassEnablingQuestion", count($toselect)), "enable", null, '', 0, 200, 500, 1);
}
if ($massaction == 'predisable') {
print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassDisabling"), $langs->trans("ConfirmMassDisablingQuestion", count($toselect)), "disable", null, '', 0, 200, 500, 1);
}
// Allow Pre-Mass-Action hook (eg for confirmation dialog) // Allow Pre-Mass-Action hook (eg for confirmation dialog)
$parameters = array( $parameters = array(
'toselect' => $toselect, 'toselect' => $toselect,

View File

@ -116,8 +116,10 @@ if ($action == 'set_DONATION_ACCOUNTINGACCOUNT') {
if (!$error) { if (!$error) {
setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
$action = ''; // To avoid to execute next actions
} else { } else {
setEventMessages($langs->trans("Error"), null, 'errors'); setEventMessages($langs->trans("Error"), null, 'errors');
$action = ''; // To avoid to execute next actions
} }
} }
@ -132,14 +134,15 @@ if ($action == 'set_DONATION_MESSAGE') {
if (!$error) { if (!$error) {
setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
$action = ''; // To avoid to execute next actions
} else { } else {
setEventMessages($langs->trans("Error"), null, 'errors'); setEventMessages($langs->trans("Error"), null, 'errors');
$action = ''; // To avoid to execute next actions
} }
} }
/* // Other cases
* Action $reg = array();
*/
if (preg_match('/set_([a-z0-9_\-]+)/i', $action, $reg)) { if (preg_match('/set_([a-z0-9_\-]+)/i', $action, $reg)) {
$code = $reg[1]; $code = $reg[1];
if (dolibarr_set_const($db, $code, 1, 'chaine', 0, '', $conf->entity) > 0) { if (dolibarr_set_const($db, $code, 1, 'chaine', 0, '', $conf->entity) > 0) {

View File

@ -2560,7 +2560,7 @@ if ($action != 'create' && $action != 'edit') {
print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=edit&id='.$object->id.'">'.$langs->trans('Modify').'</a></div>'; print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=edit&id='.$object->id.'">'.$langs->trans('Modify').'</a></div>';
// setdraft (le statut refusée est identique à brouillon) // setdraft (le statut refusée est identique à brouillon)
//print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=brouillonner&id='.$id.'">'.$langs->trans('BROUILLONNER').'</a>'; //print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=brouillonner&id='.$id.'">'.$langs->trans('ReOpen').'</a>';
// Enregistrer depuis le statut "Refusée" // Enregistrer depuis le statut "Refusée"
print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=save_from_refuse&id='.$object->id.'">'.$langs->trans('ValidateAndSubmit').'</a></div>'; print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=save_from_refuse&id='.$object->id.'">'.$langs->trans('ValidateAndSubmit').'</a></div>';
} }

View File

@ -51,7 +51,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
// Load translation files required by the page // Load translation files required by the page
$langs->loadLangs(array('bills', 'companies', 'interventions')); $langs->loadLangs(array('bills', 'companies', 'interventions', 'stocks'));
$id = GETPOST('id', 'int'); $id = GETPOST('id', 'int');
$ref = GETPOST('ref', 'alpha'); $ref = GETPOST('ref', 'alpha');
@ -1079,7 +1079,7 @@ if ($action == 'create') {
// Confirm back to open // Confirm back to open
if ($action == 'reopen') { if ($action == 'reopen') {
$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('Reopen'), $langs->trans('ConfirmReopenIntervention', $object->ref), 'confirm_reopen', '', 0, 1); $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ReOpen'), $langs->trans('ConfirmReopenIntervention', $object->ref), 'confirm_reopen', '', 0, 1);
} }
// Confirm deletion of line // Confirm deletion of line

View File

@ -367,7 +367,7 @@ ALTER TABLE llx_actioncomm_reminder ADD UNIQUE uk_actioncomm_reminder_unique (fk
ALTER TABLE llx_actioncomm_reminder ADD INDEX idx_actioncomm_reminder_status (status); ALTER TABLE llx_actioncomm_reminder ADD INDEX idx_actioncomm_reminder_status (status);
ALTER TABLE llx_inventorydet ADD COLUMN fk_warehouse integer DEFAULT 0;
ALTER TABLE llx_inventorydet ADD UNIQUE uk_inventorydet(fk_inventory, fk_warehouse, fk_product, batch); ALTER TABLE llx_inventorydet ADD UNIQUE uk_inventorydet(fk_inventory, fk_warehouse, fk_product, batch);
ALTER TABLE llx_commandedet ADD COLUMN ref_ext varchar(255) AFTER label; ALTER TABLE llx_commandedet ADD COLUMN ref_ext varchar(255) AFTER label;

View File

@ -569,3 +569,30 @@ create table llx_c_partnership_type
)ENGINE=innodb; )ENGINE=innodb;
DELETE FROM llx_rights_def WHERE module = 'hrm' AND perms = 'employee'; DELETE FROM llx_rights_def WHERE module = 'hrm' AND perms = 'employee';
CREATE TABLE llx_ecm_directories_extrafields
(
rowid integer AUTO_INCREMENT PRIMARY KEY,
tms timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
fk_object integer NOT NULL,
import_key varchar(14) -- import key
) ENGINE=innodb;
DROP TABLE llx_categorie_association;
DROP TABLE llx_cond_reglement;
DROP TABLE llx_zapier_hook_extrafields;
create table llx_onlinesignature
(
rowid integer AUTO_INCREMENT PRIMARY KEY,
entity integer DEFAULT 1 NOT NULL,
object_type varchar(32) NOT NULL,
object_id integer NOT NULL,
datec datetime NOT NULL,
tms timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
name varchar(255) NOT NULL,
ip varchar(128),
pathoffile varchar(255)
)ENGINE=innodb;

View File

@ -0,0 +1,39 @@
--
-- Be carefull to requests order.
-- This file must be loaded by calling /install/index.php page
-- when current version is 14.0.0 or higher.
--
-- To restrict request to Mysql version x.y minimum use -- VMYSQLx.y
-- To restrict request to Pgsql version x.y minimum use -- VPGSQLx.y
-- To rename a table: ALTER TABLE llx_table RENAME TO llx_table_new;
-- To add a column: ALTER TABLE llx_table ADD COLUMN newcol varchar(60) NOT NULL DEFAULT '0' AFTER existingcol;
-- To rename a column: ALTER TABLE llx_table CHANGE COLUMN oldname newname varchar(60);
-- To drop a column: ALTER TABLE llx_table DROP COLUMN oldname;
-- To change type of field: ALTER TABLE llx_table MODIFY COLUMN name varchar(60);
-- To drop a foreign key: ALTER TABLE llx_table DROP FOREIGN KEY fk_name;
-- To create a unique index ALTER TABLE llx_table ADD UNIQUE INDEX uk_table_field (field);
-- To drop an index: -- VMYSQL4.1 DROP INDEX nomindex on llx_table
-- To drop an index: -- VPGSQL8.2 DROP INDEX nomindex
-- To make pk to be auto increment (mysql): -- VMYSQL4.3 ALTER TABLE llx_table CHANGE COLUMN rowid rowid INTEGER NOT NULL AUTO_INCREMENT;
-- To make pk to be auto increment (postgres):
-- -- VPGSQL8.2 CREATE SEQUENCE llx_table_rowid_seq OWNED BY llx_table.rowid;
-- -- VPGSQL8.2 ALTER TABLE llx_table ADD PRIMARY KEY (rowid);
-- -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN rowid SET DEFAULT nextval('llx_table_rowid_seq');
-- -- VPGSQL8.2 SELECT setval('llx_table_rowid_seq', MAX(rowid)) FROM llx_table;
-- To set a field as NULL: -- VMYSQL4.3 ALTER TABLE llx_table MODIFY COLUMN name varchar(60) NULL;
-- To set a field as NULL: -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name DROP NOT NULL;
-- To set a field as NOT NULL: -- VMYSQL4.3 ALTER TABLE llx_table MODIFY COLUMN name varchar(60) NOT NULL;
-- To set a field as NOT NULL: -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name SET NOT NULL;
-- To set a field as default NULL: -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name SET DEFAULT NULL;
-- Note: fields with type BLOB/TEXT can't have default value.
-- To rebuild sequence for postgresql after insert by forcing id autoincrement fields:
-- -- VPGSQL8.2 SELECT dol_util_rebuild_sequences();
-- Missing in v14 or lower
-- v15

View File

@ -0,0 +1,21 @@
-- Copyright (C) 2021 EOXIA <dev@eoxia.com>
--
-- This 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 https://www.gnu.org/licenses/.
ALTER TABLE llx_categorie_ticket ADD PRIMARY KEY pk_categorie_ticket (fk_categorie, fk_ticket);
ALTER TABLE llx_categorie_ticket ADD INDEX idx_categorie_ticket_fk_categorie (fk_categorie);
ALTER TABLE llx_categorie_ticket ADD INDEX idx_categorie_ticket_fk_ticket (fk_ticket);
ALTER TABLE llx_categorie_ticket ADD CONSTRAINT fk_categorie_ticket_categorie_rowid FOREIGN KEY (fk_categorie) REFERENCES llx_categorie (rowid);
ALTER TABLE llx_categorie_ticket ADD CONSTRAINT fk_categorie_ticket_ticket_rowid FOREIGN KEY (fk_ticket) REFERENCES llx_ticket (rowid);

View File

@ -0,0 +1,21 @@
-- Copyright (C) 2021 EOXIA <dev@eoxia.com>
--
-- This 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 https://www.gnu.org/licenses/.
create table llx_categorie_ticket
(
fk_categorie integer NOT NULL,
fk_ticket integer NOT NULL,
import_key varchar(14)
)ENGINE=innodb;

View File

@ -86,7 +86,7 @@ create table llx_facture
fk_incoterms integer, -- for incoterms fk_incoterms integer, -- for incoterms
location_incoterms varchar(255), -- for incoterms location_incoterms varchar(255), -- for incoterms
fk_mode_transport integer, -- for intracomm report fk_transport_mode integer, -- for intracomm report
situation_cycle_ref smallint, -- situation cycle reference situation_cycle_ref smallint, -- situation cycle reference
situation_counter smallint, -- situation counter situation_counter smallint, -- situation counter

View File

@ -74,7 +74,7 @@ create table llx_facture_fourn
fk_incoterms integer, -- for incoterms fk_incoterms integer, -- for incoterms
location_incoterms varchar(255), -- for incoterms location_incoterms varchar(255), -- for incoterms
fk_mode_transport integer, -- for intracomm report fk_transport_mode integer, -- for intracomm report
model_pdf varchar(255), model_pdf varchar(255),
last_main_doc varchar(255), -- relative filepath+filename of last main generated document last_main_doc varchar(255), -- relative filepath+filename of last main generated document

View File

@ -0,0 +1,31 @@
-- ===================================================================
-- Copyright (C) 2021 Laurent Destailleur <eldy@users.sourceforge.net>
--
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 3 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program. If not, see <https://www.gnu.org/licenses/>.
--
-- Table of with online signatures
-- ===================================================================
create table llx_onlinesignature
(
rowid integer AUTO_INCREMENT PRIMARY KEY,
entity integer DEFAULT 1 NOT NULL,
object_type varchar(32) NOT NULL,
object_id integer NOT NULL,
datec datetime NOT NULL,
tms timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
name varchar(255) NOT NULL,
ip varchar(128),
pathoffile varchar(255)
)ENGINE=innodb;

View File

@ -0,0 +1,21 @@
-- ===================================================================
-- Copyright (C) 2012 Laurent Destailleur <eldy@users.sourceforge.net>
-- Copyright (C) 2016 Regis Houssin <regis.houssin@inodbox.com>
--
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- 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 <https://www.gnu.org/licenses/>.
--
-- ===================================================================
ALTER TABLE llx_partnership ADD INDEX idx_partnership_entity (entity);
ALTER TABLE llx_partnership ADD UNIQUE INDEX uk_partnership_ref (ref, entity);

View File

@ -0,0 +1,40 @@
-- ===================================================================
-- Copyright (C) 2004 Laurent Destailleur <eldy@users.sourceforge.net>
--
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 3 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program. If not, see <https://www.gnu.org/licenses/>.
--
-- ===================================================================
CREATE TABLE llx_partnership(
rowid integer AUTO_INCREMENT PRIMARY KEY NOT NULL,
ref varchar(128) DEFAULT '(PROV)' NOT NULL,
status smallint NOT NULL DEFAULT '0',
fk_soc integer,
fk_member integer,
date_partnership_start date NOT NULL,
date_partnership_end date NOT NULL,
entity integer DEFAULT 1 NOT NULL, -- multi company id, 0 = all
reason_decline_or_cancel text NULL,
date_creation datetime NOT NULL,
fk_user_creat integer NOT NULL,
tms timestamp,
fk_user_modif integer,
note_private text,
note_public text,
last_main_doc varchar(255),
count_last_url_check_error integer DEFAULT '0',
last_check_backlink datetime NULL,
import_key varchar(14),
model_pdf varchar(255)
) ENGINE=innodb;

View File

@ -0,0 +1,20 @@
-- ===================================================================
-- Copyright (C) 2019 Alexandre Spangaro <aspangaro@open-dsi.fr>
--
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 3 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program. If not, see <https://www.gnu.org/licenses/>.
--
-- ===================================================================
ALTER TABLE llx_partnership_extrafields ADD INDEX idx_partnership_extrafields (fk_object);

View File

@ -0,0 +1,25 @@
-- ===================================================================
-- Copyright (C) 2019 Alexandre Spangaro <aspangaro@open-dsi.fr>
--
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 3 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program. If not, see <https://www.gnu.org/licenses/>.
--
-- ===================================================================
create table llx_partnership_extrafields
(
rowid integer AUTO_INCREMENT PRIMARY KEY,
tms timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
fk_object integer NOT NULL, -- salary payment id
import_key varchar(14) -- import key
)ENGINE=innodb;

View File

@ -531,39 +531,48 @@ if (!$error && $db->connected && $action == "set") {
if ($db->connected) { if ($db->connected) {
$resultbis = 1; $resultbis = 1;
// Create user if (empty($dolibarr_main_db_pass)) {
$result = $db->DDLCreateUser($dolibarr_main_db_host, $dolibarr_main_db_user, $dolibarr_main_db_pass, $dolibarr_main_db_name); dolibarr_install_syslog("step1: failed to create user, password is empty", LOG_ERR);
// Create user bis
if ($databasefortest == 'mysql') {
if (!in_array($dolibarr_main_db_host, array('127.0.0.1', '::1', 'localhost', 'localhost.local'))) {
$resultbis = $db->DDLCreateUser('%', $dolibarr_main_db_user, $dolibarr_main_db_pass, $dolibarr_main_db_name);
}
}
if ($result > 0 && $resultbis > 0) {
print '<tr><td>'; print '<tr><td>';
print $langs->trans("UserCreation").' : '; print $langs->trans("UserCreation").' : ';
print $dolibarr_main_db_user; print $dolibarr_main_db_user;
print '</td>'; print '</td>';
print '<td><img src="../theme/eldy/img/tick.png" alt="Ok"></td></tr>'; print '<td>'.$langs->trans("Error").": A password for database user is mandatory.</td></tr>";
} else { } else {
if ($db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS' // Create user
|| $db->errno() == 'DB_ERROR_KEY_NAME_ALREADY_EXISTS' $result = $db->DDLCreateUser($dolibarr_main_db_host, $dolibarr_main_db_user, $dolibarr_main_db_pass, $dolibarr_main_db_name);
|| $db->errno() == 'DB_ERROR_USER_ALREADY_EXISTS') {
dolibarr_install_syslog("step1: user already exists"); // Create user bis
if ($databasefortest == 'mysql') {
if (!in_array($dolibarr_main_db_host, array('127.0.0.1', '::1', 'localhost', 'localhost.local'))) {
$resultbis = $db->DDLCreateUser('%', $dolibarr_main_db_user, $dolibarr_main_db_pass, $dolibarr_main_db_name);
}
}
if ($result > 0 && $resultbis > 0) {
print '<tr><td>'; print '<tr><td>';
print $langs->trans("UserCreation").' : '; print $langs->trans("UserCreation").' : ';
print $dolibarr_main_db_user; print $dolibarr_main_db_user;
print '</td>'; print '</td>';
print '<td>'.$langs->trans("LoginAlreadyExists").'</td></tr>'; print '<td><img src="../theme/eldy/img/tick.png" alt="Ok"></td></tr>';
} else { } else {
dolibarr_install_syslog("step1: failed to create user", LOG_ERR); if ($db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS'
print '<tr><td>'; || $db->errno() == 'DB_ERROR_KEY_NAME_ALREADY_EXISTS'
print $langs->trans("UserCreation").' : '; || $db->errno() == 'DB_ERROR_USER_ALREADY_EXISTS') {
print $dolibarr_main_db_user; dolibarr_install_syslog("step1: user already exists");
print '</td>'; print '<tr><td>';
print '<td>'.$langs->trans("Error").': '.$db->errno().' '.$db->error().($db->error ? '. '.$db->error : '')."</td></tr>"; print $langs->trans("UserCreation").' : ';
print $dolibarr_main_db_user;
print '</td>';
print '<td>'.$langs->trans("LoginAlreadyExists").'</td></tr>';
} else {
dolibarr_install_syslog("step1: failed to create user", LOG_ERR);
print '<tr><td>';
print $langs->trans("UserCreation").' : ';
print $dolibarr_main_db_user;
print '</td>';
print '<td>'.$langs->trans("Error").': '.$db->errno().' '.$db->error().($db->error ? '. '.$db->error : '')."</td></tr>";
}
} }
} }

View File

@ -53,6 +53,7 @@ InternalUser=Internal user
ExternalUser=External user ExternalUser=External user
InternalUsers=Internal users InternalUsers=Internal users
ExternalUsers=External users ExternalUsers=External users
UserInterface=User interface
GUISetup=Display GUISetup=Display
SetupArea=Setup SetupArea=Setup
UploadNewTemplate=Upload new template(s) UploadNewTemplate=Upload new template(s)
@ -1260,8 +1261,8 @@ YourPHPDoesNotHaveSSLSupport=SSL functions not available in your PHP
DownloadMoreSkins=More skins to download DownloadMoreSkins=More skins to download
SimpleNumRefModelDesc=Returns the reference number in the format %syymm-nnnn where yy is the year, mm is the month and nnnn is a sequential auto-incrementing number with no reset SimpleNumRefModelDesc=Returns the reference number in the format %syymm-nnnn where yy is the year, mm is the month and nnnn is a sequential auto-incrementing number with no reset
SimpleNumRefNoDateModelDesc=Returns the reference number in the format %s-nnnn where nnnn is a sequential auto-incrementing number with no reset SimpleNumRefNoDateModelDesc=Returns the reference number in the format %s-nnnn where nnnn is a sequential auto-incrementing number with no reset
ShowProfIdInAddress=Show professional id with addresses ShowProfIdInAddress=Show professional ID with addresses
ShowVATIntaInAddress=Hide intra-Community VAT number with addresses ShowVATIntaInAddress=Hide intra-Community VAT number
TranslationUncomplete=Partial translation TranslationUncomplete=Partial translation
MAIN_DISABLE_METEO=Disable meteorological view MAIN_DISABLE_METEO=Disable meteorological view
MeteoStdMod=Standard mode MeteoStdMod=Standard mode
@ -1778,7 +1779,7 @@ ClickToDialSetup=Click To Dial module setup
ClickToDialUrlDesc=Url called when a click on phone picto is done. In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card). ClickToDialUrlDesc=Url called when a click on phone picto is done. In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
ClickToDialDesc=This module change phone numbers, when using a desktop computer, into clickable links. A click will call the number. This can be used to start the phone call when using a soft phone on your desktop or when using a CTI system based on SIP protocol for example. Note: When using a smartphone, phone numbers are always clickable. ClickToDialDesc=This module change phone numbers, when using a desktop computer, into clickable links. A click will call the number. This can be used to start the phone call when using a soft phone on your desktop or when using a CTI system based on SIP protocol for example. Note: When using a smartphone, phone numbers are always clickable.
ClickToDialUseTelLink=Use just a link "tel:" on phone numbers ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field. ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface, installed on the same computer as the browser, and called when you click on a link starting with "tel:" in your browser. If you need link that start with "sip:" or a full server solution (no need of local software installation), you must set this to "No" and fill next field.
##### Point Of Sale (CashDesk) ##### ##### Point Of Sale (CashDesk) #####
CashDesk=Point of Sale CashDesk=Point of Sale
CashDeskSetup=Point of Sales module setup CashDeskSetup=Point of Sales module setup
@ -2133,7 +2134,8 @@ IfCLINotRequiredYouShouldDisablePHPFunctions=Except if you need to run system co
PHPFunctionsRequiredForCLI=For shell purpose (like scheduled job backup or running an anitivurs program), you must keep PHP functions PHPFunctionsRequiredForCLI=For shell purpose (like scheduled job backup or running an anitivurs program), you must keep PHP functions
NoWritableFilesFoundIntoRootDir=No writable files or directories of the common programs were found into your root directory (Good) NoWritableFilesFoundIntoRootDir=No writable files or directories of the common programs were found into your root directory (Good)
RecommendedValueIs=Recommended: %s RecommendedValueIs=Recommended: %s
NotRecommended=Not recommanded Recommended=Recommended
NotRecommended=Not recommended
ARestrictedPath=A restricted path ARestrictedPath=A restricted path
CheckForModuleUpdate=Check for external modules updates CheckForModuleUpdate=Check for external modules updates
CheckForModuleUpdateHelp=This action will connect to editors of external modules to check if a new version is available. CheckForModuleUpdateHelp=This action will connect to editors of external modules to check if a new version is available.
@ -2144,3 +2146,5 @@ YouEnableDeprecatedWSAPIsUseRESTAPIsInstead=You enabled deprecated WS API. You s
RandomlySelectedIfSeveral=Randomly selected if several pictures are available RandomlySelectedIfSeveral=Randomly selected if several pictures are available
DatabasePasswordObfuscated=Database password is obfuscated in conf file DatabasePasswordObfuscated=Database password is obfuscated in conf file
DatabasePasswordNotObfuscated=Database password is NOT obfuscated in conf file DatabasePasswordNotObfuscated=Database password is NOT obfuscated in conf file
APIsAreNotEnabled=APIs modules are not enabled
YouShouldSetThisToOff=You should set this to 0 or off

View File

@ -115,7 +115,7 @@ TransferTo=To
TransferFromToDone=A transfer from <b>%s</b> to <b>%s</b> of <b>%s</b> %s has been recorded. TransferFromToDone=A transfer from <b>%s</b> to <b>%s</b> of <b>%s</b> %s has been recorded.
CheckTransmitter=Sender CheckTransmitter=Sender
ValidateCheckReceipt=Validate this check receipt? ValidateCheckReceipt=Validate this check receipt?
ConfirmValidateCheckReceipt=Are you sure that you want to submit this check receipt for validation? No changes are possible it's done. ConfirmValidateCheckReceipt=Are you sure that you want to submit this check receipt for validation? No changes will be possible once validated.
DeleteCheckReceipt=Delete this check receipt? DeleteCheckReceipt=Delete this check receipt?
ConfirmDeleteCheckReceipt=Are you sure you want to delete this check receipt? ConfirmDeleteCheckReceipt=Are you sure you want to delete this check receipt?
BankChecks=Bank checks BankChecks=Bank checks

View File

@ -91,8 +91,8 @@ BoxTitleLatestModifiedSupplierOrders=Vendor Orders: last %s modified
BoxTitleLastModifiedCustomerBills=Customer Invoices: last %s modified BoxTitleLastModifiedCustomerBills=Customer Invoices: last %s modified
BoxTitleLastModifiedCustomerOrders=Sales Orders: last %s modified BoxTitleLastModifiedCustomerOrders=Sales Orders: last %s modified
BoxTitleLastModifiedPropals=Latest %s modified proposals BoxTitleLastModifiedPropals=Latest %s modified proposals
BoxTitleLatestModifiedJobPositions=Latest %s modified jobs BoxTitleLatestModifiedJobPositions=Latest %s modified job positions
BoxTitleLatestModifiedCandidatures=Latest %s modified candidatures BoxTitleLatestModifiedCandidatures=Latest %s modified job applications
ForCustomersInvoices=Customers invoices ForCustomersInvoices=Customers invoices
ForCustomersOrders=Customers orders ForCustomersOrders=Customers orders
ForProposals=Proposals ForProposals=Proposals

View File

@ -127,4 +127,4 @@ AllowDelayedPayment=Allow delayed payment
PrintPaymentMethodOnReceipts=Print payment method on tickets|receipts PrintPaymentMethodOnReceipts=Print payment method on tickets|receipts
WeighingScale=Weighing scale WeighingScale=Weighing scale
ShowPriceHT = Display the column with the price excluding tax (on screen) ShowPriceHT = Display the column with the price excluding tax (on screen)
ShowPriceHTOnReceipt = Display the column with the price excluding tax (on receipt) ShowPriceHTOnReceipt = Display the column with the price excluding tax (on the receipt)

View File

@ -301,3 +301,4 @@ ErrorActionCommPropertyUserowneridNotDefined=User's owner is required
ErrorActionCommBadType=Selected event type (id: %n, code: %s) do not exist in Event Type dictionary ErrorActionCommBadType=Selected event type (id: %n, code: %s) do not exist in Event Type dictionary
CheckVersionFail=Version check fail CheckVersionFail=Version check fail
ErrorWrongFileName=Name of the file cannot have __SOMETHING__ in it ErrorWrongFileName=Name of the file cannot have __SOMETHING__ in it
ErrorNotInDictionaryPaymentConditions=Not in Payment Terms Dictionary, please modify.

View File

@ -86,6 +86,7 @@ DownloadICSLink = Download ICS link
EVENTORGANIZATION_SECUREKEY = Secure Key of the public registration link to a conference 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 SERVICE_BOOTH_LOCATION = Service used for the invoice row about a booth location
SERVICE_CONFERENCE_ATTENDEE_SUBSCRIPTION = Service used for the invoice row about an attendee subscription to a conference SERVICE_CONFERENCE_ATTENDEE_SUBSCRIPTION = Service used for the invoice row about an attendee subscription to a conference
NbVotes=Number of votes
# #
# Status # Status
# #
@ -115,6 +116,9 @@ EvntOrgDuration = This conference starts on %s and ends on %s.
ConferenceAttendeeFee = Conference attendee fee for the event : '%s' occurring from %s to %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 BoothLocationFee = Booth location for the event : '%s' occurring from %s to %s
EventType = Event type EventType = Event type
LabelOfBooth=Booth label
LabelOfconference=Conference label
ConferenceIsNotConfirmed=Subcription not available, conference is not confirmed yet
# #
# Vote page # Vote page

View File

@ -206,6 +206,7 @@ MigrationUserPhotoPath=Migration of photo paths for users
MigrationFieldsSocialNetworks=Migration of users fields social networks (%s) MigrationFieldsSocialNetworks=Migration of users fields social networks (%s)
MigrationReloadModule=Reload module %s MigrationReloadModule=Reload module %s
MigrationResetBlockedLog=Reset module BlockedLog for v7 algorithm MigrationResetBlockedLog=Reset module BlockedLog for v7 algorithm
MigrationImportOrExportProfiles=Migration of import or export profiles (%s)
ShowNotAvailableOptions=Show unavailable options ShowNotAvailableOptions=Show unavailable options
HideNotAvailableOptions=Hide unavailable options HideNotAvailableOptions=Hide unavailable options
ErrorFoundDuringMigration=Error(s) were reported during the migration process so next step is not available. To ignore errors, you can <a href="%s">click here</a>, but the application or some features may not work correctly until the errors are resolved. ErrorFoundDuringMigration=Error(s) were reported during the migration process so next step is not available. To ignore errors, you can <a href="%s">click here</a>, but the application or some features may not work correctly until the errors are resolved.

View File

@ -64,3 +64,5 @@ InterLineDuration=Line duration intervention
InterLineDesc=Line description intervention InterLineDesc=Line description intervention
RepeatableIntervention=Template of intervention RepeatableIntervention=Template of intervention
ToCreateAPredefinedIntervention=To create a predefined or recurring intervention, create a common intervention and convert it into intervention template ToCreateAPredefinedIntervention=To create a predefined or recurring intervention, create a common intervention and convert it into intervention template
Reopen=Reopen
ConfirmReopenIntervention=Are you sure you want to open back the intervention <b>%s</b>?

View File

@ -26,12 +26,10 @@ ShowLogOfMovementIfLot=Show log of movements for couple product/lot
StockDetailPerBatch=Stock detail per lot StockDetailPerBatch=Stock detail per lot
SerialNumberAlreadyInUse=Serial number %s is already used for product %s SerialNumberAlreadyInUse=Serial number %s is already used for product %s
TooManyQtyForSerialNumber=You can only have one product %s for serial number %s TooManyQtyForSerialNumber=You can only have one product %s for serial number %s
BatchLotNumberingModules=Options for automatic generation of batch products managed by lots
BatchSerialNumberingModules=Options for automatic generation of batch products managed by serial numbers
ManageLotMask=Custom mask ManageLotMask=Custom mask
CustomMasks=Adds an option to define mask in the product card CustomMasks=Option to define a different numbering mask for each product
LotProductTooltip=Adds an option in the product card to define a dedicated batch number mask BatchLotNumberingModules=Numbering rule for automatic generation of lot number
SNProductTooltip=Adds an option in the product card to define a dedicated serial number mask BatchSerialNumberingModules=Numbering rule for automatic generation of serial number (for products with property 1 unique lot/serial for each product)
QtyToAddAfterBarcodeScan=Qty to add for each barcode/lot/serial scanned QtyToAddAfterBarcodeScan=Qty to add for each barcode/lot/serial scanned
LifeTime=Life span (in days) LifeTime=Life span (in days)
EndOfLife=End of life EndOfLife=End of life

View File

@ -277,7 +277,7 @@ PriceByCustomer=Different prices for each customer
PriceCatalogue=A single sell price per product/service PriceCatalogue=A single sell price per product/service
PricingRule=Rules for selling prices PricingRule=Rules for selling prices
AddCustomerPrice=Add price by customer AddCustomerPrice=Add price by customer
ForceUpdateChildPriceSoc=Set same price on customer subsidiaries ForceUpdateChildPriceSoc=Set same price on customer's subsidiaries
PriceByCustomerLog=Log of previous customer prices PriceByCustomerLog=Log of previous customer prices
MinimumPriceLimit=Minimum price can't be lower then %s MinimumPriceLimit=Minimum price can't be lower then %s
MinimumRecommendedPrice=Minimum recommended price is: %s MinimumRecommendedPrice=Minimum recommended price is: %s
@ -296,6 +296,7 @@ ComposedProductIncDecStock=Increase/Decrease stock on parent change
ComposedProduct=Child products ComposedProduct=Child products
MinSupplierPrice=Minimum buying price MinSupplierPrice=Minimum buying price
MinCustomerPrice=Minimum selling price MinCustomerPrice=Minimum selling price
NoDynamicPrice=No dynamic price
DynamicPriceConfiguration=Dynamic price configuration DynamicPriceConfiguration=Dynamic price configuration
DynamicPriceDesc=You may define mathematical formulae to calculate Customer or Vendor prices. Such formulas can use all mathematical operators, some constants and variables. You can define here the variables you wish to use. If the variable needs an automatic update, you may define the external URL to allow Dolibarr to update the value automatically. DynamicPriceDesc=You may define mathematical formulae to calculate Customer or Vendor prices. Such formulas can use all mathematical operators, some constants and variables. You can define here the variables you wish to use. If the variable needs an automatic update, you may define the external URL to allow Dolibarr to update the value automatically.
AddVariable=Add Variable AddVariable=Add Variable

View File

@ -2,20 +2,23 @@
SALARIES_ACCOUNTING_ACCOUNT_PAYMENT=Accounting account used for user third parties SALARIES_ACCOUNTING_ACCOUNT_PAYMENT=Accounting account used for user third parties
SALARIES_ACCOUNTING_ACCOUNT_PAYMENT_Desc=The dedicated accounting account defined on user card will be used for Subledger accounting only. This one will be used for General Ledger and as default value of Subledger accounting if dedicated user accounting account on user is not defined. SALARIES_ACCOUNTING_ACCOUNT_PAYMENT_Desc=The dedicated accounting account defined on user card will be used for Subledger accounting only. This one will be used for General Ledger and as default value of Subledger accounting if dedicated user accounting account on user is not defined.
SALARIES_ACCOUNTING_ACCOUNT_CHARGE=Accounting account by default for wage payments SALARIES_ACCOUNTING_ACCOUNT_CHARGE=Accounting account by default for wage payments
CREATE_NEW_SALARY_WITHOUT_AUTO_PAYMENT=By default, leave empty the option "Automatically create a total payment" when creating a Salary
Salary=Salary Salary=Salary
Salaries=Salaries Salaries=Salaries
NewSalaryPayment=New salary payment NewSalary=New salary
NewSalaryPayment=New salary card
AddSalaryPayment=Add salary payment AddSalaryPayment=Add salary payment
SalaryPayment=Salary payment SalaryPayment=Salary payment
SalariesPayments=Salaries payments SalariesPayments=Salaries payments
SalariesPaymentsOf=Salaries payments of %s
ShowSalaryPayment=Show salary payment ShowSalaryPayment=Show salary payment
THM=Average hourly rate THM=Average hourly rate
TJM=Average daily rate TJM=Average daily rate
CurrentSalary=Current salary CurrentSalary=Current salary
THMDescription=This value may be used to calculate the cost of time consumed on a project entered by users if module project is used THMDescription=This value may be used to calculate the cost of time consumed on a project entered by users if module project is used
TJMDescription=This value is currently for information only and is not used for any calculation TJMDescription=This value is currently for information only and is not used for any calculation
LastSalaries=Latest %s salary payments LastSalaries=Latest %s salaries
AllSalaries=All salary payments AllSalaries=All salaries
SalariesStatistics=Salary statistics SalariesStatistics=Salary statistics
# Export
SalariesAndPayments=Salaries and payments SalariesAndPayments=Salaries and payments
ConfirmDeleteSalaryPayment=Do you want to delete this salary payment ?

View File

@ -34,7 +34,8 @@ TicketDictResolution=Ticket - Resolution
TicketTypeShortCOM=Commercial question TicketTypeShortCOM=Commercial question
TicketTypeShortHELP=Request for functionnal help TicketTypeShortHELP=Request for functionnal help
TicketTypeShortISSUE=Issue, bug or problem TicketTypeShortISSUE=Issue or bug
TicketTypeShortPROBLEM=Problem
TicketTypeShortREQUEST=Change or enhancement request TicketTypeShortREQUEST=Change or enhancement request
TicketTypeShortPROJET=Project TicketTypeShortPROJET=Project
TicketTypeShortOTHER=Other TicketTypeShortOTHER=Other
@ -54,14 +55,15 @@ TypeContact_ticket_internal_SUPPORTTEC=Assigned user
TypeContact_ticket_external_SUPPORTCLI=Customer contact / incident tracking TypeContact_ticket_external_SUPPORTCLI=Customer contact / incident tracking
TypeContact_ticket_external_CONTRIBUTOR=External contributor TypeContact_ticket_external_CONTRIBUTOR=External contributor
OriginEmail=Email source OriginEmail=Reporter Email
Notify_TICKET_SENTBYMAIL=Send ticket message by email Notify_TICKET_SENTBYMAIL=Send ticket message by email
# Status # Status
Read=Read Read=Read
Assigned=Assigned Assigned=Assigned
InProgress=In progress InProgress=In progress
NeedMoreInformation=Waiting for information NeedMoreInformation=Waiting for reporter feedback
NeedMoreInformationShort=Waiting for feedback
Answered=Answered Answered=Answered
Waiting=Waiting Waiting=Waiting
Closed=Closed Closed=Closed
@ -160,7 +162,7 @@ CreatedBy=Created by
NewTicket=New Ticket NewTicket=New Ticket
SubjectAnswerToTicket=Ticket answer SubjectAnswerToTicket=Ticket answer
TicketTypeRequest=Request type TicketTypeRequest=Request type
TicketCategory=Group TicketCategory=Ticket categorization
SeeTicket=See ticket SeeTicket=See ticket
TicketMarkedAsRead=Ticket has been marked as read TicketMarkedAsRead=Ticket has been marked as read
TicketReadOn=Read on TicketReadOn=Read on
@ -211,6 +213,7 @@ TicketMessageHelp=Only this text will be saved in the message list on ticket car
TicketMessageSubstitutionReplacedByGenericValues=Substitutions variables are replaced by generic values. TicketMessageSubstitutionReplacedByGenericValues=Substitutions variables are replaced by generic values.
TimeElapsedSince=Time elapsed since TimeElapsedSince=Time elapsed since
TicketTimeToRead=Time elapsed before read TicketTimeToRead=Time elapsed before read
TicketTimeElapsedBeforeSince=Time elapsed before / since
TicketContacts=Contacts ticket TicketContacts=Contacts ticket
TicketDocumentsLinked=Documents linked to ticket TicketDocumentsLinked=Documents linked to ticket
ConfirmReOpenTicket=Confirm reopen this ticket ? ConfirmReOpenTicket=Confirm reopen this ticket ?

View File

@ -97,8 +97,8 @@ LoginToCreate=Login to create
NameToCreate=Name of third party to create NameToCreate=Name of third party to create
YourRole=Your roles YourRole=Your roles
YourQuotaOfUsersIsReached=Your quota of active users is reached ! YourQuotaOfUsersIsReached=Your quota of active users is reached !
NbOfUsers=No. of users NbOfUsers=Number of users
NbOfPermissions=No. of permissions NbOfPermissions=Number of permissions
DontDowngradeSuperAdmin=Only a superadmin can downgrade a superadmin DontDowngradeSuperAdmin=Only a superadmin can downgrade a superadmin
HierarchicalResponsible=Supervisor HierarchicalResponsible=Supervisor
HierarchicView=Hierarchical view HierarchicView=Hierarchical view

View File

@ -31,7 +31,7 @@ AddWebsite=Add website
Webpage=Web page/container Webpage=Web page/container
AddPage=Add page/container AddPage=Add page/container
PageContainer=Page PageContainer=Page
PreviewOfSiteNotYetAvailable=Preview of your website <strong>%s</strong> not yet available. You must first '<strong>Import a full website template</strong>' or just '<strong>Add a page/container</strong>'. PreviewOfSiteNotYetAvailable=The preview of your website <strong>%s</strong> is not yet available. You must first '<strong>Import a full website template</strong>' or just '<strong>Add a page/container</strong>'.
RequestedPageHasNoContentYet=Requested page with id %s has no content yet, or cache file .tpl.php was removed. Edit content of the page to solve this. RequestedPageHasNoContentYet=Requested page with id %s has no content yet, or cache file .tpl.php was removed. Edit content of the page to solve this.
SiteDeleted=Web site '%s' deleted SiteDeleted=Web site '%s' deleted
PageContent=Page/Contenair PageContent=Page/Contenair

View File

@ -49,3 +49,4 @@ Permission81=قراءة أوامر الشراء
MailToSendInvoice=فواتير العميل MailToSendInvoice=فواتير العميل
MailToSendSupplierOrder=أوامر الشراء MailToSendSupplierOrder=أوامر الشراء
MailToSendSupplierInvoice=فواتير المورد MailToSendSupplierInvoice=فواتير المورد
Recommended=موصى به

View File

@ -1,2 +0,0 @@
# Dolibarr language file - Source file is en_US - products
ForceUpdateChildPriceSoc=Set same price on customer subsidiaries

View File

@ -1,4 +1,3 @@
# Dolibarr language file - Source file is en_US - ticket # Dolibarr language file - Source file is en_US - ticket
Closed=مقفول Closed=مقفول
TicketSettings=الإعدادات TicketSettings=الإعدادات
TicketCategory=Group

View File

@ -9,4 +9,3 @@ WEBSITE_ALIASALT=أسماء الصفحات / الأسماء المستعارة
WEBSITE_ALIASALTDesc=استخدم هنا قائمة بأسماء / أسماء مستعارة أخرى بحيث يمكن الوصول إلى الصفحة أيضًا باستخدام هذه الأسماء / الأسماء المستعارة الأخرى (على سبيل المثال ، الاسم القديم بعد إعادة تسمية الاسم المستعار للحفاظ على الرابط الخلفي في عمل الرابط / الاسم القديم). النحو هو: <br> Alternativename1 ، و Alternativename2 ، ... WEBSITE_ALIASALTDesc=استخدم هنا قائمة بأسماء / أسماء مستعارة أخرى بحيث يمكن الوصول إلى الصفحة أيضًا باستخدام هذه الأسماء / الأسماء المستعارة الأخرى (على سبيل المثال ، الاسم القديم بعد إعادة تسمية الاسم المستعار للحفاظ على الرابط الخلفي في عمل الرابط / الاسم القديم). النحو هو: <br> Alternativename1 ، و Alternativename2 ، ...
WEBSITE_CSS_URL=عنوان URL لملف CSS الخارجي WEBSITE_CSS_URL=عنوان URL لملف CSS الخارجي
WEBSITE_CSS_INLINE=محتوى ملف CSS (مشترك لجميع الصفحات) WEBSITE_CSS_INLINE=محتوى ملف CSS (مشترك لجميع الصفحات)
PreviewOfSiteNotYetAvailable=Preview of your website <strong>%s</strong> not yet available. You must first '<strong>Import a full website template</strong>' or just '<strong>Add a page/container</strong>'.

View File

@ -53,6 +53,7 @@ InternalUser=Internal user
ExternalUser=External user ExternalUser=External user
InternalUsers=Internal users InternalUsers=Internal users
ExternalUsers=External users ExternalUsers=External users
UserInterface=User interface
GUISetup=Display GUISetup=Display
SetupArea=Setup SetupArea=Setup
UploadNewTemplate=Upload new template(s) UploadNewTemplate=Upload new template(s)
@ -1260,8 +1261,8 @@ YourPHPDoesNotHaveSSLSupport=SSL functions not available in your PHP
DownloadMoreSkins=More skins to download DownloadMoreSkins=More skins to download
SimpleNumRefModelDesc=Returns the reference number in the format %syymm-nnnn where yy is the year, mm is the month and nnnn is a sequential auto-incrementing number with no reset SimpleNumRefModelDesc=Returns the reference number in the format %syymm-nnnn where yy is the year, mm is the month and nnnn is a sequential auto-incrementing number with no reset
SimpleNumRefNoDateModelDesc=Returns the reference number in the format %s-nnnn where nnnn is a sequential auto-incrementing number with no reset SimpleNumRefNoDateModelDesc=Returns the reference number in the format %s-nnnn where nnnn is a sequential auto-incrementing number with no reset
ShowProfIdInAddress=Show professional id with addresses ShowProfIdInAddress=Show professional ID with addresses
ShowVATIntaInAddress=Hide intra-Community VAT number with addresses ShowVATIntaInAddress=Hide intra-Community VAT number
TranslationUncomplete=Partial translation TranslationUncomplete=Partial translation
MAIN_DISABLE_METEO=Disable meteorological view MAIN_DISABLE_METEO=Disable meteorological view
MeteoStdMod=Standard mode MeteoStdMod=Standard mode
@ -1778,7 +1779,7 @@ ClickToDialSetup=Click To Dial module setup
ClickToDialUrlDesc=Url called when a click on phone picto is done. In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card). ClickToDialUrlDesc=Url called when a click on phone picto is done. In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
ClickToDialDesc=This module change phone numbers, when using a desktop computer, into clickable links. A click will call the number. This can be used to start the phone call when using a soft phone on your desktop or when using a CTI system based on SIP protocol for example. Note: When using a smartphone, phone numbers are always clickable. ClickToDialDesc=This module change phone numbers, when using a desktop computer, into clickable links. A click will call the number. This can be used to start the phone call when using a soft phone on your desktop or when using a CTI system based on SIP protocol for example. Note: When using a smartphone, phone numbers are always clickable.
ClickToDialUseTelLink=Use just a link "tel:" on phone numbers ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field. ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface, installed on the same computer as the browser, and called when you click on a link starting with "tel:" in your browser. If you need link that start with "sip:" or a full server solution (no need of local software installation), you must set this to "No" and fill next field.
##### Point Of Sale (CashDesk) ##### ##### Point Of Sale (CashDesk) #####
CashDesk=Point of Sale CashDesk=Point of Sale
CashDeskSetup=Point of Sales module setup CashDeskSetup=Point of Sales module setup
@ -2133,7 +2134,8 @@ IfCLINotRequiredYouShouldDisablePHPFunctions=Except if you need to run system co
PHPFunctionsRequiredForCLI=For shell purpose (like scheduled job backup or running an anitivurs program), you must keep PHP functions PHPFunctionsRequiredForCLI=For shell purpose (like scheduled job backup or running an anitivurs program), you must keep PHP functions
NoWritableFilesFoundIntoRootDir=No writable files or directories of the common programs were found into your root directory (Good) NoWritableFilesFoundIntoRootDir=No writable files or directories of the common programs were found into your root directory (Good)
RecommendedValueIs=Recommended: %s RecommendedValueIs=Recommended: %s
NotRecommended=Not recommanded Recommended=Recommended
NotRecommended=Not recommended
ARestrictedPath=A restricted path ARestrictedPath=A restricted path
CheckForModuleUpdate=Check for external modules updates CheckForModuleUpdate=Check for external modules updates
CheckForModuleUpdateHelp=This action will connect to editors of external modules to check if a new version is available. CheckForModuleUpdateHelp=This action will connect to editors of external modules to check if a new version is available.
@ -2144,3 +2146,5 @@ YouEnableDeprecatedWSAPIsUseRESTAPIsInstead=You enabled deprecated WS API. You s
RandomlySelectedIfSeveral=Randomly selected if several pictures are available RandomlySelectedIfSeveral=Randomly selected if several pictures are available
DatabasePasswordObfuscated=Database password is obfuscated in conf file DatabasePasswordObfuscated=Database password is obfuscated in conf file
DatabasePasswordNotObfuscated=Database password is NOT obfuscated in conf file DatabasePasswordNotObfuscated=Database password is NOT obfuscated in conf file
APIsAreNotEnabled=APIs modules are not enabled
YouShouldSetThisToOff=You should set this to 0 or off

View File

@ -115,7 +115,7 @@ TransferTo=To
TransferFromToDone=A transfer from <b>%s</b> to <b>%s</b> of <b>%s</b> %s has been recorded. TransferFromToDone=A transfer from <b>%s</b> to <b>%s</b> of <b>%s</b> %s has been recorded.
CheckTransmitter=Sender CheckTransmitter=Sender
ValidateCheckReceipt=Validate this check receipt? ValidateCheckReceipt=Validate this check receipt?
ConfirmValidateCheckReceipt=Are you sure that you want to submit this check receipt for validation? No changes are possible it's done. ConfirmValidateCheckReceipt=Are you sure that you want to submit this check receipt for validation? No changes will be possible once validated.
DeleteCheckReceipt=Delete this check receipt? DeleteCheckReceipt=Delete this check receipt?
ConfirmDeleteCheckReceipt=Are you sure you want to delete this check receipt? ConfirmDeleteCheckReceipt=Are you sure you want to delete this check receipt?
BankChecks=Bank checks BankChecks=Bank checks

View File

@ -91,8 +91,8 @@ BoxTitleLatestModifiedSupplierOrders=Vendor Orders: last %s modified
BoxTitleLastModifiedCustomerBills=Customer Invoices: last %s modified BoxTitleLastModifiedCustomerBills=Customer Invoices: last %s modified
BoxTitleLastModifiedCustomerOrders=Sales Orders: last %s modified BoxTitleLastModifiedCustomerOrders=Sales Orders: last %s modified
BoxTitleLastModifiedPropals=Latest %s modified proposals BoxTitleLastModifiedPropals=Latest %s modified proposals
BoxTitleLatestModifiedJobPositions=Latest %s modified jobs BoxTitleLatestModifiedJobPositions=Latest %s modified job positions
BoxTitleLatestModifiedCandidatures=Latest %s modified candidatures BoxTitleLatestModifiedCandidatures=Latest %s modified job applications
ForCustomersInvoices=Customers invoices ForCustomersInvoices=Customers invoices
ForCustomersOrders=Customers orders ForCustomersOrders=Customers orders
ForProposals=Proposals ForProposals=Proposals

View File

@ -127,4 +127,4 @@ AllowDelayedPayment=Allow delayed payment
PrintPaymentMethodOnReceipts=Print payment method on tickets|receipts PrintPaymentMethodOnReceipts=Print payment method on tickets|receipts
WeighingScale=Weighing scale WeighingScale=Weighing scale
ShowPriceHT = Display the column with the price excluding tax (on screen) ShowPriceHT = Display the column with the price excluding tax (on screen)
ShowPriceHTOnReceipt = Display the column with the price excluding tax (on receipt) ShowPriceHTOnReceipt = Display the column with the price excluding tax (on the receipt)

View File

@ -301,3 +301,4 @@ ErrorActionCommPropertyUserowneridNotDefined=User's owner is required
ErrorActionCommBadType=Selected event type (id: %n, code: %s) do not exist in Event Type dictionary ErrorActionCommBadType=Selected event type (id: %n, code: %s) do not exist in Event Type dictionary
CheckVersionFail=Version check fail CheckVersionFail=Version check fail
ErrorWrongFileName=Name of the file cannot have __SOMETHING__ in it ErrorWrongFileName=Name of the file cannot have __SOMETHING__ in it
ErrorNotInDictionaryPaymentConditions=Not in Payment Terms Dictionary, please modify.

View File

@ -86,6 +86,7 @@ DownloadICSLink = Download ICS link
EVENTORGANIZATION_SECUREKEY = Secure Key of the public registration link to a conference 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 SERVICE_BOOTH_LOCATION = Service used for the invoice row about a booth location
SERVICE_CONFERENCE_ATTENDEE_SUBSCRIPTION = Service used for the invoice row about an attendee subscription to a conference SERVICE_CONFERENCE_ATTENDEE_SUBSCRIPTION = Service used for the invoice row about an attendee subscription to a conference
NbVotes=Number of votes
# #
# Status # Status
# #
@ -115,6 +116,9 @@ EvntOrgDuration = This conference starts on %s and ends on %s.
ConferenceAttendeeFee = Conference attendee fee for the event : '%s' occurring from %s to %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 BoothLocationFee = Booth location for the event : '%s' occurring from %s to %s
EventType = Event type EventType = Event type
LabelOfBooth=Booth label
LabelOfconference=Conference label
ConferenceIsNotConfirmed=Subcription not available, conference is not confirmed yet
# #
# Vote page # Vote page

View File

@ -206,6 +206,7 @@ MigrationUserPhotoPath=Migration of photo paths for users
MigrationFieldsSocialNetworks=Migration of users fields social networks (%s) MigrationFieldsSocialNetworks=Migration of users fields social networks (%s)
MigrationReloadModule=Reload module %s MigrationReloadModule=Reload module %s
MigrationResetBlockedLog=Reset module BlockedLog for v7 algorithm MigrationResetBlockedLog=Reset module BlockedLog for v7 algorithm
MigrationImportOrExportProfiles=Migration of import or export profiles (%s)
ShowNotAvailableOptions=Show unavailable options ShowNotAvailableOptions=Show unavailable options
HideNotAvailableOptions=Hide unavailable options HideNotAvailableOptions=Hide unavailable options
ErrorFoundDuringMigration=Error(s) were reported during the migration process so next step is not available. To ignore errors, you can <a href="%s">click here</a>, but the application or some features may not work correctly until the errors are resolved. ErrorFoundDuringMigration=Error(s) were reported during the migration process so next step is not available. To ignore errors, you can <a href="%s">click here</a>, but the application or some features may not work correctly until the errors are resolved.

View File

@ -26,12 +26,10 @@ ShowLogOfMovementIfLot=Show log of movements for couple product/lot
StockDetailPerBatch=Stock detail per lot StockDetailPerBatch=Stock detail per lot
SerialNumberAlreadyInUse=Serial number %s is already used for product %s SerialNumberAlreadyInUse=Serial number %s is already used for product %s
TooManyQtyForSerialNumber=You can only have one product %s for serial number %s TooManyQtyForSerialNumber=You can only have one product %s for serial number %s
BatchLotNumberingModules=Options for automatic generation of batch products managed by lots
BatchSerialNumberingModules=Options for automatic generation of batch products managed by serial numbers
ManageLotMask=Custom mask ManageLotMask=Custom mask
CustomMasks=Adds an option to define mask in the product card CustomMasks=Option to define a different numbering mask for each product
LotProductTooltip=Adds an option in the product card to define a dedicated batch number mask BatchLotNumberingModules=Numbering rule for automatic generation of lot number
SNProductTooltip=Adds an option in the product card to define a dedicated serial number mask BatchSerialNumberingModules=Numbering rule for automatic generation of serial number (for products with property 1 unique lot/serial for each product)
QtyToAddAfterBarcodeScan=Qty to add for each barcode/lot/serial scanned QtyToAddAfterBarcodeScan=Qty to add for each barcode/lot/serial scanned
LifeTime=Life span (in days) LifeTime=Life span (in days)
EndOfLife=End of life EndOfLife=End of life

View File

@ -277,7 +277,7 @@ PriceByCustomer=Different prices for each customer
PriceCatalogue=A single sell price per product/service PriceCatalogue=A single sell price per product/service
PricingRule=Rules for selling prices PricingRule=Rules for selling prices
AddCustomerPrice=Add price by customer AddCustomerPrice=Add price by customer
ForceUpdateChildPriceSoc=Set same price on customer subsidiaries ForceUpdateChildPriceSoc=Set same price on customer's subsidiaries
PriceByCustomerLog=Log of previous customer prices PriceByCustomerLog=Log of previous customer prices
MinimumPriceLimit=Minimum price can't be lower then %s MinimumPriceLimit=Minimum price can't be lower then %s
MinimumRecommendedPrice=Minimum recommended price is: %s MinimumRecommendedPrice=Minimum recommended price is: %s
@ -296,6 +296,7 @@ ComposedProductIncDecStock=Increase/Decrease stock on parent change
ComposedProduct=Child products ComposedProduct=Child products
MinSupplierPrice=Minimum buying price MinSupplierPrice=Minimum buying price
MinCustomerPrice=Minimum selling price MinCustomerPrice=Minimum selling price
NoDynamicPrice=No dynamic price
DynamicPriceConfiguration=Dynamic price configuration DynamicPriceConfiguration=Dynamic price configuration
DynamicPriceDesc=You may define mathematical formulae to calculate Customer or Vendor prices. Such formulas can use all mathematical operators, some constants and variables. You can define here the variables you wish to use. If the variable needs an automatic update, you may define the external URL to allow Dolibarr to update the value automatically. DynamicPriceDesc=You may define mathematical formulae to calculate Customer or Vendor prices. Such formulas can use all mathematical operators, some constants and variables. You can define here the variables you wish to use. If the variable needs an automatic update, you may define the external URL to allow Dolibarr to update the value automatically.
AddVariable=Add Variable AddVariable=Add Variable

View File

@ -17,8 +17,8 @@ TJM=Average daily rate
CurrentSalary=Current salary CurrentSalary=Current salary
THMDescription=This value may be used to calculate the cost of time consumed on a project entered by users if module project is used THMDescription=This value may be used to calculate the cost of time consumed on a project entered by users if module project is used
TJMDescription=This value is currently for information only and is not used for any calculation TJMDescription=This value is currently for information only and is not used for any calculation
LastSalaries=Latest %s salary payments LastSalaries=Latest %s salaries
AllSalaries=All salary payments AllSalaries=All salaries
SalariesStatistics=Salary statistics SalariesStatistics=Salary statistics
# Export
SalariesAndPayments=Salaries and payments SalariesAndPayments=Salaries and payments
ConfirmDeleteSalaryPayment=Do you want to delete this salary payment ?

View File

@ -34,7 +34,8 @@ TicketDictResolution=Ticket - Resolution
TicketTypeShortCOM=Commercial question TicketTypeShortCOM=Commercial question
TicketTypeShortHELP=Request for functionnal help TicketTypeShortHELP=Request for functionnal help
TicketTypeShortISSUE=Issue, bug or problem TicketTypeShortISSUE=Issue or bug
TicketTypeShortPROBLEM=Problem
TicketTypeShortREQUEST=Change or enhancement request TicketTypeShortREQUEST=Change or enhancement request
TicketTypeShortPROJET=Project TicketTypeShortPROJET=Project
TicketTypeShortOTHER=Other TicketTypeShortOTHER=Other
@ -54,14 +55,15 @@ TypeContact_ticket_internal_SUPPORTTEC=Assigned user
TypeContact_ticket_external_SUPPORTCLI=Customer contact / incident tracking TypeContact_ticket_external_SUPPORTCLI=Customer contact / incident tracking
TypeContact_ticket_external_CONTRIBUTOR=External contributor TypeContact_ticket_external_CONTRIBUTOR=External contributor
OriginEmail=Email source OriginEmail=Reporter Email
Notify_TICKET_SENTBYMAIL=Send ticket message by email Notify_TICKET_SENTBYMAIL=Send ticket message by email
# Status # Status
Read=Read Read=Read
Assigned=Assigned Assigned=Assigned
InProgress=In progress InProgress=In progress
NeedMoreInformation=Waiting for information NeedMoreInformation=Waiting for reporter feedback
NeedMoreInformationShort=Waiting for feedback
Answered=Answered Answered=Answered
Waiting=Waiting Waiting=Waiting
Closed=Closed Closed=Closed
@ -160,7 +162,7 @@ CreatedBy=Created by
NewTicket=New Ticket NewTicket=New Ticket
SubjectAnswerToTicket=Ticket answer SubjectAnswerToTicket=Ticket answer
TicketTypeRequest=Request type TicketTypeRequest=Request type
TicketCategory=Group TicketCategory=Ticket categorization
SeeTicket=See ticket SeeTicket=See ticket
TicketMarkedAsRead=Ticket has been marked as read TicketMarkedAsRead=Ticket has been marked as read
TicketReadOn=Read on TicketReadOn=Read on
@ -211,6 +213,7 @@ TicketMessageHelp=Only this text will be saved in the message list on ticket car
TicketMessageSubstitutionReplacedByGenericValues=Substitutions variables are replaced by generic values. TicketMessageSubstitutionReplacedByGenericValues=Substitutions variables are replaced by generic values.
TimeElapsedSince=Time elapsed since TimeElapsedSince=Time elapsed since
TicketTimeToRead=Time elapsed before read TicketTimeToRead=Time elapsed before read
TicketTimeElapsedBeforeSince=Time elapsed before / since
TicketContacts=Contacts ticket TicketContacts=Contacts ticket
TicketDocumentsLinked=Documents linked to ticket TicketDocumentsLinked=Documents linked to ticket
ConfirmReOpenTicket=Confirm reopen this ticket ? ConfirmReOpenTicket=Confirm reopen this ticket ?

View File

@ -97,8 +97,8 @@ LoginToCreate=Login to create
NameToCreate=Name of third party to create NameToCreate=Name of third party to create
YourRole=Your roles YourRole=Your roles
YourQuotaOfUsersIsReached=Your quota of active users is reached ! YourQuotaOfUsersIsReached=Your quota of active users is reached !
NbOfUsers=No. of users NbOfUsers=Number of users
NbOfPermissions=No. of permissions NbOfPermissions=Number of permissions
DontDowngradeSuperAdmin=Only a superadmin can downgrade a superadmin DontDowngradeSuperAdmin=Only a superadmin can downgrade a superadmin
HierarchicalResponsible=Supervisor HierarchicalResponsible=Supervisor
HierarchicView=Hierarchical view HierarchicView=Hierarchical view

View File

@ -31,7 +31,7 @@ AddWebsite=Add website
Webpage=Web page/container Webpage=Web page/container
AddPage=Add page/container AddPage=Add page/container
PageContainer=Page PageContainer=Page
PreviewOfSiteNotYetAvailable=Preview of your website <strong>%s</strong> not yet available. You must first '<strong>Import a full website template</strong>' or just '<strong>Add a page/container</strong>'. PreviewOfSiteNotYetAvailable=The preview of your website <strong>%s</strong> is not yet available. You must first '<strong>Import a full website template</strong>' or just '<strong>Add a page/container</strong>'.
RequestedPageHasNoContentYet=Requested page with id %s has no content yet, or cache file .tpl.php was removed. Edit content of the page to solve this. RequestedPageHasNoContentYet=Requested page with id %s has no content yet, or cache file .tpl.php was removed. Edit content of the page to solve this.
SiteDeleted=Web site '%s' deleted SiteDeleted=Web site '%s' deleted
PageContent=Page/Contenair PageContent=Page/Contenair

View File

@ -53,6 +53,7 @@ InternalUser=مستخدم داخلي
ExternalUser=مستخدم خارجي ExternalUser=مستخدم خارجي
InternalUsers=مستخدمين داخليين InternalUsers=مستخدمين داخليين
ExternalUsers=مستخدمين خارجيين ExternalUsers=مستخدمين خارجيين
UserInterface=User interface
GUISetup=العرض GUISetup=العرض
SetupArea=التثبيت SetupArea=التثبيت
UploadNewTemplate=تحميل قالب جديد UploadNewTemplate=تحميل قالب جديد
@ -1260,8 +1261,8 @@ YourPHPDoesNotHaveSSLSupport=وظائف خدمة تصميم المواقع لا
DownloadMoreSkins=مزيد من جلود بتحميل DownloadMoreSkins=مزيد من جلود بتحميل
SimpleNumRefModelDesc=Returns the reference number in the format %syymm-nnnn where yy is the year, mm is the month and nnnn is a sequential auto-incrementing number with no reset SimpleNumRefModelDesc=Returns the reference number in the format %syymm-nnnn where yy is the year, mm is the month and nnnn is a sequential auto-incrementing number with no reset
SimpleNumRefNoDateModelDesc=Returns the reference number in the format %s-nnnn where nnnn is a sequential auto-incrementing number with no reset SimpleNumRefNoDateModelDesc=Returns the reference number in the format %s-nnnn where nnnn is a sequential auto-incrementing number with no reset
ShowProfIdInAddress=Show professional id with addresses ShowProfIdInAddress=Show professional ID with addresses
ShowVATIntaInAddress=Hide intra-Community VAT number with addresses ShowVATIntaInAddress=Hide intra-Community VAT number
TranslationUncomplete=ترجمة جزئية TranslationUncomplete=ترجمة جزئية
MAIN_DISABLE_METEO=Disable meteorological view MAIN_DISABLE_METEO=Disable meteorological view
MeteoStdMod=Standard mode MeteoStdMod=Standard mode
@ -1778,7 +1779,7 @@ ClickToDialSetup=انقر لإعداد وحدة الاتصال الهاتفي
ClickToDialUrlDesc=Url called when a click on phone picto is done. In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card). ClickToDialUrlDesc=Url called when a click on phone picto is done. In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
ClickToDialDesc=This module change phone numbers, when using a desktop computer, into clickable links. A click will call the number. This can be used to start the phone call when using a soft phone on your desktop or when using a CTI system based on SIP protocol for example. Note: When using a smartphone, phone numbers are always clickable. ClickToDialDesc=This module change phone numbers, when using a desktop computer, into clickable links. A click will call the number. This can be used to start the phone call when using a soft phone on your desktop or when using a CTI system based on SIP protocol for example. Note: When using a smartphone, phone numbers are always clickable.
ClickToDialUseTelLink=مجرد استخدام الرابط "الهاتف:" على أرقام الهواتف ClickToDialUseTelLink=مجرد استخدام الرابط "الهاتف:" على أرقام الهواتف
ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field. ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface, installed on the same computer as the browser, and called when you click on a link starting with "tel:" in your browser. If you need link that start with "sip:" or a full server solution (no need of local software installation), you must set this to "No" and fill next field.
##### Point Of Sale (CashDesk) ##### ##### Point Of Sale (CashDesk) #####
CashDesk=Point of Sale CashDesk=Point of Sale
CashDeskSetup=Point of Sales module setup CashDeskSetup=Point of Sales module setup
@ -2133,7 +2134,8 @@ IfCLINotRequiredYouShouldDisablePHPFunctions=Except if you need to run system co
PHPFunctionsRequiredForCLI=For shell purpose (like scheduled job backup or running an anitivurs program), you must keep PHP functions PHPFunctionsRequiredForCLI=For shell purpose (like scheduled job backup or running an anitivurs program), you must keep PHP functions
NoWritableFilesFoundIntoRootDir=No writable files or directories of the common programs were found into your root directory (Good) NoWritableFilesFoundIntoRootDir=No writable files or directories of the common programs were found into your root directory (Good)
RecommendedValueIs=Recommended: %s RecommendedValueIs=Recommended: %s
NotRecommended=Not recommanded Recommended=موصى بها
NotRecommended=Not recommended
ARestrictedPath=A restricted path ARestrictedPath=A restricted path
CheckForModuleUpdate=Check for external modules updates CheckForModuleUpdate=Check for external modules updates
CheckForModuleUpdateHelp=This action will connect to editors of external modules to check if a new version is available. CheckForModuleUpdateHelp=This action will connect to editors of external modules to check if a new version is available.
@ -2144,3 +2146,5 @@ YouEnableDeprecatedWSAPIsUseRESTAPIsInstead=You enabled deprecated WS API. You s
RandomlySelectedIfSeveral=Randomly selected if several pictures are available RandomlySelectedIfSeveral=Randomly selected if several pictures are available
DatabasePasswordObfuscated=Database password is obfuscated in conf file DatabasePasswordObfuscated=Database password is obfuscated in conf file
DatabasePasswordNotObfuscated=Database password is NOT obfuscated in conf file DatabasePasswordNotObfuscated=Database password is NOT obfuscated in conf file
APIsAreNotEnabled=APIs modules are not enabled
YouShouldSetThisToOff=You should set this to 0 or off

View File

@ -115,7 +115,7 @@ TransferTo=إلى
TransferFromToDone=التحويل من <b>%s</b>إلى <b>%s</b>من <b>%s</b>%s قد تم تسجيلة. TransferFromToDone=التحويل من <b>%s</b>إلى <b>%s</b>من <b>%s</b>%s قد تم تسجيلة.
CheckTransmitter=مرسل CheckTransmitter=مرسل
ValidateCheckReceipt=تأكيد صحة الشيك المستلم؟ ValidateCheckReceipt=تأكيد صحة الشيك المستلم؟
ConfirmValidateCheckReceipt=هل انت متأكد من رغبتك بإرسال إيصال هذا الشيك للتأكيد ؟ لا تغيير ممكن بعد الاكمال. ConfirmValidateCheckReceipt=Are you sure that you want to submit this check receipt for validation? No changes will be possible once validated.
DeleteCheckReceipt=حذف هذا الشيك ؟ DeleteCheckReceipt=حذف هذا الشيك ؟
ConfirmDeleteCheckReceipt=هل انت متأكد أنك تريد حذف هذا الشيك؟ ConfirmDeleteCheckReceipt=هل انت متأكد أنك تريد حذف هذا الشيك؟
BankChecks=الشيكات المصرفية BankChecks=الشيكات المصرفية

View File

@ -91,8 +91,8 @@ BoxTitleLatestModifiedSupplierOrders=أوامر الموردين: آخر %s تع
BoxTitleLastModifiedCustomerBills=فواتير العميل: آخر %s تعديل BoxTitleLastModifiedCustomerBills=فواتير العميل: آخر %s تعديل
BoxTitleLastModifiedCustomerOrders=أوامر المبيعات: آخر %s تعديل BoxTitleLastModifiedCustomerOrders=أوامر المبيعات: آخر %s تعديل
BoxTitleLastModifiedPropals=أحدث %s العروض المعدلة BoxTitleLastModifiedPropals=أحدث %s العروض المعدلة
BoxTitleLatestModifiedJobPositions=أحدث %s وظائف المعدلة BoxTitleLatestModifiedJobPositions=Latest %s modified job positions
BoxTitleLatestModifiedCandidatures=أحدث %s الترشيحات المعدلة BoxTitleLatestModifiedCandidatures=Latest %s modified job applications
ForCustomersInvoices=فواتير العملاء ForCustomersInvoices=فواتير العملاء
ForCustomersOrders=أوامر العملاء ForCustomersOrders=أوامر العملاء
ForProposals=عروض ForProposals=عروض

View File

@ -127,4 +127,4 @@ AllowDelayedPayment=Allow delayed payment
PrintPaymentMethodOnReceipts=Print payment method on tickets|receipts PrintPaymentMethodOnReceipts=Print payment method on tickets|receipts
WeighingScale=Weighing scale WeighingScale=Weighing scale
ShowPriceHT = Display the column with the price excluding tax (on screen) ShowPriceHT = Display the column with the price excluding tax (on screen)
ShowPriceHTOnReceipt = Display the column with the price excluding tax (on receipt) ShowPriceHTOnReceipt = Display the column with the price excluding tax (on the receipt)

View File

@ -301,3 +301,4 @@ ErrorActionCommPropertyUserowneridNotDefined=User's owner is required
ErrorActionCommBadType=Selected event type (id: %n, code: %s) do not exist in Event Type dictionary ErrorActionCommBadType=Selected event type (id: %n, code: %s) do not exist in Event Type dictionary
CheckVersionFail=Version check fail CheckVersionFail=Version check fail
ErrorWrongFileName=Name of the file cannot have __SOMETHING__ in it ErrorWrongFileName=Name of the file cannot have __SOMETHING__ in it
ErrorNotInDictionaryPaymentConditions=Not in Payment Terms Dictionary, please modify.

View File

@ -86,6 +86,7 @@ DownloadICSLink = Download ICS link
EVENTORGANIZATION_SECUREKEY = Secure Key of the public registration link to a conference 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 SERVICE_BOOTH_LOCATION = Service used for the invoice row about a booth location
SERVICE_CONFERENCE_ATTENDEE_SUBSCRIPTION = Service used for the invoice row about an attendee subscription to a conference SERVICE_CONFERENCE_ATTENDEE_SUBSCRIPTION = Service used for the invoice row about an attendee subscription to a conference
NbVotes=Number of votes
# #
# Status # Status
# #
@ -115,6 +116,9 @@ EvntOrgDuration = This conference starts on %s and ends on %s.
ConferenceAttendeeFee = Conference attendee fee for the event : '%s' occurring from %s to %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 BoothLocationFee = Booth location for the event : '%s' occurring from %s to %s
EventType = نوع الحدث EventType = نوع الحدث
LabelOfBooth=Booth label
LabelOfconference=Conference label
ConferenceIsNotConfirmed=Subcription not available, conference is not confirmed yet
# #
# Vote page # Vote page

View File

@ -206,6 +206,7 @@ MigrationUserPhotoPath=Migration of photo paths for users
MigrationFieldsSocialNetworks=Migration of users fields social networks (%s) MigrationFieldsSocialNetworks=Migration of users fields social networks (%s)
MigrationReloadModule=إعادة تحديث الوحدات %s MigrationReloadModule=إعادة تحديث الوحدات %s
MigrationResetBlockedLog=Reset module BlockedLog for v7 algorithm MigrationResetBlockedLog=Reset module BlockedLog for v7 algorithm
MigrationImportOrExportProfiles=Migration of import or export profiles (%s)
ShowNotAvailableOptions=Show unavailable options ShowNotAvailableOptions=Show unavailable options
HideNotAvailableOptions=Hide unavailable options HideNotAvailableOptions=Hide unavailable options
ErrorFoundDuringMigration=Error(s) were reported during the migration process so next step is not available. To ignore errors, you can <a href="%s">click here</a>, but the application or some features may not work correctly until the errors are resolved. ErrorFoundDuringMigration=Error(s) were reported during the migration process so next step is not available. To ignore errors, you can <a href="%s">click here</a>, but the application or some features may not work correctly until the errors are resolved.

View File

@ -64,3 +64,5 @@ InterLineDuration=تدخل مدة خط
InterLineDesc=خط وصف التدخل InterLineDesc=خط وصف التدخل
RepeatableIntervention=Template of intervention RepeatableIntervention=Template of intervention
ToCreateAPredefinedIntervention=To create a predefined or recurring intervention, create a common intervention and convert it into intervention template ToCreateAPredefinedIntervention=To create a predefined or recurring intervention, create a common intervention and convert it into intervention template
Reopen=إعادة فتح
ConfirmReopenIntervention=Are you sure you want to open back the intervention <b>%s</b>?

View File

@ -26,12 +26,10 @@ ShowLogOfMovementIfLot=Show log of movements for couple product/lot
StockDetailPerBatch=Stock detail per lot StockDetailPerBatch=Stock detail per lot
SerialNumberAlreadyInUse=Serial number %s is already used for product %s SerialNumberAlreadyInUse=Serial number %s is already used for product %s
TooManyQtyForSerialNumber=You can only have one product %s for serial number %s TooManyQtyForSerialNumber=You can only have one product %s for serial number %s
BatchLotNumberingModules=Options for automatic generation of batch products managed by lots
BatchSerialNumberingModules=Options for automatic generation of batch products managed by serial numbers
ManageLotMask=Custom mask ManageLotMask=Custom mask
CustomMasks=Adds an option to define mask in the product card CustomMasks=Option to define a different numbering mask for each product
LotProductTooltip=Adds an option in the product card to define a dedicated batch number mask BatchLotNumberingModules=Numbering rule for automatic generation of lot number
SNProductTooltip=Adds an option in the product card to define a dedicated serial number mask BatchSerialNumberingModules=Numbering rule for automatic generation of serial number (for products with property 1 unique lot/serial for each product)
QtyToAddAfterBarcodeScan=Qty to add for each barcode/lot/serial scanned QtyToAddAfterBarcodeScan=Qty to add for each barcode/lot/serial scanned
LifeTime=Life span (in days) LifeTime=Life span (in days)
EndOfLife=End of life EndOfLife=End of life

View File

@ -277,7 +277,7 @@ PriceByCustomer=Different prices for each customer
PriceCatalogue=A single sell price per product/service PriceCatalogue=A single sell price per product/service
PricingRule=Rules for selling prices PricingRule=Rules for selling prices
AddCustomerPrice=إضافة السعر من قبل العملاء AddCustomerPrice=إضافة السعر من قبل العملاء
ForceUpdateChildPriceSoc=تعيين نفس السعر على الشركات التابعة العملاء ForceUpdateChildPriceSoc=Set same price on customer's subsidiaries
PriceByCustomerLog=سجل الأسعار العملاء السابقة PriceByCustomerLog=سجل الأسعار العملاء السابقة
MinimumPriceLimit=سعر الحد الأدنى لا يمكن أن يكون أقل ثم٪ الصورة MinimumPriceLimit=سعر الحد الأدنى لا يمكن أن يكون أقل ثم٪ الصورة
MinimumRecommendedPrice=Minimum recommended price is: %s MinimumRecommendedPrice=Minimum recommended price is: %s
@ -296,6 +296,7 @@ ComposedProductIncDecStock=زيادة / نقصان الأسهم على التغ
ComposedProduct=Child products ComposedProduct=Child products
MinSupplierPrice=الحد الأدنى من سعر الشراء MinSupplierPrice=الحد الأدنى من سعر الشراء
MinCustomerPrice=Minimum selling price MinCustomerPrice=Minimum selling price
NoDynamicPrice=No dynamic price
DynamicPriceConfiguration=التكوين سعر ديناميكي DynamicPriceConfiguration=التكوين سعر ديناميكي
DynamicPriceDesc=You may define mathematical formulae to calculate Customer or Vendor prices. Such formulas can use all mathematical operators, some constants and variables. You can define here the variables you wish to use. If the variable needs an automatic update, you may define the external URL to allow Dolibarr to update the value automatically. DynamicPriceDesc=You may define mathematical formulae to calculate Customer or Vendor prices. Such formulas can use all mathematical operators, some constants and variables. You can define here the variables you wish to use. If the variable needs an automatic update, you may define the external URL to allow Dolibarr to update the value automatically.
AddVariable=Add Variable AddVariable=Add Variable

View File

@ -2,20 +2,23 @@
SALARIES_ACCOUNTING_ACCOUNT_PAYMENT=Accounting account used for user third parties SALARIES_ACCOUNTING_ACCOUNT_PAYMENT=Accounting account used for user third parties
SALARIES_ACCOUNTING_ACCOUNT_PAYMENT_Desc=The dedicated accounting account defined on user card will be used for Subledger accounting only. This one will be used for General Ledger and as default value of Subledger accounting if dedicated user accounting account on user is not defined. SALARIES_ACCOUNTING_ACCOUNT_PAYMENT_Desc=The dedicated accounting account defined on user card will be used for Subledger accounting only. This one will be used for General Ledger and as default value of Subledger accounting if dedicated user accounting account on user is not defined.
SALARIES_ACCOUNTING_ACCOUNT_CHARGE=Accounting account by default for wage payments SALARIES_ACCOUNTING_ACCOUNT_CHARGE=Accounting account by default for wage payments
CREATE_NEW_SALARY_WITHOUT_AUTO_PAYMENT=By default, leave empty the option "Automatically create a total payment" when creating a Salary
Salary=الراتب Salary=الراتب
Salaries=الرواتب Salaries=الرواتب
NewSalaryPayment=دفع الرواتب جديد NewSalary=New salary
NewSalaryPayment=New salary card
AddSalaryPayment=Add salary payment AddSalaryPayment=Add salary payment
SalaryPayment=دفع الرواتب SalaryPayment=دفع الرواتب
SalariesPayments=مدفوعات الرواتب SalariesPayments=مدفوعات الرواتب
SalariesPaymentsOf=Salaries payments of %s
ShowSalaryPayment=مشاهدة دفع الرواتب ShowSalaryPayment=مشاهدة دفع الرواتب
THM=Average hourly rate THM=Average hourly rate
TJM=Average daily rate TJM=Average daily rate
CurrentSalary=الراتب الحالي CurrentSalary=الراتب الحالي
THMDescription=This value may be used to calculate the cost of time consumed on a project entered by users if module project is used THMDescription=This value may be used to calculate the cost of time consumed on a project entered by users if module project is used
TJMDescription=This value is currently for information only and is not used for any calculation TJMDescription=This value is currently for information only and is not used for any calculation
LastSalaries=Latest %s salary payments LastSalaries=Latest %s salaries
AllSalaries=All salary payments AllSalaries=All salaries
SalariesStatistics=Salary statistics SalariesStatistics=Salary statistics
# Export
SalariesAndPayments=Salaries and payments SalariesAndPayments=Salaries and payments
ConfirmDeleteSalaryPayment=Do you want to delete this salary payment ?

View File

@ -34,7 +34,8 @@ TicketDictResolution=Ticket - Resolution
TicketTypeShortCOM=Commercial question TicketTypeShortCOM=Commercial question
TicketTypeShortHELP=Request for functionnal help TicketTypeShortHELP=Request for functionnal help
TicketTypeShortISSUE=Issue, bug or problem TicketTypeShortISSUE=Issue or bug
TicketTypeShortPROBLEM=Problem
TicketTypeShortREQUEST=Change or enhancement request TicketTypeShortREQUEST=Change or enhancement request
TicketTypeShortPROJET=المشروع TicketTypeShortPROJET=المشروع
TicketTypeShortOTHER=الآخر TicketTypeShortOTHER=الآخر
@ -54,14 +55,15 @@ TypeContact_ticket_internal_SUPPORTTEC=Assigned user
TypeContact_ticket_external_SUPPORTCLI=Customer contact / incident tracking TypeContact_ticket_external_SUPPORTCLI=Customer contact / incident tracking
TypeContact_ticket_external_CONTRIBUTOR=External contributor TypeContact_ticket_external_CONTRIBUTOR=External contributor
OriginEmail=Email source OriginEmail=Reporter Email
Notify_TICKET_SENTBYMAIL=Send ticket message by email Notify_TICKET_SENTBYMAIL=Send ticket message by email
# Status # Status
Read=قرأ Read=قرأ
Assigned=Assigned Assigned=Assigned
InProgress=في تقدم InProgress=في تقدم
NeedMoreInformation=Waiting for information NeedMoreInformation=Waiting for reporter feedback
NeedMoreInformationShort=Waiting for feedback
Answered=Answered Answered=Answered
Waiting=انتظار Waiting=انتظار
Closed=مغلق Closed=مغلق
@ -160,7 +162,7 @@ CreatedBy=Created by
NewTicket=New Ticket NewTicket=New Ticket
SubjectAnswerToTicket=Ticket answer SubjectAnswerToTicket=Ticket answer
TicketTypeRequest=Request type TicketTypeRequest=Request type
TicketCategory=مجموعة TicketCategory=Ticket categorization
SeeTicket=See ticket SeeTicket=See ticket
TicketMarkedAsRead=Ticket has been marked as read TicketMarkedAsRead=Ticket has been marked as read
TicketReadOn=Read on TicketReadOn=Read on
@ -211,6 +213,7 @@ TicketMessageHelp=Only this text will be saved in the message list on ticket car
TicketMessageSubstitutionReplacedByGenericValues=Substitutions variables are replaced by generic values. TicketMessageSubstitutionReplacedByGenericValues=Substitutions variables are replaced by generic values.
TimeElapsedSince=Time elapsed since TimeElapsedSince=Time elapsed since
TicketTimeToRead=Time elapsed before read TicketTimeToRead=Time elapsed before read
TicketTimeElapsedBeforeSince=Time elapsed before / since
TicketContacts=Contacts ticket TicketContacts=Contacts ticket
TicketDocumentsLinked=Documents linked to ticket TicketDocumentsLinked=Documents linked to ticket
ConfirmReOpenTicket=Confirm reopen this ticket ? ConfirmReOpenTicket=Confirm reopen this ticket ?

View File

@ -97,8 +97,8 @@ LoginToCreate=ادخل لخلق
NameToCreate=اسم طرف ثالث لخلق NameToCreate=اسم طرف ثالث لخلق
YourRole=الأدوار الخاص YourRole=الأدوار الخاص
YourQuotaOfUsersIsReached=يتم التوصل إلى حصة الخاص بك من المستخدمين النشطين! YourQuotaOfUsersIsReached=يتم التوصل إلى حصة الخاص بك من المستخدمين النشطين!
NbOfUsers=No. of users NbOfUsers=Number of users
NbOfPermissions=No. of permissions NbOfPermissions=Number of permissions
DontDowngradeSuperAdmin=يمكن فقط superadmin تقليله a superadmin DontDowngradeSuperAdmin=يمكن فقط superadmin تقليله a superadmin
HierarchicalResponsible=المشرف HierarchicalResponsible=المشرف
HierarchicView=الهرمي HierarchicView=الهرمي

View File

@ -31,7 +31,7 @@ AddWebsite=إضافة موقع إلكتروني
Webpage=الصفحة\\الحاوية Webpage=الصفحة\\الحاوية
AddPage=إضافة صفحة\\حاوية AddPage=إضافة صفحة\\حاوية
PageContainer=صفحة PageContainer=صفحة
PreviewOfSiteNotYetAvailable=إستعراض موقعك الإلكتروني <strong>%s</strong> غير متاح الان . عليك اولاً "<strong>إستيراد قالب موقع إلكتروني </strong>" او فقط "<strong>إضافة صفحة\\حاوية</strong>". PreviewOfSiteNotYetAvailable=The preview of your website <strong>%s</strong> is not yet available. You must first '<strong>Import a full website template</strong>' or just '<strong>Add a page/container</strong>'.
RequestedPageHasNoContentYet=الصفحة المطلوبة بالمعرف %s لاتحتوي بعد على محتوى ، او ان ملف القالب الخاص بها قد تم حذفه. قم بتعديل محتويات الصفحة لحل ذلك RequestedPageHasNoContentYet=الصفحة المطلوبة بالمعرف %s لاتحتوي بعد على محتوى ، او ان ملف القالب الخاص بها قد تم حذفه. قم بتعديل محتويات الصفحة لحل ذلك
SiteDeleted= الموقع "%s" تم حذهف SiteDeleted= الموقع "%s" تم حذهف
PageContent=الصفحة\\الحاوية PageContent=الصفحة\\الحاوية

View File

@ -53,6 +53,7 @@ InternalUser=Internal user
ExternalUser=External user ExternalUser=External user
InternalUsers=Internal users InternalUsers=Internal users
ExternalUsers=External users ExternalUsers=External users
UserInterface=User interface
GUISetup=Display GUISetup=Display
SetupArea=Setup SetupArea=Setup
UploadNewTemplate=Upload new template(s) UploadNewTemplate=Upload new template(s)
@ -1260,8 +1261,8 @@ YourPHPDoesNotHaveSSLSupport=SSL functions not available in your PHP
DownloadMoreSkins=More skins to download DownloadMoreSkins=More skins to download
SimpleNumRefModelDesc=Returns the reference number in the format %syymm-nnnn where yy is the year, mm is the month and nnnn is a sequential auto-incrementing number with no reset SimpleNumRefModelDesc=Returns the reference number in the format %syymm-nnnn where yy is the year, mm is the month and nnnn is a sequential auto-incrementing number with no reset
SimpleNumRefNoDateModelDesc=Returns the reference number in the format %s-nnnn where nnnn is a sequential auto-incrementing number with no reset SimpleNumRefNoDateModelDesc=Returns the reference number in the format %s-nnnn where nnnn is a sequential auto-incrementing number with no reset
ShowProfIdInAddress=Show professional id with addresses ShowProfIdInAddress=Show professional ID with addresses
ShowVATIntaInAddress=Hide intra-Community VAT number with addresses ShowVATIntaInAddress=Hide intra-Community VAT number
TranslationUncomplete=Partial translation TranslationUncomplete=Partial translation
MAIN_DISABLE_METEO=Disable meteorological view MAIN_DISABLE_METEO=Disable meteorological view
MeteoStdMod=Standard mode MeteoStdMod=Standard mode
@ -1778,7 +1779,7 @@ ClickToDialSetup=Click To Dial module setup
ClickToDialUrlDesc=Url called when a click on phone picto is done. In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card). ClickToDialUrlDesc=Url called when a click on phone picto is done. In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
ClickToDialDesc=This module change phone numbers, when using a desktop computer, into clickable links. A click will call the number. This can be used to start the phone call when using a soft phone on your desktop or when using a CTI system based on SIP protocol for example. Note: When using a smartphone, phone numbers are always clickable. ClickToDialDesc=This module change phone numbers, when using a desktop computer, into clickable links. A click will call the number. This can be used to start the phone call when using a soft phone on your desktop or when using a CTI system based on SIP protocol for example. Note: When using a smartphone, phone numbers are always clickable.
ClickToDialUseTelLink=Use just a link "tel:" on phone numbers ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field. ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface, installed on the same computer as the browser, and called when you click on a link starting with "tel:" in your browser. If you need link that start with "sip:" or a full server solution (no need of local software installation), you must set this to "No" and fill next field.
##### Point Of Sale (CashDesk) ##### ##### Point Of Sale (CashDesk) #####
CashDesk=Point of Sale CashDesk=Point of Sale
CashDeskSetup=Point of Sales module setup CashDeskSetup=Point of Sales module setup
@ -2133,7 +2134,8 @@ IfCLINotRequiredYouShouldDisablePHPFunctions=Except if you need to run system co
PHPFunctionsRequiredForCLI=For shell purpose (like scheduled job backup or running an anitivurs program), you must keep PHP functions PHPFunctionsRequiredForCLI=For shell purpose (like scheduled job backup or running an anitivurs program), you must keep PHP functions
NoWritableFilesFoundIntoRootDir=No writable files or directories of the common programs were found into your root directory (Good) NoWritableFilesFoundIntoRootDir=No writable files or directories of the common programs were found into your root directory (Good)
RecommendedValueIs=Recommended: %s RecommendedValueIs=Recommended: %s
NotRecommended=Not recommanded Recommended=Recommended
NotRecommended=Not recommended
ARestrictedPath=A restricted path ARestrictedPath=A restricted path
CheckForModuleUpdate=Check for external modules updates CheckForModuleUpdate=Check for external modules updates
CheckForModuleUpdateHelp=This action will connect to editors of external modules to check if a new version is available. CheckForModuleUpdateHelp=This action will connect to editors of external modules to check if a new version is available.
@ -2144,3 +2146,5 @@ YouEnableDeprecatedWSAPIsUseRESTAPIsInstead=You enabled deprecated WS API. You s
RandomlySelectedIfSeveral=Randomly selected if several pictures are available RandomlySelectedIfSeveral=Randomly selected if several pictures are available
DatabasePasswordObfuscated=Database password is obfuscated in conf file DatabasePasswordObfuscated=Database password is obfuscated in conf file
DatabasePasswordNotObfuscated=Database password is NOT obfuscated in conf file DatabasePasswordNotObfuscated=Database password is NOT obfuscated in conf file
APIsAreNotEnabled=APIs modules are not enabled
YouShouldSetThisToOff=You should set this to 0 or off

View File

@ -115,7 +115,7 @@ TransferTo=To
TransferFromToDone=A transfer from <b>%s</b> to <b>%s</b> of <b>%s</b> %s has been recorded. TransferFromToDone=A transfer from <b>%s</b> to <b>%s</b> of <b>%s</b> %s has been recorded.
CheckTransmitter=Sender CheckTransmitter=Sender
ValidateCheckReceipt=Validate this check receipt? ValidateCheckReceipt=Validate this check receipt?
ConfirmValidateCheckReceipt=Are you sure that you want to submit this check receipt for validation? No changes are possible it's done. ConfirmValidateCheckReceipt=Are you sure that you want to submit this check receipt for validation? No changes will be possible once validated.
DeleteCheckReceipt=Delete this check receipt? DeleteCheckReceipt=Delete this check receipt?
ConfirmDeleteCheckReceipt=Are you sure you want to delete this check receipt? ConfirmDeleteCheckReceipt=Are you sure you want to delete this check receipt?
BankChecks=Bank checks BankChecks=Bank checks

View File

@ -91,8 +91,8 @@ BoxTitleLatestModifiedSupplierOrders=Vendor Orders: last %s modified
BoxTitleLastModifiedCustomerBills=Customer Invoices: last %s modified BoxTitleLastModifiedCustomerBills=Customer Invoices: last %s modified
BoxTitleLastModifiedCustomerOrders=Sales Orders: last %s modified BoxTitleLastModifiedCustomerOrders=Sales Orders: last %s modified
BoxTitleLastModifiedPropals=Latest %s modified proposals BoxTitleLastModifiedPropals=Latest %s modified proposals
BoxTitleLatestModifiedJobPositions=Latest %s modified jobs BoxTitleLatestModifiedJobPositions=Latest %s modified job positions
BoxTitleLatestModifiedCandidatures=Latest %s modified candidatures BoxTitleLatestModifiedCandidatures=Latest %s modified job applications
ForCustomersInvoices=Customers invoices ForCustomersInvoices=Customers invoices
ForCustomersOrders=Customers orders ForCustomersOrders=Customers orders
ForProposals=Proposals ForProposals=Proposals

View File

@ -127,4 +127,4 @@ AllowDelayedPayment=Allow delayed payment
PrintPaymentMethodOnReceipts=Print payment method on tickets|receipts PrintPaymentMethodOnReceipts=Print payment method on tickets|receipts
WeighingScale=Weighing scale WeighingScale=Weighing scale
ShowPriceHT = Display the column with the price excluding tax (on screen) ShowPriceHT = Display the column with the price excluding tax (on screen)
ShowPriceHTOnReceipt = Display the column with the price excluding tax (on receipt) ShowPriceHTOnReceipt = Display the column with the price excluding tax (on the receipt)

View File

@ -301,3 +301,4 @@ ErrorActionCommPropertyUserowneridNotDefined=User's owner is required
ErrorActionCommBadType=Selected event type (id: %n, code: %s) do not exist in Event Type dictionary ErrorActionCommBadType=Selected event type (id: %n, code: %s) do not exist in Event Type dictionary
CheckVersionFail=Version check fail CheckVersionFail=Version check fail
ErrorWrongFileName=Name of the file cannot have __SOMETHING__ in it ErrorWrongFileName=Name of the file cannot have __SOMETHING__ in it
ErrorNotInDictionaryPaymentConditions=Not in Payment Terms Dictionary, please modify.

View File

@ -86,6 +86,7 @@ DownloadICSLink = Download ICS link
EVENTORGANIZATION_SECUREKEY = Secure Key of the public registration link to a conference 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 SERVICE_BOOTH_LOCATION = Service used for the invoice row about a booth location
SERVICE_CONFERENCE_ATTENDEE_SUBSCRIPTION = Service used for the invoice row about an attendee subscription to a conference SERVICE_CONFERENCE_ATTENDEE_SUBSCRIPTION = Service used for the invoice row about an attendee subscription to a conference
NbVotes=Number of votes
# #
# Status # Status
# #
@ -115,6 +116,9 @@ EvntOrgDuration = This conference starts on %s and ends on %s.
ConferenceAttendeeFee = Conference attendee fee for the event : '%s' occurring from %s to %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 BoothLocationFee = Booth location for the event : '%s' occurring from %s to %s
EventType = Event type EventType = Event type
LabelOfBooth=Booth label
LabelOfconference=Conference label
ConferenceIsNotConfirmed=Subcription not available, conference is not confirmed yet
# #
# Vote page # Vote page

View File

@ -206,6 +206,7 @@ MigrationUserPhotoPath=Migration of photo paths for users
MigrationFieldsSocialNetworks=Migration of users fields social networks (%s) MigrationFieldsSocialNetworks=Migration of users fields social networks (%s)
MigrationReloadModule=Reload module %s MigrationReloadModule=Reload module %s
MigrationResetBlockedLog=Reset module BlockedLog for v7 algorithm MigrationResetBlockedLog=Reset module BlockedLog for v7 algorithm
MigrationImportOrExportProfiles=Migration of import or export profiles (%s)
ShowNotAvailableOptions=Show unavailable options ShowNotAvailableOptions=Show unavailable options
HideNotAvailableOptions=Hide unavailable options HideNotAvailableOptions=Hide unavailable options
ErrorFoundDuringMigration=Error(s) were reported during the migration process so next step is not available. To ignore errors, you can <a href="%s">click here</a>, but the application or some features may not work correctly until the errors are resolved. ErrorFoundDuringMigration=Error(s) were reported during the migration process so next step is not available. To ignore errors, you can <a href="%s">click here</a>, but the application or some features may not work correctly until the errors are resolved.

View File

@ -64,3 +64,5 @@ InterLineDuration=Line duration intervention
InterLineDesc=Line description intervention InterLineDesc=Line description intervention
RepeatableIntervention=Template of intervention RepeatableIntervention=Template of intervention
ToCreateAPredefinedIntervention=To create a predefined or recurring intervention, create a common intervention and convert it into intervention template ToCreateAPredefinedIntervention=To create a predefined or recurring intervention, create a common intervention and convert it into intervention template
Reopen=Reopen
ConfirmReopenIntervention=Are you sure you want to open back the intervention <b>%s</b>?

View File

@ -26,12 +26,10 @@ ShowLogOfMovementIfLot=Show log of movements for couple product/lot
StockDetailPerBatch=Stock detail per lot StockDetailPerBatch=Stock detail per lot
SerialNumberAlreadyInUse=Serial number %s is already used for product %s SerialNumberAlreadyInUse=Serial number %s is already used for product %s
TooManyQtyForSerialNumber=You can only have one product %s for serial number %s TooManyQtyForSerialNumber=You can only have one product %s for serial number %s
BatchLotNumberingModules=Options for automatic generation of batch products managed by lots
BatchSerialNumberingModules=Options for automatic generation of batch products managed by serial numbers
ManageLotMask=Custom mask ManageLotMask=Custom mask
CustomMasks=Adds an option to define mask in the product card CustomMasks=Option to define a different numbering mask for each product
LotProductTooltip=Adds an option in the product card to define a dedicated batch number mask BatchLotNumberingModules=Numbering rule for automatic generation of lot number
SNProductTooltip=Adds an option in the product card to define a dedicated serial number mask BatchSerialNumberingModules=Numbering rule for automatic generation of serial number (for products with property 1 unique lot/serial for each product)
QtyToAddAfterBarcodeScan=Qty to add for each barcode/lot/serial scanned QtyToAddAfterBarcodeScan=Qty to add for each barcode/lot/serial scanned
LifeTime=Life span (in days) LifeTime=Life span (in days)
EndOfLife=End of life EndOfLife=End of life

View File

@ -277,7 +277,7 @@ PriceByCustomer=Different prices for each customer
PriceCatalogue=A single sell price per product/service PriceCatalogue=A single sell price per product/service
PricingRule=Rules for selling prices PricingRule=Rules for selling prices
AddCustomerPrice=Add price by customer AddCustomerPrice=Add price by customer
ForceUpdateChildPriceSoc=Set same price on customer subsidiaries ForceUpdateChildPriceSoc=Set same price on customer's subsidiaries
PriceByCustomerLog=Log of previous customer prices PriceByCustomerLog=Log of previous customer prices
MinimumPriceLimit=Minimum price can't be lower then %s MinimumPriceLimit=Minimum price can't be lower then %s
MinimumRecommendedPrice=Minimum recommended price is: %s MinimumRecommendedPrice=Minimum recommended price is: %s
@ -296,6 +296,7 @@ ComposedProductIncDecStock=Increase/Decrease stock on parent change
ComposedProduct=Child products ComposedProduct=Child products
MinSupplierPrice=Minimum buying price MinSupplierPrice=Minimum buying price
MinCustomerPrice=Minimum selling price MinCustomerPrice=Minimum selling price
NoDynamicPrice=No dynamic price
DynamicPriceConfiguration=Dynamic price configuration DynamicPriceConfiguration=Dynamic price configuration
DynamicPriceDesc=You may define mathematical formulae to calculate Customer or Vendor prices. Such formulas can use all mathematical operators, some constants and variables. You can define here the variables you wish to use. If the variable needs an automatic update, you may define the external URL to allow Dolibarr to update the value automatically. DynamicPriceDesc=You may define mathematical formulae to calculate Customer or Vendor prices. Such formulas can use all mathematical operators, some constants and variables. You can define here the variables you wish to use. If the variable needs an automatic update, you may define the external URL to allow Dolibarr to update the value automatically.
AddVariable=Add Variable AddVariable=Add Variable

View File

@ -2,20 +2,23 @@
SALARIES_ACCOUNTING_ACCOUNT_PAYMENT=Accounting account used for user third parties SALARIES_ACCOUNTING_ACCOUNT_PAYMENT=Accounting account used for user third parties
SALARIES_ACCOUNTING_ACCOUNT_PAYMENT_Desc=The dedicated accounting account defined on user card will be used for Subledger accounting only. This one will be used for General Ledger and as default value of Subledger accounting if dedicated user accounting account on user is not defined. SALARIES_ACCOUNTING_ACCOUNT_PAYMENT_Desc=The dedicated accounting account defined on user card will be used for Subledger accounting only. This one will be used for General Ledger and as default value of Subledger accounting if dedicated user accounting account on user is not defined.
SALARIES_ACCOUNTING_ACCOUNT_CHARGE=Accounting account by default for wage payments SALARIES_ACCOUNTING_ACCOUNT_CHARGE=Accounting account by default for wage payments
CREATE_NEW_SALARY_WITHOUT_AUTO_PAYMENT=By default, leave empty the option "Automatically create a total payment" when creating a Salary
Salary=Salary Salary=Salary
Salaries=Salaries Salaries=Salaries
NewSalaryPayment=New salary payment NewSalary=New salary
NewSalaryPayment=New salary card
AddSalaryPayment=Add salary payment AddSalaryPayment=Add salary payment
SalaryPayment=Salary payment SalaryPayment=Salary payment
SalariesPayments=Salaries payments SalariesPayments=Salaries payments
SalariesPaymentsOf=Salaries payments of %s
ShowSalaryPayment=Show salary payment ShowSalaryPayment=Show salary payment
THM=Average hourly rate THM=Average hourly rate
TJM=Average daily rate TJM=Average daily rate
CurrentSalary=Current salary CurrentSalary=Current salary
THMDescription=This value may be used to calculate the cost of time consumed on a project entered by users if module project is used THMDescription=This value may be used to calculate the cost of time consumed on a project entered by users if module project is used
TJMDescription=This value is currently for information only and is not used for any calculation TJMDescription=This value is currently for information only and is not used for any calculation
LastSalaries=Latest %s salary payments LastSalaries=Latest %s salaries
AllSalaries=All salary payments AllSalaries=All salaries
SalariesStatistics=Salary statistics SalariesStatistics=Salary statistics
# Export
SalariesAndPayments=Salaries and payments SalariesAndPayments=Salaries and payments
ConfirmDeleteSalaryPayment=Do you want to delete this salary payment ?

View File

@ -34,7 +34,8 @@ TicketDictResolution=Ticket - Resolution
TicketTypeShortCOM=Commercial question TicketTypeShortCOM=Commercial question
TicketTypeShortHELP=Request for functionnal help TicketTypeShortHELP=Request for functionnal help
TicketTypeShortISSUE=Issue, bug or problem TicketTypeShortISSUE=Issue or bug
TicketTypeShortPROBLEM=Problem
TicketTypeShortREQUEST=Change or enhancement request TicketTypeShortREQUEST=Change or enhancement request
TicketTypeShortPROJET=Project TicketTypeShortPROJET=Project
TicketTypeShortOTHER=Other TicketTypeShortOTHER=Other
@ -54,14 +55,15 @@ TypeContact_ticket_internal_SUPPORTTEC=Assigned user
TypeContact_ticket_external_SUPPORTCLI=Customer contact / incident tracking TypeContact_ticket_external_SUPPORTCLI=Customer contact / incident tracking
TypeContact_ticket_external_CONTRIBUTOR=External contributor TypeContact_ticket_external_CONTRIBUTOR=External contributor
OriginEmail=Email source OriginEmail=Reporter Email
Notify_TICKET_SENTBYMAIL=Send ticket message by email Notify_TICKET_SENTBYMAIL=Send ticket message by email
# Status # Status
Read=Read Read=Read
Assigned=Assigned Assigned=Assigned
InProgress=In progress InProgress=In progress
NeedMoreInformation=Waiting for information NeedMoreInformation=Waiting for reporter feedback
NeedMoreInformationShort=Waiting for feedback
Answered=Answered Answered=Answered
Waiting=Waiting Waiting=Waiting
Closed=Closed Closed=Closed
@ -160,7 +162,7 @@ CreatedBy=Created by
NewTicket=New Ticket NewTicket=New Ticket
SubjectAnswerToTicket=Ticket answer SubjectAnswerToTicket=Ticket answer
TicketTypeRequest=Request type TicketTypeRequest=Request type
TicketCategory=Group TicketCategory=Ticket categorization
SeeTicket=See ticket SeeTicket=See ticket
TicketMarkedAsRead=Ticket has been marked as read TicketMarkedAsRead=Ticket has been marked as read
TicketReadOn=Read on TicketReadOn=Read on
@ -211,6 +213,7 @@ TicketMessageHelp=Only this text will be saved in the message list on ticket car
TicketMessageSubstitutionReplacedByGenericValues=Substitutions variables are replaced by generic values. TicketMessageSubstitutionReplacedByGenericValues=Substitutions variables are replaced by generic values.
TimeElapsedSince=Time elapsed since TimeElapsedSince=Time elapsed since
TicketTimeToRead=Time elapsed before read TicketTimeToRead=Time elapsed before read
TicketTimeElapsedBeforeSince=Time elapsed before / since
TicketContacts=Contacts ticket TicketContacts=Contacts ticket
TicketDocumentsLinked=Documents linked to ticket TicketDocumentsLinked=Documents linked to ticket
ConfirmReOpenTicket=Confirm reopen this ticket ? ConfirmReOpenTicket=Confirm reopen this ticket ?

View File

@ -97,8 +97,8 @@ LoginToCreate=Login to create
NameToCreate=Name of third party to create NameToCreate=Name of third party to create
YourRole=Your roles YourRole=Your roles
YourQuotaOfUsersIsReached=Your quota of active users is reached ! YourQuotaOfUsersIsReached=Your quota of active users is reached !
NbOfUsers=No. of users NbOfUsers=Number of users
NbOfPermissions=No. of permissions NbOfPermissions=Number of permissions
DontDowngradeSuperAdmin=Only a superadmin can downgrade a superadmin DontDowngradeSuperAdmin=Only a superadmin can downgrade a superadmin
HierarchicalResponsible=Supervisor HierarchicalResponsible=Supervisor
HierarchicView=Hierarchical view HierarchicView=Hierarchical view

View File

@ -31,7 +31,7 @@ AddWebsite=Add website
Webpage=Web page/container Webpage=Web page/container
AddPage=Add page/container AddPage=Add page/container
PageContainer=Page PageContainer=Page
PreviewOfSiteNotYetAvailable=Preview of your website <strong>%s</strong> not yet available. You must first '<strong>Import a full website template</strong>' or just '<strong>Add a page/container</strong>'. PreviewOfSiteNotYetAvailable=The preview of your website <strong>%s</strong> is not yet available. You must first '<strong>Import a full website template</strong>' or just '<strong>Add a page/container</strong>'.
RequestedPageHasNoContentYet=Requested page with id %s has no content yet, or cache file .tpl.php was removed. Edit content of the page to solve this. RequestedPageHasNoContentYet=Requested page with id %s has no content yet, or cache file .tpl.php was removed. Edit content of the page to solve this.
SiteDeleted=Web site '%s' deleted SiteDeleted=Web site '%s' deleted
PageContent=Page/Contenair PageContent=Page/Contenair

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