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

This commit is contained in:
Laurent Destailleur 2016-06-06 10:58:43 +02:00
commit 51ce4804dd
114 changed files with 790 additions and 578 deletions

View File

@ -121,6 +121,7 @@ NEW: When emailing is not sent completely, show progression.
For developers:
NEW: Add a css class style called 'reposition', so when clicking on a link with this class will move scrollbarr to be placed at same page location.
NEW: TimeZone can be supplied to mktime
NEW: hook in shipment card
NEW: Deprecated Societe::set_prospect_level, Societe::set_commnucation_level, Societe::set_OutstandingBill functions

View File

@ -138,7 +138,7 @@ if ($action == 'display' || $action == 'delete') {
if(!empty($obj)){
foreach ( $obj as $cpt ) {
$var = ! $var;
print "<tr $bc[$var]>";
print '<tr'. $bc[$var].'>';
print '<td>' . length_accountg($cpt->account_number) . '</td>';
print '<td>' . $cpt->label . '</td>';
print $form->formconfirm($_SERVER["PHP_SELF"]."?account_category=$cat_id&cptid=".$cpt->rowid, $langs->trans("DeleteCptCategory"), $langs->trans("ConfirmDeleteCptCategory"), "delete", '', 0, "action-delete".$j);

View File

@ -138,7 +138,7 @@ if ($result) {
while ( $i < min($num_lines, $limit) ) {
$objp = $db->fetch_object($result);
$var = ! $var;
print "<tr $bc[$var]>";
print '<tr'. $bc[$var].'>';
print '<td align="left">';
print $objp->accounting;

View File

@ -328,10 +328,10 @@ if ($result) {
$product_static = new Product($db);
print "<tr $bc[$var]>";
print '<tr'. $bc[$var].'>';
print "</tr>";
print "<tr $bc[$var]>";
print '<tr'. $bc[$var].'>';
// Ref produit as link
$product_static->ref = $obj->ref;
$product_static->id = $obj->rowid;

View File

@ -223,7 +223,7 @@ else {
if(empty($description)){
$link = '<a href="../admin/card.php?action=create&compte=' . length_accountg($line->numero_compte) . '">' . img_edit_add() .'</a>';
}
print "<tr $bc[$var]>";
print '<tr'. $bc[$var].'>';
print '<td>' . length_accountg($line->numero_compte) . '</td>';
print '<td>' . $description . '</td>';

View File

@ -346,7 +346,7 @@ if ($action == 'create') {
foreach ( $book->linesmvt as $line ) {
$var = ! $var;
print "<tr $bc[$var]>";
print '<tr'. $bc[$var].'>';
$total_debit += $line->debit;
$total_credit += $line->credit;
@ -400,7 +400,7 @@ if ($action == 'create') {
if ($action == "" || $action == 'add') {
$var = ! $var;
print "<tr $bc[$var]>";
print '<tr'. $bc[$var].'>';
print '<td>';
print $formventilation->select_account($account_number, 'account_number', 0, array (), 1, 1, '');
print '</td>';

View File

@ -368,7 +368,7 @@ foreach ( $object->lines as $line ) {
$total_debit += $line->debit;
$total_credit += $line->credit;
print "<tr $bc[$var]>";
print '<tr'. $bc[$var].'>';
print '<td><a href="./card.php?piece_num=' . $line->piece_num . '">' . $line->piece_num . '</a></td>';
print '<td align="center">' . dol_print_date($line->doc_date, 'day') . '</td>';

View File

@ -269,7 +269,7 @@ $var = True;
foreach ( $object->lines as $line ) {
$var = ! $var;
print "<tr $bc[$var]>";
print '<tr'. $bc[$var].'>';
print '<td>' . $line->piece_num . '</td>' . "\n";
print '<td>' . $line->doc_type . '</td>' . "\n";
print '<td>' . dol_print_date($line->doc_date) . '</td>';

View File

@ -288,7 +288,7 @@ if ($result) {
$var = ! $var;
$codecompta = length_accountg($objp->account_number) . ' - ' . $objp->label_compte;
print "<tr $bc[$var]>";
print '<tr'. $bc[$var].'>';
// Ref Invoice
$facture_static->ref = $objp->facnumber;

View File

@ -302,7 +302,7 @@ if ($result) {
if ($objp->code_sell_l != $objp->code_sell_p)
$code_sell_p_l_differ = 'color:red';
print "<tr $bc[$var]>";
print '<tr'. $bc[$var].'>';
// Ref Invoice
$facture_static->ref = $objp->facnumber;

View File

@ -127,7 +127,7 @@ if(!empty($cats))
$resultN = $AccCat->getResult($cpt['account_number'], 0, $year_current, $cpt['dc']);
$sommes[$code]['NP'] += $resultNP;
$sommes[$code]['N'] += $resultN;
print "<tr $bc[$var]>";
print '<tr'. $bc[$var].'>';
print '<td>' . $cpt['account_number'] . '</td>';
print '<td>' . $cpt['name_cpt'] . '</td>';
print '<td>' . price($resultNP) . '</td>';

View File

@ -236,7 +236,7 @@ if ($result) {
$var = ! $var;
$codeCompta = length_accountg($objp->account_number) . ' - ' . $objp->label;
print "<tr $bc[$var]>";
print '<tr'. $bc[$var].'>';
// Ref Invoice
$facturefournisseur_static->ref = $objp->facnumber;

View File

@ -314,7 +314,7 @@ if ($result) {
if ($objp->code_buy_l != $objp->code_buy_p)
$code_buy_p_l_differ = 'color:red';
print "<tr $bc[$var]>";
print '<tr'. $bc[$var].'>';
// Ref Invoice
$facturefourn_static->ref = $objp->ref;

View File

@ -200,7 +200,7 @@ if (! empty($conf->paybox->enabled) || ! empty($conf->paypal->enabled))
print '<tr '.$bc[$var].' id="tremail"><td>';
print $langs->trans("MEMBER_PAYONLINE_SENDEMAIL");
print '</td><td align="right">';
print '<input type="text" id="MEMBER_PAYONLINE_SENDEMAIL" name="MEMBER_PAYONLINE_SENDEMAIL" size="24" value="'.(! empty($conf->global->MEMBER_PAYONLINE_SENDEMAIL)?$conf->global->MEMBER_PAYONLINE_SENDEMAIL:'').'">';
print '<input type="text" id="MEMBER_PAYONLINE_SENDEMAIL" name="MEMBER_PAYONLINE_SENDEMAIL" size="24" value="'.(! empty($conf->global->MEMBER_PAYONLINE_SENDEMAIL)?$conf->global->MEMBER_PAYONLINE_SENDEMAIL:'').'">';
print "</td></tr>\n";
}

View File

@ -253,7 +253,8 @@ if (empty($reshook))
}
$lastname=$_POST["lastname"];
$firstname=$_POST["firstname"];
$morphy=$morphy=$_POST["morphy"];
$morphy=$_POST["morphy"];
$login=$_POST["login"];
if ($morphy != 'mor' && empty($lastname)) {
$error++;
$langs->load("errors");
@ -264,7 +265,19 @@ if (empty($reshook))
$langs->load("errors");
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Firstname")), null, 'errors');
}
if ($morphy == 'mor' && empty($societe)) {
$error++;
$langs->load("errors");
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Company")), null, 'errors');
}
// Test si le login existe deja
if (empty($conf->global->ADHERENT_LOGIN_NOT_REQUIRED))
{
if (empty($login)) {
$error++;
setEventMessages($langs->trans("ErrorFieldRequired", $langs->trans("Login")), null, 'errors');
}
}
// Create new object
if ($result > 0 && ! $error)
{
@ -506,6 +519,11 @@ if (empty($reshook))
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Password")), null, 'errors');
}
}
if ($morphy == 'mor' && empty($societe)) {
$error++;
$langs->load("errors");
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Company")), null, 'errors');
}
if ($morphy != 'mor' && empty($lastname)) {
$error++;
$langs->load("errors");

View File

@ -272,7 +272,7 @@ if ($action == 'create')
</script>';
print load_fiche_titre($langs->trans("NewMenu"),'','title_setup');
print '<form action="./edit.php?action=add&menuId='.$_GET['menuId'].'" method="post" name="formmenucreate">';
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
@ -284,7 +284,7 @@ if ($action == 'create')
$parent_rowid = $_GET['menuId'];
if ($_GET['menuId'])
{
$sql = "SELECT m.rowid, m.mainmenu, m.level, m.langs FROM ".MAIN_DB_PREFIX."menu as m WHERE m.rowid = ".$_GET['menuId'];
$sql = "SELECT m.rowid, m.mainmenu, m.leftmenu, m.level, m.langs FROM ".MAIN_DB_PREFIX."menu as m WHERE m.rowid = ".$_GET['menuId'];
$res = $db->query($sql);
if ($res)
{
@ -293,6 +293,7 @@ if ($action == 'create')
{
$parent_rowid = $menu['rowid'];
$parent_mainmenu = $menu['mainmenu'];
$parent_leftmenu = $menu['leftmenu'];
$parent_langs = $menu['langs'];
$parent_level = $menu['level'];
}
@ -343,7 +344,9 @@ if ($action == 'create')
{
print '<td><input type="text" size="20" id="menuId" name="menuId" value="'.($_POST["menuId"]?$_POST["menuId"]:'').'"></td>';
}
print '<td>'.$langs->trans('DetailMenuIdParent').'</td></tr>';
print '<td>'.$langs->trans('DetailMenuIdParent');
print ', '.$langs->trans("Example").': fk_mainmenu=abc&fk_leftmenu=def';
print '</td></tr>';
// Title
print '<tr><td class="fieldrequired">'.$langs->trans('Title').'</td><td><input type="text" size="30" name="titre" value="'.$_POST["titre"].'"></td><td>'.$langs->trans('DetailTitre').'</td></tr>';
@ -423,9 +426,10 @@ elseif ($action == 'edit')
// MenuId Parent
print '<tr><td class="fieldrequired">'.$langs->trans('MenuIdParent').'</td>';
print '<td><input type="text" name="fk_menu" value="'.$menu->fk_menu.'" size=10></td>';
//$menu_handler
//print '<td><input type="text" size="50" name="handler" value="all"></td>';
$valtouse=$menu->fk_menu;
if ($menu->fk_mainmenu) $valtouse='fk_mainmenu='.$menu->fk_mainmenu;
if ($menu->fk_leftmenu) $valtouse.='&fk_leftmenu='.$menu->fk_leftmenu;
print '<td><input type="text" name="fk_menu" value="'.$valtouse.'" size="10"></td>';
print '<td>'.$langs->trans('DetailMenuIdParent').'</td></tr>';
// Niveau

View File

@ -289,17 +289,18 @@ if ($conf->use_javascript_ajax)
- la chaine a afficher
ie: data[]= array (index, index parent, chaine )
*/
//il faut d'abord declarer un element racine de l'arbre
$data[] = array('rowid'=>0,'fk_menu'=>-1,'title'=>"racine",'mainmenu'=>'','leftmenu'=>'','fk_mainmenu'=>'','fk_leftmenu'=>'');
$data[] = array('rowid'=>0,'fk_menu'=>-1,'title'=>"racine",'mainmenu'=>'','leftmenu'=>'','fk_mainmenu'=>'','fk_leftmenu'=>'');
//puis tous les elements enfants
$sql = "SELECT m.rowid, m.titre, m.langs, m.mainmenu, m.leftmenu, m.fk_menu, m.fk_mainmenu, m.fk_leftmenu";
$sql = "SELECT m.rowid, m.titre, m.langs, m.mainmenu, m.leftmenu, m.fk_menu, m.fk_mainmenu, m.fk_leftmenu, m.module";
$sql.= " FROM ".MAIN_DB_PREFIX."menu as m";
$sql.= " WHERE menu_handler = '".$menu_handler_to_search."'";
$sql.= " AND entity = ".$conf->entity;
$sql.= " AND fk_menu >= 0";
//$sql.= " AND fk_menu >= 0";
$sql.= " ORDER BY m.position, m.rowid"; // Order is position then rowid (because we need a sort criteria when position is same)
$res = $db->query($sql);
@ -314,9 +315,10 @@ if ($conf->use_javascript_ajax)
$titre = $langs->trans($menu['titre']);
$data[] = array(
'rowid'=>$menu['rowid'],
'module'=>$menu['module'],
'fk_menu'=>$menu['fk_menu'],
'title'=>$titre,
'mainmenu'=>$menu['mainmenu'],
'mainmenu'=>$menu['mainmenu'],
'leftmenu'=>$menu['leftmenu'],
'fk_mainmenu'=>$menu['fk_mainmenu'],
'fk_leftmenu'=>$menu['fk_leftmenu'],
@ -334,17 +336,54 @@ if ($conf->use_javascript_ajax)
}
}
global $tree_recur_alreadyadded; // This var was def into tree_recur
// Appelle de la fonction recursive (ammorce)
// avec recherche depuis la racine.
//var_dump($data);
tree_recur($data,$data[0],0);
tree_recur($data, $data[0], 0, 'iddivjstree'); // $data[0] is virtual record 'racine'
print '</td>';
print '</tr>';
print '</table>';
// Process remaining records (records that are not linked to root by any path)
$remainingdata = array();
foreach($data as $datar)
{
if (empty($datar['rowid']) || $tree_recur_alreadyadded[$datar['rowid']]) continue;
$remainingdata[] = $datar;
}
if (count($remainingdata))
{
print '<table class="border" width="100%">';
print '<tr class="liste_titre">';
print '<td>'.$langs->trans("NotTopTreeMenuPersonalized").'</td>';
print '<td align="right"></td>';
print '</tr>';
print '<tr>';
print '<td colspan="2">';
foreach($remainingdata as $datar)
{
$father = array('rowid'=>$datar['rowid'],'title'=>"???",'mainmenu'=>$datar['fk_mainmenu'],'leftmenu'=>$datar['fk_leftmenu'],'fk_mainmenu'=>'','fk_leftmenu'=>'');
//print 'Start with rowid='.$datar['rowid'].' mainmenu='.$father ['mainmenu'].' leftmenu='.$father ['leftmenu'].'<br>'."\n";
tree_recur($data, $father, 0, 'iddivjstree'.$datar['rowid'], 1, 1);
}
print '</td>';
print '</tr>';
print '</table>';
}
print '</div>';

View File

@ -77,20 +77,20 @@ if (preg_match('/del_(.*)/',$action,$reg))
if ($action == 'add_currency')
{
$code = GETPOST('code', 'alpha');
$name = GETPOST('name', 'alpha');
$rate = GETPOST('rate', 'alpha');
$langs->loadCacheCurrencies('');
$code = GETPOST('code', 'alpha');
$rate = GETPOST('rate', 'alpha');
$currency = new MultiCurrency($db);
$currency->code = $code;
$currency->name = $name;
$currency->name = !empty($langs->cache_currencies[$code]['label']) ? $langs->cache_currencies[$code]['label'].' ('.$langs->getCurrencySymbol($code).')' : $code;
if ($currency->create($user) > 0)
{
if ($currency->addRate($rate)) setEventMessages($langs->trans('RecordSaved'), array());
else setEventMessages($langs->trans('ErrorAddRateFail'), array(), 'errors');
}
else setEventMessages($langs->trans('ErrorAddCurrencyFail'), array());
else setEventMessages($langs->trans('ErrorAddCurrencyFail'), $currency->errors, 'errors');
}
elseif ($action == 'update_currency')
{
@ -182,6 +182,7 @@ print '<td>'.$langs->trans("Parameters").'</td>'."\n";
print '<td align="center" width="20">&nbsp;</td>';
print '<td align="center" width="100">'.$langs->trans("Value").'</td>'."\n";
/* TODO uncomment when the functionality will integrated
$var=!$var;
print '<tr '.$bc[$var].'>';
print '<td>'.$langs->transnoentitiesnoconv("multicurrency_useRateOnInvoiceDate").'</td>';
@ -194,6 +195,7 @@ print $form->selectyesno("MULTICURRENCY_USE_RATE_ON_INVOICE_DATE",$conf->global-
print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
print '</form>';
print '</td></tr>';
*/
$var=!$var;
print '<tr '.$bc[$var].'>';
@ -208,6 +210,7 @@ print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">'
print '</form>';
print '</td></tr>';
/* TODO uncomment when the functionality will integrated
$var=!$var;
print '<tr '.$bc[$var].'>';
print '<td>'.$langs->transnoentitiesnoconv("multicurrency_buyPriceInCurrency").'</td>';
@ -220,7 +223,9 @@ print $form->selectyesno("MULTICURRENCY_BUY_PRICE_IN_CURRENCY",$conf->global->MU
print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
print '</form>';
print '</td></tr>';
*/
/* TODO uncomment when the functionality will integrated
$var=!$var;
print '<tr '.$bc[$var].'>';
print '<td>'.$langs->transnoentitiesnoconv("multicurrency_modifyRateApplication").'</td>';
@ -234,71 +239,75 @@ print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">'
print '</form>';
print '</td></tr>';
print '</table>';
print '<br />';
$var=false;
print '<table class="noborder" width="100%">';
print '<tr class="liste_titre">';
print '<td>'.$langs->trans("CurrencyLayerAccount").'</td>'."\n";
print '<td align="center" width="20">&nbsp;</td>';
print '<td align="right" width="100">';
print '<form id="form_sync" action="" method="POST">';
print '<input type="hidden" name="action" value="synchronize" />';
print '<textarea id="response" class="hideobject" name="response"></textarea>';
print $langs->trans("Value").'&nbsp;<input type="button" id="bt_sync" class="button" onclick="javascript:getRates();" value="'.$langs->trans('Synchronize').'" />';
print '</form>';
print '</td></tr>';
$var=!$var;
print '<tr '.$bc[$var].'>';
print '<td><a target="_blank" href="https://currencylayer.com">'.$langs->transnoentitiesnoconv("multicurrency_appId").'</a></td>';
print '<td align="center" width="20">&nbsp;</td>';
print '<td align="right" width="400">';
print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'">';
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<input type="hidden" name="action" value="set_MULTICURRENCY_APP_ID">';
print '<input type="text" name="MULTICURRENCY_APP_ID" value="'.$conf->global->MULTICURRENCY_APP_ID.'" size="28" />&nbsp;';
print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
print '</form>';
print '</td></tr>';
/* This property seems not used in code, so i comment it
$var=!$var;
print '<tr '.$bc[$var].'>';
print '<td>'.$langs->transnoentitiesnoconv("multicurrency_appCurrencySource").'</td>';
print '<td align="center" width="20">&nbsp;</td>';
print '<td align="right" width="400">';
print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'">';
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<input type="hidden" name="action" value="set_MULTICURRENCY_APP_SOURCE">';
print '<input type="text" name="MULTICURRENCY_APP_SOURCE" value="'.$conf->global->MULTICURRENCY_APP_SOURCE.'" size="10" placeholder="USD" />&nbsp;'; // Default: USD
print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
print '</form>';
print '</td></tr>';
$var=!$var;
print '<tr '.$bc[$var].'>';
print '<td>'.$langs->transnoentitiesnoconv("multicurrency_alternateCurrencySource").'</td>';
print '<td align="center" width="20">&nbsp;</td>';
print '<td align="right" width="400">';
print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'">';
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<input type="hidden" name="action" value="set_MULTICURRENCY_ALTERNATE_SOURCE">';
print '<input type="text" name="MULTICURRENCY_ALTERNATE_SOURCE" value="'.$conf->global->MULTICURRENCY_ALTERNATE_SOURCE.'" size="10" placeholder="EUR" />&nbsp;'; // Example: EUR
print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
print '</form>';
print '</td></tr>';
*/
print '</table>';
print '<br />';
if (!empty($conf->global->MAIN_MULTICURRENCY_ALLOW_SYNCHRONIZATION))
{
$var=false;
print '<table class="noborder" width="100%">';
print '<tr class="liste_titre">';
print '<td>'.$form->textwithpicto($langs->trans("CurrencyLayerAccount"), $langs->trans("CurrencyLayerAccount_help_to_synchronize")).'</td>'."\n";
print '<td align="center" width="20">&nbsp;</td>';
print '<td align="right" width="100">';
print '<form id="form_sync" action="" method="POST">';
print '<input type="hidden" name="action" value="synchronize" />';
print '<textarea id="response" class="hideobject" name="response"></textarea>';
print $langs->trans("Value").'&nbsp;<input type="button" id="bt_sync" class="button" onclick="javascript:getRates();" value="'.$langs->trans('Synchronize').'" />';
print '</form>';
print '</td></tr>';
$var=!$var;
print '<tr '.$bc[$var].'>';
print '<td><a target="_blank" href="https://currencylayer.com">'.$langs->transnoentitiesnoconv("multicurrency_appId").'</a></td>';
print '<td align="center" width="20">&nbsp;</td>';
print '<td align="right" width="400">';
print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'">';
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<input type="hidden" name="action" value="set_MULTICURRENCY_APP_ID">';
print '<input type="text" name="MULTICURRENCY_APP_ID" value="'.$conf->global->MULTICURRENCY_APP_ID.'" size="28" />&nbsp;';
print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
print '</form>';
print '</td></tr>';
$var=!$var;
print '<tr '.$bc[$var].'>';
print '<td>'.$langs->transnoentitiesnoconv("multicurrency_appCurrencySource").'</td>';
print '<td align="center" width="20">&nbsp;</td>';
print '<td align="right" width="400">';
print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'">';
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<input type="hidden" name="action" value="set_MULTICURRENCY_APP_SOURCE">';
print '<input type="text" name="MULTICURRENCY_APP_SOURCE" value="'.$conf->global->MULTICURRENCY_APP_SOURCE.'" size="10" placeholder="USD" />&nbsp;'; // Default: USD
print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
print '</form>';
print '</td></tr>';
$var=!$var;
print '<tr '.$bc[$var].'>';
print '<td>'.$langs->transnoentitiesnoconv("multicurrency_alternateCurrencySource").'</td>';
print '<td align="center" width="20">&nbsp;</td>';
print '<td align="right" width="400">';
print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'">';
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<input type="hidden" name="action" value="set_MULTICURRENCY_ALTERNATE_SOURCE">';
print '<input type="text" name="MULTICURRENCY_ALTERNATE_SOURCE" value="'.$conf->global->MULTICURRENCY_ALTERNATE_SOURCE.'" size="10" placeholder="EUR" />&nbsp;'; // Example: EUR
print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
print '</form>';
print '</td></tr>';
print '</table>';
print '<br />';
}
print '<table class="noborder" width="100%">';
print '<tr class="liste_titre">';
print '<td>'.$langs->trans("Currencies").'</td>'."\n";
print '<td>'.$form->textwithpicto($langs->trans("CurrenciesUsed"), $langs->transnoentitiesnoconv("CurrenciesUsed_help_to_add")).'</td>'."\n";
print '<td align="center" width="20">&nbsp;</td>';
print '<td align="center" width="100">'.$langs->trans("Rate").'</td>'."\n";
@ -307,7 +316,7 @@ print '<tr '.$bc[$var].'>';
print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'">';
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<input type="hidden" name="action" value="add_currency">';
print '<td><input type="text" name="code" value="" size="5" placeholder="'.$langs->trans('code').'" /> - <input type="text" name="name" value="" size="35" placeholder="'.$langs->trans('name').'" /></td>';
print '<td>'.$form->selectCurrency('', 'code').'</td>';
print '<td align="center" width="20">&nbsp;</td>';
print '<td align="right" width="300">';
print '<input type="text" name="rate" value="" size="13" placeholder="'.$langs->trans('rate').'" />&nbsp;';

View File

@ -1,6 +1,7 @@
<?php
/* Copyright (C) 2013-2016 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2015 Frederic France <frederic.france@free.fr>
* Copyright (C) 2016 Juanjo Menent <jmenent@2byte.es>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -377,7 +378,8 @@ if ($mode == 'template' && $user->admin)
if ($ret > 0) {
setEventMessages($printer->error, $printer->errors, 'errors');
} else {
for ($line=0; $line < count($printer->listprinterstemplates); $line++) {
$max = count($printer->listprinterstemplates);
for ($line=0; $line < $max; $line++) {
$var = !$var;
print '<tr '.$bc[$var].'>';
if ($action=='edittemplate' && $printer->listprinterstemplates[$line]['rowid']==$templateid) {
@ -422,7 +424,8 @@ if ($mode == 'template' && $user->admin)
print '<th>'.$langs->trans("Tag").'</th>';
print '<th>'.$langs->trans("Description").'</th>';
print "</tr>\n";
for ($tag=0; $tag < count($printer->tags); $tag++) {
$max = count($printer->tags);
for ($tag=0; $tag < $max; $tag++) {
$var = !$var;
print '<tr '.$bc[$var].'>';
print '<td>&lt;'.$printer->tags[$tag].'&gt;</td><td>'.$langs->trans(strtoupper($printer->tags[$tag])).'</td>';

View File

@ -1,7 +1,7 @@
<?php
/* Copyright (C) 2001-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2003 Eric Seigne <erics@rycks.com>
* Copyright (C) 2004-2015 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2004-2016 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com>
*
* This program is free software; you can redistribute it and/or modify
@ -199,7 +199,7 @@ if ($status == 'todo') { $sql.= " AND ((a.percent >= 0 AND a.percent < 100) OR (
if ($filtert > 0 || $usergroup > 0)
{
$sql.= " AND (";
if ($filtert > 0) $sql.= "(ar.fk_element = ".$filtert." OR a.fk_user_action=".$filtert.")";
if ($filtert > 0) $sql.= "(ar.fk_element = ".$filtert." OR (ar.fk_element IS NULL AND a.fk_user_action=".$filtert."))"; // The OR is for backward compatibility
if ($usergroup > 0) $sql.= ($filtert>0?" OR ":"")." ugu.fk_usergroup = ".$usergroup;
$sql.= ")";
}
@ -368,7 +368,7 @@ if ($resql)
$actionstatic->type_code=$obj->type_code;
$actionstatic->type_label=$obj->type_label;
$actionstatic->label=$obj->label;
print $actionstatic->getNomUrl(1,28);
print $actionstatic->getNomUrl(1,36);
print '</td>';
if (! empty($conf->global->AGENDA_USE_EVENT_TYPE))

View File

@ -1433,7 +1433,7 @@ if ($action == 'create')
print '<td>'.fieldLabel('Currency','multicurrency_code').'</td>';
print '<td colspan="3" class="maxwidthonsmartphone">';
$currency_code = (!empty($soc->multicurrency_code) ? $soc->multicurrency_code : ($object->multicurrency_code ? $object->multicurrency_code : $conf->currency));
print $form->selectMultiCurrency($currency_code, 'multicurrency_code', 1);
print $form->selectMultiCurrency($currency_code, 'multicurrency_code', 0);
print '</td></tr>';
}

View File

@ -2570,7 +2570,7 @@ class Propal extends CommonObject
$response = new WorkboardResponse();
$response->warning_delay = $delay_warning/60/60/24;
$response->label = $label;
$response->url = DOL_URL_ROOT.'/comm/propal/list.php?viewstatut='.$statut;
$response->url = DOL_URL_ROOT.'/comm/propal/list.php?viewstatut='.$statut.'&mainmenu=commercial&leftmenu=propals';
$response->img = img_object($langs->trans("Propals"),"propal");
// This assignment in condition is not a bug. It allows walking the results.
@ -2674,9 +2674,12 @@ class Propal extends CommonObject
$line->remise_percent=00;
}
$prodid = mt_rand(1, $num_prods);
$line->fk_product=$prodids[$prodid];
if ($num_prods > 0)
{
$prodid = mt_rand(1, $num_prods);
$line->fk_product=$prodids[$prodid];
}
$this->lines[$xnbp]=$line;
$this->total_ht += $line->total_ht;

View File

@ -2974,7 +2974,7 @@ class Commande extends CommonOrder
$response = new WorkboardResponse();
$response->warning_delay=$conf->commande->client->warning_delay/60/60/24;
$response->label=$langs->trans("OrdersToProcess");
$response->url=DOL_URL_ROOT.'/commande/list.php?viewstatut=-3';
$response->url=DOL_URL_ROOT.'/commande/list.php?viewstatut=-3&mainmenu=commercial&leftmenu=orders';
$response->img=img_object($langs->trans("Orders"),"order");
$generic_commande = new Commande($this->db);
@ -3278,9 +3278,12 @@ class Commande extends CommonOrder
$line->total_tva=19.6;
$line->remise_percent=0;
}
$prodid = mt_rand(1, $num_prods);
$line->fk_product=$prodids[$prodid];
if ($num_prods > 0)
{
$prodid = mt_rand(1, $num_prods);
$line->fk_product=$prodids[$prodid];
}
$this->lines[$xnbp]=$line;
$this->total_ht += $line->total_ht;

View File

@ -206,7 +206,7 @@ class CommandeStats extends Stats
$sql = "SELECT product.ref, COUNT(product.ref) as nb, SUM(tl.".$this->field_line.") as total, AVG(tl.".$this->field_line.") as avg";
$sql.= " FROM ".$this->from.", ".$this->from_line.", ".MAIN_DB_PREFIX."product as product";
//if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
$sql.= " WHERE ".$this->where;
$sql.= " AND c.rowid = tl.fk_commande AND tl.fk_product = product.rowid";
$sql.= " AND c.date_commande BETWEEN '".$this->db->idate(dol_get_first_day($year,1,false))."' AND '".$this->db->idate(dol_get_last_day($year,12,false))."'";

View File

@ -46,7 +46,16 @@ foreach($linkedObjectBlock as $key => $objectlink)
echo price($objectlink->total_ht);
} ?></td>
<td align="right"><?php echo $objectlink->getLibStatut(3); ?></td>
<td align="right"><a href="<?php echo $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=dellink&dellinkid='.$key; ?>"><?php echo img_delete($langs->transnoentitiesnoconv("RemoveLink")); ?></a></td>
<td align="right">
<?php
// For now, shipments must stay linked to order, so link is not deletable
if($object->element != 'shipping') {
?>
<a href="<?php echo $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=dellink&dellinkid='.$key; ?>"><?php echo img_delete($langs->transnoentitiesnoconv("RemoveLink")); ?></a>
<?php
}
?>
</td>
</tr>
<?php
}

View File

@ -863,7 +863,7 @@ if (empty($reshook))
}
}
// Standard invoice or Deposit invoice created from a Predefined invoice
// Standard invoice or Deposit invoice created from a Predefined template invoice
if (($_POST['type'] == Facture::TYPE_STANDARD || $_POST['type'] == Facture::TYPE_DEPOSIT) && GETPOST('fac_rec') > 0)
{
$dateinvoice = dol_mktime(12, 0, 0, $_POST['remonth'], $_POST['reday'], $_POST['reyear']);
@ -2036,7 +2036,7 @@ if ($action == 'create')
if (!empty($conf->multicurrency->enabled) && !empty($soc->multicurrency_code)) $currency_code = $soc->multicurrency_code;
}
$absolute_discount = $soc->getAvailableDiscounts();
if(!empty($soc->id)) $absolute_discount = $soc->getAvailableDiscounts();
if (! empty($conf->use_javascript_ajax))
{

View File

@ -666,7 +666,7 @@ class FactureRec extends CommonInvoice
$facture->fac_rec = $facturerec->id; // We will create $facture from this recurring invoice
$facture->type = self::TYPE_STANDARD;
$facture->brouillon = 1;
$facture->date = $now;
$facture->date = $facturerec->date_when; // We could also use dol_now here but we prefer date_when so invoice has real date when we would like even if we generate later.
$facture->socid = $facturerec->socid;
$invoiceidgenerated = $facture->create($user); // This will also update fields of recurring invoice
@ -962,6 +962,7 @@ class FactureRec extends CommonInvoice
if ($this->db->query($sql))
{
$this->date_when = $date;
if ($increment_nb_gen_done>0) $_facrec->nb_gen_done++;
return 1;
}
else

View File

@ -309,13 +309,12 @@ class Facture extends CommonInvoice
$forceduedate = $this->calculate_date_lim_reglement();
// Update date and number of last generation of recurring template invoice, before inserting new invoice
// For recurrn invoices, update date and number of last generation of recurring template invoice, before inserting new invoice
if ($_facrec->frequency > 0)
{
$_facrec->nb_gen_done++;
$next_date = $_facrec->getNextDate(); // Calculate next date
$_facrec->setValueFrom('date_last_gen', $now, '', null, 'date');
$_facrec->setValueFrom('nb_gen_done', $_facrec->nb_gen_done + 1);
//$_facrec->setValueFrom('nb_gen_done', $_facrec->nb_gen_done + 1); // Not required, +1 already included into setNextDate when second param is 1.
$_facrec->setNextDate($next_date,1);
}
}
@ -3465,7 +3464,7 @@ class Facture extends CommonInvoice
$response = new WorkboardResponse();
$response->warning_delay=$conf->facture->client->warning_delay/60/60/24;
$response->label=$langs->trans("CustomerBillsUnpaid");
$response->url=DOL_URL_ROOT.'/compta/facture/list.php?search_status=1';
$response->url=DOL_URL_ROOT.'/compta/facture/list.php?search_status=1&mainmenu=accountancy&leftmenu=customers_bills';
$response->img=img_object($langs->trans("Bills"),"bill");
$generic_facture = new Facture($this->db);

View File

@ -1256,8 +1256,13 @@ else
print '<br>';
// Frequencry/Recurring section
if ($object->frequency > 0)
{
if (empty($conf->cron->enabled))
{
print info_admin($langs->trans("EnableAndSetupModuleCron", $langs->transnoentitiesnoconv("Module2300Name")));
}
print '<table class="border" width="100%">';

View File

@ -182,7 +182,7 @@ if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'e
include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';
// Do we click on purge search criteria ?
if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter")) // Both test are required to be compatible with all browsers
if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter") || GETPOST("button_removefilter.x")) // Both test are required to be compatible with all browsers
{
$search_user='';
$search_sale='';

View File

@ -2,7 +2,7 @@
/* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004-2013 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2005-2015 Regis Houssin <regis.houssin@capnetworks.com>
* Copyright (C) 2015 Juanjo Menent <jmenent@2byte.es>
* Copyright (C) 2015-2016 Juanjo Menent <jmenent@2byte.es>
* Copyright (C) 2015 Jean-François Ferry <jfefe@aternatik.fr>
* Copyright (C) 2015 Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr>
* Copyright (C) 2016 Marcos García <marcosgdf@gmail.com>
@ -877,7 +877,7 @@ if (! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->facture-
if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = ".$user->id;
if ($socid) $sql.= " AND ff.fk_soc = ".$socid;
$sql.= " GROUP BY ff.rowid, ff.ref, ff.fk_statut, ff.libelle, ff.total_ht, ff.tva, ff.total_tva, ff.total_ttc, ff.paye,";
$sql.= " s.nom, s.rowid, s.code_client, s.code_fournisseur";
$sql.= " s.nom, s.rowid, s.code_client, s.code_fournisseur, ff.date_lim_reglement";
$sql.= " ORDER BY ff.date_lim_reglement ASC";
$resql=$db->query($sql);

View File

@ -2147,8 +2147,11 @@ class Contrat extends CommonObject
$line->total_ht=90;
$line->total_ttc=107.64; // 90 * 1.196
$line->total_tva=17.64;
$prodid = mt_rand(1, $num_prods);
$line->fk_product=$prodids[$prodid];
if ($num_prods > 0)
{
$prodid = mt_rand(1, $num_prods);
$line->fk_product=$prodids[$prodid];
}
$this->lines[$xnbp]=$line;
$xnbp++;
}

View File

@ -256,7 +256,7 @@ if ($resql)
print '<input type="text" class="flat" size="3" name="search_contract" value="'.dol_escape_htmltag($search_contract).'">';
print '</td>';
print '<td class="liste_titre">';
print '<input type="text" class="flat" size="6" name="search_ref_customer value="'.dol_escape_htmltag($search_ref_supplier).'">';
print '<input type="text" class="flat" size="6" name="search_ref_customer value="'.dol_escape_htmltag($search_ref_customer).'">';
print '</td>';
print '<td class="liste_titre">';
print '<input type="text" class="flat" size="6" name="search_ref_supplier value="'.dol_escape_htmltag($search_ref_supplier).'">';

View File

@ -240,7 +240,10 @@ if ($section)
require_once DOL_DOCUMENT_ROOT.'/core/class/html.form.class.php';
$useglobalvars=1;
$form = new Form($db);
$formquestion=array('urlfile'=>array('type'=>'hidden','value'=>$urlfile,'name'=>'urlfile'));
$formquestion=array(
'urlfile'=>array('type'=>'hidden','value'=>$urlfile,'name'=>'urlfile'),
'section'=>array('type'=>'hidden','value'=>$section,'name'=>'section')
);
print $form->formconfirm($url,$langs->trans("DeleteFile"),$langs->trans("ConfirmDeleteFile"),'confirm_deletefile',$formquestion,"no",($useajax?'deletefile':0));
}

View File

@ -744,7 +744,8 @@ abstract class CommonObject
$sql = "DELETE FROM ".MAIN_DB_PREFIX."element_contact";
$sql.= " WHERE element_id = ".$this->id;
$sql.= " AND fk_c_type_contact IN (".$listId.")";
if ($listId)
$sql.= " AND fk_c_type_contact IN (".$listId.")";
dol_syslog(get_class($this)."::delete_linked_contact", LOG_DEBUG);
if ($this->db->query($sql))

View File

@ -1133,7 +1133,7 @@ class ExtraFields
if ($InfoFieldList[0] && class_exists($InfoFieldList[0]))
{
$object = new $InfoFieldList[0]($this->db);
$object->fetch($value);
if (!empty($value)) $object->fetch($value);
$valuetoshow=$object->ref;
if ($object->element == 'societe') $valuetoshow=$object->name; // Special case for thirdparty because ref is id because name is not unique
$out.='<input type="text" class="flat" name="'.$keysuffix.'options_'.$key.$keyprefix.'" size="20" value="'.$valuetoshow.'" >';

View File

@ -2329,7 +2329,7 @@ class Form
$sql.= " FROM ".MAIN_DB_PREFIX."product as p";
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur_price as pfp ON p.rowid = pfp.fk_product";
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON pfp.fk_soc = s.rowid";
$sql.= " WHERE p.entity IN (".getEntity('product', 1).")";
$sql.= " WHERE p.entity IN (".getEntity('productprice', 1).")";
$sql.= " AND p.tobuy = 1";
$sql.= " AND s.fournisseur = 1";
$sql.= " AND p.rowid = ".$productid;
@ -3812,7 +3812,7 @@ class Form
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<table class="nobordernopadding" cellpadding="0" cellspacing="0">';
print '<tr><td>';
print $this->selectMultiCurrency($selected, $htmlname, 1);
print $this->selectMultiCurrency($selected, $htmlname, 0);
print '</td>';
print '<td align="left"><input type="submit" class="button" value="'.$langs->trans("Modify").'"></td>';
print '</tr></table></form>';
@ -4091,7 +4091,7 @@ class Form
$out='';
$out.= '<select class="flat" name="'.$htmlname.'" id="'.$htmlname.'">';
if ($useempty) $out .= '<option value="'.$conf->currency.'"'.((empty($selected) || $selected == $conf->currency)?' selected="selected"':'').'>'.$langs->cache_currencies[$conf->currency]['label'].'</option>';
if ($useempty) $out .= '<option value=""></option>';
if (count($TCurrency) > 0)
{
foreach ($langs->cache_currencies as $code_iso => $currency)

View File

@ -162,68 +162,52 @@ class Ldap
return -1;
}
if (! function_exists('ldap_connect'))
if (! function_exists("ldap_connect"))
{
$this->error='Your PHP need extension ldap';
$this->error='LDAPFunctionsNotAvailableOnPHP';
dol_syslog(get_class($this)."::connect_bind ".$this->error, LOG_WARNING);
return -1;
$return=-1;
}
// Loop on each ldap server
foreach ($this->server as $key => $host)
if (empty($this->error))
{
if ($connected) break;
if (empty($host)) continue;
if (preg_match('/^ldap/',$host))
// Loop on each ldap server
foreach ($this->server as $key => $host)
{
$this->connection = ldap_connect($host);
}
else
{
$this->connection = ldap_connect($host,$this->serverPort);
}
if (is_resource($this->connection))
{
// Begin TLS if requested by the configuration
if (! empty($conf->global->LDAP_SERVER_USE_TLS))
{
if (! ldap_start_tls($this->connection))
{
dol_syslog(get_class($this)."::connect_bind failed to start tls", LOG_WARNING);
$connected = 0;
$this->close();
}
}
// Execute the ldap_set_option here (after connect and before bind)
$this->setVersion();
ldap_set_option($this->connection, LDAP_OPT_SIZELIMIT, 0); // no limit here. should return true.
if ($this->serverType == "activedirectory")
if ($connected) break;
if (empty($host)) continue;
if (preg_match('/^ldap/',$host))
{
$result=$this->setReferrals();
dol_syslog(get_class($this)."::connect_bind try bindauth for activedirectory on ".$host." user=".$this->searchUser." password=".preg_replace('/./','*',$this->searchPassword),LOG_DEBUG);
$this->result=$this->bindauth($this->searchUser,$this->searchPassword);
if ($this->result)
{
$this->bind=$this->result;
$connected=2;
break;
}
else
{
$this->error=ldap_errno($this->connection).' '.ldap_error($this->connection);
}
$this->connection = ldap_connect($host);
}
else
{
// Try in auth mode
if ($this->searchUser && $this->searchPassword)
$this->connection = ldap_connect($host,$this->serverPort);
}
if (is_resource($this->connection))
{
// Begin TLS if requested by the configuration
if (! empty($conf->global->LDAP_SERVER_USE_TLS))
{
if (! ldap_start_tls($this->connection))
{
dol_syslog(get_class($this)."::connect_bind failed to start tls", LOG_WARNING);
$connected = 0;
$this->close();
}
}
// Execute the ldap_set_option here (after connect and before bind)
$this->setVersion();
ldap_set_option($this->connection, LDAP_OPT_SIZELIMIT, 0); // no limit here. should return true.
if ($this->serverType == "activedirectory")
{
dol_syslog(get_class($this)."::connect_bind try bindauth on ".$host." user=".$this->searchUser." password=".preg_replace('/./','*',$this->searchPassword),LOG_DEBUG);
$result=$this->setReferrals();
dol_syslog(get_class($this)."::connect_bind try bindauth for activedirectory on ".$host." user=".$this->searchUser." password=".preg_replace('/./','*',$this->searchPassword),LOG_DEBUG);
$this->result=$this->bindauth($this->searchUser,$this->searchPassword);
if ($this->result)
{
@ -236,26 +220,45 @@ class Ldap
$this->error=ldap_errno($this->connection).' '.ldap_error($this->connection);
}
}
// Try in anonymous
if (! $this->bind)
else
{
dol_syslog(get_class($this)."::connect_bind try bind on ".$host,LOG_DEBUG);
$result=$this->bind();
if ($result)
// Try in auth mode
if ($this->searchUser && $this->searchPassword)
{
$this->bind=$this->result;
$connected=1;
break;
dol_syslog(get_class($this)."::connect_bind try bindauth on ".$host." user=".$this->searchUser." password=".preg_replace('/./','*',$this->searchPassword),LOG_DEBUG);
$this->result=$this->bindauth($this->searchUser,$this->searchPassword);
if ($this->result)
{
$this->bind=$this->result;
$connected=2;
break;
}
else
{
$this->error=ldap_errno($this->connection).' '.ldap_error($this->connection);
}
}
else
// Try in anonymous
if (! $this->bind)
{
$this->error=ldap_errno($this->connection).' '.ldap_error($this->connection);
dol_syslog(get_class($this)."::connect_bind try bind on ".$host,LOG_DEBUG);
$result=$this->bind();
if ($result)
{
$this->bind=$this->result;
$connected=1;
break;
}
else
{
$this->error=ldap_errno($this->connection).' '.ldap_error($this->connection);
}
}
}
}
if (! $connected) $this->close();
}
if (! $connected) $this->close();
}
if ($connected)

View File

@ -264,6 +264,8 @@ class Menubase
$sql.= " t.mainmenu,";
$sql.= " t.leftmenu,";
$sql.= " t.fk_menu,";
$sql.= " t.fk_mainmenu,";
$sql.= " t.fk_leftmenu,";
$sql.= " t.position,";
$sql.= " t.url,";
$sql.= " t.target,";
@ -293,6 +295,8 @@ class Menubase
$this->mainmenu = $obj->mainmenu;
$this->leftmenu = $obj->leftmenu;
$this->fk_menu = $obj->fk_menu;
$this->fk_mainmenu = $obj->fk_mainmenu;
$this->fk_leftmenu = $obj->fk_leftmenu;
$this->position = $obj->position;
$this->url = $obj->url;
$this->target = $obj->target;

View File

@ -736,17 +736,24 @@ function activateModule($value,$withdeps=1)
if (isset($objMod->depends) && is_array($objMod->depends) && ! empty($objMod->depends))
{
// Activation des modules dont le module depend
$TError=array();
$num = count($objMod->depends);
for ($i = 0; $i < $num; $i++)
{
$activate = false;
foreach ($modulesdir as $dir)
{
if (file_exists($dir.$objMod->depends[$i].".class.php"))
{
activateModule($objMod->depends[$i]);
$activate = true;
}
}
if (!$activate) $TError[] = $langs->trans('activateModuleDependNotSatisfied', $objMod->name, $objMod->depends[$i]);
}
setEventMessages('', $TError, 'errors');
}
if (isset($objMod->conflictwith) && is_array($objMod->conflictwith) && ! empty($objMod->conflictwith))

View File

@ -436,7 +436,7 @@ function dol_size($size,$type='')
*/
function dol_sanitizeFileName($str,$newstr='_',$unaccent=1)
{
$filesystem_forbidden_chars = array('<','>',':','/','\\','?','*','|','"');
$filesystem_forbidden_chars = array('<','>',':','/','\\','?','*','|','"','°');
return dol_string_nospecial($unaccent?dol_string_unaccent($str):$str, $newstr, $filesystem_forbidden_chars);
}
@ -902,8 +902,15 @@ function dol_banner_tab($object, $paramid, $morehtml='', $shownav=1, $fieldid='r
if ($showimage) $morehtmlleft.='<div class="floatleft inline-block valignmiddle divphotoref">'.$object->show_photos($conf->product->multidir_output[$object->entity],'small',-$maxvisiblephotos,0,0,0,$width,0).'</div>';
else
{
$nophoto='/public/theme/common/nophoto.png';
$morehtmlleft.='<div class="floatleft inline-block valignmiddle divphotoref"><img class="photo'.$modulepart.($cssclass?' '.$cssclass:'').'" alt="No photo" border="0"'.($width?' width="'.$width.'"':'').($height?' height="'.$height.'"':'').' src="'.DOL_URL_ROOT.$nophoto.'"></div>';
if (!empty($conf->global->PRODUCT_NODISPLAYIFNOPHOTO)) {
$nophoto='';
$morehtmlleft.='<div class="floatleft inline-block valignmiddle divphotoref"></div>';
}
else {
$nophoto='/public/theme/common/nophoto.png';
$morehtmlleft.='<div class="floatleft inline-block valignmiddle divphotoref"><img class="photo'.$modulepart.($cssclass?' '.$cssclass:'').'" alt="No photo" border="0"'.($width?' width="'.$width.'"':'').($height?' height="'.$height.'"':'').' src="'.DOL_URL_ROOT.$nophoto.'"></div>';
}
}
}
else

View File

@ -109,15 +109,17 @@ function tree_showpad(&$fulltree,$key,$silent=0)
* @param int $pere Array with parent ids ('rowid'=>,'mainmenu'=>,'leftmenu'=>,'fk_mainmenu=>,'fk_leftmenu=>)
* @param int $rang Level of element
* @param string $iddivjstree Id to use for parent ul element
* @param int $donoresetalreadyloaded Do not reset global array $donoresetalreadyloaded used to avoid to go down on an aleady processed record
* @param int $showfk Show fk links to parent into label
* @return void
*/
function tree_recur($tab, $pere, $rang, $iddivjstree='iddivjstree')
function tree_recur($tab, $pere, $rang, $iddivjstree='iddivjstree', $donoresetalreadyloaded=0, $showfk=0)
{
global $tree_recur_alreadyadded;
if ($rang == 0) $tree_recur_alreadyadded=array();
if ($rang == 0 && empty($donoresetalreadyloaded)) $tree_recur_alreadyadded=array();
if (empty($pere['rowid']))
if ($rang == 0)
{
// Test also done with jstree and dynatree (not able to have <a> inside label)
print '<script type="text/javascript" language="javascript">
@ -161,7 +163,9 @@ function tree_recur($tab, $pere, $rang, $iddivjstree='iddivjstree')
}
print "\n".'<li '.($tab[$x]['statut']?' class="liuseractive"':'class="liuserdisabled"').'>';
print $tab[$x]['entry'];
$tree_recur_alreadyadded[$tab[$x]['rowid']]=$rang;
if ($showfk) print '&nbsp; (fk_mainmenu='.$tab[$x]['fk_mainmenu'].' fk_leftmenu='.$tab[$x]['fk_leftmenu'].')';
//print ' -> A '.$tab[$x]['rowid'].' mainmenu='.$tab[$x]['mainmenu'].' leftmenu='.$tab[$x]['leftmenu'].' fk_mainmenu='.$tab[$x]['fk_mainmenu'].' fk_leftmenu='.$tab[$x]['fk_leftmenu'].'<br>'."\n";
$tree_recur_alreadyadded[$tab[$x]['rowid']]=($rang + 1);
// And now we search all its sons of lower level
tree_recur($tab,$tab[$x],$rang+1);
print '</li>';
@ -173,7 +177,8 @@ function tree_recur($tab, $pere, $rang, $iddivjstree='iddivjstree')
{
if (! empty($tree_recur_alreadyadded[$tab[$x]['rowid']]))
{
dol_syslog('Error, record with id '.$tab[$x]['rowid'].' seems to be a child of record with id '.$pere['rowid'].' but it was already output. Complete field "leftmenu" and "mainmenu" on ALL records to avoid ambiguity.', LOG_WARNING);
dol_syslog('Error, record with id '.$tab[$x]['rowid'].' seems to be a child of record with id '.$pere['rowid'].' but it was already output. Complete field "leftmenu" and "mainmenu" on ALL records to avoid ambiguity.', LOG_WARNING);
//print 'Error, record with id '.$tab[$x]['rowid'].' seems to be a child of record with id '.$pere['rowid'].' but it was already output. Complete field "leftmenu" and "mainmenu" on ALL records to avoid ambiguity.';
continue;
}
@ -181,15 +186,17 @@ function tree_recur($tab, $pere, $rang, $iddivjstree='iddivjstree')
}
print "\n".'<li '.($tab[$x]['statut']?' class="liuseractive"':'class="liuserdisabled"').'>';
print $tab[$x]['entry'];
$tree_recur_alreadyadded[$tab[$x]['rowid']]=$rang;
if ($showfk) print '&nbsp; (fk_mainmenu='.$tab[$x]['fk_mainmenu'].' fk_leftmenu='.$tab[$x]['fk_leftmenu'].')';
//print ' -> B '.$tab[$x]['rowid'].' mainmenu='.$tab[$x]['mainmenu'].' leftmenu='.$tab[$x]['leftmenu'].' fk_mainmenu='.$tab[$x]['fk_mainmenu'].' fk_leftmenu='.$tab[$x]['fk_leftmenu'].'<br>'."\n";
$tree_recur_alreadyadded[$tab[$x]['rowid']]=($rang + 1);
// And now we search all its sons of lower level
//print 'Appel de tree_recur pour x='.$x.' rowid='.$tab[$x]['rowid']." fk_mainmenu pere = ".$tab[$x]['fk_mainmenu']." fk_leftmenu pere = ".$tab[$x]['fk_leftmenu']."<br>\n";
//print 'Call tree_recur for x='.$x.' rowid='.$tab[$x]['rowid']." fk_mainmenu pere = ".$tab[$x]['fk_mainmenu']." fk_leftmenu pere = ".$tab[$x]['fk_leftmenu']."<br>\n";
tree_recur($tab,$tab[$x],$rang+1);
print '</li>';
}
}
if (! empty($ulprinted) && ! empty($pere['rowid'])) { print '</ul>'."\n"; }
if (empty($pere['rowid'])) print '</ul>';
if ($rang == 0) print '</ul>';
}

View File

@ -788,8 +788,8 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
if (! empty($conf->facture->enabled))
{
$langs->load("bills");
$newmenu->add("/compta/facture/list.php",$langs->trans("BillsCustomers"),0,$user->rights->facture->lire, '', $mainmenu, 'customers_bills');
$newmenu->add("/compta/facture.php?action=create",$langs->trans("NewBill"),1,$user->rights->facture->creer);
$newmenu->add("/compta/facture/list.php?leftmenu=customers_bills",$langs->trans("BillsCustomers"),0,$user->rights->facture->lire, '', $mainmenu, 'customers_bills');
$newmenu->add("/compta/facture.php?action=create&leftmenu=customers_bills",$langs->trans("NewBill"),1,$user->rights->facture->creer);
$newmenu->add("/compta/facture/list.php?leftmenu=customers_bills",$langs->trans("List"),1,$user->rights->facture->lire);
if (empty($leftmenu) || ($leftmenu == 'customers_bills'))

View File

@ -397,6 +397,7 @@ class doc_generic_proposal_odt extends ModelePDFPropales
$tmparray = array_merge($array_user,$array_soc,$array_thirdparty,$array_objet,$array_other,$array_thirdparty_contact);
complete_substitutions_array($tmparray, $outputlangs, $object);
$object->fetch_optionals();
// Call the ODTSubstitution hook
$parameters=array('odfHandler'=>&$odfHandler,'file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs,'substitutionarray'=>&$tmparray);
$reshook=$hookmanager->executeHooks('ODTSubstitution',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks

View File

@ -711,7 +711,7 @@ class pdf_azur extends ModelePDFPropales
if (file_exists($infile) && is_readable($infile)) {
$pagecount = $pdf->setSourceFile($infile);
for($i = 1; $i <= $pagecount; $i ++) {
$tplIdx = $pdf->importPage(1);
$tplIdx = $pdf->importPage($i);
if ($tplIdx!==false) {
$s = $pdf->getTemplatesize($tplIdx);
$pdf->AddPage($s['h'] > $s['w'] ? 'P' : 'L');

View File

@ -175,10 +175,9 @@ if ($action == 'confirm_deletefile')
dol_print_error($db,$ecmdir->error);
exit;
}
$relativepath=$ecmdir->getRelativePath();
}
else $relativepath='';
$upload_dir = $conf->ecm->dir_output.($relativepath?'/'.$relativepath:'');
$upload_dir = $conf->ecm->dir_output;
$file = $upload_dir . "/" . GETPOST('urlfile'); // Do not use urldecode here ($_GET and $_POST are already decoded by PHP).
$ret=dol_delete_file($file);

View File

@ -41,12 +41,20 @@ foreach($linkedObjectBlock as $key => $objectlink)
<td></td>
<td align="center"><?php echo dol_print_date($objectlink->date_delivery,'day'); ?></td>
<td align="right"><?php
/*if ($user->rights->expedition->lire) {
if ($user->rights->expedition->lire) {
$total = $total + $objectlink->total_ht;
echo price($objectlink->total_ht);
}*/ ?></td>
} ?></td>
<td align="right"><?php echo $objectlink->getLibStatut(3); ?></td>
<td align="right"><a href="<?php echo $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=dellink&dellinkid='.$key; ?>"><?php echo img_delete($langs->transnoentitiesnoconv("RemoveLink")); ?></a></td>
<td align="right">
<?php
// For now, shipments must stay linked to order, so link is not deletable
if($object->element != 'commande') {
?>
<a href="<?php echo $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=dellink&dellinkid='.$key; ?>"><?php echo img_delete($langs->transnoentitiesnoconv("RemoveLink")); ?></a></td>
<?php
}
?>
</tr>
<?php
}

View File

@ -819,7 +819,7 @@ if ($action == 'set_paid' && $id > 0 && $user->rights->expensereport->to_paid)
}
}
if ($action == "addline")
if ($action == "addline" && $user->rights->expensereport->creer)
{
$error = 0;
@ -911,7 +911,7 @@ if ($action == "addline")
$action='';
}
if ($action == 'confirm_delete_line' && GETPOST("confirm") == "yes")
if ($action == 'confirm_delete_line' && GETPOST("confirm") == "yes" && $user->rights->expensereport->creer)
{
$object = new ExpenseReport($db);
$object->fetch($id);
@ -954,7 +954,7 @@ if ($action == 'confirm_delete_line' && GETPOST("confirm") == "yes")
}
}
if ($action == "updateligne" )
if ($action == "updateligne" && $user->rights->expensereport->creer)
{
$object = new ExpenseReport($db);
$object->fetch($id);
@ -1640,8 +1640,11 @@ else
print '<td style="text-align:right;">'.$langs->trans('AmountHT').'</td>';
print '<td style="text-align:right;">'.$langs->trans('AmountTTC').'</td>';
}
print '<td style="text-align:right;"></td>';
// Ajout des boutons de modification/suppression
if (($object->fk_statut < 2 || $object->fk_statut == 99) && $user->rights->expensereport->creer)
{
print '<td style="text-align:right;"></td>';
}
print '</tr>';
$var=true;
@ -1682,7 +1685,7 @@ else
// Ajout des boutons de modification/suppression
print '<td style="text-align:right;" class="nowrap">';
if($object->fk_statut<2 OR $object->fk_statut==99)
if (($object->fk_statut < 2 || $object->fk_statut == 99) && $user->rights->expensereport->creer)
{
print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=editline&amp;rowid='.$objp->rowid.'#'.$objp->rowid.'">';
print img_edit();
@ -1768,7 +1771,7 @@ else
//print '</div>';
// Add a line
if (($object->fk_statut==0 || $object->fk_statut==99) && $action != 'editline')
if (($object->fk_statut==0 || $object->fk_statut==99) && $action != 'editline' && $user->rights->expensereport->creer)
{
print '<tr class="liste_titre">';
print '<td colspan="2"></td>';

View File

@ -165,7 +165,7 @@ else:
while($i<$num):
$objp = $db->fetch_object($resql);
$var=!$var;
print "<tr $bc[$var]>";
print '<tr'. $bc[$var].'>';
print '<td>'.$objp->ref.'</td>';
print '<td>'.dol_print_date($db->jdate($objp->date_valid),'day').'</td>';
print '<td><a href="'.DOL_URL_ROOT.'/user/card.php?id='.$objp->fk_user_author.'">'.img_object($langs->trans("ShowUser"),"user").' '.$objp->declarant_NDF.'</a></td>';

View File

@ -494,7 +494,7 @@ if (empty($reshook))
$desc=GETPOST('np_desc');
$date_intervention = dol_mktime(GETPOST('dihour','int'), GETPOST('dimin','int'), 0, GETPOST('dimonth','int'), GETPOST('diday','int'), GETPOST('diyear','int'));
$duration = empty($conf->global->FICHINTER_WITHOUT_DURATION)?0:convertTime2Seconds(GETPOST('durationhour','int'), GETPOST('durationmin','int'));
$duration = empty($conf->global->FICHINTER_WITHOUT_DURATION)?convertTime2Seconds(GETPOST('durationhour','int'), GETPOST('durationmin','int')) : 0;
// Extrafields
@ -1553,7 +1553,7 @@ else if ($id > 0 || ! empty($ref))
$selectmode = 'select';
if (!empty($conf->global->INTERVENTION_ADDLINE_FREEDUREATION))
$selectmode = 'text';
$form->select_duration('duration', $objp->duree, $selectmode);
$form->select_duration('duration', $objp->duree, 0, $selectmode);
}
print '</td>';

View File

@ -89,7 +89,18 @@ if (! $result && ! empty($_SERVER["GATEWAY_INTERFACE"])) // If install not do
{
// Note: If calling page was not into htdocs (index.php, ...), then this redirect will fails.
// There is no real solution, because the only way to know the apache url relative path is to have into conf file.
header("Location: install/index.php");
$TDir = explode('/', $_SERVER['PHP_SELF']);
$path = '';
$i = count($TDir);
while ($i--)
{
if (empty($TDir[$i]) || $TDir[$i] == 'htdocs') break;
if (substr($TDir[$i], -4, 4) == '.php') continue;
$path .= '../';
}
header("Location: ".$path."install/index.php");
exit;
}

View File

@ -92,13 +92,16 @@ if ($idprod > 0)
}
}
// Add price for pmp
$price=$producttmp->pmp;
$prices[] = array("id" => 'pmpprice', "price" => price2num($price), "label" => $langs->trans("PMPValueShort").': '.price($price,0,$langs,0,0,-1,$conf->currency), "title" => $langs->trans("PMPValueShort").': '.price($price,0,$langs,0,0,-1,$conf->currency)); // For price field, we must use price2num(), for label or title, price()
// Add price for costprice
$price=$producttmp->cost_price;
$prices[] = array("id" => 'costprice', "price" => price2num($price), "label" => $langs->trans("CostPrice").': '.price($price,0,$langs,0,0,-1,$conf->currency), "title" => $langs->trans("PMPValueShort").': '.price($price,0,$langs,0,0,-1,$conf->currency)); // For price field, we must use price2num(), for label or title, price()
if(!empty($conf->stock->enabled))
{
// Add price for pmp
$price=$producttmp->pmp;
$prices[] = array("id" => 'pmpprice', "price" => price2num($price), "label" => $langs->trans("PMPValueShort").': '.price($price,0,$langs,0,0,-1,$conf->currency), "title" => $langs->trans("PMPValueShort").': '.price($price,0,$langs,0,0,-1,$conf->currency)); // For price field, we must use price2num(), for label or title, price()
}
}
echo json_encode($prices);

View File

@ -1458,12 +1458,10 @@ class CommandeFournisseur extends CommonOrder
//print $sql;
if ($resql)
{
$this->rowid = $this->db->last_insert_id(MAIN_DB_PREFIX.'commande_fournisseurdet');
if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used
{
$linetmp = new CommandeFournisseurLigne($this->db);
$linetmp->id=$this->rowid;
$linetmp->id=$this->db->last_insert_id(MAIN_DB_PREFIX.'commande_fournisseurdet');
$linetmp->array_options = $array_options;
$result=$linetmp->insertExtraFields();
if ($result < 0)
@ -2494,7 +2492,7 @@ class CommandeFournisseur extends CommonOrder
$response = new WorkboardResponse();
$response->warning_delay=$conf->commande->fournisseur->warning_delay/60/60/24;
$response->label=$langs->trans("SuppliersOrdersToProcess");
$response->url=DOL_URL_ROOT.'/fourn/commande/list.php?statut=1,2,3';
$response->url=DOL_URL_ROOT.'/fourn/commande/list.php?statut=1,2,3&mainmenu=commercial&leftmenu=orders_suppliers';
$response->img=img_object($langs->trans("Orders"),"order");
while ($obj=$this->db->fetch_object($resql))

View File

@ -1507,7 +1507,7 @@ class FactureFournisseur extends CommonInvoice
$response = new WorkboardResponse();
$response->warning_delay=$conf->facture->fournisseur->warning_delay/60/60/24;
$response->label=$langs->trans("SupplierBillsToPay");
$response->url=DOL_URL_ROOT.'/fourn/facture/list.php?filtre=fac.fk_statut:1,paye:0';
$response->url=DOL_URL_ROOT.'/fourn/facture/list.php?filtre=fac.fk_statut:1,paye:0&mainmenu=accountancy&leftmenu=suppliers_bills';
$response->img=img_object($langs->trans("Bills"),"bill");
$facturestatic = new FactureFournisseur($this->db);
@ -1708,8 +1708,11 @@ class FactureFournisseur extends CommonInvoice
$line->remise_percent=0;
}
$prodid = mt_rand(1, $num_prods);
$line->fk_product=$prodids[$prodid];
if ($num_prods > 0)
{
$prodid = mt_rand(1, $num_prods);
$line->fk_product=$prodids[$prodid];
}
$line->product_type=0;
$this->lines[$xnbp]=$line;

View File

@ -445,7 +445,7 @@ class ProductFournisseur extends Product
$sql.= " pfp.price, pfp.quantity, pfp.unitprice, pfp.remise_percent, pfp.remise, pfp.tva_tx, pfp.fk_availability, pfp.charges, pfp.unitcharges, pfp.info_bits, pfp.delivery_time_days, pfp.supplier_reputation";
$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price as pfp";
$sql.= ", ".MAIN_DB_PREFIX."societe as s";
$sql.= " WHERE pfp.entity IN (".getEntity('product', 1).")";
$sql.= " WHERE pfp.entity IN (".getEntity('productprice', 1).")";
$sql.= " AND pfp.fk_soc = s.rowid";
$sql.= " AND s.status=1"; // only enabled company selected
$sql.= " AND pfp.fk_product = ".$prodid;

View File

@ -1030,7 +1030,7 @@ if (empty($reshook))
$num = count($lines);
$productsupplier = new ProductFournisseur($db);
for($i = 0; $i < $num; $i ++)
{
@ -1040,7 +1040,7 @@ if (empty($reshook))
$label = (! empty($lines[$i]->label) ? $lines[$i]->label : '');
$desc = (! empty($lines[$i]->desc) ? $lines[$i]->desc : $lines[$i]->libelle);
$product_type = (! empty($lines[$i]->product_type) ? $lines[$i]->product_type : 0);
// Reset fk_parent_line for no child products and special product
if (($lines[$i]->product_type != 9 && empty($lines[$i]->fk_parent_line)) || $lines[$i]->product_type == 9) {
$fk_parent_line = 0;
@ -1055,7 +1055,7 @@ if (empty($reshook))
}
$result = $productsupplier->find_min_price_product_fournisseur($lines[$i]->fk_product, $lines[$i]->qty);
if ($result>0)
if ($result>=0)
{
$tva_tx = $lines[$i]->tva_tx;
@ -1073,7 +1073,7 @@ if (empty($reshook))
$tva_tx,
$lines[$i]->localtax1_tx,
$lines[$i]->localtax2_tx,
$lines[$i]->fk_product,
$lines[$i]->fk_product > 0 ? $lines[$i]->fk_product : 0,
$productsupplier->product_fourn_price_id,
$productsupplier->ref_supplier,
$lines[$i]->remise_percent,
@ -1088,6 +1088,7 @@ if (empty($reshook))
$lines[$i]->fk_unit
);
}
if ($result < 0) {
$error++;
break;

View File

@ -252,7 +252,7 @@ if ($status)
if ($status == '6,7') $title.=' - '.$langs->trans("StatusOrderCanceled");
else $title.=' - '.$langs->trans($commandestatic->statuts[$status]);
}
if ($billed) $title.=' - '.$langs->trans("Billed");
if ($billed > 0) $title.=' - '.$langs->trans("Billed");
//$help_url="EN:Module_Customers_Orders|FR:Module_Commandes_Clients|ES:Módulo_Pedidos_de_clientes";
$help_url='';

View File

@ -1869,8 +1869,8 @@ else
print '</td></tr>';
// Label
print '<tr><td>'.$form->editfieldkey("Label",'label',$object->label,$object,($user->rights->fournisseur->facture->creer)).'</td>';
print '<td colspan="3">'.$form->editfieldval("Label",'label',$object->label,$object,($user->rights->fournisseur->facture->creer)).'</td>';
print '<tr><td>'.$form->editfieldkey("Label",'libelle',$object->label,$object,($user->rights->fournisseur->facture->creer)).'</td>';
print '<td colspan="3">'.$form->editfieldval("Label",'libelle',$object->label,$object,($user->rights->fournisseur->facture->creer)).'</td>';
/*
* List of payments

View File

@ -82,10 +82,9 @@ $year = GETPOST("year","int");
$day_lim = GETPOST('day_lim','int');
$month_lim = GETPOST('month_lim','int');
$year_lim = GETPOST('year_lim','int');
$filter = GETPOST("filtre");
$optioncss = GETPOST('optioncss','alpha');
if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter")) // Both test must be present to be compatible with all browsers
if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter") || GETPOST("button_removefilter.x")) // All test must be present to be compatible with all browsers
{
$search_all="";
$search_ref="";
@ -225,7 +224,7 @@ if ($search_amount_all_tax != '')
$sql .= natural_search('fac.total_ttc', $search_amount_all_tax, 1);
}
if ($search_status != '' && $search_status>=0)
if ($search_status != '' && $search_status >= 0)
{
$sql.= " AND fac.fk_statut = ".$search_status;
}
@ -273,7 +272,6 @@ if ($resql)
if ($search_company) $param.='&search_company='.urlencode($search_company);
if ($search_amount_no_tax) $param.='&search_amount_no_tax='.urlencode($search_amount_no_tax);
if ($search_amount_all_tax) $param.='&search_amount_all_tax='.urlencode($search_amount_all_tax);
if ($filter && $filter != -1) $param.='&filtre='.urlencode($filter);
if ($optioncss != '') $param.='&optioncss='.$optioncss;
if ($search_status >= 0) $param.="&search_status=".$search_status;
@ -347,7 +345,7 @@ if ($resql)
print '<input class="flat" type="text" size="6" name="search_amount_all_tax" value="'.$search_amount_all_tax.'">';
print '</td><td class="liste_titre" align="right">';
$liststatus=array('0'=>$langs->trans("Draft"),'1'=>$langs->trans("Unpaid"), '2'=>$langs->trans("Paid"));
print $form->selectarray('filtre', $liststatus, $search_status, 1);
print $form->selectarray('search_status', $liststatus, $search_status, 1);
print '</td>';
print '<td class="liste_titre" align="right">';
$searchpitco=$form->showFilterAndCheckAddButtons(0);

View File

@ -634,6 +634,10 @@ if ($step == 4 && $datatoimport)
}
}
if (GETPOST('update')) {
$array_match_file_to_database=array();
}
// Load source fields in input file
$fieldssource=array();
@ -757,7 +761,7 @@ if ($step == 4 && $datatoimport)
print '<input type="text" size="1" name="separator" value="'.htmlentities($separator).'"/>';
print '&nbsp;&nbsp;&nbsp;&nbsp;'.$langs->trans("Enclosure").' : ';
print '<input type="text" size="1" name="enclosure" value="'.htmlentities($enclosure).'"/>';
print '<input type="submit" value="'.$langs->trans('Update').'" class="button" />';
print '<input name="update" type="submit" value="'.$langs->trans('Update').'" class="button" />';
print '</form>';
print '</td></tr>';
}

View File

@ -610,3 +610,4 @@ INSERT INTO llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) VALUES (14
-- VMYSQL4.1 ALTER TABLE llx_c_type_resource CHANGE COLUMN rowid rowid integer NOT NULL AUTO_INCREMENT;
ALTER TABLE llx_import_model MODIFY COLUMN type varchar(50);

View File

@ -501,3 +501,5 @@ CREATE TABLE llx_oauth_state (
fk_adherent integer,
entity integer
)ENGINE=InnoDB;
ALTER TABLE llx_import_model MODIFY COLUMN type varchar(50);

View File

@ -23,6 +23,6 @@ create table llx_import_model
rowid integer AUTO_INCREMENT PRIMARY KEY,
fk_user integer DEFAULT 0 NOT NULL,
label varchar(50) NOT NULL,
type varchar(20) NOT NULL,
type varchar(50) NOT NULL,
field text NOT NULL
)ENGINE=innodb;

View File

@ -3,9 +3,9 @@ ACCOUNTING_EXPORT_SEPARATORCSV=Column separator for export file
ACCOUNTING_EXPORT_DATE=Date format for export file
ACCOUNTING_EXPORT_PIECE=Export the number of piece
ACCOUNTING_EXPORT_GLOBAL_ACCOUNT=Export with global account
ACCOUNTING_EXPORT_LABEL=Export the label
ACCOUNTING_EXPORT_AMOUNT=Export the amount
ACCOUNTING_EXPORT_DEVISE=Export the devise
ACCOUNTING_EXPORT_LABEL=Export label
ACCOUNTING_EXPORT_AMOUNT=Export amount
ACCOUNTING_EXPORT_DEVISE=Export currency
Selectformat=Select the format for the file
ACCOUNTING_EXPORT_PREFIX_SPEC=Specify the prefix for the file name
@ -183,4 +183,4 @@ Formula=Formula
## Error
ErrorNoAccountingCategoryForThisCountry=No accounting category are available for this country
ExportNotSupported=The export format setuped is not supported into this page
ExportNotSupported=The export format setuped is not supported into this page

View File

@ -2,8 +2,8 @@
Foundation=Foundation
Version=Version
VersionProgram=Version program
VersionLastInstall=Version initial install
VersionLastUpgrade=Version last upgrade
VersionLastInstall=Initial install version
VersionLastUpgrade=Latest version upgrade
VersionExperimental=Experimental
VersionDevelopment=Development
VersionUnknown=Unknown
@ -145,8 +145,8 @@ Boxes=Widgets
MaxNbOfLinesForBoxes=Max number of lines for widgets
PositionByDefault=Default order
Position=Position
MenusDesc=Menus managers define content of the 2 menu bars (horizontal bar and vertical bar).
MenusEditorDesc=The menu editor allow you to define personalized entries in menus. Use it carefully to avoid making dolibarr unstable and menu entries permanently unreachable.<br>Some modules add entries in the menus (in menu <b>All</b> in most cases). If you removed some of these entries by mistake, you can restore them by disabling and reenabling the module.
MenusDesc=Menu managers set content of the two menu bars (horizontal and vertical).
MenusEditorDesc=The menu editor allows you to define custom menu entries. Use it carefully to avoid instability and permanently unreachable menu entries.<br />Some modules add menu entries (in menu <b>All</b> mostly). If you remove some of these entries by mistake, you can restore them disabling and reenabling the module.
MenuForUsers=Menu for users
LangFile=.lang file
System=System
@ -154,13 +154,13 @@ SystemInfo=System information
SystemToolsArea=System tools area
SystemToolsAreaDesc=This area provides administration features. Use the menu to choose the feature you're looking for.
Purge=Purge
PurgeAreaDesc=This page allows you to delete all files built or stored by Dolibarr (temporary files or all files in <b>%s</b> directory). Using this feature is not necessary. It is provided for users whose Dolibarr is hosted by a provider that does not offer permissions to delete files built by the web server.
PurgeDeleteLogFile=Delete log file <b>%s</b> defined for Syslog module (no risk to loose data)
PurgeDeleteTemporaryFiles=Delete all temporary files (no risk to loose data)
PurgeAreaDesc=This page allows you to delete all files generated or stored by Dolibarr (temporary files or all files in <b>%s</b> directory). Using this feature is not necessary. It is provided as a workaround for users whose Dolibarr is hosted by a provider that does not offer permissions to delete files generated by the web server.
PurgeDeleteLogFile=Delete log file <b>%s</b> defined for Syslog module (no risk of losing data)
PurgeDeleteTemporaryFiles=Delete all temporary files (no risk of losing data)
PurgeDeleteTemporaryFilesShort=Delete temporary files
PurgeDeleteAllFilesInDocumentsDir=Delete all files in directory <b>%s</b>. Temporary files but also database backup dumps, files attached to elements (third parties, invoices, ...) and uploaded into the ECM module will be deleted.
PurgeRunNow=Purge now
PurgeNothingToDelete=No directory or file to delete.
PurgeNothingToDelete=No directory or files to delete.
PurgeNDirectoriesDeleted=<b>%s</b> files or directories deleted.
PurgeAuditEvents=Purge all security events
ConfirmPurgeAuditEvents=Are you sure you want to purge all security events ? All security logs will be deleted, no other data will be removed.
@ -210,12 +210,12 @@ OnlyActiveElementsAreShown=Only elements from <a href="%s">enabled modules</a> a
ModulesDesc=Dolibarr modules define which functionality is enabled in software. Some modules require permissions you must grant to users, after enabling module. Click on button on/off in column "Status" to enable a module/feature.
ModulesInterfaceDesc=The Dolibarr modules interface allows you to add features depending on external software, systems or services.
ModulesSpecialDesc=Special modules are very specific or seldom used modules.
ModulesJobDesc=Business modules provide simple predefined setup of Dolibarr for a particular business.
ModulesMarketPlaceDesc=You can find more modules to download on external web sites on the Internet...
ModulesJobDesc=Business modules provide simple preconfigured setup of Dolibarr for specific businesses.
ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
ModulesMarketPlaces=More modules...
DoliStoreDesc=DoliStore, the official market place for Dolibarr ERP/CRM external modules
DoliPartnersDesc=List with some companies that can provide/develop on-demand modules or features (Note: any Open Source company knowning PHP language can provide you specific development)
WebSiteDesc=Web site providers you can search to find more modules...
DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
WebSiteDesc=Reference websites to find more modules...
URL=Link
BoxesAvailable=Widgets available
BoxesActivated=Widgets activated
@ -312,8 +312,8 @@ InfDirAlt=Since version 3 it is possible to define an alternative root directory
InfDirExample=<br>Then declare it in the file conf.php<br> $dolibarr_main_url_root_alt='http://myserver/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>*These lines are commented with "#", to uncomment only remove the character.
YouCanSubmitFile=For this step, you can send package using this tool: Select module file
CurrentVersion=Dolibarr current version
CallUpdatePage=Go to the page that updates the database structure and datas: %s.
LastStableVersion=Last stable version
CallUpdatePage=Go to the page that updates the database structure and data: %s.
LastStableVersion=Latest stable version
UpdateServerOffline=Update server offline
GenericMaskCodes=You may enter any numbering mask. In this mask, the following tags could be used:<br><b>{000000}</b> corresponds to a number which will be incremented on each %s. Enter as many zeros as the desired length of the counter. The counter will be completed by zeros from the left in order to have as many zeros as the mask. <br><b>{000000+000}</b> same as previous but an offset corresponding to the number to the right of the + sign is applied starting on first %s. <br><b>{000000@x}</b> same as previous but the counter is reset to zero when month x is reached (x between 1 and 12, or 0 to use the early months of fiscal year defined in your configuration, or 99 to reset to zero every month). If this option is used and x is 2 or higher, then sequence {yy}{mm} or {yyyy}{mm} is also required. <br><b>{dd}</b> day (01 to 31).<br><b>{mm}</b> month (01 to 12).<br><b>{yy}</b>, <b>{yyyy}</b> or <b>{y}</b> year over 2, 4 or 1 numbers. <br>
GenericMaskCodes2=<b>{cccc}</b> the client code on n characters<br><b>{cccc000}</b> the client code on n characters is followed by a counter dedicated for customer. This counter dedicated to customer is reset at same time than global counter.<br><b>{tttt}</b> The code of thirdparty type on n characters (see dictionary-thirdparty types).<br>
@ -367,7 +367,7 @@ PDFAddressForging=Rules to forge address boxes
HideAnyVATInformationOnPDF=Hide all information related to VAT on generated PDF
HideDescOnPDF=Hide products description on generated PDF
HideRefOnPDF=Hide products ref. on generated PDF
HideDetailsOnPDF=Hide products lines details on generated PDF
HideDetailsOnPDF=Hide product lines details on generated PDF
PlaceCustomerAddressToIsoLocation=Use french standard position (La Poste) for customer address position
Library=Library
UrlGenerationParameters=Parameters to secure URLs
@ -401,8 +401,8 @@ ExtrafieldParamHelpcheckbox=Parameters list have to be like key,value<br><br> fo
ExtrafieldParamHelpradio=Parameters list have to be like key,value<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
ExtrafieldParamHelpsellist=Parameters list comes from a table<br>Syntax : table_name:label_field:id_field::filter<br>Example : c_typent:libelle:id::filter<br><br>filter can be a simple test (eg active=1) to display only active value<br>You can also use $ID$ in filter witch is the current id of current object<br>To do a SELECT in filter use $SEL$<br>if you want to filter on extrafields use syntaxt extra.fieldcode=... (where field code is the code of extrafield)<br><br>In order to have the list depending on another :<br>c_typent:libelle:id:parent_list_code|parent_column:filter
ExtrafieldParamHelpchkbxlst=Parameters list comes from a table<br>Syntax : table_name:label_field:id_field::filter<br>Example : c_typent:libelle:id::filter<br><br>filter can be a simple test (eg active=1) to display only active value<br>You can also use $ID$ in filter witch is the current id of current object<br>To do a SELECT in filter use $SEL$<br>if you want to filter on extrafields use syntaxt extra.fieldcode=... (where field code is the code of extrafield)<br><br>In order to have the list depending on another :<br>c_typent:libelle:id:parent_list_code|parent_column:filter
ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath<br>Syntax : ObjectName:Classpath<br>Example : Societe:societe/class/societe.class.php
LibraryToBuildPDF=Library used to build PDF
ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath<br>Syntax : ObjectName:Classpath<br>Example : Societe:societe/class/societe.class.php
LibraryToBuildPDF=Library used for PDF generation
WarningUsingFPDF=Warning: Your <b>conf.php</b> contains directive <b>dolibarr_pdf_force_fpdf=1</b>. This means you use the FPDF library to generate PDF files. This library is old and does not support a lot of features (Unicode, image transparency, cyrillic, arab and asiatic languages, ...), so you may experience errors during PDF generation.<br>To solve this and have a full support of PDF generation, please download <a href="http://www.tcpdf.org/" target="_blank">TCPDF library</a>, then comment or remove the line <b>$dolibarr_pdf_force_fpdf=1</b>, and add instead <b>$dolibarr_lib_TCPDF_PATH='path_to_TCPDF_dir'</b>
LocalTaxDesc=Some countries apply 2 or 3 taxes on each invoice line. If this is the case, choose type for second and third tax and its rate. Possible type are:<br>1 : local tax apply on products and services without vat (localtax is calculated on amount without tax)<br>2 : local tax apply on products and services including vat (localtax is calculated on amount + main tax)<br>3 : local tax apply on products without vat (localtax is calculated on amount without tax)<br>4 : local tax apply on products including vat (localtax is calculated on amount + main vat)<br>5 : local tax apply on services without vat (localtax is calculated on amount without tax)<br>6 : local tax apply on services including vat (localtax is calculated on amount + tax)
SMS=SMS
@ -424,12 +424,13 @@ AllBarcodeReset=All barcode values have been removed
NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled into barcode module setup.
NoRecordWithoutBarcodeDefined=No record with no barcode value defined.
EnableFileCache=Enable file cache
ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, capital and VAT number).
ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
NoDetails=No more details in footer
DisplayCompanyInfo=Display company address
DisplayCompanyManager=Display manager names
DisplayCompanyInfoAndManagers=Display company and manager names
DisplayCompanyInfoAndManagers=Display company and manager names
EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
# Modules
Module0Name=Users & groups
Module0Desc=Users and groups management
@ -492,15 +493,15 @@ Module200Desc=LDAP directory synchronisation
Module210Name=PostNuke
Module210Desc=PostNuke integration
Module240Name=Data exports
Module240Desc=Tool to export Dolibarr datas (with assistants)
Module240Desc=Tool to export Dolibarr data (with assistants)
Module250Name=Data imports
Module250Desc=Tool to import datas in Dolibarr (with assistants)
Module250Desc=Tool to import data in Dolibarr (with assistants)
Module310Name=Members
Module310Desc=Foundation members management
Module320Name=RSS Feed
Module320Desc=Add RSS feed inside Dolibarr screen pages
Module330Name=Bookmarks
Module330Desc=Bookmark management
Module330Desc=Bookmarks management
Module400Name=Projects/Opportunities/Leads
Module400Desc=Management of projects, opportunities or leads. You can then assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
Module410Name=Webcalendar
@ -549,7 +550,7 @@ Module2800Desc=FTP Client
Module2900Name=GeoIPMaxmind
Module2900Desc=GeoIP Maxmind conversions capabilities
Module3100Name=Skype
Module3100Desc=Add a Skype button into card of users / third parties / contacts / members
Module3100Desc=Add a Skype button into users / third parties / contacts / members cards
Module4000Name=HRM
Module4000Desc=Human resources management
Module5000Name=Multi-company
@ -607,7 +608,7 @@ Permission71=Read members
Permission72=Create/modify members
Permission74=Delete members
Permission75=Setup types of membership
Permission76=Export datas
Permission76=Export data
Permission78=Read subscriptions
Permission79=Create/modify subscriptions
Permission81=Read customers orders
@ -817,15 +818,15 @@ Permission55002=Create/modify polls
Permission59001=Read commercial margins
Permission59002=Define commercial margins
Permission59003=Read every user margin
DictionaryCompanyType=Thirdparties type
DictionaryCompanyJuridicalType=Juridical kinds of thirdparties
DictionaryCompanyType=Types of thirdparties
DictionaryCompanyJuridicalType=Legal forms of thirdparties
DictionaryProspectLevel=Prospect potential level
DictionaryCanton=State/Province
DictionaryRegion=Regions
DictionaryCountry=Countries
DictionaryCurrency=Currencies
DictionaryCivility=Civility title
DictionaryActions=Type of agenda events
DictionaryCivility=Personal and professional titles
DictionaryActions=Types of agenda events
DictionarySocialContributions=Social or fiscal taxes types
DictionaryVAT=VAT Rates or Sales Tax Rates
DictionaryRevenueStamp=Amount of revenue stamps
@ -834,7 +835,7 @@ DictionaryPaymentModes=Payment modes
DictionaryTypeContact=Contact/Address types
DictionaryEcotaxe=Ecotax (WEEE)
DictionaryPaperFormat=Paper formats
DictionaryFees=Type of fees
DictionaryFees=Types of fees
DictionarySendingMethods=Shipping methods
DictionaryStaff=Staff
DictionaryAvailability=Delivery delay
@ -845,14 +846,14 @@ DictionaryAccountancysystem=Models for chart of accounts
DictionaryEMailTemplates=Emails templates
DictionaryUnits=Units
DictionaryProspectStatus=Prospection status
DictionaryHolidayTypes=Type of leaves
DictionaryHolidayTypes=Types of leaves
DictionaryOpportunityStatus=Opportunity status for project/lead
SetupSaved=Setup saved
BackToModuleList=Back to modules list
BackToDictionaryList=Back to dictionaries list
VATReceivedOnly=Special rate not charged
VATManagement=VAT Management
VATIsUsedDesc=The VAT rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If the seller is not subjected to VAT, then VAT by default=0. End of rule.<br>If the (selling country= buying country), then the VAT by default=VAT of the product in the selling country. End of rule. <br>If seller and buyer in the European Community and goods are transport products (car, ship, plane), the default VAT=0 ( The VAT should be paid by the buyer at the customoffice of his country and not at the seller). End of rule.<br>If seller and buyer in the European Community and buyer is not a company, then the VAT by default=VAT of product sold. End of rule.<br>If seller and buyer in the European Community and buyer is a company, then the VAT by default=0. End of rule.<br>Else the proposed default VAT=0. End of rule.
VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold. End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
VATIsNotUsedDesc=By default the proposed VAT is 0 which can be used for cases like associations, individuals ou small companies.
VATIsUsedExampleFR=In France, it means companies or organisations having a real fiscal system (Simplified real or normal real). A system in which VAT is declared.
VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organisations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration. This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
@ -978,10 +979,10 @@ DelayBeforeWarning=Delay before warning
DelaysBeforeWarning=Delays before warning
DelaysOfToleranceBeforeWarning=Tolerance delays before warning
DelaysOfToleranceDesc=This screen allows you to define the tolerated delays before an alert is reported on screen with picto %s for each late element.
Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events not yet realised
Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks not yet realised
Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not yet processed
Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on suppliers orders not yet processed
Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events not completed yet
Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks not completed yet
Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet
Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on suppliers orders not processed yet
Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay tolerance (in days) before alert on proposals to close
Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay tolerance (in days) before alert on proposals not billed
Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Tolerance delay (in days) before alert on services to activate
@ -992,21 +993,21 @@ Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Tolerance delay (in days) before al
Delays_MAIN_DELAY_MEMBERS=Tolerance delay (in days) before alert on delayed membership fee
Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Tolerance delay (in days) before alert for cheques deposit to do
Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve
SetupDescription1=All parameters available in the setup area allow you to setup Dolibarr before starting using it.
SetupDescription2=The 2 most important setup steps are the 2 first ones in the left setup menu, this means Company/foundation setup page and Modules setup page:
SetupDescription3=Parameters in menu <a href="%s">Setup -> Company/foundation</a> are required because input information is used on Dolibarr displays and to modify Dolibarr behaviour (for example for features related to your country).
SetupDescription4=Parameters in menu <a href="%s">Setup -> Modules</a> are required because Dolibarr is not a fixed ERP/CRM but a sum of several modules, all more or less independant. It's only after activating modules you're interesting in that you will see features appeared in menus.
SetupDescription1=The setup area is for initial setup parameters before starting to use Dolibarr.
SetupDescription2=The two most important setup steps are the first two in the setup menu on the left: Company/foundation setup page and Modules setup page:
SetupDescription3=Parameters in menu <a href="%s">Setup -> Company/foundation</a> are required because submitted data are used on Dolibarr displays and to customize the default behaviour of the software (for country-related features for example).
SetupDescription4=Parameters in menu <a href="%s">Setup -> Modules</a> are required because Dolibarr is not a monolithic ERP/CRM but a collection of several modules, all more or less independent. New features will be added to menus for every module you'll enable.
SetupDescription5=Other menu entries manage optional parameters.
EventsSetup=Setup for events logs
LogEvents=Security audit events
Audit=Audit
InfoDolibarr=Infos Dolibarr
InfoBrowser=Infos Browser
InfoOS=Infos OS
InfoWebServer=Infos web server
InfoDatabase=Infos database
InfoPHP=Infos PHP
InfoPerf=Infos performances
InfoDolibarr=About Dolibarr
InfoBrowser=About Browser
InfoOS=About OS
InfoWebServer=About Web Server
InfoDatabase=About Database
InfoPHP=About PHP
InfoPerf=About Performances
BrowserName=Browser name
BrowserOS=Browser OS
ListEvents=Audit events
@ -1030,10 +1031,10 @@ TriggerDisabledAsModuleDisabled=Triggers in this file are disabled as module <b>
TriggerAlwaysActive=Triggers in this file are always active, whatever are the activated Dolibarr modules.
TriggerActiveAsModuleActive=Triggers in this file are active as module <b>%s</b> is enabled.
GeneratedPasswordDesc=Define here which rule you want to use to generate new password if you ask to have auto generated password
DictionaryDesc=Define here all reference datas. You can complete predefined value with yours.
ConstDesc=This page allows you to edit all other parameters not available in previous pages. They are reserved parameters for advanced developers or for troubleshouting.
DictionaryDesc=Insert all reference data. You can add your values to the default.
ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting.
OnceSetupFinishedCreateUsers=Warning, you are a Dolibarr administrator user. Administrator users are used to setup Dolibarr. For a usual usage of Dolibarr, it is recommended to use a non administrator user created from Users & Groups menu.
MiscellaneousDesc=Define here all other parameters related to security.
MiscellaneousDesc=All other security related parameters are defined here.
LimitsSetup=Limits/Precision setup
LimitsDesc=You can define limits, precisions and optimisations used by Dolibarr here
MAIN_MAX_DECIMALS_UNIT=Max decimals for unit prices
@ -1103,8 +1104,8 @@ PathToDocuments=Path to documents
PathDirectory=Directory
SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might be not correctly parsed by some receiving mail servers. Result is that some mails can't be read by people hosted by those bugged platforms. It's case for some Internet providers (Ex: Orange in France). This is not a problem into Dolibarr nor into PHP but onto receiving mail server. You can however add option MAIN_FIX_FOR_BUGGED_MTA to 1 into setup - other to modify Dolibarr to avoid this. However, you may experience problem with other servers that respect strictly the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" that has no disadvantages.
TranslationSetup=Configuration de la traduction
TranslationDesc=Choice of language visible on screen can be modified:<br>* Globally from menu <strong>Home - Setup - Display</strong><br>* For user only from tab <strong>User display</strong> of user card (click on login on top of screen).
TranslationOverwriteDesc=You can also overwrite some value by completing/editing the following table. You must use for "%s" the language code, for "%s" the key found into file langs/xx_XX/somefile.lang and "%s" the new value you want to use as new translation.
TranslationDesc=How to set displayed application language<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: <strong>User display setup</strong> tab of user card (click on username at the top of the screen).
TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the key string found in the lang file (langs/xx_XX/somefile.lang) into "%s" and your new translation into "%s".
TotalNumberOfActivatedModules=Total number of activated feature modules: <b>%s</b> / <b>%s</b>
YouMustEnableOneModule=You must at least enable 1 module
ClassNotFoundIntoPathWarning=Class %s not found into PHP path
@ -1526,6 +1527,7 @@ MenuDeleted=Menu deleted
TreeMenu=Tree menus
Menus=Menus
TreeMenuPersonalized=Personalized menus
NotTopTreeMenuPersonalized=Personalized menus not linked to a top menu entry
NewMenu=New menu
MenuConf=Menus setup
Menu=Selection of menu
@ -1750,4 +1752,5 @@ AddModels=Add document or numbering templates
AddSubstitutions=Add keys substitutions
DetectionNotPossible=Detection not possible
UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and will be checked on each future access)
ListOfAvailableAPIs=List of available APIs
ListOfAvailableAPIs=List of available APIs
activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise

View File

@ -81,8 +81,8 @@ AgendaUrlOptions2=<b>login=%s</b> to restrict output to actions created by or as
AgendaUrlOptions3=<b>logina=%s</b> to restrict output to actions owned by a user <b>%s</b>.
AgendaUrlOptions4=<b>logint=%s</b> to restrict output to actions assigned to user <b>%s</b>.
AgendaUrlOptionsProject=<b>project=PROJECT_ID</b> to restrict output to actions associated to project <b>PROJECT_ID</b>.
AgendaShowBirthdayEvents=Show birthday's contacts
AgendaHideBirthdayEvents=Hide birthday's contacts
AgendaShowBirthdayEvents=Show birthdays of contacts
AgendaHideBirthdayEvents=Hide birthdays of contacts
Busy=Busy
ExportDataset_event1=List of agenda events
DefaultWorkingDays=Default working days range in week (Example: 1-5, 1-6)
@ -110,4 +110,4 @@ EveryWeek=Every week
EveryMonth=Every month
DayOfMonth=Day of month
DayOfWeek=Day of week
DateStartPlusOne=Date start + 1 hour
DateStartPlusOne=Date start + 1 hour

View File

@ -127,7 +127,7 @@ ConfirmValidateCheckReceipt=Are you sure you want to validate this check receipt
DeleteCheckReceipt=Delete this check receipt ?
ConfirmDeleteCheckReceipt=Are you sure you want to delete this check receipt ?
BankChecks=Bank checks
BankChecksToReceipt=Checks waiting for deposit
BankChecksToReceipt=Checks awaiting deposit
ShowCheckReceipt=Show check deposit receipt
NumberOfCheques=Nb of check
DeleteTransaction=Delete transaction
@ -141,9 +141,9 @@ ExportDataset_banque_1=Bank transactions and account statement
ExportDataset_banque_2=Deposit slip
TransactionOnTheOtherAccount=Transaction on the other account
TransactionWithOtherAccount=Account transfer
PaymentNumberUpdateSucceeded=Payment number updated succesfully
PaymentNumberUpdateSucceeded=Payment number updated successfully
PaymentNumberUpdateFailed=Payment number could not be updated
PaymentDateUpdateSucceeded=Payment date update succesfully
PaymentDateUpdateSucceeded=Payment date updated successfully
PaymentDateUpdateFailed=Payment date could not be updated
Transactions=Transactions
BankTransactionLine=Bank transaction

View File

@ -11,7 +11,7 @@ BillsSuppliersUnpaidForCompany=Unpaid supplier's invoices for %s
BillsLate=Late payments
BillsStatistics=Customers invoices statistics
BillsStatisticsSuppliers=Suppliers invoices statistics
DisabledBecauseNotErasable=Disabled because can not be erased
DisabledBecauseNotErasable=Disabled because cannot be erased
InvoiceStandard=Standard invoice
InvoiceStandardAsk=Standard invoice
InvoiceStandardDesc=This kind of invoice is the common invoice.
@ -319,27 +319,27 @@ FrequencyPer_m=Every %s months
FrequencyPer_y=Every %s years
toolTipFrequency=Examples:<br /><b>Set 7 / day</b>: give a new invoice every 7 days<br /><b>Set 3 / month</b>: give a new invoice every 3 month
NextDateToExecution=Date for next invoice generation
DateLastGeneration=Date of last generation
DateLastGeneration=Date of latest generation
MaxPeriodNumber=Max nb of invoice generation
NbOfGenerationDone=Nb of invoice generation already done
InvoiceAutoValidate=Automatically validate invoice
InvoiceAutoValidate=Validate invoices automatically
GeneratedFromRecurringInvoice=Generated from template recurring invoice %s
DateIsNotEnough=Date not yet reached
DateIsNotEnough=Date not reached yet
InvoiceGeneratedFromTemplate=Invoice %s generated from recurring template invoice %s
# PaymentConditions
PaymentConditionShortRECEP=Immediate
PaymentConditionRECEP=Immediate
PaymentConditionShort30D=30 days
PaymentCondition30D=30 days
PaymentConditionShort30DENDMONTH=30 days end of month
PaymentCondition30DENDMONTH=30 days end of month
PaymentConditionShort30DENDMONTH=30 days of month-end
PaymentCondition30DENDMONTH=Within 30 days following the end of the month
PaymentConditionShort60D=60 days
PaymentCondition60D=60 days
PaymentConditionShort60DENDMONTH=60 days end of month
PaymentCondition60DENDMONTH=60 days end of month
PaymentConditionShort60DENDMONTH=60 days of month-end
PaymentCondition60DENDMONTH=Within 60 days following the end of the month
PaymentConditionShortPT_DELIVERY=Delivery
PaymentConditionPT_DELIVERY=On delivery
PaymentConditionShortPT_ORDER=On order
PaymentConditionShortPT_ORDER=Order
PaymentConditionPT_ORDER=On order
PaymentConditionShortPT_5050=50-50
PaymentConditionPT_5050=50%% in advance, 50%% on delivery
@ -356,12 +356,12 @@ PaymentTypeCB=Credit card
PaymentTypeShortCB=Credit card
PaymentTypeCHQ=Check
PaymentTypeShortCHQ=Check
PaymentTypeTIP=Interbank Payment
PaymentTypeShortTIP=Interbank Payment
PaymentTypeTIP=TIP (Documents against Payment)
PaymentTypeShortTIP=TIP Payment
PaymentTypeVAD=On line payment
PaymentTypeShortVAD=On line payment
PaymentTypeTRA=Traite
PaymentTypeShortTRA=Traite
PaymentTypeTRA=Bank draft
PaymentTypeShortTRA=Draft
PaymentTypeFAC=Factor
PaymentTypeShortFAC=Factor
BankDetails=Bank details
@ -369,7 +369,7 @@ BankCode=Bank code
DeskCode=Desk code
BankAccountNumber=Account number
BankAccountNumberKey=Key
Residence=Domiciliation
Residence=Direct debit
IBANNumber=IBAN number
IBAN=IBAN
BIC=BIC/SWIFT
@ -425,7 +425,7 @@ ExpectedToPay=Expected payment
CantRemoveConciliatedPayment=Can't remove conciliated payment
PayedByThisPayment=Paid by this payment
ClosePaidInvoicesAutomatically=Classify "Paid" all standard, situation or replacement invoices entirely paid.
ClosePaidCreditNotesAutomatically=Classify "Paid" all credit notes entirely paid back.
ClosePaidCreditNotesAutomatically=Classify "Paid" all credit notes entirely paid back.
AllCompletelyPayedInvoiceWillBeClosed=All invoice with no remain to pay will be automatically closed to status "Paid".
ToMakePayment=Pay
ToMakePaymentBack=Pay back
@ -459,7 +459,7 @@ SituationDeduction=Situation subtraction
Progress=Progress
ModifyAllLines=Modify all lines
CreateNextSituationInvoice=Create next situation
NotLastInCycle=This invoice in not the last in cycle and must not be modified.
NotLastInCycle=This invoice is not the latest in cycle and must not be modified.
DisabledBecauseNotLastInCycle=The next situation already exists.
DisabledBecauseFinal=This situation is final.
CantBeLessThanMinPercent=The progress can't be smaller than its value in the previous situation.

View File

@ -14,6 +14,6 @@ BehaviourOnClick=Behaviour when a URL is clicked
CreateBookmark=Create bookmark
SetHereATitleForLink=Set a title for the bookmark
UseAnExternalHttpLinkOrRelativeDolibarrLink=Use an external http URL or a relative Dolibarr URL
ChooseIfANewWindowMustBeOpenedOnClickOnBookmark=Choose if a page opened by link must appear on current or new window
ChooseIfANewWindowMustBeOpenedOnClickOnBookmark=Choose if linked page must open in new window or not
BookmarksManagement=Bookmarks management
ListOfBookmarks=List of bookmarks

View File

@ -1,69 +1,69 @@
# Dolibarr language file - Source file is en_US - boxes
BoxLastRssInfos=Rss information
BoxLastProducts=Last %s products/services
BoxProductsAlertStock=Products in stock alert
BoxLastProductsInContract=Last %s contracted products/services
BoxLastSupplierBills=Last supplier's invoices
BoxLastCustomerBills=Last customer's invoices
BoxOldestUnpaidCustomerBills=Oldest unpaid customer's invoices
BoxOldestUnpaidSupplierBills=Oldest unpaid supplier's invoices
BoxLastProposals=Last commercial proposals
BoxLastProspects=Last modified prospects
BoxLastCustomers=Last modified customers
BoxLastSuppliers=Last modified suppliers
BoxLastCustomerOrders=Last customer orders
BoxLastValidatedCustomerOrders=Last validated customer orders
BoxLastBooks=Last books
BoxLastActions=Last actions
BoxLastContracts=Last contracts
BoxLastContacts=Last contacts/addresses
BoxLastMembers=Last members
BoxFicheInter=Last interventions
BoxLastProducts=Latest %s products/services
BoxProductsAlertStock=Stock alerts for products
BoxLastProductsInContract=Latest %s contracted products/services
BoxLastSupplierBills=Latest supplier invoices
BoxLastCustomerBills=Latest customer invoices
BoxOldestUnpaidCustomerBills=Oldest unpaid customer invoices
BoxOldestUnpaidSupplierBills=Oldest unpaid supplier invoices
BoxLastProposals=Latest commercial proposals
BoxLastProspects=Latest modified prospects
BoxLastCustomers=Latest modified customers
BoxLastSuppliers=Latest modified suppliers
BoxLastCustomerOrders=Latest customer orders
BoxLastValidatedCustomerOrders=Latest validated customer orders
BoxLastBooks=Latest bookmarks
BoxLastActions=Latest actions
BoxLastContracts=Latest contracts
BoxLastContacts=Latest contacts/addresses
BoxLastMembers=Latest members
BoxFicheInter=Latest interventions
BoxCurrentAccounts=Open accounts balance
BoxSalesTurnover=Sales turnover
BoxTotalUnpaidCustomerBills=Total unpaid customer's invoices
BoxTotalUnpaidSuppliersBills=Total unpaid supplier's invoices
BoxTitleLastBooks=Last %s recorded books
BoxTitleLastBooks=Latest %s recorded bookmarks
BoxTitleNbOfCustomers=Number of clients
BoxTitleLastRssInfos=Last %s news from %s
BoxTitleLastProducts=Last %s modified products/services
BoxTitleLastRssInfos=Latest %s news from %s
BoxTitleLastProducts=Latest %s modified products/services
BoxTitleProductsAlertStock=Products in stock alert
BoxTitleLastCustomerOrders=Last %s customer orders
BoxTitleLastModifiedCustomerOrders=Last %s modified customer orders
BoxTitleLastSuppliers=Last %s recorded suppliers
BoxTitleLastCustomers=Last %s recorded customers
BoxTitleLastModifiedSuppliers=Last %s modified suppliers
BoxTitleLastModifiedCustomers=Last %s modified customers
BoxTitleLastCustomersOrProspects=Last %s customers or prospects
BoxTitleLastPropals=Last %s proposals
BoxTitleLastModifiedPropals=Last %s modified proposals
BoxTitleLastCustomerBills=Last %s customer's invoices
BoxTitleLastModifiedCustomerBills=Last %s modified customer invoices
BoxTitleLastSupplierBills=Last %s supplier's invoices
BoxTitleLastModifiedSupplierBills=Last %s modified supplier invoices
BoxTitleLastModifiedProspects=Last %s modified prospects
BoxTitleLastProductsInContract=Last %s products/services in a contract
BoxTitleLastModifiedMembers=Last %s members
BoxTitleLastFicheInter=Last %s modified intervention
BoxTitleLastCustomerOrders=Latest %s customer orders
BoxTitleLastModifiedCustomerOrders=Latest %s modified customer orders
BoxTitleLastSuppliers=Latest %s recorded suppliers
BoxTitleLastCustomers=Latest %s recorded customers
BoxTitleLastModifiedSuppliers=Latest %s modified suppliers
BoxTitleLastModifiedCustomers=Latest %s modified customers
BoxTitleLastCustomersOrProspects=Latest %s customers or prospects
BoxTitleLastPropals=Latest %s proposals
BoxTitleLastModifiedPropals=Latest %s modified proposals
BoxTitleLastCustomerBills=Latest %s customer's invoices
BoxTitleLastModifiedCustomerBills=Latest %s modified customer invoices
BoxTitleLastSupplierBills=Latest %s supplier's invoices
BoxTitleLastModifiedSupplierBills=Latest %s modified supplier invoices
BoxTitleLastModifiedProspects=Latest %s modified prospects
BoxTitleLastProductsInContract=Latest %s products/services in a contract
BoxTitleLastModifiedMembers=Latest %s members
BoxTitleLastFicheInter=Latest %s modified interventions
BoxTitleOldestUnpaidCustomerBills=Oldest %s unpaid customer invoices
BoxTitleOldestUnpaidSupplierBills=Oldest %s unpaid supplier invoices
BoxTitleCurrentAccounts=Open accounts balances
BoxTitleSalesTurnover=Sales turnover
BoxTitleTotalUnpaidCustomerBills=Unpaid customer invoices
BoxTitleTotalUnpaidSuppliersBills=Unpaid supplier invoices
BoxTitleLastModifiedContacts=Last %s modified contacts/addresses
BoxMyLastBookmarks=My last %s bookmarks
BoxTitleLastModifiedContacts=Latest %s modified contacts/addresses
BoxMyLastBookmarks=My latest %s bookmarks
BoxOldestExpiredServices=Oldest active expired services
BoxLastExpiredServices=Last %s oldest contacts with active expired services
BoxTitleLastActionsToDo=Last %s actions to do
BoxTitleLastContracts=Last %s contracts
BoxTitleLastModifiedDonations=Last %s modified donations
BoxTitleLastModifiedExpenses=Last %s modified expense reports
BoxLastExpiredServices=Latest %s oldest contacts with active expired services
BoxTitleLastActionsToDo=Latest %s actions to do
BoxTitleLastContracts=Latest %s contracts
BoxTitleLastModifiedDonations=Latest %s modified donations
BoxTitleLastModifiedExpenses=Latest %s modified expense reports
BoxGlobalActivity=Global activity (invoices, proposals, orders)
BoxGoodCustomers=Good customers
BoxTitleGoodCustomers=%s Good customers
FailedToRefreshDataInfoNotUpToDate=Failed to refresh RSS flux. Last successfull refresh date: %s
LastRefreshDate=Last refresh date
FailedToRefreshDataInfoNotUpToDate=Failed to refresh RSS flux. Latest successfull refresh date: %s
LastRefreshDate=Latest refresh date
NoRecordedBookmarks=No bookmarks defined.
ClickToAdd=Click here to add.
NoRecordedCustomers=No recorded customers
@ -82,8 +82,8 @@ NoContractedProducts=No products/services contracted
NoRecordedContracts=No recorded contracts
NoRecordedInterventions=No recorded interventions
BoxLatestSupplierOrders=Latest supplier orders
BoxTitleLatestSupplierOrders=Last %s supplier orders
BoxTitleLatestModifiedSupplierOrders=Last %s modified supplier orders
BoxTitleLatestSupplierOrders=Latest %s supplier orders
BoxTitleLatestModifiedSupplierOrders=Latest %s modified supplier orders
NoSupplierOrder=No recorded supplier order
BoxCustomersInvoicesPerMonth=Customer invoices per month
BoxSuppliersInvoicesPerMonth=Supplier invoices per month
@ -96,5 +96,5 @@ BoxProductDistributionFor=Distribution of %s for %s
ForCustomersInvoices=Customers invoices
ForCustomersOrders=Customers orders
ForProposals=Proposals
LastXMonthRolling=The last %s month rolling
LastXMonthRolling=The latest %s month rolling
ChooseBoxToAdd=Add widget to your dashboard...

View File

@ -16,8 +16,8 @@ Rendez-Vous=Rendezvous
ConfirmDeleteAction=Are you sure you want to delete this event ?
CardAction=Event card
PercentDone=Percentage complete
ActionOnCompany=Event about company
ActionOnContact=Event about contact
ActionOnCompany=Related company
ActionOnContact=Related contact
TaskRDV=Meetings
TaskRDVWith=Meeting with %s
ShowTask=Show task
@ -35,9 +35,9 @@ ShowCustomer=Show customer
ShowProspect=Show prospect
ListOfProspects=List of prospects
ListOfCustomers=List of customers
LastDoneTasks=Last %s completed tasks
LastRecordedTasks=Last recorded tasks
LastActionsToDo=Last %s oldest actions not completed
LastDoneTasks=Latest %s completed tasks
LastRecordedTasks=Latest recorded tasks
LastActionsToDo=Oldest %s not completed actions
DoneAndToDoActionsFor=Completed and To do events for %s
DoneAndToDoActions=Completed and To do events
DoneActions=Completed events
@ -94,4 +94,4 @@ StatusProsp=Prospect status
DraftPropals=Draft commercial proposals
SearchPropal=Search a commercial proposal
CommercialDashboard=Commercial summary
NoLimit=No limit
NoLimit=No limit

View File

@ -302,7 +302,7 @@ RequiredIfCustomer=Required if third party is a customer or prospect
RequiredIfSupplier=Required if third party is a supplier
ValidityControledByModule=Validity controled by module
ThisIsModuleRules=This is rules for this module
LastProspect=Last
LastProspect=Latest
ProspectToContact=Prospect to contact
CompanyDeleted=Company "%s" deleted from database.
ListOfContacts=List of contacts/addresses
@ -328,7 +328,7 @@ NoContactForAnyContract=This contact is not a contact for any contract
NoContactForAnyInvoice=This contact is not a contact for any invoice
NewContact=New contact
NewContactAddress=New contact/address
LastContacts=Last contacts
LastContacts=Latest contacts
MyContacts=My contacts
Phones=Phones
Capital=Capital
@ -343,7 +343,7 @@ VATIntraCheckableOnEUSite=Check Intracomunnautary VAT on European commision site
VATIntraManualCheck=You can also check manually from european web site <a href="%s" target="_blank">%s</a>
ErrorVATCheckMS_UNAVAILABLE=Check not possible. Check service is not provided by the member state (%s).
NorProspectNorCustomer=Nor prospect, nor customer
JuridicalStatus=Juridical status
JuridicalStatus=Legal form
Staff=Staff
ProspectLevelShort=Potential
ProspectLevel=Prospect potential
@ -370,12 +370,12 @@ TE_PRIVATE=Private individual
TE_OTHER=Other
StatusProspect-1=Do not contact
StatusProspect0=Never contacted
StatusProspect1=To contact
StatusProspect1=To be contacted
StatusProspect2=Contact in process
StatusProspect3=Contact done
ChangeDoNotContact=Change status to 'Do not contact'
ChangeNeverContacted=Change status to 'Never contacted'
ChangeToContact=Change status to 'To contact'
ChangeToContact=Change status to 'To be contacted'
ChangeContactInProcess=Change status to 'Contact in process'
ChangeContactDone=Change status to 'Contact done'
ProspectsByStatus=Prospects by status
@ -400,28 +400,28 @@ DeliveriesAddress=Delivery addresses
DeliveryAddress=Delivery address
DeliveryAddressLabel=Delivery address label
DeleteDeliveryAddress=Delete a delivery address
ConfirmDeleteDeliveryAddress=Are you sure you want to delete this delivery address?
ConfirmDeleteDeliveryAddress=Are you sure you want to delete this delivery address ?
NewDeliveryAddress=New delivery address
AddDeliveryAddress=Create address
AddAddress=Create address
AddDeliveryAddress=Add delivery address
AddAddress=Add address
NoOtherDeliveryAddress=No alternative delivery address defined
SupplierCategory=Supplier category
JuridicalStatus200=Independant
JuridicalStatus200=Independent
DeleteFile=Delete file
ConfirmDeleteFile=Are you sure you want to delete this file?
AllocateCommercial=Assigned to sale representative
AllocateCommercial=Assigned to sales representative
SelectCountry=Select a country
SelectCompany=Select a third party
Organization=Organization
AutomaticallyGenerated=Automatically generated
FiscalYearInformation=Information on the fiscal year
FiscalMonthStart=Starting month of the fiscal year
YouMustCreateContactFirst=You must create emails contacts for third party first to be able to add emails notifications.
YouMustCreateContactFirst=To be able to add email notifications, you must first insert email contacts for the third party
ListSuppliersShort=List of suppliers
ListProspectsShort=List of prospects
ListCustomersShort=List of customers
ThirdPartiesArea=Third parties and contact area
LastModifiedThirdParties=Last %s modified third parties
LastModifiedThirdParties=Latest %s modified third parties
UniqueThirdParties=Total of unique third parties
InActivity=Open
ActivityCeased=Closed
@ -429,7 +429,7 @@ ActivityStateFilter=Activity status
ProductsIntoElements=List of products/services into %s
CurrentOutstandingBill=Current outstanding bill
OutstandingBill=Max. for outstanding bill
OutstandingBillReached=Reached max. for outstanding bill
OutstandingBillReached=Max. for outstanding bill reached
MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for supplier code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
LeopardNumRefModelDesc=The code is free. This code can be modified at any time.
ManagingDirectors=Manager(s) name (CEO, director, president...)
@ -440,8 +440,8 @@ MergeThirdparties=Merge third parties
ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one ? All linked objects (invoices, orders, ...) will be moved to current third party so you will be able to delete the duplicate one.
ThirdpartiesMergeSuccess=Thirdparties have been merged
ErrorThirdpartiesMerge=There was an error when deleting the thirdparties. Please check the log. Changes have been reverted.
SaleRepresentativeLogin=Login of sale representative
SaleRepresentativeFirstname=Firstname of sale representative
SaleRepresentativeLastname=Lastname of sale representative
SaleRepresentativeLogin=Login of sales representative
SaleRepresentativeFirstname=Firstname of sales representative
SaleRepresentativeLastname=Lastname of sales representative
ModelModulesContact=Document Models of contact
ModelModulesThirdParties=Document models of third party

View File

@ -121,11 +121,11 @@ ErrorWrongAccountancyCodeForCompany=Bad customer accountancy code for %s
SuppliersProductsSellSalesTurnover=The generated turnover by the sales of supplier's products.
CheckReceipt=Check deposit
CheckReceiptShort=Check deposit
LastCheckReceiptShort=Last %s check receipts
LastCheckReceiptShort=Latest %s check receipts
NewCheckReceipt=New discount
NewCheckDeposit=New check deposit
NewCheckDepositOn=Create receipt for deposit on account: %s
NoWaitingChecks=No checks waiting for deposit.
NoWaitingChecks=No checks awaiting deposit.
DateChequeReceived=Check reception date
NbOfCheques=Nb of checks
PaySocialContribution=Pay a social/fiscal tax
@ -225,4 +225,5 @@ BasedOnTwoFirstLettersOfVATNumberBeingDifferentFromYourCompanyCountry=Based on t
SameCountryCustomersWithVAT=National customers report
BasedOnTwoFirstLettersOfVATNumberBeingTheSameAsYourCompanyCountry=Based on the two first letters of the VAT number being the same as your own company's country code
LinkedFichinter=Link to an intervention
ImportDataset_tax_1=Import social/fiscal taxes
ImportDataset_tax_1=Import social/fiscal taxes
ErrorBankAccountNotFound=Error: Bank account not found

View File

@ -1,7 +1,7 @@
# Dolibarr language file - Source file is en_US - contracts
ContractsArea=Contracts area
ListOfContracts=List of contracts
LastModifiedContracts=Last %s modified contracts
LastModifiedContracts=Latest %s modified contracts
AllContracts=All contracts
ContractCard=Contract card
ContractStatus=Contract status
@ -58,9 +58,9 @@ ListOfRunningContractsLines=List of running contract lines
ListOfRunningServices=List of running services
NotActivatedServices=Inactive services (among validated contracts)
BoardNotActivatedServices=Services to activate among validated contracts
LastContracts=Last %s contracts
LastActivatedServices=Last %s activated services
LastModifiedServices=Last %s modified services
LastContracts=Latest %s contracts
LastActivatedServices=Latest %s activated services
LastModifiedServices=Latest %s modified services
EditServiceLine=Edit service line
ContractStartDate=Start date
ContractEndDate=End date

View File

@ -40,8 +40,8 @@ CronNone=None
CronDtStart=Not before
CronDtEnd=Not after
CronDtNextLaunch=Next execution
CronDtLastLaunch=Start date of last execution
CronDtLastResult=End date of last execution
CronDtLastLaunch=Start date of latest execution
CronDtLastResult=End date of latest execution
CronFrequency=Frequency
CronClass=Class
CronMethod=Method
@ -63,7 +63,7 @@ CronHourStart= Start hour and date of job
CronEvery=Execute job each
CronObject=Instance/Object to create
CronArgs=Parameters
CronSaveSucess=Save succesfully
CronSaveSucess=Save successfully
CronNote=Comment
CronFieldMandatory=Fields %s is mandatory
CronErrEndDateStartDt=End date cannot be before start date

View File

@ -138,7 +138,7 @@ CountryLS=Lesotho
CountryLR=Liberia
CountryLY=Libyan
CountryLI=Liechtenstein
CountryLT=Lituania
CountryLT=Lithuania
CountryLU=Luxembourg
CountryMO=Macao
CountryMK=Macedonia, the former Yugoslav of

View File

@ -29,7 +29,7 @@ ValidPromess=Validate promise
DonationReceipt=Donation receipt
BuildDonationReceipt=Build receipt
DonationsModels=Documents models for donation receipts
LastModifiedDonations=Last %s modified donations
LastModifiedDonations=Latest %s modified donations
SearchADonation=Search a donation
DonationRecipient=Donation recipient
ThankYou=Thank You

View File

@ -17,7 +17,7 @@ ErrorFailToCreateFile=Failed to create file '<b>%s</b>'.
ErrorFailToRenameDir=Failed to rename directory '<b>%s</b>' into '<b>%s</b>'.
ErrorFailToCreateDir=Failed to create directory '<b>%s</b>'.
ErrorFailToDeleteDir=Failed to delete directory '<b>%s</b>'.
ErrorFailedToDeleteJoinedFiles=Can not delete environment because there is some joined files. Remove join files first.
ErrorFailedToDeleteJoinedFiles=Cannot delete environment because joined files are present. Remove joined files first.
ErrorThisContactIsAlreadyDefinedAsThisType=This contact is already defined as contact for this type.
ErrorCashAccountAcceptsOnlyCashMoney=This bank account is a cash account, so it accepts payments of type cash only.
ErrorFromToAccountsMustDiffers=Source and targets bank accounts must be different.
@ -41,7 +41,7 @@ ErrorBadDateFormat=Value '%s' has wrong date format
ErrorWrongDate=Date is not correct!
ErrorFailedToWriteInDir=Failed to write in directory %s
ErrorFoundBadEmailInFile=Found incorrect email syntax for %s lines in file (example line %s with email=%s)
ErrorUserCannotBeDelete=User can not be deleted. May be it is associated on Dolibarr entities.
ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
ErrorFieldsRequired=Some required fields were not filled.
ErrorFailedToCreateDir=Failed to create a directory. Check that Web server user has permissions to write into Dolibarr documents directory. If parameter <b>safe_mode</b> is enabled on this PHP, check that Dolibarr php files owns to web server user (or group).
ErrorNoMailDefinedForThisUser=No mail defined for this user
@ -129,7 +129,7 @@ ErrorNewValueCantMatchOldValue=New value can't be equal to old one
ErrorFailedToValidatePasswordReset=Failed to reinit password. May be the reinit was already done (this link can be used only one time). If not, try to restart the reinit process.
ErrorToConnectToMysqlCheckInstance=Connect to database fails. Check Mysql server is running (in most cases, you can launch it from command line with 'sudo /etc/init.d/mysql start').
ErrorFailedToAddContact=Failed to add contact
ErrorDateMustBeBeforeToday=The date can not be greater than today
ErrorDateMustBeBeforeToday=The date cannot be greater than today
ErrorPaymentModeDefinedToWithoutSetup=A payment mode was set to type %s but setup of module Invoice was not completed to define information to show for this payment mode.
ErrorPHPNeedModule=Error, your PHP must have module <b>%s</b> installed to use this feature.
ErrorOpenIDSetupNotComplete=You setup Dolibarr config file to allow OpenID authentication, but URL of OpenID service is not defined into constant %s

View File

@ -80,7 +80,7 @@ alreadyCPexist=A leave request has already been done on this period.
UserName=Name
FirstDayOfHoliday=First day of vacation
LastDayOfHoliday=Last day of vacation
BoxTitleLastLeaveRequests=Last %s modified leave requests
BoxTitleLastLeaveRequests=Latest %s modified leave requests
HolidaysMonthlyUpdate=Monthly update
ManualUpdate=Manual update
HolidaysCancelation=Leave request cancelation
@ -91,8 +91,8 @@ DescOptionCP=Description of the option
ValueOptionCP=Value
GroupToValidateCP=Group with the ability to approve leave requests
ConfirmConfigCP=Validate the configuration
LastUpdateCP=Last automatic update of leaves allocation
MonthOfLastMonthlyUpdate=Month of last automatic update of leaves allocation
LastUpdateCP=Latest automatic update of leaves allocation
MonthOfLastMonthlyUpdate=Month of latest automatic update of leaves allocation
UpdateConfCPOK=Updated successfully.
ErrorUpdateConfCP=An error occurred during the update, please try again.
AddCPforUsers=Please add the balance of leaves allocation of users by <a href="../define_holiday.php" style="font-weight: normal; color: red; text-decoration: underline;">clicking here</a>.
@ -143,4 +143,4 @@ NewByMonth=Added per month
Affect=Followed by a counter
FollowedByACounter=1: This type of leave need to be followed by a counter. Counter is incremented manually or automatically and when a leave request is validated, counter is decremented.<br>0: Not followed by a counter.
NoLeaveWithCounterDefined=There is no leave types defined that need to be followed by a counter
GoIntoDictionaryHolidayTypes=Go into <strong>Home - Setup - Dictionaries - Type of leaves</strong> to setup the different types of leaves.
GoIntoDictionaryHolidayTypes=Go into <strong>Home - Setup - Dictionaries - Type of leaves</strong> to setup the different types of leaves.

View File

@ -82,7 +82,7 @@ SetupEnd=End of setup
SystemIsInstalled=This installation is complete.
SystemIsUpgraded=Dolibarr has been upgraded successfully.
YouNeedToPersonalizeSetup=You need to configure Dolibarr to suit your needs (appearance, features, ...). To do this, please follow the link below:
AdminLoginCreatedSuccessfuly=Dolibarr administrator login '<b>%s</b>' created successfuly.
AdminLoginCreatedSuccessfuly=Dolibarr administrator login '<b>%s</b>' created successfully.
GoToDolibarr=Go to Dolibarr
GoToSetupArea=Go to Dolibarr (setup area)
MigrationNotFinished=Version of your database is not completely up to date, so you'll have to run the upgrade process again.
@ -159,7 +159,7 @@ MigrationSupplierOrder=Data migration for supplier's orders
MigrationProposal=Data migration for commercial proposals
MigrationInvoice=Data migration for customer's invoices
MigrationContract=Data migration for contracts
MigrationSuccessfullUpdate=Upgrade successful
MigrationSuccessfullUpdate=Upgrade successfull
MigrationUpdateFailed=Failed upgrade process
MigrationRelationshipTables=Data migration for relationship tables (%s)
MigrationPaymentsUpdate=Payment data correction
@ -173,7 +173,7 @@ MigrationContractsLineCreation=Create contract line for contract ref %s
MigrationContractsNothingToUpdate=No more things to do
MigrationContractsFieldDontExist=Field fk_facture does not exists anymore. Nothing to do.
MigrationContractsEmptyDatesUpdate=Contract empty date correction
MigrationContractsEmptyDatesUpdateSuccess=Contract emtpy date correction done successfuly
MigrationContractsEmptyDatesUpdateSuccess=Contract emtpy date correction done successfully
MigrationContractsEmptyDatesNothingToUpdate=No contract empty date to correct
MigrationContractsEmptyCreationDatesNothingToUpdate=No contract creation date to correct
MigrationContractsInvalidDatesUpdate=Bad value date contract correction
@ -181,7 +181,7 @@ MigrationContractsInvalidDateFix=Correct contract %s (Contract date=%s, Starting
MigrationContractsInvalidDatesNumber=%s contracts modified
MigrationContractsInvalidDatesNothingToUpdate=No date with bad value to correct
MigrationContractsIncoherentCreationDateUpdate=Bad value contract creation date correction
MigrationContractsIncoherentCreationDateUpdateSuccess=Bad value contract creation date correction done succesfuly
MigrationContractsIncoherentCreationDateUpdateSuccess=Bad value contract creation date correction done successfully
MigrationContractsIncoherentCreationDateNothingToUpdate=No bad value for contract creation date to correct
MigrationReopeningContracts=Open contract closed by error
MigrationReopenThisContract=Reopen contract %s
@ -205,4 +205,4 @@ MigrationEvents=Migration of events to add event owner into assignement table
MigrationReloadModule=Reload module %s
ShowNotAvailableOptions=Show not available options
HideNotAvailableOptions=Hide not available options
ErrorFoundDuringMigration=Error were reported during migration process so next step is not available. To ignore errors, you can <a href="%s">click here</a>, but application or some features may not work correctly until fixed.
ErrorFoundDuringMigration=Error were reported during migration process so next step is not available. To ignore errors, you can <a href="%s">click here</a>, but application or some features may not work correctly until fixed.

View File

@ -7,7 +7,7 @@ AddIntervention=Create intervention
ListOfInterventions=List of interventions
EditIntervention=Edit intervention
ActionsOnFicheInter=Actions on intervention
LastInterventions=Last %s interventions
LastInterventions=Latest %s interventions
AllInterventions=All interventions
CreateDraftIntervention=Create draft
CustomerDoesNotHavePrefix=Customer does not have a prefix
@ -41,7 +41,7 @@ InterventionDeletedInDolibarr=Intervention %s deleted
SearchAnIntervention=Search an intervention
InterventionsArea=Interventions area
DraftFichinter=Draft interventions
LastModifiedInterventions=Last %s modified interventions
LastModifiedInterventions=Latest %s modified interventions
##### Types de contacts #####
TypeContact_fichinter_internal_INTERREPFOLL=Representative following-up intervention
TypeContact_fichinter_internal_INTERVENING=Intervening

View File

@ -3,8 +3,8 @@ MailmanSpipSetup=Mailman and SPIP module Setup
MailmanTitle=Mailman mailing list system
TestSubscribe=To test subscription to Mailman lists
TestUnSubscribe=To test unsubscribe from Mailman lists
MailmanCreationSuccess=Subscription test was executed succesfully
MailmanDeletionSuccess=Unsubscription test was executed succesfully
MailmanCreationSuccess=Subscription test was executed successfully
MailmanDeletionSuccess=Unsubscription test was executed successfully
SynchroMailManEnabled=A Mailman update will be performed
SynchroSpipEnabled=A Spip update will be performed
DescADHERENT_MAILMAN_ADMINPW=Mailman administrator password
@ -23,5 +23,5 @@ DeleteIntoSpip=Remove from SPIP
DeleteIntoSpipConfirmation=Are you sure you want to remove this member from SPIP?
DeleteIntoSpipError=Failed to suppress the user from SPIP
SPIPConnectionFailed=Failed to connect to SPIP
SuccessToAddToMailmanList=Add of %s to mailman list %s or SPIP database done
SuccessToRemoveToMailmanList=Removal of %s from mailman list %s or SPIP database done
SuccessToAddToMailmanList=%s successfully added to mailman list %s or SPIP database
SuccessToRemoveToMailmanList=%s successfully removed from mailman list %s or SPIP database

View File

@ -70,7 +70,7 @@ CloneEMailing=Clone Emailing
ConfirmCloneEMailing=Are you sure you want to clone this emailing ?
CloneContent=Clone message
CloneReceivers=Cloner recipients
DateLastSend=Date of last sending
DateLastSend=Date of latest sending
DateSending=Date sending
SentTo=Sent to <b>%s</b>
MailingStatusRead=Read
@ -170,4 +170,4 @@ AdvTgtSaveFilter=Save filter
AdvTgtCreateFilter=Create filter
AdvTgtOrCreateNewFilter=Name of new filter
NoContactWithCategoryFound=No contact/address with a category found
NoContactLinkedToThirdpartieWithCategoryFound=No contact/address with a category found
NoContactLinkedToThirdpartieWithCategoryFound=No contact/address with a category found

View File

@ -36,8 +36,8 @@ ErrorFieldRequired=Field '%s' is required
ErrorFieldFormat=Field '%s' has a bad value
ErrorFileDoesNotExists=File %s does not exist
ErrorFailedToOpenFile=Failed to open file %s
ErrorCanNotCreateDir=Can not create dir %s
ErrorCanNotReadDir=Can not read dir %s
ErrorCanNotCreateDir=Cannot create dir %s
ErrorCanNotReadDir=Cannot read dir %s
ErrorConstantNotDefined=Parameter %s not defined
ErrorUnknown=Unknown error
ErrorSQL=SQL Error
@ -73,7 +73,7 @@ FileNotUploaded=The file was not uploaded
FileUploaded=The file was successfully uploaded
FileWasNotUploaded=A file is selected for attachment but was not yet uploaded. Click on "Attach file" for this.
NbOfEntries=Nb of entries
GoToWikiHelpPage=Read online help (need Internet access)
GoToWikiHelpPage=Read online help (Internet access needed)
GoToHelpPage=Read help
RecordSaved=Record saved
RecordDeleted=Record deleted
@ -94,12 +94,12 @@ ConnectedSince=Connected since
AuthenticationMode=Authentification mode
RequestedUrl=Requested Url
DatabaseTypeManager=Database type manager
RequestLastAccess=Request for last database access
RequestLastAccessInError=Request for last database access in error
ReturnCodeLastAccessInError=Return code for last database access in error
InformationLastAccessInError=Information for last database access in error
RequestLastAccess=Latest database access request
RequestLastAccessInError=Latest database access request error
ReturnCodeLastAccessInError=Return code for latest database access request error
InformationLastAccessInError=Information for latest database access request error
DolibarrHasDetectedError=Dolibarr has detected a technical error
InformationToHelpDiagnose=This is information that can help diagnostic
InformationToHelpDiagnose=This information can be useful for diagnostic
MoreInformation=More information
TechnicalInformation=Technical information
TechnicalID=Technical ID
@ -142,7 +142,7 @@ Update=Update
AddActionToDo=Add event to do
AddActionDone=Add event done
Close=Close
CloseBox=Remove box of your dashboard
CloseBox=Remove box from your dashboard
Confirm=Confirm
ConfirmSendCardByMail=Do you really want to send content of this card by mail to <b>%s</b> ?
Delete=Delete
@ -158,6 +158,7 @@ Save=Save
SaveAs=Save As
TestConnection=Test connection
ToClone=Clone
ConfirmCloneAction=Are you sure you want to clone this event ?
ConfirmClone=Choose data you want to clone :
NoCloneOptionsSpecified=No data to clone defined.
Of=of
@ -176,7 +177,6 @@ Upload=Send file
ToLink=Link
Select=Select
Choose=Choose
ChooseLangage=Please choose your language
Resize=Resize
Recenter=Recenter
Author=Author
@ -530,7 +530,7 @@ ReportName=Report name
ReportPeriod=Report period
ReportDescription=Description
Report=Report
Keyword=Mot clé
Keyword=Keyword
Legend=Legend
FillTownFromZip=Fill city from zip
Fill=Fill
@ -550,8 +550,8 @@ NbOfCustomers=Number of customers
NbOfLines=Number of lines
NbOfObjects=Number of objects
NbOfReferers=Number of referrers
NbOfObjectReferers=Number of refering objects
Referers=Refering objects
NbOfObjectReferers=Number of related items
Referers=Related items
TotalQuantity=Total quantity
DateFromTo=From %s to %s
DateFrom=From %s
@ -594,7 +594,7 @@ Priority=Priority
SendByMail=Send by EMail
MailSentBy=Email sent by
TextUsedInTheMessageBody=Email body
SendAcknowledgementByMail=Send Ack. by email
SendAcknowledgementByMail=Send confirmation email
EMail=E-mail
NoEMail=No email
NoMobilePhone=No mobile phone
@ -746,7 +746,7 @@ Sincerely=Sincerely
DeleteLine=Delete line
ConfirmDeleteLine=Are you sure you want to delete this line ?
NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked records
TooManyRecordForMassAction=Too many records selected for mass action. Such action are restriced to a list of %s records.
TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
MassFilesArea=Area for files built by mass actions
HideTempMassFilesArea=Hide area of files built by mass actions
ShowTempMassFilesArea=Show area of files built by mass actions
@ -804,4 +804,4 @@ SearchIntoSupplierProposals=Supplier proposals
SearchIntoInterventions=Interventions
SearchIntoContracts=Contracts
SearchIntoExpenseReports=Expense reports
SearchIntoCustomerShipments=Customer shipments
SearchIntoCustomerShipments=Customer shipments

View File

@ -114,9 +114,9 @@ EnablePublicSubscriptionForm=Enable the public auto-subscription form
MemberPublicLinks=Public links/pages
ExportDataset_member_1=Members and subscriptions
ImportDataset_member_1=Members
LastMembers=Last %s members
LastMembersModified=Last %s modified members
LastSubscriptionsModified=Last %s modified subscriptions
LastMembers=Latest %s members
LastMembersModified=Latest %s modified members
LastSubscriptionsModified=Latest %s modified subscriptions
AttributeName=Attribute name
String=String
Text=Text
@ -204,4 +204,4 @@ MembersByRegion=This screen show you statistics on members by region.
VATToUseForSubscriptions=VAT rate to use for subscriptions
NoVatOnSubscription=No TVA for subscriptions
MEMBER_PAYONLINE_SENDEMAIL=Email to use for email warning when Dolibarr receive a confirmation of a validated payment for a subscription (Example: paymentdone@example.com)
ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS=Product used for subscription line into invoice: %s
ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS=Product used for subscription line into invoice: %s

View File

@ -0,0 +1,17 @@
# ADMIN
RecordSaved=Currency rate added
RecordDeleted=Currency rate deleted
ErrorAddRateFail=Error in added rate
ErrorAddCurrencyFail=Error in added currency
ErrorDeleteCurrencyFail=Error delete fail
multicurrency_syncronize_error=Error in synchronization
multicurrency_useOriginTx=Use the origin rate
CurrencyLayerAccount=CurrencyLayer API
CurrencyLayerAccount_help_to_synchronize=You sould create an account on their website to use this functionnality<br />Get your <b>API key</b><br />If you use a free account you can't change the <b>currency source</b> (USD by default)<br />But if your main currency isn't USD you can use the <b>alternate currency source</b> to force you main currency<br /><br />You are limited at 1000 synchronizations per month
multicurrency_appId=API key
multicurrency_appCurrencySource=Currency source
multicurrency_alternateCurrencySource= Alternate currency souce
CurrenciesUsed=Currencies used
CurrenciesUsed_help_to_add=Add the differents currencies and rates you need to use on you <b>proposals</b>, <b>orders</b>, etc.
Rate=Rate
rate=rate

View File

@ -87,11 +87,11 @@ NoDraftOrders=No draft orders
NoOrder=No order
NoSupplierOrder=No supplier order
OtherOrders=Other orders
LastOrders=Last %s customer orders
LastCustomerOrders=Last %s customer orders
LastSupplierOrders=Last %s supplier orders
LastModifiedOrders=Last %s modified orders
LastClosedOrders=Last %s closed orders
LastOrders=Latest %s customer orders
LastCustomerOrders=Latest %s customer orders
LastSupplierOrders=Latest %s supplier orders
LastModifiedOrders=Latest %s modified orders
LastClosedOrders=Latest %s closed orders
AllOrders=All orders
NbOfOrders=Number of orders
OrdersStatistics=Order's statistics

View File

@ -3,12 +3,12 @@ SecurityCode=Security code
Calendar=Calendar
NumberingShort=N°
Tools=Tools
ToolsDesc=This area is dedicated to group miscellaneous tools not available into other menu entries.<br><br>Those tools can be reached from menu on the side.
ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br /><br />All the tools can be reached in the left menu.
Birthday=Birthday
BirthdayDate=Birthday
BirthdayDate=Birthday date
DateToBirth=Date of birth
BirthdayAlertOn= birthday alert active
BirthdayAlertOff= birthday alert inactive
BirthdayAlertOn=birthday alert active
BirthdayAlertOff=birthday alert inactive
Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
Notify_FICHINTER_VALIDATE=Intervention validated
Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
@ -69,8 +69,8 @@ PredefinedMailContentSendSupplierInvoice=__CONTACTCIVNAME__\n\nYou will find her
PredefinedMailContentSendShipping=__CONTACTCIVNAME__\n\nYou will find here the shipping __SHIPPINGREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__
PredefinedMailContentSendFichInter=__CONTACTCIVNAME__\n\nYou will find here the intervention __FICHINTERREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__
PredefinedMailContentThirdparty=__CONTACTCIVNAME__\n\n__PERSONALIZED__\n\n__SIGNATURE__
DemoDesc=Dolibarr is a compact ERP/CRM composed by several functional modules. A demo that includes all modules does not mean anything as this never occurs. So, several demo profiles are available.
ChooseYourDemoProfil=Choose the demo profile that match your activity...
DemoDesc=Dolibarr is a compact ERP/CRM supporting several functional modules. A demo showcasing all modules makes no sense as this scenario never occurs. So, several demo profiles are available.
ChooseYourDemoProfil=Choose the demo profile that best suits your needs...
DemoFundation=Manage members of a foundation
DemoFundation2=Manage members and bank account of a foundation
DemoCompanyServiceOnly=Manage a freelance activity selling service only
@ -84,22 +84,22 @@ ValidatedBy=Validated by %s
CanceledBy=Canceled by %s
ClosedBy=Closed by %s
CreatedById=User id who created
ModifiedById=User id who made last change
ModifiedById=User id who made latest change
ValidatedById=User id who validated
CanceledById=User id who canceled
ClosedById=User id who closed
CreatedByLogin=User login who created
ModifiedByLogin=User login who made last change
ModifiedByLogin=User login who made latest change
ValidatedByLogin=User login who validated
CanceledByLogin=User login who canceled
ClosedByLogin=User login who closed
FileWasRemoved=File %s was removed
DirWasRemoved=Directory %s was removed
FeatureNotYetAvailableShort=Available in a next version
FeatureNotYetAvailable=Feature not yet available in this version
FeatureExperimental=Experimental feature. Not stable in this version
FeatureDevelopment=Development feature. Not stable in this version
FeaturesSupported=Features supported
FeatureNotYetAvailableShort=Available in a future version
FeatureNotYetAvailable=Feature not yet available in the current version
FeatureExperimental=Experimental feature. Not stable in the current version
FeatureDevelopment=Development feature. Not stable in the current version
FeaturesSupported=Supported features
Width=Width
Height=Height
Depth=Depth
@ -111,7 +111,7 @@ CalculatedWeight=Calculated weight
CalculatedVolume=Calculated volume
Weight=Weight
TotalWeight=Total weight
WeightUnitton=tonnes
WeightUnitton=tonne
WeightUnitkg=kg
WeightUnitg=g
WeightUnitmg=mg
@ -147,27 +147,27 @@ SizeUnitinch=inch
SizeUnitfoot=foot
SizeUnitpoint=point
BugTracker=Bug tracker
SendNewPasswordDesc=This form allows you to request a new password. It will be send to your email address.<br>Change will be effective only after clicking on confirmation link inside this email.<br>Check your email reader software.
SendNewPasswordDesc=This form allows you to request a new password. It will be sent to your email address.<br />Change will become effective once you click on the confirmation link in the email.<br />Check your inbox.
BackToLoginPage=Back to login page
AuthenticationDoesNotAllowSendNewPassword=Authentication mode is <b>%s</b>.<br>In this mode, Dolibarr can't know nor change your password.<br>Contact your system administrator if you want to change your password.
EnableGDLibraryDesc=Install or enable GD library with your PHP for use this option.
AuthenticationDoesNotAllowSendNewPassword=Authentication mode is <b>%s</b>.<br />In this mode, Dolibarr can't know nor change your password.<br />Contact your system administrator if you want to change your password.
EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use this option.
EnablePhpAVModuleDesc=You need to install a module compatible with your anti-virus. (Clamav : php4-clamavlib ou php5-clamavlib)
ProfIdShortDesc=<b>Prof Id %s</b> is an information depending on third party country.<br>For example, for country <b>%s</b>, it's code <b>%s</b>.
ProfIdShortDesc=<b>Prof Id %s</b> is an information depending on third party country.<br>For example, for country <b>%s</b>, it's code <b>%s</b>.
DolibarrDemo=Dolibarr ERP/CRM demo
StatsByNumberOfUnits=Statistics in number of products/services units
StatsByNumberOfEntities=Statistics in number of referring entities
NumberOfProposals=Number of proposals on last 12 month
NumberOfCustomerOrders=Number of customer orders on last 12 month
NumberOfCustomerInvoices=Number of customer invoices on last 12 month
NumberOfSupplierProposals=Number of supplier proposals on last 12 month
NumberOfSupplierOrders=Number of supplier orders on last 12 month
NumberOfSupplierInvoices=Number of supplier invoices on last 12 month
NumberOfUnitsProposals=Number of units on proposals on last 12 month
NumberOfUnitsCustomerOrders=Number of units on customer orders on last 12 month
NumberOfUnitsCustomerInvoices=Number of units on customer invoices on last 12 month
NumberOfUnitsSupplierProposals=Number of units on supplier proposals on last 12 month
NumberOfUnitsSupplierOrders=Number of units on supplier orders on last 12 month
NumberOfUnitsSupplierInvoices=Number of units on supplier invoices on last 12 month
NumberOfProposals=Number of proposals in past 12 months
NumberOfCustomerOrders=Number of customer orders in past 12 months
NumberOfCustomerInvoices=Number of customer invoices in past 12 months
NumberOfSupplierProposals=Number of supplier proposals in past 12 months
NumberOfSupplierOrders=Number of supplier orders in past 12 months
NumberOfSupplierInvoices=Number of supplier invoices in past 12 months
NumberOfUnitsProposals=Number of units on proposals in past 12 months
NumberOfUnitsCustomerOrders=Number of units on customer orders in past 12 months
NumberOfUnitsCustomerInvoices=Number of units on customer invoices in past 12 months
NumberOfUnitsSupplierProposals=Number of units on supplier proposals in past 12 months
NumberOfUnitsSupplierOrders=Number of units on supplier orders in past 12 months
NumberOfUnitsSupplierInvoices=Number of units on supplier invoices in past 12 months
EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
EMailTextInterventionValidated=The intervention %s has been validated.
EMailTextInvoiceValidated=The invoice %s has been validated.

View File

@ -36,12 +36,12 @@ ServicesOnSell=Services for sale or for purchase
ServicesNotOnSell=Services not for sale
ServicesOnSellAndOnBuy=Services for sale and for purchase
InternalRef=Internal reference
LastRecorded=Last products/services on sell recorded
LastRecordedProductsAndServices=Last %s recorded products/services
LastModifiedProductsAndServices=Last %s modified products/services
LastRecordedProducts=Last %s products recorded
LastRecordedServices=Last %s services recorded
LastProducts=Last products
LastRecorded=Latest recorded products/services on sell
LastRecordedProductsAndServices=Latest %s recorded products/services
LastModifiedProductsAndServices=Latest %s modified products/services
LastRecordedProducts=Latest %s recorded products
LastRecordedServices=Latest %s recorded services
LastProducts=Latest products
CardProduct0=Product card
CardProduct1=Service card
CardContract=Contract card

View File

@ -8,7 +8,7 @@ Projects=Projects
ProjectsArea=Projects Area
ProjectStatus=Project status
SharedProject=Everybody
PrivateProject=Contacts of project
PrivateProject=Project contacts
MyProjectsDesc=This view is limited to projects you are a contact for (whatever is the type).
ProjectsPublicDesc=This view presents all projects you are allowed to read.
ProjectsPublicTaskDesc=This view presents all projects and tasks you are allowed to read.
@ -28,11 +28,11 @@ DeleteATask=Delete a task
ConfirmDeleteAProject=Are you sure you want to delete this project ?
ConfirmDeleteATask=Are you sure you want to delete this task ?
OfficerProject=Officer project
LastProjects=Last %s projects
LastProjects=Latest %s projects
AllProjects=All projects
OpenedProjects=Opened projects
OpenedTasks=Opened tasks
OpportunitiesStatusForOpenedProjects=Opportunities amount of opened projects by status
OpenedProjects=Open projects
OpenedTasks=Open tasks
OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
OpportunitiesStatusForProjects=Opportunities amount of projects by status
ProjectsList=List of projects
ShowProject=Show project
@ -159,14 +159,14 @@ DocumentModelBaleine=Project report template for tasks
PlannedWorkload=Planned workload
PlannedWorkloadShort=Workload
WorkloadOccupation=Workload assignation
ProjectReferers=Refering objects
ProjectReferers=Related items
SearchAProject=Search a project
SearchATask=Search a task
ProjectMustBeValidatedFirst=Project must be validated first
ProjectDraft=Draft projects
FirstAddRessourceToAllocateTime=Associate a resource to allocate time
InputPerDay=Input per day
InputPerWeek=Input per week
InputPerDay=Input per day
InputPerWeek=Input per week
InputPerAction=Input per action
TimeAlreadyRecorded=Time spent already recorded for this task/day and user %s
ProjectsWithThisUserAsContact=Projects with this user as contact
@ -182,14 +182,14 @@ ManageOpportunitiesStatus=Use projects to follow leads/opportinuties
ProjectNbProjectByMonth=Nb of created projects by month
ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
ProjectOpenedProjectByOppStatus=Opened project/lead by opportunity status
ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
ProjectsStatistics=Statistics on projects/leads
TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
IdTaskTime=Id task time
YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label.
OpenedProjectsByThirdparties=Opened projects by thirdparties
OpenedProjectsByThirdparties=Open projects by thirdparties
OnlyOpportunitiesShort=Only opportunities
OpenedOpportunitiesShort=Opened opportunities
OpenedOpportunitiesShort=Open opportunities
NotAnOpportunityShort=Not an opportunity
OpportunityTotalAmount=Opportunities total amount
OpportunityPonderatedAmount=Opportunities weighted amount
@ -201,4 +201,4 @@ OppStatusNEGO=Negociation
OppStatusPENDING=Pending
OppStatusWON=Won
OppStatusLOST=Lost
Budget=Budget
Budget=Budget

View File

@ -19,11 +19,11 @@ ValidateProp=Validate commercial proposal
AddProp=Create proposal
ConfirmDeleteProp=Are you sure you want to delete this commercial proposal ?
ConfirmValidateProp=Are you sure you want to validate this commercial proposal under name <b>%s</b> ?
LastPropals=Last %s proposals
LastClosedProposals=Last %s closed proposals
LastModifiedProposals=Last %s modified proposals
LastPropals=Latest %s proposals
LastClosedProposals=Latest %s closed proposals
LastModifiedProposals=Latest %s modified proposals
AllPropals=All proposals
LastProposals=Last proposals
LastProposals=Latest proposals
SearchAProposal=Search a proposal
NoProposal=No proposal
ProposalsStatistics=Commercial proposal's statistics
@ -102,4 +102,4 @@ DefaultModelPropalCreate=Default model creation
DefaultModelPropalToBill=Default template when closing a business proposal (to be invoiced)
DefaultModelPropalClosed=Default template when closing a business proposal (unbilled)
ProposalCustomerSignature=Written acceptance, company stamp, date and signature
ProposalsStatisticsSuppliers=Supplier proposals statistics
ProposalsStatisticsSuppliers=Supplier proposals statistics

View File

@ -11,7 +11,7 @@ SendingsArea=Shipments area
ListOfSendings=List of shipments
SendingMethod=Shipping method
SendingReceipt=Shipping receipt
LastSendings=Last %s shipments
LastSendings=Latest %s shipments
SearchASending=Search for shipment
StatisticsOfSendings=Statistics for shipments
NbOfSendings=Number of shipments

View File

@ -116,7 +116,7 @@ WarehouseForStockDecrease=The warehouse <b>%s</b> will be used for stock decreas
WarehouseForStockIncrease=The warehouse <b>%s</b> will be used for stock increase
ForThisWarehouse=For this warehouse
ReplenishmentStatusDesc=This is a list of all products with a stock lower than desired stock (or lower than alert value if checkbox "alert only" is checked). Using the checkbox, you can create supplier orders to fill the difference.
ReplenishmentOrdersDesc=This is a list of all opened supplier orders including predefined products. Only opened orders with predefined products, so orders that may affect stocks, are visible here.
ReplenishmentOrdersDesc=This is a list of all open supplier orders including predefined products. Only open orders with predefined products, so orders that may affect stocks, are visible here.
Replenishments=Replenishments
NbOfProductBeforePeriod=Quantity of product %s in stock before selected period (< %s)
NbOfProductAfterPeriod=Quantity of product %s in stock after selected period (> %s)
@ -143,4 +143,4 @@ ThisSerialAlreadyExistWithDifferentDate=This lot/serial number (<strong>%s</stro
OpenAll=Open for all actions
OpenInternal=Open for internal actions
OpenShipping=Open for shippings
OpenDispatch=Open for dispatch
OpenDispatch=Open for dispatch

View File

@ -7,7 +7,7 @@ CommRequests=Price requests
SearchRequest=Find a request
DraftRequests=Draft requests
SupplierProposalsDraft=Draft supplier proposals
LastModifiedRequests=Last %s modified price requests
LastModifiedRequests=Latest %s modified price requests
RequestsOpened=Open price requests
SupplierProposalArea=Supplier proposals area
SupplierProposalShort=Supplier proposal
@ -58,4 +58,4 @@ DefaultModelSupplierProposalToBill=Default template when closing a price request
DefaultModelSupplierProposalClosed=Default template when closing a price request (refused)
ListOfSupplierProposal=List of supplier proposal requests
SupplierProposalsToClose=Supplier proposals to close
SupplierProposalsToProcess=Supplier proposals to process
SupplierProposalsToProcess=Supplier proposals to process

View File

@ -48,7 +48,7 @@ AdministratorDescEntity=Administrator (for its company)
DefaultRights=Default permissions
DefaultRightsDesc=Define here <u>default</u> permissions that are automatically granted to a <u>new created</u> user (Go on user card to change permission of an existing user).
DolibarrUsers=Dolibarr users
LastName=Name
LastName=Last Name
FirstName=First name
ListOfGroups=List of groups
NewGroup=New group
@ -58,8 +58,8 @@ PasswordChangedAndSentTo=Password changed and sent to <b>%s</b>.
PasswordChangeRequestSent=Request to change password for <b>%s</b> sent to <b>%s</b>.
MenuUsersAndGroups=Users & Groups
MenuMyUserCard=My user card
LastGroupsCreated=Last %s created groups
LastUsersCreated=Last %s users created
LastGroupsCreated=Latest %s created groups
LastUsersCreated=Latest %s users created
ShowGroup=Show group
ShowUser=Show user
NonAffectedUsers=Non assigned users
@ -122,4 +122,4 @@ LoginUsingOpenID=Use OpenID to login
WeeklyHours=Weekly hours
ColorUser=Color of the user
DisabledInMonoUserMode=Disabled in maintenance mode
UserAccountancyCode=User accountancy code
UserAccountancyCode=User accountancy code

View File

@ -11,8 +11,8 @@ Withdrawal=Withdrawal
WithdrawalsReceipts=Withdrawal receipts
WithdrawalReceipt=Withdrawal receipt
WithdrawalReceiptShort=Receipt
LastWithdrawalReceipts=Last %s withdrawal receipts
WithdrawedBills=Withdrawn invoices
LastWithdrawalReceipts=Latest %s withdrawal receipts
WithdrawedBills=Withdrawal invoices
WithdrawalsLines=Withdrawal lines
RequestStandingOrderToTreat=Request for standing orders to process
RequestStandingOrderTreated=Request for standing orders processed
@ -29,7 +29,7 @@ ResponsibleUser=Responsible user
WithdrawalsSetup=Withdrawal setup
WithdrawStatistics=Withdraw's statistics
WithdrawRejectStatistics=Withdraw reject's statistics
LastWithdrawalReceipt=Last %s withdrawing receipts
LastWithdrawalReceipt=Latest %s withdrawal receipts
MakeWithdrawRequest=Make a withdraw request
ThirdPartyBankCode=Third party bank code
ThirdPartyDeskCode=Third party desk code

View File

@ -107,12 +107,19 @@ class MultiCurrency extends CommonObject
*/
public function create(User $user, $trigger = true)
{
global $conf;
global $conf,$langs;
dol_syslog('Currency::create', LOG_DEBUG);
$error = 0;
if (self::checkCodeAlreadyExists($this->code))
{
$error++;
$this->errors[] = $langs->trans('multicurrency_code_already_added');
return -1;
}
if (empty($this->entity) || $this->entity <= 0) $this->entity = $conf->entity;
$now=date('Y-m-d H:i:s');
@ -505,9 +512,10 @@ class MultiCurrency extends CommonObject
{
$sql = 'SELECT m.rowid, mc.rate FROM '.MAIN_DB_PREFIX.'multicurrency m';
$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'multicurrency_rate mc ON (m.rowid = mc.fk_multicurrency)';
// FIXME Is this comptible with SQL ?
$sql.= ' WHERE m.code = "'.$db->escape($code).'" AND mc.date_sync >= ALL (SELECT date_sync FROM '.MAIN_DB_PREFIX.'multicurrency_rate)';
$sql.= " AND m.entity IN '".getEntity('multicurrency', 1)."'";
$sql.= ' WHERE m.code = "'.$db->escape($code).'"';
$sql.= " AND m.entity IN (".getEntity('multicurrency', 1).")";
$sql.= ' ORDER BY mc.date_sync DESC LIMIT 1';
$resql = $db->query($sql);
if ($resql && $obj = $db->fetch_object($resql)) return array($obj->rowid, $obj->rate);
else return array(0, 1);
@ -616,6 +624,21 @@ class MultiCurrency extends CommonObject
}
}
}
/**
* Check in database if the current code already exists
*
* @param string $code current code to search
* @return true if exists, false if not exists
*/
public static function checkCodeAlreadyExists($code)
{
global $db;
$currency = new MultiCurrency($db);
if ($currency->fetch('', $code) > 0) return true;
else return false;
}
}
/**

View File

@ -1121,7 +1121,7 @@ else
else if ($object->id > 0)
{
// Fiche en mode edition
if ($action == 'edit' && ($user->rights->produit->creer || $user->rights->service->creer))
if ($action == 'edit' && ((($object->type == Product::TYPE_PRODUCT && $user->rights->produit->creer) || ($object->type == Product::TYPE_SERVICE && $user->rights->service->creer))))
{
//WYSIWYG Editor
require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
@ -1733,7 +1733,8 @@ if (empty($reshook))
{
if ($action == '' || $action == 'view')
{
if ($user->rights->produit->creer || $user->rights->service->creer)
if (($object->type == Product::TYPE_PRODUCT && $user->rights->produit->creer ) ||
($object->type == Product::TYPE_SERVICE && $user->rights->service->creer))
{
if (! isset($object->no_button_edit) || $object->no_button_edit <> 1) print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=edit&amp;id='.$object->id.'">'.$langs->trans("Modify").'</a></div>';

View File

@ -2666,7 +2666,7 @@ class Product extends CommonObject
$sql.= " WHERE fk_soc = ".$id_fourn;
$sql.= " AND ref_fourn = '".$this->db->escape($ref_fourn)."'";
$sql.= " AND fk_product != ".$this->id;
$sql.= " AND entity = ".$conf->entity;
$sql.= " AND entity IN (".getEntity('productprice', 1).")";
$resql=$this->db->query($sql);
if ($resql)
@ -2689,7 +2689,7 @@ class Product extends CommonObject
else $sql.= " AND (ref_fourn = '' OR ref_fourn IS NULL)";
$sql.= " AND quantity = '".$quantity."'";
$sql.= " AND fk_product = ".$this->id;
$sql.= " AND entity = ".$conf->entity;
$sql.= " AND entity IN (".getEntity('productprice', 1).")";
$resql=$this->db->query($sql);
if ($resql)

View File

@ -155,7 +155,7 @@ if (empty($reshook))
{
$error++;
$langs->load("errors");
setEventMessages($langs->trans("ErrorFieldMustBeANumeric",'eeee'), null, 'errors');
setEventMessages($langs->trans("ErrorFieldMustBeANumeric",$langs->transnoentities("VATRateForSupplierProduct")), null, 'errors');
}
if (empty($quantity))
{

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