Merge branch 'develop' into PDF_Ref_In_Title
This commit is contained in:
commit
fcdb4bfafb
24
.tx/config
24
.tx/config
@ -170,12 +170,6 @@ source_file = htdocs/langs/en_US/hrm.lang
|
||||
source_lang = en_US
|
||||
type = MOZILLAPROPERTIES
|
||||
|
||||
[dolibarr.intracommreport]
|
||||
file_filter = htdocs/langs/<lang>/intracommreport.lang
|
||||
source_file = htdocs/langs/en_US/intracommreport.lang
|
||||
source_lang = en_US
|
||||
type = MOZILLAPROPERTIES
|
||||
|
||||
[dolibarr.install]
|
||||
file_filter = htdocs/langs/<lang>/install.lang
|
||||
source_file = htdocs/langs/en_US/install.lang
|
||||
@ -188,6 +182,12 @@ source_file = htdocs/langs/en_US/interventions.lang
|
||||
source_lang = en_US
|
||||
type = MOZILLAPROPERTIES
|
||||
|
||||
[dolibarr.intracommreport]
|
||||
file_filter = htdocs/langs/<lang>/intracommreport.lang
|
||||
source_file = htdocs/langs/en_US/intracommreport.lang
|
||||
source_lang = en_US
|
||||
type = MOZILLAPROPERTIES
|
||||
|
||||
[dolibarr.knowledgemanagement]
|
||||
file_filter = htdocs/langs/<lang>/knowledgemanagement.lang
|
||||
source_file = htdocs/langs/en_US/knowledgemanagement.lang
|
||||
@ -392,18 +392,18 @@ source_file = htdocs/langs/en_US/stripe.lang
|
||||
source_lang = en_US
|
||||
type = MOZILLAPROPERTIES
|
||||
|
||||
[dolibarr.suppliers]
|
||||
file_filter = htdocs/langs/<lang>/suppliers.lang
|
||||
source_file = htdocs/langs/en_US/suppliers.lang
|
||||
source_lang = en_US
|
||||
type = MOZILLAPROPERTIES
|
||||
|
||||
[dolibarr.supplier_proposal]
|
||||
file_filter = htdocs/langs/<lang>/supplier_proposal.lang
|
||||
source_file = htdocs/langs/en_US/supplier_proposal.lang
|
||||
source_lang = en_US
|
||||
type = MOZILLAPROPERTIES
|
||||
|
||||
[dolibarr.suppliers]
|
||||
file_filter = htdocs/langs/<lang>/suppliers.lang
|
||||
source_file = htdocs/langs/en_US/suppliers.lang
|
||||
source_lang = en_US
|
||||
type = MOZILLAPROPERTIES
|
||||
|
||||
[dolibarr.ticket]
|
||||
file_filter = htdocs/langs/<lang>/ticket.lang
|
||||
source_file = htdocs/langs/en_US/ticket.lang
|
||||
|
||||
@ -50,6 +50,10 @@ then
|
||||
then
|
||||
aaupper="SA"
|
||||
fi
|
||||
if [ $bb = "IQ" ]
|
||||
then
|
||||
aaupper="SA"
|
||||
fi
|
||||
|
||||
bblower=`echo $dirshort | nawk -F"_" '{ print tolower($2) }'`
|
||||
|
||||
@ -57,23 +61,29 @@ then
|
||||
if [ "$aa" != "$bblower" -a "$dirshort" != "en_US" ]
|
||||
then
|
||||
reflang="htdocs/langs/"$aa"_"$aaupper
|
||||
if [ -d $reflang -a $aa"_"$bb != $aa"_"$aaupper ]
|
||||
echo $reflang" "$aa"_"$bb != $aa"_"$aaupper
|
||||
|
||||
# If $reflang is a main language to use to sanitize the alternative file
|
||||
if [ -d $reflang ]
|
||||
then
|
||||
echo "***** Search original into "$reflang
|
||||
echo $dirshort is an alternative language of $reflang
|
||||
echo ./dev/translation/strip_language_file.php $aa"_"$aaupper $aa"_"$bb $2
|
||||
./dev/translation/strip_language_file.php $aa"_"$aaupper $aa"_"$bb $2
|
||||
for fic in `ls htdocs/langs/${aa}_${bb}/*.delta`; do f=`echo $fic | sed -e 's/\.delta//'`; echo $f; mv $f.delta $f; done
|
||||
for fic in `ls htdocs/langs/${aa}_${bb}/*.lang`;
|
||||
do f=`cat $fic | wc -l`;
|
||||
#echo $f lines into file $fic;
|
||||
if [ $f = 1 ]
|
||||
then
|
||||
echo Only one line remainging into file $fic, we delete it;
|
||||
rm $fic
|
||||
fi;
|
||||
done
|
||||
fi
|
||||
if [ $aa"_"$bb != $aa"_"$aaupper ]
|
||||
then
|
||||
echo "***** Search original into "$reflang
|
||||
echo $dirshort is an alternative language of $reflang
|
||||
echo ./dev/translation/strip_language_file.php $aa"_"$aaupper $aa"_"$bb $2
|
||||
./dev/translation/strip_language_file.php $aa"_"$aaupper $aa"_"$bb $2
|
||||
for fic in `ls htdocs/langs/${aa}_${bb}/*.delta`; do f=`echo $fic | sed -e 's/\.delta//'`; echo $f; mv $f.delta $f; done
|
||||
for fic in `ls htdocs/langs/${aa}_${bb}/*.lang`;
|
||||
do f=`cat $fic | wc -l`;
|
||||
#echo $f lines into file $fic;
|
||||
if [ $f = 1 ]
|
||||
then
|
||||
echo Only one line remainging into file $fic, we delete it;
|
||||
rm $fic
|
||||
fi;
|
||||
done
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done;
|
||||
fi
|
||||
|
||||
@ -177,7 +177,7 @@ foreach ($filesToProcess as $fileToProcess) {
|
||||
|
||||
|
||||
// Start reading and parsing English
|
||||
|
||||
$aEnglish = array();
|
||||
if ($handle = fopen($lEnglishFile, 'r')) {
|
||||
print "Read English File $lEnglishFile:\n";
|
||||
$cnt = 0;
|
||||
@ -246,6 +246,9 @@ foreach ($filesToProcess as $fileToProcess) {
|
||||
|
||||
fwrite($oh, "# Dolibarr language file - Source file is en_US - ".(preg_replace('/\.lang$/', '', $fileToProcess))."\n");
|
||||
|
||||
$fileFirstFound = array();
|
||||
$lineFirstFound = array();
|
||||
|
||||
$cnt = 0;
|
||||
while (($line = fgets($handle)) !== false) {
|
||||
$cnt++;
|
||||
@ -299,6 +302,7 @@ foreach ($filesToProcess as $fileToProcess) {
|
||||
}
|
||||
|
||||
// String exists in both files and value into alternative language differs from main language but also from english files
|
||||
// so we keep it.
|
||||
if ((! empty($aSecondary[$key]) && $aSecondary[$key] != $aPrimary[$key]
|
||||
&& ! empty($aEnglish[$key]) && $aSecondary[$key] != $aEnglish[$key])
|
||||
|| in_array($key, $arrayofkeytoalwayskeep) || preg_match('/^FormatDate/', $key) || preg_match('/^FormatHour/', $key)
|
||||
|
||||
@ -257,7 +257,20 @@ if ($action == 'create') {
|
||||
print $form->textwithpicto($langs->trans("Pcgtype"), $langs->transnoentitiesnoconv("PcgtypeDesc"));
|
||||
print '</td>';
|
||||
print '<td>';
|
||||
print '<input type="text" name="pcg_type" value="'.dol_escape_htmltag(GETPOSTISSET('pcg_type') ? GETPOST('pcg_type', 'alpha') : $object->pcg_type).'">';
|
||||
print '<input type="text" name="pcg_type" list="pcg_type_datalist" value="'.dol_escape_htmltag(GETPOSTISSET('pcg_type') ? GETPOST('pcg_type', 'alpha') : $object->pcg_type).'">';
|
||||
// autosuggest from existing account types if found
|
||||
print '<datalist id="pcg_type_datalist">';
|
||||
$sql = 'SELECT DISTINCT pcg_type FROM ' . MAIN_DB_PREFIX . 'accounting_account';
|
||||
$sql .= ' WHERE fk_pcg_version = "' . $db->escape($accountsystem->ref) . '"';
|
||||
$sql .= ' AND entity in ('.getEntity('accounting_account', 0).')'; // Always limit to current entity. No sharing in accountancy.
|
||||
$sql .= ' LIMIT 50000'; // just as a sanity check
|
||||
$resql = $db->query($sql);
|
||||
if ($resql) {
|
||||
while ($obj = $db->fetch_object($resql)) {
|
||||
print '<option value="' . dol_escape_htmltag($obj->pcg_type) . '">';
|
||||
}
|
||||
}
|
||||
print '</datalist>';
|
||||
print '</td></tr>';
|
||||
|
||||
// Category
|
||||
@ -320,7 +333,20 @@ if ($action == 'create') {
|
||||
print $form->textwithpicto($langs->trans("Pcgtype"), $langs->transnoentitiesnoconv("PcgtypeDesc"));
|
||||
print '</td>';
|
||||
print '<td>';
|
||||
print '<input type="text" name="pcg_type" value="'.dol_escape_htmltag(GETPOSTISSET('pcg_type') ? GETPOST('pcg_type', 'alpha') : $object->pcg_type).'">';
|
||||
print '<input type="text" name="pcg_type" list="pcg_type_datalist" value="'.dol_escape_htmltag(GETPOSTISSET('pcg_type') ? GETPOST('pcg_type', 'alpha') : $object->pcg_type).'">';
|
||||
// autosuggest from existing account types if found
|
||||
print '<datalist id="pcg_type_datalist">';
|
||||
$sql = 'SELECT DISTINCT pcg_type FROM ' . MAIN_DB_PREFIX . 'accounting_account';
|
||||
$sql .= ' WHERE fk_pcg_version = "' . $db->escape($accountsystem->ref) . '"';
|
||||
$sql .= ' AND entity in ('.getEntity('accounting_account', 0).')'; // Always limit to current entity. No sharing in accountancy.
|
||||
$sql .= ' LIMIT 50000'; // just as a sanity check
|
||||
$resql = $db->query($sql);
|
||||
if ($resql) {
|
||||
while ($obj = $db->fetch_object($resql)) {
|
||||
print '<option value="' . dol_escape_htmltag($obj->pcg_type) . '">';
|
||||
}
|
||||
}
|
||||
print '</datalist>';
|
||||
print '</td></tr>';
|
||||
|
||||
// Category
|
||||
|
||||
@ -535,7 +535,7 @@ if (empty($reshook)) {
|
||||
$error++;
|
||||
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Type")), null, 'errors');
|
||||
}
|
||||
if ($conf->global->ADHERENT_MAIL_REQUIRED && !isValidEMail($email)) {
|
||||
if (!empty($conf->global->ADHERENT_MAIL_REQUIRED) && !isValidEMail($email)) {
|
||||
$error++;
|
||||
$langs->load("errors");
|
||||
setEventMessages($langs->trans("ErrorBadEMail", $email), null, 'errors');
|
||||
@ -1032,7 +1032,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) {
|
||||
print '</td></tr>';
|
||||
|
||||
// EMail
|
||||
print '<tr><td>'.($conf->global->ADHERENT_MAIL_REQUIRED ? '<span class="fieldrequired">' : '').$langs->trans("EMail").($conf->global->ADHERENT_MAIL_REQUIRED ? '</span>' : '').'</td>';
|
||||
print '<tr><td>'.(!empty($conf->global->ADHERENT_MAIL_REQUIRED) ? '<span class="fieldrequired">' : '').$langs->trans("EMail").(!empty($conf->global->ADHERENT_MAIL_REQUIRED) ? '</span>' : '').'</td>';
|
||||
print '<td>'.img_picto('', 'object_email').' <input type="text" name="member_email" class="minwidth300" maxlength="255" value="'.(GETPOSTISSET('member_email') ? GETPOST('member_email', 'alpha') : $object->email).'"></td></tr>';
|
||||
|
||||
// Website
|
||||
|
||||
@ -381,12 +381,12 @@ if ($action == 'create') {
|
||||
|
||||
print '<tr><td class="tdtop">'.$langs->trans("Description").'</td><td>';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
|
||||
$doleditor = new DolEditor('comment', $object->note, '', 200, 'dolibarr_notes', '', false, true, $conf->fckeditor->enabled, 15, '90%');
|
||||
$doleditor = new DolEditor('comment', $object->note, '', 200, 'dolibarr_notes', '', false, true, empty($conf->fckeditor->enabled) ? false : $conf->fckeditor->enabled, 15, '90%');
|
||||
$doleditor->Create();
|
||||
|
||||
print '<tr><td class="tdtop">'.$langs->trans("WelcomeEMail").'</td><td>';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
|
||||
$doleditor = new DolEditor('mail_valid', $object->mail_valid, '', 250, 'dolibarr_notes', '', false, true, $conf->fckeditor->enabled, 15, '90%');
|
||||
$doleditor = new DolEditor('mail_valid', $object->mail_valid, '', 250, 'dolibarr_notes', '', false, true, empty($conf->fckeditor->enabled) ? false : $conf->fckeditor->enabled, 15, '90%');
|
||||
$doleditor->Create();
|
||||
print '</td></tr>';
|
||||
|
||||
@ -814,12 +814,12 @@ if ($rowid > 0) {
|
||||
|
||||
print '<tr><td class="tdtop">'.$langs->trans("Description").'</td><td>';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
|
||||
$doleditor = new DolEditor('comment', $object->note, '', 280, 'dolibarr_notes', '', false, true, $conf->fckeditor->enabled, 15, '90%');
|
||||
$doleditor = new DolEditor('comment', $object->note, '', 280, 'dolibarr_notes', '', false, true, empty($conf->fckeditor->enabled) ? false : $conf->fckeditor->enabled, 15, '90%');
|
||||
$doleditor->Create();
|
||||
print "</td></tr>";
|
||||
|
||||
print '<tr><td class="tdtop">'.$langs->trans("WelcomeEMail").'</td><td>';
|
||||
$doleditor = new DolEditor('mail_valid', $object->mail_valid, '', 280, 'dolibarr_notes', '', false, true, $conf->fckeditor->enabled, 15, '90%');
|
||||
$doleditor = new DolEditor('mail_valid', $object->mail_valid, '', 280, 'dolibarr_notes', '', false, true, empty($conf->fckeditor->enabled) ? false : $conf->fckeditor->enabled, 15, '90%');
|
||||
$doleditor->Create();
|
||||
print "</td></tr>";
|
||||
|
||||
|
||||
@ -65,6 +65,9 @@ if ($action == 'update') {
|
||||
if (GETPOSTISSET('MAIN_PROFID5_IN_ADDRESS')) dolibarr_set_const($db, "MAIN_PROFID5_IN_ADDRESS", GETPOST("MAIN_PROFID5_IN_ADDRESS"), 'chaine', 0, '', $conf->entity);
|
||||
if (GETPOSTISSET('MAIN_PROFID6_IN_ADDRESS')) dolibarr_set_const($db, "MAIN_PROFID6_IN_ADDRESS", GETPOST("MAIN_PROFID6_IN_ADDRESS"), 'chaine', 0, '', $conf->entity);
|
||||
|
||||
if (GETPOSTISSET('MAIN_PDF_NO_SENDER_FRAME')) dolibarr_set_const($db, "MAIN_PDF_NO_SENDER_FRAME", GETPOST("MAIN_PDF_NO_SENDER_FRAME"), 'chaine', 0, '', $conf->entity);
|
||||
if (GETPOSTISSET('MAIN_PDF_NO_RECIPENT_FRAME')) dolibarr_set_const($db, "MAIN_PDF_NO_RECIPENT_FRAME", GETPOST("MAIN_PDF_NO_RECIPENT_FRAME"), 'chaine', 0, '', $conf->entity);
|
||||
|
||||
if (GETPOSTISSET('MAIN_PDF_HIDE_SENDER_NAME')) dolibarr_set_const($db, "MAIN_PDF_HIDE_SENDER_NAME", GETPOST("MAIN_PDF_HIDE_SENDER_NAME"), 'chaine', 0, '', $conf->entity);
|
||||
|
||||
if (GETPOSTISSET('MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT')) dolibarr_set_const($db, "MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT", GETPOST("MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT"), 'chaine', 0, '', $conf->entity);
|
||||
@ -90,9 +93,10 @@ if ($action == 'update') {
|
||||
|
||||
if (GETPOSTISSET('MAIN_DOCUMENTS_LOGO_HEIGHT')) dolibarr_set_const($db, "MAIN_DOCUMENTS_LOGO_HEIGHT", GETPOST("MAIN_DOCUMENTS_LOGO_HEIGHT", 'int'), 'chaine', 0, '', $conf->entity);
|
||||
if (GETPOSTISSET('MAIN_INVERT_SENDER_RECIPIENT')) dolibarr_set_const($db, "MAIN_INVERT_SENDER_RECIPIENT", GETPOST("MAIN_INVERT_SENDER_RECIPIENT"), 'chaine', 0, '', $conf->entity);
|
||||
if (GETPOSTISSET('MAIN_PDF_REF_IN_TITLE')) dolibarr_set_const($db, "MAIN_PDF_REF_IN_TITLE", GETPOST("MAIN_PDF_REF_IN_TITLE"), 'chaine', 0, '', $conf->entity);
|
||||
|
||||
if (GETPOSTISSET('MAIN_PDF_USE_ISO_LOCATION')) dolibarr_set_const($db, "MAIN_PDF_USE_ISO_LOCATION", GETPOST("MAIN_PDF_USE_ISO_LOCATION"), 'chaine', 0, '', $conf->entity);
|
||||
if (GETPOSTISSET('MAIN_PDF_NO_CUSTOMER_CODE')) dolibarr_set_const($db, "MAIN_PDF_NO_CUSTOMER_CODE", GETPOST("MAIN_PDF_NO_CUSTOMER_CODE"), 'chaine', 0, '', $conf->entity);
|
||||
|
||||
if (GETPOSTISSET('MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS')) dolibarr_set_const($db, "MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS", GETPOST("MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS"), 'chaine', 0, '', $conf->entity);
|
||||
|
||||
if (GETPOSTISSET('MAIN_PDF_MAIN_HIDE_SECOND_TAX')) dolibarr_set_const($db, "MAIN_PDF_MAIN_HIDE_SECOND_TAX", GETPOST("MAIN_PDF_MAIN_HIDE_SECOND_TAX"), 'chaine', 0, '', $conf->entity);
|
||||
@ -257,6 +261,25 @@ for ($i = 1; $i <= 6; $i++) {
|
||||
}
|
||||
}
|
||||
|
||||
// Borders on address frame
|
||||
|
||||
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_PDF_NO_SENDER_FRAME").'</td><td>';
|
||||
if ($conf->use_javascript_ajax) {
|
||||
print ajax_constantonoff('MAIN_PDF_NO_SENDER_FRAME');
|
||||
} else {
|
||||
$arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
|
||||
print $form->selectarray("MAIN_PDF_NO_SENDER_FRAME", $arrval, $conf->global->MAIN_PDF_NO_SENDER_FRAME);
|
||||
}
|
||||
print '</td></tr>';
|
||||
|
||||
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_PDF_NO_RECIPENT_FRAME").'</td><td>';
|
||||
if ($conf->use_javascript_ajax) {
|
||||
print ajax_constantonoff('MAIN_PDF_NO_RECIPENT_FRAME');
|
||||
} else {
|
||||
$arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
|
||||
print $form->selectarray("MAIN_PDF_NO_RECIPENT_FRAME", $arrval, $conf->global->MAIN_PDF_NO_RECIPENT_FRAME);
|
||||
}
|
||||
|
||||
// Show sender name
|
||||
|
||||
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_PDF_HIDE_SENDER_NAME").'</td><td>';
|
||||
@ -266,6 +289,27 @@ if ($conf->use_javascript_ajax) {
|
||||
print $form->selectyesno('MAIN_PDF_HIDE_SENDER_NAME', (!empty($conf->global->MAIN_PDF_HIDE_SENDER_NAME)) ? $conf->global->MAIN_PDF_HIDE_SENDER_NAME : 0, 1);
|
||||
}
|
||||
print '</td></tr>';
|
||||
|
||||
//Invert sender and recipient
|
||||
|
||||
print '<tr class="oddeven"><td>'.$langs->trans("SwapSenderAndRecipientOnPDF").'</td><td>';
|
||||
if ($conf->use_javascript_ajax) {
|
||||
print ajax_constantonoff('MAIN_INVERT_SENDER_RECIPIENT');
|
||||
} else {
|
||||
print $form->selectyesno('MAIN_INVERT_SENDER_RECIPIENT', (!empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT)) ? $conf->global->MAIN_INVERT_SENDER_RECIPIENT : 0, 1);
|
||||
}
|
||||
print '</td></tr>';
|
||||
|
||||
// Place customer adress to the ISO location
|
||||
|
||||
print '<tr class="oddeven"><td>'.$langs->trans("PlaceCustomerAddressToIsoLocation").'</td><td>';
|
||||
if ($conf->use_javascript_ajax) {
|
||||
print ajax_constantonoff('MAIN_PDF_USE_ISO_LOCATION');
|
||||
} else {
|
||||
print $form->selectyesno('MAIN_PDF_USE_ISO_LOCATION', (!empty($conf->global->MAIN_PDF_USE_ISO_LOCATION)) ? $conf->global->MAIN_PDF_USE_ISO_LOCATION : 0, 1);
|
||||
}
|
||||
print '</td></tr>';
|
||||
|
||||
print '</table>';
|
||||
print '</div>';
|
||||
|
||||
@ -336,14 +380,24 @@ print '<div class="div-table-responsive-no-min">';
|
||||
print '<table summary="more" class="noborder centpercent">';
|
||||
print '<tr class="liste_titre"><td>'.$langs->trans("Parameter").'</td><td width="200px">'.$langs->trans("Value").'</td></tr>';
|
||||
|
||||
// Height of logo
|
||||
// Use 2 languages into PDF
|
||||
|
||||
print '<tr class="oddeven"><td>'.$langs->trans("PDF_USE_ALSO_LANGUAGE_CODE").'</td><td>';
|
||||
//if (! empty($conf->global->MAIN_MULTILANGS))
|
||||
//{
|
||||
$selected = GETPOSTISSET('PDF_USE_ALSO_LANGUAGE_CODE') ? GETPOST('PDF_USE_ALSO_LANGUAGE_CODE') : (!empty($conf->global->PDF_USE_ALSO_LANGUAGE_CODE) ? $conf->global->PDF_USE_ALSO_LANGUAGE_CODE : 0);
|
||||
print $formadmin->select_language($selected, 'PDF_USE_ALSO_LANGUAGE_CODE', 0, null, 1);
|
||||
//} else {
|
||||
// print '<span class="opacitymedium">'.$langs->trans("MultiLangNotEnabled").'</span>';
|
||||
//}
|
||||
print '</td></tr>';
|
||||
|
||||
// Height of logo
|
||||
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_DOCUMENTS_LOGO_HEIGHT").'</td><td>';
|
||||
print '<input type="text" class="maxwidth50" name="MAIN_DOCUMENTS_LOGO_HEIGHT" value="'.(!empty($conf->global->MAIN_DOCUMENTS_LOGO_HEIGHT) ? $conf->global->MAIN_DOCUMENTS_LOGO_HEIGHT : 20).'">';
|
||||
print '</td></tr>';
|
||||
|
||||
// Show project
|
||||
|
||||
if (!empty($conf->projet->enabled)) {
|
||||
print '<tr class="oddeven"><td>'.$langs->trans("PDF_SHOW_PROJECT").'</td><td>';
|
||||
$tmparray = array('no' => 'No', 'showprojectref' => 'RefProject', 'showprojectlabel' => 'ShowProjectLabel');
|
||||
@ -352,25 +406,15 @@ if (!empty($conf->projet->enabled)) {
|
||||
print '</td></tr>';
|
||||
}
|
||||
|
||||
//Invert sender and recipient
|
||||
//
|
||||
|
||||
print '<tr class="oddeven"><td>'.$langs->trans("SwapSenderAndRecipientOnPDF").'</td><td>';
|
||||
if ($conf->use_javascript_ajax) {
|
||||
print ajax_constantonoff('MAIN_INVERT_SENDER_RECIPIENT');
|
||||
} else {
|
||||
print $form->selectyesno('MAIN_INVERT_SENDER_RECIPIENT', (!empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT)) ? $conf->global->MAIN_INVERT_SENDER_RECIPIENT : 0, 1);
|
||||
}
|
||||
print '</td></tr>';
|
||||
|
||||
// Document ref in title
|
||||
|
||||
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_PDF_REF_IN_TITLE");
|
||||
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_PDF_HIDE_CUSTOMER_CODE");
|
||||
print '</td><td>';
|
||||
if ($conf->use_javascript_ajax) {
|
||||
print ajax_constantonoff('MAIN_PDF_REF_IN_TITLE');
|
||||
print ajax_constantonoff('MAIN_PDF_HIDE_CUSTOMER_CODE');
|
||||
} else {
|
||||
$arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
|
||||
print $form->selectarray("MAIN_PDF_REF_IN_TITLE", $arrval, $conf->global->MAIN_PDF_REF_IN_TITLE);
|
||||
print $form->selectarray("MAIN_PDF_HIDE_CUSTOMER_CODE", $arrval, $conf->global->MAIN_PDF_HIDE_CUSTOMER_CODE);
|
||||
}
|
||||
print '</td></tr>';
|
||||
|
||||
|
||||
@ -113,26 +113,6 @@ if ($conf->use_javascript_ajax) {
|
||||
}
|
||||
print '</td></tr>';
|
||||
|
||||
print '<tr class="oddeven"><td>'.$langs->trans("PROPOSAL_PDF_HIDE_PAYMENTTERM");
|
||||
print '</td><td>';
|
||||
if ($conf->use_javascript_ajax) {
|
||||
print ajax_constantonoff('PROPOSAL_PDF_HIDE_PAYMENTTERM');
|
||||
} else {
|
||||
$arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
|
||||
print $form->selectarray("PROPOSAL_PDF_HIDE_PAYMENTTERM", $arrval, $conf->global->PROPOSAL_PDF_HIDE_PAYMENTTERM);
|
||||
}
|
||||
print '</td></tr>';
|
||||
|
||||
print '<tr class="oddeven"><td>'.$langs->trans("PROPOSAL_PDF_HIDE_PAYMENTMODE");
|
||||
print '</td><td>';
|
||||
if ($conf->use_javascript_ajax) {
|
||||
print ajax_constantonoff('PROPOSAL_PDF_HIDE_PAYMENTMODE');
|
||||
} else {
|
||||
$arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
|
||||
print $form->selectarray("PROPOSAL_PDF_HIDE_PAYMENTMODE", $arrval, $conf->global->PROPOSAL_PDF_HIDE_PAYMENTMODE);
|
||||
}
|
||||
print '</td></tr>';
|
||||
|
||||
/*
|
||||
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING").'</td><td>';
|
||||
if ($conf->use_javascript_ajax) {
|
||||
|
||||
@ -79,7 +79,10 @@ $form = new Form($db);
|
||||
$block_static = new BlockedLog($db);
|
||||
$block_static->loadTrackedEvents();
|
||||
|
||||
llxHeader('', $langs->trans("BlockedLogSetup"));
|
||||
$title = $langs->trans("BlockedLogSetup");
|
||||
$help_url="EN:Module_Unalterable_Archives_-_Logs|FR:Module_Archives_-_Logs_Inaltérable";
|
||||
|
||||
llxHeader('', $title, $help_url);
|
||||
|
||||
$linkback = '';
|
||||
if ($withtab) {
|
||||
|
||||
@ -275,8 +275,9 @@ if (GETPOST('withtab', 'alpha')) {
|
||||
} else {
|
||||
$title = $langs->trans("BrowseBlockedLog");
|
||||
}
|
||||
$help_url="EN:Module_Unalterable_Archives_-_Logs|FR:Module_Archives_-_Logs_Inaltérable";
|
||||
|
||||
llxHeader('', $langs->trans("BrowseBlockedLog"));
|
||||
llxHeader('', $title, $help_url);
|
||||
|
||||
$MAXLINES = 10000;
|
||||
|
||||
|
||||
@ -525,6 +525,7 @@ $viewmode .= '<span class="marginrightonly"></span>'; // To add a space before t
|
||||
|
||||
|
||||
$newcardbutton = '';
|
||||
$newparam = '';
|
||||
if ($user->rights->agenda->myactions->create || $user->rights->agenda->allactions->create) {
|
||||
$tmpforcreatebutton = dol_getdate(dol_now(), true);
|
||||
|
||||
|
||||
@ -67,6 +67,8 @@ $socid = 0;
|
||||
if ($user->socid) {
|
||||
$socid = $user->socid;
|
||||
}
|
||||
|
||||
$allowed = 0;
|
||||
if (!empty($user->rights->accounting->chartofaccount)) {
|
||||
$allowed = 1; // Dictionary with list of banks accounting account allowed to manager of chart account
|
||||
}
|
||||
@ -191,7 +193,7 @@ $parameters = array();
|
||||
$reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook
|
||||
$sql .= $hookmanager->resPrint;
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."bank_account as b";
|
||||
if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) {
|
||||
if (!empty($extrafields->attributes[$object->table_element]['label']) && is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) {
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (b.rowid = ef.fk_object)";
|
||||
}
|
||||
|
||||
@ -333,12 +335,12 @@ $objecttmp = new Account($db);
|
||||
$trackid = 'bank'.$object->id;
|
||||
include DOL_DOCUMENT_ROOT.'/core/tpl/massactions_pre.tpl.php';
|
||||
|
||||
if ($sall) {
|
||||
foreach ($fieldstosearchall as $key => $val) {
|
||||
$fieldstosearchall[$key] = $langs->trans($val);
|
||||
}
|
||||
print '<div class="divsearchfieldfilter">'.$langs->trans("FilterOnInto", $sall).join(', ', $fieldstosearchall).'</div>';
|
||||
}
|
||||
//if ($sall) {
|
||||
// foreach ($fieldstosearchall as $key => $val) {
|
||||
// $fieldstosearchall[$key] = $langs->trans($val);
|
||||
// }
|
||||
// print '<div class="divsearchfieldfilter">'.$langs->trans("FilterOnInto", $sall).join(', ', $fieldstosearchall).'</div>';
|
||||
//}
|
||||
|
||||
$moreforfilter = '';
|
||||
|
||||
|
||||
@ -376,13 +376,64 @@ if (empty($reshook)) {
|
||||
include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php';
|
||||
}
|
||||
|
||||
if ($massaction == 'makepayment_confirm') {
|
||||
if ($action == 'makepayment_confirm' && $user->rights->facture->paiement) {
|
||||
require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php';
|
||||
$arrayofselected = is_array($toselect) ? $toselect : array();
|
||||
|
||||
$loc = dol_buildpath('/compta/paiement.php', 2).'?action=create&facids='.implode(',', $arrayofselected);
|
||||
|
||||
header('Location: '.$loc);
|
||||
exit;
|
||||
if (!empty($arrayofselected)) {
|
||||
$bankid=GETPOST('bankid', 'int');
|
||||
$paiementid=GETPOST('paiementid', 'int');
|
||||
$paiementdate=dol_mktime(12, 0, 0, GETPOST('datepaimentmonth', 'int'), GETPOST('datepaimentday', 'int'), GETPOST('datepaimentyear', 'year'));
|
||||
foreach ($arrayofselected as $toselectid) {
|
||||
$errorpayment=0;
|
||||
$facture = new Facture($db);
|
||||
$result = $facture->fetch($toselectid);
|
||||
if ($result < 0) {
|
||||
setEventMessage($facture->error, 'errors');
|
||||
$errorpayment++;
|
||||
} else {
|
||||
if ($facture->type != Facture::TYPE_CREDIT_NOTE && $facture->statut == 1 && $facture->paye == 0) {
|
||||
$paiementAmount = $facture->getSommePaiement();
|
||||
$totalcreditnotes = $facture->getSumCreditNotesUsed();
|
||||
$totaldeposits = $facture->getSumDepositsUsed();
|
||||
$totalpay = $paiementAmount + $totalcreditnotes + $totaldeposits;
|
||||
$remaintopay = price2num($facture->total_ttc - $totalpay);
|
||||
if ($remaintopay!=0) {
|
||||
$resultBank = $facture->setBankAccount($bankid);
|
||||
if ($resultBank < 0) {
|
||||
setEventMessage($facture->error, 'errors');
|
||||
$errorpayment++;
|
||||
} else {
|
||||
$paiement = new Paiement($db);
|
||||
$paiement->datepaye = $paiementdate;
|
||||
$paiement->amounts[$facture->id] = $remaintopay; // Array with all payments dispatching with invoice id
|
||||
$paiement->multicurrency_amounts[$facture->id] = $remaintopay;
|
||||
$paiement->paiementid = $paiementid;
|
||||
$paiement_id = $paiement->create($user, 1, $facture->thirdparty);
|
||||
if ($paiement_id < 0) {
|
||||
setEventMessage($facture->ref . ' ' . $paiement->error, 'errors');
|
||||
$errorpayment++;
|
||||
} else {
|
||||
$result = $paiement->addPaymentToBank($user, 'payment', '', $bankid, '', '');
|
||||
if ($result < 0) {
|
||||
setEventMessages($facture->ref . ' ' . $paiement->error, $paiement->errors, 'errors');
|
||||
$errorpayment++;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
setEventMessage($langs->trans('NoPaymentAvailable', $facture->ref), 'warnings');
|
||||
$errorpayment++;
|
||||
}
|
||||
} else {
|
||||
setEventMessage($langs->trans('NoPaymentAvailable', $facture->ref), 'warnings');
|
||||
$errorpayment++;
|
||||
}
|
||||
}
|
||||
if (empty($errorpayment)) {
|
||||
setEventMessage($langs->trans('RegisterPaymentAndClasiffiedPayedDone', $facture->ref));
|
||||
}
|
||||
}
|
||||
}
|
||||
} elseif ($massaction == 'withdrawrequest') {
|
||||
$langs->load("withdrawals");
|
||||
|
||||
@ -972,8 +1023,10 @@ if ($resql) {
|
||||
'generate_doc'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("ReGeneratePDF"),
|
||||
'builddoc'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("PDFMerge"),
|
||||
'presend'=>img_picto('', 'email', 'class="pictofixedwidth"').$langs->trans("SendByMail"),
|
||||
//'makepayment'=>$langs->trans("InvoicePaymentsLimits"),
|
||||
);
|
||||
if ($user->rights->facture->paiement) {
|
||||
$arrayofmassactions['makepayment'] = $langs->trans("RegisterPaymentAndClasiffiedPayed");
|
||||
}
|
||||
if ($conf->prelevement->enabled && !empty($user->rights->prelevement->bons->creer)) {
|
||||
$langs->load("withdrawals");
|
||||
$arrayofmassactions['withdrawrequest'] = img_picto('', 'payment', 'class="pictofixedwidth"').$langs->trans("MakeWithdrawRequest");
|
||||
@ -985,7 +1038,7 @@ if ($resql) {
|
||||
$arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete");
|
||||
}
|
||||
}
|
||||
if (in_array($massaction, array('presend', 'predelete'))) {
|
||||
if (in_array($massaction, array('presend', 'predelete' ,'makepayment'))) {
|
||||
$arrayofmassactions = array();
|
||||
}
|
||||
$massactionbutton = $form->selectMassAction('', $arrayofmassactions);
|
||||
@ -1007,7 +1060,9 @@ if ($resql) {
|
||||
}
|
||||
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||
print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
|
||||
print '<input type="hidden" name="action" value="list">';
|
||||
if (!in_array($massaction, array('makepayment'))) {
|
||||
print '<input type="hidden" name="action" value="list">';
|
||||
}
|
||||
print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
|
||||
print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
|
||||
print '<input type="hidden" name="search_status" value="'.$search_status.'">';
|
||||
@ -1021,6 +1076,21 @@ if ($resql) {
|
||||
$trackid = 'inv'.$object->id;
|
||||
include DOL_DOCUMENT_ROOT.'/core/tpl/massactions_pre.tpl.php';
|
||||
|
||||
if ($massaction=='makepayment') {
|
||||
$formconfirm = '';
|
||||
$formquestion = array(
|
||||
// 'text' => $langs->trans("ConfirmClone"),
|
||||
// array('type' => 'checkbox', 'name' => 'clone_content', 'label' => $langs->trans("CloneMainAttributes"), 'value' => 1),
|
||||
// array('type' => 'checkbox', 'name' => 'update_prices', 'label' => $langs->trans("PuttingPricesUpToDate"), 'value' => 1),
|
||||
array('type' => 'date', 'name' => 'datepaiment', 'label' => $langs->trans("Date")),
|
||||
array('type' => 'other', 'name' => 'paiementid', 'label' => $langs->trans("PaymentMode"), 'value' => $form->select_types_paiements(GETPOST('search_paymentmode'), 'paiementid', '', 0, 0, 1, 0, 1, '', 1)),
|
||||
array('type' => 'other', 'name' => 'bankid', 'label' => $langs->trans("BankAccount"), 'value'=>$form->select_comptes('', 'bankid', 0, '', 0, '', 0, '', 1)),
|
||||
//array('type' => 'other', 'name' => 'invoicesid', 'label' => '', 'value'=>'<input type="hidden" id="invoicesid" name="invoicesid" value="'.implode('#',GETPOST('toselect','array')).'">'),
|
||||
);
|
||||
$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans('RegisterPaymentAndClasiffiedPayed'), $langs->trans('RegisterPaymentAndClasiffiedPayed', $object->ref), 'makepayment_confirm', $formquestion, 1, 0, 200, 500, 1);
|
||||
print $formconfirm;
|
||||
}
|
||||
|
||||
if ($sall) {
|
||||
foreach ($fieldstosearchall as $key => $val) {
|
||||
$fieldstosearchall[$key] = $langs->trans($val);
|
||||
|
||||
@ -53,11 +53,11 @@ if ($action == 'add' && !empty($permissiontoadd)) {
|
||||
foreach ($object->fields as $key => $val) {
|
||||
if ($object->fields[$key]['type'] == 'duration') {
|
||||
if (GETPOST($key.'hour') == '' && GETPOST($key.'min') == '') {
|
||||
continue; // The field was not submited to be edited
|
||||
continue; // The field was not submited to be saved
|
||||
}
|
||||
} else {
|
||||
if (!GETPOSTISSET($key)) {
|
||||
continue; // The field was not submited to be edited
|
||||
continue; // The field was not submited to be saved
|
||||
}
|
||||
}
|
||||
// Ignore special fields
|
||||
@ -87,7 +87,11 @@ if ($action == 'add' && !empty($permissiontoadd)) {
|
||||
$tmparraykey = array_keys($object->param_list);
|
||||
$value = $tmparraykey[GETPOST($key)].','.GETPOST($key.'2');
|
||||
} else {
|
||||
$value = GETPOST($key, 'alphanohtml');
|
||||
if ($key == 'lang') {
|
||||
$value = GETPOST($key, 'aZ09');
|
||||
} else {
|
||||
$value = GETPOST($key, 'alphanohtml');
|
||||
}
|
||||
}
|
||||
if (preg_match('/^integer:/i', $object->fields[$key]['type']) && $value == '-1') {
|
||||
$value = ''; // This is an implicit foreign key field
|
||||
@ -105,6 +109,15 @@ if ($action == 'add' && !empty($permissiontoadd)) {
|
||||
$error++;
|
||||
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv($val['label'])), null, 'errors');
|
||||
}
|
||||
|
||||
// Validation of fields values
|
||||
if ($conf->global->MAIN_FEATURE_LEVEL >= 2 || !empty($conf->global->MAIN_ACTIVATE_VALIDATION_RESULT)) {
|
||||
if (!$error && !empty($val['validate']) && is_callable(array($object, 'validateField'))) {
|
||||
if (!$object->validateField($object->fields, $key, $value)) {
|
||||
$error++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Fill array 'array_options' with data from add form
|
||||
@ -143,7 +156,7 @@ if ($action == 'update' && !empty($permissiontoadd)) {
|
||||
// Check if field was submited to be edited
|
||||
if ($object->fields[$key]['type'] == 'duration') {
|
||||
if (!GETPOSTISSET($key.'hour') || !GETPOSTISSET($key.'min')) {
|
||||
continue; // The field was not submited to be edited
|
||||
continue; // The field was not submited to be saved
|
||||
}
|
||||
} elseif ($object->fields[$key]['type'] == 'boolean') {
|
||||
if (!GETPOSTISSET($key)) {
|
||||
@ -152,7 +165,7 @@ if ($action == 'update' && !empty($permissiontoadd)) {
|
||||
}
|
||||
} else {
|
||||
if (!GETPOSTISSET($key)) {
|
||||
continue; // The field was not submited to be edited
|
||||
continue; // The field was not submited to be saved
|
||||
}
|
||||
}
|
||||
// Ignore special fields
|
||||
@ -161,7 +174,7 @@ if ($action == 'update' && !empty($permissiontoadd)) {
|
||||
}
|
||||
if (in_array($key, array('date_creation', 'tms', 'fk_user_creat', 'fk_user_modif'))) {
|
||||
if (!in_array(abs($val['visible']), array(1, 3, 4))) {
|
||||
continue; // Only 1 and 3 and 4 that are case to update
|
||||
continue; // Only 1 and 3 and 4, that are cases to update
|
||||
}
|
||||
}
|
||||
|
||||
@ -190,7 +203,11 @@ if ($action == 'update' && !empty($permissiontoadd)) {
|
||||
} elseif ($object->fields[$key]['type'] == 'reference') {
|
||||
$value = array_keys($object->param_list)[GETPOST($key)].','.GETPOST($key.'2');
|
||||
} else {
|
||||
$value = GETPOST($key, 'alpha');
|
||||
if ($key == 'lang') {
|
||||
$value = GETPOST($key, 'aZ09');
|
||||
} else {
|
||||
$value = GETPOST($key, 'alphanohtml');
|
||||
}
|
||||
}
|
||||
if (preg_match('/^integer:/i', $object->fields[$key]['type']) && $value == '-1') {
|
||||
$value = ''; // This is an implicit foreign key field
|
||||
@ -204,6 +221,15 @@ if ($action == 'update' && !empty($permissiontoadd)) {
|
||||
$error++;
|
||||
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv($val['label'])), null, 'errors');
|
||||
}
|
||||
|
||||
// Validation of fields values
|
||||
if ($conf->global->MAIN_FEATURE_LEVEL >= 2 || !empty($conf->global->MAIN_ACTIVATE_VALIDATION_RESULT)) {
|
||||
if (!$error && !empty($val['validate']) && is_callable(array($object, 'validateField'))) {
|
||||
if (!$object->validateField($object->fields, $key, $value)) {
|
||||
$error++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Fill array 'array_options' with data from add form
|
||||
@ -273,6 +299,8 @@ if ($action == 'confirm_delete' && !empty($permissiontodelete)) {
|
||||
setEventMessages($object->error, null, 'errors');
|
||||
}
|
||||
}
|
||||
|
||||
$action = '';
|
||||
}
|
||||
|
||||
// Remove a line
|
||||
@ -304,11 +332,13 @@ if ($action == 'confirm_deleteline' && $confirm == 'yes' && !empty($permissionto
|
||||
}
|
||||
|
||||
setEventMessages($langs->trans('RecordDeleted'), null, 'mesgs');
|
||||
|
||||
header('Location: '.$_SERVER["PHP_SELF"].'?id='.$object->id);
|
||||
exit;
|
||||
} else {
|
||||
setEventMessages($object->error, $object->errors, 'errors');
|
||||
}
|
||||
$action = '';
|
||||
}
|
||||
|
||||
// Action validate object
|
||||
@ -344,6 +374,7 @@ if ($action == 'confirm_validate' && $confirm == 'yes' && $permissiontoadd) {
|
||||
} else {
|
||||
setEventMessages($object->error, $object->errors, 'errors');
|
||||
}
|
||||
$action = '';
|
||||
}
|
||||
|
||||
// Action close object
|
||||
@ -374,6 +405,7 @@ if ($action == 'confirm_close' && $confirm == 'yes' && $permissiontoadd) {
|
||||
} else {
|
||||
setEventMessages($object->error, $object->errors, 'errors');
|
||||
}
|
||||
$action = '';
|
||||
}
|
||||
|
||||
// Action setdraft object
|
||||
@ -384,6 +416,7 @@ if ($action == 'confirm_setdraft' && $confirm == 'yes' && $permissiontoadd) {
|
||||
} else {
|
||||
setEventMessages($object->error, $object->errors, 'errors');
|
||||
}
|
||||
$action = '';
|
||||
}
|
||||
|
||||
// Action reopen object
|
||||
@ -414,6 +447,7 @@ if ($action == 'confirm_reopen' && $confirm == 'yes' && $permissiontoadd) {
|
||||
} else {
|
||||
setEventMessages($object->error, $object->errors, 'errors');
|
||||
}
|
||||
$action = '';
|
||||
}
|
||||
|
||||
// Action clone object
|
||||
@ -432,6 +466,7 @@ if ($action == 'confirm_clone' && $confirm == 'yes' && !empty($permissiontoadd))
|
||||
} else {
|
||||
$newid = $result;
|
||||
}
|
||||
|
||||
header("Location: ".$_SERVER['PHP_SELF'].'?id='.$newid); // Open record of new object
|
||||
exit;
|
||||
} else {
|
||||
|
||||
@ -1544,6 +1544,126 @@ if (!$error && ($massaction == 'disable' || ($action == 'disable' && $confirm ==
|
||||
}
|
||||
}
|
||||
|
||||
if (!$error && ($massaction == 'approveleave' || ($action == 'approveleave' && $confirm == 'yes')) && $permissiontoapprove) {
|
||||
$db->begin();
|
||||
|
||||
$objecttmp = new $objectclass($db);
|
||||
$nbok = 0;
|
||||
foreach ($toselect as $toselectid) {
|
||||
$result = $objecttmp->fetch($toselectid);
|
||||
if ($result>0) {
|
||||
if ($objecttmp->statut == Holiday::STATUS_VALIDATED && $user->id == $objecttmp->fk_validator) {
|
||||
$objecttmp->oldcopy = dol_clone($objecttmp);
|
||||
|
||||
$objecttmp->date_valid = dol_now();
|
||||
$objecttmp->fk_user_valid = $user->id;
|
||||
$objecttmp->statut = Holiday::STATUS_APPROVED;
|
||||
|
||||
$db->begin();
|
||||
|
||||
$verif = $objecttmp->approve($user);
|
||||
if ($verif <= 0) {
|
||||
setEventMessages($objecttmp->error, $objecttmp->errors, 'errors');
|
||||
$error++;
|
||||
}
|
||||
|
||||
// If no SQL error, we redirect to the request form
|
||||
if (!$error) {
|
||||
// Calculcate number of days consummed
|
||||
$nbopenedday = num_open_day($objecttmp->date_debut_gmt, $objecttmp->date_fin_gmt, 0, 1, $objecttmp->halfday);
|
||||
$soldeActuel = $objecttmp->getCpforUser($objecttmp->fk_user, $objecttmp->fk_type);
|
||||
$newSolde = ($soldeActuel - $nbopenedday);
|
||||
|
||||
// The modification is added to the LOG
|
||||
$result = $objecttmp->addLogCP($user->id, $objecttmp->fk_user, $langs->transnoentitiesnoconv("Holidays"), $newSolde, $objecttmp->fk_type);
|
||||
if ($result < 0) {
|
||||
$error++;
|
||||
setEventMessages(null, $objecttmp->errors, 'errors');
|
||||
}
|
||||
|
||||
// Update balance
|
||||
$result = $objecttmp->updateSoldeCP($objecttmp->fk_user, $newSolde, $objecttmp->fk_type);
|
||||
if ($result < 0) {
|
||||
$error++;
|
||||
setEventMessages(null, $objecttmp->errors, 'errors');
|
||||
}
|
||||
}
|
||||
|
||||
if (!$error) {
|
||||
// To
|
||||
$destinataire = new User($db);
|
||||
$destinataire->fetch($objecttmp->fk_user);
|
||||
$emailTo = $destinataire->email;
|
||||
|
||||
if (!$emailTo) {
|
||||
dol_syslog("User that request leave has no email, so we redirect directly to finished page without sending email");
|
||||
} else {
|
||||
// From
|
||||
$expediteur = new User($db);
|
||||
$expediteur->fetch($objecttmp->fk_validator);
|
||||
//$emailFrom = $expediteur->email; Email of user can be an email into another company. Sending will fails, we must use the generic email.
|
||||
$emailFrom = $conf->global->MAIN_MAIL_EMAIL_FROM;
|
||||
|
||||
// Subject
|
||||
$societeName = $conf->global->MAIN_INFO_SOCIETE_NOM;
|
||||
if (!empty($conf->global->MAIN_APPLICATION_TITLE)) {
|
||||
$societeName = $conf->global->MAIN_APPLICATION_TITLE;
|
||||
}
|
||||
|
||||
$subject = $societeName." - ".$langs->transnoentitiesnoconv("HolidaysValidated");
|
||||
|
||||
// Content
|
||||
$message = $langs->transnoentitiesnoconv("Hello")." ".$destinataire->firstname.",\n";
|
||||
$message .= "\n";
|
||||
|
||||
$message .= $langs->transnoentities("HolidaysValidatedBody", dol_print_date($objecttmp->date_debut, 'day'), dol_print_date($objecttmp->date_fin, 'day'))."\n";
|
||||
|
||||
$message .= "- ".$langs->transnoentitiesnoconv("ValidatedBy")." : ".dolGetFirstLastname($expediteur->firstname, $expediteur->lastname)."\n";
|
||||
|
||||
$message .= "- ".$langs->transnoentitiesnoconv("Link")." : ".$dolibarr_main_url_root."/holiday/card.php?id=".$objecttmp->id."\n\n";
|
||||
$message .= "\n";
|
||||
|
||||
$trackid = 'leav'.$objecttmp->id;
|
||||
|
||||
$mail = new CMailFile($subject, $emailTo, $emailFrom, $message, array(), array(), array(), '', '', 0, 0, '', '', $trackid);
|
||||
|
||||
// Sending email
|
||||
$result = $mail->sendfile();
|
||||
|
||||
if (!$result) {
|
||||
setEventMessages($mail->error, $mail->errors, 'warnings'); // Show error, but do no make rollback, so $error is not set to 1
|
||||
$action = '';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!$error) {
|
||||
$db->commit();
|
||||
$nbok++;
|
||||
} else {
|
||||
$db->rollback();
|
||||
$action = '';
|
||||
}
|
||||
}
|
||||
} else {
|
||||
setEventMessages($objecttmp->error, $objecttmp->errors, 'errors');
|
||||
$error++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$error) {
|
||||
if ($nbok > 1) {
|
||||
setEventMessages($langs->trans("RecordsApproved", $nbok), null, 'mesgs');
|
||||
} else {
|
||||
setEventMessages($langs->trans("RecordAproved"), null, 'mesgs');
|
||||
}
|
||||
$db->commit();
|
||||
} else {
|
||||
$db->rollback();
|
||||
}
|
||||
}
|
||||
|
||||
$parameters['toselect'] = $toselect;
|
||||
$parameters['uploaddir'] = $uploaddir;
|
||||
$parameters['massaction'] = $massaction;
|
||||
|
||||
@ -316,7 +316,7 @@ if (($action == 'send' || $action == 'relance') && !$_POST['addfile'] && !$_POST
|
||||
$deliveryreceipt = $_POST['deliveryreceipt'];
|
||||
|
||||
if ($action == 'send' || $action == 'relance') {
|
||||
$actionmsg2 = $langs->transnoentities('MailSentBy').' '.CMailFile::getValidAddress($from, 4, 0, 1).' '.$langs->transnoentities('at').' '.CMailFile::getValidAddress($sendto, 4, 0, 1);
|
||||
$actionmsg2 = $langs->transnoentities('MailSentBy').' '.CMailFile::getValidAddress($from, 4, 0, 1).' '.$langs->transnoentities('To').' '.CMailFile::getValidAddress($sendto, 4, 0, 1);
|
||||
if ($message) {
|
||||
$actionmsg = $langs->transnoentities('MailFrom').': '.dol_escape_htmltag($from);
|
||||
$actionmsg = dol_concatdesc($actionmsg, $langs->transnoentities('MailTo').': '.dol_escape_htmltag($sendto));
|
||||
|
||||
@ -73,6 +73,11 @@ abstract class CommonObject
|
||||
*/
|
||||
public $errors = array();
|
||||
|
||||
/**
|
||||
* @var array To store error results of ->validateField()
|
||||
*/
|
||||
public $validateFieldsErrors = array();
|
||||
|
||||
/**
|
||||
* @var string ID to identify managed object
|
||||
*/
|
||||
@ -124,13 +129,11 @@ abstract class CommonObject
|
||||
protected $table_ref_field = '';
|
||||
|
||||
/**
|
||||
* 0=Default, 1=View may be restricted to sales representative only if no permission to see all or to company of external user if external user
|
||||
* @var integer
|
||||
* @var integer 0=Default, 1=View may be restricted to sales representative only if no permission to see all or to company of external user if external user
|
||||
*/
|
||||
public $restrictiononfksoc = 0;
|
||||
|
||||
|
||||
|
||||
// Following vars are used by some objects only. We keep this property here in CommonObject to be able to provide common method using them.
|
||||
|
||||
/**
|
||||
@ -3022,7 +3025,7 @@ abstract class CommonObject
|
||||
*/
|
||||
public function updateRangOfLine($rowid, $rang)
|
||||
{
|
||||
global $hookmanager;
|
||||
global $hookmanager;
|
||||
$fieldposition = 'rang'; // @todo Rename 'rang' into 'position'
|
||||
if (in_array($this->table_element_line, array('bom_bomline', 'ecm_files', 'emailcollector_emailcollectoraction'))) {
|
||||
$fieldposition = 'position';
|
||||
@ -3036,8 +3039,8 @@ abstract class CommonObject
|
||||
dol_print_error($this->db);
|
||||
}
|
||||
$parameters=array('rowid'=>$rowid, 'rang'=>$rang, 'fieldposition' => $fieldposition);
|
||||
$action='';
|
||||
$reshook = $hookmanager->executeHooks('afterRankOfLineUpdate', $parameters, $this, $action);
|
||||
$action='';
|
||||
$reshook = $hookmanager->executeHooks('afterRankOfLineUpdate', $parameters, $this, $action);
|
||||
}
|
||||
|
||||
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
|
||||
@ -6422,6 +6425,16 @@ abstract class CommonObject
|
||||
$val = $this->fields[$key];
|
||||
}
|
||||
|
||||
// Validation tests and output
|
||||
$fieldValidationErrorMsg = '';
|
||||
$validationClass = '';
|
||||
$fieldValidationErrorMsg = $this->getFieldError($key);
|
||||
if (!empty($fieldValidationErrorMsg)) {
|
||||
$validationClass = ' --error'; // the -- is use as class state in css : .--error can't be be defined alone it must be define with another class like .my-class.--error or input.--error
|
||||
} else {
|
||||
$validationClass = ' --success'; // the -- is use as class state in css : .--success can't be be defined alone it must be define with another class like .my-class.--success or input.--success
|
||||
}
|
||||
|
||||
$out = '';
|
||||
$type = '';
|
||||
$isDependList=0;
|
||||
@ -6513,6 +6526,11 @@ abstract class CommonObject
|
||||
}
|
||||
}
|
||||
|
||||
// Add validation state class
|
||||
if (!empty($validationClass)) {
|
||||
$morecss.= ' '.$validationClass;
|
||||
}
|
||||
|
||||
if (in_array($type, array('date'))) {
|
||||
$tmp = explode(',', $size);
|
||||
$newsize = $tmp[0];
|
||||
@ -6979,6 +6997,12 @@ abstract class CommonObject
|
||||
if ($type == 'date') $out.=' (YYYY-MM-DD)';
|
||||
elseif ($type == 'datetime') $out.=' (YYYY-MM-DD HH:MM:SS)';
|
||||
*/
|
||||
|
||||
// Display error message for field
|
||||
if (!empty($fieldValidationErrorMsg) && function_exists('getFieldErrorIcon')) {
|
||||
$out .= ' '.getFieldErrorIcon($fieldValidationErrorMsg);
|
||||
}
|
||||
|
||||
return $out;
|
||||
}
|
||||
|
||||
@ -7318,6 +7342,228 @@ abstract class CommonObject
|
||||
return $out;
|
||||
}
|
||||
|
||||
/**
|
||||
* clear validation message result for a field
|
||||
*
|
||||
* @param string $fieldKey Key of attribute to clear
|
||||
* @return null
|
||||
*/
|
||||
public function clearFieldError($fieldKey)
|
||||
{
|
||||
$this->error = '';
|
||||
unset($this->validateFieldsErrors[$fieldKey]);
|
||||
}
|
||||
|
||||
/**
|
||||
* set validation error message a field
|
||||
*
|
||||
* @param string $fieldKey Key of attribute
|
||||
* @param string $msg the field error message
|
||||
* @return null
|
||||
*/
|
||||
public function setFieldError($fieldKey, $msg = '')
|
||||
{
|
||||
global $langs;
|
||||
if (empty($msg)) { $msg = $langs->trans("UnknowError"); }
|
||||
|
||||
$this->error = $this->validateFieldsErrors[$fieldKey] = $msg;
|
||||
}
|
||||
|
||||
/**
|
||||
* get field error message
|
||||
*
|
||||
* @param string $fieldKey Key of attribute
|
||||
* @return string
|
||||
*/
|
||||
public function getFieldError($fieldKey)
|
||||
{
|
||||
if (!empty($this->validateFieldsErrors[$fieldKey])) {
|
||||
return $this->validateFieldsErrors[$fieldKey];
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Return validation test result for a field
|
||||
*
|
||||
* @param array $val Array of properties of field to show
|
||||
* @param string $fieldKey Key of attribute
|
||||
* @param string $fieldValue value of attribute
|
||||
* @return bool return false if fail true on success, see $this->error for error message
|
||||
*/
|
||||
public function validateField($val, $fieldKey, $fieldValue)
|
||||
{
|
||||
global $langs;
|
||||
|
||||
if (!class_exists('Validate')) { require_once DOL_DOCUMENT_ROOT . '/core/class/validate.class.php'; }
|
||||
|
||||
$this->clearFieldError($fieldKey);
|
||||
|
||||
if (!isset($val[$fieldKey])) {
|
||||
$this->setFieldError($fieldKey, $langs->trans('FieldNotFoundInObject'));
|
||||
return false;
|
||||
}
|
||||
|
||||
$param = array();
|
||||
$param['options'] = array();
|
||||
$type = $val[$fieldKey]['type'];
|
||||
|
||||
$required = false;
|
||||
if (isset($val[$fieldKey]['notnull']) && $val[$fieldKey]['notnull'] === 1) {
|
||||
// 'notnull' is set to 1 if not null in database. Set to -1 if we must set data to null if empty ('' or 0).
|
||||
$required = true;
|
||||
}
|
||||
|
||||
$maxSize = 0;
|
||||
$minSize = 0;
|
||||
|
||||
//
|
||||
// PREPARE Elements
|
||||
//
|
||||
|
||||
// Convert var to be able to share same code than showOutputField of extrafields
|
||||
if (preg_match('/varchar\((\d+)\)/', $type, $reg)) {
|
||||
$type = 'varchar'; // convert varchar(xx) int varchar
|
||||
$maxSize = $reg[1];
|
||||
} elseif (preg_match('/varchar/', $type)) {
|
||||
$type = 'varchar'; // convert varchar(xx) int varchar
|
||||
}
|
||||
|
||||
if (!empty($val['arrayofkeyval']) && is_array($val['arrayofkeyval'])) {
|
||||
$type = 'select';
|
||||
}
|
||||
|
||||
if (preg_match('/^integer:(.*):(.*)/i', $val['type'], $reg)) {
|
||||
$type = 'link';
|
||||
}
|
||||
|
||||
if (!empty($val['arrayofkeyval']) && is_array($val['arrayofkeyval'])) {
|
||||
$param['options'] = $val['arrayofkeyval'];
|
||||
}
|
||||
|
||||
if (preg_match('/^integer:(.*):(.*)/i', $val['type'], $reg)) {
|
||||
$type = 'link';
|
||||
$param['options'] = array($reg[1].':'.$reg[2]=>$reg[1].':'.$reg[2]);
|
||||
} elseif (preg_match('/^sellist:(.*):(.*):(.*):(.*)/i', $val['type'], $reg)) {
|
||||
$param['options'] = array($reg[1].':'.$reg[2].':'.$reg[3].':'.$reg[4] => 'N');
|
||||
$type = 'sellist';
|
||||
} elseif (preg_match('/^sellist:(.*):(.*):(.*)/i', $val['type'], $reg)) {
|
||||
$param['options'] = array($reg[1].':'.$reg[2].':'.$reg[3] => 'N');
|
||||
$type = 'sellist';
|
||||
} elseif (preg_match('/^sellist:(.*):(.*)/i', $val['type'], $reg)) {
|
||||
$param['options'] = array($reg[1].':'.$reg[2] => 'N');
|
||||
$type = 'sellist';
|
||||
}
|
||||
|
||||
//
|
||||
// TEST Value
|
||||
//
|
||||
|
||||
// Use Validate class to allow external Modules to use data validation part instead of concentrate all test here (factoring) or just for reuse
|
||||
$validate = new Validate($this->db, $langs);
|
||||
|
||||
|
||||
// little trick : to perform tests with good performances sort tests by quick to low
|
||||
|
||||
//
|
||||
// COMMON TESTS
|
||||
//
|
||||
|
||||
// Required test and empty value
|
||||
if ($required && !$validate->isNotEmptyString($fieldValue)) {
|
||||
$this->setFieldError($fieldKey, $validate->error);
|
||||
return false;
|
||||
} elseif (!$required && !$validate->isNotEmptyString($fieldValue)) {
|
||||
// if no value sent and the field is not mandatory, no need to perform tests
|
||||
return true;
|
||||
}
|
||||
|
||||
// MAX Size test
|
||||
if (!empty($maxSize) && !$validate->isMaxLength($fieldValue, $maxSize)) {
|
||||
$this->setFieldError($fieldKey, $validate->error);
|
||||
return false;
|
||||
}
|
||||
|
||||
// MIN Size test
|
||||
if (!empty($minSize) && !$validate->isMinLength($fieldValue, $minSize)) {
|
||||
$this->setFieldError($fieldKey, $validate->error);
|
||||
return false;
|
||||
}
|
||||
|
||||
//
|
||||
// TESTS for TYPE
|
||||
//
|
||||
|
||||
if (in_array($type, array('date', 'datetime', 'timestamp'))) {
|
||||
if (!$validate->isTimestamp($fieldValue)) {
|
||||
$this->setFieldError($fieldKey, $validate->error);
|
||||
return false;
|
||||
} else { return true; }
|
||||
} elseif ($type == 'duration') {
|
||||
if (!$validate->isDuration($fieldValue)) {
|
||||
$this->setFieldError($fieldKey, $validate->error);
|
||||
return false;
|
||||
} else { return true; }
|
||||
} elseif (in_array($type, array('double', 'real', 'price'))) {
|
||||
// is numeric
|
||||
if (!$validate->isDuration($fieldValue)) {
|
||||
$this->setFieldError($fieldKey, $validate->error);
|
||||
return false;
|
||||
} else { return true; }
|
||||
} elseif ($type == 'boolean') {
|
||||
if (!$validate->isBool($fieldValue)) {
|
||||
$this->setFieldError($fieldKey, $validate->error);
|
||||
return false;
|
||||
} else { return true; }
|
||||
} elseif ($type == 'mail') {
|
||||
if (!$validate->isEmail($fieldValue)) {
|
||||
$this->setFieldError($fieldKey, $validate->error);
|
||||
return false;
|
||||
}
|
||||
} elseif ($type == 'url') {
|
||||
if (!$validate->isUrl($fieldValue)) {
|
||||
$this->setFieldError($fieldKey, $validate->error);
|
||||
return false;
|
||||
} else { return true; }
|
||||
} elseif ($type == 'phone') {
|
||||
if (!$validate->isPhone($fieldValue)) {
|
||||
$this->setFieldError($fieldKey, $validate->error);
|
||||
return false;
|
||||
} else { return true; }
|
||||
} elseif ($type == 'select' || $type == 'radio') {
|
||||
if (!isset($param['options'][$fieldValue])) {
|
||||
$this->error = $langs->trans('RequireValidValue');
|
||||
return false;
|
||||
} else { return true; }
|
||||
} elseif ($type == 'sellist' || $type == 'chkbxlst') {
|
||||
$param_list = array_keys($param['options']);
|
||||
$InfoFieldList = explode(":", $param_list[0]);
|
||||
$value_arr = explode(',', $fieldValue);
|
||||
$value_arr = array_map(array($this->db, 'escape'), $value_arr);
|
||||
|
||||
$selectkey = "rowid";
|
||||
if (count($InfoFieldList) > 4 && !empty($InfoFieldList[4])) {
|
||||
$selectkey = $InfoFieldList[2];
|
||||
}
|
||||
|
||||
if (!isInDb($value_arr, $InfoFieldList[0], $selectkey)) {
|
||||
$this->setFieldError($fieldKey, $validate->error);
|
||||
return false;
|
||||
} else { return true; }
|
||||
} elseif ($type == 'link') {
|
||||
$param_list = array_keys($param['options']); // $param_list='ObjectName:classPath'
|
||||
$InfoFieldList = explode(":", $param_list[0]);
|
||||
$classname = $InfoFieldList[0];
|
||||
$classpath = $InfoFieldList[1];
|
||||
if (!$validate->isFetchable($fieldValue, $classname, $classpath)) {
|
||||
$this->setFieldError($fieldKey, $validate->error);
|
||||
return false;
|
||||
} else { return true; }
|
||||
}
|
||||
|
||||
// if no test failled all is ok
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to show lines of extrafields with output datas.
|
||||
@ -7924,7 +8170,7 @@ abstract class CommonObject
|
||||
} else {
|
||||
if (empty($maxHeight) || $photo_vignette && $imgarray['height'] > $maxHeight) {
|
||||
$return .= '<!-- Show thumb -->';
|
||||
$return .= '<img class="photo photowithmargin maxwidth150onsmartphone" height="'.$maxHeight.'" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart='.$modulepart.'&entity='.$this->entity.'&file='.urlencode($pdirthumb.$photo_vignette).'" title="'.dol_escape_htmltag($alt).'">';
|
||||
$return .= '<img class="photo photowithmargin maxwidth150onsmartphone maxwidth200" height="'.$maxHeight.'" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart='.$modulepart.'&entity='.$this->entity.'&file='.urlencode($pdirthumb.$photo_vignette).'" title="'.dol_escape_htmltag($alt).'">';
|
||||
} else {
|
||||
$return .= '<!-- Show original file -->';
|
||||
$return .= '<img class="photo photowithmargin" height="'.$maxHeight.'" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart='.$modulepart.'&entity='.$this->entity.'&file='.urlencode($pdir.$photo).'" title="'.dol_escape_htmltag($alt).'">';
|
||||
|
||||
@ -3928,13 +3928,16 @@ class Form
|
||||
* @param int $maxlength Max length of label
|
||||
* @param int $active Active or not, -1 = all
|
||||
* @param string $morecss Add more CSS on select tag
|
||||
* @param int $nooutput 1=Return string, do not send to output
|
||||
* @return void
|
||||
*/
|
||||
public function select_types_paiements($selected = '', $htmlname = 'paiementtype', $filtertype = '', $format = 0, $empty = 1, $noadmininfo = 0, $maxlength = 0, $active = 1, $morecss = '')
|
||||
public function select_types_paiements($selected = '', $htmlname = 'paiementtype', $filtertype = '', $format = 0, $empty = 1, $noadmininfo = 0, $maxlength = 0, $active = 1, $morecss = '', $nooutput = 0)
|
||||
{
|
||||
// phpcs:enable
|
||||
global $langs, $user, $conf;
|
||||
|
||||
$out = '';
|
||||
|
||||
dol_syslog(__METHOD__." ".$selected.", ".$htmlname.", ".$filtertype.", ".$format, LOG_DEBUG);
|
||||
|
||||
$filterarray = array();
|
||||
@ -3953,9 +3956,9 @@ class Form
|
||||
$selected = $conf->global->MAIN_DEFAULT_PAYMENT_TYPE_ID;
|
||||
}
|
||||
|
||||
print '<select id="select'.$htmlname.'" class="flat selectpaymenttypes'.($morecss ? ' '.$morecss : '').'" name="'.$htmlname.'">';
|
||||
$out .= '<select id="select'.$htmlname.'" class="flat selectpaymenttypes'.($morecss ? ' '.$morecss : '').'" name="'.$htmlname.'">';
|
||||
if ($empty) {
|
||||
print '<option value=""> </option>';
|
||||
$out .= '<option value=""> </option>';
|
||||
}
|
||||
foreach ($this->cache_types_paiements as $id => $arraytypes) {
|
||||
// If not good status
|
||||
@ -3974,25 +3977,25 @@ class Form
|
||||
}
|
||||
|
||||
if ($format == 0) {
|
||||
print '<option value="'.$id.'"';
|
||||
$out .= '<option value="'.$id.'"';
|
||||
} elseif ($format == 1) {
|
||||
print '<option value="'.$arraytypes['code'].'"';
|
||||
$out .= '<option value="'.$arraytypes['code'].'"';
|
||||
} elseif ($format == 2) {
|
||||
print '<option value="'.$arraytypes['code'].'"';
|
||||
$out .= '<option value="'.$arraytypes['code'].'"';
|
||||
} elseif ($format == 3) {
|
||||
print '<option value="'.$id.'"';
|
||||
$out .= '<option value="'.$id.'"';
|
||||
}
|
||||
// Print attribute selected or not
|
||||
if ($format == 1 || $format == 2) {
|
||||
if ($selected == $arraytypes['code']) {
|
||||
print ' selected';
|
||||
$out .= ' selected';
|
||||
}
|
||||
} else {
|
||||
if ($selected == $id) {
|
||||
print ' selected';
|
||||
$out .= ' selected';
|
||||
}
|
||||
}
|
||||
print '>';
|
||||
$out .= '>';
|
||||
if ($format == 0) {
|
||||
$value = ($maxlength ?dol_trunc($arraytypes['label'], $maxlength) : $arraytypes['label']);
|
||||
} elseif ($format == 1) {
|
||||
@ -4002,14 +4005,20 @@ class Form
|
||||
} elseif ($format == 3) {
|
||||
$value = $arraytypes['code'];
|
||||
}
|
||||
print $value ? $value : ' ';
|
||||
print '</option>';
|
||||
$out .= $value ? $value : ' ';
|
||||
$out .= '</option>';
|
||||
}
|
||||
print '</select>';
|
||||
$out .= '</select>';
|
||||
if ($user->admin && !$noadmininfo) {
|
||||
print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1);
|
||||
$out .= info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1);
|
||||
}
|
||||
$out .= ajax_combobox('select'.$htmlname);
|
||||
|
||||
if (empty($nooutput)) {
|
||||
print $out;
|
||||
} else {
|
||||
return $out;
|
||||
}
|
||||
print ajax_combobox('select'.$htmlname);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -1077,7 +1077,7 @@ class FormCompany extends Form
|
||||
$out .= '<input type="submit" class="button smallpaddingimp valignmiddle" value="'.$langs->trans("Modify").'">';
|
||||
$out .= '</form>';
|
||||
} else {
|
||||
if ($selected) {
|
||||
if ($selected > 0) {
|
||||
$arr = $this->typent_array(0);
|
||||
$typent = $arr[$selected];
|
||||
$out .= $typent;
|
||||
|
||||
@ -272,7 +272,7 @@ class FormTicket
|
||||
print '</td></tr>';
|
||||
}
|
||||
|
||||
//Categories
|
||||
// Categories
|
||||
if ($conf->categorie->enabled) {
|
||||
// Categories
|
||||
print '<tr><td>'.$langs->trans("Categories").'</td><td colspan="3">';
|
||||
@ -441,6 +441,7 @@ class FormTicket
|
||||
print '<tr><td>';
|
||||
print $langs->trans("AssignedTo");
|
||||
print '</td><td>';
|
||||
print img_picto('', 'user', 'class="pictofixedwidth"');
|
||||
print $form->select_dolusers(GETPOST('fk_user_assign', 'int'), 'fk_user_assign', 1);
|
||||
print '</td>';
|
||||
print '</tr>';
|
||||
|
||||
309
htdocs/core/class/validate.class.php
Normal file
309
htdocs/core/class/validate.class.php
Normal file
@ -0,0 +1,309 @@
|
||||
<?php
|
||||
/* Copyright (C) 2021 John BOTELLA <john.botella@atm-consulting.fr>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file htdocs/core/class/validate.class.php
|
||||
* \ingroup core
|
||||
* \brief File for Utils class
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Class toolbox to validate values
|
||||
*/
|
||||
class Validate
|
||||
{
|
||||
|
||||
/**
|
||||
* @var DoliDb Database handler (result of a new DoliDB)
|
||||
*/
|
||||
public $db;
|
||||
|
||||
/**
|
||||
* @var Translate $outputLang
|
||||
*/
|
||||
public $outputLang;
|
||||
|
||||
/**
|
||||
* @var string Error string
|
||||
* @see $errors
|
||||
*/
|
||||
public $error;
|
||||
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param DoliDB $db Database handler
|
||||
* @param Translate $outputLang output lang for error
|
||||
* @return null
|
||||
*/
|
||||
public function __construct($db, $outputLang = false)
|
||||
{
|
||||
global $langs;
|
||||
|
||||
if ($outputLang) {
|
||||
$this->outputLang = $langs;
|
||||
} else {
|
||||
$this->outputLang = $outputLang;
|
||||
}
|
||||
|
||||
$outputLang->load('validate');
|
||||
|
||||
$this->db = $db;
|
||||
}
|
||||
|
||||
/**
|
||||
* Use to clear errors msg or other ghost vars
|
||||
* @return null
|
||||
*/
|
||||
protected function clear()
|
||||
{
|
||||
$this->error = '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Use to clear errors msg or other ghost vars
|
||||
*
|
||||
* @param string $errMsg your error message
|
||||
* @return null
|
||||
*/
|
||||
protected function setError($errMsg)
|
||||
{
|
||||
$this->error = $errMsg;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check for e-mail validity
|
||||
*
|
||||
* @param string $email e-mail address to validate
|
||||
* @param int $maxLength string max length
|
||||
* @return boolean Validity is ok or not
|
||||
*/
|
||||
public function isEmail($email, $maxLength = false)
|
||||
{
|
||||
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
|
||||
$this->error = $this->outputLang->trans('RequireValidEmail');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check for price validity
|
||||
*
|
||||
* @param string $price Price to validate
|
||||
* @return boolean Validity is ok or not
|
||||
*/
|
||||
public function isPrice($price)
|
||||
{
|
||||
if (!preg_match('/^[0-9]{1,10}(\.[0-9]{1,9})?$/ui', $price)) {
|
||||
$this->error = $this->outputLang->trans('RequireValidValue');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check for timestamp validity
|
||||
*
|
||||
* @param string|int $stamp timestamp to validate
|
||||
* @return boolean Validity is ok or not
|
||||
*/
|
||||
public function isTimestamp($stamp)
|
||||
{
|
||||
if (!is_numeric($stamp) && (int) $stamp == $stamp) {
|
||||
$this->error = $this->outputLang->trans('RequireValidDate');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check for phone validity
|
||||
*
|
||||
* @param string $phone Phone string to validate
|
||||
* @return boolean Validity is ok or not
|
||||
*/
|
||||
public function isPhone($phone)
|
||||
{
|
||||
if (!preg_match('/^[+0-9. ()-]*$/ui', $phone)) {
|
||||
$this->error = $this->outputLang->trans('RequireValidPhone');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check for string max length validity
|
||||
*
|
||||
* @param string $string to validate
|
||||
* @param int $length max length
|
||||
* @return boolean Validity is ok or not
|
||||
*/
|
||||
public function isMaxLength($string, $length)
|
||||
{
|
||||
if (strlen($string) > $length) {
|
||||
$this->error = $this->outputLang->trans('RequireMaxLength', $length);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check for string not empty
|
||||
*
|
||||
* @param string $string to validate
|
||||
* @return boolean Validity is ok or not
|
||||
*/
|
||||
public function isNotEmptyString($string)
|
||||
{
|
||||
if (!strlen($string)) {
|
||||
$this->error = $this->outputLang->trans('RequireANotEmptyValue');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check for string min length validity
|
||||
*
|
||||
* @param string $string to validate
|
||||
* @param int $length max length
|
||||
* @return boolean Validity is ok or not
|
||||
*/
|
||||
public function isMinLength($string, $length)
|
||||
{
|
||||
if (!strlen($string) < $length) {
|
||||
$this->error = $this->outputLang->trans('RequireMinLength', $length);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check url validity
|
||||
*
|
||||
* @param string $url to validate
|
||||
* @return boolean Validity is ok or not
|
||||
*/
|
||||
public function isUrl($url)
|
||||
{
|
||||
if (!filter_var($url, FILTER_VALIDATE_URL)) {
|
||||
$this->error = $this->outputLang->trans('RequireValidUrl');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check Duration validity
|
||||
*
|
||||
* @param string $duration to validate
|
||||
* @return boolean Validity is ok or not
|
||||
*/
|
||||
public function isDuration($duration)
|
||||
{
|
||||
if (!is_int($duration) && $duration >= 0) {
|
||||
$this->error = $this->outputLang->trans('RequireValidDuration');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check for boolean validity
|
||||
*
|
||||
* @param boolean $bool Boolean to validate
|
||||
* @return boolean Validity is ok or not
|
||||
*/
|
||||
public function isBool($bool)
|
||||
{
|
||||
if (!(is_null($bool) || is_bool($bool) || preg_match('/^[0|1]{1}$/ui', $bool))) {
|
||||
$this->error = $this->outputLang->trans('RequireValidBool');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check for all values in db
|
||||
*
|
||||
* @param array $values Boolean to validate
|
||||
* @param string $table the db table name without MAIN_DB_PREFIX
|
||||
* @param string $col the target col
|
||||
* @return boolean Validity is ok or not
|
||||
* @throws Exception
|
||||
*/
|
||||
public function isInDb($values, $table, $col)
|
||||
{
|
||||
if (!is_array($values)) {
|
||||
$value_arr = array($values);
|
||||
} else {
|
||||
$value_arr = $values;
|
||||
}
|
||||
|
||||
if (!count($value_arr)) {
|
||||
$this->error = $this->outputLang->trans('RequireValue');
|
||||
return false;
|
||||
}
|
||||
|
||||
foreach ($value_arr as $val) {
|
||||
$sql = 'SELECT ' . $col . ' FROM ' . MAIN_DB_PREFIX . $table . " WHERE " . $col ." = '" . $this->db->escape($val) . "'"; // nore quick than count(*) to check existing of a row
|
||||
$resql = $this->db->getRow($sql);
|
||||
if ($resql) {
|
||||
continue;
|
||||
} else {
|
||||
$this->error = $this->outputLang->trans('RequireValidExistingElement');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check for all values in db
|
||||
*
|
||||
* @param array $values Boolean to validate
|
||||
* @param string $classname the class name
|
||||
* @param string $classpath the class path
|
||||
* @return boolean Validity is ok or not
|
||||
* @throws Exception
|
||||
*/
|
||||
public function isFetchable($values, $classname, $classpath)
|
||||
{
|
||||
if (!empty($classpath)) {
|
||||
if (dol_include_once($classpath)) {
|
||||
if ($classname && class_exists($classname)) {
|
||||
/** @var CommonObject $object */
|
||||
$object = new $classname($this->db);
|
||||
|
||||
if (!is_callable(array($object, 'fetch')) || !is_callable(array($object, 'isExistingObject'))) {
|
||||
$this->error = $this->outputLang->trans('BadSetupOfFieldFetchNotCallable');
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!empty($object->table_element) && $object->isExistingObject($object->table_element, $values)) {
|
||||
return true;
|
||||
} else { $this->error = $this->outputLang->trans('RequireValidExistingElement'); }
|
||||
} else { $this->error = $this->outputLang->trans('BadSetupOfFieldClassNotFoundForValidation'); }
|
||||
} else { $this->error = $this->outputLang->trans('BadSetupOfFieldFileNotFound'); }
|
||||
} else { $this->error = $this->outputLang->trans('BadSetupOfField'); }
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -321,6 +321,7 @@ abstract class DoliDB implements Database
|
||||
* Dont add LIMIT to your query, it will be added by this method
|
||||
* @param string $sql the sql query string
|
||||
* @return bool| object
|
||||
* @deprecated
|
||||
*/
|
||||
public function getRow($sql)
|
||||
{
|
||||
@ -338,8 +339,9 @@ abstract class DoliDB implements Database
|
||||
* return all results from query as an array of objects
|
||||
* Note : This method executes a given SQL query and retrieves all row of results as an array of objects. It should only be used with SELECT queries
|
||||
* be carefull with this method use it only with some limit of results to avoid performences loss
|
||||
* @param string $sql the sql query string
|
||||
* @return bool| array
|
||||
* @param string $sql the sql query string
|
||||
* @return bool| array
|
||||
* @deprecated
|
||||
*/
|
||||
public function getRows($sql)
|
||||
{
|
||||
|
||||
@ -1766,7 +1766,7 @@ function dol_remove_file_process($filenb, $donotupdatesession = 0, $donotdeletef
|
||||
*/
|
||||
function addFileIntoDatabaseIndex($dir, $file, $fullpathorig = '', $mode = 'uploaded', $setsharekey = 0, $object = null)
|
||||
{
|
||||
global $db, $user;
|
||||
global $db, $user, $conf;
|
||||
|
||||
$result = 0;
|
||||
|
||||
@ -1799,6 +1799,10 @@ function addFileIntoDatabaseIndex($dir, $file, $fullpathorig = '', $mode = 'uplo
|
||||
if (isset($object->src_object_keywords)) $ecmfile->keywords = $object->src_object_keywords;
|
||||
}
|
||||
|
||||
if (!empty($conf->global->MAIN_FORCE_SHARING_ON_ANY_UPLOADED_FILE)) {
|
||||
$setsharekey = 1;
|
||||
}
|
||||
|
||||
if ($setsharekey) {
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/security2.lib.php';
|
||||
$ecmfile->share = getRandomPassword(true);
|
||||
|
||||
@ -9921,6 +9921,24 @@ function dolGetButtonTitleSeparator($moreClass = "")
|
||||
return '<span class="button-title-separator '.$moreClass.'" ></span>';
|
||||
}
|
||||
|
||||
/**
|
||||
* get field error icon
|
||||
*
|
||||
* @param string $fieldValidationErrorMsg message to add in tooltip
|
||||
* @return string html output
|
||||
*/
|
||||
function getFieldErrorIcon($fieldValidationErrorMsg)
|
||||
{
|
||||
$out = '';
|
||||
if (!empty($fieldValidationErrorMsg)) {
|
||||
$out.= '<span class="field-error-icon classfortooltip" title="'.dol_escape_htmltag($fieldValidationErrorMsg, 1).'" role="alert" >'; // role alert is used for accessibility
|
||||
$out.= '<span class="fa fa-exclamation-circle" aria-hidden="true" ></span>'; // For accessibility icon is separated and aria-hidden
|
||||
$out.= '</span>';
|
||||
}
|
||||
|
||||
return $out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function dolGetButtonTitle : this kind of buttons are used in title in list
|
||||
*
|
||||
|
||||
@ -176,6 +176,9 @@ function rebuildObjectClass($destdir, $module, $objectname, $newmask, $readdir =
|
||||
}
|
||||
$texttoinsert .= "),";
|
||||
}
|
||||
if ($val['validate']) {
|
||||
$texttoinsert .= " 'validate'=>'".$val['validate']."',";
|
||||
}
|
||||
if ($val['comment']) {
|
||||
$texttoinsert .= " 'comment'=>\"".preg_replace('/"/', '', $val['comment'])."\"";
|
||||
}
|
||||
|
||||
@ -266,6 +266,11 @@ class DolibarrModules // Can not be abstract, because we need to instantiate it
|
||||
*/
|
||||
public $always_enabled;
|
||||
|
||||
/**
|
||||
* @var bool Module is disabled
|
||||
*/
|
||||
public $disabled;
|
||||
|
||||
/**
|
||||
* @var int Module is enabled globally (Multicompany support)
|
||||
*/
|
||||
@ -1263,7 +1268,12 @@ class DolibarrModules // Can not be abstract, because we need to instantiate it
|
||||
if (is_array($this->boxes)) {
|
||||
foreach ($this->boxes as $key => $value) {
|
||||
//$titre = $this->boxes[$key][0];
|
||||
$file = $this->boxes[$key]['file'];
|
||||
if (empty($this->boxes[$key]['file'])) {
|
||||
$file = isset($this->boxes[$key][1]) ? $this->boxes[$key][1] : ''; // For backward compatibility
|
||||
} else {
|
||||
$file = $this->boxes[$key]['file'];
|
||||
}
|
||||
|
||||
//$note = $this->boxes[$key][2];
|
||||
|
||||
// TODO If the box is also included by another module and the other module is still on, we should not remove it.
|
||||
@ -1276,10 +1286,6 @@ class DolibarrModules // Can not be abstract, because we need to instantiate it
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($file)) {
|
||||
$file = isset($this->boxes[$key][1]) ? $this->boxes[$key][1] : ''; // For backward compatibility
|
||||
}
|
||||
|
||||
if ($this->db->type == 'sqlite3') {
|
||||
// sqlite doesn't support "USING" syntax.
|
||||
// TODO: remove this dependency.
|
||||
|
||||
@ -1361,7 +1361,7 @@ class pdf_einstein extends ModelePDFCommandes
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
$pdf->MultiCell($w, 3, $outputlangs->transnoentities("OrderDate")." : ".dol_print_date($object->date, "day", false, $outputlangs, true), '', 'R');
|
||||
|
||||
if (!empty($conf->global->DOC_SHOW_CUSTOMER_CODE) && !empty($object->thirdparty->code_client)) {
|
||||
if (empty($conf->global->MAIN_PDF_HIDE_CUSTOMER_CODE) && !empty($object->thirdparty->code_client)) {
|
||||
$posy += 4;
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
@ -1413,14 +1413,16 @@ class pdf_einstein extends ModelePDFCommandes
|
||||
$hautcadre = 40;
|
||||
|
||||
// Show sender frame
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx, $posy - 5);
|
||||
$pdf->MultiCell(80, 5, $outputlangs->transnoentities("BillFrom"), 0, $ltrdirection);
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetFillColor(230, 230, 230);
|
||||
$pdf->MultiCell(82, $hautcadre, "", 0, 'R', 1);
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
if (empty($conf->global->MAIN_PDF_NO_SENDER_FRAME)) {
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx, $posy - 5);
|
||||
$pdf->MultiCell(80, 5, $outputlangs->transnoentities("BillFrom"), 0, $ltrdirection);
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetFillColor(230, 230, 230);
|
||||
$pdf->MultiCell(82, $hautcadre, "", 0, 'R', 1);
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
}
|
||||
|
||||
// Show sender name
|
||||
if (empty($conf->global->MAIN_PDF_HIDE_SENDER_NAME)) {
|
||||
@ -1469,11 +1471,13 @@ class pdf_einstein extends ModelePDFCommandes
|
||||
}
|
||||
|
||||
// Show recipient frame
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx + 2, $posy - 5);
|
||||
$pdf->MultiCell($widthrecbox, 5, $outputlangs->transnoentities("BillTo"), 0, $ltrdirection);
|
||||
$pdf->Rect($posx, $posy, $widthrecbox, $hautcadre);
|
||||
if (empty($conf->global->MAIN_PDF_NO_RECIPENT_FRAME)) {
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx + 2, $posy - 5);
|
||||
$pdf->MultiCell($widthrecbox, 5, $outputlangs->transnoentities("BillTo"), 0, $ltrdirection);
|
||||
$pdf->Rect($posx, $posy, $widthrecbox, $hautcadre);
|
||||
}
|
||||
|
||||
// Show recipient name
|
||||
$pdf->SetXY($posx + 2, $posy + 3);
|
||||
|
||||
@ -1541,7 +1541,7 @@ class pdf_eratosthene extends ModelePDFCommandes
|
||||
}
|
||||
$pdf->MultiCell($w, 3, $title." : ".dol_print_date($object->date, "day", false, $outputlangs, true), '', 'R');
|
||||
|
||||
if (!empty($conf->global->DOC_SHOW_CUSTOMER_CODE) && !empty($object->thirdparty->code_client)) {
|
||||
if (empty($conf->global->MAIN_PDF_HIDE_CUSTOMER_CODE) && !empty($object->thirdparty->code_client)) {
|
||||
$posy += 4;
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
@ -1597,14 +1597,16 @@ class pdf_eratosthene extends ModelePDFCommandes
|
||||
|
||||
|
||||
// Show sender frame
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx, $posy - 5);
|
||||
$pdf->MultiCell($widthrecbox, 5, $outputlangs->transnoentities("BillFrom"), 0, $ltrdirection);
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetFillColor(230, 230, 230);
|
||||
$pdf->MultiCell($widthrecbox, $hautcadre, "", 0, 'R', 1);
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
if (empty($conf->global->MAIN_PDF_NO_SENDER_FRAME)) {
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx, $posy - 5);
|
||||
$pdf->MultiCell($widthrecbox, 5, $outputlangs->transnoentities("BillFrom"), 0, $ltrdirection);
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetFillColor(230, 230, 230);
|
||||
$pdf->MultiCell($widthrecbox, $hautcadre, "", 0, 'R', 1);
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
}
|
||||
|
||||
// Show sender name
|
||||
if (empty($conf->global->MAIN_PDF_HIDE_SENDER_NAME)) {
|
||||
@ -1652,11 +1654,13 @@ class pdf_eratosthene extends ModelePDFCommandes
|
||||
}
|
||||
|
||||
// Show recipient frame
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx + 2, $posy - 5);
|
||||
$pdf->MultiCell($widthrecbox, 5, $outputlangs->transnoentities("BillTo"), 0, $ltrdirection);
|
||||
$pdf->Rect($posx, $posy, $widthrecbox, $hautcadre);
|
||||
if (empty($conf->global->MAIN_PDF_NO_RECIPENT_FRAME)) {
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx + 2, $posy - 5);
|
||||
$pdf->MultiCell($widthrecbox, 5, $outputlangs->transnoentities("BillTo"), 0, $ltrdirection);
|
||||
$pdf->Rect($posx, $posy, $widthrecbox, $hautcadre);
|
||||
}
|
||||
|
||||
// Show recipient name
|
||||
$pdf->SetXY($posx + 2, $posy + 3);
|
||||
|
||||
@ -662,7 +662,7 @@ class pdf_strato extends ModelePDFContract
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
$pdf->MultiCell(100, 3, $outputlangs->transnoentities("Date")." : ".dol_print_date($object->date_contrat, "day", false, $outputlangs, true), '', 'R');
|
||||
|
||||
if ($object->thirdparty->code_client) {
|
||||
if (empty($conf->global->MAIN_PDF_HIDE_CUSTOMER_CODE) && $object->thirdparty->code_client) {
|
||||
$posy += 4;
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
@ -690,12 +690,14 @@ class pdf_strato extends ModelePDFContract
|
||||
$hautcadre = 40;
|
||||
|
||||
// Show sender frame
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx, $posy - 5);
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetFillColor(230, 230, 230);
|
||||
$pdf->MultiCell(82, $hautcadre, "", 0, 'R', 1);
|
||||
if (empty($conf->global->MAIN_PDF_NO_SENDER_FRAME)) {
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx, $posy - 5);
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetFillColor(230, 230, 230);
|
||||
$pdf->MultiCell(82, $hautcadre, "", 0, 'R', 1);
|
||||
}
|
||||
|
||||
// Show sender name
|
||||
if (empty($conf->global->MAIN_PDF_HIDE_SENDER_NAME)) {
|
||||
@ -745,11 +747,13 @@ class pdf_strato extends ModelePDFContract
|
||||
}
|
||||
|
||||
// Show recipient frame
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx + 2, $posy - 5);
|
||||
$pdf->Rect($posx, $posy, $widthrecbox, $hautcadre);
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
if (empty($conf->global->MAIN_PDF_NO_RECIPENT_FRAME)) {
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx + 2, $posy - 5);
|
||||
$pdf->Rect($posx, $posy, $widthrecbox, $hautcadre);
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
}
|
||||
|
||||
// Show recipient name
|
||||
$pdf->SetXY($posx + 2, $posy + 3);
|
||||
|
||||
@ -1024,7 +1024,7 @@ class pdf_espadon extends ModelePdfExpedition
|
||||
$pdf->MultiCell($w, 4, $outputlangs->transnoentities("DateDeliveryPlanned")." : ".dol_print_date($object->date_delivery, "day", false, $outputlangs, true), '', 'R');
|
||||
}
|
||||
|
||||
if (!empty($object->thirdparty->code_client)) {
|
||||
if (empty($conf->global->MAIN_PDF_HIDE_CUSTOMER_CODE) && !empty($object->thirdparty->code_client)) {
|
||||
$posy += 4;
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
@ -1089,15 +1089,17 @@ class pdf_espadon extends ModelePdfExpedition
|
||||
$widthrecbox = !empty($conf->global->MAIN_PDF_USE_ISO_LOCATION) ? 92 : 82;
|
||||
|
||||
// Show sender frame
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx, $posy - 5);
|
||||
$pdf->MultiCell($widthrecbox, 5, $outputlangs->transnoentities("Sender"), 0, 'L');
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetFillColor(230, 230, 230);
|
||||
$pdf->MultiCell($widthrecbox, $hautcadre, "", 0, 'R', 1);
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
$pdf->SetFillColor(255, 255, 255);
|
||||
if (empty($conf->global->MAIN_PDF_NO_SENDER_FRAME)) {
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx, $posy - 5);
|
||||
$pdf->MultiCell($widthrecbox, 5, $outputlangs->transnoentities("Sender"), 0, 'L');
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetFillColor(230, 230, 230);
|
||||
$pdf->MultiCell($widthrecbox, $hautcadre, "", 0, 'R', 1);
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
$pdf->SetFillColor(255, 255, 255);
|
||||
}
|
||||
|
||||
// Show sender name
|
||||
if (empty($conf->global->MAIN_PDF_HIDE_SENDER_NAME)) {
|
||||
@ -1144,11 +1146,13 @@ class pdf_espadon extends ModelePdfExpedition
|
||||
}
|
||||
|
||||
// Show recipient frame
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx + 2, $posy - 5);
|
||||
$pdf->MultiCell($widthrecbox, 5, $outputlangs->transnoentities("Recipient"), 0, 'L');
|
||||
$pdf->Rect($posx, $posy, $widthrecbox, $hautcadre);
|
||||
if (empty($conf->global->MAIN_PDF_NO_RECIPENT_FRAME)) {
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx + 2, $posy - 5);
|
||||
$pdf->MultiCell($widthrecbox, 5, $outputlangs->transnoentities("Recipient"), 0, 'L');
|
||||
$pdf->Rect($posx, $posy, $widthrecbox, $hautcadre);
|
||||
}
|
||||
|
||||
// Show recipient name
|
||||
$pdf->SetXY($posx + 2, $posy + 3);
|
||||
|
||||
@ -975,7 +975,7 @@ class pdf_rouget extends ModelePdfExpedition
|
||||
$pdf->MultiCell($w, 4, $outputlangs->transnoentities("DateDeliveryPlanned")." : ".dol_print_date($object->date_delivery, "day", false, $outputlangs, true), '', 'R');
|
||||
}
|
||||
|
||||
if (!empty($object->thirdparty->code_client)) {
|
||||
if (empty($conf->global->MAIN_PDF_HIDE_CUSTOMER_CODE) && !empty($object->thirdparty->code_client)) {
|
||||
$posy += 4;
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
@ -1040,15 +1040,17 @@ class pdf_rouget extends ModelePdfExpedition
|
||||
$widthrecbox = !empty($conf->global->MAIN_PDF_USE_ISO_LOCATION) ? 92 : 82;
|
||||
|
||||
// Show sender frame
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx, $posy - 5);
|
||||
$pdf->MultiCell($widthrecbox, 5, $outputlangs->transnoentities("Sender"), 0, 'L');
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetFillColor(230, 230, 230);
|
||||
$pdf->MultiCell($widthrecbox, $hautcadre, "", 0, 'R', 1);
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
$pdf->SetFillColor(255, 255, 255);
|
||||
if (empty($conf->global->MAIN_PDF_NO_SENDER_FRAME)) {
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx, $posy - 5);
|
||||
$pdf->MultiCell($widthrecbox, 5, $outputlangs->transnoentities("Sender"), 0, 'L');
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetFillColor(230, 230, 230);
|
||||
$pdf->MultiCell($widthrecbox, $hautcadre, "", 0, 'R', 1);
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
$pdf->SetFillColor(255, 255, 255);
|
||||
}
|
||||
|
||||
// Show sender name
|
||||
if (empty($conf->global->MAIN_PDF_HIDE_SENDER_NAME)) {
|
||||
@ -1095,11 +1097,13 @@ class pdf_rouget extends ModelePdfExpedition
|
||||
}
|
||||
|
||||
// Show recipient frame
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx + 2, $posy - 5);
|
||||
$pdf->MultiCell($widthrecbox, 5, $outputlangs->transnoentities("Recipient"), 0, 'L');
|
||||
$pdf->Rect($posx, $posy, $widthrecbox, $hautcadre);
|
||||
if (empty($conf->global->MAIN_PDF_NO_RECIPENT_FRAME)) {
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx + 2, $posy - 5);
|
||||
$pdf->MultiCell($widthrecbox, 5, $outputlangs->transnoentities("Recipient"), 0, 'L');
|
||||
$pdf->Rect($posx, $posy, $widthrecbox, $hautcadre);
|
||||
}
|
||||
|
||||
// Show recipient name
|
||||
$pdf->SetXY($posx + 2, $posy + 3);
|
||||
|
||||
@ -1805,7 +1805,7 @@ class pdf_crabe extends ModelePDFFactures
|
||||
$pdf->MultiCell($w, 3, $title." : ".dol_print_date($object->date_lim_reglement, "day", false, $outputlangs, true), '', 'R');
|
||||
}
|
||||
|
||||
if ($object->thirdparty->code_client) {
|
||||
if (empty($conf->global->MAIN_PDF_HIDE_CUSTOMER_CODE) && $object->thirdparty->code_client) {
|
||||
$posy += 3;
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
@ -1852,14 +1852,16 @@ class pdf_crabe extends ModelePDFFactures
|
||||
|
||||
|
||||
// Show sender frame
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx, $posy - 5);
|
||||
$pdf->MultiCell($widthrecbox, 5, $outputlangs->transnoentities("BillFrom"), 0, $ltrdirection);
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetFillColor(230, 230, 230);
|
||||
$pdf->MultiCell($widthrecbox, $hautcadre, "", 0, 'R', 1);
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
if (empty($conf->global->MAIN_PDF_NO_SENDER_FRAME)) {
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx, $posy - 5);
|
||||
$pdf->MultiCell($widthrecbox, 5, $outputlangs->transnoentities("BillFrom"), 0, $ltrdirection);
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetFillColor(230, 230, 230);
|
||||
$pdf->MultiCell($widthrecbox, $hautcadre, "", 0, 'R', 1);
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
}
|
||||
|
||||
// Show sender name
|
||||
if (empty($conf->global->MAIN_PDF_HIDE_SENDER_NAME)) {
|
||||
@ -1908,11 +1910,13 @@ class pdf_crabe extends ModelePDFFactures
|
||||
}
|
||||
|
||||
// Show recipient frame
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx + 2, $posy - 5);
|
||||
$pdf->MultiCell($widthrecbox - 2, 5, $outputlangs->transnoentities("BillTo"), 0, $ltrdirection);
|
||||
$pdf->Rect($posx, $posy, $widthrecbox, $hautcadre);
|
||||
if (empty($conf->global->MAIN_PDF_NO_RECIPENT_FRAME)) {
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx + 2, $posy - 5);
|
||||
$pdf->MultiCell($widthrecbox - 2, 5, $outputlangs->transnoentities("BillTo"), 0, $ltrdirection);
|
||||
$pdf->Rect($posx, $posy, $widthrecbox, $hautcadre);
|
||||
}
|
||||
|
||||
// Show recipient name
|
||||
$pdf->SetXY($posx + 2, $posy + 3);
|
||||
|
||||
@ -2044,7 +2044,7 @@ class pdf_sponge extends ModelePDFFactures
|
||||
$pdf->MultiCell($w, 3, $title." : ".dol_print_date($object->date_lim_reglement, "day", false, $outputlangs, true), '', 'R');
|
||||
}
|
||||
|
||||
if ($object->thirdparty->code_client) {
|
||||
if (empty($conf->global->MAIN_PDF_HIDE_CUSTOMER_CODE) && $object->thirdparty->code_client) {
|
||||
$posy += 3;
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
@ -2091,14 +2091,16 @@ class pdf_sponge extends ModelePDFFactures
|
||||
|
||||
|
||||
// Show sender frame
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx, $posy - 5);
|
||||
$pdf->MultiCell($widthrecbox, 5, $outputlangs->transnoentities("BillFrom"), 0, $ltrdirection);
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetFillColor(230, 230, 230);
|
||||
$pdf->MultiCell($widthrecbox, $hautcadre, "", 0, 'R', 1);
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
if (empty($conf->global->MAIN_PDF_NO_SENDER_FRAME)) {
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx, $posy - 5);
|
||||
$pdf->MultiCell($widthrecbox, 5, $outputlangs->transnoentities("BillFrom"), 0, $ltrdirection);
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetFillColor(230, 230, 230);
|
||||
$pdf->MultiCell($widthrecbox, $hautcadre, "", 0, 'R', 1);
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
}
|
||||
|
||||
// Show sender name
|
||||
if (empty($conf->global->MAIN_PDF_HIDE_SENDER_NAME)) {
|
||||
@ -2146,11 +2148,13 @@ class pdf_sponge extends ModelePDFFactures
|
||||
}
|
||||
|
||||
// Show recipient frame
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx + 2, $posy - 5);
|
||||
$pdf->MultiCell($widthrecbox - 2, 5, $outputlangs->transnoentities("BillTo"), 0, $ltrdirection);
|
||||
$pdf->Rect($posx, $posy, $widthrecbox, $hautcadre);
|
||||
if (empty($conf->global->MAIN_PDF_NO_RECIPENT_FRAME)) {
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx + 2, $posy - 5);
|
||||
$pdf->MultiCell($widthrecbox - 2, 5, $outputlangs->transnoentities("BillTo"), 0, $ltrdirection);
|
||||
$pdf->Rect($posx, $posy, $widthrecbox, $hautcadre);
|
||||
}
|
||||
|
||||
// Show recipient name
|
||||
$pdf->SetXY($posx + 2, $posy + 3);
|
||||
|
||||
@ -618,7 +618,7 @@ class pdf_soleil extends ModelePDFFicheinter
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
$pdf->MultiCell(100, 3, $outputlangs->transnoentities("Date")." : ".dol_print_date($object->datec, "day", false, $outputlangs, true), '', 'R');
|
||||
|
||||
if ($object->thirdparty->code_client) {
|
||||
if (empty($conf->global->MAIN_PDF_HIDE_CUSTOMER_CODE) && $object->thirdparty->code_client) {
|
||||
$posy += 4;
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
@ -646,12 +646,14 @@ class pdf_soleil extends ModelePDFFicheinter
|
||||
$hautcadre = 40;
|
||||
|
||||
// Show sender frame
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx, $posy - 5);
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetFillColor(230, 230, 230);
|
||||
$pdf->MultiCell(82, $hautcadre, "", 0, 'R', 1);
|
||||
if (empty($conf->global->MAIN_PDF_NO_SENDER_FRAME)) {
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx, $posy - 5);
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetFillColor(230, 230, 230);
|
||||
$pdf->MultiCell(82, $hautcadre, "", 0, 'R', 1);
|
||||
}
|
||||
|
||||
// Show sender name
|
||||
if (empty($conf->global->MAIN_PDF_HIDE_SENDER_NAME)) {
|
||||
@ -699,11 +701,13 @@ class pdf_soleil extends ModelePDFFicheinter
|
||||
}
|
||||
|
||||
// Show recipient frame
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx + 2, $posy - 5);
|
||||
$pdf->Rect($posx, $posy, $widthrecbox, $hautcadre);
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
if (empty($conf->global->MAIN_PDF_NO_RECIPENT_FRAME)) {
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx + 2, $posy - 5);
|
||||
$pdf->Rect($posx, $posy, $widthrecbox, $hautcadre);
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
}
|
||||
|
||||
// Show recipient name
|
||||
$pdf->SetXY($posx + 2, $posy + 3);
|
||||
|
||||
@ -1528,7 +1528,7 @@ class pdf_azur extends ModelePDFPropales
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
$pdf->MultiCell(100, 3, $outputlangs->transnoentities("DateEndPropal")." : ".dol_print_date($object->fin_validite, "day", false, $outputlangs, true), '', 'R');
|
||||
|
||||
if ($object->thirdparty->code_client) {
|
||||
if (empty($conf->global->MAIN_PDF_HIDE_CUSTOMER_CODE) && $object->thirdparty->code_client) {
|
||||
$posy += 4;
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
@ -1580,14 +1580,16 @@ class pdf_azur extends ModelePDFPropales
|
||||
$hautcadre = 40;
|
||||
|
||||
// Show sender frame
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx, $posy - 5);
|
||||
$pdf->MultiCell(80, 5, $outputlangs->transnoentities("BillFrom"), 0, $ltrdirection);
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetFillColor(230, 230, 230);
|
||||
$pdf->MultiCell(82, $hautcadre, "", 0, 'R', 1);
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
if (empty($conf->global->MAIN_PDF_NO_SENDER_FRAME)) {
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx, $posy - 5);
|
||||
$pdf->MultiCell(80, 5, $outputlangs->transnoentities("BillFrom"), 0, $ltrdirection);
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetFillColor(230, 230, 230);
|
||||
$pdf->MultiCell(82, $hautcadre, "", 0, 'R', 1);
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
}
|
||||
|
||||
// Show sender name
|
||||
if (empty($conf->global->MAIN_PDF_HIDE_SENDER_NAME)) {
|
||||
@ -1635,11 +1637,13 @@ class pdf_azur extends ModelePDFPropales
|
||||
}
|
||||
|
||||
// Show recipient frame
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx + 2, $posy - 5);
|
||||
$pdf->MultiCell($widthrecbox, 5, $outputlangs->transnoentities("BillTo"), 0, $ltrdirection);
|
||||
$pdf->Rect($posx, $posy, $widthrecbox, $hautcadre);
|
||||
if (empty($conf->global->MAIN_PDF_NO_RECIPENT_FRAME)) {
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx + 2, $posy - 5);
|
||||
$pdf->MultiCell($widthrecbox, 5, $outputlangs->transnoentities("BillTo"), 0, $ltrdirection);
|
||||
$pdf->Rect($posx, $posy, $widthrecbox, $hautcadre);
|
||||
}
|
||||
|
||||
// Show recipient name
|
||||
$pdf->SetXY($posx + 2, $posy + 3);
|
||||
|
||||
@ -1637,7 +1637,7 @@ class pdf_cyan extends ModelePDFPropales
|
||||
}
|
||||
$pdf->MultiCell($w, 3, $title." : ".dol_print_date($object->fin_validite, "day", false, $outputlangs, true), '', 'R');
|
||||
|
||||
if ($object->thirdparty->code_client) {
|
||||
if (empty($conf->global->MAIN_PDF_HIDE_CUSTOMER_CODE) && $object->thirdparty->code_client) {
|
||||
$posy += 4;
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
@ -1692,14 +1692,16 @@ class pdf_cyan extends ModelePDFPropales
|
||||
$widthrecbox = !empty($conf->global->MAIN_PDF_USE_ISO_LOCATION) ? 92 : 82;
|
||||
|
||||
// Show sender frame
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx, $posy - 5);
|
||||
$pdf->MultiCell($widthrecbox, 5, $outputlangs->transnoentities("BillFrom"), 0, $ltrdirection);
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetFillColor(230, 230, 230);
|
||||
$pdf->MultiCell($widthrecbox, $hautcadre, "", 0, 'R', 1);
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
if (empty($conf->global->MAIN_PDF_NO_SENDER_FRAME)) {
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx, $posy - 5);
|
||||
$pdf->MultiCell($widthrecbox, 5, $outputlangs->transnoentities("BillFrom"), 0, $ltrdirection);
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetFillColor(230, 230, 230);
|
||||
$pdf->MultiCell($widthrecbox, $hautcadre, "", 0, 'R', 1);
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
}
|
||||
|
||||
// Show sender name
|
||||
if (empty($conf->global->MAIN_PDF_HIDE_SENDER_NAME)) {
|
||||
@ -1748,11 +1750,13 @@ class pdf_cyan extends ModelePDFPropales
|
||||
}
|
||||
|
||||
// Show recipient frame
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx + 2, $posy - 5);
|
||||
$pdf->MultiCell($widthrecbox, 5, $outputlangs->transnoentities("BillTo"), 0, $ltrdirection);
|
||||
$pdf->Rect($posx, $posy, $widthrecbox, $hautcadre);
|
||||
if (empty($conf->global->MAIN_PDF_NO_RECIPENT_FRAME)) {
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posx + 2, $posy - 5);
|
||||
$pdf->MultiCell($widthrecbox, 5, $outputlangs->transnoentities("BillTo"), 0, $ltrdirection);
|
||||
$pdf->Rect($posx, $posy, $widthrecbox, $hautcadre);
|
||||
}
|
||||
|
||||
// Show recipient name
|
||||
$pdf->SetXY($posx + 2, $posy + 3);
|
||||
|
||||
@ -79,13 +79,20 @@ foreach ($object->fields as $key => $val) {
|
||||
$value = (GETPOST($key) == 'on' ? 1 : 0);
|
||||
} elseif ($val['type'] == 'price') {
|
||||
$value = price2num(GETPOST($key));
|
||||
} elseif ($key == 'lang') {
|
||||
$value = GETPOST($key, 'aZ09');
|
||||
} else {
|
||||
$value = GETPOST($key, 'alphanohtml');
|
||||
}
|
||||
if (!empty($val['noteditable'])) {
|
||||
print $object->showOutputField($val, $key, $value, '', '', '', 0);
|
||||
} else {
|
||||
print $object->showInputField($val, $key, $value, '', '', '', 0);
|
||||
if ($key == 'lang') {
|
||||
print img_picto('', 'language', 'class="pictofixedwidth"');
|
||||
print $formadmin->select_language($value, $key, 0, null, 1, 0, 0, 'minwidth300', 2);
|
||||
} else {
|
||||
print $object->showInputField($val, $key, $value, '', '', '', 0);
|
||||
}
|
||||
}
|
||||
print '</td>';
|
||||
print '</tr>';
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
* $action
|
||||
* $conf
|
||||
* $langs
|
||||
* $form
|
||||
*/
|
||||
|
||||
// Protection to avoid direct call of template
|
||||
@ -79,6 +80,8 @@ foreach ($object->fields as $key => $val) {
|
||||
$value = GETPOSTISSET($key) ? GETPOST($key, $check) : $object->$key;
|
||||
} elseif ($val['type'] == 'price') {
|
||||
$value = GETPOSTISSET($key) ? price2num(GETPOST($key)) : price2num($object->$key);
|
||||
} elseif ($key == 'lang') {
|
||||
$value = GETPOSTISSET($key, 'aZ09') ? GETPOST($key, 'aZ09') : $object->lang;
|
||||
} else {
|
||||
$value = GETPOSTISSET($key) ? GETPOST($key, 'alpha') : $object->$key;
|
||||
}
|
||||
@ -86,7 +89,12 @@ foreach ($object->fields as $key => $val) {
|
||||
if ($val['noteditable']) {
|
||||
print $object->showOutputField($val, $key, $value, '', '', '', 0);
|
||||
} else {
|
||||
print $object->showInputField($val, $key, $value, '', '', '', 0);
|
||||
if ($key == 'lang') {
|
||||
print img_picto('', 'language', 'class="pictofixedwidth"');
|
||||
print $formadmin->select_language($value, $key, 0, null, 1, 0, 0, 'minwidth300', 2);
|
||||
} else {
|
||||
print $object->showInputField($val, $key, $value, '', '', '', 0);
|
||||
}
|
||||
}
|
||||
print '</td>';
|
||||
print '</tr>';
|
||||
|
||||
@ -81,7 +81,14 @@ foreach ($object->fields as $key => $val) {
|
||||
if (in_array($val['type'], array('text', 'html'))) {
|
||||
print '<div class="longmessagecut">';
|
||||
}
|
||||
print $object->showOutputField($val, $key, $value, '', '', '', 0);
|
||||
if ($key == 'lang') {
|
||||
$langs->load("languages");
|
||||
$labellang = ($value ? $langs->trans('Language_'.$value) : '');
|
||||
print picto_from_langcode($value, 'class="paddingrightonly saturatemedium opacitylow"');
|
||||
print $labellang;
|
||||
} else {
|
||||
print $object->showOutputField($val, $key, $value, '', '', '', 0);
|
||||
}
|
||||
//print dol_escape_htmltag($object->$key, 1, 1);
|
||||
if (in_array($val['type'], array('text', 'html'))) {
|
||||
print '</div>';
|
||||
|
||||
@ -202,6 +202,10 @@ if ($massaction == 'predisable') {
|
||||
print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassDisabling"), $langs->trans("ConfirmMassDisablingQuestion", count($toselect)), "disable", null, '', 0, 200, 500, 1);
|
||||
}
|
||||
|
||||
if ($massaction == 'preapproveleave') {
|
||||
print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassLeaveApproval"), $langs->trans("ConfirmMassLeaveApprovalQuestion", count($toselect)), "approveleave", null, '', 0, 200, 500, 1);
|
||||
}
|
||||
|
||||
// Allow Pre-Mass-Action hook (eg for confirmation dialog)
|
||||
$parameters = array(
|
||||
'toselect' => $toselect,
|
||||
|
||||
@ -530,7 +530,8 @@ class FactureFournisseur extends CommonInvoice
|
||||
$this->lines[$i]->date_end,
|
||||
$this->lines[$i]->array_options,
|
||||
$this->lines[$i]->fk_unit,
|
||||
$this->lines[$i]->multicurrency_subprice
|
||||
$this->lines[$i]->multicurrency_subprice,
|
||||
$this->lines[$i]->ref_supplier
|
||||
);
|
||||
} else {
|
||||
$this->error = $this->db->lasterror();
|
||||
@ -568,7 +569,15 @@ class FactureFournisseur extends CommonInvoice
|
||||
$line->fk_product,
|
||||
'HT',
|
||||
(!empty($line->info_bits) ? $line->info_bits : ''),
|
||||
$line->product_type
|
||||
$line->product_type,
|
||||
$line->remise_percent,
|
||||
0,
|
||||
$line->date_start,
|
||||
$line->date_end,
|
||||
$line->array_options,
|
||||
$line->fk_unit,
|
||||
$line->multicurrency_subprice,
|
||||
$line->ref_supplier
|
||||
);
|
||||
} else {
|
||||
$this->error = $this->db->lasterror();
|
||||
|
||||
@ -721,12 +721,12 @@ if ($id > 0 || !empty($ref)) {
|
||||
print '<td>'.$langs->trans("Description").'</td>';
|
||||
if (!empty($conf->productbatch->enabled)) {
|
||||
print '<td class="dispatch_batch_number_title">'.$langs->trans("batch_number").'</td>';
|
||||
if (empty($conf->global->PRODUCT_DISABLE_EATBY)) {
|
||||
print '<td class="dispatch_dluo_title">'.$langs->trans("EatByDate").'</td>';
|
||||
}
|
||||
if (empty($conf->global->PRODUCT_DISABLE_SELLBY)) {
|
||||
print '<td class="dispatch_dlc_title">'.$langs->trans("SellByDate").'</td>';
|
||||
}
|
||||
if (empty($conf->global->PRODUCT_DISABLE_EATBY)) {
|
||||
print '<td class="dispatch_dluo_title">'.$langs->trans("EatByDate").'</td>';
|
||||
}
|
||||
} else {
|
||||
print '<td></td>';
|
||||
print '<td></td>';
|
||||
@ -814,12 +814,12 @@ if ($id > 0 || !empty($ref)) {
|
||||
print $linktoprod;
|
||||
print "</td>";
|
||||
print '<td class="dispatch_batch_number"></td>';
|
||||
if (empty($conf->global->PRODUCT_DISABLE_EATBY)) {
|
||||
print '<td class="dispatch_dluo"></td>';
|
||||
}
|
||||
if (empty($conf->global->PRODUCT_DISABLE_SELLBY)) {
|
||||
print '<td class="dispatch_dlc"></td>';
|
||||
}
|
||||
if (empty($conf->global->PRODUCT_DISABLE_EATBY)) {
|
||||
print '<td class="dispatch_dluo"></td>';
|
||||
}
|
||||
} else {
|
||||
print '<td>';
|
||||
print $linktoprod;
|
||||
@ -827,12 +827,12 @@ if ($id > 0 || !empty($ref)) {
|
||||
print '<td class="dispatch_batch_number">';
|
||||
print $langs->trans("ProductDoesNotUseBatchSerial");
|
||||
print '</td>';
|
||||
if (empty($conf->global->PRODUCT_DISABLE_EATBY)) {
|
||||
print '<td class="dispatch_dluo"></td>';
|
||||
}
|
||||
if (empty($conf->global->PRODUCT_DISABLE_SELLBY)) {
|
||||
print '<td class="dispatch_dlc"></td>';
|
||||
}
|
||||
if (empty($conf->global->PRODUCT_DISABLE_EATBY)) {
|
||||
print '<td class="dispatch_dluo"></td>';
|
||||
}
|
||||
}
|
||||
} else {
|
||||
print '<td colspan="4">';
|
||||
@ -901,7 +901,7 @@ if ($id > 0 || !empty($ref)) {
|
||||
print '<td>';
|
||||
print '<input type="text" class="inputlotnumber quatrevingtquinzepercent" id="lot_number'.$suffix.'" name="lot_number'.$suffix.'" value="'.GETPOST('lot_number'.$suffix).'">';
|
||||
print '</td>';
|
||||
if (empty($conf->global->PRODUCT_DISABLE_EATBY)) {
|
||||
if (empty($conf->global->PRODUCT_DISABLE_SELLBY)) {
|
||||
print '<td class="nowraponall">';
|
||||
$dlcdatesuffix = dol_mktime(0, 0, 0, GETPOST('dlc'.$suffix.'month'), GETPOST('dlc'.$suffix.'day'), GETPOST('dlc'.$suffix.'year'));
|
||||
print $form->selectDate($dlcdatesuffix, 'dlc'.$suffix, '', '', 1, '');
|
||||
@ -917,8 +917,8 @@ if ($id > 0 || !empty($ref)) {
|
||||
} else {
|
||||
$type = 'dispatch';
|
||||
$colspan = 7;
|
||||
$colspan = (!empty($conf->global->PRODUCT_DISABLE_EATBY)) ? --$colspan : $colspan;
|
||||
$colspan = (!empty($conf->global->PRODUCT_DISABLE_SELLBY)) ? --$colspan : $colspan;
|
||||
$colspan = (!empty($conf->global->PRODUCT_DISABLE_EATBY)) ? --$colspan : $colspan;
|
||||
print '<td class="right">';
|
||||
print '</td>'; // Qty to dispatch
|
||||
print '<td>';
|
||||
@ -1140,12 +1140,12 @@ if ($id > 0 || !empty($ref)) {
|
||||
print '<td>'.$langs->trans("DateDeliveryPlanned").'</td>';
|
||||
if (!empty($conf->productbatch->enabled)) {
|
||||
print '<td class="dispatch_batch_number_title">'.$langs->trans("batch_number").'</td>';
|
||||
if (empty($conf->global->PRODUCT_DISABLE_EATBY)) {
|
||||
print '<td class="dispatch_dluo_title">'.$langs->trans("EatByDate").'</td>';
|
||||
}
|
||||
if (empty($conf->global->PRODUCT_DISABLE_SELLBY)) {
|
||||
print '<td class="dispatch_dlc_title">'.$langs->trans("SellByDate").'</td>';
|
||||
}
|
||||
if (empty($conf->global->PRODUCT_DISABLE_EATBY)) {
|
||||
print '<td class="dispatch_dluo_title">'.$langs->trans("EatByDate").'</td>';
|
||||
}
|
||||
}
|
||||
print '<td class="right">'.$langs->trans("QtyDispatched").'</td>';
|
||||
print '<td>'.$langs->trans("Warehouse").'</td>';
|
||||
@ -1199,16 +1199,20 @@ if ($id > 0 || !empty($ref)) {
|
||||
$lot = new Productlot($db);
|
||||
$lot->fetch(0, $objp->pid, $objp->batch);
|
||||
print '<td class="dispatch_batch_number">'.$lot->getNomUrl(1).'</td>';
|
||||
if (empty($conf->global->PRODUCT_DISABLE_EATBY)) {
|
||||
print '<td class="dispatch_dluo">'.dol_print_date($lot->eatby, 'day').'</td>';
|
||||
}
|
||||
if (empty($conf->global->PRODUCT_DISABLE_SELLBY)) {
|
||||
print '<td class="dispatch_dlc">'.dol_print_date($lot->sellby, 'day').'</td>';
|
||||
}
|
||||
if (empty($conf->global->PRODUCT_DISABLE_EATBY)) {
|
||||
print '<td class="dispatch_dluo">'.dol_print_date($lot->eatby, 'day').'</td>';
|
||||
}
|
||||
} else {
|
||||
print '<td class="dispatch_batch_number"></td>';
|
||||
print '<td class="dispatch_dluo"></td>';
|
||||
print '<td class="dispatch_dlc"></td>';
|
||||
if (empty($conf->global->PRODUCT_DISABLE_SELLBY)) {
|
||||
print '<td class="dispatch_dlc"></td>';
|
||||
}
|
||||
if (empty($conf->global->PRODUCT_DISABLE_EATBY)) {
|
||||
print '<td class="dispatch_dluo"></td>';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -162,7 +162,7 @@ if (empty($reshook)) {
|
||||
$halfday = 1;
|
||||
}
|
||||
|
||||
$valideur = GETPOST('valideur', 'int');
|
||||
$approverid = GETPOST('valideur', 'int');
|
||||
$description = trim(GETPOST('description', 'restricthtml'));
|
||||
|
||||
// Check that leave is for a user inside the hierarchy or advanced permission for all is set
|
||||
@ -229,7 +229,7 @@ if (empty($reshook)) {
|
||||
}
|
||||
|
||||
// If no validator designated
|
||||
if ($valideur < 1) {
|
||||
if ($approverid < 1) {
|
||||
setEventMessages($langs->transnoentitiesnoconv('InvalidValidatorCP'), null, 'errors');
|
||||
$error++;
|
||||
}
|
||||
@ -239,7 +239,7 @@ if (empty($reshook)) {
|
||||
if (!$error) {
|
||||
$object->fk_user = $fuserid;
|
||||
$object->description = $description;
|
||||
$object->fk_validator = $valideur;
|
||||
$object->fk_validator = $approverid;
|
||||
$object->fk_type = $type;
|
||||
$object->date_debut = $date_debut;
|
||||
$object->date_fin = $date_fin;
|
||||
@ -315,7 +315,7 @@ if (empty($reshook)) {
|
||||
if ($object->statut == Holiday::STATUS_DRAFT) {
|
||||
// If this is the requestor or has read/write rights
|
||||
if ($cancreate) {
|
||||
$valideur = GETPOST('valideur', 'int');
|
||||
$approverid = GETPOST('valideur', 'int');
|
||||
$description = trim(GETPOST('description', 'restricthtml'));
|
||||
|
||||
// If no start date
|
||||
@ -337,7 +337,7 @@ if (empty($reshook)) {
|
||||
}
|
||||
|
||||
// If no validator designated
|
||||
if ($valideur < 1) {
|
||||
if ($approverid < 1) {
|
||||
header('Location: '.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=edit&error=Valideur');
|
||||
exit;
|
||||
}
|
||||
@ -352,7 +352,7 @@ if (empty($reshook)) {
|
||||
$object->description = $description;
|
||||
$object->date_debut = $date_debut;
|
||||
$object->date_fin = $date_fin;
|
||||
$object->fk_validator = $valideur;
|
||||
$object->fk_validator = $approverid;
|
||||
$object->halfday = $halfday;
|
||||
|
||||
// Update
|
||||
@ -1100,8 +1100,8 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') {
|
||||
if (($id > 0) || $ref) {
|
||||
$result = $object->fetch($id, $ref);
|
||||
|
||||
$valideur = new User($db);
|
||||
$valideur->fetch($object->fk_validator);
|
||||
$approverexpected = new User($db);
|
||||
$approverexpected->fetch($object->fk_validator);
|
||||
|
||||
$userRequest = new User($db);
|
||||
$userRequest->fetch($object->fk_user);
|
||||
@ -1314,7 +1314,14 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') {
|
||||
print $langs->trans('ReviewedByCP');
|
||||
}
|
||||
print '</td>';
|
||||
print '<td>'.$valideur->getNomUrl(-1);
|
||||
print '<td>';
|
||||
if ($object->statut == Holiday::STATUS_APPROVED || $object->statut == Holiday::STATUS_CANCELED) {
|
||||
$approverdone = new User($db);
|
||||
$approverdone->fetch($object->fk_user_valid);
|
||||
print $approverdone->getNomUrl(-1);
|
||||
} else {
|
||||
print $approverexpected->getNomUrl(-1);
|
||||
}
|
||||
$include_users = $object->fetch_users_approver_holiday();
|
||||
if (is_array($include_users) && in_array($user->id, $include_users) && $object->statut == Holiday::STATUS_VALIDATED) {
|
||||
print '<a class="editfielda paddingleft" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=editvalidator">'.img_edit($langs->trans("Edit")).'</a>';
|
||||
|
||||
@ -85,31 +85,42 @@ class Holiday extends CommonObject
|
||||
public $statut = ''; // 1=draft, 2=validated, 3=approved
|
||||
|
||||
/**
|
||||
* @var int ID
|
||||
* @var int ID of user that must approve. TODO: there is no date for validation (date_valid is used for approval), add one.
|
||||
*/
|
||||
public $fk_validator;
|
||||
|
||||
/**
|
||||
* @var int Date of approval. TODO: Add a field for approval date and use date_valid instead for validation.
|
||||
*/
|
||||
public $date_valid = '';
|
||||
|
||||
/**
|
||||
* @var int ID
|
||||
* @var int ID of user that has approved (empty if not approved)
|
||||
*/
|
||||
public $fk_user_valid;
|
||||
|
||||
|
||||
/**
|
||||
* @var int Date for refuse
|
||||
*/
|
||||
public $date_refuse = '';
|
||||
|
||||
/**
|
||||
* @var int ID
|
||||
* @var int ID for refuse
|
||||
*/
|
||||
public $fk_user_refuse;
|
||||
|
||||
/**
|
||||
* @var int Date for cancelation
|
||||
*/
|
||||
public $date_cancel = '';
|
||||
|
||||
/**
|
||||
* @var int ID
|
||||
* @var int ID for cancelation
|
||||
*/
|
||||
public $fk_user_cancel;
|
||||
|
||||
|
||||
public $detail_refuse = '';
|
||||
|
||||
/**
|
||||
@ -703,7 +714,7 @@ class Holiday extends CommonObject
|
||||
// Update status
|
||||
$sql = "UPDATE ".MAIN_DB_PREFIX."holiday SET";
|
||||
if (!empty($this->statut) && is_numeric($this->statut)) {
|
||||
$sql .= " statut = ".$this->statut.",";
|
||||
$sql .= " statut = ".((int) $this->statut).",";
|
||||
} else {
|
||||
$error++;
|
||||
}
|
||||
@ -771,9 +782,9 @@ class Holiday extends CommonObject
|
||||
} else {
|
||||
$error++;
|
||||
}
|
||||
$sql .= " halfday = ".$this->halfday.",";
|
||||
$sql .= " halfday = ".((int) $this->halfday).",";
|
||||
if (!empty($this->statut) && is_numeric($this->statut)) {
|
||||
$sql .= " statut = ".$this->statut.",";
|
||||
$sql .= " statut = ".((int) $this->statut).",";
|
||||
} else {
|
||||
$error++;
|
||||
}
|
||||
@ -817,7 +828,6 @@ class Holiday extends CommonObject
|
||||
} else {
|
||||
$sql .= " detail_refuse = NULL";
|
||||
}
|
||||
|
||||
$sql .= " WHERE rowid= ".$this->id;
|
||||
|
||||
$this->db->begin();
|
||||
@ -2107,7 +2117,7 @@ class Holiday extends CommonObject
|
||||
{
|
||||
global $conf;
|
||||
|
||||
$sql = "SELECT f.rowid,";
|
||||
$sql = "SELECT f.rowid, f.statut as status,";
|
||||
$sql .= " f.date_create as datec,";
|
||||
$sql .= " f.tms as date_modification,";
|
||||
$sql .= " f.date_valid as datev,";
|
||||
@ -2115,8 +2125,8 @@ class Holiday extends CommonObject
|
||||
$sql .= " f.date_refuse as dater,";
|
||||
$sql .= " f.fk_user_create as fk_user_creation,";
|
||||
$sql .= " f.fk_user_modif as fk_user_modification,";
|
||||
$sql .= " f.fk_user_valid,";
|
||||
$sql .= " f.fk_validator as fk_user_approve,";
|
||||
$sql .= " f.fk_user_valid as fk_user_approve_done,";
|
||||
$sql .= " f.fk_validator as fk_user_approve_expected,";
|
||||
$sql .= " f.fk_user_refuse as fk_user_refuse";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."holiday as f";
|
||||
$sql .= " WHERE f.rowid = ".((int) $id);
|
||||
@ -2153,10 +2163,19 @@ class Holiday extends CommonObject
|
||||
$muser->fetch($obj->fk_user_modification);
|
||||
$this->user_modification = $muser;
|
||||
}
|
||||
if ($obj->fk_user_approve) {
|
||||
$auser = new User($this->db);
|
||||
$auser->fetch($obj->fk_user_approve);
|
||||
$this->user_approve = $auser;
|
||||
|
||||
if ($obj->status == Holiday::STATUS_APPROVED || $obj->status == Holiday::STATUS_CANCELED) {
|
||||
if ($obj->fk_user_approve_done) {
|
||||
$auser = new User($this->db);
|
||||
$auser->fetch($obj->fk_user_approve_done);
|
||||
$this->user_approve = $auser;
|
||||
}
|
||||
} else {
|
||||
if ($obj->fk_user_approve_expected) {
|
||||
$auser = new User($this->db);
|
||||
$auser->fetch($obj->fk_user_approve_expected);
|
||||
$this->user_approve = $auser;
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->db->free($resql);
|
||||
@ -2181,12 +2200,12 @@ class Holiday extends CommonObject
|
||||
$this->id = 0;
|
||||
$this->specimen = 1;
|
||||
|
||||
$this->fk_user = 1;
|
||||
$this->fk_user = $user->id;
|
||||
$this->description = 'SPECIMEN description';
|
||||
$this->date_debut = dol_now();
|
||||
$this->date_fin = dol_now() + (24 * 3600);
|
||||
$this->date_valid = dol_now();
|
||||
$this->fk_validator = 1;
|
||||
$this->fk_validator = $user->id;
|
||||
$this->halfday = 0;
|
||||
$this->fk_type = 1;
|
||||
$this->statut = Holiday::STATUS_VALIDATED;
|
||||
|
||||
@ -213,6 +213,7 @@ if (empty($reshook)) {
|
||||
$objectlabel = 'Holiday';
|
||||
$permissiontoread = $user->rights->holiday->read;
|
||||
$permissiontodelete = $user->rights->holiday->delete;
|
||||
$permissiontoapprove = $user->rights->holiday->approve;
|
||||
$uploaddir = $conf->holiday->dir_output;
|
||||
include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php';
|
||||
}
|
||||
@ -441,6 +442,9 @@ if ($resql) {
|
||||
if (!empty($user->rights->holiday->delete)) {
|
||||
$arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete");
|
||||
}
|
||||
if (!empty($user->rights->holiday->approve)) {
|
||||
$arrayofmassactions['preapproveleave'] = img_picto('', 'check', 'class="pictofixedwidth"').$langs->trans("Approve");
|
||||
}
|
||||
if (in_array($massaction, array('presend', 'predelete'))) {
|
||||
$arrayofmassactions = array();
|
||||
}
|
||||
|
||||
@ -92,6 +92,7 @@ insert into llx_c_action_trigger (code,label,description,elementtype,rang) value
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_SUBSCRIPTION_DELETE','Member subscribtion deleted','Executed when a member subscribtion is deleted','member',24);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_RESILIATE','Member resiliated','Executed when a member is resiliated','member',25);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_DELETE','Member deleted','Executed when a member is deleted','member',26);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_EXCLUDE','Member excluded','Executed when a member is excluded','member',27);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_VALIDATE','Intervention validated','Executed when a intervention is validated','ficheinter',30);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_CLASSIFY_BILLED','Intervention set billed','Executed when a intervention is set to billed (when option FICHINTER_CLASSIFY_BILLED is set)','ficheinter',32);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_CLASSIFY_UNBILLED','Intervention set unbilled','Executed when a intervention is set to unbilled (when option FICHINTER_CLASSIFY_BILLED is set)','ficheinter',33);
|
||||
|
||||
@ -66,3 +66,6 @@ ALTER TABLE llx_product ADD COLUMN fk_default_bom integer DEFAULT NULL;
|
||||
|
||||
DELETE FROM llx_menu WHERE type = 'top' AND module = 'cashdesk' AND mainmenu = 'cashdesk';
|
||||
|
||||
|
||||
INSERT INTO llx_c_action_trigger (code, label, description, elementtype, rang) values ('MEMBER_EXCLUDE', 'Member excluded', 'Executed when a member is excluded', 'member', 27);
|
||||
|
||||
|
||||
@ -21,6 +21,7 @@ CREATE TABLE llx_knowledgemanagement_knowledgerecord(
|
||||
date_creation datetime NOT NULL,
|
||||
tms timestamp,
|
||||
last_main_doc varchar(255),
|
||||
lang varchar(6),
|
||||
fk_user_creat integer NOT NULL,
|
||||
fk_user_modif integer,
|
||||
fk_user_valid integer,
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
<?php
|
||||
/* Copyright (C) 2017 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) ---Put here your own copyright and developer email---
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -101,7 +100,10 @@ class KnowledgeRecord extends CommonObject
|
||||
*/
|
||||
public $fields=array(
|
||||
'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>'1', 'position'=>1, 'notnull'=>1, 'visible'=>0, 'noteditable'=>'1', 'index'=>1, 'css'=>'left', 'comment'=>"Id"),
|
||||
'ref' => array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>'1', 'position'=>10, 'notnull'=>1, 'visible'=>5, 'index'=>1, 'searchall'=>1, 'comment'=>"Reference of object"),
|
||||
'ref' => array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>'1', 'position'=>10, 'notnull'=>1, 'default'=>'(PROV)', 'visible'=>5, 'index'=>1, 'searchall'=>1, 'comment'=>"Reference of object"),
|
||||
'question' => array('type'=>'text', 'label'=>'Question', 'enabled'=>'1', 'position'=>30, 'notnull'=>1, 'visible'=>1, 'csslist'=>'tdoverflow300'),
|
||||
'answer' => array('type'=>'html', 'label'=>'Solution', 'enabled'=>'1', 'position'=>50, 'notnull'=>0, 'visible'=>3, 'csslist'=>'tdoverflow300'),
|
||||
'lang' => array('type'=>'varchar(6)', 'label'=>'Language', 'enabled'=>'1', 'position'=>60, 'notnull'=>0, 'visible'=>1),
|
||||
'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>'1', 'position'=>500, 'notnull'=>1, 'visible'=>-2,),
|
||||
'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>'1', 'position'=>501, 'notnull'=>0, 'visible'=>-2,),
|
||||
'last_main_doc' => array('type'=>'varchar(255)', 'label'=>'LastMainDoc', 'enabled'=>'1', 'position'=>600, 'notnull'=>0, 'visible'=>0,),
|
||||
@ -110,8 +112,6 @@ class KnowledgeRecord extends CommonObject
|
||||
'fk_user_valid' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserValidation', 'enabled'=>'1', 'position'=>512, 'notnull'=>0, 'visible'=>-2,),
|
||||
'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>'1', 'position'=>1000, 'notnull'=>-1, 'visible'=>-2,),
|
||||
'model_pdf' => array('type'=>'varchar(255)', 'label'=>'Model pdf', 'enabled'=>'1', 'position'=>1010, 'notnull'=>-1, 'visible'=>0,),
|
||||
'question' => array('type'=>'text', 'label'=>'Question', 'enabled'=>'1', 'position'=>30, 'notnull'=>1, 'visible'=>1, 'csslist'=>'tdoverflow300'),
|
||||
'answer' => array('type'=>'html', 'label'=>'Solution', 'enabled'=>'1', 'position'=>50, 'notnull'=>0, 'visible'=>3, 'csslist'=>'tdoverflow300'),
|
||||
//'url' => array('type'=>'varchar(255)', 'label'=>'URL', 'enabled'=>'1', 'position'=>55, 'notnull'=>0, 'visible'=>-1, 'csslist'=>'tdoverflow200', 'help'=>'UrlForInfoPage'),
|
||||
'fk_c_ticket_category' => array('type'=>'integer:CTicketCategory:ticket/class/cticketcategory.class.php', 'label'=>'GroupOfTicket', 'enabled'=>'$conf->ticket->enabled', 'position'=>512, 'notnull'=>0, 'visible'=>-1, 'help'=>'YouCanLinkArticleToATicketCategory'),
|
||||
'status' => array('type'=>'integer', 'label'=>'Status', 'enabled'=>'1', 'position'=>1000, 'notnull'=>1, 'visible'=>1, 'default'=>0, 'index'=>1, 'arrayofkeyval'=>array('0'=>'Draft', '1'=>'Validated'),),
|
||||
@ -130,6 +130,7 @@ class KnowledgeRecord extends CommonObject
|
||||
public $answer;
|
||||
public $url;
|
||||
public $status;
|
||||
public $lang;
|
||||
// END MODULEBUILDER PROPERTIES
|
||||
|
||||
|
||||
|
||||
@ -28,6 +28,7 @@ require '../main.inc.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formadmin.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/knowledgemanagement/class/knowledgerecord.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/knowledgemanagement/lib/knowledgemanagement_knowledgerecord.lib.php';
|
||||
|
||||
@ -117,6 +118,11 @@ if (empty($reshook)) {
|
||||
|
||||
$triggermodname = 'KNOWLEDGEMANAGEMENT_KNOWLEDGERECORD_MODIFY'; // Name of trigger action code to execute when we modify record
|
||||
|
||||
// Upadate / add for lang
|
||||
if (($action == 'update' || $action == 'add') && !empty($permissiontoadd)) {
|
||||
$object->lang = GETPOSTISSET('langkm', 'aZ09')?GETPOST('langkm', 'aZ09'):$object->lang;
|
||||
}
|
||||
|
||||
// Actions cancel, add, update, update_extras, confirm_validate, confirm_delete, confirm_deleteline, confirm_clone, confirm_close, confirm_setdraft, confirm_reopen
|
||||
include DOL_DOCUMENT_ROOT.'/core/actions_addupdatedelete.inc.php';
|
||||
|
||||
@ -156,6 +162,7 @@ if ($action == 'confirm_validate') {
|
||||
$form = new Form($db);
|
||||
$formfile = new FormFile($db);
|
||||
$formproject = new FormProjets($db);
|
||||
$formadmin = new FormAdmin($db);
|
||||
|
||||
$title = $langs->trans("KnowledgeRecord");
|
||||
$help_url = '';
|
||||
@ -185,6 +192,7 @@ if ($action == 'create') {
|
||||
// Common attributes
|
||||
include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_add.tpl.php';
|
||||
|
||||
|
||||
// Other attributes
|
||||
include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_add.tpl.php';
|
||||
|
||||
@ -225,6 +233,7 @@ if (($id || $ref) && $action == 'edit') {
|
||||
// Common attributes
|
||||
include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_edit.tpl.php';
|
||||
|
||||
|
||||
// Other attributes
|
||||
include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_edit.tpl.php';
|
||||
|
||||
@ -364,13 +373,13 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
|
||||
if ($object->status == $object::STATUS_VALIDATED) {
|
||||
print dolGetButtonAction($langs->trans('SetToDraft'), '', 'default', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=confirm_setdraft&confirm=yes', '', $permissiontoadd);
|
||||
}
|
||||
if ($object->status == $object::STATUS_VALIDATED && $permissiontovalidate) {
|
||||
if (($object->status == $object::STATUS_DRAFT || $object->status == $object::STATUS_VALIDATED) && $permissiontovalidate) {
|
||||
print dolGetButtonAction($langs->trans('Modify'), '', 'default', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=edit', '', $permissiontoadd);
|
||||
}
|
||||
// Validate
|
||||
if ($object->status == $object::STATUS_DRAFT) {
|
||||
if ((empty($object->table_element_line) || (is_array($object->lines) && count($object->lines) > 0)) && $permissiontovalidate) {
|
||||
print dolGetButtonAction($langs->trans('ValidateReply'), '', 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.'&action=confirm_validate&confirm=yes', '', $permissiontoadd);
|
||||
print dolGetButtonAction($langs->trans('Validate'), '', 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.'&action=confirm_validate&confirm=yes', '', $permissiontoadd);
|
||||
} else {
|
||||
$langs->load("errors");
|
||||
//print dolGetButtonAction($langs->trans('Validate'), '', 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.'&action=confirm_validate&confirm=yes', '', 0);
|
||||
|
||||
@ -26,6 +26,7 @@
|
||||
require '../main.inc.php';
|
||||
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formadmin.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
|
||||
|
||||
@ -88,7 +89,11 @@ $search_all = GETPOST('search_all', 'alphanohtml') ? GETPOST('search_all', 'alph
|
||||
$search = array();
|
||||
foreach ($object->fields as $key => $val) {
|
||||
if (GETPOST('search_'.$key, 'alpha') !== '') {
|
||||
$search[$key] = GETPOST('search_'.$key, 'alpha');
|
||||
if ($key == "lang") {
|
||||
$search[$key] = GETPOST('search_'.$key, 'alpha')!='0' ? GETPOST('search_'.$key, 'alpha') : '';
|
||||
} else {
|
||||
$search[$key] = GETPOST('search_'.$key, 'alpha');
|
||||
}
|
||||
}
|
||||
if (preg_match('/^(date|timestamp|datetime)/', $val['type'])) {
|
||||
$search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOST('search_'.$key.'_dtstartmonth', 'int'), GETPOST('search_'.$key.'_dtstartday', 'int'), GETPOST('search_'.$key.'_dtstartyear', 'int'));
|
||||
@ -197,6 +202,7 @@ if (empty($reshook)) {
|
||||
|
||||
$form = new Form($db);
|
||||
$user_temp = new User($db);
|
||||
$formadmin = new FormAdmin($db);
|
||||
|
||||
$now = dol_now();
|
||||
|
||||
@ -455,7 +461,11 @@ foreach ($object->fields as $key => $val) {
|
||||
} elseif ((strpos($val['type'], 'integer:') === 0) || (strpos($val['type'], 'sellist:')=== 0)) {
|
||||
print $object->showInputField($val, $key, $search[$key], '', '', 'search_', 'maxwidth125', 1);
|
||||
} elseif (!preg_match('/^(date|timestamp|datetime)/', $val['type'])) {
|
||||
print '<input type="text" class="flat maxwidth75" name="search_'.$key.'" value="'.dol_escape_htmltag($search[$key]).'">';
|
||||
if ($key == 'lang') {
|
||||
print $formadmin->select_language($search[$key], 'search_lang', 0, null, 1, 0, 0, 'minwidth150 maxwidth200', 2);
|
||||
} else {
|
||||
print '<input type="text" class="flat maxwidth75" name="search_'.$key.'" value="'.dol_escape_htmltag($search[$key]).'">';
|
||||
}
|
||||
} elseif (preg_match('/^(date|timestamp|datetime)/', $val['type'])) {
|
||||
print '<div class="nowrap">';
|
||||
print $form->selectDate($search[$key.'_dtstart'] ? $search[$key.'_dtstart'] : '', "search_".$key."_dtstart", 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From'));
|
||||
@ -592,6 +602,10 @@ while ($i < ($limit ? min($num, $limit) : $num)) {
|
||||
}
|
||||
print $user_temp->getNomUrl(-1);
|
||||
}
|
||||
} elseif ($key == 'lang') {
|
||||
$labellang = ($object->lang ? $langs->trans('Language_'.$object->lang) : '');
|
||||
print picto_from_langcode($object->lang, 'class="paddingrightonly saturatemedium opacitylow"');
|
||||
print $labellang;
|
||||
} else {
|
||||
print $object->showOutputField($val, $key, $object->$key, '');
|
||||
}
|
||||
|
||||
@ -48,7 +48,8 @@ CountriesNotInEEC=Countries not in EEC
|
||||
CountriesInEECExceptMe=Countries in EEC except %s
|
||||
CountriesExceptMe=All countries except %s
|
||||
AccountantFiles=Export source documents
|
||||
ExportAccountingSourceDocHelp=With this tool, you can export the source events (list and PDFs) that were used to generate your accountancy. To export your journals, use the menu entry %s - %s.
|
||||
ExportAccountingSourceDocHelp=With this tool, you can export the source events (list in CSV and PDFs) that were used to generate your accountancy.
|
||||
ExportAccountingSourceDocHelp2=To export your journals, use the menu entry %s - %s.
|
||||
VueByAccountAccounting=View by accounting account
|
||||
VueBySubAccountAccounting=View by accounting subaccount
|
||||
|
||||
@ -245,9 +246,9 @@ DescThirdPartyReport=Consult here the list of third-party customers and vendors
|
||||
ListAccounts=List of the accounting accounts
|
||||
UnknownAccountForThirdparty=Unknown third-party account. We will use %s
|
||||
UnknownAccountForThirdpartyBlocking=Unknown third-party account. Blocking error
|
||||
ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Third-party account not defined or third party unknown. We will use %s
|
||||
ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Subledger account not defined or third party or user unknown. We will use %s
|
||||
ThirdpartyAccountNotDefinedOrThirdPartyUnknownSubledgerIgnored=Third-party unknown and subledger not defined on the payment. We will keep the subledger account value empty.
|
||||
ThirdpartyAccountNotDefinedOrThirdPartyUnknownBlocking=Third-party account not defined or third party unknown. Blocking error.
|
||||
ThirdpartyAccountNotDefinedOrThirdPartyUnknownBlocking=Subledger account not defined or third party or user unknown. Blocking error.
|
||||
UnknownAccountForThirdpartyAndWaitingAccountNotDefinedBlocking=Unknown third-party account and waiting account not defined. Blocking error
|
||||
PaymentsNotLinkedToProduct=Payment not linked to any product / service
|
||||
OpeningBalance=Opening balance
|
||||
@ -338,7 +339,7 @@ Modelcsv_normal=Classic export
|
||||
Modelcsv_CEGID=Export for CEGID Expert Comptabilité
|
||||
Modelcsv_COALA=Export for Sage Coala
|
||||
Modelcsv_bob50=Export for Sage BOB 50
|
||||
Modelcsv_ciel=Export for Sage Ciel Compta or Compta Evolution
|
||||
Modelcsv_ciel=Export for Sage50, Ciel Compta or Compta Evo. (Format XIMPORT)
|
||||
Modelcsv_quadratus=Export for Quadratus QuadraCompta
|
||||
Modelcsv_ebp=Export for EBP
|
||||
Modelcsv_cogilog=Export for Cogilog
|
||||
|
||||
@ -85,6 +85,7 @@ NumberOfBytes=Number of Bytes
|
||||
SearchString=Search string
|
||||
NotAvailableWhenAjaxDisabled=Not available when Ajax disabled
|
||||
AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
|
||||
TimesheetPreventAfterFollowingMonths=Prevent recording time spent after the following number of months
|
||||
JavascriptDisabled=JavaScript disabled
|
||||
UsePreviewTabs=Use preview tabs
|
||||
ShowPreview=Show preview
|
||||
@ -117,6 +118,7 @@ MultiCurrencySetup=Multi-currency setup
|
||||
MenuLimits=Limits and accuracy
|
||||
MenuIdParent=Parent menu ID
|
||||
DetailMenuIdParent=ID of parent menu (empty for a top menu)
|
||||
ParentID=Parent ID
|
||||
DetailPosition=Sort number to define menu position
|
||||
AllMenus=All
|
||||
NotConfigured=Module/Application not configured
|
||||
@ -209,6 +211,7 @@ FeatureAvailableOnlyOnStable=Feature only available on official stable versions
|
||||
BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
|
||||
OnlyActiveElementsAreShown=Only elements from <a href="%s">enabled modules</a> are shown.
|
||||
ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button <span class="small valignmiddle">%s</span> of each module to enable or disable a module/application.
|
||||
ModulesDesc2=Click the wheel button <span class="small valignmiddle">%s</span> to configure the module/application.
|
||||
ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
|
||||
ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
|
||||
ModulesMarketPlaces=Find external app/modules
|
||||
@ -1190,6 +1193,9 @@ SetupDescription2=The following two sections are mandatory (the two first entrie
|
||||
SetupDescription3=<a href="%s">%s -> %s</a><br><br>Basic parameters used to customize the default behavior of your application (e.g for country-related features).
|
||||
SetupDescription4=<a href="%s">%s -> %s</a><br><br>This software is a suite of many modules/applications. The modules related to your needs must be enabled and configured. Menu entries will appears with the activation of these modules.
|
||||
SetupDescription5=Other Setup menu entries manage optional parameters.
|
||||
SetupDescriptionLink=<a href="%s">%s - %s</a>
|
||||
SetupDescription3b=Basic parameters used to customize the default behavior of your application (e.g for country-related features).
|
||||
SetupDescription4b=This software is a suite of many modules/applications. The modules related to your needs must be enabled and configured. Menu entries will appears with the activation of these modules.
|
||||
AuditedSecurityEvents=Security events that are audited
|
||||
NoSecurityEventsAreAduited=No security events are audited. You can enable them from menu %s
|
||||
Audit=Security events
|
||||
@ -1779,7 +1785,7 @@ ClickToDialSetup=Click To Dial module setup
|
||||
ClickToDialUrlDesc=Url called when a click on phone picto is done. In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
|
||||
ClickToDialDesc=This module change phone numbers, when using a desktop computer, into clickable links. A click will call the number. This can be used to start the phone call when using a soft phone on your desktop or when using a CTI system based on SIP protocol for example. Note: When using a smartphone, phone numbers are always clickable.
|
||||
ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
|
||||
ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface, installed on the same computer as the browser, and called when you click on a link starting with "tel:" in your browser. If you need link that start with "sip:" or a full server solution (no need of local software installation), you must set this to "No" and fill next field.
|
||||
ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface, installed on the same computer as the browser, and called when you click on a link starting with "tel:" in your browser. If you need a link that start with "sip:" or a full server solution (no need of local software installation), you must set this to "No" and fill the next field.
|
||||
##### Point Of Sale (CashDesk) #####
|
||||
CashDesk=Point of Sale
|
||||
CashDeskSetup=Point of Sales module setup
|
||||
@ -1989,6 +1995,8 @@ MAIN_PDF_MARGIN_TOP=Top margin on PDF
|
||||
MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
|
||||
MAIN_DOCUMENTS_LOGO_HEIGHT=Height for logo on PDF
|
||||
MAIN_GENERATE_PROPOSALS_WITH_PICTURE=Add picture on proposal line
|
||||
PROPOSAL_PDF_HIDE_PAYMENTTERM=Hide payments conditions
|
||||
PROPOSAL_PDF_HIDE_PAYMENTMODE=Hide payment mode
|
||||
MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING=Add electronic sign in PDF
|
||||
NothingToSetup=There is no specific setup required for this module.
|
||||
SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
|
||||
@ -2089,7 +2097,7 @@ LargerThan=Larger than
|
||||
IfTrackingIDFoundEventWillBeLinked=Note that If a tracking ID of an object is found into email, or if the email is an answer of an email aready collected and linked to an object, the created event will be automatically linked to the known related object.
|
||||
WithGMailYouCanCreateADedicatedPassword=With a GMail account, if you enabled the 2 steps validation, it is recommanded to create a dedicated second password for the application instead of using your own account passsword from https://myaccount.google.com/.
|
||||
EmailCollectorTargetDir=It may be a desired behaviour to move the email into another tag/directory when it was processed successfully. Just set name of directory here to use this feature (Do NOT use special characters in name). Note that you must also use a read/write login account.
|
||||
EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it. In the parameter field you can use for example 'EXTRACT:BODY:Name:\\s([^\\s]*)' if you want to extract the name of the thirdparty from a string 'Name: name to find' found into the body.
|
||||
EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it.<br>For example, if you want to create a thirdparty with a name extracted a string 'Name: name to find' found into the body, use sender email as email, you can set the parameter field like this:<br>'email=HEADER:^From:(.*);name=EXTRACT:BODY:Name:\\s([^\\s]*);client=SET:2;'<br>
|
||||
EndPointFor=End point for %s : %s
|
||||
DeleteEmailCollector=Delete email collector
|
||||
ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector?
|
||||
@ -2128,6 +2136,7 @@ AskThisIDToYourBank=Contact your bank to get this ID
|
||||
AdvancedModeOnly=Permision available in Advanced permission mode only
|
||||
ConfFileIsReadableOrWritableByAnyUsers=The conf file is readable or writable by any users. Give permission to web server user and group only.
|
||||
MailToSendEventOrganization=Event Organization
|
||||
MailToPartnership=Partnership
|
||||
AGENDA_EVENT_DEFAULT_STATUS=Default event status when creating a event from the form
|
||||
YouShouldDisablePHPFunctions=You should disable PHP functions
|
||||
IfCLINotRequiredYouShouldDisablePHPFunctions=Except if you need to run system commands in custom code, you shoud disable PHP functions
|
||||
@ -2148,3 +2157,5 @@ DatabasePasswordObfuscated=Database password is obfuscated in conf file
|
||||
DatabasePasswordNotObfuscated=Database password is NOT obfuscated in conf file
|
||||
APIsAreNotEnabled=APIs modules are not enabled
|
||||
YouShouldSetThisToOff=You should set this to 0 or off
|
||||
InstallAndUpgradeLockedBy=Install and upgrades are locked by the file <b>%s</b>
|
||||
OldImplementation=Old implementation
|
||||
|
||||
@ -128,3 +128,4 @@ PrintPaymentMethodOnReceipts=Print payment method on tickets|receipts
|
||||
WeighingScale=Weighing scale
|
||||
ShowPriceHT = Display the column with the price excluding tax (on screen)
|
||||
ShowPriceHTOnReceipt = Display the column with the price excluding tax (on the receipt)
|
||||
CustomerDisplay=Customer display
|
||||
|
||||
@ -264,6 +264,7 @@ ErrorAnAmountWithoutTaxIsRequired=Error, amount is mandatory
|
||||
ErrorAPercentIsRequired=Error, please fill in the percentage correctly
|
||||
ErrorYouMustFirstSetupYourChartOfAccount=You must first setup your chart of account
|
||||
ErrorFailedToFindEmailTemplate=Failed to find template with code name %s
|
||||
ErrorDurationForServiceNotDefinedCantCalculateHourlyPrice=Duration not defined on service. No way to calculate the hourly price.
|
||||
|
||||
# Warnings
|
||||
WarningParamUploadMaxFileSizeHigherThanPostMaxSize=Your PHP parameter upload_max_filesize (%s) is higher than PHP parameter post_max_size (%s). This is not a consistent setup.
|
||||
|
||||
@ -119,6 +119,8 @@ EventType = Event type
|
||||
LabelOfBooth=Booth label
|
||||
LabelOfconference=Conference label
|
||||
ConferenceIsNotConfirmed=Subcription not available, conference is not confirmed yet
|
||||
DateMustBeBeforeThan=%s must be before %s
|
||||
DateMustBeAfterThan=%s must be after %s
|
||||
|
||||
#
|
||||
# Vote page
|
||||
|
||||
@ -13,7 +13,7 @@ ToReviewCP=Awaiting approval
|
||||
ApprovedCP=Approved
|
||||
CancelCP=Canceled
|
||||
RefuseCP=Refused
|
||||
ValidatorCP=Approbator
|
||||
ValidatorCP=Approver
|
||||
ListeCP=List of leave
|
||||
Leave=Leave request
|
||||
LeaveId=Leave ID
|
||||
@ -39,11 +39,11 @@ TitreRequestCP=Leave request
|
||||
TypeOfLeaveId=Type of leave ID
|
||||
TypeOfLeaveCode=Type of leave code
|
||||
TypeOfLeaveLabel=Type of leave label
|
||||
NbUseDaysCP=Number of days of vacation consumed
|
||||
NbUseDaysCPHelp=The calculation takes into account the non working days and the holidays defined in the dictionary.
|
||||
NbUseDaysCPShort=Days consumed
|
||||
NbUseDaysCPShortInMonth=Days consumed in month
|
||||
DayIsANonWorkingDay=%s is a non working day
|
||||
NbUseDaysCP=Number of days of leave used
|
||||
NbUseDaysCPHelp=The calculation takes into account the non-working days and the holidays defined in the dictionary.
|
||||
NbUseDaysCPShort=Days of leave
|
||||
NbUseDaysCPShortInMonth=Days of leave in month
|
||||
DayIsANonWorkingDay=%s is a non-working day
|
||||
DateStartInMonth=Start date in month
|
||||
DateEndInMonth=End date in month
|
||||
EditCP=Edit
|
||||
@ -55,7 +55,7 @@ TitleDeleteCP=Delete the leave request
|
||||
ConfirmDeleteCP=Confirm the deletion of this leave request?
|
||||
ErrorCantDeleteCP=Error you don't have the right to delete this leave request.
|
||||
CantCreateCP=You don't have the right to make leave requests.
|
||||
InvalidValidatorCP=You must choose an approbator to your leave request.
|
||||
InvalidValidatorCP=You must choose the approver for your leave request.
|
||||
NoDateDebut=You must select a start date.
|
||||
NoDateFin=You must select an end date.
|
||||
ErrorDureeCP=Your leave request does not contain working day.
|
||||
@ -80,14 +80,14 @@ UserCP=User
|
||||
ErrorAddEventToUserCP=An error occurred while adding the exceptional leave.
|
||||
AddEventToUserOkCP=The addition of the exceptional leave has been completed.
|
||||
MenuLogCP=View change logs
|
||||
LogCP=Log of updates of available vacation days
|
||||
ActionByCP=Performed by
|
||||
UserUpdateCP=For the user
|
||||
LogCP=Log of all updates made to "Balance of Leave"
|
||||
ActionByCP=Updated by
|
||||
UserUpdateCP=Updated for
|
||||
PrevSoldeCP=Previous Balance
|
||||
NewSoldeCP=New Balance
|
||||
alreadyCPexist=A leave request has already been done on this period.
|
||||
FirstDayOfHoliday=First day of vacation
|
||||
LastDayOfHoliday=Last day of vacation
|
||||
FirstDayOfHoliday=Beginning day of leave request
|
||||
LastDayOfHoliday=Ending day of leave request
|
||||
BoxTitleLastLeaveRequests=Latest %s modified leave requests
|
||||
HolidaysMonthlyUpdate=Monthly update
|
||||
ManualUpdate=Manual update
|
||||
@ -104,8 +104,8 @@ LEAVE_SICK=Sick leave
|
||||
LEAVE_OTHER=Other leave
|
||||
LEAVE_PAID_FR=Paid vacation
|
||||
## Configuration du Module ##
|
||||
LastUpdateCP=Latest automatic update of leave allocation
|
||||
MonthOfLastMonthlyUpdate=Month of latest automatic update of leave allocation
|
||||
LastUpdateCP=Last automatic update of leave allocation
|
||||
MonthOfLastMonthlyUpdate=Month of last automatic update of leave allocation
|
||||
UpdateConfCPOK=Updated successfully.
|
||||
Module27130Name= Management of leave requests
|
||||
Module27130Desc= Management of leave requests
|
||||
@ -125,10 +125,12 @@ HolidaysCanceledBody=Your leave request for %s to %s has been canceled.
|
||||
FollowedByACounter=1: This type of leave need to be followed by a counter. Counter is incremented manually or automatically and when a leave request is validated, counter is decremented.<br>0: Not followed by a counter.
|
||||
NoLeaveWithCounterDefined=There is no leave types defined that need to be followed by a counter
|
||||
GoIntoDictionaryHolidayTypes=Go into <strong>Home - Setup - Dictionaries - Type of leave</strong> to setup the different types of leaves.
|
||||
HolidaySetup=Setup of module Holiday
|
||||
HolidaysNumberingModules=Leave requests numbering models
|
||||
HolidaySetup=Setup of module Leave
|
||||
HolidaysNumberingModules=Numbering models for leave requests
|
||||
TemplatePDFHolidays=Template for leave requests PDF
|
||||
FreeLegalTextOnHolidays=Free text on PDF
|
||||
WatermarkOnDraftHolidayCards=Watermarks on draft leave requests
|
||||
HolidaysToApprove=Holidays to approve
|
||||
NobodyHasPermissionToValidateHolidays=Nobody has permission to validate holidays
|
||||
HolidayBalanceMonthlyUpdate=Monthly update of holiday balance
|
||||
XIsAUsualNonWorkingDay=%s is usualy a NON working day
|
||||
|
||||
@ -64,5 +64,5 @@ InterLineDuration=Line duration intervention
|
||||
InterLineDesc=Line description intervention
|
||||
RepeatableIntervention=Template of intervention
|
||||
ToCreateAPredefinedIntervention=To create a predefined or recurring intervention, create a common intervention and convert it into intervention template
|
||||
Reopen=Reopen
|
||||
ConfirmReopenIntervention=Are you sure you want to open back the intervention <b>%s</b>?
|
||||
GenerateInter=Generate intervention
|
||||
|
||||
@ -37,15 +37,7 @@ About = About
|
||||
KnowledgeManagementAbout = About Knowledge Management
|
||||
KnowledgeManagementAboutPage = Knowledge Management about page
|
||||
|
||||
#
|
||||
# Sample page
|
||||
#
|
||||
KnowledgeManagementArea = Knowledge Management
|
||||
|
||||
|
||||
#
|
||||
# Menu
|
||||
#
|
||||
MenuKnowledgeRecord = Knowledge base
|
||||
ListKnowledgeRecord = List of articles
|
||||
NewKnowledgeRecord = New article
|
||||
@ -53,3 +45,5 @@ ValidateReply = Validate solution
|
||||
KnowledgeRecords = Articles
|
||||
KnowledgeRecord = Article
|
||||
KnowledgeRecordExtraFields = Extrafields for Article
|
||||
GroupOfTicket=Group of tickets
|
||||
YouCanLinkArticleToATicketCategory=You can link an article to a ticket group (so the article will be suggested during qualification of new tickets)
|
||||
|
||||
@ -2,8 +2,10 @@
|
||||
Language_am_ET=Ethiopian
|
||||
Language_ar_AR=Arabic
|
||||
Language_ar_EG=Arabic (Egypt)
|
||||
Language_ar_MA=Arabic (Moroco)
|
||||
Language_ar_SA=Arabic
|
||||
Language_ar_TN=Arabic (Tunisia)
|
||||
Language_ar_IQ=Arabic (Iraq)
|
||||
Language_az_AZ=Azerbaijani
|
||||
Language_bn_BD=Bengali
|
||||
Language_bn_IN=Bengali (India)
|
||||
@ -83,6 +85,7 @@ Language_ne_NP=Nepali
|
||||
Language_nl_BE=Dutch (Belgium)
|
||||
Language_nl_NL=Dutch
|
||||
Language_pl_PL=Polish
|
||||
Language_pt_AO=Portuguese (Angola)
|
||||
Language_pt_BR=Portuguese (Brazil)
|
||||
Language_pt_PT=Portuguese
|
||||
Language_ro_MD=Romanian (Moldavia)
|
||||
|
||||
@ -162,8 +162,8 @@ AdvTgtDeleteFilter=Delete filter
|
||||
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
|
||||
NoContactWithCategoryFound=No category found linked to some contacts/addresses
|
||||
NoContactLinkedToThirdpartieWithCategoryFound=No category found linked to some thirdparties
|
||||
OutGoingEmailSetup=Outgoing emails
|
||||
InGoingEmailSetup=Incoming emails
|
||||
OutGoingEmailSetupForEmailing=Outgoing emails (for module %s)
|
||||
|
||||
@ -1137,3 +1137,15 @@ CopiedToClipboard=Copied to clipboard
|
||||
InformationOnLinkToContract=This amount is only the total of all the lines of the contract. No notion of time is taken into consideration.
|
||||
ConfirmCancel=Are you sure you want to cancel
|
||||
EmailMsgID=Email MsgID
|
||||
SetToEnabled=Set to enabled
|
||||
SetToDisabled=Set to disabled
|
||||
ConfirmMassEnabling=mass enabling confirmation
|
||||
ConfirmMassEnablingQuestion=Are you sure you want to enable the %s selected record(s)?
|
||||
ConfirmMassDisabling=mass disabling confirmation
|
||||
ConfirmMassDisablingQuestion=Are you sure you want to disable the %s selected record(s)?
|
||||
RecordsEnabled=%s record(s) enabled
|
||||
RecordsDisabled=%s record(s) disabled
|
||||
RecordEnabled=Record enabled
|
||||
RecordDisabled=Record disabled
|
||||
Forthcoming=Forthcoming
|
||||
Currently=Currently
|
||||
|
||||
@ -291,3 +291,7 @@ PopuCom=Products/Services by popularity in Orders
|
||||
ProductStatistics=Products/Services Statistics
|
||||
NbOfQtyInOrders=Qty in orders
|
||||
SelectTheTypeOfObjectToAnalyze=Select an object to view its statistics...
|
||||
|
||||
ConfirmBtnCommonContent = Are you sure you want to "%s" ?
|
||||
ConfirmBtnCommonTitle = Confirm your action
|
||||
CloseDialog = Close
|
||||
|
||||
@ -77,6 +77,10 @@ YourPartnershipRefusedContent=We inform you that your partnership request has be
|
||||
YourPartnershipAcceptedContent=We inform you that your partnership request has been accepted.
|
||||
YourPartnershipCanceledContent=We inform you that your partnership has been canceled.
|
||||
|
||||
CountLastUrlCheckError=Number of errors for last URL check
|
||||
LastCheckBacklink=Date of last URL check
|
||||
ReasonDeclineOrCancel=Decline reason
|
||||
|
||||
#
|
||||
# Status
|
||||
#
|
||||
|
||||
@ -341,7 +341,7 @@ ProductSheet=Product sheet
|
||||
ServiceSheet=Service sheet
|
||||
PossibleValues=Possible values
|
||||
GoOnMenuToCreateVairants=Go on menu %s - %s to prepare attribute variants (like colors, size, ...)
|
||||
UseProductFournDesc=Add a feature to define the descriptions of products defined by the vendors in addition to descriptions for customers
|
||||
UseProductFournDesc=Add a feature to define the product description defined by the vendors (for each vendor reference) in addition to the description for customers
|
||||
ProductSupplierDescription=Vendor description for the product
|
||||
UseProductSupplierPackaging=Use packaging on supplier prices (recalculate quantities according to packaging set on supplier price when adding/updating line in supplier documents)
|
||||
PackagingForThisProduct=Packaging
|
||||
|
||||
@ -140,6 +140,7 @@ NoTasks=No tasks for this project
|
||||
LinkedToAnotherCompany=Linked to other third party
|
||||
TaskIsNotAssignedToUser=Task not assigned to user. Use button '<strong>%s</strong>' to assign task now.
|
||||
ErrorTimeSpentIsEmpty=Time spent is empty
|
||||
TimeRecordingRestrictedToNMonthsBack=Time recording is restricted to %s months back
|
||||
ThisWillAlsoRemoveTasks=This action will also delete all tasks of project (<b>%s</b> tasks at the moment) and all inputs of time spent.
|
||||
IfNeedToUseOtherObjectKeepEmpty=If some objects (invoice, order, ...), belonging to another third party, must be linked to the project to create, keep this empty to have the project being multi third parties.
|
||||
CloneTasks=Clone tasks
|
||||
@ -241,6 +242,7 @@ LatestModifiedProjects=Latest %s modified projects
|
||||
OtherFilteredTasks=Other filtered tasks
|
||||
NoAssignedTasks=No assigned tasks found (assign project/tasks to the current user from the top select box to enter time on it)
|
||||
ThirdPartyRequiredToGenerateInvoice=A third party must be defined on project to be able to invoice it.
|
||||
ThirdPartyRequiredToGenerateInvoice=A third party must be defined on project to be able to invoice it.
|
||||
ChooseANotYetAssignedTask=Choose a task not yet assigned to you
|
||||
# Comments trans
|
||||
AllowCommentOnTask=Allow user comments on tasks
|
||||
@ -252,10 +254,12 @@ SendProjectRef=Information project %s
|
||||
ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Salaries' must be enabled to define employee hourly rate to have time spent valorized
|
||||
NewTaskRefSuggested=Task ref already used, a new task ref is required
|
||||
TimeSpentInvoiced=Time spent billed
|
||||
TimeSpentForIntervention=Time spent
|
||||
TimeSpentForInvoice=Time spent
|
||||
OneLinePerUser=One line per user
|
||||
ServiceToUseOnLines=Service to use on lines
|
||||
InvoiceGeneratedFromTimeSpent=Invoice %s has been generated from time spent on project
|
||||
InterventionGeneratedFromTimeSpent=Intervention %s has been generated from time spent on project
|
||||
ProjectBillTimeDescription=Check if you enter timesheet on tasks of project AND you plan to generate invoice(s) from the timesheet to bill the customer of the project (do not check if you plan to create invoice that is not based on entered timesheets). Note: To generate invoice, go on tab 'Time spent' of the project and select lines to include.
|
||||
ProjectFollowOpportunity=Follow opportunity
|
||||
ProjectFollowTasks=Follow tasks or time spent
|
||||
@ -264,7 +268,9 @@ UsageOpportunity=Usage: Opportunity
|
||||
UsageTasks=Usage: Tasks
|
||||
UsageBillTimeShort=Usage: Bill time
|
||||
InvoiceToUse=Draft invoice to use
|
||||
InterToUse=Draft intervention to use
|
||||
NewInvoice=New invoice
|
||||
NewInter=New intervention
|
||||
OneLinePerTask=One line per task
|
||||
OneLinePerPeriod=One line per period
|
||||
OneLinePerTimeSpentLine=One line for each time spent declaration
|
||||
|
||||
@ -60,7 +60,7 @@ EnhancedValueOfWarehouses=Warehouses value
|
||||
UserWarehouseAutoCreate=Create a user warehouse automatically when creating a user
|
||||
AllowAddLimitStockByWarehouse=Manage also value for minimum and desired stock per pairing (product-warehouse) in addition to the value for minimum and desired stock per product
|
||||
RuleForWarehouse=Rule for warehouses
|
||||
WarehouseAskWarehouseOnThirparty=Set a warehouse on third-party
|
||||
WarehouseAskWarehouseOnThirparty=Set a warehouse on Third-parties
|
||||
WarehouseAskWarehouseDuringPropal=Set a warehouse on Commercial proposals
|
||||
WarehouseAskWarehouseDuringOrder=Set a warehouse on Sale orders
|
||||
UserDefaultWarehouse=Set a warehouse on Users
|
||||
@ -167,8 +167,8 @@ MovementTransferStock=Stock transfer of product %s into another warehouse
|
||||
InventoryCodeShort=Inv./Mov. code
|
||||
NoPendingReceptionOnSupplierOrder=No pending reception due to open purchase order
|
||||
ThisSerialAlreadyExistWithDifferentDate=This lot/serial number (<strong>%s</strong>) already exists but with different eatby or sellby date (found <strong>%s</strong> but you enter <strong>%s</strong>).
|
||||
OpenAll=Open for all actions
|
||||
OpenInternal=Open only for internal actions
|
||||
OpenAnyMovement=Open (all movement)
|
||||
OpenInternal=Open (only internal movement)
|
||||
UseDispatchStatus=Use a dispatch status (approve/refuse) for product lines on purchase order reception
|
||||
OptionMULTIPRICESIsOn=Option "several prices per segment" is on. It means a product has several selling price so value for sell can't be calculated
|
||||
ProductStockWarehouseCreated=Stock limit for alert and desired optimal stock correctly created
|
||||
@ -256,3 +256,8 @@ AutofillWithExpected=Fill real quantity with expected quantity
|
||||
ShowAllBatchByDefault=By default, show batch details on product "stock" tab
|
||||
CollapseBatchDetailHelp=You can set batch detail default display in stocks module configuration
|
||||
FieldCannotBeNegative=Field "%s" cannot be negative
|
||||
ErrorWrongBarcodemode=Unknown Barcode mode
|
||||
ProductDoesNotExist=Product does not exist
|
||||
ErrorSameBatchNumber=Same batch number found in inventory list
|
||||
ProductBatchDoesNotExist=Product with batch/serial does not exist
|
||||
ProductBarcodeDoesNotExist=Product with barcode does not exist
|
||||
|
||||
@ -66,7 +66,7 @@ NeedMoreInformation=Waiting for reporter feedback
|
||||
NeedMoreInformationShort=Waiting for feedback
|
||||
Answered=Answered
|
||||
Waiting=Waiting
|
||||
Closed=Closed
|
||||
SolvedClosed=Solved
|
||||
Deleted=Deleted
|
||||
|
||||
# Dict
|
||||
@ -186,9 +186,11 @@ TicketSeverity=Severity
|
||||
ShowTicket=See ticket
|
||||
RelatedTickets=Related tickets
|
||||
TicketAddIntervention=Create intervention
|
||||
CloseTicket=Close ticket
|
||||
CloseATicket=Close a ticket
|
||||
CloseTicket=Close|Solve ticket
|
||||
AbandonTicket=Abandon ticket
|
||||
CloseATicket=Close|Solve a ticket
|
||||
ConfirmCloseAticket=Confirm ticket closing
|
||||
ConfirmAbandonTicket=Do you confirm the closing of the ticket to status 'Abandonned'
|
||||
ConfirmDeleteTicket=Please confirm ticket deleting
|
||||
TicketDeletedSuccess=Ticket deleted with success
|
||||
TicketMarkedAsClosed=Ticket marked as closed
|
||||
|
||||
@ -33,7 +33,7 @@ ExpenseReportCanceledMessage=The expense report %s was canceled.<br> - User: %s<
|
||||
ExpenseReportPaid=An expense report was paid
|
||||
ExpenseReportPaidMessage=The expense report %s was paid.<br> - User: %s<br> - Paid by: %s<br>Click here to show the expense report: %s
|
||||
TripId=Id expense report
|
||||
AnyOtherInThisListCanValidate=Person to inform for validation.
|
||||
AnyOtherInThisListCanValidate=Person to be informed for validating the request.
|
||||
TripSociete=Information company
|
||||
TripNDF=Informations expense report
|
||||
PDFStandardExpenseReports=Standard template to generate a PDF document for expense report
|
||||
@ -90,7 +90,6 @@ DATE_REFUS=Deny date
|
||||
DATE_SAVE=Validation date
|
||||
DATE_CANCEL=Cancelation date
|
||||
DATE_PAIEMENT=Payment date
|
||||
BROUILLONNER=Reopen
|
||||
ExpenseReportRef=Ref. expense report
|
||||
ValidateAndSubmit=Validate and submit for approval
|
||||
ValidatedWaitingApproval=Validated (waiting for approval)
|
||||
@ -110,7 +109,7 @@ ExpenseReportPayment=Expense report payment
|
||||
ExpenseReportsToApprove=Expense reports to approve
|
||||
ExpenseReportsToPay=Expense reports to pay
|
||||
ConfirmCloneExpenseReport=Are you sure you want to clone this expense report ?
|
||||
ExpenseReportsIk=Expense report milles index
|
||||
ExpenseReportsIk=Configuration of mileage charges
|
||||
ExpenseReportsRules=Expense report rules
|
||||
ExpenseReportIkDesc=You can modify the calculation of kilometers expense by category and range who they are previously defined. <b>d</b> is the distance in kilometers
|
||||
ExpenseReportRulesDesc=You can create or update any rules of calculation. This part will be used when user will create a new expense report
|
||||
@ -145,7 +144,7 @@ nolimitbyEX_DAY=by day (no limitation)
|
||||
nolimitbyEX_MON=by month (no limitation)
|
||||
nolimitbyEX_YEA=by year (no limitation)
|
||||
nolimitbyEX_EXP=by line (no limitation)
|
||||
CarCategory=Category of car
|
||||
CarCategory=Vehicle category
|
||||
ExpenseRangeOffset=Offset amount: %s
|
||||
RangeIk=Mileage range
|
||||
AttachTheNewLineToTheDocument=Attach the line to an uploaded document
|
||||
|
||||
@ -45,6 +45,7 @@ WithdrawRequestsDone=%s direct debit payment requests recorded
|
||||
BankTransferRequestsDone=%s credit transfer requests recorded
|
||||
ThirdPartyBankCode=Third-party bank code
|
||||
NoInvoiceCouldBeWithdrawed=No invoice debited successfully. Check that invoices are on companies with a valid IBAN and that IBAN has a UMR (Unique Mandate Reference) with mode <strong>%s</strong>.
|
||||
WithdrawalCantBeCreditedTwice=This withdrawal receipt is already marked as credited; this can't be done twice, as this would potentially create duplicate payments and bank entries.
|
||||
ClassCredited=Classify credited
|
||||
ClassCreditedConfirm=Are you sure you want to classify this withdrawal receipt as credited on your bank account?
|
||||
TransData=Transmission date
|
||||
@ -132,8 +133,7 @@ SEPARCUR=SEPA CUR
|
||||
SEPAFRST=SEPA FRST
|
||||
ExecutionDate=Execution date
|
||||
CreateForSepa=Create direct debit file
|
||||
ICS=Creditor Identifier CI for direct debit
|
||||
ICSTransfer=Creditor Identifier CI for bank transfer
|
||||
ICS=Creditor Identifier - ICS
|
||||
END_TO_END="EndToEndId" SEPA XML tag - Unique id assigned per transaction
|
||||
USTRD="Unstructured" SEPA XML tag
|
||||
ADDDAYS=Add days to Execution Date
|
||||
|
||||
@ -13,6 +13,7 @@ descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=Classify linked source proposal as b
|
||||
descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Classify linked source sales order as billed when customer invoice is validated (and if the amount of the invoice is the same as the total amount of the linked order)
|
||||
descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Classify linked source sales order as billed when customer invoice is set to paid (and if the amount of the invoice is the same as the total amount of the linked order)
|
||||
descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Classify linked source sales order as shipped when a shipment is validated (and if the quantity shipped by all shipments is the same as in the order to update)
|
||||
descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING_CLOSED=Classify linked source sales order as shipped when a shipment is closed (and if the quantity shipped by all shipments is the same as in the order to update)
|
||||
# Autoclassify purchase order
|
||||
descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Classify linked source vendor proposal as billed when vendor invoice is validated (and if the amount of the invoice is the same as the total amount of the linked proposal)
|
||||
descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Classify linked source purchase order as billed when vendor invoice is validated (and if the amount of the invoice is the same as the total amount of the linked order)
|
||||
|
||||
@ -1,2 +0,0 @@
|
||||
# Dolibarr language file - Source file is en_US - accountancy
|
||||
ExportAccountingSourceDocHelp=With this tool, you can export the source events (list and PDFs) that were used to generate your accountancy. To export your journals, use the menu entry %s - %s.
|
||||
@ -19,6 +19,7 @@ FormatDateHourShort=%m/%d/%Y %I:%M %p
|
||||
FormatDateHourSecShort=%m/%d/%Y %I:%M:%S %p
|
||||
FormatDateHourTextShort=%b %d, %Y, %I:%M %p
|
||||
FormatDateHourText=%B %d, %Y, %I:%M %p
|
||||
Closed=مقفول
|
||||
Closed2=مقفول
|
||||
CloseAs=اضبط الحالة على
|
||||
RefSupplier=المرجع. مورد
|
||||
|
||||
@ -1,3 +1,2 @@
|
||||
# Dolibarr language file - Source file is en_US - ticket
|
||||
Closed=مقفول
|
||||
TicketSettings=الإعدادات
|
||||
|
||||
@ -48,7 +48,8 @@ CountriesNotInEEC=Countries not in EEC
|
||||
CountriesInEECExceptMe=Countries in EEC except %s
|
||||
CountriesExceptMe=All countries except %s
|
||||
AccountantFiles=Export source documents
|
||||
ExportAccountingSourceDocHelp=With this tool, you can export the source events (list and PDFs) that were used to generate your accountancy. To export your journals, use the menu entry %s - %s.
|
||||
ExportAccountingSourceDocHelp=With this tool, you can export the source events (list in CSV and PDFs) that were used to generate your accountancy.
|
||||
ExportAccountingSourceDocHelp2=To export your journals, use the menu entry %s - %s.
|
||||
VueByAccountAccounting=View by accounting account
|
||||
VueBySubAccountAccounting=View by accounting subaccount
|
||||
|
||||
@ -245,9 +246,9 @@ DescThirdPartyReport=Consult here the list of third-party customers and vendors
|
||||
ListAccounts=List of the accounting accounts
|
||||
UnknownAccountForThirdparty=Unknown third-party account. We will use %s
|
||||
UnknownAccountForThirdpartyBlocking=Unknown third-party account. Blocking error
|
||||
ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Third-party account not defined or third party unknown. We will use %s
|
||||
ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Subledger account not defined or third party or user unknown. We will use %s
|
||||
ThirdpartyAccountNotDefinedOrThirdPartyUnknownSubledgerIgnored=Third-party unknown and subledger not defined on the payment. We will keep the subledger account value empty.
|
||||
ThirdpartyAccountNotDefinedOrThirdPartyUnknownBlocking=Third-party account not defined or third party unknown. Blocking error.
|
||||
ThirdpartyAccountNotDefinedOrThirdPartyUnknownBlocking=Subledger account not defined or third party or user unknown. Blocking error.
|
||||
UnknownAccountForThirdpartyAndWaitingAccountNotDefinedBlocking=Unknown third-party account and waiting account not defined. Blocking error
|
||||
PaymentsNotLinkedToProduct=Payment not linked to any product / service
|
||||
OpeningBalance=Opening balance
|
||||
@ -338,7 +339,7 @@ Modelcsv_normal=Classic export
|
||||
Modelcsv_CEGID=Export for CEGID Expert Comptabilité
|
||||
Modelcsv_COALA=Export for Sage Coala
|
||||
Modelcsv_bob50=Export for Sage BOB 50
|
||||
Modelcsv_ciel=Export for Sage Ciel Compta or Compta Evolution
|
||||
Modelcsv_ciel=Export for Sage50, Ciel Compta or Compta Evo. (Format XIMPORT)
|
||||
Modelcsv_quadratus=Export for Quadratus QuadraCompta
|
||||
Modelcsv_ebp=Export for EBP
|
||||
Modelcsv_cogilog=Export for Cogilog
|
||||
|
||||
@ -85,6 +85,7 @@ NumberOfBytes=Number of Bytes
|
||||
SearchString=Search string
|
||||
NotAvailableWhenAjaxDisabled=Not available when Ajax disabled
|
||||
AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
|
||||
TimesheetPreventAfterFollowingMonths=Prevent recording time spent after the following number of months
|
||||
JavascriptDisabled=JavaScript disabled
|
||||
UsePreviewTabs=Use preview tabs
|
||||
ShowPreview=Show preview
|
||||
@ -117,6 +118,7 @@ MultiCurrencySetup=Multi-currency setup
|
||||
MenuLimits=Limits and accuracy
|
||||
MenuIdParent=Parent menu ID
|
||||
DetailMenuIdParent=ID of parent menu (empty for a top menu)
|
||||
ParentID=Parent ID
|
||||
DetailPosition=Sort number to define menu position
|
||||
AllMenus=All
|
||||
NotConfigured=Module/Application not configured
|
||||
@ -209,6 +211,7 @@ FeatureAvailableOnlyOnStable=Feature only available on official stable versions
|
||||
BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
|
||||
OnlyActiveElementsAreShown=Only elements from <a href="%s">enabled modules</a> are shown.
|
||||
ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button <span class="small valignmiddle">%s</span> of each module to enable or disable a module/application.
|
||||
ModulesDesc2=Click the wheel button <span class="small valignmiddle">%s</span> to configure the module/application.
|
||||
ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
|
||||
ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
|
||||
ModulesMarketPlaces=Find external app/modules
|
||||
@ -1190,6 +1193,9 @@ SetupDescription2=The following two sections are mandatory (the two first entrie
|
||||
SetupDescription3=<a href="%s">%s -> %s</a><br><br>Basic parameters used to customize the default behavior of your application (e.g for country-related features).
|
||||
SetupDescription4=<a href="%s">%s -> %s</a><br><br>This software is a suite of many modules/applications. The modules related to your needs must be enabled and configured. Menu entries will appears with the activation of these modules.
|
||||
SetupDescription5=Other Setup menu entries manage optional parameters.
|
||||
SetupDescriptionLink=<a href="%s">%s - %s</a>
|
||||
SetupDescription3b=Basic parameters used to customize the default behavior of your application (e.g for country-related features).
|
||||
SetupDescription4b=This software is a suite of many modules/applications. The modules related to your needs must be enabled and configured. Menu entries will appears with the activation of these modules.
|
||||
AuditedSecurityEvents=Security events that are audited
|
||||
NoSecurityEventsAreAduited=No security events are audited. You can enable them from menu %s
|
||||
Audit=Security events
|
||||
@ -1779,7 +1785,7 @@ ClickToDialSetup=Click To Dial module setup
|
||||
ClickToDialUrlDesc=Url called when a click on phone picto is done. In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
|
||||
ClickToDialDesc=This module change phone numbers, when using a desktop computer, into clickable links. A click will call the number. This can be used to start the phone call when using a soft phone on your desktop or when using a CTI system based on SIP protocol for example. Note: When using a smartphone, phone numbers are always clickable.
|
||||
ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
|
||||
ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface, installed on the same computer as the browser, and called when you click on a link starting with "tel:" in your browser. If you need link that start with "sip:" or a full server solution (no need of local software installation), you must set this to "No" and fill next field.
|
||||
ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface, installed on the same computer as the browser, and called when you click on a link starting with "tel:" in your browser. If you need a link that start with "sip:" or a full server solution (no need of local software installation), you must set this to "No" and fill the next field.
|
||||
##### Point Of Sale (CashDesk) #####
|
||||
CashDesk=Point of Sale
|
||||
CashDeskSetup=Point of Sales module setup
|
||||
@ -1989,6 +1995,8 @@ MAIN_PDF_MARGIN_TOP=Top margin on PDF
|
||||
MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
|
||||
MAIN_DOCUMENTS_LOGO_HEIGHT=Height for logo on PDF
|
||||
MAIN_GENERATE_PROPOSALS_WITH_PICTURE=Add picture on proposal line
|
||||
PROPOSAL_PDF_HIDE_PAYMENTTERM=Hide payments conditions
|
||||
PROPOSAL_PDF_HIDE_PAYMENTMODE=Hide payment mode
|
||||
MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING=Add electronic sign in PDF
|
||||
NothingToSetup=There is no specific setup required for this module.
|
||||
SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
|
||||
@ -2089,7 +2097,7 @@ LargerThan=Larger than
|
||||
IfTrackingIDFoundEventWillBeLinked=Note that If a tracking ID of an object is found into email, or if the email is an answer of an email aready collected and linked to an object, the created event will be automatically linked to the known related object.
|
||||
WithGMailYouCanCreateADedicatedPassword=With a GMail account, if you enabled the 2 steps validation, it is recommanded to create a dedicated second password for the application instead of using your own account passsword from https://myaccount.google.com/.
|
||||
EmailCollectorTargetDir=It may be a desired behaviour to move the email into another tag/directory when it was processed successfully. Just set name of directory here to use this feature (Do NOT use special characters in name). Note that you must also use a read/write login account.
|
||||
EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it. In the parameter field you can use for example 'EXTRACT:BODY:Name:\\s([^\\s]*)' if you want to extract the name of the thirdparty from a string 'Name: name to find' found into the body.
|
||||
EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it.<br>For example, if you want to create a thirdparty with a name extracted a string 'Name: name to find' found into the body, use sender email as email, you can set the parameter field like this:<br>'email=HEADER:^From:(.*);name=EXTRACT:BODY:Name:\\s([^\\s]*);client=SET:2;'<br>
|
||||
EndPointFor=End point for %s : %s
|
||||
DeleteEmailCollector=Delete email collector
|
||||
ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector?
|
||||
@ -2128,6 +2136,7 @@ AskThisIDToYourBank=Contact your bank to get this ID
|
||||
AdvancedModeOnly=Permision available in Advanced permission mode only
|
||||
ConfFileIsReadableOrWritableByAnyUsers=The conf file is readable or writable by any users. Give permission to web server user and group only.
|
||||
MailToSendEventOrganization=Event Organization
|
||||
MailToPartnership=Partnership
|
||||
AGENDA_EVENT_DEFAULT_STATUS=Default event status when creating a event from the form
|
||||
YouShouldDisablePHPFunctions=You should disable PHP functions
|
||||
IfCLINotRequiredYouShouldDisablePHPFunctions=Except if you need to run system commands in custom code, you shoud disable PHP functions
|
||||
@ -2148,3 +2157,5 @@ DatabasePasswordObfuscated=Database password is obfuscated in conf file
|
||||
DatabasePasswordNotObfuscated=Database password is NOT obfuscated in conf file
|
||||
APIsAreNotEnabled=APIs modules are not enabled
|
||||
YouShouldSetThisToOff=You should set this to 0 or off
|
||||
InstallAndUpgradeLockedBy=Install and upgrades are locked by the file <b>%s</b>
|
||||
OldImplementation=Old implementation
|
||||
|
||||
@ -128,3 +128,4 @@ PrintPaymentMethodOnReceipts=Print payment method on tickets|receipts
|
||||
WeighingScale=Weighing scale
|
||||
ShowPriceHT = Display the column with the price excluding tax (on screen)
|
||||
ShowPriceHTOnReceipt = Display the column with the price excluding tax (on the receipt)
|
||||
CustomerDisplay=Customer display
|
||||
|
||||
@ -264,6 +264,7 @@ ErrorAnAmountWithoutTaxIsRequired=Error, amount is mandatory
|
||||
ErrorAPercentIsRequired=Error, please fill in the percentage correctly
|
||||
ErrorYouMustFirstSetupYourChartOfAccount=You must first setup your chart of account
|
||||
ErrorFailedToFindEmailTemplate=Failed to find template with code name %s
|
||||
ErrorDurationForServiceNotDefinedCantCalculateHourlyPrice=Duration not defined on service. No way to calculate the hourly price.
|
||||
|
||||
# Warnings
|
||||
WarningParamUploadMaxFileSizeHigherThanPostMaxSize=Your PHP parameter upload_max_filesize (%s) is higher than PHP parameter post_max_size (%s). This is not a consistent setup.
|
||||
|
||||
@ -119,6 +119,8 @@ EventType = Event type
|
||||
LabelOfBooth=Booth label
|
||||
LabelOfconference=Conference label
|
||||
ConferenceIsNotConfirmed=Subcription not available, conference is not confirmed yet
|
||||
DateMustBeBeforeThan=%s must be before %s
|
||||
DateMustBeAfterThan=%s must be after %s
|
||||
|
||||
#
|
||||
# Vote page
|
||||
|
||||
@ -132,3 +132,5 @@ FreeLegalTextOnHolidays=Free text on PDF
|
||||
WatermarkOnDraftHolidayCards=Watermarks on draft leave requests
|
||||
HolidaysToApprove=Holidays to approve
|
||||
NobodyHasPermissionToValidateHolidays=Nobody has permission to validate holidays
|
||||
HolidayBalanceMonthlyUpdate=Monthly update of holiday balance
|
||||
XIsAUsualNonWorkingDay=%s is usualy a NON working day
|
||||
|
||||
@ -64,5 +64,5 @@ InterLineDuration=Line duration intervention
|
||||
InterLineDesc=Line description intervention
|
||||
RepeatableIntervention=Template of intervention
|
||||
ToCreateAPredefinedIntervention=To create a predefined or recurring intervention, create a common intervention and convert it into intervention template
|
||||
Reopen=Reopen
|
||||
ConfirmReopenIntervention=Are you sure you want to open back the intervention <b>%s</b>?
|
||||
GenerateInter=Generate intervention
|
||||
|
||||
@ -37,15 +37,7 @@ About = About
|
||||
KnowledgeManagementAbout = About Knowledge Management
|
||||
KnowledgeManagementAboutPage = Knowledge Management about page
|
||||
|
||||
#
|
||||
# Sample page
|
||||
#
|
||||
KnowledgeManagementArea = Knowledge Management
|
||||
|
||||
|
||||
#
|
||||
# Menu
|
||||
#
|
||||
MenuKnowledgeRecord = Knowledge base
|
||||
ListKnowledgeRecord = List of articles
|
||||
NewKnowledgeRecord = New article
|
||||
@ -53,3 +45,5 @@ ValidateReply = Validate solution
|
||||
KnowledgeRecords = Articles
|
||||
KnowledgeRecord = Article
|
||||
KnowledgeRecordExtraFields = Extrafields for Article
|
||||
GroupOfTicket=Group of tickets
|
||||
YouCanLinkArticleToATicketCategory=You can link an article to a ticket group (so the article will be suggested during qualification of new tickets)
|
||||
|
||||
@ -2,8 +2,10 @@
|
||||
Language_am_ET=Ethiopian
|
||||
Language_ar_AR=Arabic
|
||||
Language_ar_EG=Arabic (Egypt)
|
||||
Language_ar_MA=Arabic (Moroco)
|
||||
Language_ar_SA=Arabic
|
||||
Language_ar_TN=Arabic (Tunisia)
|
||||
Language_ar_IQ=Arabic (Iraq)
|
||||
Language_az_AZ=Azerbaijani
|
||||
Language_bn_BD=Bengali
|
||||
Language_bn_IN=Bengali (India)
|
||||
@ -83,6 +85,7 @@ Language_ne_NP=Nepali
|
||||
Language_nl_BE=Dutch (Belgium)
|
||||
Language_nl_NL=Dutch
|
||||
Language_pl_PL=Polish
|
||||
Language_pt_AO=Portuguese (Angola)
|
||||
Language_pt_BR=Portuguese (Brazil)
|
||||
Language_pt_PT=Portuguese
|
||||
Language_ro_MD=Romanian (Moldavia)
|
||||
|
||||
@ -162,8 +162,8 @@ AdvTgtDeleteFilter=Delete filter
|
||||
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
|
||||
NoContactWithCategoryFound=No category found linked to some contacts/addresses
|
||||
NoContactLinkedToThirdpartieWithCategoryFound=No category found linked to some thirdparties
|
||||
OutGoingEmailSetup=Outgoing emails
|
||||
InGoingEmailSetup=Incoming emails
|
||||
OutGoingEmailSetupForEmailing=Outgoing emails (for module %s)
|
||||
|
||||
@ -1137,3 +1137,15 @@ CopiedToClipboard=Copied to clipboard
|
||||
InformationOnLinkToContract=This amount is only the total of all the lines of the contract. No notion of time is taken into consideration.
|
||||
ConfirmCancel=Are you sure you want to cancel
|
||||
EmailMsgID=Email MsgID
|
||||
SetToEnabled=Set to enabled
|
||||
SetToDisabled=Set to disabled
|
||||
ConfirmMassEnabling=mass enabling confirmation
|
||||
ConfirmMassEnablingQuestion=Are you sure you want to enable the %s selected record(s)?
|
||||
ConfirmMassDisabling=mass disabling confirmation
|
||||
ConfirmMassDisablingQuestion=Are you sure you want to disable the %s selected record(s)?
|
||||
RecordsEnabled=%s record(s) enabled
|
||||
RecordsDisabled=%s record(s) disabled
|
||||
RecordEnabled=Record enabled
|
||||
RecordDisabled=Record disabled
|
||||
Forthcoming=Forthcoming
|
||||
Currently=Currently
|
||||
|
||||
@ -291,3 +291,7 @@ PopuCom=Products/Services by popularity in Orders
|
||||
ProductStatistics=Products/Services Statistics
|
||||
NbOfQtyInOrders=Qty in orders
|
||||
SelectTheTypeOfObjectToAnalyze=Select an object to view its statistics...
|
||||
|
||||
ConfirmBtnCommonContent = Are you sure you want to "%s" ?
|
||||
ConfirmBtnCommonTitle = Confirm your action
|
||||
CloseDialog = Close
|
||||
|
||||
@ -77,6 +77,10 @@ YourPartnershipRefusedContent=We inform you that your partnership request has be
|
||||
YourPartnershipAcceptedContent=We inform you that your partnership request has been accepted.
|
||||
YourPartnershipCanceledContent=We inform you that your partnership has been canceled.
|
||||
|
||||
CountLastUrlCheckError=Number of errors for last URL check
|
||||
LastCheckBacklink=Date of last URL check
|
||||
ReasonDeclineOrCancel=Decline reason
|
||||
|
||||
#
|
||||
# Status
|
||||
#
|
||||
|
||||
@ -341,7 +341,7 @@ ProductSheet=Product sheet
|
||||
ServiceSheet=Service sheet
|
||||
PossibleValues=Possible values
|
||||
GoOnMenuToCreateVairants=Go on menu %s - %s to prepare attribute variants (like colors, size, ...)
|
||||
UseProductFournDesc=Add a feature to define the descriptions of products defined by the vendors in addition to descriptions for customers
|
||||
UseProductFournDesc=Add a feature to define the product description defined by the vendors (for each vendor reference) in addition to the description for customers
|
||||
ProductSupplierDescription=Vendor description for the product
|
||||
UseProductSupplierPackaging=Use packaging on supplier prices (recalculate quantities according to packaging set on supplier price when adding/updating line in supplier documents)
|
||||
PackagingForThisProduct=Packaging
|
||||
|
||||
@ -140,6 +140,7 @@ NoTasks=No tasks for this project
|
||||
LinkedToAnotherCompany=Linked to other third party
|
||||
TaskIsNotAssignedToUser=Task not assigned to user. Use button '<strong>%s</strong>' to assign task now.
|
||||
ErrorTimeSpentIsEmpty=Time spent is empty
|
||||
TimeRecordingRestrictedToNMonthsBack=Time recording is restricted to %s months back
|
||||
ThisWillAlsoRemoveTasks=This action will also delete all tasks of project (<b>%s</b> tasks at the moment) and all inputs of time spent.
|
||||
IfNeedToUseOtherObjectKeepEmpty=If some objects (invoice, order, ...), belonging to another third party, must be linked to the project to create, keep this empty to have the project being multi third parties.
|
||||
CloneTasks=Clone tasks
|
||||
@ -241,6 +242,7 @@ LatestModifiedProjects=Latest %s modified projects
|
||||
OtherFilteredTasks=Other filtered tasks
|
||||
NoAssignedTasks=No assigned tasks found (assign project/tasks to the current user from the top select box to enter time on it)
|
||||
ThirdPartyRequiredToGenerateInvoice=A third party must be defined on project to be able to invoice it.
|
||||
ThirdPartyRequiredToGenerateInvoice=A third party must be defined on project to be able to invoice it.
|
||||
ChooseANotYetAssignedTask=Choose a task not yet assigned to you
|
||||
# Comments trans
|
||||
AllowCommentOnTask=Allow user comments on tasks
|
||||
@ -252,10 +254,12 @@ SendProjectRef=Information project %s
|
||||
ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Salaries' must be enabled to define employee hourly rate to have time spent valorized
|
||||
NewTaskRefSuggested=Task ref already used, a new task ref is required
|
||||
TimeSpentInvoiced=Time spent billed
|
||||
TimeSpentForIntervention=Time spent
|
||||
TimeSpentForInvoice=Time spent
|
||||
OneLinePerUser=One line per user
|
||||
ServiceToUseOnLines=Service to use on lines
|
||||
InvoiceGeneratedFromTimeSpent=Invoice %s has been generated from time spent on project
|
||||
InterventionGeneratedFromTimeSpent=Intervention %s has been generated from time spent on project
|
||||
ProjectBillTimeDescription=Check if you enter timesheet on tasks of project AND you plan to generate invoice(s) from the timesheet to bill the customer of the project (do not check if you plan to create invoice that is not based on entered timesheets). Note: To generate invoice, go on tab 'Time spent' of the project and select lines to include.
|
||||
ProjectFollowOpportunity=Follow opportunity
|
||||
ProjectFollowTasks=Follow tasks or time spent
|
||||
@ -264,7 +268,9 @@ UsageOpportunity=Usage: Opportunity
|
||||
UsageTasks=Usage: Tasks
|
||||
UsageBillTimeShort=Usage: Bill time
|
||||
InvoiceToUse=Draft invoice to use
|
||||
InterToUse=Draft intervention to use
|
||||
NewInvoice=New invoice
|
||||
NewInter=New intervention
|
||||
OneLinePerTask=One line per task
|
||||
OneLinePerPeriod=One line per period
|
||||
OneLinePerTimeSpentLine=One line for each time spent declaration
|
||||
|
||||
@ -60,7 +60,7 @@ EnhancedValueOfWarehouses=Warehouses value
|
||||
UserWarehouseAutoCreate=Create a user warehouse automatically when creating a user
|
||||
AllowAddLimitStockByWarehouse=Manage also value for minimum and desired stock per pairing (product-warehouse) in addition to the value for minimum and desired stock per product
|
||||
RuleForWarehouse=Rule for warehouses
|
||||
WarehouseAskWarehouseOnThirparty=Set a warehouse on third-party
|
||||
WarehouseAskWarehouseOnThirparty=Set a warehouse on Third-parties
|
||||
WarehouseAskWarehouseDuringPropal=Set a warehouse on Commercial proposals
|
||||
WarehouseAskWarehouseDuringOrder=Set a warehouse on Sale orders
|
||||
UserDefaultWarehouse=Set a warehouse on Users
|
||||
@ -167,8 +167,8 @@ MovementTransferStock=Stock transfer of product %s into another warehouse
|
||||
InventoryCodeShort=Inv./Mov. code
|
||||
NoPendingReceptionOnSupplierOrder=No pending reception due to open purchase order
|
||||
ThisSerialAlreadyExistWithDifferentDate=This lot/serial number (<strong>%s</strong>) already exists but with different eatby or sellby date (found <strong>%s</strong> but you enter <strong>%s</strong>).
|
||||
OpenAll=Open for all actions
|
||||
OpenInternal=Open only for internal actions
|
||||
OpenAnyMovement=Open (all movement)
|
||||
OpenInternal=Open (only internal movement)
|
||||
UseDispatchStatus=Use a dispatch status (approve/refuse) for product lines on purchase order reception
|
||||
OptionMULTIPRICESIsOn=Option "several prices per segment" is on. It means a product has several selling price so value for sell can't be calculated
|
||||
ProductStockWarehouseCreated=Stock limit for alert and desired optimal stock correctly created
|
||||
@ -256,3 +256,8 @@ AutofillWithExpected=Fill real quantity with expected quantity
|
||||
ShowAllBatchByDefault=By default, show batch details on product "stock" tab
|
||||
CollapseBatchDetailHelp=You can set batch detail default display in stocks module configuration
|
||||
FieldCannotBeNegative=Field "%s" cannot be negative
|
||||
ErrorWrongBarcodemode=Unknown Barcode mode
|
||||
ProductDoesNotExist=Product does not exist
|
||||
ErrorSameBatchNumber=Same batch number found in inventory list
|
||||
ProductBatchDoesNotExist=Product with batch/serial does not exist
|
||||
ProductBarcodeDoesNotExist=Product with barcode does not exist
|
||||
|
||||
@ -66,7 +66,7 @@ NeedMoreInformation=Waiting for reporter feedback
|
||||
NeedMoreInformationShort=Waiting for feedback
|
||||
Answered=Answered
|
||||
Waiting=Waiting
|
||||
Closed=Closed
|
||||
SolvedClosed=Solved
|
||||
Deleted=Deleted
|
||||
|
||||
# Dict
|
||||
@ -186,9 +186,11 @@ TicketSeverity=Severity
|
||||
ShowTicket=See ticket
|
||||
RelatedTickets=Related tickets
|
||||
TicketAddIntervention=Create intervention
|
||||
CloseTicket=Close ticket
|
||||
CloseATicket=Close a ticket
|
||||
CloseTicket=Close|Solve ticket
|
||||
AbandonTicket=Abandon ticket
|
||||
CloseATicket=Close|Solve a ticket
|
||||
ConfirmCloseAticket=Confirm ticket closing
|
||||
ConfirmAbandonTicket=Do you confirm the closing of the ticket to status 'Abandonned'
|
||||
ConfirmDeleteTicket=Please confirm ticket deleting
|
||||
TicketDeletedSuccess=Ticket deleted with success
|
||||
TicketMarkedAsClosed=Ticket marked as closed
|
||||
|
||||
@ -90,7 +90,6 @@ DATE_REFUS=Deny date
|
||||
DATE_SAVE=Validation date
|
||||
DATE_CANCEL=Cancelation date
|
||||
DATE_PAIEMENT=Payment date
|
||||
BROUILLONNER=Reopen
|
||||
ExpenseReportRef=Ref. expense report
|
||||
ValidateAndSubmit=Validate and submit for approval
|
||||
ValidatedWaitingApproval=Validated (waiting for approval)
|
||||
|
||||
@ -133,8 +133,7 @@ SEPARCUR=SEPA CUR
|
||||
SEPAFRST=SEPA FRST
|
||||
ExecutionDate=Execution date
|
||||
CreateForSepa=Create direct debit file
|
||||
ICS=Creditor Identifier CI for direct debit
|
||||
ICSTransfer=Creditor Identifier CI for bank transfer
|
||||
ICS=Creditor Identifier - ICS
|
||||
END_TO_END="EndToEndId" SEPA XML tag - Unique id assigned per transaction
|
||||
USTRD="Unstructured" SEPA XML tag
|
||||
ADDDAYS=Add days to Execution Date
|
||||
|
||||
@ -13,6 +13,7 @@ descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=Classify linked source proposal as b
|
||||
descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Classify linked source sales order as billed when customer invoice is validated (and if the amount of the invoice is the same as the total amount of the linked order)
|
||||
descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Classify linked source sales order as billed when customer invoice is set to paid (and if the amount of the invoice is the same as the total amount of the linked order)
|
||||
descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Classify linked source sales order as shipped when a shipment is validated (and if the quantity shipped by all shipments is the same as in the order to update)
|
||||
descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING_CLOSED=Classify linked source sales order as shipped when a shipment is closed (and if the quantity shipped by all shipments is the same as in the order to update)
|
||||
# Autoclassify purchase order
|
||||
descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Classify linked source vendor proposal as billed when vendor invoice is validated (and if the amount of the invoice is the same as the total amount of the linked proposal)
|
||||
descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Classify linked source purchase order as billed when vendor invoice is validated (and if the amount of the invoice is the same as the total amount of the linked order)
|
||||
|
||||
@ -48,7 +48,8 @@ CountriesNotInEEC=ليس ضمن دول الاتحاد الأوروبي
|
||||
CountriesInEECExceptMe=البلدان في المجموعة الاقتصادية الأوروبية باستثناء %s
|
||||
CountriesExceptMe=جميع الدول باستثناء %s
|
||||
AccountantFiles=تصدير مستندات المصدر
|
||||
ExportAccountingSourceDocHelp=باستخدام هذه الأداة ، يمكنك تصدير الأحداث (القائمة وملفات PDF) التي تم استخدامها لإنشاء المحاسبة الخاصة بك. لتصدير دفاتر اليومية الخاصة بك ، استخدم إدخال القائمة %s - %s.
|
||||
ExportAccountingSourceDocHelp=باستخدام هذه الأداة ، يمكنك تصدير الأحداث (في شكل قائمة او بصيغة ملفات متنقلة ) التي تم استخدامها لإنشاء قيودك المحاسبية .
|
||||
ExportAccountingSourceDocHelp2=لتصدير دفاترك المحاسبية ، إستخدم القائمة %s - %s .
|
||||
VueByAccountAccounting=عرض حسب الحساب المحاسبي
|
||||
VueBySubAccountAccounting=عرض حسب الحساب المحاسبة الفرعي
|
||||
|
||||
@ -245,9 +246,9 @@ DescThirdPartyReport=راجع هنا قائمة العملاء والموردي
|
||||
ListAccounts=قائمة الحسابات المحاسبية
|
||||
UnknownAccountForThirdparty=حساب طرف ثالث غير معروف. سوف نستخدم %s
|
||||
UnknownAccountForThirdpartyBlocking=حساب طرف ثالث غير معروف. خطأ في المنع
|
||||
ThirdpartyAccountNotDefinedOrThirdPartyUnknown=حساب طرف ثالث غير محدد أو طرف ثالث غير معروف. سوف نستخدم %s
|
||||
ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Subledger account not defined or third party or user unknown. We will use %s
|
||||
ThirdpartyAccountNotDefinedOrThirdPartyUnknownSubledgerIgnored=طرف ثالث غير معروف ودفتر الأستاذ الفرعي غير محدد في الدفعة. سنبقي قيمة حساب دفتر الأستاذ الفرعي فارغة.
|
||||
ThirdpartyAccountNotDefinedOrThirdPartyUnknownBlocking=حساب طرف ثالث غير محدد أو طرف ثالث غير معروف. خطأ في المنع.
|
||||
ThirdpartyAccountNotDefinedOrThirdPartyUnknownBlocking=Subledger account not defined or third party or user unknown. Blocking error.
|
||||
UnknownAccountForThirdpartyAndWaitingAccountNotDefinedBlocking=حساب طرف ثالث وحساب قيد الانتظار غير معرّفين. خطأ في المنع
|
||||
PaymentsNotLinkedToProduct=الدفع غير مرتبط بأي منتج / خدمة
|
||||
OpeningBalance=الرصيد الافتتاحي
|
||||
@ -338,7 +339,7 @@ Modelcsv_normal=تصدير كلاسيكي
|
||||
Modelcsv_CEGID=Export for CEGID Expert Comptabilité
|
||||
Modelcsv_COALA=Export for Sage Coala
|
||||
Modelcsv_bob50=Export for Sage BOB 50
|
||||
Modelcsv_ciel=Export for Sage Ciel Compta or Compta Evolution
|
||||
Modelcsv_ciel=Export for Sage50, Ciel Compta or Compta Evo. (Format XIMPORT)
|
||||
Modelcsv_quadratus=Export for Quadratus QuadraCompta
|
||||
Modelcsv_ebp=Export for EBP
|
||||
Modelcsv_cogilog=Export for Cogilog
|
||||
@ -417,8 +418,8 @@ FECFormatSubledgerAccountLabel=Subledger account number (CompAuxLib)
|
||||
FECFormatPieceRef=Piece ref (PieceRef)
|
||||
FECFormatPieceDate=Piece date creation (PieceDate)
|
||||
FECFormatLabelOperation=Label operation (EcritureLib)
|
||||
FECFormatDebit=Debit (Debit)
|
||||
FECFormatCredit=Credit (Credit)
|
||||
FECFormatDebit=مدين (مدين)
|
||||
FECFormatCredit=دائن (دائن)
|
||||
FECFormatReconcilableCode=Reconcilable code (EcritureLet)
|
||||
FECFormatReconcilableDate=Reconcilable date (DateLet)
|
||||
FECFormatValidateDate=Piece date validated (ValidDate)
|
||||
@ -430,4 +431,4 @@ WarningReportNotReliable=تحذير ، هذا التقرير لا يستند إ
|
||||
ExpenseReportJournal=تقرير دفتر المصاريف
|
||||
InventoryJournal=دفتر الجرد
|
||||
|
||||
NAccounts=%s accounts
|
||||
NAccounts=%s حساباً
|
||||
|
||||
@ -85,6 +85,7 @@ NumberOfBytes=Number of Bytes
|
||||
SearchString=Search string
|
||||
NotAvailableWhenAjaxDisabled=غير متوفر عندما يكون أجاكس معطلاً
|
||||
AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
|
||||
TimesheetPreventAfterFollowingMonths=Prevent recording time spent after the following number of months
|
||||
JavascriptDisabled=الجافا سكربت معطل
|
||||
UsePreviewTabs=إستخدم زر المعاينة
|
||||
ShowPreview=آظهر المعاينة
|
||||
@ -117,6 +118,7 @@ MultiCurrencySetup=إعدادات تعدد العملات
|
||||
MenuLimits=الحدود و الدقة
|
||||
MenuIdParent=رمز القائمة العليا
|
||||
DetailMenuIdParent=رمز القائمة العليا (فراغ للقائمة العليا)
|
||||
ParentID=Parent ID
|
||||
DetailPosition=رتب الرقم لتعريف موقع القائمة
|
||||
AllMenus=الكل
|
||||
NotConfigured=الوحدة النمطية | التطبيق غير مهيأ
|
||||
@ -209,6 +211,7 @@ FeatureAvailableOnlyOnStable=Feature only available on official stable versions
|
||||
BoxesDesc=البريمجات هي المكونات البرمجية التي تُظهر بعض المعلومات في بعض الصفحات. يمكنك اختيار إظهار أو إخفائها بإختيار الصفحات المطلوبة و الضغط على 'تنشيط', او بالضغط على الزر الآخر لتعطيلها.
|
||||
OnlyActiveElementsAreShown=فقط العناصر من <a href="%s">النماذج المفعلة </a> سوف تظهر.
|
||||
ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button <span class="small valignmiddle">%s</span> of each module to enable or disable a module/application.
|
||||
ModulesDesc2=Click the wheel button <span class="small valignmiddle">%s</span> to configure the module/application.
|
||||
ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
|
||||
ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
|
||||
ModulesMarketPlaces=Find external app/modules
|
||||
@ -1190,6 +1193,9 @@ SetupDescription2=القسمان التاليان إلزاميان (المدخل
|
||||
SetupDescription3= <a href="%s"> %s -> %s </a> <br> <br> تُستخدم المعطيات الأساسية لتخصيص السلوك الافتراضي لتطبيقك (على سبيل المثال للميزات المتعلقة بالبلد).
|
||||
SetupDescription4= <a href="%s"> %s -> %s </a> <br> <br> هذا البرنامج عبارة عن مجموعة من العديد من الوحدات | التطبيقات. يجب تمكين وتكوين الوحدات النمطية التى تحتاجها. ستظهر فى القائمة بعد تمكين هذه الوحدات.
|
||||
SetupDescription5=قائمة الإعدادات الأخرى تقوم بإدارة المعطيات الاختيارية.
|
||||
SetupDescriptionLink=<a href="%s">%s - %s</a>
|
||||
SetupDescription3b=Basic parameters used to customize the default behavior of your application (e.g for country-related features).
|
||||
SetupDescription4b=This software is a suite of many modules/applications. The modules related to your needs must be enabled and configured. Menu entries will appears with the activation of these modules.
|
||||
AuditedSecurityEvents=Security events that are audited
|
||||
NoSecurityEventsAreAduited=No security events are audited. You can enable them from menu %s
|
||||
Audit=Security events
|
||||
@ -1779,7 +1785,7 @@ ClickToDialSetup=انقر لإعداد وحدة الاتصال الهاتفي
|
||||
ClickToDialUrlDesc=Url called when a click on phone picto is done. In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
|
||||
ClickToDialDesc=This module change phone numbers, when using a desktop computer, into clickable links. A click will call the number. This can be used to start the phone call when using a soft phone on your desktop or when using a CTI system based on SIP protocol for example. Note: When using a smartphone, phone numbers are always clickable.
|
||||
ClickToDialUseTelLink=مجرد استخدام الرابط "الهاتف:" على أرقام الهواتف
|
||||
ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface, installed on the same computer as the browser, and called when you click on a link starting with "tel:" in your browser. If you need link that start with "sip:" or a full server solution (no need of local software installation), you must set this to "No" and fill next field.
|
||||
ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface, installed on the same computer as the browser, and called when you click on a link starting with "tel:" in your browser. If you need a link that start with "sip:" or a full server solution (no need of local software installation), you must set this to "No" and fill the next field.
|
||||
##### Point Of Sale (CashDesk) #####
|
||||
CashDesk=Point of Sale
|
||||
CashDeskSetup=Point of Sales module setup
|
||||
@ -1989,6 +1995,8 @@ MAIN_PDF_MARGIN_TOP=الهامش العلوي لصيغة المستندات ال
|
||||
MAIN_PDF_MARGIN_BOTTOM=الهامش العلوي لصيغة المستندات المتنقلة
|
||||
MAIN_DOCUMENTS_LOGO_HEIGHT=ارتفاع الشعار على صيغة المستندات المتنقلة
|
||||
MAIN_GENERATE_PROPOSALS_WITH_PICTURE=Add picture on proposal line
|
||||
PROPOSAL_PDF_HIDE_PAYMENTTERM=Hide payments conditions
|
||||
PROPOSAL_PDF_HIDE_PAYMENTMODE=Hide payment mode
|
||||
MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING=Add electronic sign in PDF
|
||||
NothingToSetup=There is no specific setup required for this module.
|
||||
SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
|
||||
@ -2089,7 +2097,7 @@ LargerThan=Larger than
|
||||
IfTrackingIDFoundEventWillBeLinked=Note that If a tracking ID of an object is found into email, or if the email is an answer of an email aready collected and linked to an object, the created event will be automatically linked to the known related object.
|
||||
WithGMailYouCanCreateADedicatedPassword=With a GMail account, if you enabled the 2 steps validation, it is recommanded to create a dedicated second password for the application instead of using your own account passsword from https://myaccount.google.com/.
|
||||
EmailCollectorTargetDir=It may be a desired behaviour to move the email into another tag/directory when it was processed successfully. Just set name of directory here to use this feature (Do NOT use special characters in name). Note that you must also use a read/write login account.
|
||||
EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it. In the parameter field you can use for example 'EXTRACT:BODY:Name:\\s([^\\s]*)' if you want to extract the name of the thirdparty from a string 'Name: name to find' found into the body.
|
||||
EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it.<br>For example, if you want to create a thirdparty with a name extracted a string 'Name: name to find' found into the body, use sender email as email, you can set the parameter field like this:<br>'email=HEADER:^From:(.*);name=EXTRACT:BODY:Name:\\s([^\\s]*);client=SET:2;'<br>
|
||||
EndPointFor=End point for %s : %s
|
||||
DeleteEmailCollector=Delete email collector
|
||||
ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector?
|
||||
@ -2128,6 +2136,7 @@ AskThisIDToYourBank=Contact your bank to get this ID
|
||||
AdvancedModeOnly=Permision available in Advanced permission mode only
|
||||
ConfFileIsReadableOrWritableByAnyUsers=The conf file is readable or writable by any users. Give permission to web server user and group only.
|
||||
MailToSendEventOrganization=Event Organization
|
||||
MailToPartnership=Partnership
|
||||
AGENDA_EVENT_DEFAULT_STATUS=Default event status when creating a event from the form
|
||||
YouShouldDisablePHPFunctions=You should disable PHP functions
|
||||
IfCLINotRequiredYouShouldDisablePHPFunctions=Except if you need to run system commands in custom code, you shoud disable PHP functions
|
||||
@ -2148,3 +2157,5 @@ DatabasePasswordObfuscated=Database password is obfuscated in conf file
|
||||
DatabasePasswordNotObfuscated=Database password is NOT obfuscated in conf file
|
||||
APIsAreNotEnabled=APIs modules are not enabled
|
||||
YouShouldSetThisToOff=You should set this to 0 or off
|
||||
InstallAndUpgradeLockedBy=Install and upgrades are locked by the file <b>%s</b>
|
||||
OldImplementation=Old implementation
|
||||
|
||||
@ -128,3 +128,4 @@ PrintPaymentMethodOnReceipts=Print payment method on tickets|receipts
|
||||
WeighingScale=Weighing scale
|
||||
ShowPriceHT = Display the column with the price excluding tax (on screen)
|
||||
ShowPriceHTOnReceipt = Display the column with the price excluding tax (on the receipt)
|
||||
CustomerDisplay=Customer display
|
||||
|
||||
@ -30,3 +30,4 @@ NonShippable=غير قابل للشحن
|
||||
ShowShippableStatus=إظهار علامة قابل للشحن
|
||||
ShowReceiving=عرض إيصال الاستلام
|
||||
NonExistentOrder=امر غير موجود
|
||||
StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines
|
||||
|
||||
@ -264,6 +264,7 @@ ErrorAnAmountWithoutTaxIsRequired=Error, amount is mandatory
|
||||
ErrorAPercentIsRequired=Error, please fill in the percentage correctly
|
||||
ErrorYouMustFirstSetupYourChartOfAccount=You must first setup your chart of account
|
||||
ErrorFailedToFindEmailTemplate=Failed to find template with code name %s
|
||||
ErrorDurationForServiceNotDefinedCantCalculateHourlyPrice=Duration not defined on service. No way to calculate the hourly price.
|
||||
|
||||
# Warnings
|
||||
WarningParamUploadMaxFileSizeHigherThanPostMaxSize=Your PHP parameter upload_max_filesize (%s) is higher than PHP parameter post_max_size (%s). This is not a consistent setup.
|
||||
|
||||
@ -119,6 +119,8 @@ EventType = نوع الحدث
|
||||
LabelOfBooth=Booth label
|
||||
LabelOfconference=Conference label
|
||||
ConferenceIsNotConfirmed=Subcription not available, conference is not confirmed yet
|
||||
DateMustBeBeforeThan=%s must be before %s
|
||||
DateMustBeAfterThan=%s must be after %s
|
||||
|
||||
#
|
||||
# Vote page
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user