Merge remote-tracking branch 'upstream/develop' into reminder
This commit is contained in:
commit
e08ff855d2
@ -243,6 +243,8 @@ Following changes may create regressions for some external modules, but were nec
|
||||
* Rename the substitution for "project label" instead of "project title" in substitution variables
|
||||
* You must use "$objectoffield" to manipulate the current object inside the formulare of computed custom extrafields instead of $obj/$object.
|
||||
* Making a global search is sending the parameter using always the name search_all (instead of sometimes sall and search_all)
|
||||
* The property $url_last_version must be public if defined into module descriptor files;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -46,6 +46,7 @@ require_once DOL_DOCUMENT_ROOT."/core/lib/files.lib.php";
|
||||
|
||||
$includecustom=0;
|
||||
$includeconstants=array();
|
||||
$buildzip=0;
|
||||
|
||||
if (empty($argv[1])) {
|
||||
print "Usage: ".$script_file." release=autostable|auto[-mybuild]|x.y.z[-mybuild] [includecustom=1] [includeconstant=CC:MY_CONF_NAME:value] [buildzip=1]\n";
|
||||
@ -69,6 +70,9 @@ while ($i < $argc) {
|
||||
if (!empty($result["includeconstant"])) {
|
||||
$includeconstants[$i] = $result["includeconstant"];
|
||||
}
|
||||
if (!empty($result["buildzip"])) {
|
||||
$buildzip=1;
|
||||
}
|
||||
if (preg_match('/includeconstant=/', strval($argv[$i]))) {
|
||||
$tmp=explode(':', $result['includeconstant'], 3); // $includeconstant has been set with previous parse_str()
|
||||
if (count($tmp) != 3) {
|
||||
|
||||
@ -729,6 +729,7 @@ if ($action == 'export_fileconfirm' && $user->hasRight('accounting', 'mouvements
|
||||
// Export files then exit
|
||||
$accountancyexport = new AccountancyExport($db);
|
||||
|
||||
$formatexport = GETPOST('formatexport', 'int');
|
||||
$notexportlettering = GETPOST('notexportlettering', 'alpha');
|
||||
|
||||
if (!empty($notexportlettering)) {
|
||||
@ -745,7 +746,7 @@ if ($action == 'export_fileconfirm' && $user->hasRight('accounting', 'mouvements
|
||||
$withAttachment = !empty(trim(GETPOST('notifiedexportfull', 'alphanohtml'))) ? 1 : 0;
|
||||
|
||||
// Output data on screen or download
|
||||
$result = $accountancyexport->export($object->lines, $formatexportset, $withAttachment);
|
||||
$result = $accountancyexport->export($object->lines, $formatexport, $withAttachment);
|
||||
|
||||
$error = 0;
|
||||
if ($result < 0) {
|
||||
@ -856,11 +857,13 @@ $formconfirm = '';
|
||||
if ($action == 'export_file') {
|
||||
$form_question = array();
|
||||
|
||||
$form_question['notexportlettering'] = array(
|
||||
'name' => 'notexportlettering',
|
||||
'type' => 'other',
|
||||
'label' => '', // TODO Use Selectmodelcsv and show a select combo
|
||||
'value' => $langs->trans('Modelcsv').' : <b>'.$listofformat[$formatexportset].'</b>'
|
||||
$form_question['formatexport'] = array(
|
||||
'name' => 'formatexport',
|
||||
'type' => 'select',
|
||||
'label' => $langs->trans('Modelcsv'), // TODO Use Selectmodelcsv and show a select combo
|
||||
'values' => $listofformat,
|
||||
'default' => $formatexportset,
|
||||
'morecss' => 'minwidth200 maxwidth200'
|
||||
);
|
||||
|
||||
$form_question['separator0'] = array('name'=>'separator0', 'type'=>'separator');
|
||||
|
||||
@ -3323,7 +3323,7 @@ class Adherent extends CommonObject
|
||||
$return .= '<br><span class="info-box-label">'.$this->getmorphylib('', 2).'</span>';
|
||||
}
|
||||
if (method_exists($this, 'getLibStatut')) {
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(5).'</div>';
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(3).'</div>';
|
||||
}
|
||||
$return .= '</div>';
|
||||
$return .= '</div>';
|
||||
|
||||
@ -1016,7 +1016,7 @@ class AdherentType extends CommonObject
|
||||
}
|
||||
}
|
||||
if (method_exists($this, 'getLibStatut')) {
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(5).'</div>';
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(3).'</div>';
|
||||
}
|
||||
$return .= '</div>';
|
||||
$return .= '</div>';
|
||||
|
||||
@ -194,6 +194,10 @@ if (!empty($triggers)) {
|
||||
if ($trigger['code'] == 'FICHINTER_CLASSIFY_UNBILLED' && empty($conf->global->FICHINTER_CLASSIFY_BILLED)) {
|
||||
continue;
|
||||
}
|
||||
if ($trigger['code'] == 'ACTION_CREATE') {
|
||||
// This is the trigger to add an event, enabling it will create infinite loop
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($search_event === '' || preg_match('/'.preg_quote($search_event, '/').'/i', $trigger['code'])) {
|
||||
print '<!-- '.$trigger['position'].' -->';
|
||||
|
||||
@ -205,6 +205,7 @@ if ($action == 'install') {
|
||||
|
||||
dol_syslog("Uncompress of module file is a success.");
|
||||
|
||||
// We check if this is a metapackage
|
||||
$modulenamearrays = array();
|
||||
if (dol_is_file($modulenamedir.'/metapackage.conf')) {
|
||||
// This is a meta package
|
||||
@ -214,6 +215,7 @@ if ($action == 'install') {
|
||||
$modulenamearrays[$modulename] = $modulename;
|
||||
//var_dump($modulenamearrays);exit;
|
||||
|
||||
// Lop on each packacge of the metapackage
|
||||
foreach ($modulenamearrays as $modulenameval) {
|
||||
if (strpos($modulenameval, '#') === 0) {
|
||||
continue; // Discard comments
|
||||
@ -227,13 +229,14 @@ if ($action == 'install') {
|
||||
|
||||
// Now we install the module
|
||||
if (!$error) {
|
||||
@dol_delete_dir_recursive($dirins.'/'.$modulenameval); // delete the zip file
|
||||
dol_syslog("We copy now directory ".$conf->admin->dir_temp.'/'.$tmpdir.'/htdocs/'.$modulenameval." into target dir ".$dirins.'/'.$modulenameval);
|
||||
$result = dolCopyDir($modulenamedir, $dirins.'/'.$modulenameval, '0444', 1);
|
||||
@dol_delete_dir_recursive($dirins.'/'.$modulenameval); // delete the target directory
|
||||
$submodulenamedir = $conf->admin->dir_temp.'/'.$tmpdir.'/htdocs/'.$modulenameval;
|
||||
dol_syslog("We copy now directory ".$submodulenamedir." into target dir ".$dirins.'/'.$modulenameval);
|
||||
$result = dolCopyDir($submodulenamedir, $dirins.'/'.$modulenameval, '0444', 1);
|
||||
if ($result <= 0) {
|
||||
dol_syslog('Failed to call dolCopyDir result='.$result." with param ".$modulenamedir." and ".$dirins.'/'.$modulenameval, LOG_WARNING);
|
||||
dol_syslog('Failed to call dolCopyDir result='.$result." with param ".$submodulenamedir." and ".$dirins.'/'.$modulenameval, LOG_WARNING);
|
||||
$langs->load("errors");
|
||||
setEventMessages($langs->trans("ErrorFailToCopyDir", $modulenamedir, $dirins.'/'.$modulenameval), null, 'errors');
|
||||
setEventMessages($langs->trans("ErrorFailToCopyDir", $submodulenamedir, $dirins.'/'.$modulenameval), null, 'errors');
|
||||
$error++;
|
||||
}
|
||||
}
|
||||
|
||||
@ -427,11 +427,13 @@ foreach ($listofnotifiedevents as $notifiedevent) {
|
||||
} elseif ($notifiedevent['elementtype'] == 'expensereport' || $notifiedevent['elementtype'] == 'expense_report') {
|
||||
$elementPicto = 'expensereport';
|
||||
$elementLabel = $langs->trans('ExpenseReport');
|
||||
} elseif ($notifiedevent['elementtype'] == 'agenda') {
|
||||
$elementPicto = 'action';
|
||||
}
|
||||
|
||||
$labelfortrigger = 'AmountHT';
|
||||
$codehasnotrigger = 0;
|
||||
if (preg_match('/^HOLIDAY/', $notifiedevent['code'])) {
|
||||
if (preg_match('/^(ACTION|HOLIDAY)/', $notifiedevent['code'])) {
|
||||
$codehasnotrigger++;
|
||||
}
|
||||
|
||||
|
||||
@ -271,9 +271,19 @@ print '<input type="hidden" name="action" value="update">';
|
||||
clearstatcache();
|
||||
|
||||
|
||||
if (getDolGlobalString('PDF_SECURITY_ENCRYPTION')) {
|
||||
print '<div class="warning">';
|
||||
print 'The not supported and hidden option PDF_SECURITY_ENCRYPTION has been enabled. This means a lof of feature related to PDF will be broken, like mass PDF generation or online signature of PDF.'."\n";
|
||||
print 'You should disable this option.';
|
||||
print '</div>';
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Misc options
|
||||
print load_fiche_titre($langs->trans("DictionaryPaperFormat"), '', '');
|
||||
|
||||
|
||||
print '<div class="div-table-responsive-no-min">';
|
||||
print '<table summary="more" class="noborder centpercent">';
|
||||
print '<tr class="liste_titre"><td class="titlefieldmiddle">'.$langs->trans("Parameters").'</td><td width="200px">'.$langs->trans("Value").'</td></tr>';
|
||||
|
||||
@ -580,15 +580,23 @@ print '<br>';
|
||||
print '<strong>MAIN_DOCUMENT_IS_OUTSIDE_WEBROOT_SO_NOEXE_NOT_REQUIRED</strong> = '.getDolGlobalString('MAIN_DOCUMENT_IS_OUTSIDE_WEBROOT_SO_NOEXE_NOT_REQUIRED', '<span class="opacitymedium">'.$langs->trans("Undefined").' ('.$langs->trans("Recommended").': '.$langs->trans("Undefined").' '.$langs->trans("or").' 0)</span>')."<br>";
|
||||
print '<br>';
|
||||
|
||||
print '<strong>MAIN_SECURITY_FORCECSP</strong> = '.getDolGlobalString('MAIN_SECURITY_FORCECSP', '<span class="opacitymedium">'.$langs->trans("Undefined").'</span>').' <span class="opacitymedium">('.$langs->trans("Example").": \"frame-ancestors 'self'; default-src *; img-src * data:; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline';\")</span><br>";
|
||||
$examplecsprule = "frame-ancestors 'self'; img-src * data:; font-src *; default-src 'self' 'unsafe-inline' 'unsafe-eval' *.paypal.com *.stripe.com *.google.com *.googleapis.com *.google-analytics.com *.googletagmanager.com;";
|
||||
print '<strong>MAIN_SECURITY_FORCECSPRO</strong> = '.getDolGlobalString('MAIN_SECURITY_FORCECSP', '<span class="opacitymedium">'.$langs->trans("Undefined").'</span>').' <span class="opacitymedium">('.$langs->trans("Example").': "'.$examplecsprule.'")</span><br>';
|
||||
print '<br>';
|
||||
|
||||
$examplecsprule = "frame-ancestors 'self'; img-src * data:; font-src *; default-src 'self' 'unsafe-inline' 'unsafe-eval' *.paypal.com *.stripe.com *.google.com *.googleapis.com *.google-analytics.com *.googletagmanager.com;";
|
||||
print '<strong>MAIN_SECURITY_FORCECSP</strong> = '.getDolGlobalString('MAIN_SECURITY_FORCERP', '<span class="opacitymedium">'.$langs->trans("Undefined").'</span>').' <span class="opacitymedium">('.$langs->trans("Example").': "'.$examplecsprule.'")</span><br>';
|
||||
print '<br>';
|
||||
|
||||
print '<strong>MAIN_SECURITY_FORCERP</strong> = '.getDolGlobalString('MAIN_SECURITY_FORCERP', '<span class="opacitymedium">'.$langs->trans("Undefined").'</span>').' <span class="opacitymedium">('.$langs->trans("Recommended").': '.$langs->trans("Undefined").' '.$langs->trans("or")." \"same-origin\" so browser doesn't send any referrer when going into another web site domain)</span><br>";
|
||||
print '<br>';
|
||||
|
||||
print '<strong>WEBSITE_MAIN_SECURITY_FORCECSP</strong> = '.getDolGlobalString('WEBSITE_MAIN_SECURITY_FORCECSP', '<span class="opacitymedium">'.$langs->trans("Undefined").'</span>');
|
||||
print ' <span class="opacitymedium">('.$langs->trans("Example").": \"frame-ancestors 'self'; default-src 'self' 'unsafe-inline'; style-src https://cdnjs.cloudflare.com https://fonts.googleapis.com 'unsafe-inline'; script-src https://cdn.transifex.com https://www.googletagmanager.com 'unsafe-inline'; object-src https://youtube.com; frame-src https://youtube.com; img-src * data:;\")</span><br>";
|
||||
print '<strong>WEBSITE_MAIN_SECURITY_FORCECSPRO</strong> = '.getDolGlobalString('WEBSITE_MAIN_SECURITY_FORCECSPRO', '<span class="opacitymedium">'.$langs->trans("Undefined").'</span>');
|
||||
print ' <span class="opacitymedium">('.$langs->trans("Example").": \"frame-ancestors 'self'; default-src 'self' 'unsafe-inline'; style-src https://cdnjs.cloudflare.com *.googleapis.com; script-src *.transifex.com *.google-analytics.com *.googletagmanager.com; object-src https://youtube.com; frame-src https://youtube.com; img-src * data:;\")</span><br>";
|
||||
print '<br>';
|
||||
|
||||
print '<strong>WEBSITE_MAIN_SECURITY_FORCECSP</strong> = '.getDolGlobalString('WEBSITE_MAIN_SECURITY_FORCECSP', '<span class="opacitymedium">'.$langs->trans("Undefined").'</span>');
|
||||
print ' <span class="opacitymedium">('.$langs->trans("Example").": \"frame-ancestors 'self'; default-src 'self' 'unsafe-inline'; style-src https://cdnjs.cloudflare.com *.googleapis.com; script-src *.transifex.com *.google-analytics.com *.googletagmanager.com; object-src https://youtube.com; frame-src https://youtube.com; img-src * data:;\")</span><br>";
|
||||
print '<br>';
|
||||
|
||||
print '<strong>WEBSITE_MAIN_SECURITY_FORCERP</strong> = '.getDolGlobalString('WEBSITE_MAIN_SECURITY_FORCERP', '<span class="opacitymedium">'.$langs->trans("Undefined").'</span>').' <span class="opacitymedium">('.$langs->trans("Recommended").': '.$langs->trans("Undefined").' '.$langs->trans("or")." \"strict-origin-when-cross-origin\")</span><br>";
|
||||
|
||||
@ -751,7 +751,7 @@ class Documents extends DolibarrApi
|
||||
throw new RestException(500, "Failed to open file '".$destfiletmp."' for write");
|
||||
}
|
||||
|
||||
$result = dol_move($destfiletmp, $destfile, 0, $overwriteifexists, 1);
|
||||
$result = dol_move($destfiletmp, $destfile, 0, $overwriteifexists, 1, 1);
|
||||
if (!$result) {
|
||||
throw new RestException(500, "Failed to move file into '".$destfile."'");
|
||||
}
|
||||
|
||||
@ -1589,7 +1589,7 @@ class BOM extends CommonObject
|
||||
$return .= '<br><span class="info-box-label">'.$prod->getNomUrl(1).'</span>';
|
||||
}
|
||||
if (method_exists($this, 'getLibStatut')) {
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(5).'</div>';
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(3).'</div>';
|
||||
}
|
||||
|
||||
$return .= '</div>';
|
||||
|
||||
@ -2290,7 +2290,7 @@ class ActionComm extends CommonObject
|
||||
}
|
||||
|
||||
if ($result >= 0) {
|
||||
if (dol_move($outputfiletmp, $outputfile, 0, 1)) {
|
||||
if (dol_move($outputfiletmp, $outputfile, 0, 1, 0, 0)) {
|
||||
$result = 1;
|
||||
} else {
|
||||
$this->error = 'Failed to rename '.$outputfiletmp.' into '.$outputfile;
|
||||
|
||||
@ -1010,7 +1010,8 @@ while ($i < $imaxinloop) {
|
||||
|
||||
// User owner
|
||||
if (!empty($arrayfields['owner']['checked'])) {
|
||||
print '<td class="tdoverflowmax150"' . ($event_owner_style != '' ? ' style="'.$event_owner_style.'"' : '') . '>'; // With edge and chrome the td overflow is not supported correctly when content is not full text.
|
||||
//print '<td class="tdoverflowmax150"' . ($event_owner_style != '' ? ' style="'.$event_owner_style.'"' : '') . '>';
|
||||
print '<td class="tdoverflowmax150">';
|
||||
if ($obj->fk_user_action > 0 && !isset($cache_user_list[$obj->fk_user_action])) {
|
||||
$userstatic = new User($db);
|
||||
$res = $userstatic->fetch($obj->fk_user_action);
|
||||
|
||||
@ -3976,7 +3976,7 @@ class Propal extends CommonObject
|
||||
$return .='<br><span class="" >'.$langs->trans("AmountHT").' : </span><span class="info-box-label amount">'.price($this->total_ht).'</span>';
|
||||
}
|
||||
if (method_exists($this, 'getLibStatut')) {
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(5).'</div>';
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(3).'</div>';
|
||||
}
|
||||
$return .= '</div>';
|
||||
$return .= '</div>';
|
||||
|
||||
@ -1844,10 +1844,10 @@ class Account extends CommonObject
|
||||
}
|
||||
if (method_exists($this, 'solde')) {
|
||||
$return .= '<br><a href="'.DOL_URL_ROOT.'/compta/bank/bankentries_list.php?id='.$this->id.'">';
|
||||
$return .= '<span class="opacitymedium">'.$langs->trans("Balance").'</span> : <span class="amount">'.price($this->solde(1), 0, $langs, 1, -1, -1, $this->currency_code).'</span>';
|
||||
$return .= '<span class="opacitymedium">'.$langs->trans("Balance").'</span> : <span class="amount">'.price(price2num($this->solde(1), 'MT'), 0, $langs, 1, -1, -1, $this->currency_code).'</span>';
|
||||
}
|
||||
if (method_exists($this, 'getLibStatut')) {
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(5).'</div>';
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(3).'</div>';
|
||||
}
|
||||
$return .= '</div>';
|
||||
$return .= '</div>';
|
||||
|
||||
@ -787,7 +787,7 @@ foreach ($accounts as $key => $type) {
|
||||
if (!empty($arrayfields['balance']['checked'])) {
|
||||
print '<td class="nowraponall right">';
|
||||
print '<a href="'.DOL_URL_ROOT.'/compta/bank/bankentries_list.php?id='.$objecttmp->id.'">';
|
||||
print '<span class="amount">'.price($solde, 0, $langs, 1, -1, -1, $objecttmp->currency_code).'</span>';
|
||||
print '<span class="amount">'.price(price2num($solde, 'MT'), 0, $langs, 1, -1, -1, $objecttmp->currency_code).'</span>';
|
||||
print '</a>';
|
||||
print '</td>';
|
||||
if (!$i) {
|
||||
|
||||
@ -495,7 +495,7 @@ class CashControl extends CommonObject
|
||||
$return .= '<br><span class="info-box-label opacitymedium" >'.$langs->trans("Year").'</span> : <span>'.$this->year_close.'</span>';
|
||||
}
|
||||
if (method_exists($this, 'getLibStatut')) {
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(5).'</div>';
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(3).'</div>';
|
||||
}
|
||||
$return .= '</div>';
|
||||
$return .= '</div>';
|
||||
|
||||
@ -2129,6 +2129,7 @@ if (empty($reshook)) {
|
||||
$date_start = dol_mktime(GETPOST('date_start'.$predef.'hour'), GETPOST('date_start'.$predef.'min'), GETPOST('date_start'.$predef.'sec'), GETPOST('date_start'.$predef.'month'), GETPOST('date_start'.$predef.'day'), GETPOST('date_start'.$predef.'year'));
|
||||
$date_end = dol_mktime(GETPOST('date_end'.$predef.'hour'), GETPOST('date_end'.$predef.'min'), GETPOST('date_end'.$predef.'sec'), GETPOST('date_end'.$predef.'month'), GETPOST('date_end'.$predef.'day'), GETPOST('date_end'.$predef.'year'));
|
||||
$price_base_type = (GETPOST('price_base_type', 'alpha') ? GETPOST('price_base_type', 'alpha') : 'HT');
|
||||
$tva_npr = "";
|
||||
|
||||
// Define special_code for special lines
|
||||
$special_code = 0;
|
||||
@ -2157,8 +2158,7 @@ if (empty($reshook)) {
|
||||
|
||||
//$tva_tx = $datapriceofproduct['tva_tx'];
|
||||
//$tva_npr = $datapriceofproduct['tva_npr'];
|
||||
|
||||
$tmpvat = price2num(preg_replace('/\s*\(.*\)/', '', $tva_tx));
|
||||
$tmpvat = (float) price2num(preg_replace('/\s*\(.*\)/', '', $tva_tx));
|
||||
$tmpprodvat = price2num(preg_replace('/\s*\(.*\)/', '', $prod->tva_tx));
|
||||
|
||||
// Set unit price to use
|
||||
|
||||
@ -5819,7 +5819,7 @@ class Facture extends CommonInvoice
|
||||
$return .= '<br><span class="info-box-label">'.$this->fk_user_author.'</span>';
|
||||
}
|
||||
if (method_exists($this, 'getLibStatut')) {
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(5).'</div>';
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(3).'</div>';
|
||||
}
|
||||
$return .= '</div>';
|
||||
$return .= '</div>';
|
||||
|
||||
@ -1,4 +1,6 @@
|
||||
<?php
|
||||
use Stripe\BankAccount;
|
||||
|
||||
/* Copyright (C) 2002-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
* Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com>
|
||||
* Copyright (C) 2004-2016 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
@ -138,7 +140,7 @@ if (empty($reshook)) {
|
||||
}
|
||||
}
|
||||
|
||||
// Payment with Direct Debit Stripe
|
||||
// Make payment with Direct Debit Stripe
|
||||
if ($action == 'sepastripepayment' && $usercancreate) {
|
||||
$result = $object->makeStripeSepaRequest($user, GETPOST('did', 'int'), 'direct-debit', 'facture');
|
||||
if ($result < 0) {
|
||||
@ -153,7 +155,7 @@ if (empty($reshook)) {
|
||||
}
|
||||
}
|
||||
|
||||
// payments conditions
|
||||
// Set payments conditions
|
||||
if ($action == 'setconditions' && $usercancreate) {
|
||||
$object->fetch($id);
|
||||
$object->cond_reglement_code = 0; // To clean property
|
||||
@ -404,7 +406,7 @@ if ($object->id > 0) {
|
||||
print '<span class="badgeneutral">';
|
||||
print $object->getLibType();
|
||||
print '</span>';
|
||||
if ($object->module_source) {
|
||||
if (!empty($object->module_source)) {
|
||||
print ' <span class="opacitymediumbycolor paddingleft">('.$langs->trans("POS").' '.$object->module_source.' - '.$langs->trans("Terminal").' '.$object->pos_source.')</span>';
|
||||
}
|
||||
if ($object->type == $object::TYPE_REPLACEMENT) {
|
||||
@ -915,7 +917,7 @@ if ($object->id > 0) {
|
||||
// Past requests
|
||||
|
||||
$sql = "SELECT pfd.rowid, pfd.traite, pfd.date_demande, pfd.date_traite, pfd.fk_prelevement_bons, pfd.amount,";
|
||||
$sql .= " pb.ref, pb.date_trans, pb.method_trans, pb.credite, pb.date_credit, pb.datec, pb.statut as status,";
|
||||
$sql .= " pb.ref, pb.date_trans, pb.method_trans, pb.credite, pb.date_credit, pb.datec, pb.statut as status, pb.fk_bank_account,";
|
||||
$sql .= " u.rowid as user_id, u.email, u.lastname, u.firstname, u.login, u.statut as user_status";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."prelevement_demande as pfd";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."user as u on pfd.fk_user_demande = u.rowid";
|
||||
@ -929,16 +931,16 @@ if ($object->id > 0) {
|
||||
$sql .= " AND pfd.type = 'ban'";
|
||||
$sql .= " ORDER BY pfd.date_demande DESC";
|
||||
|
||||
$result = $db->query($sql);
|
||||
if ($result) {
|
||||
$num = $db->num_rows($result);
|
||||
$resql = $db->query($sql);
|
||||
if ($resql) {
|
||||
$num = $db->num_rows($resql);
|
||||
$numclosed = $num;
|
||||
$i = 0;
|
||||
|
||||
$tmpuser = new User($db);
|
||||
|
||||
while ($i < $num) {
|
||||
$obj = $db->fetch_object($result);
|
||||
$obj = $db->fetch_object($resql);
|
||||
|
||||
$tmpuser->id = $obj->user_id;
|
||||
$tmpuser->login = $obj->login;
|
||||
@ -975,9 +977,26 @@ if ($object->id > 0) {
|
||||
$withdrawreceipt->date_creation = $db->jdate($obj->datec);
|
||||
$withdrawreceipt->statut = $obj->status;
|
||||
$withdrawreceipt->status = $obj->status;
|
||||
$withdrawreceipt->fk_bank_account = $obj->fk_bank_account;
|
||||
//$withdrawreceipt->credite = $db->jdate($obj->credite);
|
||||
|
||||
print $withdrawreceipt->getNomUrl(1);
|
||||
print ' ';
|
||||
print $withdrawreceipt->getLibStatut(2);
|
||||
|
||||
// Show the bank account
|
||||
$fk_bank_account = $withdrawreceipt->fk_bank_account;
|
||||
if (empty($fk_bank_account)) {
|
||||
$fk_bank_account = ($object->type == 'bank-transfer' ? $conf->global->PAYMENTBYBANKTRANSFER_ID_BANKACCOUNT : $conf->global->PRELEVEMENT_ID_BANKACCOUNT);
|
||||
}
|
||||
if ($fk_bank_account > 0) {
|
||||
$bankaccount = new Account($db);
|
||||
$result = $bankaccount->fetch($fk_bank_account);
|
||||
if ($result > 0) {
|
||||
print ' - ';
|
||||
print $bankaccount->getNomUrl(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
print "</td>\n";
|
||||
|
||||
@ -995,7 +1014,7 @@ if ($object->id > 0) {
|
||||
print '<tr class="oddeven"><td colspan="7"><span class="opacitymedium">'.$langs->trans("None").'</span></td></tr>';
|
||||
}
|
||||
|
||||
$db->free($result);
|
||||
$db->free($resql);
|
||||
} else {
|
||||
dol_print_error($db);
|
||||
}
|
||||
|
||||
@ -1050,7 +1050,7 @@ class RemiseCheque extends CommonObject
|
||||
$return .= ' | <span class="info-box-label">'.$this->account_id.'</span>';
|
||||
}
|
||||
if (method_exists($this, 'LibStatut')) {
|
||||
$return .= '<br><div style="display:inline-block" class="info-box-status margintoponly">'.$this->LibStatut($this->statut, 5).'</div>';
|
||||
$return .= '<br><div style="display:inline-block" class="info-box-status margintoponly">'.$this->getLibStatut(3).'</div>';
|
||||
}
|
||||
if (property_exists($this, 'amount')) {
|
||||
$return .= ' | <div style="display:inline-block"><span class="opacitymedium">'.$langs->trans("Amount").'</span> : <span class="amount">'.price($this->amount).'</div>';
|
||||
|
||||
@ -71,11 +71,22 @@ $type = $object->type;
|
||||
|
||||
if ($type == 'bank-transfer') {
|
||||
$result = restrictedArea($user, 'paymentbybanktransfer', '', '', '');
|
||||
|
||||
$permissiontoadd = $user->hasRight('paymentbybanktransfer', 'read');
|
||||
$permissiontosend = $user->hasRight('paymentbybanktransfer', 'send');
|
||||
$permissiontocreditdebit = $user->hasRight('paymentbybanktransfer', 'debit');
|
||||
$permissiontodelete = $user->hasRight('paymentbybanktransfer', 'read');
|
||||
} else {
|
||||
$result = restrictedArea($user, 'prelevement', '', '', 'bons');
|
||||
|
||||
$permissiontoadd = $user->hasRight('prelevement', 'bons', 'read');
|
||||
$permissiontosend = $user->hasRight('prelevement', 'bons', 'send');
|
||||
$permissiontocreditdebit = $user->hasRight('prelevement', 'bons', 'credit');
|
||||
$permissiontodelete = $user->hasRight('prelevement', 'bons', 'read');
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Actions
|
||||
*/
|
||||
@ -87,20 +98,13 @@ if ($reshook < 0) {
|
||||
}
|
||||
|
||||
if (empty($reshook)) {
|
||||
if ($action == 'confirm_delete') {
|
||||
$savtype = $object->type;
|
||||
$res = $object->delete($user);
|
||||
if ($res > 0) {
|
||||
if ($savtype == 'bank-transfer') {
|
||||
header("Location: ".DOL_URL_ROOT.'/compta/paymentbybanktransfer/index.php');
|
||||
} else {
|
||||
header("Location: ".DOL_URL_ROOT.'/compta/prelevement/index.php');
|
||||
}
|
||||
exit;
|
||||
}
|
||||
if ($action == 'setbankaccount' && $permissiontoadd) {
|
||||
$object->oldcopy = dol_clone($object);
|
||||
$object->fk_bank_account = GETPOST('fk_bank_account', 'int');
|
||||
$object->update($user);
|
||||
}
|
||||
|
||||
if ($action == 'infotrans' && (($user->rights->prelevement->bons->send && $object->type != 'bank-transfer') || ($user->rights->paymentbybanktransfer->send && $object->type == 'bank-transfer'))) {
|
||||
if ($action == 'infotrans' && $permissiontosend) {
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||
|
||||
$dt = dol_mktime(12, 0, 0, GETPOST('remonth', 'int'), GETPOST('reday', 'int'), GETPOST('reyear', 'int'));
|
||||
@ -133,7 +137,7 @@ if (empty($reshook)) {
|
||||
}
|
||||
|
||||
// Set direct debit order to credited, create payment and close invoices
|
||||
if ($action == 'infocredit' && (($user->rights->prelevement->bons->credit && $object->type != 'bank-transfer') || ($user->rights->paymentbybanktransfer->debit && $object->type == 'bank-transfer'))) {
|
||||
if ($action == 'infocredit' && $permissiontocreditdebit) {
|
||||
$dt = dol_mktime(12, 0, 0, GETPOST('remonth', 'int'), GETPOST('reday', 'int'), GETPOST('reyear', 'int'));
|
||||
|
||||
if (($object->type != 'bank-transfer' && $object->statut == BonPrelevement::STATUS_CREDITED) || ($object->type == 'bank-transfer' && $object->statut == BonPrelevement::STATUS_DEBITED)) {
|
||||
@ -147,6 +151,19 @@ if (empty($reshook)) {
|
||||
setEventMessages($object->error, $object->errors, 'errors');
|
||||
}
|
||||
}
|
||||
|
||||
if ($action == 'confirm_delete' && $permissiontodelete) {
|
||||
$savtype = $object->type;
|
||||
$res = $object->delete($user);
|
||||
if ($res > 0) {
|
||||
if ($savtype == 'bank-transfer') {
|
||||
header("Location: ".DOL_URL_ROOT.'/compta/paymentbybanktransfer/index.php');
|
||||
} else {
|
||||
header("Location: ".DOL_URL_ROOT.'/compta/prelevement/index.php');
|
||||
}
|
||||
exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -179,13 +196,6 @@ if ($id > 0 || $ref) {
|
||||
|
||||
print '<tr><td>'.$langs->trans("Amount").'</td><td><span class="amount">'.price($object->amount).'</span></td></tr>';
|
||||
|
||||
// Status
|
||||
/*
|
||||
print '<tr><td>'.$langs->trans('Status').'</td>';
|
||||
print '<td>'.$object->getLibStatut(1).'</td>';
|
||||
print '</tr>';
|
||||
*/
|
||||
|
||||
if (!empty($object->date_trans)) {
|
||||
$muser = new User($db);
|
||||
$muser->fetch($object->user_trans);
|
||||
@ -210,23 +220,53 @@ if ($id > 0 || $ref) {
|
||||
print '<div class="underbanner clearboth"></div>';
|
||||
print '<table class="border centpercent tableforfield">';
|
||||
|
||||
// Get bank account for the payment
|
||||
$acc = new Account($db);
|
||||
$result = $acc->fetch(($object->type == 'bank-transfer' ? $conf->global->PAYMENTBYBANKTRANSFER_ID_BANKACCOUNT : $conf->global->PRELEVEMENT_ID_BANKACCOUNT));
|
||||
$fk_bank_account = $object->fk_bank_account;
|
||||
if (empty($fk_bank_account)) {
|
||||
$fk_bank_account = ($object->type == 'bank-transfer' ? getDolGlobalInt('PAYMENTBYBANKTRANSFER_ID_BANKACCOUNT') : getDolGlobalInt('PRELEVEMENT_ID_BANKACCOUNT'));
|
||||
}
|
||||
if ($fk_bank_account > 0) {
|
||||
$result = $acc->fetch($fk_bank_account);
|
||||
}
|
||||
|
||||
print '<tr><td class="titlefieldcreate">';
|
||||
// Bank account
|
||||
$labelofbankfield = "BankToReceiveWithdraw";
|
||||
if ($object->type == 'bank-transfer') {
|
||||
$labelofbankfield = 'BankToPayCreditTransfer';
|
||||
}
|
||||
print $langs->trans($labelofbankfield);
|
||||
//print $langs->trans($labelofbankfield);
|
||||
$caneditbank = $permissiontoadd;
|
||||
if ($object->status != $object::STATUS_DRAFT) {
|
||||
$caneditbank = 0;
|
||||
}
|
||||
/*
|
||||
print '<tr><td class="titlefieldcreate">';
|
||||
print $form->editfieldkey($langs->trans($labelofbankfield), 'fk_bank_account', $acc->id, $object, $caneditbank);
|
||||
print '</td>';
|
||||
print '<td>';
|
||||
if ($acc->id > 0) {
|
||||
print $acc->getNomUrl(1);
|
||||
}
|
||||
print $form->editfieldval($langs->trans($labelofbankfield), 'fk_bank_account', $acc->id, $acc, $caneditbank, 'string', '', null, null, '', 1, 'getNomUrl');
|
||||
print '</td>';
|
||||
print '</tr>';
|
||||
*/
|
||||
print '<tr><td class="nowrap">';
|
||||
print '<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
|
||||
print $form->textwithpicto($langs->trans("BankAccount"), $langs->trans($labelofbankfield));
|
||||
print '<td>';
|
||||
if (($action != 'editbankaccount') && $caneditbank) {
|
||||
print '<td class="right"><a class="editfielda" href="'.$_SERVER["PHP_SELF"].'?action=editfkbankaccount&token='.newToken().'&id='.$object->id.'">'.img_edit($langs->trans('SetBankAccount'), 1).'</a></td>';
|
||||
}
|
||||
print '</tr></table>';
|
||||
print '</td><td>';
|
||||
if ($action == 'editfkbankaccount') {
|
||||
$form->formSelectAccount($_SERVER['PHP_SELF'].'?id='.$object->id, $fk_bank_account, 'fk_bank_account', 0);
|
||||
} else {
|
||||
$form->formSelectAccount($_SERVER['PHP_SELF'].'?id='.$object->id, $fk_bank_account, 'none');
|
||||
}
|
||||
print "</td>";
|
||||
print '</tr>';
|
||||
|
||||
// Donwload file
|
||||
print '<tr><td class="titlefieldcreate">';
|
||||
$labelfororderfield = 'WithdrawalFile';
|
||||
if ($object->type == 'bank-transfer') {
|
||||
|
||||
@ -70,13 +70,11 @@ class BonPrelevement extends CommonObject
|
||||
public $emetteur_bic;
|
||||
public $emetteur_ics;
|
||||
|
||||
public $date_trans;
|
||||
public $user_trans;
|
||||
public $method_trans;
|
||||
public $user_credit;
|
||||
|
||||
public $total;
|
||||
public $fetched;
|
||||
public $statut; // 0-Wait, 1-Trans, 2-Done
|
||||
public $labelStatus = array();
|
||||
|
||||
public $factures = array();
|
||||
@ -84,14 +82,6 @@ class BonPrelevement extends CommonObject
|
||||
public $invoice_in_error = array();
|
||||
public $thirdparty_in_error = array();
|
||||
|
||||
public $amount;
|
||||
public $note;
|
||||
public $datec;
|
||||
|
||||
public $date_credit;
|
||||
public $user_credit;
|
||||
|
||||
public $type;
|
||||
|
||||
const STATUS_DRAFT = 0;
|
||||
const STATUS_TRANSFERED = 1;
|
||||
@ -99,6 +89,83 @@ class BonPrelevement extends CommonObject
|
||||
const STATUS_DEBITED = 2; // STATUS_CREDITED and STATUS_DEBITED is same. Difference is in ->type
|
||||
|
||||
|
||||
/**
|
||||
* 'type' field format:
|
||||
* 'integer', 'integer:ObjectClass:PathToClass[:AddCreateButtonOrNot[:Filter[:Sortfield]]]',
|
||||
* 'select' (list of values are in 'options'),
|
||||
* 'sellist:TableName:LabelFieldName[:KeyFieldName[:KeyFieldParent[:Filter[:Sortfield]]]]',
|
||||
* 'chkbxlst:...',
|
||||
* 'varchar(x)',
|
||||
* 'text', 'text:none', 'html',
|
||||
* 'double(24,8)', 'real', 'price',
|
||||
* 'date', 'datetime', 'timestamp', 'duration',
|
||||
* 'boolean', 'checkbox', 'radio', 'array',
|
||||
* 'mail', 'phone', 'url', 'password', 'ip'
|
||||
* Note: Filter must be a Dolibarr filter syntax string. Example: "(t.ref:like:'SO-%') or (t.date_creation:<:'20160101') or (t.status:!=:0) or (t.nature:is:NULL)"
|
||||
* 'label' the translation key.
|
||||
* 'picto' is code of a picto to show before value in forms
|
||||
* 'enabled' is a condition when the field must be managed (Example: 1 or '$conf->global->MY_SETUP_PARAM' or 'isModEnabled("multicurrency")' ...)
|
||||
* 'position' is the sort order of field.
|
||||
* 'notnull' is set to 1 if not null in database. Set to -1 if we must set data to null if empty ('' or 0).
|
||||
* 'visible' says if field is visible in list (Examples: 0=Not visible, 1=Visible on list and create/update/view forms, 2=Visible on list only, 3=Visible on create/update/view form only (not list), 4=Visible on list and update/view form only (not create). 5=Visible on list and view only (not create/not update). Using a negative value means field is not shown by default on list but can be selected for viewing)
|
||||
* 'noteditable' says if field is not editable (1 or 0)
|
||||
* 'alwayseditable' says if field can be modified also when status is not draft ('1' or '0')
|
||||
* 'default' is a default value for creation (can still be overwrote by the Setup of Default Values if field is editable in creation form). Note: If default is set to '(PROV)' and field is 'ref', the default value will be set to '(PROVid)' where id is rowid when a new record is created.
|
||||
* 'index' if we want an index in database.
|
||||
* 'foreignkey'=>'tablename.field' if the field is a foreign key (it is recommanded to name the field fk_...).
|
||||
* 'searchall' is 1 if we want to search in this field when making a search from the quick search button.
|
||||
* 'isameasure' must be set to 1 or 2 if field can be used for measure. Field type must be summable like integer or double(24,8). Use 1 in most cases, or 2 if you don't want to see the column total into list (for example for percentage)
|
||||
* 'css' and 'cssview' and 'csslist' is the CSS style to use on field. 'css' is used in creation and update. 'cssview' is used in view mode. 'csslist' is used for columns in lists. For example: 'css'=>'minwidth300 maxwidth500 widthcentpercentminusx', 'cssview'=>'wordbreak', 'csslist'=>'tdoverflowmax200'
|
||||
* 'help' is a 'TranslationString' to use to show a tooltip on field. You can also use 'TranslationString:keyfortooltiponlick' for a tooltip on click.
|
||||
* 'showoncombobox' if value of the field must be visible into the label of the combobox that list record
|
||||
* 'disabled' is 1 if we want to have the field locked by a 'disabled' attribute. In most cases, this is never set into the definition of $fields into class, but is set dynamically by some part of code.
|
||||
* 'arrayofkeyval' to set a list of values if type is a list of predefined values. For example: array("0"=>"Draft","1"=>"Active","-1"=>"Cancel"). Note that type can be 'integer' or 'varchar'
|
||||
* 'autofocusoncreate' to have field having the focus on a create form. Only 1 field should have this property set to 1.
|
||||
* 'comment' is not used. You can store here any text of your choice. It is not used by application.
|
||||
* 'validate' is 1 if need to validate with $this->validateField()
|
||||
* 'copytoclipboard' is 1 or 2 to allow to add a picto to copy value into clipboard (1=picto after label, 2=picto after value)
|
||||
*
|
||||
* Note: To have value dynamic, you can set value to 0 in definition and edit the value on the fly into the constructor.
|
||||
*/
|
||||
|
||||
// BEGIN MODULEBUILDER PROPERTIES
|
||||
/**
|
||||
* @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor.
|
||||
*/
|
||||
public $fields=array(
|
||||
'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>'1', 'position'=>10, 'notnull'=>1, 'visible'=>0,),
|
||||
'ref' => array('type'=>'varchar(12)', 'label'=>'Ref', 'enabled'=>'1', 'position'=>15, 'notnull'=>0, 'visible'=>-1, 'csslist'=>'tdoverflowmax150', 'showoncombobox'=>'1',),
|
||||
'datec' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>'1', 'position'=>25, 'notnull'=>0, 'visible'=>-1,),
|
||||
'amount' => array('type'=>'double(24,8)', 'label'=>'Amount', 'enabled'=>'1', 'position'=>30, 'notnull'=>0, 'visible'=>-1,),
|
||||
'statut' => array('type'=>'smallint(6)', 'label'=>'Statut', 'enabled'=>'1', 'position'=>500, 'notnull'=>0, 'visible'=>-1, 'arrayofkeyval'=>array(0=>'Wait', 1=>'Transfered', 2=>'Credited')),
|
||||
'credite' => array('type'=>'smallint(6)', 'label'=>'Credite', 'enabled'=>'1', 'position'=>40, 'notnull'=>0, 'visible'=>-1,),
|
||||
'note' => array('type'=>'text', 'label'=>'Note', 'enabled'=>'1', 'position'=>45, 'notnull'=>0, 'visible'=>-1,),
|
||||
'date_trans' => array('type'=>'datetime', 'label'=>'Datetrans', 'enabled'=>'1', 'position'=>50, 'notnull'=>0, 'visible'=>-1,),
|
||||
'method_trans' => array('type'=>'smallint(6)', 'label'=>'Methodtrans', 'enabled'=>'1', 'position'=>55, 'notnull'=>0, 'visible'=>-1,),
|
||||
'fk_user_trans' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'Fkusertrans', 'enabled'=>'1', 'position'=>60, 'notnull'=>0, 'visible'=>-1, 'css'=>'maxwidth500 widthcentpercentminusxx', 'csslist'=>'tdoverflowmax150',),
|
||||
'date_credit' => array('type'=>'datetime', 'label'=>'Datecredit', 'enabled'=>'1', 'position'=>65, 'notnull'=>0, 'visible'=>-1,),
|
||||
'fk_user_credit' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'Fkusercredit', 'enabled'=>'1', 'position'=>70, 'notnull'=>0, 'visible'=>-1, 'css'=>'maxwidth500 widthcentpercentminusxx', 'csslist'=>'tdoverflowmax150',),
|
||||
'type' => array('type'=>'varchar(16)', 'label'=>'Type', 'enabled'=>'1', 'position'=>75, 'notnull'=>0, 'visible'=>-1,),
|
||||
'fk_bank_account' => array('type'=>'integer', 'label'=>'Fkbankaccount', 'enabled'=>'1', 'position'=>80, 'notnull'=>0, 'visible'=>-1, 'css'=>'maxwidth500 widthcentpercentminusxx',),
|
||||
);
|
||||
public $rowid;
|
||||
public $ref;
|
||||
public $datec;
|
||||
public $amount;
|
||||
public $statut;
|
||||
public $credite;
|
||||
public $note;
|
||||
public $date_trans;
|
||||
public $method_trans;
|
||||
public $fk_user_trans;
|
||||
public $date_credit;
|
||||
public $fk_user_credit;
|
||||
public $type;
|
||||
public $fk_bank_account;
|
||||
// END MODULEBUILDER PROPERTIES
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
@ -290,8 +357,6 @@ class BonPrelevement extends CommonObject
|
||||
*/
|
||||
public function fetch($rowid, $ref = '')
|
||||
{
|
||||
global $conf;
|
||||
|
||||
$sql = "SELECT p.rowid, p.ref, p.amount, p.note";
|
||||
$sql .= ", p.datec as dc";
|
||||
$sql .= ", p.date_trans as date_trans";
|
||||
@ -299,6 +364,7 @@ class BonPrelevement extends CommonObject
|
||||
$sql .= ", p.date_credit as date_credit";
|
||||
$sql .= ", p.fk_user_credit";
|
||||
$sql .= ", p.type";
|
||||
$sql .= ", p.fk_bank_account";
|
||||
$sql .= ", p.statut as status";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."prelevement_bons as p";
|
||||
$sql .= " WHERE p.entity IN (".getEntity('invoice').")";
|
||||
@ -328,6 +394,7 @@ class BonPrelevement extends CommonObject
|
||||
$this->user_credit = $obj->fk_user_credit;
|
||||
|
||||
$this->type = $obj->type;
|
||||
$this->fk_bank_account = $obj->fk_bank_account;
|
||||
|
||||
$this->status = $obj->status;
|
||||
$this->statut = $obj->status; // For backward compatibility
|
||||
@ -344,6 +411,18 @@ class BonPrelevement extends CommonObject
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update object into database
|
||||
*
|
||||
* @param User $user User that modifies
|
||||
* @param bool $notrigger false=launch triggers after, true=disable triggers
|
||||
* @return int <0 if KO, >0 if OK
|
||||
*/
|
||||
public function update(User $user, $notrigger = false)
|
||||
{
|
||||
return $this->updateCommon($user, $notrigger);
|
||||
}
|
||||
|
||||
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
|
||||
/**
|
||||
* Set direct debit or credit transfer order to "paid" status.
|
||||
@ -369,7 +448,7 @@ class BonPrelevement extends CommonObject
|
||||
|
||||
$this->db->begin();
|
||||
|
||||
$sql = " UPDATE ".MAIN_DB_PREFIX."prelevement_bons ";
|
||||
$sql = " UPDATE ".MAIN_DB_PREFIX."prelevement_bons";
|
||||
$sql .= " SET fk_user_credit = ".$user->id;
|
||||
$sql .= ", statut = ".self::STATUS_CREDITED;
|
||||
$sql .= ", date_credit = '".$this->db->idate($date)."'";
|
||||
@ -383,8 +462,12 @@ class BonPrelevement extends CommonObject
|
||||
$subject = $langs->trans("InfoCreditSubject", $this->ref);
|
||||
$message = $langs->trans("InfoCreditMessage", $this->ref, dol_print_date($date, 'dayhour'));
|
||||
|
||||
//Add payment of withdrawal into bank
|
||||
$bankaccount = ($this->type == 'bank-transfer' ? $conf->global->PAYMENTBYBANKTRANSFER_ID_BANKACCOUNT : $conf->global->PRELEVEMENT_ID_BANKACCOUNT);
|
||||
// Add payment of withdrawal into bank
|
||||
$fk_bank_account = $this->fk_bank_account;
|
||||
if (empty($fk_bank_account)) {
|
||||
$fk_bank_account = ($this->type == 'bank-transfer' ? $conf->global->PAYMENTBYBANKTRANSFER_ID_BANKACCOUNT : $conf->global->PRELEVEMENT_ID_BANKACCOUNT);
|
||||
}
|
||||
|
||||
$facs = array();
|
||||
$amounts = array();
|
||||
$amountsperthirdparty = array();
|
||||
@ -455,7 +538,7 @@ class BonPrelevement extends CommonObject
|
||||
$modeforaddpayment = 'payment';
|
||||
}
|
||||
|
||||
$result = $paiement->addPaymentToBank($user, $modeforaddpayment, '(WithdrawalPayment)', $bankaccount, '', '');
|
||||
$result = $paiement->addPaymentToBank($user, $modeforaddpayment, '(WithdrawalPayment)', $fk_bank_account, '', '');
|
||||
if ($result < 0) {
|
||||
$error++;
|
||||
$this->error = $paiement->error;
|
||||
@ -742,17 +825,18 @@ class BonPrelevement extends CommonObject
|
||||
* - Link the order with the prelevement_demande lines
|
||||
* TODO delete params banque and agence when not necessary
|
||||
*
|
||||
* @param int $banque dolibarr mysoc bank
|
||||
* @param int $agence dolibarr mysoc bank office (guichet)
|
||||
* @param string $mode real=do action, simu=test only
|
||||
* @param string $format FRST, RCUR or ALL
|
||||
* @param string $executiondate Date to execute the transfer
|
||||
* @param int $notrigger Disable triggers
|
||||
* @param string $type 'direct-debit' or 'bank-transfer'
|
||||
* @param int $did ID of an existing payment request. If $did is defined, no entry
|
||||
* @return int <0 if KO, No of invoice included into file if OK
|
||||
* @param int $banque dolibarr mysoc bank
|
||||
* @param int $agence dolibarr mysoc bank office (guichet)
|
||||
* @param string $mode real=do action, simu=test only
|
||||
* @param string $format FRST, RCUR or ALL
|
||||
* @param string $executiondate Date to execute the transfer
|
||||
* @param int $notrigger Disable triggers
|
||||
* @param string $type 'direct-debit' or 'bank-transfer'
|
||||
* @param int $did ID of an existing payment request. If $did is defined, no entry
|
||||
* @param int $fk_bank_account Bank account ID the receipt is generated for. Will use the ID into the setup of module Direct Debit or Credit Transfer if 0.
|
||||
* @return int <0 if KO, No of invoice included into file if OK
|
||||
*/
|
||||
public function create($banque = 0, $agence = 0, $mode = 'real', $format = 'ALL', $executiondate = '', $notrigger = 0, $type = 'direct-debit', $did = 0)
|
||||
public function create($banque = 0, $agence = 0, $mode = 'real', $format = 'ALL', $executiondate = '', $notrigger = 0, $type = 'direct-debit', $did = 0, $fk_bank_account = 0)
|
||||
{
|
||||
// phpcs:enable
|
||||
global $conf, $langs, $user;
|
||||
@ -762,6 +846,7 @@ class BonPrelevement extends CommonObject
|
||||
require_once DOL_DOCUMENT_ROOT."/compta/facture/class/facture.class.php";
|
||||
require_once DOL_DOCUMENT_ROOT."/societe/class/societe.class.php";
|
||||
|
||||
// Check params
|
||||
if ($type != 'bank-transfer') {
|
||||
if (empty($format)) {
|
||||
$this->error = 'ErrorBadParametersForDirectDebitFileCreate';
|
||||
@ -769,6 +854,11 @@ class BonPrelevement extends CommonObject
|
||||
}
|
||||
}
|
||||
|
||||
// Clean params
|
||||
if (empty($fk_bank_account)) {
|
||||
$fk_bank_account = ($type == 'bank-transfer' ? $conf->global->PAYMENTBYBANKTRANSFER_ID_BANKACCOUNT : $conf->global->PRELEVEMENT_ID_BANKACCOUNT);
|
||||
}
|
||||
|
||||
$error = 0;
|
||||
|
||||
$datetimeprev = dol_now('gmt');
|
||||
@ -969,12 +1059,13 @@ class BonPrelevement extends CommonObject
|
||||
|
||||
// Create withdraw order in database
|
||||
$sql = "INSERT INTO ".MAIN_DB_PREFIX."prelevement_bons (";
|
||||
$sql .= "ref, entity, datec, type";
|
||||
$sql .= "ref, entity, datec, type, fk_bank_account";
|
||||
$sql .= ") VALUES (";
|
||||
$sql .= "'".$this->db->escape($ref)."'";
|
||||
$sql .= ", ".((int) $conf->entity);
|
||||
$sql .= ", '".$this->db->idate($now)."'";
|
||||
$sql .= ", '".($type == 'bank-transfer' ? 'bank-transfer' : 'debit-order')."'";
|
||||
$sql .= ", ".((int) $fk_bank_account);
|
||||
$sql .= ")";
|
||||
|
||||
$resql = $this->db->query($sql);
|
||||
@ -1055,12 +1146,8 @@ class BonPrelevement extends CommonObject
|
||||
$this->date_echeance = $datetimeprev;
|
||||
$this->reference_remise = $ref;
|
||||
|
||||
$id = $conf->global->PRELEVEMENT_ID_BANKACCOUNT;
|
||||
if ($type == 'bank-transfer') {
|
||||
$id = $conf->global->PAYMENTBYBANKTRANSFER_ID_BANKACCOUNT;
|
||||
}
|
||||
$account = new Account($this->db);
|
||||
if ($account->fetch($id) > 0) {
|
||||
if ($account->fetch($fk_bank_account) > 0) {
|
||||
$this->emetteur_code_banque = $account->code_banque;
|
||||
$this->emetteur_code_guichet = $account->code_guichet;
|
||||
$this->emetteur_numero_compte = $account->number;
|
||||
@ -1382,16 +1469,22 @@ class BonPrelevement extends CommonObject
|
||||
* File is generated with name this->filename
|
||||
*
|
||||
* @param string $format FRST, RCUR or ALL
|
||||
* @param string $executiondate Date to execute transfer
|
||||
* @param int $executiondate Timestamp date to execute transfer
|
||||
* @param string $type 'direct-debit' or 'bank-transfer'
|
||||
* @param int $fk_bank_account Bank account ID the receipt is generated for. Will use the ID into the setup of module Direct Debit or Credit Transfer if 0.
|
||||
* @return int >=0 if OK, <0 if KO
|
||||
*/
|
||||
public function generate($format = 'ALL', $executiondate = '', $type = 'direct-debit')
|
||||
public function generate($format = 'ALL', $executiondate = 0, $type = 'direct-debit', $fk_bank_account = 0)
|
||||
{
|
||||
global $conf, $langs, $mysoc;
|
||||
|
||||
//TODO: Optimize code to read lines in a single function
|
||||
|
||||
// Clean params
|
||||
if (empty($fk_bank_account)) {
|
||||
$fk_bank_account = ($type == 'bank-transfer' ? $conf->global->PAYMENTBYBANKTRANSFER_ID_BANKACCOUNT : $conf->global->PRELEVEMENT_ID_BANKACCOUNT);
|
||||
}
|
||||
|
||||
$result = 0;
|
||||
|
||||
dol_syslog(get_class($this)."::generate build file=".$this->filename." type=".$type);
|
||||
@ -1486,7 +1579,7 @@ class BonPrelevement extends CommonObject
|
||||
|
||||
// Define $fileEmetteurSection. Start of bloc PmtInf. Will contains all $nbtotalDrctDbtTxInf
|
||||
if ($result != -2) {
|
||||
$fileEmetteurSection .= $this->EnregEmetteurSEPA($conf, $date_actu, $nbtotalDrctDbtTxInf, $this->total, $CrLf, $format, $type);
|
||||
$fileEmetteurSection .= $this->EnregEmetteurSEPA($conf, $date_actu, $nbtotalDrctDbtTxInf, $this->total, $CrLf, $format, $type, $fk_bank_account);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -2041,31 +2134,36 @@ class BonPrelevement extends CommonObject
|
||||
* Write sender of request (me).
|
||||
* Note: The tag PmtInf is opened here but closed into caller
|
||||
*
|
||||
* @param Conf $configuration conf
|
||||
* @param int $ladate Date
|
||||
* @param int $nombre 0 or 1
|
||||
* @param float $total Total
|
||||
* @param string $CrLf End of line character
|
||||
* @param string $format FRST or RCUR or ALL
|
||||
* @param string $type 'direct-debit' or 'bank-transfer'
|
||||
* @return string String with SEPA Sender
|
||||
* @param Conf $configuration conf
|
||||
* @param int $ladate Date
|
||||
* @param int $nombre 0 or 1
|
||||
* @param float $total Total
|
||||
* @param string $CrLf End of line character
|
||||
* @param string $format FRST or RCUR or ALL
|
||||
* @param string $type 'direct-debit' or 'bank-transfer'
|
||||
* @param int $fk_bank_account Bank account ID the receipt is generated for. Will use the ID into the setup of module Direct Debit or Credit Transfer if 0.
|
||||
* @return string String with SEPA Sender
|
||||
* @see EnregEmetteur()
|
||||
*/
|
||||
public function EnregEmetteurSEPA($configuration, $ladate, $nombre, $total, $CrLf = '\n', $format = 'FRST', $type = 'direct-debit')
|
||||
public function EnregEmetteurSEPA($configuration, $ladate, $nombre, $total, $CrLf = '\n', $format = 'FRST', $type = 'direct-debit', $fk_bank_account = 0)
|
||||
{
|
||||
// phpcs:enable
|
||||
// SEPA INITIALISATION
|
||||
global $conf;
|
||||
|
||||
// Clean parameters
|
||||
$dateTime_YMD = dol_print_date($ladate, '%Y%m%d');
|
||||
$dateTime_ETAD = dol_print_date($ladate, '%Y-%m-%d');
|
||||
$dateTime_YMDHMS = dol_print_date($ladate, '%Y-%m-%dT%H:%M:%S');
|
||||
|
||||
// Clean params
|
||||
if (empty($fk_bank_account)) {
|
||||
$fk_bank_account = ($type == 'bank-transfer' ? $conf->global->PAYMENTBYBANKTRANSFER_ID_BANKACCOUNT : $conf->global->PRELEVEMENT_ID_BANKACCOUNT);
|
||||
}
|
||||
|
||||
// Get data of bank account
|
||||
//$id = $configuration->global->PRELEVEMENT_ID_BANKACCOUNT;
|
||||
$id = ($type == 'bank-transfer' ? $conf->global->PAYMENTBYBANKTRANSFER_ID_BANKACCOUNT : $conf->global->PRELEVEMENT_ID_BANKACCOUNT);
|
||||
$account = new Account($this->db);
|
||||
if ($account->fetch($id) > 0) {
|
||||
if ($account->fetch($fk_bank_account) > 0) {
|
||||
$this->emetteur_code_banque = $account->code_banque;
|
||||
$this->emetteur_code_guichet = $account->code_guichet;
|
||||
$this->emetteur_numero_compte = $account->number;
|
||||
@ -2081,8 +2179,7 @@ class BonPrelevement extends CommonObject
|
||||
|
||||
// Get pending payments
|
||||
$sql = "SELECT rowid, ref";
|
||||
$sql .= " FROM";
|
||||
$sql .= " ".MAIN_DB_PREFIX."prelevement_bons as pb";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."prelevement_bons as pb";
|
||||
$sql .= " WHERE pb.rowid = ".((int) $this->id);
|
||||
|
||||
$resql = $this->db->query($sql);
|
||||
@ -2294,10 +2391,10 @@ class BonPrelevement extends CommonObject
|
||||
}
|
||||
|
||||
/**
|
||||
* Return status label of object
|
||||
* Return status label of object
|
||||
*
|
||||
* @param int $mode 0=Label, 1=Picto + label, 2=Picto, 3=Label + Picto
|
||||
* @return string Label
|
||||
* @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto, 6=Long label + Picto
|
||||
* @return string Label
|
||||
*/
|
||||
public function getLibStatut($mode = 0)
|
||||
{
|
||||
@ -2427,7 +2524,6 @@ class BonPrelevement extends CommonObject
|
||||
{
|
||||
global $langs;
|
||||
|
||||
|
||||
$return = '<div class="box-flex-item box-flex-grow-zero">';
|
||||
$return .= '<div class="info-box info-box-sm">';
|
||||
$return .= '<span class="info-box-icon bg-infobox-action">';
|
||||
@ -2443,7 +2539,7 @@ class BonPrelevement extends CommonObject
|
||||
$return .= '<br><span class="opacitymedium">'.$langs->trans("Amount").'</span> : <span class="amount">'.price($this->total).'</span>';
|
||||
}
|
||||
if (method_exists($this, 'LibStatut')) {
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->LibStatut($this->statut, 5).'</div>';
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(3).'</div>';
|
||||
}
|
||||
$return .= '</div>';
|
||||
$return .= '</div>';
|
||||
|
||||
@ -105,7 +105,7 @@ if ($id > 0 || $ref) {
|
||||
print '<tr><td class="titlefieldcreate">'.$langs->trans("Date").'</td><td>'.dol_print_date($object->datec, 'day').'</td></tr>';
|
||||
print '<tr><td>'.$langs->trans("Amount").'</td><td><span class="amount">'.price($object->amount).'</span></td></tr>';
|
||||
|
||||
if ($object->date_trans <> 0) {
|
||||
if (!empty($object->date_trans)) {
|
||||
$muser = new User($db);
|
||||
$muser->fetch($object->user_trans);
|
||||
|
||||
@ -116,7 +116,7 @@ if ($id > 0 || $ref) {
|
||||
print $object->methodes_trans[$object->method_trans];
|
||||
print '</td></tr>';
|
||||
}
|
||||
if ($object->date_credit <> 0) {
|
||||
if (!empty($object->date_credit)) {
|
||||
print '<tr><td>'.$langs->trans('CreditDate').'</td><td>';
|
||||
print dol_print_date($object->date_credit, 'day');
|
||||
print '</td></tr>';
|
||||
@ -129,15 +129,23 @@ if ($id > 0 || $ref) {
|
||||
print '<div class="underbanner clearboth"></div>';
|
||||
print '<table class="border centpercent tableforfield">';
|
||||
|
||||
// Get bank account for the payment
|
||||
$acc = new Account($db);
|
||||
$result = $acc->fetch($conf->global->PRELEVEMENT_ID_BANKACCOUNT);
|
||||
$fk_bank_account = $object->fk_bank_account;
|
||||
if (empty($fk_bank_account)) {
|
||||
$fk_bank_account = ($object->type == 'bank-transfer' ? getDolGlobalInt('PAYMENTBYBANKTRANSFER_ID_BANKACCOUNT') : getDolGlobalInt('PRELEVEMENT_ID_BANKACCOUNT'));
|
||||
}
|
||||
if ($fk_bank_account > 0) {
|
||||
$result = $acc->fetch($fk_bank_account);
|
||||
}
|
||||
|
||||
print '<tr><td class="titlefieldcreate">';
|
||||
$labelofbankfield = "BankToReceiveWithdraw";
|
||||
if ($object->type == 'bank-transfer') {
|
||||
$labelofbankfield = 'BankToPayCreditTransfer';
|
||||
}
|
||||
print $langs->trans($labelofbankfield);
|
||||
|
||||
print '<tr><td class="titlefieldcreate">';
|
||||
print $form->textwithpicto($langs->trans("BankAccount"), $langs->trans($labelofbankfield));
|
||||
print '</td>';
|
||||
print '<td>';
|
||||
if ($acc->id > 0) {
|
||||
|
||||
@ -100,7 +100,7 @@ if ($id > 0 || $ref) {
|
||||
print '<tr><td class="titlefieldcreate">'.$langs->trans("Date").'</td><td>'.dol_print_date($object->datec, 'day').'</td></tr>';
|
||||
print '<tr><td>'.$langs->trans("Amount").'</td><td><span class="amount">'.price($object->amount).'</span></td></tr>';
|
||||
|
||||
if ($object->date_trans <> 0) {
|
||||
if (!empty($object->date_trans)) {
|
||||
$muser = new User($db);
|
||||
$muser->fetch($object->user_trans);
|
||||
|
||||
@ -111,7 +111,7 @@ if ($id > 0 || $ref) {
|
||||
print $object->methodes_trans[$object->method_trans];
|
||||
print '</td></tr>';
|
||||
}
|
||||
if ($object->date_credit <> 0) {
|
||||
if (!empty($object->date_credit)) {
|
||||
print '<tr><td>'.$langs->trans('CreditDate').'</td><td>';
|
||||
print dol_print_date($object->date_credit, 'day');
|
||||
print '</td></tr>';
|
||||
@ -124,15 +124,23 @@ if ($id > 0 || $ref) {
|
||||
print '<div class="underbanner clearboth"></div>';
|
||||
print '<table class="border centpercent tableforfield">';
|
||||
|
||||
// Get bank account for the payment
|
||||
$acc = new Account($db);
|
||||
$result = $acc->fetch($conf->global->PRELEVEMENT_ID_BANKACCOUNT);
|
||||
$fk_bank_account = $object->fk_bank_account;
|
||||
if (empty($fk_bank_account)) {
|
||||
$fk_bank_account = ($object->type == 'bank-transfer' ? getDolGlobalInt('PAYMENTBYBANKTRANSFER_ID_BANKACCOUNT') : getDolGlobalInt('PRELEVEMENT_ID_BANKACCOUNT'));
|
||||
}
|
||||
if ($fk_bank_account > 0) {
|
||||
$result = $acc->fetch($fk_bank_account);
|
||||
}
|
||||
|
||||
print '<tr><td class="titlefieldcreate">';
|
||||
$labelofbankfield = "BankToReceiveWithdraw";
|
||||
if ($object->type == 'bank-transfer') {
|
||||
$labelofbankfield = 'BankToPayCreditTransfer';
|
||||
}
|
||||
print $langs->trans($labelofbankfield);
|
||||
|
||||
print '<tr><td class="titlefieldcreate">';
|
||||
print $form->textwithpicto($langs->trans("BankAccount"), $langs->trans($labelofbankfield));
|
||||
print '</td>';
|
||||
print '<td>';
|
||||
if ($acc->id > 0) {
|
||||
@ -242,7 +250,7 @@ if ($resql) {
|
||||
$i++;
|
||||
}
|
||||
} else {
|
||||
print '<tr><td colspan="6" class="opacitymedium">'.$langs->trans("None").'</td></tr>';
|
||||
print '<tr><td colspan="6"><span class="opacitymedium">'.$langs->trans("None").'</span></td></tr>';
|
||||
}
|
||||
|
||||
if ($num > 0) {
|
||||
|
||||
@ -94,7 +94,7 @@ if ($id > 0 || $ref) {
|
||||
print '<tr><td class="titlefieldcreate">'.$langs->trans("Date").'</td><td>'.dol_print_date($object->datec, 'day').'</td></tr>';
|
||||
print '<tr><td>'.$langs->trans("Amount").'</td><td><span class="amount">'.price($object->amount).'</span></td></tr>';
|
||||
|
||||
if ($object->date_trans <> 0) {
|
||||
if (!empty($object->date_trans)) {
|
||||
$muser = new User($db);
|
||||
$muser->fetch($object->user_trans);
|
||||
|
||||
@ -105,7 +105,7 @@ if ($id > 0 || $ref) {
|
||||
print $object->methodes_trans[$object->method_trans];
|
||||
print '</td></tr>';
|
||||
}
|
||||
if ($object->date_credit <> 0) {
|
||||
if (!empty($object->date_credit)) {
|
||||
print '<tr><td>'.$langs->trans('CreditDate').'</td><td>';
|
||||
print dol_print_date($object->date_credit, 'day');
|
||||
print '</td></tr>';
|
||||
@ -118,15 +118,23 @@ if ($id > 0 || $ref) {
|
||||
print '<div class="underbanner clearboth"></div>';
|
||||
print '<table class="border centpercent tableforfield">';
|
||||
|
||||
// Get bank account for the payment
|
||||
$acc = new Account($db);
|
||||
$result = $acc->fetch($conf->global->PRELEVEMENT_ID_BANKACCOUNT);
|
||||
$fk_bank_account = $object->fk_bank_account;
|
||||
if (empty($fk_bank_account)) {
|
||||
$fk_bank_account = ($object->type == 'bank-transfer' ? getDolGlobalInt('PAYMENTBYBANKTRANSFER_ID_BANKACCOUNT') : getDolGlobalInt('PRELEVEMENT_ID_BANKACCOUNT'));
|
||||
}
|
||||
if ($fk_bank_account > 0) {
|
||||
$result = $acc->fetch($fk_bank_account);
|
||||
}
|
||||
|
||||
print '<tr><td class="titlefieldcreate">';
|
||||
$labelofbankfield = "BankToReceiveWithdraw";
|
||||
if ($object->type == 'bank-transfer') {
|
||||
$labelofbankfield = 'BankToPayCreditTransfer';
|
||||
}
|
||||
print $langs->trans($labelofbankfield);
|
||||
|
||||
print '<tr><td class="titlefieldcreate">';
|
||||
print $form->textwithpicto($langs->trans("BankAccount"), $langs->trans($labelofbankfield));
|
||||
print '</td>';
|
||||
print '<td>';
|
||||
if ($acc->id > 0) {
|
||||
|
||||
@ -779,7 +779,7 @@ class ChargeSociales extends CommonObject
|
||||
$return .= '<span class="info-box-label amount">'.price($this->amount, 0, $langs, 1, -1, -1, $conf->currency).'</span>';
|
||||
}
|
||||
if (method_exists($this, 'LibStatut')) {
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->LibStatut($this->paye, 5, $this->alreadypaid).'</div>';
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(3, $this->alreadypaid).'</div>';
|
||||
}
|
||||
$return .= '</div>';
|
||||
$return .= '</div>';
|
||||
|
||||
@ -935,7 +935,7 @@ class Tva extends CommonObject
|
||||
$return .= '<br><span class="opacitymedium">'.$langs->trans("DateEnd").'</span> : <span class="info-box-label" >'.dol_print_date($this->datev).'</span>';
|
||||
}
|
||||
if (method_exists($this, 'LibStatut')) {
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->LibStatut($this->paiementtype, 5, $this->alreadypaid).'</div>';
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(3, $this->alreadypaid).'</div>';
|
||||
}
|
||||
$return .= '</div>';
|
||||
$return .= '</div>';
|
||||
|
||||
@ -2202,7 +2202,7 @@ class Contact extends CommonObject
|
||||
$return .= '<span> : '.$this->LibPubPriv($this->priv).'</span>';
|
||||
}*/
|
||||
if (method_exists($this, 'getLibStatut')) {
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(5).'</div>';
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(3).'</div>';
|
||||
}
|
||||
$return .= '</div>';
|
||||
$return .= '</div>';
|
||||
|
||||
@ -942,15 +942,8 @@ if (empty($reshook)) {
|
||||
$old_filedir = $conf->contrat->multidir_output[$object->entity].'/'.dol_sanitizeFileName($old_ref);
|
||||
$new_filedir = $conf->contrat->multidir_output[$object->entity].'/'.dol_sanitizeFileName($object->ref);
|
||||
|
||||
$files = dol_dir_list($old_filedir);
|
||||
if (!empty($files)) {
|
||||
if (!is_dir($new_filedir)) {
|
||||
dol_mkdir($new_filedir);
|
||||
}
|
||||
foreach ($files as $file) {
|
||||
dol_move($file['fullname'], $new_filedir.'/'.$file['name']);
|
||||
}
|
||||
}
|
||||
// Rename directory of contract with new name
|
||||
dol_move_dir($old_filedir, $new_filedir);
|
||||
|
||||
header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id);
|
||||
exit;
|
||||
|
||||
@ -2844,7 +2844,7 @@ class Contrat extends CommonObject
|
||||
$return .= '<br><span class="opacitymedium">'.$langs->trans("DateContract").' : </span><span class="info-box-label">'.dol_print_date($this->date_contrat, 'day').'</span>';
|
||||
}
|
||||
if (method_exists($this, 'getLibStatut')) {
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(5).'</div>';
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(3).'</div>';
|
||||
}
|
||||
$return .= '</div>';
|
||||
$return .= '</div>';
|
||||
|
||||
@ -45,9 +45,14 @@ error_reporting(E_ALL | E_STRICT);
|
||||
$fk_element = GETPOST('fk_element', 'int');
|
||||
$element = GETPOST('element', 'alpha');
|
||||
|
||||
|
||||
$upload_handler = new FileUpload(null, $fk_element, $element);
|
||||
|
||||
// Feature not enabled. Warning feature not used and not secured so disabled.
|
||||
if (!getDolGlobalInt('MAIN_USE_JQUERY_FILEUPLOAD')) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* View
|
||||
*/
|
||||
|
||||
@ -59,6 +59,7 @@ $signature = GETPOST('signaturebase64');
|
||||
$ref = GETPOST('ref', 'aZ09');
|
||||
$mode = GETPOST('mode', 'aZ09'); // 'proposal', ...
|
||||
$SECUREKEY = GETPOST("securekey"); // Secure key
|
||||
$online_sign_name = GETPOST("onlinesignname") ? GETPOST("onlinesignname") : '';
|
||||
|
||||
$error = 0;
|
||||
$response = "";
|
||||
@ -90,7 +91,8 @@ if (empty($SECUREKEY) || !dol_verifyHash($securekeyseed.$type.$ref.(!isModEnable
|
||||
top_httphead();
|
||||
|
||||
if ($action == "importSignature") {
|
||||
if (!empty($signature) && $signature[0] == "image/png;base64") {
|
||||
$issignatureok = (!empty($signature) && $signature[0] == "image/png;base64");
|
||||
if ($issignatureok) {
|
||||
$signature = $signature[1];
|
||||
$data = base64_decode($signature);
|
||||
|
||||
@ -103,6 +105,10 @@ if ($action == "importSignature") {
|
||||
$upload_dir = !empty($conf->propal->multidir_output[$object->entity])?$conf->propal->multidir_output[$object->entity]:$conf->propal->dir_output;
|
||||
$upload_dir .= '/'.dol_sanitizeFileName($object->ref).'/';
|
||||
|
||||
$default_font_size = pdf_getPDFFontSize($langs); // Must be after pdf_getInstance
|
||||
$default_font = pdf_getPDFFont($langs); // Must be after pdf_getInstance
|
||||
$langs->loadLangs(array("main", "companies"));
|
||||
|
||||
$date = dol_print_date(dol_now(), "%Y%m%d%H%M%S");
|
||||
$filename = "signatures/".$date."_signature.png";
|
||||
if (!is_dir($upload_dir."signatures/")) {
|
||||
@ -143,7 +149,6 @@ if ($action == "importSignature") {
|
||||
$pdf->SetCompression(false);
|
||||
}
|
||||
|
||||
|
||||
//$pdf->Open();
|
||||
$pagecount = $pdf->setSourceFile($sourcefile); // original PDF
|
||||
|
||||
@ -155,7 +160,7 @@ if ($action == "importSignature") {
|
||||
$pdf->AddPage($s['h'] > $s['w'] ? 'P' : 'L');
|
||||
$pdf->useTemplate($tppl);
|
||||
} catch (Exception $e) {
|
||||
dol_syslog("Error when manipulating some PDF by onlineSign: ".$e->getMessage(), LOG_ERR);
|
||||
dol_syslog("Error when manipulating the PDF ".$sourcefile." by onlineSign: ".$e->getMessage(), LOG_ERR);
|
||||
$response = $e->getMessage();
|
||||
$error++;
|
||||
}
|
||||
@ -167,7 +172,14 @@ if ($action == "importSignature") {
|
||||
$yforimgstart = (empty($s['h']) ? 240 : $s['h'] - 60);
|
||||
$wforimg = $s['w'] - 20 - $xforimgstart;
|
||||
|
||||
$pdf->SetXY($xforimgstart, $yforimgstart + round($wforimg / 4) - 4);
|
||||
$pdf->SetFont($default_font, '', $default_font_size - 1);
|
||||
$pdf->MultiCell($wforimg, 4, $langs->trans("DateSigning").': '.dol_print_date(dol_now(), "daytext", false, $langs, true), 0, 'L');
|
||||
$pdf->SetXY($xforimgstart, $yforimgstart + round($wforimg / 4));
|
||||
$pdf->MultiCell($wforimg, 4, $langs->trans("Lastname").': '.$online_sign_name, 0, 'L');
|
||||
|
||||
$pdf->Image($upload_dir.$filename, $xforimgstart, $yforimgstart, $wforimg, round($wforimg / 4));
|
||||
|
||||
//$pdf->Close();
|
||||
$pdf->Output($newpdffilename, "F");
|
||||
|
||||
@ -187,7 +199,6 @@ if ($action == "importSignature") {
|
||||
$db->begin();
|
||||
|
||||
$online_sign_ip = getUserRemoteIP();
|
||||
$online_sign_name = ''; // TODO Ask name on form to sign
|
||||
|
||||
$sql = "UPDATE ".MAIN_DB_PREFIX."propal";
|
||||
$sql .= " SET fk_statut = ".((int) $object::STATUS_SIGNED).", note_private = '".$db->escape($object->note_private)."',";
|
||||
@ -207,9 +218,6 @@ if ($action == "importSignature") {
|
||||
}
|
||||
|
||||
if (!$error) {
|
||||
$db->commit();
|
||||
$response = "success";
|
||||
setEventMessages("PropalSigned", null, 'warnings');
|
||||
if (method_exists($object, 'call_trigger')) {
|
||||
//customer is not a user !?! so could we use same user as validation ?
|
||||
$user = new User($db);
|
||||
@ -218,17 +226,25 @@ if ($action == "importSignature") {
|
||||
$result = $object->call_trigger('PROPAL_CLOSE_SIGNED', $user);
|
||||
if ($result < 0) {
|
||||
$error++;
|
||||
$response = "error in trigger ".$object->error;
|
||||
} else {
|
||||
$response = "success";
|
||||
}
|
||||
$result = $object->call_trigger('PROPAL_CLOSE_SIGNED_WEB', $user);
|
||||
if ($result < 0) {
|
||||
$error++;
|
||||
}
|
||||
} else {
|
||||
$response = "success";
|
||||
}
|
||||
} else {
|
||||
$db->rollback();
|
||||
$error++;
|
||||
$response = "error sql";
|
||||
}
|
||||
|
||||
if (!$error) {
|
||||
$db->commit();
|
||||
$response = "success";
|
||||
setEventMessages("PropalSigned", null, 'warnings');
|
||||
} else {
|
||||
$db->rollback();
|
||||
}
|
||||
}
|
||||
} elseif ($mode == 'contract') {
|
||||
require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php';
|
||||
|
||||
@ -839,6 +839,10 @@ class CMailFile
|
||||
$this->error .= ".<br>";
|
||||
$this->error .= $langs->trans("ErrorPhpMailDelivery");
|
||||
dol_syslog("CMailFile::sendfile: mail end error=".$this->error, LOG_ERR);
|
||||
|
||||
if (!empty($conf->global->MAIN_MAIL_DEBUG)) {
|
||||
$this->save_dump_mail_in_err();
|
||||
}
|
||||
} else {
|
||||
dol_syslog("CMailFile::sendfile: mail end success", LOG_DEBUG);
|
||||
}
|
||||
@ -903,6 +907,7 @@ class CMailFile
|
||||
|
||||
if (getDolGlobalString($keyforsmtpauthtype) === "XOAUTH2") {
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/oauth.lib.php'; // define $supportedoauth2array
|
||||
|
||||
$keyforsupportedoauth2array = $conf->global->$keyforsmtpoauthservice;
|
||||
if (preg_match('/^.*-/', $keyforsupportedoauth2array)) {
|
||||
$keyforprovider = preg_replace('/^.*-/', '', $keyforsupportedoauth2array);
|
||||
@ -996,6 +1001,10 @@ class CMailFile
|
||||
}
|
||||
dol_syslog("CMailFile::sendfile: mail end error with smtps lib to HOST=".$server.", PORT=".$conf->global->$keyforsmtpport." - ".$this->error, LOG_ERR);
|
||||
$res = false;
|
||||
|
||||
if (!empty($conf->global->MAIN_MAIL_DEBUG)) {
|
||||
$this->save_dump_mail_in_err();
|
||||
}
|
||||
}
|
||||
}
|
||||
} elseif ($this->sendmode == 'swiftmailer') {
|
||||
@ -1031,6 +1040,7 @@ class CMailFile
|
||||
}
|
||||
if (getDolGlobalString($keyforsmtpauthtype) === "XOAUTH2") {
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/oauth.lib.php'; // define $supportedoauth2array
|
||||
|
||||
$keyforsupportedoauth2array = getDolGlobalString($keyforsmtpoauthservice);
|
||||
if (preg_match('/^.*-/', $keyforsupportedoauth2array)) {
|
||||
$keyforprovider = preg_replace('/^.*-/', '', $keyforsupportedoauth2array);
|
||||
@ -1131,6 +1141,10 @@ class CMailFile
|
||||
}
|
||||
dol_syslog("CMailFile::sendfile: mail end error=".$this->error, LOG_ERR);
|
||||
$res = false;
|
||||
|
||||
if (!empty($conf->global->MAIN_MAIL_DEBUG)) {
|
||||
$this->save_dump_mail_in_err();
|
||||
}
|
||||
} else {
|
||||
dol_syslog("CMailFile::sendfile: mail end success", LOG_DEBUG);
|
||||
}
|
||||
@ -1218,7 +1232,7 @@ class CMailFile
|
||||
|
||||
if (@is_writeable($dolibarr_main_data_root)) { // Avoid fatal error on fopen with open_basedir
|
||||
$outputfile = $dolibarr_main_data_root."/dolibarr_mail.log";
|
||||
$fp = fopen($outputfile, "w");
|
||||
$fp = fopen($outputfile, "w"); // overwrite
|
||||
|
||||
if ($this->sendmode == 'mail') {
|
||||
fputs($fp, $this->headers);
|
||||
@ -1235,6 +1249,25 @@ class CMailFile
|
||||
}
|
||||
}
|
||||
|
||||
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
|
||||
/**
|
||||
* Save content if mail is in error
|
||||
* Used for debugging.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function save_dump_mail_in_err()
|
||||
{
|
||||
global $dolibarr_main_data_root;
|
||||
|
||||
if (@is_writeable($dolibarr_main_data_root)) { // Avoid fatal error on fopen with open_basedir
|
||||
$srcfile = $dolibarr_main_data_root."/dolibarr_mail.log";
|
||||
$destfile = $dolibarr_main_data_root."/dolibarr_mail.err";
|
||||
|
||||
dol_move($srcfile, $destfile, 0, 1, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Correct an uncomplete html string
|
||||
|
||||
@ -80,6 +80,11 @@ abstract class CommonDocGenerator
|
||||
*/
|
||||
public $format;
|
||||
|
||||
/**
|
||||
* @var string pdf, odt, etc
|
||||
*/
|
||||
public $type;
|
||||
|
||||
public $page_hauteur;
|
||||
public $page_largeur;
|
||||
public $marge_gauche;
|
||||
|
||||
@ -900,7 +900,7 @@ abstract class CommonInvoice extends CommonObject
|
||||
dol_syslog(get_class($this)."::makeStripeSepaRequest start", LOG_DEBUG);
|
||||
|
||||
if ($this->statut > self::STATUS_DRAFT && $this->paye == 0) {
|
||||
// Get the default payment mode for BAN payment
|
||||
// Get the default payment mode for BAN payment of the third party
|
||||
require_once DOL_DOCUMENT_ROOT.'/societe/class/companybankaccount.class.php';
|
||||
$bac = new CompanyBankAccount($this->db); // table societe_rib
|
||||
$result = $bac->fetch(0, $this->socid, 1, 'ban');
|
||||
@ -974,295 +974,307 @@ abstract class CommonInvoice extends CommonObject
|
||||
$amountstripe = $amountstripe * 100;
|
||||
}
|
||||
|
||||
$fk_bank_account = getDolGlobalInt('STRIPE_BANK_ACCOUNT_FOR_PAYMENTS');
|
||||
if (!($fk_bank_account > 0)) {
|
||||
$error++;
|
||||
$errorforinvoice++;
|
||||
dol_syslog("Error no bank account defined for Stripe payments", LOG_ERR);
|
||||
$this->errors[] = "Error bank account for Stripe payments not defined into Stripe module";
|
||||
}
|
||||
|
||||
$this->db->begin();
|
||||
|
||||
// Create a prelevement_bon
|
||||
$bon = new BonPrelevement($this->db);
|
||||
if (empty($obj->fk_prelevement_bons)) {
|
||||
// This create record into llx_prelevment_bons and update link with llx_prelevement_demande
|
||||
$nbinvoices = $bon->create(0, 0, 'real', 'ALL', '', 0, 'direct-debit', $did);
|
||||
if ($nbinvoices <= 0) {
|
||||
if (!$error) {
|
||||
if (empty($obj->fk_prelevement_bons)) {
|
||||
// This create record into llx_prelevment_bons and update link with llx_prelevement_demande
|
||||
$nbinvoices = $bon->create(0, 0, 'real', 'ALL', '', 0, 'direct-debit', $did, $fk_bank_account);
|
||||
if ($nbinvoices <= 0) {
|
||||
$error++;
|
||||
$errorforinvoice++;
|
||||
dol_syslog("Error on BonPrelevement creation", LOG_ERR);
|
||||
$this->errors[] = "Error on BonPrelevement creation";
|
||||
}
|
||||
/*
|
||||
if (!$error) {
|
||||
// Update the direct debit payment request of the processed request to save the id of the prelevement_bon
|
||||
$sql = "UPDATE ".MAIN_DB_PREFIX."prelevement_demande SET";
|
||||
$sql .= " fk_prelevement_bons = ".((int) $bon->id);
|
||||
$sql .= " WHERE rowid = ".((int) $did);
|
||||
|
||||
$result = $this->db->query($sql);
|
||||
if ($result < 0) {
|
||||
$error++;
|
||||
$this->errors[] = "Error on updateing fk_prelevement_bons to ".$bon->id;
|
||||
}
|
||||
}
|
||||
*/
|
||||
} else {
|
||||
$error++;
|
||||
$errorforinvoice++;
|
||||
dol_syslog("Error on BonPrelevement creation", LOG_ERR);
|
||||
$this->errors[] = "Error on BonPrelevement creation";
|
||||
dol_syslog("Error Line already part of a bank payment order", LOG_ERR);
|
||||
$this->errors[] = "The line is already included into a bank payment order. Delete the bank payment order first.";
|
||||
}
|
||||
/*
|
||||
if (!$error) {
|
||||
// Update the direct debit payment request of the processed request to save the id of the prelevement_bon
|
||||
$sql = "UPDATE ".MAIN_DB_PREFIX."prelevement_demande SET";
|
||||
$sql .= " fk_prelevement_bons = ".((int) $bon->id);
|
||||
$sql .= " WHERE rowid = ".((int) $did);
|
||||
|
||||
$result = $this->db->query($sql);
|
||||
if ($result < 0) {
|
||||
$error++;
|
||||
$this->errors[] = "Error on updateing fk_prelevement_bons to ".$bon->id;
|
||||
}
|
||||
}
|
||||
*/
|
||||
} else {
|
||||
$error++;
|
||||
$errorforinvoice++;
|
||||
dol_syslog("Error Line already part of a bank payment order", LOG_ERR);
|
||||
$this->errors[] = "The line is already included into a bank payment order. Delete the bank payment order first.";
|
||||
}
|
||||
|
||||
if (!$error && $amountstripe > 0) {
|
||||
try {
|
||||
//var_dump($companypaymentmode);
|
||||
dol_syslog("We will try to pay with companypaymentmodeid=" . $companypaymentmode->id . " stripe_card_ref=" . $companypaymentmode->stripe_card_ref . " mode=" . $companypaymentmode->status, LOG_DEBUG);
|
||||
if (!$error) {
|
||||
if ($amountstripe > 0) {
|
||||
try {
|
||||
//var_dump($companypaymentmode);
|
||||
dol_syslog("We will try to pay with companypaymentmodeid=" . $companypaymentmode->id . " stripe_card_ref=" . $companypaymentmode->stripe_card_ref . " mode=" . $companypaymentmode->status, LOG_DEBUG);
|
||||
|
||||
$thirdparty = new Societe($this->db);
|
||||
$resultthirdparty = $thirdparty->fetch($this->socid);
|
||||
$thirdparty = new Societe($this->db);
|
||||
$resultthirdparty = $thirdparty->fetch($this->socid);
|
||||
|
||||
include_once DOL_DOCUMENT_ROOT . '/stripe/class/stripe.class.php'; // This include the include of htdocs/stripe/config.php
|
||||
// So it inits or erases the $stripearrayofkeysbyenv
|
||||
$stripe = new Stripe($this->db);
|
||||
include_once DOL_DOCUMENT_ROOT . '/stripe/class/stripe.class.php'; // This include the include of htdocs/stripe/config.php
|
||||
// So it inits or erases the $stripearrayofkeysbyenv
|
||||
$stripe = new Stripe($this->db);
|
||||
|
||||
dol_syslog("makeStripeSepaRequest Current Stripe environment is " . $stripearrayofkeysbyenv[$servicestatus]['publishable_key']);
|
||||
dol_syslog("makeStripeSepaRequest Current Stripe environment is " . $stripearrayofkeysbyenv[$servicestatus]['publishable_key']);
|
||||
|
||||
$stripearrayofkeys = $stripearrayofkeysbyenv[$servicestatus];
|
||||
\Stripe\Stripe::setApiKey($stripearrayofkeys['secret_key']);
|
||||
$stripearrayofkeys = $stripearrayofkeysbyenv[$servicestatus];
|
||||
\Stripe\Stripe::setApiKey($stripearrayofkeys['secret_key']);
|
||||
|
||||
|
||||
dol_syslog("makeStripeSepaRequest get stripe connet account", LOG_DEBUG);
|
||||
$stripeacc = $stripe->getStripeAccount($service, $this->socid); // Get Stripe OAuth connect account if it exists (no network access here)
|
||||
dol_syslog("makeStripeSepaRequest get stripe connect account return " . json_encode($stripeacc), LOG_DEBUG);
|
||||
dol_syslog("makeStripeSepaRequest get stripe connet account", LOG_DEBUG);
|
||||
$stripeacc = $stripe->getStripeAccount($service, $this->socid); // Get Stripe OAuth connect account if it exists (no network access here)
|
||||
dol_syslog("makeStripeSepaRequest get stripe connect account return " . json_encode($stripeacc), LOG_DEBUG);
|
||||
|
||||
$customer = $stripe->customerStripe($thirdparty, $stripeacc, $servicestatus, 0);
|
||||
if (empty($customer) && !empty($stripe->error)) {
|
||||
$this->errors[] = $stripe->error;
|
||||
}
|
||||
$customer = $stripe->customerStripe($thirdparty, $stripeacc, $servicestatus, 0);
|
||||
if (empty($customer) && !empty($stripe->error)) {
|
||||
$this->errors[] = $stripe->error;
|
||||
}
|
||||
|
||||
// $nbhoursbetweentries = (empty($conf->global->SELLYOURSAAS_NBHOURSBETWEENTRIES) ? 49 : $conf->global->SELLYOURSAAS_NBHOURSBETWEENTRIES); // Must have more that 48 hours + 1 between each try (so 1 try every 3 daily batch)
|
||||
// $nbdaysbeforeendoftries = (empty($conf->global->SELLYOURSAAS_NBDAYSBEFOREENDOFTRIES) ? 35 : $conf->global->SELLYOURSAAS_NBDAYSBEFOREENDOFTRIES);
|
||||
$postactionmessages = [];
|
||||
// $nbhoursbetweentries = (empty($conf->global->SELLYOURSAAS_NBHOURSBETWEENTRIES) ? 49 : $conf->global->SELLYOURSAAS_NBHOURSBETWEENTRIES); // Must have more that 48 hours + 1 between each try (so 1 try every 3 daily batch)
|
||||
// $nbdaysbeforeendoftries = (empty($conf->global->SELLYOURSAAS_NBDAYSBEFOREENDOFTRIES) ? 35 : $conf->global->SELLYOURSAAS_NBDAYSBEFOREENDOFTRIES);
|
||||
$postactionmessages = [];
|
||||
|
||||
if ($resultthirdparty > 0 && !empty($customer)) {
|
||||
if (!$error) { // Payment was not canceled
|
||||
$sepaMode = false;
|
||||
$stripecard = null;
|
||||
if ($companypaymentmode->type == 'ban') {
|
||||
$sepaMode = true;
|
||||
// Check into societe_rib if a payment mode for Stripe and ban payment exists
|
||||
// To make a Stripe SEPA payment request, we must have the payment mode source already saved into societe_rib and retreived with ->sepaStripe
|
||||
// The payment mode source is created when we create the bank account on Stripe with paymentmodes.php?action=create
|
||||
$stripecard = $stripe->sepaStripe($customer, $companypaymentmode, $stripeacc, $servicestatus, 0);
|
||||
}
|
||||
|
||||
if ($stripecard) { // Can be src_... (for sepa) or pm_... (new card mode). Note that card_... (old card mode) should not happen here.
|
||||
$FULLTAG = 'DID='.$did.'-INV=' . $this->id . '-CUS=' . $thirdparty->id;
|
||||
$description = 'Stripe payment from makeStripeSepaRequest: ' . $FULLTAG . ' did='.$did.' ref=' . $this->ref;
|
||||
|
||||
$stripefailurecode = '';
|
||||
$stripefailuremessage = '';
|
||||
$stripefailuredeclinecode = '';
|
||||
|
||||
// Using new SCA method
|
||||
dol_syslog("* Create payment on SEPA " . $stripecard->id . ", amounttopay=" . $amounttopay . ", amountstripe=" . $amountstripe . ", FULLTAG=" . $FULLTAG, LOG_DEBUG);
|
||||
|
||||
// Create payment intent and charge payment (confirmnow = true)
|
||||
$paymentintent = $stripe->getPaymentIntent($amounttopay, $currency, $FULLTAG, $description, $this, $customer->id, $stripeacc, $servicestatus, 0, 'automatic', true, $stripecard->id, 1, 1, $did);
|
||||
|
||||
$charge = new stdClass();
|
||||
|
||||
if ($paymentintent->status === 'succeeded' || $paymentintent->status === 'processing') {
|
||||
$charge->status = 'ok';
|
||||
$charge->id = $paymentintent->id;
|
||||
$charge->customer = $customer->id;
|
||||
} elseif ($paymentintent->status === 'requires_action') {
|
||||
//paymentintent->status may be => 'requires_action' (no error in such a case)
|
||||
dol_syslog(var_export($paymentintent, true), LOG_DEBUG);
|
||||
|
||||
$charge->status = 'failed';
|
||||
$charge->customer = $customer->id;
|
||||
$charge->failure_code = $stripe->code;
|
||||
$charge->failure_message = $stripe->error;
|
||||
$charge->failure_declinecode = $stripe->declinecode;
|
||||
$stripefailurecode = $stripe->code;
|
||||
$stripefailuremessage = 'Action required. Contact the support at ';// . $conf->global->SELLYOURSAAS_MAIN_EMAIL;
|
||||
$stripefailuredeclinecode = $stripe->declinecode;
|
||||
} else {
|
||||
dol_syslog(var_export($paymentintent, true), LOG_DEBUG);
|
||||
|
||||
$charge->status = 'failed';
|
||||
$charge->customer = $customer->id;
|
||||
$charge->failure_code = $stripe->code;
|
||||
$charge->failure_message = $stripe->error;
|
||||
$charge->failure_declinecode = $stripe->declinecode;
|
||||
$stripefailurecode = $stripe->code;
|
||||
$stripefailuremessage = $stripe->error;
|
||||
$stripefailuredeclinecode = $stripe->declinecode;
|
||||
if ($resultthirdparty > 0 && !empty($customer)) {
|
||||
if (!$error) { // Payment was not canceled
|
||||
$sepaMode = false;
|
||||
$stripecard = null;
|
||||
if ($companypaymentmode->type == 'ban') {
|
||||
$sepaMode = true;
|
||||
// Check into societe_rib if a payment mode for Stripe and ban payment exists
|
||||
// To make a Stripe SEPA payment request, we must have the payment mode source already saved into societe_rib and retreived with ->sepaStripe
|
||||
// The payment mode source is created when we create the bank account on Stripe with paymentmodes.php?action=create
|
||||
$stripecard = $stripe->sepaStripe($customer, $companypaymentmode, $stripeacc, $servicestatus, 0);
|
||||
}
|
||||
|
||||
//var_dump("stripefailurecode=".$stripefailurecode." stripefailuremessage=".$stripefailuremessage." stripefailuredeclinecode=".$stripefailuredeclinecode);
|
||||
//exit;
|
||||
if ($stripecard) { // Can be src_... (for sepa) or pm_... (new card mode). Note that card_... (old card mode) should not happen here.
|
||||
$FULLTAG = 'DID='.$did.'-INV=' . $this->id . '-CUS=' . $thirdparty->id;
|
||||
$description = 'Stripe payment from makeStripeSepaRequest: ' . $FULLTAG . ' did='.$did.' ref=' . $this->ref;
|
||||
|
||||
$stripefailurecode = '';
|
||||
$stripefailuremessage = '';
|
||||
$stripefailuredeclinecode = '';
|
||||
|
||||
// Return $charge = array('id'=>'ch_XXXX', 'status'=>'succeeded|pending|failed', 'failure_code'=>, 'failure_message'=>...)
|
||||
if (empty($charge) || $charge->status == 'failed') {
|
||||
dol_syslog('Failed to charge payment mode ' . $stripecard->id . ' stripefailurecode=' . $stripefailurecode . ' stripefailuremessage=' . $stripefailuremessage . ' stripefailuredeclinecode=' . $stripefailuredeclinecode, LOG_WARNING);
|
||||
// Using new SCA method
|
||||
dol_syslog("* Create payment on SEPA " . $stripecard->id . ", amounttopay=" . $amounttopay . ", amountstripe=" . $amountstripe . ", FULLTAG=" . $FULLTAG, LOG_DEBUG);
|
||||
|
||||
// Save a stripe payment was in error
|
||||
$this->stripechargeerror++;
|
||||
// Create payment intent and charge payment (confirmnow = true)
|
||||
$paymentintent = $stripe->getPaymentIntent($amounttopay, $currency, $FULLTAG, $description, $this, $customer->id, $stripeacc, $servicestatus, 0, 'automatic', true, $stripecard->id, 1, 1, $did);
|
||||
|
||||
$error++;
|
||||
$errorforinvoice++;
|
||||
$errmsg = $langs->trans("FailedToChargeCard");
|
||||
if (!empty($charge)) {
|
||||
if ($stripefailuredeclinecode == 'authentication_required') {
|
||||
$errauthenticationmessage = $langs->trans("ErrSCAAuthentication");
|
||||
$errmsg = $errauthenticationmessage;
|
||||
} elseif (in_array($stripefailuredeclinecode, ['insufficient_funds', 'generic_decline'])) {
|
||||
$errmsg .= ': ' . $charge->failure_code;
|
||||
$errmsg .= ($charge->failure_message ? ' - ' : '') . ' ' . $charge->failure_message;
|
||||
if (empty($stripefailurecode)) {
|
||||
$stripefailurecode = $charge->failure_code;
|
||||
}
|
||||
if (empty($stripefailuremessage)) {
|
||||
$stripefailuremessage = $charge->failure_message;
|
||||
}
|
||||
} else {
|
||||
$errmsg .= ': failure_code=' . $charge->failure_code;
|
||||
$errmsg .= ($charge->failure_message ? ' - ' : '') . ' failure_message=' . $charge->failure_message;
|
||||
if (empty($stripefailurecode)) {
|
||||
$stripefailurecode = $charge->failure_code;
|
||||
}
|
||||
if (empty($stripefailuremessage)) {
|
||||
$stripefailuremessage = $charge->failure_message;
|
||||
}
|
||||
}
|
||||
$charge = new stdClass();
|
||||
|
||||
if ($paymentintent->status === 'succeeded' || $paymentintent->status === 'processing') {
|
||||
$charge->status = 'ok';
|
||||
$charge->id = $paymentintent->id;
|
||||
$charge->customer = $customer->id;
|
||||
} elseif ($paymentintent->status === 'requires_action') {
|
||||
//paymentintent->status may be => 'requires_action' (no error in such a case)
|
||||
dol_syslog(var_export($paymentintent, true), LOG_DEBUG);
|
||||
|
||||
$charge->status = 'failed';
|
||||
$charge->customer = $customer->id;
|
||||
$charge->failure_code = $stripe->code;
|
||||
$charge->failure_message = $stripe->error;
|
||||
$charge->failure_declinecode = $stripe->declinecode;
|
||||
$stripefailurecode = $stripe->code;
|
||||
$stripefailuremessage = 'Action required. Contact the support at ';// . $conf->global->SELLYOURSAAS_MAIN_EMAIL;
|
||||
$stripefailuredeclinecode = $stripe->declinecode;
|
||||
} else {
|
||||
$errmsg .= ': ' . $stripefailurecode . ' - ' . $stripefailuremessage;
|
||||
$errmsg .= ($stripefailuredeclinecode ? ' - ' . $stripefailuredeclinecode : '');
|
||||
dol_syslog(var_export($paymentintent, true), LOG_DEBUG);
|
||||
|
||||
$charge->status = 'failed';
|
||||
$charge->customer = $customer->id;
|
||||
$charge->failure_code = $stripe->code;
|
||||
$charge->failure_message = $stripe->error;
|
||||
$charge->failure_declinecode = $stripe->declinecode;
|
||||
$stripefailurecode = $stripe->code;
|
||||
$stripefailuremessage = $stripe->error;
|
||||
$stripefailuredeclinecode = $stripe->declinecode;
|
||||
}
|
||||
|
||||
$description = 'Stripe payment ERROR from makeStripeSepaRequest: ' . $FULLTAG;
|
||||
$postactionmessages[] = $errmsg . ' (' . $stripearrayofkeys['publishable_key'] . ')';
|
||||
$this->errors[] = $errmsg;
|
||||
//var_dump("stripefailurecode=".$stripefailurecode." stripefailuremessage=".$stripefailuremessage." stripefailuredeclinecode=".$stripefailuredeclinecode);
|
||||
//exit;
|
||||
|
||||
|
||||
// Return $charge = array('id'=>'ch_XXXX', 'status'=>'succeeded|pending|failed', 'failure_code'=>, 'failure_message'=>...)
|
||||
if (empty($charge) || $charge->status == 'failed') {
|
||||
dol_syslog('Failed to charge payment mode ' . $stripecard->id . ' stripefailurecode=' . $stripefailurecode . ' stripefailuremessage=' . $stripefailuremessage . ' stripefailuredeclinecode=' . $stripefailuredeclinecode, LOG_WARNING);
|
||||
|
||||
// Save a stripe payment was in error
|
||||
$this->stripechargeerror++;
|
||||
|
||||
$error++;
|
||||
$errorforinvoice++;
|
||||
$errmsg = $langs->trans("FailedToChargeCard");
|
||||
if (!empty($charge)) {
|
||||
if ($stripefailuredeclinecode == 'authentication_required') {
|
||||
$errauthenticationmessage = $langs->trans("ErrSCAAuthentication");
|
||||
$errmsg = $errauthenticationmessage;
|
||||
} elseif (in_array($stripefailuredeclinecode, ['insufficient_funds', 'generic_decline'])) {
|
||||
$errmsg .= ': ' . $charge->failure_code;
|
||||
$errmsg .= ($charge->failure_message ? ' - ' : '') . ' ' . $charge->failure_message;
|
||||
if (empty($stripefailurecode)) {
|
||||
$stripefailurecode = $charge->failure_code;
|
||||
}
|
||||
if (empty($stripefailuremessage)) {
|
||||
$stripefailuremessage = $charge->failure_message;
|
||||
}
|
||||
} else {
|
||||
$errmsg .= ': failure_code=' . $charge->failure_code;
|
||||
$errmsg .= ($charge->failure_message ? ' - ' : '') . ' failure_message=' . $charge->failure_message;
|
||||
if (empty($stripefailurecode)) {
|
||||
$stripefailurecode = $charge->failure_code;
|
||||
}
|
||||
if (empty($stripefailuremessage)) {
|
||||
$stripefailuremessage = $charge->failure_message;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$errmsg .= ': ' . $stripefailurecode . ' - ' . $stripefailuremessage;
|
||||
$errmsg .= ($stripefailuredeclinecode ? ' - ' . $stripefailuredeclinecode : '');
|
||||
}
|
||||
|
||||
$description = 'Stripe payment ERROR from makeStripeSepaRequest: ' . $FULLTAG;
|
||||
$postactionmessages[] = $errmsg . ' (' . $stripearrayofkeys['publishable_key'] . ')';
|
||||
$this->errors[] = $errmsg;
|
||||
} else {
|
||||
dol_syslog('Successfuly request direct debit ' . $stripecard->id);
|
||||
|
||||
$postactionmessages[] = 'Success to request direct debit (' . $charge->id . ' with ' . $stripearrayofkeys['publishable_key'] . ')';
|
||||
|
||||
// Save a stripe payment was done in realy life so later we will be able to force a commit on recorded payments
|
||||
// even if in batch mode (method doTakePaymentStripe), we will always make all action in one transaction with a forced commit.
|
||||
$this->stripechargedone++;
|
||||
|
||||
// Default description used for label of event. Will be overwrite by another value later.
|
||||
$description = 'Stripe payment request OK (' . $charge->id . ') from makeStripeSepaRequest: ' . $FULLTAG;
|
||||
}
|
||||
|
||||
$object = $this;
|
||||
|
||||
// Track an event
|
||||
if (empty($charge) || $charge->status == 'failed') {
|
||||
$actioncode = 'PAYMENT_STRIPE_KO';
|
||||
$extraparams = $stripefailurecode;
|
||||
$extraparams .= (($extraparams && $stripefailuremessage) ? ' - ' : '') . $stripefailuremessage;
|
||||
$extraparams .= (($extraparams && $stripefailuredeclinecode) ? ' - ' : '') . $stripefailuredeclinecode;
|
||||
} else {
|
||||
$actioncode = 'PAYMENT_STRIPE_OK';
|
||||
$extraparams = '';
|
||||
}
|
||||
} else {
|
||||
dol_syslog('Successfuly request direct debit ' . $stripecard->id);
|
||||
$error++;
|
||||
$errorforinvoice++;
|
||||
dol_syslog("No direct debit payment method found for this stripe customer " . $customer->id, LOG_WARNING);
|
||||
$this->errors[] = 'Failed to get direct debit payment method for stripe customer = ' . $customer->id;
|
||||
|
||||
$postactionmessages[] = 'Success to request direct debit (' . $charge->id . ' with ' . $stripearrayofkeys['publishable_key'] . ')';
|
||||
$description = 'Failed to find or use the payment mode - no credit card defined for the customer account';
|
||||
$stripefailurecode = 'BADPAYMENTMODE';
|
||||
$stripefailuremessage = 'Failed to find or use the payment mode - no credit card defined for the customer account';
|
||||
$postactionmessages[] = $description . ' (' . $stripearrayofkeys['publishable_key'] . ')';
|
||||
|
||||
// Save a stripe payment was done in realy life so later we will be able to force a commit on recorded payments
|
||||
// even if in batch mode (method doTakePaymentStripe), we will always make all action in one transaction with a forced commit.
|
||||
$this->stripechargedone++;
|
||||
$object = $this;
|
||||
|
||||
// Default description used for label of event. Will be overwrite by another value later.
|
||||
$description = 'Stripe payment request OK (' . $charge->id . ') from makeStripeSepaRequest: ' . $FULLTAG;
|
||||
}
|
||||
|
||||
$object = $this;
|
||||
|
||||
// Track an event
|
||||
if (empty($charge) || $charge->status == 'failed') {
|
||||
$actioncode = 'PAYMENT_STRIPE_KO';
|
||||
$extraparams = $stripefailurecode;
|
||||
$extraparams .= (($extraparams && $stripefailuremessage) ? ' - ' : '') . $stripefailuremessage;
|
||||
$extraparams .= (($extraparams && $stripefailuredeclinecode) ? ' - ' : '') . $stripefailuredeclinecode;
|
||||
} else {
|
||||
$actioncode = 'PAYMENT_STRIPE_OK';
|
||||
$extraparams = '';
|
||||
}
|
||||
} else {
|
||||
$error++;
|
||||
$errorforinvoice++;
|
||||
dol_syslog("No direct debit payment method found for this stripe customer " . $customer->id, LOG_WARNING);
|
||||
$this->errors[] = 'Failed to get direct debit payment method for stripe customer = ' . $customer->id;
|
||||
|
||||
$description = 'Failed to find or use the payment mode - no credit card defined for the customer account';
|
||||
$stripefailurecode = 'BADPAYMENTMODE';
|
||||
$stripefailuremessage = 'Failed to find or use the payment mode - no credit card defined for the customer account';
|
||||
$postactionmessages[] = $description . ' (' . $stripearrayofkeys['publishable_key'] . ')';
|
||||
// If error because payment was canceled for a logical reason, we do nothing (no event added)
|
||||
$description = '';
|
||||
$stripefailurecode = '';
|
||||
$stripefailuremessage = '';
|
||||
|
||||
$object = $this;
|
||||
|
||||
$actioncode = 'PAYMENT_STRIPE_KO';
|
||||
$actioncode = '';
|
||||
$extraparams = '';
|
||||
}
|
||||
} else {
|
||||
// If error because payment was canceled for a logical reason, we do nothing (no event added)
|
||||
$description = '';
|
||||
$stripefailurecode = '';
|
||||
$stripefailuremessage = '';
|
||||
} else { // Else of the if ($resultthirdparty > 0 && ! empty($customer)) {
|
||||
if ($resultthirdparty <= 0) {
|
||||
dol_syslog('SellYourSaasUtils Failed to load customer for thirdparty_id = ' . $thirdparty->id, LOG_WARNING);
|
||||
$this->errors[] = 'Failed to load customer for thirdparty_id = ' . $thirdparty->id;
|
||||
} else { // $customer stripe not found
|
||||
dol_syslog('SellYourSaasUtils Failed to get Stripe customer id for thirdparty_id = ' . $thirdparty->id . " in mode " . $servicestatus . " in Stripe env " . $stripearrayofkeysbyenv[$servicestatus]['publishable_key'], LOG_WARNING);
|
||||
$this->errors[] = 'Failed to get Stripe customer id for thirdparty_id = ' . $thirdparty->id . " in mode " . $servicestatus . " in Stripe env " . $stripearrayofkeysbyenv[$servicestatus]['publishable_key'];
|
||||
}
|
||||
$error++;
|
||||
$errorforinvoice++;
|
||||
|
||||
$description = 'Failed to find or use your payment mode (no payment mode for this customer id)';
|
||||
$stripefailurecode = 'BADPAYMENTMODE';
|
||||
$stripefailuremessage = 'Failed to find or use your payment mode (no payment mode for this customer id)';
|
||||
$postactionmessages = [];
|
||||
|
||||
$object = $this;
|
||||
|
||||
$actioncode = '';
|
||||
$actioncode = 'PAYMENT_STRIPE_KO';
|
||||
$extraparams = '';
|
||||
}
|
||||
} else { // Else of the if ($resultthirdparty > 0 && ! empty($customer)) {
|
||||
if ($resultthirdparty <= 0) {
|
||||
dol_syslog('SellYourSaasUtils Failed to load customer for thirdparty_id = ' . $thirdparty->id, LOG_WARNING);
|
||||
$this->errors[] = 'Failed to load customer for thirdparty_id = ' . $thirdparty->id;
|
||||
} else { // $customer stripe not found
|
||||
dol_syslog('SellYourSaasUtils Failed to get Stripe customer id for thirdparty_id = ' . $thirdparty->id . " in mode " . $servicestatus . " in Stripe env " . $stripearrayofkeysbyenv[$servicestatus]['publishable_key'], LOG_WARNING);
|
||||
$this->errors[] = 'Failed to get Stripe customer id for thirdparty_id = ' . $thirdparty->id . " in mode " . $servicestatus . " in Stripe env " . $stripearrayofkeysbyenv[$servicestatus]['publishable_key'];
|
||||
|
||||
if ($description) {
|
||||
dol_syslog("* Record event for credit transfer or direct debit request result - " . $description);
|
||||
require_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php';
|
||||
|
||||
// Insert record of payment (success or error)
|
||||
$actioncomm = new ActionComm($this->db);
|
||||
|
||||
$actioncomm->type_code = 'AC_OTH_AUTO'; // Type of event ('AC_OTH', 'AC_OTH_AUTO', 'AC_XXX'...)
|
||||
$actioncomm->code = 'AC_' . $actioncode;
|
||||
$actioncomm->label = $description;
|
||||
$actioncomm->note_private = join(",\n", $postactionmessages);
|
||||
$actioncomm->fk_project = $this->fk_project;
|
||||
$actioncomm->datep = $now;
|
||||
$actioncomm->datef = $now;
|
||||
$actioncomm->percentage = -1; // Not applicable
|
||||
$actioncomm->socid = $thirdparty->id;
|
||||
$actioncomm->contactid = 0;
|
||||
$actioncomm->authorid = $user->id; // User saving action
|
||||
$actioncomm->userownerid = $user->id; // Owner of action
|
||||
// Fields when action is a real email (content is already into note)
|
||||
/*$actioncomm->email_msgid = $object->email_msgid;
|
||||
$actioncomm->email_from = $object->email_from;
|
||||
$actioncomm->email_sender= $object->email_sender;
|
||||
$actioncomm->email_to = $object->email_to;
|
||||
$actioncomm->email_tocc = $object->email_tocc;
|
||||
$actioncomm->email_tobcc = $object->email_tobcc;
|
||||
$actioncomm->email_subject = $object->email_subject;
|
||||
$actioncomm->errors_to = $object->errors_to;*/
|
||||
$actioncomm->fk_element = $this->id;
|
||||
$actioncomm->elementtype = $this->element;
|
||||
$actioncomm->extraparams = dol_trunc($extraparams, 250);
|
||||
|
||||
$actioncomm->create($user);
|
||||
}
|
||||
|
||||
$this->description = $description;
|
||||
$this->postactionmessages = $postactionmessages;
|
||||
} catch (Exception $e) {
|
||||
$error++;
|
||||
$errorforinvoice++;
|
||||
|
||||
$description = 'Failed to find or use your payment mode (no payment mode for this customer id)';
|
||||
$stripefailurecode = 'BADPAYMENTMODE';
|
||||
$stripefailuremessage = 'Failed to find or use your payment mode (no payment mode for this customer id)';
|
||||
$postactionmessages = [];
|
||||
|
||||
$object = $this;
|
||||
|
||||
$actioncode = 'PAYMENT_STRIPE_KO';
|
||||
$extraparams = '';
|
||||
dol_syslog('Error ' . $e->getMessage(), LOG_ERR);
|
||||
$this->errors[] = 'Error ' . $e->getMessage();
|
||||
}
|
||||
|
||||
if ($description) {
|
||||
dol_syslog("* Record event for credit transfer or direct debit request result - " . $description);
|
||||
require_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php';
|
||||
|
||||
// Insert record of payment (success or error)
|
||||
$actioncomm = new ActionComm($this->db);
|
||||
|
||||
$actioncomm->type_code = 'AC_OTH_AUTO'; // Type of event ('AC_OTH', 'AC_OTH_AUTO', 'AC_XXX'...)
|
||||
$actioncomm->code = 'AC_' . $actioncode;
|
||||
$actioncomm->label = $description;
|
||||
$actioncomm->note_private = join(",\n", $postactionmessages);
|
||||
$actioncomm->fk_project = $this->fk_project;
|
||||
$actioncomm->datep = $now;
|
||||
$actioncomm->datef = $now;
|
||||
$actioncomm->percentage = -1; // Not applicable
|
||||
$actioncomm->socid = $thirdparty->id;
|
||||
$actioncomm->contactid = 0;
|
||||
$actioncomm->authorid = $user->id; // User saving action
|
||||
$actioncomm->userownerid = $user->id; // Owner of action
|
||||
// Fields when action is a real email (content is already into note)
|
||||
/*$actioncomm->email_msgid = $object->email_msgid;
|
||||
$actioncomm->email_from = $object->email_from;
|
||||
$actioncomm->email_sender= $object->email_sender;
|
||||
$actioncomm->email_to = $object->email_to;
|
||||
$actioncomm->email_tocc = $object->email_tocc;
|
||||
$actioncomm->email_tobcc = $object->email_tobcc;
|
||||
$actioncomm->email_subject = $object->email_subject;
|
||||
$actioncomm->errors_to = $object->errors_to;*/
|
||||
$actioncomm->fk_element = $this->id;
|
||||
$actioncomm->elementtype = $this->element;
|
||||
$actioncomm->extraparams = dol_trunc($extraparams, 250);
|
||||
|
||||
$actioncomm->create($user);
|
||||
}
|
||||
|
||||
$this->description = $description;
|
||||
$this->postactionmessages = $postactionmessages;
|
||||
} catch (Exception $e) {
|
||||
} else { // If remain to pay is null
|
||||
$error++;
|
||||
$errorforinvoice++;
|
||||
dol_syslog('Error ' . $e->getMessage(), LOG_ERR);
|
||||
$this->errors[] = 'Error ' . $e->getMessage();
|
||||
dol_syslog("Remain to pay is null for the invoice " . $this->id . " " . $this->ref . ". Why is the invoice not classified 'Paid' ?", LOG_WARNING);
|
||||
$this->errors[] = "Remain to pay is null for the invoice " . $this->id . " " . $this->ref . ". Why is the invoice not classified 'Paid' ?";
|
||||
}
|
||||
} else { // If remain to pay is null
|
||||
$error++;
|
||||
$errorforinvoice++;
|
||||
dol_syslog("Remain to pay is null for the invoice " . $this->id . " " . $this->ref . ". Why is the invoice not classified 'Paid' ?", LOG_WARNING);
|
||||
$this->errors[] = "Remain to pay is null for the invoice " . $this->id . " " . $this->ref . ". Why is the invoice not classified 'Paid' ?";
|
||||
}
|
||||
|
||||
// Set status of the order to "Transferred" with method 'api'
|
||||
|
||||
@ -46,6 +46,12 @@ class FileUpload
|
||||
global $db, $conf;
|
||||
global $object;
|
||||
global $hookmanager;
|
||||
|
||||
// Feature not enabled. Warning feature not used and not secured so disabled.
|
||||
if (!getDolGlobalInt('MAIN_USE_JQUERY_FILEUPLOAD')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$hookmanager->initHooks(array('fileupload'));
|
||||
|
||||
$this->fk_element = $fk_element;
|
||||
@ -238,6 +244,10 @@ class FileUpload
|
||||
*/
|
||||
protected function getFileObject($file_name)
|
||||
{
|
||||
if (!getDolGlobalInt('MAIN_USE_JQUERY_FILEUPLOAD')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$file_path = $this->options['upload_dir'].$file_name;
|
||||
if (is_file($file_path) && $file_name[0] !== '.') {
|
||||
$file = new stdClass();
|
||||
@ -278,6 +288,10 @@ class FileUpload
|
||||
{
|
||||
global $maxwidthmini, $maxheightmini;
|
||||
|
||||
if (!getDolGlobalInt('MAIN_USE_JQUERY_FILEUPLOAD')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$file_path = $this->options['upload_dir'].$file_name;
|
||||
$new_file_path = $options['upload_dir'].$file_name;
|
||||
|
||||
@ -309,6 +323,10 @@ class FileUpload
|
||||
*/
|
||||
protected function validate($uploaded_file, $file, $error, $index)
|
||||
{
|
||||
if (!getDolGlobalInt('MAIN_USE_JQUERY_FILEUPLOAD')) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ($error) {
|
||||
$file->error = $error;
|
||||
return false;
|
||||
@ -399,8 +417,8 @@ class FileUpload
|
||||
// Also remove control characters and spaces (\x00..\x20) around the filename:
|
||||
$file_name = trim(basename(stripslashes($name)), ".\x00..\x20");
|
||||
// Add missing file extension for known image types:
|
||||
if (strpos($file_name, '.') === false &&
|
||||
preg_match('/^image\/(gif|jpe?g|png)/', $type, $matches)) {
|
||||
$matches = array();
|
||||
if (strpos($file_name, '.') === false && preg_match('/^image\/(gif|jpe?g|png)/', $type, $matches)) {
|
||||
$file_name .= '.'.$matches[1];
|
||||
}
|
||||
if ($this->options['discard_aborted_uploads']) {
|
||||
@ -424,6 +442,10 @@ class FileUpload
|
||||
*/
|
||||
protected function handleFileUpload($uploaded_file, $name, $size, $type, $error, $index)
|
||||
{
|
||||
if (!getDolGlobalInt('MAIN_USE_JQUERY_FILEUPLOAD')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$file = new stdClass();
|
||||
$file->name = $this->trimFileName($name, $type, $index);
|
||||
$file->mime = dol_mimetype($file->name, '', 2);
|
||||
@ -470,6 +492,10 @@ class FileUpload
|
||||
*/
|
||||
public function get()
|
||||
{
|
||||
if (!getDolGlobalInt('MAIN_USE_JQUERY_FILEUPLOAD')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$file_name = isset($_REQUEST['file']) ?
|
||||
basename(stripslashes($_REQUEST['file'])) : null;
|
||||
if ($file_name) {
|
||||
@ -488,6 +514,10 @@ class FileUpload
|
||||
*/
|
||||
public function post()
|
||||
{
|
||||
if (!getDolGlobalInt('MAIN_USE_JQUERY_FILEUPLOAD')) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (isset($_REQUEST['_method']) && $_REQUEST['_method'] === 'DELETE') {
|
||||
return $this->delete();
|
||||
}
|
||||
@ -543,6 +573,10 @@ class FileUpload
|
||||
*/
|
||||
public function delete()
|
||||
{
|
||||
if (!getDolGlobalInt('MAIN_USE_JQUERY_FILEUPLOAD')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$file_name = isset($_REQUEST['file']) ?
|
||||
basename(stripslashes($_REQUEST['file'])) : null;
|
||||
$file_path = $this->options['upload_dir'].$file_name;
|
||||
|
||||
@ -94,7 +94,7 @@ class Form
|
||||
* @param string $text Text of label or key to translate
|
||||
* @param string $htmlname Name of select field ('edit' prefix will be added)
|
||||
* @param string $preselected Value to show/edit (not used in this function)
|
||||
* @param object $object Object
|
||||
* @param object $object Object (on the page we show)
|
||||
* @param boolean $perm Permission to allow button to edit parameter. Set it to 0 to have a not edited field.
|
||||
* @param string $typeofdata Type of data ('string' by default, 'email', 'amount:99', 'numeric:99', 'text' or 'textarea:rows:cols', 'datepicker' ('day' do not work, don't know why), 'dayhour' or 'datehourpicker' 'checkbox:ckeditor:dolibarr_zzz:width:height:savemethod:1:rows:cols', 'select;xxx[:class]'...)
|
||||
* @param string $moreparam More param to add on a href URL.
|
||||
@ -194,7 +194,7 @@ class Form
|
||||
* @param string $text Text of label (not used in this function)
|
||||
* @param string $htmlname Name of select field
|
||||
* @param string $value Value to show/edit
|
||||
* @param object $object Object
|
||||
* @param object $object Object (that we want to show)
|
||||
* @param boolean $perm Permission to allow button to edit parameter
|
||||
* @param string $typeofdata Type of data ('string' by default, 'email', 'amount:99', 'numeric:99', 'text' or 'textarea:rows:cols%', 'datepicker' ('day' do not work, don't know why), 'dayhour' or 'datehourpicker', 'ckeditor:dolibarr_zzz:width:height:savemethod:toolbarstartexpanded:rows:cols', 'select;xkey:xval,ykey:yval,...')
|
||||
* @param string $editvalue When in edit mode, use this value as $value instead of value (for example, you can provide here a formated price instead of numeric value). Use '' to use same than $value
|
||||
@ -303,6 +303,8 @@ class Form
|
||||
$arraylist[$tmpkey] = $tmp[1];
|
||||
}
|
||||
$ret .= $this->selectarray($htmlname, $arraylist, $value);
|
||||
} elseif (preg_match('/^link/', $typeofdata)) {
|
||||
// TODO Not yet implemented. See code for extrafields
|
||||
} elseif (preg_match('/^ckeditor/', $typeofdata)) {
|
||||
$tmp = explode(':', $typeofdata); // Example: ckeditor:dolibarr_zzz:width:height:savemethod:toolbarstartexpanded:rows:cols:uselocalbrowser
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
|
||||
|
||||
@ -41,7 +41,7 @@ class FormCategory extends Form
|
||||
* @param string $showempty 1 or 'string' to add an empty entry
|
||||
* @return string A HTML filter box (Note: selected results can get with GETPOST("search_category_".$type."_list"))
|
||||
*/
|
||||
public function getFilterBox($type, array $preSelected, $morecss = "minwidth300 widthcentpercentminusx", $searchCategoryProductOperator = -1, $multiselect = 1, $nocateg = 1, $showempty = '')
|
||||
public function getFilterBox($type, array $preSelected, $morecss = "minwidth300imp widthcentpercentminusx", $searchCategoryProductOperator = -1, $multiselect = 1, $nocateg = 1, $showempty = '')
|
||||
{
|
||||
global $langs, $db;
|
||||
|
||||
|
||||
@ -908,7 +908,7 @@ class FormCompany extends Form
|
||||
* @param string $morecss More css
|
||||
* @return string HTML string with prof id
|
||||
*/
|
||||
public function get_input_id_prof($idprof, $htmlname, $preselected, $country_code, $morecss = 'maxwidth100onsmartphone quatrevingtpercent')
|
||||
public function get_input_id_prof($idprof, $htmlname, $preselected, $country_code, $morecss = 'maxwidth200')
|
||||
{
|
||||
// phpcs:enable
|
||||
global $conf, $langs, $hookmanager;
|
||||
|
||||
@ -1431,7 +1431,7 @@ class FormTicket
|
||||
$res = $ticketstat->fetch('', '', $this->track_id);
|
||||
|
||||
print '<tr><td></td><td>';
|
||||
$checkbox_selected = (GETPOST('send_email') == "1" ? ' checked' : ($conf->global->TICKETS_MESSAGE_FORCE_MAIL?'checked':''));
|
||||
$checkbox_selected = (GETPOST('send_email') == "1" ? ' checked' : (getDolGlobalInt('TICKETS_MESSAGE_FORCE_MAIL')?'checked':''));
|
||||
print '<input type="checkbox" name="send_email" value="1" id="send_msg_email" '.$checkbox_selected.'/> ';
|
||||
print '<label for="send_msg_email">'.$langs->trans('SendMessageByEmail').'</label>';
|
||||
$texttooltip = $langs->trans("TicketMessageSendEmailHelp", '{s1}');
|
||||
@ -1463,7 +1463,7 @@ class FormTicket
|
||||
|
||||
// Subject
|
||||
print '<tr class="email_line"><td>'.$langs->trans('Subject').'</td>';
|
||||
print '<td><input type="text" class="text minwidth500" name="subject" value="['.$conf->global->MAIN_INFO_SOCIETE_NOM.' - '.$langs->trans("Ticket").' '.$ticketstat->ref.'] '.$langs->trans('TicketNewMessage').'" />';
|
||||
print '<td><input type="text" class="text minwidth500" name="subject" value="['.getDolGlobalString('MAIN_INFO_SOCIETE_NOM').' - '.$langs->trans("Ticket").' '.$ticketstat->ref.'] '.$langs->trans('TicketNewMessage').'" />';
|
||||
print '</td></tr>';
|
||||
|
||||
// Recipients / adressed-to
|
||||
@ -1497,8 +1497,8 @@ class FormTicket
|
||||
}
|
||||
}
|
||||
|
||||
if ($conf->global->TICKET_NOTIFICATION_ALSO_MAIN_ADDRESS) {
|
||||
$sendto[] = $conf->global->TICKET_NOTIFICATION_EMAIL_TO.' <small class="opacitymedium">(generic email)</small>';
|
||||
if (getDolGlobalInt('TICKET_NOTIFICATION_ALSO_MAIN_ADDRESS')) {
|
||||
$sendto[] = getDolGlobalString('TICKET_NOTIFICATION_EMAIL_TO').' <small class="opacitymedium">(generic email)</small>';
|
||||
}
|
||||
|
||||
// Print recipient list
|
||||
|
||||
@ -71,9 +71,7 @@ class Notify
|
||||
'ORDER_VALIDATE',
|
||||
'PROPAL_VALIDATE',
|
||||
'PROPAL_CLOSE_SIGNED',
|
||||
'PROPAL_CLOSE_SIGNED_WEB',
|
||||
'PROPAL_CLOSE_REFUSED',
|
||||
'PROPAL_CLOSE_REFUSED_WEB',
|
||||
'FICHINTER_VALIDATE',
|
||||
'FICHINTER_ADD_CONTACT',
|
||||
'ORDER_SUPPLIER_VALIDATE',
|
||||
@ -359,6 +357,7 @@ class Notify
|
||||
global $dolibarr_main_url_root;
|
||||
global $action;
|
||||
|
||||
// Complete the array Notify::$arrayofnotifsupported
|
||||
if (!is_object($hookmanager)) {
|
||||
include_once DOL_DOCUMENT_ROOT.'/core/class/hookmanager.class.php';
|
||||
$hookmanager = new HookManager($this->db);
|
||||
@ -373,13 +372,14 @@ class Notify
|
||||
}
|
||||
}
|
||||
|
||||
// If the trigger code is not managed by the Notification module
|
||||
if (!in_array($notifcode, Notify::$arrayofnotifsupported)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||
|
||||
dol_syslog(get_class($this)."::send notifcode=".$notifcode.", object=".$object->id);
|
||||
dol_syslog(get_class($this)."::send notifcode=".$notifcode.", object id=".$object->id);
|
||||
|
||||
$langs->load("other");
|
||||
|
||||
@ -407,7 +407,7 @@ class Notify
|
||||
// Check notification per third party
|
||||
if (!empty($object->socid) && $object->socid > 0) {
|
||||
$sql .= "SELECT 'tocontactid' as type_target, c.email, c.rowid as cid, c.lastname, c.firstname, c.default_lang,";
|
||||
$sql .= " a.rowid as adid, a.label, a.code, n.rowid, n.type";
|
||||
$sql .= " a.rowid as adid, a.label, a.code, n.rowid, n.threshold, n.context, n.type";
|
||||
$sql .= " FROM ".$this->db->prefix()."socpeople as c,";
|
||||
$sql .= " ".$this->db->prefix()."c_action_trigger as a,";
|
||||
$sql .= " ".$this->db->prefix()."notify_def as n,";
|
||||
@ -427,7 +427,7 @@ class Notify
|
||||
|
||||
// Check notification per user
|
||||
$sql .= "SELECT 'touserid' as type_target, c.email, c.rowid as cid, c.lastname, c.firstname, c.lang as default_lang,";
|
||||
$sql .= " a.rowid as adid, a.label, a.code, n.rowid, n.type";
|
||||
$sql .= " a.rowid as adid, a.label, a.code, n.rowid, n.threshold, n.context, n.type";
|
||||
$sql .= " FROM ".$this->db->prefix()."user as c,";
|
||||
$sql .= " ".$this->db->prefix()."c_action_trigger as a,";
|
||||
$sql .= " ".$this->db->prefix()."notify_def as n";
|
||||
@ -439,6 +439,11 @@ class Notify
|
||||
$sql .= " AND a.code = '".$this->db->escape($notifcode)."'"; // New usage
|
||||
}
|
||||
|
||||
// Check notification fixed
|
||||
// TODO Move part found after, into a sql here
|
||||
|
||||
|
||||
// Loop on all notifications enabled
|
||||
$result = $this->db->query($sql);
|
||||
if ($result) {
|
||||
$num = $this->db->num_rows($result);
|
||||
@ -511,13 +516,9 @@ class Notify
|
||||
$object_type = 'propal';
|
||||
$labeltouse = $conf->global->PROPAL_CLOSE_REFUSED_TEMPLATE;
|
||||
$mesg = $outputlangs->transnoentitiesnoconv("EMailTextProposalClosedRefused", $link);
|
||||
break;
|
||||
case 'PROPAL_CLOSE_REFUSED_WEB':
|
||||
$link = '<a href="'.$urlwithroot.'/comm/propal/card.php?id='.$object->id.'&entity='.$object->entity.'">'.$newref.'</a>';
|
||||
$dir_output = $conf->propal->multidir_output[$object->entity]."/".get_exdir(0, 0, 0, 1, $object, 'propal');
|
||||
$object_type = 'propal';
|
||||
$labeltouse = $conf->global->PROPAL_CLOSE_REFUSED_TEMPLATE;
|
||||
$mesg = $outputlangs->transnoentitiesnoconv("EMailTextProposalClosedRefusedWeb", $link);
|
||||
if (!empty($object->context['closedfromonlinesignature'])) {
|
||||
$mesg .= ' - From online page';
|
||||
}
|
||||
break;
|
||||
case 'PROPAL_CLOSE_SIGNED':
|
||||
$link = '<a href="'.$urlwithroot.'/comm/propal/card.php?id='.$object->id.'&entity='.$object->entity.'">'.$newref.'</a>';
|
||||
@ -525,13 +526,9 @@ class Notify
|
||||
$object_type = 'propal';
|
||||
$labeltouse = $conf->global->PROPAL_CLOSE_SIGNED_TEMPLATE;
|
||||
$mesg = $outputlangs->transnoentitiesnoconv("EMailTextProposalClosedSigned", $link);
|
||||
break;
|
||||
case 'PROPAL_CLOSE_SIGNED_WEB':
|
||||
$link = '<a href="'.$urlwithroot.'/comm/propal/card.php?id='.$object->id.'&entity='.$object->entity.'">'.$newref.'</a>';
|
||||
$dir_output = $conf->propal->multidir_output[$object->entity]."/".get_exdir(0, 0, 0, 1, $object, 'propal');
|
||||
$object_type = 'propal';
|
||||
$labeltouse = $conf->global->PROPAL_CLOSE_SIGNED_TEMPLATE;
|
||||
$mesg = $outputlangs->transnoentitiesnoconv("EMailTextProposalClosedSigned", $link);
|
||||
if (!empty($object->context['closedfromonlinesignature'])) {
|
||||
$mesg .= ' - From online page';
|
||||
}
|
||||
break;
|
||||
case 'FICHINTER_ADD_CONTACT':
|
||||
$link = '<a href="'.$urlwithroot.'/fichinter/card.php?id='.$object->id.'&entity='.$object->entity.'">'.$newref.'</a>';
|
||||
@ -651,6 +648,23 @@ class Notify
|
||||
|
||||
$labeltouse = !empty($labeltouse) ? $labeltouse : '';
|
||||
|
||||
// Replace keyword __SUPERVISOREMAIL__
|
||||
if (preg_match('/__SUPERVISOREMAIL__/', $sendto)) {
|
||||
$newval = '';
|
||||
if ($user->fk_user > 0) {
|
||||
$supervisoruser = new User($this->db);
|
||||
$supervisoruser->fetch($user->fk_user);
|
||||
if ($supervisoruser->email) {
|
||||
$newval = trim(dolGetFirstLastname($supervisoruser->firstname, $supervisoruser->lastname).' <'.$supervisoruser->email.'>');
|
||||
}
|
||||
}
|
||||
dol_syslog("Replace the __SUPERVISOREMAIL__ key into recipient email string with ".$newval);
|
||||
$sendto = preg_replace('/__SUPERVISOREMAIL__/', $newval, $sendto);
|
||||
$sendto = preg_replace('/,\s*,/', ',', $sendto); // in some case you can have $sendto like "email, __SUPERVISOREMAIL__ , otheremail" then you have "email, , othermail" and it's not valid
|
||||
$sendto = preg_replace('/^[\s,]+/', '', $sendto); // Clean start of string
|
||||
$sendto = preg_replace('/[\s,]+$/', '', $sendto); // Clean end of string
|
||||
}
|
||||
|
||||
$parameters = array('notifcode'=>$notifcode, 'sendto'=>$sendto, 'replyto'=>$replyto, 'file'=>$filename_list, 'mimefile'=>$mimetype_list, 'filename'=>$mimefilename_list, 'outputlangs'=>$outputlangs, 'labeltouse'=>$labeltouse);
|
||||
if (!isset($action)) {
|
||||
$action = '';
|
||||
@ -721,6 +735,7 @@ class Notify
|
||||
}
|
||||
|
||||
// Check notification using fixed email
|
||||
// TODO Move vars NOTIFICATION_FIXEDEMAIL into table llx_notify_def and inclulde the case into previous loop of sql result
|
||||
if (!$error) {
|
||||
foreach ($conf->global as $key => $val) {
|
||||
$reg = array();
|
||||
|
||||
@ -1003,8 +1003,8 @@ function dol_move($srcfile, $destfile, $newmask = 0, $overwriteifexists = 1, $te
|
||||
* @param string $srcdir Source directory
|
||||
* @param string $destdir Destination directory
|
||||
* @param int $overwriteifexists Overwrite directory if exists (1 by default)
|
||||
* @param int $indexdatabase Index new file into database.
|
||||
* @param int $renamedircontent Rename contents inside srcdir.
|
||||
* @param int $indexdatabase Index new name of files into database.
|
||||
* @param int $renamedircontent Also rename contents inside srcdir after the move to match new destination name.
|
||||
*
|
||||
* @return boolean True if OK, false if KO
|
||||
*/
|
||||
@ -1045,7 +1045,7 @@ function dol_move_dir($srcdir, $destdir, $overwriteifexists = 1, $indexdatabase
|
||||
if ($file["type"] == "dir") {
|
||||
$res = dol_move_dir($filepath.'/'.$oldname, $filepath.'/'.$newname, $overwriteifexists, $indexdatabase, $renamedircontent);
|
||||
} else {
|
||||
$res = dol_move($filepath.'/'.$oldname, $filepath.'/'.$newname);
|
||||
$res = dol_move($filepath.'/'.$oldname, $filepath.'/'.$newname, 0, $overwriteifexists, 0, $indexdatabase);
|
||||
}
|
||||
if (!$res) {
|
||||
return $result;
|
||||
|
||||
@ -4006,8 +4006,9 @@ function dol_trunc($string, $size = 40, $trunc = 'right', $stringencoding = 'UTF
|
||||
* Show picto whatever it's its name (generic function)
|
||||
*
|
||||
* @param string $titlealt Text on title tag for tooltip. Not used if param notitle is set to 1.
|
||||
* @param string $picto Name of image file to show ('filenew', ...)
|
||||
* If no extension provided, we use '.png'. Image must be stored into theme/xxx/img directory.
|
||||
* @param string $picto Name of image file to show ('filenew', ...).
|
||||
* For font awesome icon (example 'user'), you can use picto_nocolor to not have the color of picto forced.
|
||||
* If no extension provided and it is not a font awesome icon, we use '.png'. Image must be stored into theme/xxx/img directory.
|
||||
* Example: picto.png if picto.png is stored into htdocs/theme/mytheme/img
|
||||
* Example: picto.png@mymodule if picto.png is stored into htdocs/mymodule/img
|
||||
* Example: /mydir/mysubdir/picto.png if picto.png is stored into htdocs/mydir/mysubdir (pictoisfullpath must be set to 1)
|
||||
@ -4045,6 +4046,7 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $
|
||||
} else {
|
||||
$pictowithouttext = preg_replace('/(\.png|\.gif|\.svg)$/', '', $picto);
|
||||
$pictowithouttext = str_replace('object_', '', $pictowithouttext);
|
||||
$pictowithouttext = str_replace('_nocolor', '', $pictowithouttext);
|
||||
|
||||
if (strpos($pictowithouttext, 'fontawesome_') !== false || preg_match('/^fa-/', $pictowithouttext)) {
|
||||
// This is a font awesome image 'fonwtawesome_xxx' or 'fa-xxx'
|
||||
@ -4102,7 +4104,7 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $
|
||||
'edit', 'ellipsis-h', 'email', 'entity', 'envelope', 'eraser', 'establishment', 'expensereport', 'external-link-alt', 'external-link-square-alt', 'eye',
|
||||
'filter', 'file-code', 'file-export', 'file-import', 'file-upload', 'autofill', 'folder', 'folder-open', 'folder-plus',
|
||||
'gears', 'generate', 'globe', 'globe-americas', 'graph', 'grip', 'grip_title', 'group',
|
||||
'help', 'holiday',
|
||||
'hands-helping', 'help', 'holiday',
|
||||
'id-card', 'images', 'incoterm', 'info', 'intervention', 'inventory', 'intracommreport', 'jobprofile',
|
||||
'knowledgemanagement',
|
||||
'label', 'language', 'line', 'link', 'list', 'list-alt', 'listlight', 'loan', 'lock', 'lot', 'long-arrow-alt-right',
|
||||
@ -4254,7 +4256,7 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $
|
||||
//'title_setup'=>'infobox-action', 'tools'=>'infobox-action',
|
||||
'list-alt'=>'imgforviewmode', 'calendar'=>'imgforviewmode', 'calendarweek'=>'imgforviewmode', 'calendarmonth'=>'imgforviewmode', 'calendarday'=>'imgforviewmode', 'calendarperuser'=>'imgforviewmode'
|
||||
);
|
||||
if (!empty($arrayconvpictotomorcess[$pictowithouttext])) {
|
||||
if (!empty($arrayconvpictotomorcess[$pictowithouttext]) && strpos($picto, '_nocolor') === false) {
|
||||
$morecss .= ($morecss ? ' ' : '').$arrayconvpictotomorcess[$pictowithouttext];
|
||||
}
|
||||
|
||||
@ -4274,7 +4276,7 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $
|
||||
'uncheck'=>'#800', 'uparrow'=>'#555', 'user-cog'=>'#999', 'country'=>'#aaa', 'globe-americas'=>'#aaa', 'region'=>'#aaa', 'state'=>'#aaa',
|
||||
'website'=>'#304', 'workstation'=>'#a69944'
|
||||
);
|
||||
if (isset($arrayconvpictotocolor[$pictowithouttext])) {
|
||||
if (isset($arrayconvpictotocolor[$pictowithouttext]) && strpos($picto, '_nocolor') === false) {
|
||||
$facolor = $arrayconvpictotocolor[$pictowithouttext];
|
||||
}
|
||||
|
||||
@ -9091,11 +9093,9 @@ function dol_eval($s, $returnvalue = 0, $hideerrors = 1, $onlysimplestring = '1'
|
||||
}
|
||||
}
|
||||
} catch (Error $e) {
|
||||
$error = 'Caught error : ';
|
||||
$error .= $e->getMessage() . ', ';
|
||||
$error .= 'Trace : ';
|
||||
$error .= json_encode($e->getTrace());
|
||||
error_log($error, 1);
|
||||
$error = 'dol_eval try/catch error : ';
|
||||
$error .= $e->getMessage();
|
||||
dol_syslog($error);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -45,6 +45,11 @@ class pdf_strato extends ModelePDFContract
|
||||
*/
|
||||
public $db;
|
||||
|
||||
/**
|
||||
* @var int The environment ID when using a multicompany module
|
||||
*/
|
||||
public $entity;
|
||||
|
||||
/**
|
||||
* @var string model name
|
||||
*/
|
||||
@ -114,7 +119,7 @@ class pdf_strato extends ModelePDFContract
|
||||
|
||||
/**
|
||||
* Issuer
|
||||
* @var Societe
|
||||
* @var Societe Object that emits
|
||||
*/
|
||||
public $emetteur;
|
||||
|
||||
@ -138,7 +143,7 @@ class pdf_strato extends ModelePDFContract
|
||||
$this->description = $langs->trans("StandardContractsTemplate");
|
||||
$this->update_main_doc_field = 1; // Save the name of generated file as the main doc when generating a doc with this template
|
||||
|
||||
// Page size for A4 format
|
||||
// Dimension page
|
||||
$this->type = 'pdf';
|
||||
$formatarray = pdf_getFormat();
|
||||
|
||||
@ -160,7 +165,7 @@ class pdf_strato extends ModelePDFContract
|
||||
// Get source company
|
||||
$this->emetteur = $mysoc;
|
||||
if (empty($this->emetteur->country_code)) {
|
||||
$this->emetteur->country_code = substr($langs->defaultlang, -2); // By default, if not defined
|
||||
$this->emetteur->country_code = substr($langs->defaultlang, -2); // By default, if was not defined
|
||||
}
|
||||
|
||||
// Define position of columns
|
||||
@ -182,7 +187,7 @@ class pdf_strato extends ModelePDFContract
|
||||
public function write_file($object, $outputlangs, $srctemplatepath = '', $hidedetails = 0, $hidedesc = 0, $hideref = 0)
|
||||
{
|
||||
// phpcs:enable
|
||||
global $user, $langs, $conf, $hookmanager, $mysoc;
|
||||
global $user, $langs, $conf, $mysoc, $db, $hookmanager, $nblines;
|
||||
|
||||
if (!is_object($outputlangs)) {
|
||||
$outputlangs = $langs;
|
||||
@ -192,15 +197,30 @@ class pdf_strato extends ModelePDFContract
|
||||
$outputlangs->charset_output = 'ISO-8859-1';
|
||||
}
|
||||
|
||||
// Load traductions files required by page
|
||||
// Load translation files required by page
|
||||
$outputlangs->loadLangs(array("main", "dict", "companies", "contracts"));
|
||||
|
||||
if ($conf->contrat->dir_output) {
|
||||
// Show Draft Watermark
|
||||
if ($object->statut == $object::STATUS_DRAFT && (!empty($conf->global->CONTRACT_DRAFT_WATERMARK))) {
|
||||
$this->watermark = $conf->global->CONTRACT_DRAFT_WATERMARK;
|
||||
}
|
||||
|
||||
global $outputlangsbis;
|
||||
$outputlangsbis = null;
|
||||
if (!empty($conf->global->PDF_USE_ALSO_LANGUAGE_CODE) && $outputlangs->defaultlang != $conf->global->PDF_USE_ALSO_LANGUAGE_CODE) {
|
||||
$outputlangsbis = new Translate('', $conf);
|
||||
$outputlangsbis->setDefaultLang($conf->global->PDF_USE_ALSO_LANGUAGE_CODE);
|
||||
$outputlangsbis->loadLangs(array("main", "dict", "companies", "bills", "products", "orders", "deliveries"));
|
||||
}
|
||||
|
||||
$nblines = count($object->lines);
|
||||
|
||||
if ($conf->contract->multidir_output[$conf->entity]) {
|
||||
$object->fetch_thirdparty();
|
||||
|
||||
// Definition of $dir and $file
|
||||
if ($object->specimen) {
|
||||
$dir = $conf->contrat->dir_output;
|
||||
$dir = $conf->contract->multidir_output[$conf->entity];
|
||||
$file = $dir."/SPECIMEN.pdf";
|
||||
} else {
|
||||
$objectref = dol_sanitizeFileName($object->ref);
|
||||
@ -210,7 +230,7 @@ class pdf_strato extends ModelePDFContract
|
||||
|
||||
if (!file_exists($dir)) {
|
||||
if (dol_mkdir($dir) < 0) {
|
||||
$this->error = $outputlangs->trans("ErrorCanNotCreateDir", $dir);
|
||||
$this->error = $langs->trans("ErrorCanNotCreateDir", $dir);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@ -226,15 +246,20 @@ class pdf_strato extends ModelePDFContract
|
||||
global $action;
|
||||
$reshook = $hookmanager->executeHooks('beforePDFCreation', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
|
||||
|
||||
// Set nblines with the new command lines content after hook
|
||||
$nblines = count($object->lines);
|
||||
|
||||
// Create pdf instance
|
||||
$pdf = pdf_getInstance($this->format);
|
||||
$default_font_size = pdf_getPDFFontSize($outputlangs); // Must be after pdf_getInstance
|
||||
$pdf->SetAutoPageBreak(1, 0);
|
||||
|
||||
$heightforinfotot = 50; // Height reserved to output the info and total part
|
||||
$heightforfreetext = (isset($conf->global->MAIN_PDF_FREETEXT_HEIGHT) ? $conf->global->MAIN_PDF_FREETEXT_HEIGHT : 5); // Height reserved to output the free text on last page
|
||||
$heightforfooter = $this->marge_basse + 9; // Height reserved to output the footer (value include bottom margin)
|
||||
if (!empty($conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS)) {
|
||||
$heightforfooter += 6;
|
||||
}
|
||||
$pdf->SetAutoPageBreak(1, 0);
|
||||
|
||||
if (class_exists('TCPDF')) {
|
||||
$pdf->setPrintHeader(false);
|
||||
@ -243,7 +268,11 @@ class pdf_strato extends ModelePDFContract
|
||||
$pdf->SetFont(pdf_getPDFFont($outputlangs));
|
||||
// Set path to the background PDF File
|
||||
if (!empty($conf->global->MAIN_ADD_PDF_BACKGROUND)) {
|
||||
$pagecount = $pdf->setSourceFile($conf->mycompany->dir_output.'/'.$conf->global->MAIN_ADD_PDF_BACKGROUND);
|
||||
$logodir = $conf->mycompany->dir_output;
|
||||
if (!empty($conf->mycompany->multidir_output[$object->entity])) {
|
||||
$logodir = $conf->mycompany->multidir_output[$object->entity];
|
||||
}
|
||||
$pagecount = $pdf->setSourceFile($logodir.'/'.$conf->global->MAIN_ADD_PDF_BACKGROUND);
|
||||
$tplidx = $pdf->importPage(1);
|
||||
}
|
||||
|
||||
@ -252,10 +281,10 @@ class pdf_strato extends ModelePDFContract
|
||||
$pdf->SetDrawColor(128, 128, 128);
|
||||
|
||||
$pdf->SetTitle($outputlangs->convToOutputCharset($object->ref));
|
||||
$pdf->SetSubject($outputlangs->transnoentities("ContractCard"));
|
||||
$pdf->SetSubject($outputlangs->transnoentities("Contract"));
|
||||
$pdf->SetCreator("Dolibarr ".DOL_VERSION);
|
||||
$pdf->SetAuthor($outputlangs->convToOutputCharset($user->getFullName($outputlangs)));
|
||||
$pdf->SetKeyWords($outputlangs->convToOutputCharset($object->ref)." ".$outputlangs->transnoentities("ContractCard")." ".$outputlangs->convToOutputCharset($object->thirdparty->name));
|
||||
$pdf->SetKeyWords($outputlangs->convToOutputCharset($object->ref)." ".$outputlangs->transnoentities("Contract")." ".$outputlangs->convToOutputCharset($object->thirdparty->name));
|
||||
if (getDolGlobalString('MAIN_DISABLE_PDF_COMPRESSION')) {
|
||||
$pdf->SetCompression(false);
|
||||
}
|
||||
@ -268,7 +297,7 @@ class pdf_strato extends ModelePDFContract
|
||||
$pdf->useTemplate($tplidx);
|
||||
}
|
||||
$pagenb++;
|
||||
$this->_pagehead($pdf, $object, 1, $outputlangs);
|
||||
$top_shift = $this->_pagehead($pdf, $object, 1, $outputlangs, (is_object($outputlangsbis) ? $outputlangsbis : null));
|
||||
$pdf->SetFont('', '', $default_font_size - 1);
|
||||
$pdf->MultiCell(0, 3, ''); // Set interline to 3
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
@ -408,6 +437,7 @@ class pdf_strato extends ModelePDFContract
|
||||
{
|
||||
$pdf->commitTransaction();
|
||||
}
|
||||
$posYAfterDescription = $pdf->GetY();
|
||||
|
||||
$nexY = $pdf->GetY() + 2;
|
||||
$pageposafter = $pdf->getPage();
|
||||
@ -417,7 +447,7 @@ class pdf_strato extends ModelePDFContract
|
||||
$pdf->setPageOrientation('', 1, 0); // The only function to edit the bottom margin of current page to set it.
|
||||
|
||||
// We suppose that a too long description is moved completely on next page
|
||||
if ($pageposafter > $pageposbefore) {
|
||||
if ($pageposafter > $pageposbefore && empty($showpricebeforepagebreak)) {
|
||||
$pdf->setPage($pageposafter);
|
||||
$curY = $tab_top_newpage;
|
||||
}
|
||||
@ -483,10 +513,6 @@ class pdf_strato extends ModelePDFContract
|
||||
$pdf->Output($file, 'F');
|
||||
|
||||
// Add pdfgeneration hook
|
||||
if (!is_object($hookmanager)) {
|
||||
include_once DOL_DOCUMENT_ROOT.'/core/class/hookmanager.class.php';
|
||||
$hookmanager = new HookManager($this->db);
|
||||
}
|
||||
$hookmanager->initHooks(array('pdfgeneration'));
|
||||
$parameters = array('file'=>$file, 'object'=>$object, 'outputlangs'=>$outputlangs);
|
||||
global $action;
|
||||
@ -500,13 +526,13 @@ class pdf_strato extends ModelePDFContract
|
||||
|
||||
$this->result = array('fullpath'=>$file);
|
||||
|
||||
return 1;
|
||||
return 1; // No error
|
||||
} else {
|
||||
$this->error = $langs->trans("ErrorCanNotCreateDir", $dir);
|
||||
$this->error = $langs->transnoentities("ErrorCanNotCreateDir", $dir);
|
||||
return 0;
|
||||
}
|
||||
} else {
|
||||
$this->error = $langs->trans("ErrorConstantNotDefined", "CONTRACT_OUTPUTDIR");
|
||||
$this->error = $langs->transnoentities("ErrorConstantNotDefined", "CONTRACT_OUTPUTDIR");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@ -534,7 +560,9 @@ class pdf_strato extends ModelePDFContract
|
||||
$hidetop = -1;
|
||||
}
|
||||
|
||||
$currency = !empty($currency) ? $currency : $conf->currency;
|
||||
$default_font_size = pdf_getPDFFontSize($outputlangs);
|
||||
|
||||
/*
|
||||
$pdf->SetXY($this->marge_gauche, $tab_top);
|
||||
$pdf->MultiCell(190,8,$outputlangs->transnoentities("Description"),0,'L',0);
|
||||
@ -600,76 +628,97 @@ class pdf_strato extends ModelePDFContract
|
||||
* @param Contrat $object Object to show
|
||||
* @param int $showaddress 0=no, 1=yes
|
||||
* @param Translate $outputlangs Object lang for output
|
||||
* @return void
|
||||
* @param Translate $outputlangsbis Object lang for output bis
|
||||
* @param string $titlekey Translation key to show as title of document
|
||||
* @return int Return topshift value
|
||||
*/
|
||||
protected function _pagehead(&$pdf, $object, $showaddress, $outputlangs)
|
||||
protected function _pagehead(&$pdf, $object, $showaddress, $outputlangs, $outputlangsbis = null, $titlekey = "Contract")
|
||||
{
|
||||
global $conf, $langs;
|
||||
// phpcs:enable
|
||||
global $conf, $langs, $hookmanager;
|
||||
|
||||
$default_font_size = pdf_getPDFFontSize($outputlangs);
|
||||
$ltrdirection = 'L';
|
||||
if ($outputlangs->trans("DIRECTION") == 'rtl') {
|
||||
$ltrdirection = 'R';
|
||||
}
|
||||
|
||||
// Load traductions files required by page
|
||||
$outputlangs->loadLangs(array("main", "dict", "contract", "companies"));
|
||||
|
||||
$default_font_size = pdf_getPDFFontSize($outputlangs);
|
||||
|
||||
pdf_pagehead($pdf, $outputlangs, $this->page_hauteur);
|
||||
|
||||
//Affiche le filigrane brouillon - Print Draft Watermark
|
||||
if ($object->statut == 0 && (!empty($conf->global->CONTRACT_DRAFT_WATERMARK))) {
|
||||
pdf_watermark($pdf, $outputlangs, $this->page_hauteur, $this->page_largeur, 'mm', $conf->global->CONTRACT_DRAFT_WATERMARK);
|
||||
}
|
||||
|
||||
//Prepare next
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
$pdf->SetFont('', 'B', $default_font_size + 3);
|
||||
|
||||
$posx = $this->page_largeur - $this->marge_droite - 100;
|
||||
$w = 100;
|
||||
|
||||
$posy = $this->marge_haute;
|
||||
$posx = $this->page_largeur - $this->marge_droite - $w;
|
||||
|
||||
$pdf->SetXY($this->marge_gauche, $posy);
|
||||
|
||||
// Logo
|
||||
$logo = $conf->mycompany->dir_output.'/logos/'.$this->emetteur->logo;
|
||||
if ($this->emetteur->logo) {
|
||||
if (is_readable($logo)) {
|
||||
$height = pdf_getHeightForLogo($logo);
|
||||
$pdf->Image($logo, $this->marge_gauche, $posy, 0, $height); // width=0 (auto)
|
||||
if (empty($conf->global->PDF_DISABLE_MYCOMPANY_LOGO)) {
|
||||
if ($this->emetteur->logo) {
|
||||
$logodir = $conf->mycompany->dir_output;
|
||||
if (!empty($conf->mycompany->multidir_output[$object->entity])) {
|
||||
$logodir = $conf->mycompany->multidir_output[$object->entity];
|
||||
}
|
||||
if (empty($conf->global->MAIN_PDF_USE_LARGE_LOGO)) {
|
||||
$logo = $logodir.'/logos/thumbs/'.$this->emetteur->logo_small;
|
||||
} else {
|
||||
$logo = $logodir.'/logos/'.$this->emetteur->logo;
|
||||
}
|
||||
if (is_readable($logo)) {
|
||||
$height = pdf_getHeightForLogo($logo);
|
||||
$pdf->Image($logo, $this->marge_gauche, $posy, 0, $height); // width=0 (auto)
|
||||
} else {
|
||||
$pdf->SetTextColor(200, 0, 0);
|
||||
$pdf->SetFont('', 'B', $default_font_size - 2);
|
||||
$pdf->MultiCell($w, 3, $outputlangs->transnoentities("ErrorLogoFileNotFound", $logo), 0, 'L');
|
||||
$pdf->MultiCell($w, 3, $outputlangs->transnoentities("ErrorGoToGlobalSetup"), 0, 'L');
|
||||
}
|
||||
} else {
|
||||
$pdf->SetTextColor(200, 0, 0);
|
||||
$pdf->SetFont('', 'B', $default_font_size - 2);
|
||||
$pdf->MultiCell(100, 3, $outputlangs->transnoentities("ErrorLogoFileNotFound", $logo), 0, 'L');
|
||||
$pdf->MultiCell(100, 3, $outputlangs->transnoentities("ErrorGoToGlobalSetup"), 0, 'L');
|
||||
$text = $this->emetteur->name;
|
||||
$pdf->MultiCell($w, 4, $outputlangs->convToOutputCharset($text), 0, $ltrdirection);
|
||||
}
|
||||
} else {
|
||||
$text = $this->emetteur->name;
|
||||
$pdf->MultiCell(100, 4, $outputlangs->convToOutputCharset($text), 0, 'L');
|
||||
}
|
||||
|
||||
$pdf->SetFont('', 'B', $default_font_size + 3);
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
$title = $outputlangs->transnoentities("ContractCard");
|
||||
$pdf->MultiCell(100, 4, $title, '', 'R');
|
||||
$title = $outputlangs->transnoentities($titlekey);
|
||||
$title .= ' '.$outputlangs->convToOutputCharset($object->ref);
|
||||
if ($object->statut == $object::STATUS_DRAFT) {
|
||||
$pdf->SetTextColor(128, 0, 0);
|
||||
$title .= ' - '.$outputlangs->transnoentities("NotValidated");
|
||||
}
|
||||
$pdf->MultiCell($w, 3, $title, '', 'R');
|
||||
|
||||
$pdf->SetFont('', 'B', $default_font_size + 2);
|
||||
$pdf->SetFont('', 'B', $default_font_size);
|
||||
|
||||
/*
|
||||
$posy += 5;
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
$pdf->MultiCell(100, 4, $outputlangs->transnoentities("Ref")." : ".$outputlangs->convToOutputCharset($object->ref), '', 'R');
|
||||
*/
|
||||
|
||||
$posy += 1;
|
||||
$pdf->SetFont('', '', $default_font_size);
|
||||
$posy += 3;
|
||||
$pdf->SetFont('', '', $default_font_size - 1);
|
||||
|
||||
$posy += 4;
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
$pdf->MultiCell(100, 3, $outputlangs->transnoentities("Date")." : ".dol_print_date($object->date_contrat, "day", false, $outputlangs, true), '', 'R');
|
||||
$pdf->MultiCell($w, 3, $outputlangs->transnoentities("Date")." : ".dol_print_date($object->date_contrat, "day", false, $outputlangs, true), '', 'R');
|
||||
|
||||
if (empty($conf->global->MAIN_PDF_HIDE_CUSTOMER_CODE) && $object->thirdparty->code_client) {
|
||||
$posy += 4;
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
$pdf->MultiCell(100, 3, $outputlangs->transnoentities("CustomerCode")." : ".$outputlangs->transnoentities($object->thirdparty->code_client), '', 'R');
|
||||
$pdf->MultiCell($w, 3, $outputlangs->transnoentities("CustomerCode")." : ".$outputlangs->transnoentities($object->thirdparty->code_client), '', 'R');
|
||||
}
|
||||
|
||||
if ($showaddress) {
|
||||
@ -700,6 +749,7 @@ class pdf_strato extends ModelePDFContract
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetFillColor(230, 230, 230);
|
||||
$pdf->MultiCell(82, $hautcadre, "", 0, 'R', 1);
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
}
|
||||
|
||||
// Show sender name
|
||||
@ -707,13 +757,13 @@ class pdf_strato extends ModelePDFContract
|
||||
$pdf->SetXY($posx + 2, $posy + 3);
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
$pdf->SetFont('', 'B', $default_font_size);
|
||||
$pdf->MultiCell(80, 3, $outputlangs->convToOutputCharset($this->emetteur->name), 0, 'L');
|
||||
$pdf->MultiCell(80, 4, $outputlangs->convToOutputCharset($this->emetteur->name), 0, 'L');
|
||||
$posy = $pdf->getY();
|
||||
}
|
||||
|
||||
// Show sender information
|
||||
$pdf->SetFont('', '', $default_font_size - 1);
|
||||
$pdf->SetXY($posx + 2, $posy);
|
||||
$pdf->SetFont('', '', $default_font_size - 1);
|
||||
$pdf->MultiCell(80, 4, $carac_emetteur, 0, 'L');
|
||||
|
||||
|
||||
@ -736,14 +786,16 @@ class pdf_strato extends ModelePDFContract
|
||||
|
||||
$this->recipient->name = pdfBuildThirdpartyName($thirdparty, $outputlangs);
|
||||
|
||||
$carac_client = pdf_build_address($outputlangs, $this->emetteur, $object->thirdparty, (isset($object->contact) ? $object->contact : ''), $usecontact, 'target', $object);
|
||||
$mode = 'target';
|
||||
$carac_client = pdf_build_address($outputlangs, $this->emetteur, $object->thirdparty, (isset($object->contact) ? $object->contact : ''), $usecontact, $mode, $object);
|
||||
|
||||
// Show recipient
|
||||
$widthrecbox = 100;
|
||||
$widthrecbox = !empty($conf->global->MAIN_PDF_USE_ISO_LOCATION) ? 92 : 100;
|
||||
if ($this->page_largeur < 210) {
|
||||
$widthrecbox = 84; // To work with US executive format
|
||||
}
|
||||
$posy = 42;
|
||||
$posy = !empty($conf->global->MAIN_PDF_USE_ISO_LOCATION) ? 40 : 42;
|
||||
$posy += $top_shift;
|
||||
$posx = $this->page_largeur - $this->marge_droite - $widthrecbox;
|
||||
if (!empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT)) {
|
||||
$posx = $this->marge_gauche;
|
||||
@ -761,15 +813,18 @@ class pdf_strato extends ModelePDFContract
|
||||
// Show recipient name
|
||||
$pdf->SetXY($posx + 2, $posy + 3);
|
||||
$pdf->SetFont('', 'B', $default_font_size);
|
||||
$pdf->MultiCell($widthrecbox, 4, $this->recipient->name, 0, 'L');
|
||||
$pdf->MultiCell($widthrecbox, 4, $this->recipient->name, 0, $ltrdirection);
|
||||
|
||||
$posy = $pdf->getY();
|
||||
|
||||
// Show recipient information
|
||||
$pdf->SetFont('', '', $default_font_size - 1);
|
||||
$pdf->SetXY($posx + 2, $posy);
|
||||
$pdf->MultiCell($widthrecbox, 4, $carac_client, 0, 'L');
|
||||
$pdf->MultiCell($widthrecbox, 4, $carac_client, 0, $ltrdirection);
|
||||
}
|
||||
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
return $top_shift;
|
||||
}
|
||||
|
||||
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore
|
||||
@ -785,6 +840,6 @@ class pdf_strato extends ModelePDFContract
|
||||
protected function _pagefoot(&$pdf, $object, $outputlangs, $hidefreetext = 0)
|
||||
{
|
||||
$showdetails = getDolGlobalInt('MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS', 0);
|
||||
return pdf_pagefoot($pdf, $outputlangs, 'CONTRACT_FREE_TEXT', $this->emetteur, $this->marge_basse, $this->marge_gauche, $this->page_hauteur, $object, $showdetails, $hidefreetext);
|
||||
return pdf_pagefoot($pdf, $outputlangs, 'CONTRACT_FREE_TEXT', $this->emetteur, $this->marge_basse, $this->marge_gauche, $this->page_hauteur, $object, $showdetails, $hidefreetext, $this->page_largeur, $this->watermark);
|
||||
}
|
||||
}
|
||||
|
||||
@ -212,7 +212,7 @@ class modPartnership extends DolibarrModules
|
||||
|
||||
// Dictionaries
|
||||
$this->dictionaries=array(
|
||||
'langs'=>'partnership@partnership',
|
||||
'langs'=>'partnership',
|
||||
// List of tables we want to see into dictonnary editor
|
||||
'tabname'=>array("c_partnership_type"),
|
||||
// Label of tables
|
||||
@ -291,7 +291,7 @@ class modPartnership extends DolibarrModules
|
||||
// 'leftmenu'=>'partnership',
|
||||
// 'url'=>'/partnership/partnership_list.php',
|
||||
// // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.
|
||||
// 'langs'=>'partnership@partnership',
|
||||
// 'langs'=>'partnership',
|
||||
// 'position'=>1100+$r,
|
||||
// // Define condition to show or hide menu entry. Use '$conf->partnership->enabled' if entry must be visible if module is enabled. Use '$leftmenu==\'system\'' to show if leftmenu system is selected.
|
||||
// 'enabled'=>'$conf->partnership->enabled',
|
||||
@ -349,18 +349,18 @@ class modPartnership extends DolibarrModules
|
||||
$r = 1;
|
||||
/* BEGIN MODULEBUILDER EXPORT PARTNERSHIP */
|
||||
/*
|
||||
$langs->load("partnership@partnership");
|
||||
$langs->load("partnership");
|
||||
$this->export_code[$r]=$this->rights_class.'_'.$r;
|
||||
$this->export_label[$r]='PartnershipLines'; // Translation key (used only if key ExportDataset_xxx_z not found)
|
||||
$this->export_icon[$r]='partnership@partnership';
|
||||
$this->export_icon[$r]='partnership';
|
||||
// Define $this->export_fields_array, $this->export_TypeFields_array and $this->export_entities_array
|
||||
$keyforclass = 'Partnership'; $keyforclassfile='/partnership/class/partnership.class.php'; $keyforelement='partnership@partnership';
|
||||
$keyforclass = 'Partnership'; $keyforclassfile='/partnership/class/partnership.class.php'; $keyforelement='partnership';
|
||||
include DOL_DOCUMENT_ROOT.'/core/commonfieldsinexport.inc.php';
|
||||
//$this->export_fields_array[$r]['t.fieldtoadd']='FieldToAdd'; $this->export_TypeFields_array[$r]['t.fieldtoadd']='Text';
|
||||
//unset($this->export_fields_array[$r]['t.fieldtoremove']);
|
||||
//$keyforclass = 'PartnershipLine'; $keyforclassfile='/partnership/class/partnership.class.php'; $keyforelement='partnershipline@partnership'; $keyforalias='tl';
|
||||
//include DOL_DOCUMENT_ROOT.'/core/commonfieldsinexport.inc.php';
|
||||
$keyforselect='partnership'; $keyforaliasextra='extra'; $keyforelement='partnership@partnership';
|
||||
$keyforselect='partnership'; $keyforaliasextra='extra'; $keyforelement='partnership';
|
||||
include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php';
|
||||
//$keyforselect='partnershipline'; $keyforaliasextra='extraline'; $keyforelement='partnershipline@partnership';
|
||||
//include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php';
|
||||
@ -380,13 +380,13 @@ class modPartnership extends DolibarrModules
|
||||
$r = 1;
|
||||
/* BEGIN MODULEBUILDER IMPORT PARTNERSHIP */
|
||||
/*
|
||||
$langs->load("partnership@partnership");
|
||||
$langs->load("partnership");
|
||||
$this->export_code[$r]=$this->rights_class.'_'.$r;
|
||||
$this->export_label[$r]='PartnershipLines'; // Translation key (used only if key ExportDataset_xxx_z not found)
|
||||
$this->export_icon[$r]='partnership@partnership';
|
||||
$keyforclass = 'Partnership'; $keyforclassfile='/partnership/class/partnership.class.php'; $keyforelement='partnership@partnership';
|
||||
$this->export_icon[$r]='partnership';
|
||||
$keyforclass = 'Partnership'; $keyforclassfile='/partnership/class/partnership.class.php'; $keyforelement='partnership';
|
||||
include DOL_DOCUMENT_ROOT.'/core/commonfieldsinexport.inc.php';
|
||||
$keyforselect='partnership'; $keyforaliasextra='extra'; $keyforelement='partnership@partnership';
|
||||
$keyforselect='partnership'; $keyforaliasextra='extra'; $keyforelement='partnership';
|
||||
include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php';
|
||||
//$this->export_dependencies_array[$r]=array('mysubobject'=>'ts.rowid', 't.myfield'=>array('t.myfield2','t.myfield3')); // To force to activate one or several fields if we select some fields that need same (like to select a unique key if we ask a field of a child to avoid the DISTINCT to discard them, or for computed field than need several other fields)
|
||||
$this->export_sql_start[$r]='SELECT DISTINCT ';
|
||||
@ -417,11 +417,11 @@ class modPartnership extends DolibarrModules
|
||||
// Create extrafields during init
|
||||
//include_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
|
||||
//$extrafields = new ExtraFields($this->db);
|
||||
//$result1=$extrafields->addExtraField('partnership_myattr1', "New Attr 1 label", 'boolean', 1, 3, 'thirdparty', 0, 0, '', '', 1, '', 0, 0, '', '', 'partnership@partnership', '$conf->partnership->enabled');
|
||||
//$result2=$extrafields->addExtraField('partnership_myattr2', "New Attr 2 label", 'varchar', 1, 10, 'project', 0, 0, '', '', 1, '', 0, 0, '', '', 'partnership@partnership', '$conf->partnership->enabled');
|
||||
//$result3=$extrafields->addExtraField('partnership_myattr3', "New Attr 3 label", 'varchar', 1, 10, 'bank_account', 0, 0, '', '', 1, '', 0, 0, '', '', 'partnership@partnership', '$conf->partnership->enabled');
|
||||
//$result4=$extrafields->addExtraField('partnership_myattr4', "New Attr 4 label", 'select', 1, 3, 'thirdparty', 0, 1, '', array('options'=>array('code1'=>'Val1','code2'=>'Val2','code3'=>'Val3')), 1,'', 0, 0, '', '', 'partnership@partnership', '$conf->partnership->enabled');
|
||||
//$result5=$extrafields->addExtraField('partnership_myattr5', "New Attr 5 label", 'text', 1, 10, 'user', 0, 0, '', '', 1, '', 0, 0, '', '', 'partnership@partnership', '$conf->partnership->enabled');
|
||||
//$result1=$extrafields->addExtraField('partnership_myattr1', "New Attr 1 label", 'boolean', 1, 3, 'thirdparty', 0, 0, '', '', 1, '', 0, 0, '', '', 'partnership', '$conf->partnership->enabled');
|
||||
//$result2=$extrafields->addExtraField('partnership_myattr2', "New Attr 2 label", 'varchar', 1, 10, 'project', 0, 0, '', '', 1, '', 0, 0, '', '', 'partnership', '$conf->partnership->enabled');
|
||||
//$result3=$extrafields->addExtraField('partnership_myattr3', "New Attr 3 label", 'varchar', 1, 10, 'bank_account', 0, 0, '', '', 1, '', 0, 0, '', '', 'partnership', '$conf->partnership->enabled');
|
||||
//$result4=$extrafields->addExtraField('partnership_myattr4', "New Attr 4 label", 'select', 1, 3, 'thirdparty', 0, 1, '', array('options'=>array('code1'=>'Val1','code2'=>'Val2','code3'=>'Val3')), 1,'', 0, 0, '', '', 'partnership', '$conf->partnership->enabled');
|
||||
//$result5=$extrafields->addExtraField('partnership_myattr5', "New Attr 5 label", 'text', 1, 10, 'user', 0, 0, '', '', 1, '', 0, 0, '', '', 'partnership', '$conf->partnership->enabled');
|
||||
|
||||
// Permissions
|
||||
$this->remove($options);
|
||||
|
||||
@ -328,7 +328,7 @@ if ($action == 'presend') {
|
||||
}
|
||||
|
||||
$contactarr = array();
|
||||
$contactarr = $tmpobject->liste_contact(-1, 'external');
|
||||
$contactarr = $tmpobject->liste_contact(-1, 'external', 0, '', 1);
|
||||
|
||||
if (is_array($contactarr) && count($contactarr) > 0) {
|
||||
require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
|
||||
|
||||
@ -75,7 +75,10 @@ class InterfaceWorkflowManager extends DolibarrTriggers
|
||||
if (isModEnabled('commande') && !empty($conf->global->WORKFLOW_PROPAL_AUTOCREATE_ORDER)) {
|
||||
$object->fetchObjectLinked();
|
||||
if (!empty($object->linkedObjectsIds['commande'])) {
|
||||
setEventMessages($langs->trans("OrderExists"), null, 'warnings');
|
||||
if (empty($object->context['closedfromonlinesignature'])) {
|
||||
$langs->load("orders");
|
||||
setEventMessages($langs->trans("OrderExists"), null, 'warnings');
|
||||
}
|
||||
return $ret;
|
||||
} else {
|
||||
include_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php';
|
||||
|
||||
@ -992,6 +992,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
|
||||
$object->trackid = 'sub'.$object->id;
|
||||
} elseif (preg_match('/^MEMBER_/', $action)) {
|
||||
$object->trackid = 'mem'.$object->id;
|
||||
} elseif (preg_match('/^PARTNERSHIP_/', $action)) {
|
||||
$object->trackid = 'pship'.$object->id;
|
||||
} elseif (preg_match('/^PROJECT_/', $action)) {
|
||||
$object->trackid = 'proj'.$object->id;
|
||||
} elseif (preg_match('/^TASK_/', $action)) {
|
||||
@ -1090,7 +1092,7 @@ class InterfaceActionsAuto extends DolibarrTriggers
|
||||
$actioncomm->errors_to = empty($object->errors_to) ? null : $object->errors_to;
|
||||
}
|
||||
|
||||
// Object linked (if link is for thirdparty, contact, project it is a recording error. We should not have links in link table
|
||||
// Object linked (if link is for thirdparty, contact or project, it is a recording error. We should not have links in link table
|
||||
// for such objects because there is already a dedicated field into table llx_actioncomm or llx_actioncomm_resources.
|
||||
if (!in_array($elementtype, array('societe', 'contact', 'project'))) {
|
||||
$actioncomm->fk_element = $elementid;
|
||||
|
||||
@ -45,7 +45,7 @@ class InterfaceNotification extends DolibarrTriggers
|
||||
|
||||
$this->name = preg_replace('/^Interface/i', '', get_class($this));
|
||||
$this->family = "notification";
|
||||
$this->description = "Triggers of this module send email notifications according to Notification module setup.";
|
||||
$this->description = "Triggers of this module send Email notifications according to Notification module setup.";
|
||||
// 'development', 'experimental', 'dolibarr' or version
|
||||
$this->version = self::VERSION_DOLIBARR;
|
||||
$this->picto = 'email';
|
||||
@ -70,6 +70,7 @@ class InterfaceNotification extends DolibarrTriggers
|
||||
return 0; // Module not active, we do nothing
|
||||
}
|
||||
|
||||
// If the trigger code is not managed by the Notification module
|
||||
if (!in_array($action, $this->listofmanagedevents)) {
|
||||
return 0;
|
||||
}
|
||||
@ -112,7 +113,7 @@ class InterfaceNotification extends DolibarrTriggers
|
||||
$ret = array();
|
||||
|
||||
|
||||
$sql = "SELECT rowid, code, label, description, elementtype";
|
||||
$sql = "SELECT rowid, code, contexts, label, description, elementtype";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."c_action_trigger";
|
||||
$sql .= $this->db->order("rang, elementtype, code");
|
||||
|
||||
@ -153,7 +154,7 @@ class InterfaceNotification extends DolibarrTriggers
|
||||
}
|
||||
|
||||
if ($qualified) {
|
||||
$ret[] = array('rowid'=>$obj->rowid, 'code'=>$obj->code, 'label'=>$obj->label, 'description'=>$obj->description, 'elementtype'=>$obj->elementtype);
|
||||
$ret[] = array('rowid'=>$obj->rowid, 'code'=>$obj->code, 'contexts'=>$obj->contexts, 'label'=>$obj->label, 'description'=>$obj->description, 'elementtype'=>$obj->elementtype);
|
||||
}
|
||||
|
||||
$i++;
|
||||
|
||||
@ -107,20 +107,58 @@ if (!defined('USEDOLIBARRSERVER') && !defined('USEDOLIBARREDITOR')) {
|
||||
// X-XSS-Protection
|
||||
//header("X-XSS-Protection: 1"); // XSS filtering protection of some browsers (note: use of Content-Security-Policy is more efficient). Disabled as deprecated.
|
||||
|
||||
// Content-Security-Policy
|
||||
if (!defined('WEBSITE_MAIN_SECURITY_FORCECSP')) {
|
||||
// The constant WEBSITE_MAIN_SECURITY_FORCECSP should never be defined by page, but the variable used just after may be
|
||||
|
||||
// Content-Security-Policy-Report-Only
|
||||
if (!defined('WEBSITE_MAIN_SECURITY_FORCECSPRO')) {
|
||||
// A default security policy that keep usage of js external component like ckeditor, stripe, google, working
|
||||
// $contentsecuritypolicy = "font-src *; img-src *; style-src * 'unsafe-inline' 'unsafe-eval'; default-src 'self' *.stripe.com 'unsafe-inline' 'unsafe-eval'; script-src 'self' *.stripe.com 'unsafe-inline' 'unsafe-eval'; frame-ancestors 'self'; frame-src 'self' *.stripe.com; connect-src 'self';";
|
||||
$contentsecuritypolicy = getDolGlobalString('WEBSITE_MAIN_SECURITY_FORCECSP');
|
||||
// For example: to restrict to only local resources, except for css (cloudflare+google), and js (transifex + google tags) and object/iframe (youtube)
|
||||
// default-src 'self'; style-src: https://cdnjs.cloudflare.com https://fonts.googleapis.com; script-src: https://cdn.transifex.com https://www.googletagmanager.com; object-src https://youtube.com; frame-src https://youtube.com; img-src: *;
|
||||
// For example, to restrict everything to itself except img that can be on other servers:
|
||||
// default-src 'self'; img-src *;
|
||||
// Pre-existing site that uses too much js code to fix but wants to ensure resources are loaded only over https and disable plugins:
|
||||
// default-src https: 'unsafe-inline' 'unsafe-eval'; object-src 'none'
|
||||
//
|
||||
// $contentsecuritypolicy = "frame-ancestors 'self'; img-src * data:; font-src *; default-src 'self' 'unsafe-inline' 'unsafe-eval' *.paypal.com *.stripe.com *.google.com *.googleapis.com *.google-analytics.com *.googletagmanager.com;";
|
||||
// $contentsecuritypolicy = "frame-ancestors 'self'; img-src * data:; font-src *; default-src *; script-src 'self' 'unsafe-inline' *.paypal.com *.stripe.com *.google.com *.googleapis.com *.google-analytics.com *.googletagmanager.com; style-src 'self' 'unsafe-inline'; connect-src 'self';";
|
||||
$contentsecuritypolicy = getDolGlobalString('WEBSITE_MAIN_SECURITY_FORCECSPRO');
|
||||
|
||||
if (!is_object($hookmanager)) {
|
||||
$hookmanager = new HookManager($db);
|
||||
}
|
||||
$hookmanager->initHooks(array("main"));
|
||||
|
||||
$parameters = array('contentsecuritypolicy'=>$contentsecuritypolicy);
|
||||
$parameters = array('contentsecuritypolicy'=>$contentsecuritypolicy, 'mode'=>'reportonly');
|
||||
$result = $hookmanager->executeHooks('setContentSecurityPolicy', $parameters); // Note that $action and $object may have been modified by some hooks
|
||||
if ($result > 0) {
|
||||
$contentsecuritypolicy = $hookmanager->resPrint; // Replace CSP
|
||||
} else {
|
||||
$contentsecuritypolicy .= $hookmanager->resPrint; // Concat CSP
|
||||
}
|
||||
|
||||
if (!empty($contentsecuritypolicy)) {
|
||||
header("Content-Security-Policy-Report-Only: ".$contentsecuritypolicy);
|
||||
}
|
||||
}
|
||||
|
||||
// Content-Security-Policy
|
||||
if (!defined('WEBSITE_MAIN_SECURITY_FORCECSP')) {
|
||||
// A default security policy that keep usage of js external component like ckeditor, stripe, google, working
|
||||
// For example: to restrict to only local resources, except for css (cloudflare+google), and js (transifex + google tags) and object/iframe (youtube)
|
||||
// default-src 'self'; style-src: https://cdnjs.cloudflare.com https://fonts.googleapis.com; script-src: https://cdn.transifex.com https://www.googletagmanager.com; object-src https://youtube.com; frame-src https://youtube.com; img-src: *;
|
||||
// For example, to restrict everything to itself except img that can be on other servers:
|
||||
// default-src 'self'; img-src *;
|
||||
// Pre-existing site that uses too much js code to fix but wants to ensure resources are loaded only over https and disable plugins:
|
||||
// default-src https: 'unsafe-inline' 'unsafe-eval'; object-src 'none'
|
||||
//
|
||||
// $contentsecuritypolicy = "frame-ancestors 'self'; img-src * data:; font-src *; default-src 'self' 'unsafe-inline' 'unsafe-eval' *.paypal.com *.stripe.com *.google.com *.googleapis.com *.google-analytics.com *.googletagmanager.com;";
|
||||
// $contentsecuritypolicy = "frame-ancestors 'self'; img-src * data:; font-src *; default-src *; script-src 'self' 'unsafe-inline' *.paypal.com *.stripe.com *.google.com *.googleapis.com *.google-analytics.com *.googletagmanager.com; style-src 'self' 'unsafe-inline'; connect-src 'self';";
|
||||
$contentsecuritypolicy = getDolGlobalString('WEBSITE_MAIN_SECURITY_FORCECSP');
|
||||
|
||||
if (!is_object($hookmanager)) {
|
||||
$hookmanager = new HookManager($db);
|
||||
}
|
||||
$hookmanager->initHooks(array("main"));
|
||||
|
||||
$parameters = array('contentsecuritypolicy'=>$contentsecuritypolicy, 'mode'=>'active');
|
||||
$result = $hookmanager->executeHooks('setContentSecurityPolicy', $parameters); // Note that $action and $object may have been modified by some hooks
|
||||
if ($result > 0) {
|
||||
$contentsecuritypolicy = $hookmanager->resPrint; // Replace CSP
|
||||
@ -129,12 +167,6 @@ if (!defined('USEDOLIBARRSERVER') && !defined('USEDOLIBARREDITOR')) {
|
||||
}
|
||||
|
||||
if (!empty($contentsecuritypolicy)) {
|
||||
// For example: to restrict to only local resources, except for css (cloudflare+google), and js (transifex + google tags) and object/iframe (youtube)
|
||||
// default-src 'self'; style-src: https://cdnjs.cloudflare.com https://fonts.googleapis.com; script-src: https://cdn.transifex.com https://www.googletagmanager.com; object-src https://youtube.com; frame-src https://youtube.com; img-src: *;
|
||||
// For example, to restrict everything to itself except img that can be on other servers:
|
||||
// default-src 'self'; img-src *;
|
||||
// Pre-existing site that uses too much js code to fix but wants to ensure resources are loaded only over https and disable plugins:
|
||||
// default-src https: 'unsafe-inline' 'unsafe-eval'; object-src 'none'
|
||||
header("Content-Security-Policy: ".$contentsecuritypolicy);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1171,7 +1171,7 @@ class Don extends CommonObject
|
||||
$return .= '<br><span class="opacitymedium" >'.$langs->trans("Amount").'</span> : <span class="info-box-label amount">'.price($this->amount).'</span>';
|
||||
}
|
||||
if (method_exists($this, 'LibStatut')) {
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->LibStatut($this->labelStatus, 5).'</div>';
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(3).'</div>';
|
||||
}
|
||||
$return .= '</div>';
|
||||
$return .= '</div>';
|
||||
|
||||
@ -5,6 +5,7 @@
|
||||
* Copyright (C) 2016-2021 Ferran Marcet <fmarcet@2byte.es>
|
||||
* Copyright (C) 2019 Nicolas ZABOURI <info@inovea-conseil.com>
|
||||
* Copyright (C) 2020 Thibault FOUCART <support@ptibogxiv.net>
|
||||
* Copyright (C) 2023 Christophe Battarel <christophe@altairis.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
|
||||
@ -72,7 +73,6 @@ $search_datedelivery_end = dol_mktime(23, 59, 59, GETPOST('search_datedelivery_e
|
||||
$search_datereceipt_start = dol_mktime(0, 0, 0, GETPOST('search_datereceipt_startmonth', 'int'), GETPOST('search_datereceipt_startday', 'int'), GETPOST('search_datereceipt_startyear', 'int'));
|
||||
$search_datereceipt_end = dol_mktime(23, 59, 59, GETPOST('search_datereceipt_endmonth', 'int'), GETPOST('search_datereceipt_endday', 'int'), GETPOST('search_datereceipt_endyear', 'int'));
|
||||
$sall = trim((GETPOST('search_all', 'alphanohtml') != '') ?GETPOST('search_all', 'alphanohtml') : GETPOST('sall', 'alphanohtml'));
|
||||
$socid = GETPOST('socid', 'int');
|
||||
$search_user = GETPOST('search_user', 'int');
|
||||
$search_sale = GETPOST('search_sale', 'int');
|
||||
$search_categ_cus = GETPOST("search_categ_cus", 'int');
|
||||
|
||||
@ -2793,7 +2793,7 @@ class ExpenseReport extends CommonObject
|
||||
$return .= '<span class="info-box-label">'.dol_print_date($this->date_fin, 'day').'</span>';
|
||||
}
|
||||
if (method_exists($this, 'getLibStatut')) {
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(5).'</div>';
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(3).'</div>';
|
||||
}
|
||||
$return .= '</div>';
|
||||
$return .= '</div>';
|
||||
|
||||
@ -744,7 +744,7 @@ class PaymentExpenseReport extends CommonObject
|
||||
$return .= '<br><span class="opacitymedium">'.$langs->trans("Amount").'</span> : <span class="info-box-label amount">'.price($this->amount).'</span>';
|
||||
}
|
||||
if (method_exists($this, 'getLibStatut')) {
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(5).'</div>';
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(3).'</div>';
|
||||
}
|
||||
$return .= '</div>';
|
||||
$return .= '</div>';
|
||||
|
||||
@ -1503,7 +1503,7 @@ class Fichinter extends CommonObject
|
||||
$return .= '<br><span class="info-box-label ">'.$langs->trans("Duration").' : '.convertSecondToTime($this->duration, 'allhourmin').'</span>';
|
||||
}
|
||||
if (method_exists($this, 'getLibStatut')) {
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(5).'</div>';
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(3).'</div>';
|
||||
}
|
||||
$return .= '</div>';
|
||||
$return .= '</div>';
|
||||
|
||||
@ -3648,7 +3648,7 @@ class CommandeFournisseur extends CommonOrder
|
||||
$return .= '<br><span class="opacitymedium">'.$langs->trans("Billed").' : </span><span class="info-box-label">'.yn($this->billed).'</span>';
|
||||
}
|
||||
if (method_exists($this, 'getLibStatut')) {
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(5).'</div>';
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(3).'</div>';
|
||||
}
|
||||
$return .= '</div>';
|
||||
$return .= '</div>';
|
||||
|
||||
@ -3307,7 +3307,7 @@ class FactureFournisseur extends CommonInvoice
|
||||
$return .= '<br><span class="opacitymedium">'.$langs->trans("AmountHT").'</span> : <span class="info-box-label amount">'.price($this->total_ht).'</span>';
|
||||
}
|
||||
if (method_exists($this, 'getLibStatut')) {
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(5).'</div>';
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(3).'</div>';
|
||||
}
|
||||
$return .= '</div>';
|
||||
$return .= '</div>';
|
||||
|
||||
@ -2493,7 +2493,7 @@ class Holiday extends CommonObject
|
||||
$return .= '<span class="info-box-label">'.dol_print_date($this->date_fin, 'day').'</span>';
|
||||
}
|
||||
if (method_exists($this, 'getLibStatut')) {
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(5).'</div>';
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(3).'</div>';
|
||||
}
|
||||
$return .= '</div>';
|
||||
$return .= '</div>';
|
||||
|
||||
@ -1084,7 +1084,7 @@ class Evaluation extends CommonObject
|
||||
}
|
||||
|
||||
if (method_exists($this, 'getLibStatut')) {
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(5).'</div>';
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(3).'</div>';
|
||||
}
|
||||
$return .= '</span>';
|
||||
$return .= '</div>';
|
||||
|
||||
@ -333,7 +333,7 @@ class TCPDI extends FPDF_TPL {
|
||||
break;
|
||||
}
|
||||
}
|
||||
} elseif ($tpl['x'] != 0 || $tpl['y'] != 0) {
|
||||
} elseif (!empty($tpl['x']) || !empty($tpl['y'])) {
|
||||
$tx = -$tpl['x'] * 2;
|
||||
$ty = $tpl['y'] * 2;
|
||||
}
|
||||
|
||||
@ -162,7 +162,7 @@ if ($rss) {
|
||||
$result = build_rssfile($format, $title, $desc, $eventarray, $outputfiletmp, '', $website->virtualhost.'/wrapper.php?rss=1'.($l ? '&l='.$l : ''), $l);
|
||||
|
||||
if ($result >= 0) {
|
||||
if (dol_move($outputfiletmp, $outputfile, 0, 1)) {
|
||||
if (dol_move($outputfiletmp, $outputfile, 0, 1, 0, 0)) {
|
||||
$result = 1;
|
||||
} else {
|
||||
$error = 'Failed to rename '.$outputfiletmp.' into '.$outputfile;
|
||||
|
||||
@ -162,7 +162,7 @@ if ($rss) {
|
||||
$result = build_rssfile($format, $title, $desc, $eventarray, $outputfiletmp, '', $website->virtualhost.'/wrapper.php?rss=1'.($l ? '&l='.$l : ''), $l);
|
||||
|
||||
if ($result >= 0) {
|
||||
if (dol_move($outputfiletmp, $outputfile, 0, 1)) {
|
||||
if (dol_move($outputfiletmp, $outputfile, 0, 1, 0, 0)) {
|
||||
$result = 1;
|
||||
} else {
|
||||
$error = 'Failed to rename '.$outputfiletmp.' into '.$outputfile;
|
||||
|
||||
@ -162,7 +162,7 @@ if ($rss) {
|
||||
$result = build_rssfile($format, $title, $desc, $eventarray, $outputfiletmp, '', $website->virtualhost.'/wrapper.php?rss=1'.($l ? '&l='.$l : ''), $l);
|
||||
|
||||
if ($result >= 0) {
|
||||
if (dol_move($outputfiletmp, $outputfile, 0, 1)) {
|
||||
if (dol_move($outputfiletmp, $outputfile, 0, 1, 0, 0)) {
|
||||
$result = 1;
|
||||
} else {
|
||||
$error = 'Failed to rename '.$outputfiletmp.' into '.$outputfile;
|
||||
|
||||
@ -162,7 +162,7 @@ if ($rss) {
|
||||
$result = build_rssfile($format, $title, $desc, $eventarray, $outputfiletmp, '', $website->virtualhost.'/wrapper.php?rss=1'.($l ? '&l='.$l : ''), $l);
|
||||
|
||||
if ($result >= 0) {
|
||||
if (dol_move($outputfiletmp, $outputfile, 0, 1)) {
|
||||
if (dol_move($outputfiletmp, $outputfile, 0, 1, 0, 0)) {
|
||||
$result = 1;
|
||||
} else {
|
||||
$error = 'Failed to rename '.$outputfiletmp.' into '.$outputfile;
|
||||
|
||||
@ -162,7 +162,7 @@ if ($rss) {
|
||||
$result = build_rssfile($format, $title, $desc, $eventarray, $outputfiletmp, '', $website->virtualhost.'/wrapper.php?rss=1'.($l ? '&l='.$l : ''), $l);
|
||||
|
||||
if ($result >= 0) {
|
||||
if (dol_move($outputfiletmp, $outputfile, 0, 1)) {
|
||||
if (dol_move($outputfiletmp, $outputfile, 0, 1, 0, 0)) {
|
||||
$result = 1;
|
||||
} else {
|
||||
$error = 'Failed to rename '.$outputfiletmp.' into '.$outputfile;
|
||||
|
||||
@ -143,7 +143,7 @@ if ($rss) {
|
||||
$result = build_rssfile($format, $title, $desc, $eventarray, $outputfiletmp, '', $website->virtualhost.'/wrapper.php?rss=1'.($l ? '&l='.$l : ''), $l);
|
||||
|
||||
if ($result >= 0) {
|
||||
if (dol_move($outputfiletmp, $outputfile, 0, 1)) $result = 1;
|
||||
if (dol_move($outputfiletmp, $outputfile, 0, 1, 0, 0)) $result = 1;
|
||||
else {
|
||||
$error = 'Failed to rename '.$outputfiletmp.' into '.$outputfile;
|
||||
dol_syslog("build_exportfile ".$error, LOG_ERR);
|
||||
|
||||
@ -43,9 +43,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 ('PROPAL_MODIFY','Customer proposal modified','Executed when a customer proposal is modified','propal',2);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_SENTBYMAIL','Commercial proposal sent by mail','Executed when a commercial proposal is sent by mail','propal',3);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_CLOSE_SIGNED','Customer proposal closed signed','Executed when a customer proposal is closed signed','propal',2);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_CLOSE_SIGNED_WEB','Customer proposal closed signed on portal','Executed when a customer proposal is closed signed on portal','propal',2);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_CLOSE_REFUSED','Customer proposal closed refused','Executed when a customer proposal is closed refused','propal',2);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_CLOSE_REFUSED_WEB','Customer proposal closed refused on portal','Executed when a customer proposal is closed refused on portal','propal',2);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_CLASSIFY_BILLED','Customer proposal set billed','Executed when a customer proposal is set to billed','propal',2);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_DELETE','Customer proposal deleted','Executed when a customer proposal is deleted','propal',2);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_VALIDATE','Customer order validate','Executed when a customer order is validated','commande',4);
|
||||
@ -153,6 +151,8 @@ insert into llx_c_action_trigger (code,label,description,elementtype,rang) value
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('CONTACT_MODIFY','Contact address update','Executed when a contact is updated','contact',51);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('CONTACT_SENTBYMAIL','Mails sent from third party card','Executed when you send email from contact address record','contact',52);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('CONTACT_DELETE','Contact address deleted','Executed when a contact is deleted','contact',53);
|
||||
|
||||
-- recruitment module
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('RECRUITMENTJOBPOSITION_CREATE','Job created','Executed when a job is created','recruitment',7500);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('RECRUITMENTJOBPOSITION_MODIFY','Job modified','Executed when a job is modified','recruitment',7502);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('RECRUITMENTJOBPOSITION_SENTBYMAIL','Mails sent from job record','Executed when you send email from job record','recruitment',7504);
|
||||
@ -181,3 +181,10 @@ insert into llx_c_action_trigger (code,label,description,elementtype,rang) value
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILLREC_MODIFY','Template invoices update','Executed when a Template invoices is updated','facturerec',901);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILLREC_DELETE','Template invoices deleted','Executed when a Template invoices is deleted','facturerec',902);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILLREC_AUTOCREATEBILL','Template invoices use to create invoices with auto batch','Executed when a Template invoices is use to create invoice with auto batch','facturerec',903);
|
||||
|
||||
-- partnership module
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PARTNERSHIP_CREATE','Partnership created','Executed when a partnership is created','partnership',58000);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PARTNERSHIP_MODIFY','Partnership modified','Executed when a partnership is modified','partnership',58002);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PARTNERSHIP_SENTBYMAIL','Mails sent from partnership file','Executed when you send email from partnership file','partnership',58004);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PARTNERSHIP_DELETE','Partnership deleted','Executed when a partnership is deleted','partnership',58006);
|
||||
|
||||
|
||||
@ -64,6 +64,7 @@ ALTER TABLE llx_actioncomm ADD INDEX idx_actioncomm_percent (percent);
|
||||
|
||||
UPDATE llx_c_paiement SET code = 'BANCON' WHERE code = 'BAN' AND libelle = 'Bancontact';
|
||||
|
||||
ALTER TABLE llx_partnership DROP FOREIGN KEY llx_partnership_fk_user_creat;
|
||||
-- VMYSQL4.3 ALTER TABLE llx_partnership MODIFY COLUMN fk_user_creat integer NULL;
|
||||
-- VPGSQL8.2 ALTER TABLE llx_partnership ALTER COLUMN fk_user_creat DROP NOT NULL;
|
||||
|
||||
@ -241,9 +242,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 ('PROPAL_MODIFY','Customer proposal modified','Executed when a customer proposal is modified','propal',2);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_SENTBYMAIL','Commercial proposal sent by mail','Executed when a commercial proposal is sent by mail','propal',3);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_CLOSE_SIGNED','Customer proposal closed signed','Executed when a customer proposal is closed signed','propal',2);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_CLOSE_SIGNED_WEB','Customer proposal closed signed on portal','Executed when a customer proposal is closed signed on portal','propal',2);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_CLOSE_REFUSED','Customer proposal closed refused','Executed when a customer proposal is closed refused','propal',2);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_CLOSE_REFUSED_WEB','Customer proposal closed refused on portal','Executed when a customer proposal is closed refused on portal','propal',2);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_CLASSIFY_BILLED','Customer proposal set billed','Executed when a customer proposal is set to billed','propal',2);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_DELETE','Customer proposal deleted','Executed when a customer proposal is deleted','propal',2);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_VALIDATE','Customer order validate','Executed when a customer order is validated','commande',4);
|
||||
|
||||
@ -45,6 +45,12 @@ ALTER TABLE llx_facture_fourn_det MODIFY COLUMN ref varchar(128);
|
||||
|
||||
-- v18
|
||||
|
||||
ALTER TABLE llx_notify_def ADD COLUMN email varchar(255);
|
||||
ALTER TABLE llx_notify_def ADD COLUMN threshold double(24,8);
|
||||
ALTER TABLE llx_notify_def ADD COLUMN context varchar(128);
|
||||
|
||||
ALTER TABLE llx_c_action_trigger ADD COLUMN contexts varchar(255) NULL;
|
||||
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROJECT_CLOSE','Project closed','Executed when a project is closed','project',145);
|
||||
|
||||
-- amount was removed in v12
|
||||
@ -73,6 +79,7 @@ ALTER TABLE llx_bank_account ADD COLUMN owner_zip varchar(25);
|
||||
ALTER TABLE llx_bank_account ADD COLUMN owner_town varchar(50);
|
||||
ALTER TABLE llx_bank_account ADD COLUMN owner_country_id integer DEFAULT NULL;
|
||||
|
||||
ALTER TABLE llx_prelevement_bons ADD COLUMN fk_bank_account integer DEFAULT NULL;
|
||||
|
||||
ALTER TABLE llx_supplier_proposal ADD UNIQUE INDEX uk_supplier_proposal_ref (ref, entity);
|
||||
|
||||
|
||||
@ -24,6 +24,7 @@ create table llx_c_action_trigger
|
||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||
elementtype varchar(64) NOT NULL,
|
||||
code varchar(128) NOT NULL,
|
||||
contexts varchar(255) NULL, -- list of possible contexts when ther is different context of trigger
|
||||
label varchar(128) NOT NULL,
|
||||
description varchar(255),
|
||||
rang integer DEFAULT 0
|
||||
|
||||
@ -27,5 +27,8 @@ create table llx_notify_def
|
||||
fk_soc integer,
|
||||
fk_contact integer,
|
||||
fk_user integer,
|
||||
email varchar(255), -- for fixed email notif
|
||||
threshold double(24,8), -- threshold on an amount to qualify the notification
|
||||
context varchar(128), -- only for a particular contet
|
||||
type varchar(16) DEFAULT 'email' -- 'browser', 'email', 'sms', 'webservice', ...
|
||||
)ENGINE=innodb;
|
||||
|
||||
@ -20,24 +20,25 @@
|
||||
--
|
||||
-- Direct debit or credit orders
|
||||
--
|
||||
-- statut 0 : draft
|
||||
-- statut 1 : sent to the bank
|
||||
-- statut 2 : paid
|
||||
--
|
||||
create table llx_prelevement_bons
|
||||
(
|
||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||
type varchar(16) DEFAULT 'debit-order', -- 'debit-order' or 'bank-transfer'
|
||||
ref varchar(12), -- reference
|
||||
entity integer DEFAULT 1 NOT NULL, -- multi company id
|
||||
datec datetime, -- date de creation
|
||||
amount double(24,8) DEFAULT 0, -- montant total du prelevement
|
||||
statut smallint DEFAULT 0, -- statut
|
||||
credite smallint DEFAULT 0, -- indique si le prelevement a ete credite
|
||||
note text,
|
||||
date_trans datetime, -- date de transmission a la banque
|
||||
method_trans smallint, -- methode de transmission
|
||||
fk_user_trans integer, -- user qui a effectue la transmission
|
||||
date_credit datetime, -- date de credit sur le compte
|
||||
fk_user_credit integer -- user qui a remonte l'info de credit
|
||||
|
||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||
type varchar(16) DEFAULT 'debit-order', -- 'debit-order' or 'bank-transfer'
|
||||
ref varchar(12), -- reference
|
||||
entity integer DEFAULT 1 NOT NULL, -- multi company id
|
||||
datec datetime, -- date de creation
|
||||
amount double(24,8) DEFAULT 0, -- montant total du prelevement
|
||||
statut smallint DEFAULT 0, -- statut
|
||||
credite smallint DEFAULT 0, -- indique si le prelevement a ete credite
|
||||
note text,
|
||||
date_trans datetime, -- date de transmission a la banque
|
||||
method_trans smallint, -- methode de transmission
|
||||
fk_user_trans integer, -- user qui a effectue la transmission
|
||||
date_credit datetime, -- date de credit sur le compte
|
||||
fk_user_credit integer, -- user qui a remonte l'info de credit
|
||||
fk_bank_account integer DEFAULT NULL
|
||||
)ENGINE=innodb;
|
||||
|
||||
@ -1145,7 +1145,7 @@ class KnowledgeRecord extends CommonObject
|
||||
$return .= '<span class="info-box-label">'.dolGetFirstLineOfText($this->question).'</span>';
|
||||
}
|
||||
if (method_exists($this, 'getLibStatut')) {
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(5).'</div>';
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(3).'</div>';
|
||||
}
|
||||
$return .= '</div>';
|
||||
$return .= '</div>';
|
||||
|
||||
@ -167,9 +167,9 @@ ACCOUNTANCY_COMBO_FOR_AUX=تمكين قائمة التحرير والسرد لل
|
||||
ACCOUNTING_DATE_START_BINDING=تحديد موعد لبدء الربط والتحويل في المحاسبة. بعد هذا التاريخ ، لن يتم تحويل المعاملات إلى المحاسبة.
|
||||
ACCOUNTING_DEFAULT_PERIOD_ON_TRANSFER=في تحويل المحاسبة ، ما هي الفترة المحددة افتراضيا
|
||||
|
||||
ACCOUNTING_SELL_JOURNAL=المبيعات في اليومية العامة (المبيعات و المرتجعات)
|
||||
ACCOUNTING_PURCHASE_JOURNAL=المشتريات في اليومية العامة (المشتريات و المرتجعات)
|
||||
ACCOUNTING_BANK_JOURNAL=النقدي اليومية ( المقبوضات و المدفوعات)
|
||||
ACCOUNTING_SELL_JOURNAL=Sales journal - sales and returns
|
||||
ACCOUNTING_PURCHASE_JOURNAL=Purchase journal - purchase and returns
|
||||
ACCOUNTING_BANK_JOURNAL=Cash journal - receipts and disbursements
|
||||
ACCOUNTING_EXPENSEREPORT_JOURNAL=دفتر تقرير المصروف اليومي
|
||||
ACCOUNTING_MISCELLANEOUS_JOURNAL=اليومية العامة
|
||||
ACCOUNTING_HAS_NEW_JOURNAL=له دفتر يوميات جديد
|
||||
@ -238,6 +238,7 @@ ConfirmDeleteMvt=سيؤدي هذا إلى حذف جميع سطور المحاس
|
||||
ConfirmDeleteMvtPartial=سيؤدي هذا إلى حذف المعاملة من المحاسبة (سيتم حذف جميع الأسطر المتعلقة بنفس المعاملة)
|
||||
FinanceJournal=دفتر المالية اليومي
|
||||
ExpenseReportsJournal=دفتر تقارير المصاريف
|
||||
InventoryJournal=المخزون في اليومية
|
||||
DescFinanceJournal=دفتر المالية اليومي المتضمن لجميع الدفعات عن طريق الحساب المصرفي
|
||||
DescJournalOnlyBindedVisible=هذه طريقة عرض للسجل مرتبطة بالحساب ويمكن تسجيلها في دفتر اليوميات و الأستاذ.
|
||||
VATAccountNotDefined=حساب ضريبة القيمة المضافة غير محدد
|
||||
|
||||
@ -145,6 +145,7 @@ Box=بريمج
|
||||
Boxes=بريمجات
|
||||
MaxNbOfLinesForBoxes=الحد الأعلى لعدد أسطر البريمجات
|
||||
AllWidgetsWereEnabled=جميع البريمجات المتاحة ممكنة
|
||||
WidgetAvailable=Widget available
|
||||
PositionByDefault=الطلبية الإفتراضية
|
||||
Position=الوضع
|
||||
MenusDesc=يقوم مديرو القائمة بتعيين محتوى شريطي القائمة (الأفقي والعمودي).
|
||||
@ -374,7 +375,7 @@ DoTestSendHTML=اختبار ارسال هتمل
|
||||
ErrorCantUseRazIfNoYearInMask=خطأ، لا يمكن استخدام الخيار @ لإعادة تعيين عداد سنويا إذا تسلسل {} أو {yyyy إنهاء س س س س} ليس في قناع.
|
||||
ErrorCantUseRazInStartedYearIfNoYearMonthInMask=خطأ ، لا يمكن للمستخدم الخيار في حال تسلسل @ (ذ ذ م م)) ((سنة أو ملم)) (لا تخفي.
|
||||
UMask=معلمة جديدة UMask صورة يونيكس / لينكس / بي إس دي نظام الملفات.
|
||||
UMaskExplanation=تسمح لك هذه المعلمة لتحديد الاذونات التي حددها تقصير من الملفات التي أنشأتها Dolibarr على الخادم (خلال تحميلها على سبيل المثال). <br> يجب أن يكون ثمانية القيمة (على سبيل المثال ، 0666 وسائل القراءة والكتابة للجميع). <br> م شمال شرق paramètre سرت sous الامم المتحدة لتقييم الأداء ويندوز serveur.
|
||||
UMaskExplanation=This parameter allow you to define permissions set by default on files created by Dolibarr on server (during upload for example).<br>It must be the octal value (for example, 0666 means read and write for everyone.). Recommended value is 0600 or 0660<br>This parameter is useless on a Windows server.
|
||||
SeeWikiForAllTeam=قم بإلقاء نظرة على صفحة Wiki للحصول على قائمة بالمساهمين ومنظمتهم
|
||||
UseACacheDelay= التخزين المؤقت للتأخير في الرد على الصادرات ثانية (0 فارغة أو لا مخبأ)
|
||||
DisableLinkToHelpCenter=إخفاء الارتباط "<b> بحاجة إلى مساعدة أو دعم </b>" في صفحة تسجيل الدخول
|
||||
@ -663,7 +664,7 @@ Module2900Desc=GeoIP التحويلات Maxmind القدرات
|
||||
Module3200Name=المحفوظات غير القابلة للتغيير
|
||||
Module3200Desc=تمكين سجل غير قابل للتغيير لأحداث العمل. يتم أرشفة الأحداث في الوقت الحقيقي. السجل هو جدول للقراءة فقط للأحداث المتسلسلة التي يمكن تصديرها. قد تكون هذه الوحدة إلزامية لبعض البلدان.
|
||||
Module3300Name=Module Builder
|
||||
Module3200Desc=تمكين سجل غير قابل للتغيير لأحداث العمل. يتم أرشفة الأحداث في الوقت الحقيقي. السجل هو جدول للقراءة فقط للأحداث المتسلسلة التي يمكن تصديرها. قد تكون هذه الوحدة إلزامية لبعض البلدان.
|
||||
Module3300Desc=A RAD (Rapid Application Development - low-code and no-code) tool to help developers or advanced users to build their own module/application.
|
||||
Module3400Name=الشبكات الاجتماعية
|
||||
Module3400Desc=قم بتمكين حقول الشبكات الاجتماعية في عناوين وعناوين الأطراف الثالثة (سكايب ، تويتر ، فيسبوك ، ...).
|
||||
Module4000Name=HRM
|
||||
@ -2299,7 +2300,7 @@ ExportUseLowMemoryMode=استخدم وضع ذاكرة منخفضة
|
||||
ExportUseLowMemoryModeHelp=Use the low memory mode to generate the dump file (compression is done through a pipe instead of into the PHP memory). This method does not allow to check that the file is complete and error message can't be reported if it fails. Use it if you experience not enough memory errors.
|
||||
|
||||
ModuleWebhookName = الويب هوك
|
||||
ModuleWebhookDesc = واجهة للقبض على مشغلات dolibarr وإرسالها إلى عنوان URL
|
||||
ModuleWebhookDesc = Interface to catch dolibarr triggers and send data of the event to an URL
|
||||
WebhookSetup = إعداد Webhook
|
||||
Settings = الإعدادات
|
||||
WebhookSetupPage = صفحة إعداد Webhook
|
||||
@ -2372,3 +2373,6 @@ WarningModuleHasChangedLastVersionCheckParameter=Warning: the module %s has set
|
||||
WarningModuleHasChangedSecurityCsrfParameter=Warning: the module %s has disabled the CSRF security of your instance. This action is suspect and your installation may no more be secured. Please contact the author of the module for explanation.
|
||||
EMailsInGoingDesc=Incoming emails are managed by the module %s. You must enable and configure it if you need to support ingoing emails.
|
||||
MAIN_IMAP_USE_PHPIMAP=Use the PHP-IMAP library for IMAP instead of native PHP IMAP. This also allows the use of an OAuth2 connection for IMAP (module OAuth must also be activated).
|
||||
MAIN_CHECKBOX_LEFT_COLUMN=Show the column for field and line selection on the left (on the right by default)
|
||||
|
||||
CSSPage=CSS Style
|
||||
|
||||
@ -50,7 +50,7 @@ UseDateWithoutHourOnFichinter=يخفي الساعات والدقائق خارج
|
||||
InterventionStatistics=إحصائيات التدخلات
|
||||
NbOfinterventions=عدد بطاقات التدخل
|
||||
NumberOfInterventionsByMonth=عدد بطاقات التدخل بالشهر (تاريخ المصادقة)
|
||||
AmountOfInteventionNotIncludedByDefault=لا يتم تضمين مقدار التدخل بشكل افتراضي في الربح (في معظم الحالات ، يتم استخدام الجداول الزمنية لحساب الوقت المنقضي). أضف الخيار PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT إلى 1 في المنزل-الإعداد الآخر لتضمينها.
|
||||
AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). You can use PROJECT_ELEMENTS_FOR_ADD_MARGIN and PROJECT_ELEMENTS_FOR_MINUS_MARGIN option into home-setup-other to complete list of element included into profit.
|
||||
InterId=تدخل معرف
|
||||
InterRef=تدخل المرجع.
|
||||
InterDateCreation=تدخل تاريخ الإنشاء
|
||||
|
||||
@ -91,7 +91,7 @@ MailingModuleDescContactsByFunction=Contacts by position
|
||||
MailingModuleDescEmailsFromFile=رسائل البريد الإلكتروني من الملف
|
||||
MailingModuleDescEmailsFromUser=إدخال رسائل البريد الإلكتروني من قبل المستخدم
|
||||
MailingModuleDescDolibarrUsers=المستخدمون الذين لديهم رسائل بريد إلكتروني
|
||||
MailingModuleDescThirdPartiesByCategories=الأطراف الثالثة (حسب الفئات)
|
||||
MailingModuleDescThirdPartiesByCategories=أطراف ثالثة
|
||||
SendingFromWebInterfaceIsNotAllowed=الإرسال من واجهة الويب غير مسموح به.
|
||||
EmailCollectorFilterDesc=يجب أن تتطابق جميع المرشحات حتى يتم جمع بريد إلكتروني
|
||||
|
||||
@ -179,3 +179,4 @@ RecordCreatedByEmailCollector=السجل الذي تم إنشاؤه بواسطة
|
||||
DefaultBlacklistMailingStatus=القيمة الافتراضية للحقل "%s" عند تكوين جهة اتصال جديدة
|
||||
DefaultStatusEmptyMandatory=فارغ ولكنه إلزامي
|
||||
WarningLimitSendByDay=تحذير: إعداد أو عقد المثيل الخاص بك يحد من عدد رسائل البريد الإلكتروني يوميًا إلى <b> %s </b>. قد تؤدي محاولة إرسال المزيد إلى إبطاء المثيل أو تعليقه. يرجى الاتصال بالدعم الخاص بك إذا كنت بحاجة إلى حصة أعلى.
|
||||
NoMoreRecipientToSendTo=No more recipient to send the email to
|
||||
|
||||
@ -186,7 +186,7 @@ CreatedBy=تم الإنشاء بواسطة
|
||||
NewTicket=تذكرة جديدة
|
||||
SubjectAnswerToTicket=إجابة التذكرة
|
||||
TicketTypeRequest=نوع الطلب
|
||||
TicketCategory=تصنيف التذكرة
|
||||
TicketCategory=Ticket group
|
||||
SeeTicket=عرض التذكرة
|
||||
TicketMarkedAsRead=تم تحديد التذكرة كمقروءة
|
||||
TicketReadOn=تمت القراءة في
|
||||
|
||||
@ -145,6 +145,7 @@ Box=Джаджа
|
||||
Boxes=Джаджи
|
||||
MaxNbOfLinesForBoxes=Максимален брой редове за джаджи
|
||||
AllWidgetsWereEnabled=Всички налични джаджи са активирани
|
||||
WidgetAvailable=Widget available
|
||||
PositionByDefault=Позиция по подразбиране
|
||||
Position=Позиция
|
||||
MenusDesc=Меню мениджърите определят съдържанието на двете ленти с менюта (хоризонтална и вертикална).
|
||||
@ -374,7 +375,7 @@ DoTestSendHTML=Тестово изпращане на HTML
|
||||
ErrorCantUseRazIfNoYearInMask=Грешка, не може да се използва опция @, за да нулирате брояча всяка година, ако последователността {yy} или {yyyy} не е в маската.
|
||||
ErrorCantUseRazInStartedYearIfNoYearMonthInMask=Грешка, не може да се използва опция @, ако последователността {yy}{mm} или {yyyy}{mm} не са в маската.
|
||||
UMask=UMask параметър за нови файлове на Unix / Linux / BSD / Mac файлова система.
|
||||
UMaskExplanation=Този параметър ви позволява да дефинирате права, зададени по подразбиране на файлове, които са създадени от Dolibarr на сървъра (например при качване). <br> Необходимо е да бъде в осмична стойност (например 0666 означава четене и запис за всички). <br> Този параметър е безполезен на Windows сървър.
|
||||
UMaskExplanation=This parameter allow you to define permissions set by default on files created by Dolibarr on server (during upload for example).<br>It must be the octal value (for example, 0666 means read and write for everyone.). Recommended value is 0600 or 0660<br>This parameter is useless on a Windows server.
|
||||
SeeWikiForAllTeam=Разгледайте страницата на Wiki за списък на сътрудниците и тяхната организация
|
||||
UseACacheDelay= Забавяне при кеширане на отговора за експорт в секунди (0 или празно, за да не се използва кеш)
|
||||
DisableLinkToHelpCenter=Hide the link "<b>Need help or support</b>" on the login page
|
||||
@ -663,7 +664,7 @@ Module2900Desc=GeoIP Maxmind възможности за преобразува
|
||||
Module3200Name=Неизменими архиви
|
||||
Module3200Desc=Непроменлив дневник на бизнес събития. Събитията се архивират в реално време. Дневникът е таблица, достъпна единствено за четене, която съдържа последователни събития, които могат да бъдат експортирани. Този модул може да е задължителен за някои страни.
|
||||
Module3300Name=Module Builder
|
||||
Module3200Desc=Непроменлив дневник на бизнес събития. Събитията се архивират в реално време. Дневникът е таблица, достъпна единствено за четене, която съдържа последователни събития, които могат да бъдат експортирани. Този модул може да е задължителен за някои страни.
|
||||
Module3300Desc=A RAD (Rapid Application Development - low-code and no-code) tool to help developers or advanced users to build their own module/application.
|
||||
Module3400Name=Социални мрежи
|
||||
Module3400Desc=Enable Social Networks fields into third parties and addresses (skype, twitter, facebook, ...).
|
||||
Module4000Name=ЧР
|
||||
@ -2299,7 +2300,7 @@ ExportUseLowMemoryMode=Use a low memory mode
|
||||
ExportUseLowMemoryModeHelp=Use the low memory mode to generate the dump file (compression is done through a pipe instead of into the PHP memory). This method does not allow to check that the file is complete and error message can't be reported if it fails. Use it if you experience not enough memory errors.
|
||||
|
||||
ModuleWebhookName = Webhook
|
||||
ModuleWebhookDesc = Interface to catch dolibarr triggers and send it to an URL
|
||||
ModuleWebhookDesc = Interface to catch dolibarr triggers and send data of the event to an URL
|
||||
WebhookSetup = Webhook setup
|
||||
Settings = Настройки
|
||||
WebhookSetupPage = Webhook setup page
|
||||
@ -2372,3 +2373,6 @@ WarningModuleHasChangedLastVersionCheckParameter=Warning: the module %s has set
|
||||
WarningModuleHasChangedSecurityCsrfParameter=Warning: the module %s has disabled the CSRF security of your instance. This action is suspect and your installation may no more be secured. Please contact the author of the module for explanation.
|
||||
EMailsInGoingDesc=Incoming emails are managed by the module %s. You must enable and configure it if you need to support ingoing emails.
|
||||
MAIN_IMAP_USE_PHPIMAP=Use the PHP-IMAP library for IMAP instead of native PHP IMAP. This also allows the use of an OAuth2 connection for IMAP (module OAuth must also be activated).
|
||||
MAIN_CHECKBOX_LEFT_COLUMN=Show the column for field and line selection on the left (on the right by default)
|
||||
|
||||
CSSPage=CSS Style
|
||||
|
||||
@ -50,7 +50,7 @@ UseDateWithoutHourOnFichinter=Скриване на часовете и мину
|
||||
InterventionStatistics=Статистика на интервенции
|
||||
NbOfinterventions=Брой интервенции
|
||||
NumberOfInterventionsByMonth=Брой интервенции по месец (по дата на валидиране)
|
||||
AmountOfInteventionNotIncludedByDefault=Общата продължителност на интервенцията не е включена по подразбиране в печалбата (в повечето случаи за отчитане на времето се използват графиците за отделно време). Добавете опцията PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT със стойност 1 в Начало -> Настройки -> Други настройки, за да я включите.
|
||||
AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). You can use PROJECT_ELEMENTS_FOR_ADD_MARGIN and PROJECT_ELEMENTS_FOR_MINUS_MARGIN option into home-setup-other to complete list of element included into profit.
|
||||
InterId=Идентификатор на интервенция
|
||||
InterRef=Съгласно интервенция №
|
||||
InterDateCreation=Дата на създаване на интервенцията
|
||||
@ -66,3 +66,7 @@ RepeatableIntervention=Шаблон на интервенция
|
||||
ToCreateAPredefinedIntervention=За да създадете предварително определена или повтаряща се интервенция, създайте интервенция и я превърнете в шаблон за интервенция.
|
||||
ConfirmReopenIntervention=Are you sure you want to open back the intervention <b>%s</b>?
|
||||
GenerateInter=Generate intervention
|
||||
FichinterNoContractLinked=Intervention %s has been created without a linked contract.
|
||||
ErrorFicheinterCompanyDoesNotExist=Company does not exist. Intervention has not been created.
|
||||
NextDateToIntervention=Date for next intervention generation
|
||||
NoIntervention=No intervention
|
||||
|
||||
@ -91,7 +91,7 @@ MailingModuleDescContactsByFunction=Контакти с длъжност
|
||||
MailingModuleDescEmailsFromFile=Имейли от файл
|
||||
MailingModuleDescEmailsFromUser=Имейли, въведени от потребител
|
||||
MailingModuleDescDolibarrUsers=Потребители с имейли
|
||||
MailingModuleDescThirdPartiesByCategories=Контрагенти (с категории)
|
||||
MailingModuleDescThirdPartiesByCategories=Контрагенти
|
||||
SendingFromWebInterfaceIsNotAllowed=Изпращането от уеб интерфейса не е позволено.
|
||||
EmailCollectorFilterDesc=All filters must match to have an email being collected
|
||||
|
||||
@ -179,3 +179,4 @@ RecordCreatedByEmailCollector=Record created by the Email Collector %s from emai
|
||||
DefaultBlacklistMailingStatus=Default value for field '%s' when creating a new contact
|
||||
DefaultStatusEmptyMandatory=Empty but mandatory
|
||||
WarningLimitSendByDay=WARNING: The setup or contract of your instance limits your number of emails per day to <b>%s</b>. Trying to send more may result in having your instance slow down or suspended. Please contact your support if you need a higher quota.
|
||||
NoMoreRecipientToSendTo=No more recipient to send the email to
|
||||
|
||||
@ -91,7 +91,7 @@ MailingModuleDescContactsByFunction=Contacts by position
|
||||
MailingModuleDescEmailsFromFile=Emails from file
|
||||
MailingModuleDescEmailsFromUser=Emails input by user
|
||||
MailingModuleDescDolibarrUsers=Users with Emails
|
||||
MailingModuleDescThirdPartiesByCategories=Third parties (by categories)
|
||||
MailingModuleDescThirdPartiesByCategories=Subjekti
|
||||
SendingFromWebInterfaceIsNotAllowed=Sending from web interface is not allowed.
|
||||
EmailCollectorFilterDesc=All filters must match to have an email being collected
|
||||
|
||||
@ -179,3 +179,4 @@ RecordCreatedByEmailCollector=Record created by the Email Collector %s from emai
|
||||
DefaultBlacklistMailingStatus=Default value for field '%s' when creating a new contact
|
||||
DefaultStatusEmptyMandatory=Empty but mandatory
|
||||
WarningLimitSendByDay=WARNING: The setup or contract of your instance limits your number of emails per day to <b>%s</b>. Trying to send more may result in having your instance slow down or suspended. Please contact your support if you need a higher quota.
|
||||
NoMoreRecipientToSendTo=No more recipient to send the email to
|
||||
|
||||
@ -95,13 +95,13 @@ ChangeAndLoad=Canviar i carregar
|
||||
Addanaccount=Afegir un compte comptable
|
||||
AccountAccounting=Compte comptable
|
||||
AccountAccountingShort=Compte
|
||||
SubledgerAccount=Subcompte comptable
|
||||
SubledgerAccountLabel=Nom del compte del llibre major
|
||||
SubledgerAccount=Compte de subllibre
|
||||
SubledgerAccountLabel=Nom del compte de subllibre
|
||||
ShowAccountingAccount=Mostrar diari de comptes
|
||||
ShowAccountingJournal=Mostrar diari comptable
|
||||
ShowAccountingAccountInLedger=Mostra el compte comptable al Llibre major
|
||||
ShowAccountingAccountInJournals=Mostra el compte comptable als diaris
|
||||
DataUsedToSuggestAccount=Data used to suggest account
|
||||
DataUsedToSuggestAccount=Dades utilitzades per a suggerir un compte
|
||||
AccountAccountingSuggest=Compte suggerit
|
||||
MenuDefaultAccounts=Comptes per defecte
|
||||
MenuBankAccounts=Comptes bancaris
|
||||
@ -125,7 +125,7 @@ UpdateMvts=Modificació d'una transacció
|
||||
ValidTransaction=Valida l'assentament
|
||||
WriteBookKeeping=Registrar transaccions en comptabilitat
|
||||
Bookkeeping=Llibre major
|
||||
BookkeepingSubAccount=Subcompte
|
||||
BookkeepingSubAccount=Subquadern
|
||||
AccountBalance=Compte saldo
|
||||
AccountBalanceSubAccount=Saldo de subcomptes
|
||||
ObjectsRef=Referència de l'objecte origen
|
||||
@ -167,9 +167,9 @@ ACCOUNTANCY_COMBO_FOR_AUX=Activa la llista combinada per a un compte subsidiari
|
||||
ACCOUNTING_DATE_START_BINDING=Definiu una data per a començar la vinculació i transferència a la comptabilitat. Per sota d’aquesta data, les transaccions no es transferiran a la comptabilitat.
|
||||
ACCOUNTING_DEFAULT_PERIOD_ON_TRANSFER=En la transferència comptable, quin és el període seleccionat per defecte
|
||||
|
||||
ACCOUNTING_SELL_JOURNAL=Diari de vendes (vendes i devolucions)
|
||||
ACCOUNTING_PURCHASE_JOURNAL=Diari de compres (compres i devolucions)
|
||||
ACCOUNTING_BANK_JOURNAL=Diari d'efectiu (entrades i desemborsaments)
|
||||
ACCOUNTING_SELL_JOURNAL=Diari de vendes: vendes i devolucions
|
||||
ACCOUNTING_PURCHASE_JOURNAL=Diari de compres: compres i devolucions
|
||||
ACCOUNTING_BANK_JOURNAL=Diari d'efectiu: rebuts i desemborsaments
|
||||
ACCOUNTING_EXPENSEREPORT_JOURNAL=Diari de l'informe de despeses
|
||||
ACCOUNTING_MISCELLANEOUS_JOURNAL=Diari general
|
||||
ACCOUNTING_HAS_NEW_JOURNAL=Té un nou Diari
|
||||
@ -185,27 +185,27 @@ TransitionalAccount=Compte de transferència bancària transitòria
|
||||
|
||||
ACCOUNTING_ACCOUNT_SUSPENSE=Compte (del pla comptable) que s'utilitzarà com a compte per als fons no assignats, ja siguin rebuts o pagats, és a dir, fons en "espera"
|
||||
DONATION_ACCOUNTINGACCOUNT=Compte (del pla comptable) que s'utilitzarà per a registrar donacions (mòdul de donacions)
|
||||
ADHERENT_SUBSCRIPTION_ACCOUNTINGACCOUNT=Account (from the Chart Of Account) to be used to register memberships subscriptions (Membership module - if membership recorded without invoice)
|
||||
ADHERENT_SUBSCRIPTION_ACCOUNTINGACCOUNT=Compte (del pla comptable) que s'utilitzarà per a registrar les subscripcions de socis (mòdul d'afiliació - si l'afiliació es registra sense factura)
|
||||
|
||||
ACCOUNTING_ACCOUNT_CUSTOMER_DEPOSIT=Account (from the Chart Of Account) to be used as the default account to register customer deposit
|
||||
ACCOUNTING_ACCOUNT_CUSTOMER_DEPOSIT=Compte (del pla comptable) que s'utilitzarà com a compte predeterminat per registrar el dipòsit del client
|
||||
UseAuxiliaryAccountOnCustomerDeposit=Emmagatzema el compte del client com a compte individual al llibre major subsidiari per a les línies de pagament inicial (si està desactivat, el compte individual per a les línies de pagament inicial romandrà buit)
|
||||
ACCOUNTING_ACCOUNT_SUPPLIER_DEPOSIT=Account (from the Chart Of Account) to be used as the default
|
||||
ACCOUNTING_ACCOUNT_SUPPLIER_DEPOSIT=Compte (del pla comptable) que s'utilitzarà com a predeterminat
|
||||
UseAuxiliaryAccountOnSupplierDeposit=Emmagatzema el compte del proveïdor com a compte individual al llibre major subsidiari per a les línies de pagament inicial (si està desactivat, el compte individual de les línies de pagament inicial romandrà buit)
|
||||
ACCOUNTING_ACCOUNT_CUSTOMER_RETAINED_WARRANTY=Accounting account by default to register customer retained warranty
|
||||
ACCOUNTING_ACCOUNT_CUSTOMER_RETAINED_WARRANTY=Compte comptable per defecte per a registrar la garantia retinguda del client
|
||||
|
||||
ACCOUNTING_PRODUCT_BUY_ACCOUNT=Compte (del pla comptable) que s'utilitzarà com a compte predeterminat per als productes comprats al mateix país (utilitzat si no està definit a la fitxa del producte)
|
||||
ACCOUNTING_PRODUCT_BUY_INTRA_ACCOUNT=Account (from the Chart Of Account) to be used as the default account for the products purchased from EEC to another EEC country (used if not defined in the product sheet)
|
||||
ACCOUNTING_PRODUCT_BUY_EXPORT_ACCOUNT=Account (from the Chart Of Account) to be used as the default account for the products purchased and imported from any other foreign country (used if not defined in the product sheet)
|
||||
ACCOUNTING_PRODUCT_BUY_INTRA_ACCOUNT=Compte (del pla comptable) que s'utilitzarà com a compte predeterminat per als productes comprats des de la CEE a un altre país de la CEE (utilitzat si no està definit a la fitxa del producte)
|
||||
ACCOUNTING_PRODUCT_BUY_EXPORT_ACCOUNT=Compte (del pla comptable) que s'utilitzarà com a compte predeterminat per als productes comprats i importats de qualsevol altre país estranger (utilitzat si no està definit a la fitxa del producte)
|
||||
ACCOUNTING_PRODUCT_SOLD_ACCOUNT=Compte (del pla comptable) que s'utilitzarà com a compte predeterminat per als productes venuts (utilitzat si no està definit a la fitxa del producte)
|
||||
ACCOUNTING_PRODUCT_SOLD_INTRA_ACCOUNT=Account (from the Chart Of Account) to be used as the default account for the products sold from EEC to another EEC country (used if not defined in the product sheet)
|
||||
ACCOUNTING_PRODUCT_SOLD_EXPORT_ACCOUNT=Account (from the Chart Of Account) to be used as the default account for the products sold and exported to any other foreign country (used if not defined in the product sheet)
|
||||
ACCOUNTING_PRODUCT_SOLD_INTRA_ACCOUNT=Compte (del pla comptable) que s'utilitzarà com a compte predeterminat per als productes venuts des de la CEE a un altre país de la CEE (utilitzat si no està definit a la fitxa del producte)
|
||||
ACCOUNTING_PRODUCT_SOLD_EXPORT_ACCOUNT=Compte (del pla comptable) que s'utilitzarà com a compte predeterminat per als productes venuts i exportats a qualsevol altre país estranger (utilitzat si no està definit a la fitxa del producte)
|
||||
|
||||
ACCOUNTING_SERVICE_BUY_ACCOUNT=Compte (del pla comptable) que s'utilitzarà com a compte predeterminat per als serveis adquirits al mateix país (utilitzat si no està definit al full de servei)
|
||||
ACCOUNTING_SERVICE_BUY_INTRA_ACCOUNT=Account (from the Chart Of Account) to be used as the default account for the services purchased from EEC to another EEC country (used if not defined in the service sheet)
|
||||
ACCOUNTING_SERVICE_BUY_EXPORT_ACCOUNT=Account (from the Chart Of Account) to be used as the default account for the services purchased and imported from other foreign country (used if not defined in the service sheet)
|
||||
ACCOUNTING_SERVICE_BUY_INTRA_ACCOUNT=Compte (del pla comptable) que s'utilitzarà com a compte predeterminat per als serveis adquirits de la CEE a un altre país de la CEE (utilitzat si no està definit al full de servei)
|
||||
ACCOUNTING_SERVICE_BUY_EXPORT_ACCOUNT=Compte (del pla comptable) que s'utilitzarà com a compte predeterminat per als serveis comprats i importats d'un altre país estranger (utilitzat si no està definit al full de servei)
|
||||
ACCOUNTING_SERVICE_SOLD_ACCOUNT=Compte (del pla comptable) que s'utilitzarà com a compte predeterminat per als serveis venuts (utilitzat si no està definit al full de servei)
|
||||
ACCOUNTING_SERVICE_SOLD_INTRA_ACCOUNT=Account (from the Chart Of Account) to be used as the default account for the services sold from EEC to another EEC country (used if not defined in the service sheet)
|
||||
ACCOUNTING_SERVICE_SOLD_EXPORT_ACCOUNT=Account (from the Chart Of Account) to be used as the default account for the services sold and exported to any other foreign country (used if not defined in the service sheet)
|
||||
ACCOUNTING_SERVICE_SOLD_INTRA_ACCOUNT=Compte (del pla comptable) que s'utilitzarà com a compte predeterminat per als serveis venuts des de la CEE a un altre país de la CEE (utilitzat si no està definit al full de servei)
|
||||
ACCOUNTING_SERVICE_SOLD_EXPORT_ACCOUNT=Compte (del pla comptable) que s'utilitzarà com a compte predeterminat per als serveis venuts i exportats a qualsevol altre país estranger (utilitzat si no està definit al full de servei)
|
||||
|
||||
Doctype=Tipus de document
|
||||
Docdate=Data
|
||||
@ -223,7 +223,7 @@ TransactionNumShort=Número de transacció
|
||||
AccountingCategory=Grup de comptes personalitzat
|
||||
AccountingCategories=Grups de comptes personalitzats
|
||||
GroupByAccountAccounting=Agrupa per compte major
|
||||
GroupBySubAccountAccounting=Agrupa per subcompte comptable
|
||||
GroupBySubAccountAccounting=Agrupa per compte del subllibre
|
||||
AccountingAccountGroupsDesc=Podeu definir aquí alguns grups de comptes comptables. S'utilitzaran per a informes comptables personalitzats.
|
||||
ByAccounts=Per comptes
|
||||
ByPredefinedAccountGroups=Per grups predefinits
|
||||
@ -238,6 +238,7 @@ ConfirmDeleteMvt=Això suprimirà totes les línies de comptabilitat per a l'any
|
||||
ConfirmDeleteMvtPartial=Això suprimirà la transacció de la comptabilitat (se suprimiran totes les línies relacionades amb la mateixa transacció)
|
||||
FinanceJournal=Diari de finances
|
||||
ExpenseReportsJournal=Informe-diari de despeses
|
||||
InventoryJournal=Diari d'inventari
|
||||
DescFinanceJournal=Diari financer que inclou tots els tipus de pagaments per compte bancari
|
||||
DescJournalOnlyBindedVisible=Aquesta és una vista de registre que està vinculada a un compte comptable i que es pot registrar als diaris i llibres majors.
|
||||
VATAccountNotDefined=Comptes comptables d'IVA sense definir
|
||||
@ -257,9 +258,9 @@ DescThirdPartyReport=Consulteu aquí la llista dels clients i proveïdors de ter
|
||||
ListAccounts=Llistat dels comptes comptables
|
||||
UnknownAccountForThirdparty=Compte comptable de tercer desconeguda, utilitzarem %s
|
||||
UnknownAccountForThirdpartyBlocking=Compte comptable de tercer desconegut. Error de bloqueig
|
||||
ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Compte Subterrani no definit o desconegut per tercers o usuaris. Utilitzarem %s
|
||||
ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Compte de subllibre no definit o tercer o usuari desconegut. Utilitzarem %s
|
||||
ThirdpartyAccountNotDefinedOrThirdPartyUnknownSubledgerIgnored=Tercer desconegut i subcompte comptable no definit al pagament. Es manté buit el valor del subcompte comptable.
|
||||
ThirdpartyAccountNotDefinedOrThirdPartyUnknownBlocking=Compte Subterrani no definit o desconegut per tercers o usuaris. Error de bloqueig.
|
||||
ThirdpartyAccountNotDefinedOrThirdPartyUnknownBlocking=Compte de subllibre no definit o tercer o usuari desconegut. Error de bloqueig.
|
||||
UnknownAccountForThirdpartyAndWaitingAccountNotDefinedBlocking=Compte de tercers desconegut i compte d'espera no definit. Error de bloqueig
|
||||
PaymentsNotLinkedToProduct=Pagament no vinculat a cap producte / servei
|
||||
OpeningBalance=Saldo d'obertura
|
||||
@ -269,7 +270,7 @@ ShowSubtotalByGroup=Mostra el subtotal per nivell
|
||||
|
||||
Pcgtype=Grup de comptes
|
||||
PcgtypeDesc=S'utilitzen grups de comptes com a criteris predefinits de «filtre» i «agrupació» per a alguns informes de comptabilitat. Per exemple, «INGRESSOS» o «DESPESES» s'utilitzen com a grups per a comptes comptables de productes per a crear l'informe de despeses/ingressos.
|
||||
AccountingCategoriesDesc=Custom group of accounts can be used to group accounting accounts into one name to ease filter use or building of custom reports.
|
||||
AccountingCategoriesDesc=El grup de comptes personalitzat es pot utilitzar per a agrupar els comptes comptables en un sol nom per a facilitar l'ús del filtre o la creació d'informes personalitzats.
|
||||
|
||||
Reconcilable=Reconciliable
|
||||
|
||||
@ -299,7 +300,7 @@ DescValidateMovements=Queda prohibida qualsevol modificació o supressió de reg
|
||||
|
||||
ValidateHistory=Comptabilitza automàticament
|
||||
AutomaticBindingDone=Enllaços automàtics fets (%s): l'enllaç automàtic no és possible per a alguns registres (%s)
|
||||
DoManualBindingForFailedRecord=You have to do a manual link for the %s row(s) not linked automatically.
|
||||
DoManualBindingForFailedRecord=Heu de fer un enllaç manual per a les %s files no enllaçades automàticament.
|
||||
|
||||
ErrorAccountancyCodeIsAlreadyUse=Error, no podeu eliminar ni desactivar aquest compte del pla comptable perquè està en ús
|
||||
MvtNotCorrectlyBalanced=Moviment no equilibrat correctament. Dèbit = %s i crèdit = %s
|
||||
@ -342,11 +343,11 @@ NumberOfAccountancyMovements=Nombre de moviments
|
||||
ACCOUNTING_DISABLE_BINDING_ON_SALES=Desactiva la vinculació i transferència de comptabilitat en vendes (les factures dels clients no es tindran en compte a la comptabilitat)
|
||||
ACCOUNTING_DISABLE_BINDING_ON_PURCHASES=Desactiva la vinculació i transferència a la comptabilitat de les compres (les factures de proveïdors no es tindran en compte a la comptabilitat)
|
||||
ACCOUNTING_DISABLE_BINDING_ON_EXPENSEREPORTS=Desactiva la vinculació i transferència de comptes en els informes de despeses (els informes de despeses no es tindran en compte a la comptabilitat)
|
||||
ACCOUNTING_ENABLE_LETTERING=Enable the lettering function in the accounting
|
||||
ACCOUNTING_ENABLE_LETTERING=Habiliteu la funció de lletres a la comptabilitat
|
||||
ACCOUNTING_ENABLE_AUTOLETTERING=Habiliteu la lletra automàtica en traspassar a la comptabilitat
|
||||
|
||||
## Export
|
||||
NotExportLettering=Do not export the lettering when generating the file
|
||||
NotExportLettering=No exporteu la lletra en generar el fitxer
|
||||
NotifiedExportDate=Marca les línies exportades com a Exportades <span class="warning">(per a modificar una línia, hauràs de suprimir tota la transacció i tornar-la a transferir a la comptabilitat)</span>
|
||||
NotifiedValidationDate=Validar i bloquejar les entrades exportades <span class="warning">(mateix efecte que la característica "%s", la modificació i la supressió de les línies DEFINITIVAMENT no seran possibles)</span>
|
||||
NotifiedExportFull=Exportar documents?
|
||||
@ -406,7 +407,7 @@ SaleLocal=Venda local
|
||||
SaleExport=Venda d’exportació
|
||||
SaleEEC=Venda en CEE
|
||||
SaleEECWithVAT=Venda a la CEE amb un IVA que no és nul, per la qual cosa suposem que NO es tracta d’una venda intracomunitària i el compte suggerit és el compte estàndard del producte.
|
||||
SaleEECWithoutVATNumber=Sale in EEC with no VAT but the VAT ID of thirdparty is not defined. We fall back on the account for standard sales. You can fix the VAT ID of the thirdparty, or change the product account suggested for binding if needed.
|
||||
SaleEECWithoutVATNumber=Venda a la CEE sense IVA, però l'identificador d'IVA del tercer no està definit. Tornem al compte de vendes estàndard. Podeu corregir l'identificador d'IVA del tercer o canviar el compte del producte suggerit per vincular-lo si cal.
|
||||
ForbiddenTransactionAlreadyExported=Prohibit: la transacció ha estat validada i/o exportada.
|
||||
ForbiddenTransactionAlreadyValidated=Prohibit: la transacció s'ha validat.
|
||||
## Dictionary
|
||||
@ -430,7 +431,7 @@ AccountancyUnletteringModifiedSuccessfully=%s conciliació desfeta correctament
|
||||
## Confirm box
|
||||
ConfirmMassUnletteringAuto=Confirmació de desconciliació automàtica massiva
|
||||
ConfirmMassUnletteringManual=Confirmació de desconciliació manual massiva
|
||||
ConfirmMassUnletteringQuestion=Are you sure you want to unreconcile the %s selected record(s)?
|
||||
ConfirmMassUnletteringQuestion=Esteu segur que voleu anul·lar la conciliació dels registres seleccionats %s?
|
||||
ConfirmMassDeleteBookkeepingWriting=Confirmació d'esborrament massiu
|
||||
ConfirmMassDeleteBookkeepingWritingQuestion=Això suprimirà la transacció de la comptabilitat (se suprimiran totes les línies relacionades amb la mateixa transacció) Esteu segur que voleu suprimir els registres seleccionats %s?
|
||||
|
||||
@ -461,11 +462,11 @@ FECFormatEntryNum=Número de peça (EcritureNum)
|
||||
FECFormatEntryDate=Data de la peça (EcritureDate)
|
||||
FECFormatGeneralAccountNumber=Número de compte general (CompteNum)
|
||||
FECFormatGeneralAccountLabel=Nom de compte general (CompteLib)
|
||||
FECFormatSubledgerAccountNumber=Número de compte de Subledger (CompAuxNum)
|
||||
FECFormatSubledgerAccountLabel=Número de compte de Subledger (CompAuxLib)
|
||||
FECFormatSubledgerAccountNumber=Número de compte auxiliar (CompAuxNum)
|
||||
FECFormatSubledgerAccountLabel=Número de compte auxiliar (CompAuxLib)
|
||||
FECFormatPieceRef=Peça ref. (PieceRef)
|
||||
FECFormatPieceDate=Creació de la data de la peça (PieceDate)
|
||||
FECFormatLabelOperation=Funcionament de l'etiqueta (EcritureLib)
|
||||
FECFormatLabelOperation=Nom de l'operació (EcritureLib)
|
||||
FECFormatDebit=Dèbit (dèbit)
|
||||
FECFormatCredit=Crèdit (Crèdit)
|
||||
FECFormatReconcilableCode=Codi reconciliable (EcritureLet)
|
||||
@ -477,7 +478,7 @@ FECFormatMulticurrencyCode=Codi multidivisa (Idevise)
|
||||
DateExport=Data d'exportació
|
||||
WarningReportNotReliable=Avís, aquest informe no està basat en el Llibre Major, de manera que no conté assentaments modificats manualment en el Llibre Major. Si el registre diari està actualitzat, la vista de comptes és més precisa.
|
||||
ExpenseReportJournal=Diari d'informe de despeses
|
||||
DocsAlreadyExportedAreExcluded=Docs already exported are excluded
|
||||
ClickToHideAlreadyExportedLines=Click to hide already exported lines
|
||||
DocsAlreadyExportedAreExcluded=S'exclouen els documents ja exportats
|
||||
ClickToHideAlreadyExportedLines=Feu clic per a amagar les línies ja exportades
|
||||
|
||||
NAccounts=comptes %s
|
||||
|
||||
@ -87,7 +87,7 @@ NotAvailableWhenAjaxDisabled=No disponible quan Ajax estigui desactivat
|
||||
AllowToSelectProjectFromOtherCompany=En un document d'un tercer, pots triar un projecte enllaçat a un altre tercer
|
||||
TimesheetPreventAfterFollowingMonths=Eviteu el temps de gravació passat el següent nombre de mesos
|
||||
JavascriptDisabled=Javascript desactivat
|
||||
UsePreviewTabs=Veure fitxes "vista prèvia"
|
||||
UsePreviewTabs=Utilitzeu pestanyes de vista prèvia
|
||||
ShowPreview=Veure previsualització
|
||||
ShowHideDetails=Mostra-Amaga els detalls
|
||||
PreviewNotAvailable=Vista prèvia no disponible
|
||||
@ -111,7 +111,7 @@ UseCaptchaCode=Utilitzeu el codi gràfic (CAPTCHA) a la pàgina d'inici de sessi
|
||||
AntiVirusCommand=Camí complet a l'ordre antivirus
|
||||
AntiVirusCommandExample=Exemple per al dimoni ClamAv (requereix clamav-daemon): /usr/bin/clamdscan<br>Exemple per a ClamWin (molt molt lent): c:\\Progra~1\\ClamWin\\bin\\clamscan.exe
|
||||
AntiVirusParam= Més paràmetres a la línia d'ordres
|
||||
AntiVirusParamExample=Exemple per al dimoni de ClamAv: --fdpass<br>Exemple per a ClamWin: --database="C:\\Program Files (x86)\\ClamWin\\lib"
|
||||
AntiVirusParamExample=Exemple del dimoni de ClamAv: --fdpass<br>Exemple de ClamWin: --database="C:\\Program Files (x86)\\ClamWin\\lib"
|
||||
ComptaSetup=Configuració del mòdul Comptabilitat
|
||||
UserSetup=Configuració de gestió d'usuaris
|
||||
MultiCurrencySetup=Configuració multidivisa
|
||||
@ -145,6 +145,7 @@ Box=Panell
|
||||
Boxes=Panells
|
||||
MaxNbOfLinesForBoxes=Màx. nombre de línies pels panells
|
||||
AllWidgetsWereEnabled=Tots els widgets disponibles estan habilitats
|
||||
WidgetAvailable=Giny disponible
|
||||
PositionByDefault=Posició per defecte
|
||||
Position=Lloc
|
||||
MenusDesc=Els gestors de menú configuren el contingut de les dues barres de menú (horitzontal i vertical).
|
||||
@ -346,13 +347,13 @@ UnpackPackageInModulesRoot=Per a implementar/instal·lar un mòdul extern, heu d
|
||||
SetupIsReadyForUse=La instal·lació del mòdul ha finalitzat. No obstant això, ha d'habilitar i configurar el mòdul en la seva aplicació, aneu a la pàgina per a configurar els mòduls: <a href="%s">%s</a>.
|
||||
NotExistsDirect=No s'ha definit el directori arrel alternatiu a un directori existent.<br>
|
||||
InfDirAlt=Des de la versió 3, és possible definir un directori arrel alternatiu. Això li permet emmagatzemar, en un directori dedicat, plug-ins i plantilles personalitzades.<br>Només ha de crear un directori a l'arrel de Dolibarr (per exemple: custom).<br>
|
||||
InfDirExample=Llavors <br>declareu-ho a l'arxiu <strong>conf.php </strong><br> $dolibarr_main_url_root_alt='/custom'<br> $dolibarr_main_document_root_alt='/ruta/del/dolibarr/htdocs/custom'<br> Si aquestes línies estan comentades amb "#", per a activar-les simplement descomenteu-les traient el caràcter "#".
|
||||
InfDirExample=<br>Llavors declareu-ho al fitxer <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/cami/del/dolibarr/htdocs/custom'<br>Si aquestes línies estan comentades amb «#», per a activar-les només cal treure el comentari eliminant el caràcter «#».
|
||||
YouCanSubmitFile=Podeu pujar el fitxer .zip del paquet del mòdul des d’aquí:
|
||||
CurrentVersion=Versió actual de Dolibarr
|
||||
CallUpdatePage=Aneu a la pàgina que actualitza l'estructura i les dades de la base de dades: %s.
|
||||
LastStableVersion=Última versió estable
|
||||
LastActivationDate=Data de l'última activació
|
||||
LastActivationAuthor=Últim autor d'activació
|
||||
LastActivationDate=Última data d'activació
|
||||
LastActivationAuthor=Autor de l'última activació
|
||||
LastActivationIP=Última IP d'activació
|
||||
LastActivationVersion=Última versió d'activació
|
||||
UpdateServerOffline=Actualitza el servidor fora de línia
|
||||
@ -374,11 +375,11 @@ DoTestSendHTML=Prova l'enviament HTML
|
||||
ErrorCantUseRazIfNoYearInMask=Error, no es pot utilitzar l'opció @ per a restablir el comptador cada any si la seqüència {yy} o {yyyy} no està emmascarada.
|
||||
ErrorCantUseRazInStartedYearIfNoYearMonthInMask=Error, no es pot usar opció @ si la seqüència (yy) (mm) o (yyyy) (mm) no es troba a la màscara.
|
||||
UMask=Paràmetre UMask de nous fitxers en Unix/Linux/BSD.
|
||||
UMaskExplanation=Aquest paràmetre determina els drets dels arxius creats en el servidor Dolibarr (durant la pujada, per exemple).<br>Aquest ha de ser el valor octal (per exemple, 0666 significa lectura/escriptura per a tots).<br>Aquest paràmetre no té cap efecte sobre un servidor Windows.
|
||||
UMaskExplanation=Aquest paràmetre us permet definir els permisos establerts per defecte als fitxers creats per Dolibarr al servidor (durant la càrrega, per exemple).<br>Ha de ser el valor octal (per exemple, 0666 significa llegir i escriure per a tothom). El valor recomanat és 0600 o 0660<br>Aquest paràmetre no té ús en un servidor Windows.
|
||||
SeeWikiForAllTeam=Mireu la pàgina Wiki per a obtenir una llista dels col·laboradors i la seva organització
|
||||
UseACacheDelay= Demora en memòria cau de l'exportació en segons (0 o buit sense memòria)
|
||||
DisableLinkToHelpCenter=Amagueu l'enllaç "<b> Necessiteu ajuda o assistència </b>" a la pàgina d'inici de sessió
|
||||
DisableLinkToHelp=Amagueu l'enllaç a l'ajuda en línia "<b> %s </b>"
|
||||
DisableLinkToHelpCenter=Amaga l'enllaç «<b>Necessites ajuda o assistència</b>» a la pàgina d'inici de sessió
|
||||
DisableLinkToHelp=Amaga l'enllaç a l'ajuda en línia «<b>%s</b>»
|
||||
AddCRIfTooLong=No hi ha cap tall de text automàtic, el text massa llarg no es mostrarà als documents. Si cal, afegiu devolucions de carro a l'àrea de text.
|
||||
ConfirmPurge=Esteu segur que voleu executar aquesta purga? <br>Això suprimirà permanentment tots els fitxers de dades sense opció de restaurar-los (fitxers del GED, fitxers adjunts...).
|
||||
MinLength=Longitud mínima
|
||||
@ -393,14 +394,14 @@ FollowingSubstitutionKeysCanBeUsed= <br> Per a saber com crear les teves plantil
|
||||
FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Crear_un_modelo_de_documento_ODT
|
||||
FirstnameNamePosition=Posició del Nom/Cognoms
|
||||
DescWeather=Les imatges següents es mostraran al tauler de control quan el nombre d'accions posteriors arriba als valors següents:
|
||||
KeyForWebServicesAccess=Clau per a utilitzar els serveis web (paràmetre "dolibarrkey" als serveis web)
|
||||
KeyForWebServicesAccess=Clau per a utilitzar els serveis web (paràmetre «dolibarrkey» als serveis web)
|
||||
TestSubmitForm=Formulari de proves
|
||||
ThisForceAlsoTheme=L’ús d’aquest gestor de menús també farà servir el seu propi tema sigui quina sigui l’opció de l’usuari. A més, aquest gestor de menú especialitzat per a telèfons intel·ligents no funciona en tots els telèfons intel·ligents. Utilitzeu un altre gestor de menús si teniu problemes amb el vostre.
|
||||
ThemeDir=Directori dels temes
|
||||
ConnectionTimeout=Temps d'espera de connexió
|
||||
ResponseTimeout=Timeout de resposta
|
||||
SmsTestMessage=Missatge de prova de __PHONEFROM__ per __PHONETO__
|
||||
ModuleMustBeEnabledFirst=El mòdul "<b>%s</b>" ha d'habilitar-se primer si necessita aquesta funcionalitat.
|
||||
ModuleMustBeEnabledFirst=El mòdul <b>%s</b> s'ha d'activar primer si necessiteu aquesta funció.
|
||||
SecurityToken=Clau per a protegir els URL
|
||||
NoSmsEngine=No hi ha cap gestor de remitents d'SMS disponible. Un gestor de remitents d'SMS no està instal·lat amb la distribució predeterminada perquè depenen d'un proveïdor extern, però podeu trobar-ne alguns a %s
|
||||
PDF=PDF
|
||||
@ -451,7 +452,7 @@ ExtrafieldCheckBox=Caselles de selecció
|
||||
ExtrafieldCheckBoxFromList=Caselles de selecció des d'una taula
|
||||
ExtrafieldLink=Enllaç a un objecte
|
||||
ComputedFormula=Camp calculat
|
||||
ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $objectoffield</strong>.<br><strong>WARNING</strong>: If you need properties of an object not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$objectoffield->id < 10 ? round($objectoffield->id / 2, 2): ($objectoffield->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetchNoCompute($objectoffield->id) > 0 ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1')<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetchNoCompute($objectoffield->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetchNoCompute($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found'
|
||||
ComputedFormulaDesc=Podeu introduir aquí una fórmula utilitzant altres propietats de l’objecte o qualsevol codi PHP per a obtenir un valor calculat dinàmicament. Podeu utilitzar qualsevol fórmula compatible amb PHP, inclòs l'operador condicional «?» i els següents objectes globals:<strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>ATENCIÓ</strong>: Només poden estar disponibles algunes propietats de $object. Si necessiteu una propietat no carregada, només cal que incorporeu l'objecte a la vostra fórmula com en el segon exemple.<br>Utilitzar un camp calculat implica que no podreu introduir cap valor des de la interfície. A més, si hi ha un error de sintaxi, la fórmula pot no tornar res.<br><br>Exemple de fórmula:<br>$objectoffield->id < 10 ? round($objectoffield->id / 2, 2): ($objectoffield->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Exemple per a tornar a carregar l'objecte <br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetchNoCompute($objectoffield->id) > 0 ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1')<br><br>Un altre exemple de fórmula per a forçar la càrrega de l'objecte i el seu objecte pare:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetchNoCompute($objectoffield->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetchNoCompute($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found'
|
||||
Computedpersistent=Emmagatzemar el camp computat
|
||||
ComputedpersistentDesc=Els camps addicionals calculats s’emmagatzemaran a la base de dades, però el valor només es recalcularà quan es canviï l’objecte d’aquest camp. Si el camp calculat depèn d'altres objectes o dades globals, aquest valor pot ser incorrecte!!
|
||||
ExtrafieldParamHelpPassword=Si deixeu aquest camp en blanc, vol dir que aquest valor s'emmagatzemarà sense xifratge (el camp només s'ha d'amagar amb una estrella a la pantalla). <br> Establiu 'auto' per a utilitzar la regla de xifratge predeterminada per a desar la contrasenya a la base de dades (aleshores, el valor llegit serà només el hash, no hi ha manera de recuperar el valor original)
|
||||
@ -512,8 +513,8 @@ DependsOn=Aquest mòdul necessita els mòduls
|
||||
RequiredBy=Aquest mòdul és requerit pel/s mòdul/s
|
||||
TheKeyIsTheNameOfHtmlField=Aquest és el nom del camp HTML. Es necessiten coneixements tècnics per a llegir el contingut de la pàgina HTML per a obtenir el nom clau d’un camp.
|
||||
PageUrlForDefaultValues=Has d'introduir aquí l'URL relatiu de la pàgina. Si inclous paràmetres a l'URL, els valors predeterminats seran efectius si tots els paràmetres s'estableixen en el mateix valor.
|
||||
PageUrlForDefaultValuesCreate=<br>Exemple:<br>Per al formulari per a crear un tercer nou, és <strong>%s</strong>.<br>Per a l'URL dels mòduls externs instal·lats al directori personalitzat, no incloeu el "custom/", així que utilitzeu una ruta com <strong>mymodule/mypage.php</strong> i no custom/mymodule/mypage.php.<br>Si només voleu un valor per defecte si l'URL té algun paràmetre, podeu utilitzar <strong>%s</strong>
|
||||
PageUrlForDefaultValuesList= <br>Exemple:<br> Per a la pàgina que llista els tercers, és <strong>%s</strong>. <br> Per a l'URL dels mòduls externs instal·lats al directori personalitzat, no incloeu el "custom/", de manera que utilitzeu una ruta com <strong>mymodule/mypagelist.php </strong> i no custom/mymodule/mypagelist.php. <br> Si només voleu un valor per defecte si l'URL té algun paràmetre, podeu utilitzar <strong>%s</strong>
|
||||
PageUrlForDefaultValuesCreate=<br>Exemple:<br>Per al formulari per a crear un tercer nou, és <strong>%s</strong>.<br>Per a l'URL dels mòduls externs instal·lats al directori personalitzat, no inclogueu el «custom/», de manera que utilitzeu un camí com <strong>elmeumodul/lamevapagina.php</strong> i no custom/elmeumodul/lamevapagina.php.<br>Si només voleu un valor predeterminat si l'URL té algun paràmetre, podeu utilitzar <strong>%s</strong>
|
||||
PageUrlForDefaultValuesList=<br>Exemple:<br>Per a la pàgina que llista els tercers, és <strong>%s</strong>.<br>Per a l'URL dels mòduls externs instal·lats al directori personalitzat, no inclogueu «custom/», així que utilitzeu un camí com <strong>elmeumodul/lamevapaginallistat.php</strong> i no custom/elmeumodul/lamevapaginallistat.php.<br>Si només voleu un valor predeterminat si l'URL té algun paràmetre, podeu utilitzar <strong>%s</strong>
|
||||
AlsoDefaultValuesAreEffectiveForActionCreate=També tingueu en compte que sobreescriure valors predeterminats per a la creació de formularis funciona només per a pàgines dissenyades correctament (de manera que amb el paràmetre action = create o presend ...)
|
||||
EnableDefaultValues=Activa la personalització dels valors predeterminats
|
||||
EnableOverwriteTranslation=Permet la personalització de les traduccions
|
||||
@ -646,7 +647,7 @@ Module2300Desc=Gestió de tasques programades (àlies cron o taula de crons)
|
||||
Module2400Name=Esdeveniments/Agenda
|
||||
Module2400Desc=Seguiment d'esdeveniments. Registre d'esdeveniments automàtics per a fer el seguiment o registrar esdeveniments manuals o reunions. Aquest és el mòdul principal per a una bona gestió de la relació amb clients o proveïdors.
|
||||
Module2430Name=Sistema de calendari de reserves
|
||||
Module2430Desc=Provide an online calendar to allow anyone to book rendez-vous, according to predefined ranges or availabilities.
|
||||
Module2430Desc=Proporcioneu un calendari en línia per a permetre que qualsevol persona pugui reservar una cita, segons els rangs o les disponibilitats predefinits.
|
||||
Module2500Name=SGD / GCE
|
||||
Module2500Desc=Sistema de gestió de documents / Gestió de continguts electrònics. Organització automàtica dels vostres documents generats o emmagatzemats. Compartiu-los quan ho necessiteu.
|
||||
Module2600Name=Serveis API / Web (servidor SOAP)
|
||||
@ -663,7 +664,7 @@ Module2900Desc=Capacitats de conversió GeoIP Maxmind
|
||||
Module3200Name=Arxius inalterables
|
||||
Module3200Desc=Activa el registre d'alguns esdeveniments de negoci en un registre inalterable. Els esdeveniments s'arxiven en temps real. El registre és una taula d'esdeveniments encadenats que només es poden llegir i exportar. Aquest mòdul pot ser obligatori per a alguns països.
|
||||
Module3300Name=Creador de mòduls
|
||||
Module3200Desc=Activa el registre d'alguns esdeveniments de negoci en un registre inalterable. Els esdeveniments s'arxiven en temps real. El registre és una taula d'esdeveniments encadenats que només es poden llegir i exportar. Aquest mòdul pot ser obligatori per a alguns països.
|
||||
Module3300Desc=Una eina RAD (Desenvolupament ràpid d'aplicacions: codi baix i sense codi) per a ajudar els desenvolupadors o usuaris avançats a crear el seu propi mòdul/aplicació.
|
||||
Module3400Name=Xarxes socials
|
||||
Module3400Desc=Activa els camps de les xarxes socials a tercers i adreces (skype, twitter, facebook...).
|
||||
Module4000Name=RH
|
||||
@ -704,8 +705,8 @@ Module62000Name=Incoterms
|
||||
Module62000Desc=Afegeix funcions per a gestionar Incoterms
|
||||
Module63000Name=Recursos
|
||||
Module63000Desc=Gestiona els recursos (impressores, cotxes, habitacions...) que pots compartir en esdeveniments
|
||||
Module66000Name=Enable OAuth2 authentication
|
||||
Module66000Desc=Provide a tool to generate and manage OAuth2 tokens. The token can then be used by some other modules.
|
||||
Module66000Name=Activa l'autenticació OAuth2
|
||||
Module66000Desc=Proporcioneu una eina per a generar i gestionar fitxes OAuth2. El testimoni pot ser utilitzat per alguns altres mòduls.
|
||||
Module94160Name=Recepcions
|
||||
Permission11=Consulta les factures dels clients (i els cobraments)
|
||||
Permission12=Crear/Modificar factures
|
||||
@ -860,7 +861,7 @@ Permission331=Consultar bookmarks
|
||||
Permission332=Crear/modificar bookmarks
|
||||
Permission333=Eliminar bookmarks
|
||||
Permission341=Consultar els seus propis permisos
|
||||
Permission342=Crear/modificar la seva pròpia info d'usuari
|
||||
Permission342=Crea/modifica la seva pròpia informació d'usuari
|
||||
Permission343=Modificar la seva pròpia contrasenya
|
||||
Permission344=Modificar els seus propis permisos
|
||||
Permission351=Consultar els grups
|
||||
@ -980,9 +981,9 @@ Permission3301=Genera mòduls nous
|
||||
Permission4001=Llegir habilitat/ocupació/posició
|
||||
Permission4002=Crear/modificar habilitat/ocupació/posició
|
||||
Permission4003=Esborra habilitat/ocupació/posició
|
||||
Permission4021=Read evaluations (yours and your subordinates)
|
||||
Permission4022=Create/modify evaluations
|
||||
Permission4023=Validate evaluation
|
||||
Permission4021=Consulta les avaluacions (teves i dels teus subordinats)
|
||||
Permission4022=Crear/modificar avaluacions
|
||||
Permission4023=Valida l'avaluació
|
||||
Permission4025=Elimina l'avaluació
|
||||
Permission4028=Veure menú comparatiu
|
||||
Permission4031=Llegeix informació personal
|
||||
@ -1102,7 +1103,7 @@ VATManagement=Gestió IVA
|
||||
VATIsUsedDesc=De manera predeterminada, quan es creen clients potencials, factures, comandes, etc., la tarifa de l'impost de vendes segueix la norma estàndard activa: <br> Si el venedor no està subjecte a l'impost de vendes, l'impost de vendes s'estableix per defecte a 0. Final de la regla. <br> Si el (país del venedor = país del comprador), l'impost de vendes per defecte és igual a l'impost de vendes del producte al país del venedor. Fi de la regla. <br> Si el venedor i el comprador es troben a la Comunitat Europea i els productes són productes relacionats amb el transport (transport, enviament, línia aèria), l'IVA per defecte és 0. Aquesta norma depèn del país del venedor, consulteu amb el vostre comptador. L'IVA s'ha de pagar pel comprador a l'oficina de duanes del seu país i no al venedor. Fi de la regla. <br> Si el venedor i el comprador es troben a la Comunitat Europea i el comprador no és una empresa (amb un número d'IVA intracomunitari registrat), l'IVA es fa per defecte al tipus d'IVA del país del venedor. Fi de la regla. <br> Si el venedor i el comprador es troben a la Comunitat Europea i el comprador és una empresa (amb un número d'IVA intracomunitari registrat), l'IVA és 0 per defecte. Fi de la regla. <br> En qualsevol altre cas, el valor predeterminat proposat és l'impost de vendes = 0. Fi de la regla.
|
||||
VATIsNotUsedDesc=El tipus d'IVA proposat per defecte és 0. Aquest és el cas d'associacions, particulars o algunes petites societats.
|
||||
VATIsUsedExampleFR=A França, es tracta de les societats o organismes que trien un règim fiscal general (General simplificat o General normal), règim en el qual es declara l'IVA.
|
||||
VATIsNotUsedExampleFR=A França, es tracta d'associacions que no siguin declarades per vendes o empreses, organitzacions o professions liberals que hagin triat el sistema fiscal de la microempresa (Impost sobre vendes en franquícia) i paguen una franquícia. Impost sobre vendes sense declaració d'impost sobre vendes. Aquesta elecció mostrarà la referència "Impost sobre vendes no aplicable - art-293B de CGI" a les factures.
|
||||
VATIsNotUsedExampleFR=A França, s'entén per associacions que no declaren l'impost de vendes o d'empreses, organitzacions o professions liberals que han escollit el sistema fiscal de microempresa (Impost sobre vendes en franquícia) i han pagat un impost sobre vendes de franquícia sense cap declaració d'impost sobre vendes. Aquesta opció mostrarà la referència «Impost sobre vendes no aplicable - art-293B de CGI» a les factures.
|
||||
##### Local Taxes #####
|
||||
TypeOfSaleTaxes=Tipus d’impost sobre vendes
|
||||
LTRate=Tarifa
|
||||
@ -1208,7 +1209,7 @@ DoNotSuggestPaymentMode=No ho suggereixis
|
||||
NoActiveBankAccountDefined=Cap compte bancari actiu definit
|
||||
OwnerOfBankAccount=Titular del compte %s
|
||||
BankModuleNotActive=Mòdul comptes bancaris no activat
|
||||
ShowBugTrackLink=Mostra l'enllaç "<strong> %s </strong>"
|
||||
ShowBugTrackLink=Mostra l'enllaç «<strong>%s</strong>»
|
||||
ShowBugTrackLinkDesc=Manteniu-lo buit per no mostrar aquest enllaç, utilitzeu el valor 'github' per a l'enllaç al projecte Dolibarr o definiu directament un URL 'https://...'
|
||||
Alerts=Alertes
|
||||
DelaysOfToleranceBeforeWarning=S'està mostrant una alerta d'advertència per...
|
||||
@ -1236,7 +1237,7 @@ SetupDescription4= <a href="%s"> %s -> %s </a> <br> <br> Aquest programari és
|
||||
SetupDescription5=Altres entrades del menú d'instal·lació gestionen paràmetres opcionals.
|
||||
SetupDescriptionLink= <a href="%s"> %s - %s </a>
|
||||
SetupDescription3b=Paràmetres bàsics utilitzats per a personalitzar el comportament predeterminat de la vostra aplicació (p. ex., per a funcions relacionades amb el país).
|
||||
SetupDescription4b=This software is a suite of many modules/applications. The modules related to your needs must be activated. Menu entries will appears with the activation of these modules.
|
||||
SetupDescription4b=Aquest programari és un conjunt de molts mòduls/aplicacions. Cal activar els mòduls relacionats amb les vostres necessitats. Les entrades del menú apareixeran amb l'activació d'aquests mòduls.
|
||||
AuditedSecurityEvents=Esdeveniments de seguretat que s’auditen
|
||||
NoSecurityEventsAreAduited=No s’audita cap esdeveniment de seguretat. Podeu activar-les des del menú %s
|
||||
Audit=Esdeveniments de seguretat
|
||||
@ -1257,7 +1258,7 @@ LogEventDesc=Habiliteu el registre per a esdeveniments de seguretat específics.
|
||||
AreaForAdminOnly=Els paràmetres de configuració només poden ser establerts per <b>usuaris administradors</b>.
|
||||
SystemInfoDesc=La informació del sistema és informació tècnica diversa que obteniu en mode de només lectura i visible només per als administradors.
|
||||
SystemAreaForAdminOnly=Aquesta àrea només està disponible per als usuaris administradors. Els permisos d'usuari de Dolibarr no poden canviar aquesta restricció.
|
||||
CompanyFundationDesc=Editeu la informació de la vostra empresa / organització. Feu clic al botó "%s" al final de la pàgina quan hagi acabat.
|
||||
CompanyFundationDesc=Editeu la informació de la vostra empresa/organització. Fes clic al botó «%s» a la part inferior de la pàgina quan hagis acabat.
|
||||
MoreNetworksAvailableWithModule=És possible que hi hagi més xarxes socials disponibles activant el mòdul "Xarxes socials".
|
||||
AccountantDesc=Si teniu un comptable extern, podeu editar aquí la seva informació.
|
||||
AccountantFileNumber=Número de fila
|
||||
@ -1265,7 +1266,7 @@ DisplayDesc=Els paràmetres que afecten l'aspecte i la presentació de l'aplicac
|
||||
AvailableModules=Mòduls/complements disponibles
|
||||
ToActivateModule=Per a activar mòduls, aneu a l'àrea de configuració (Inici->Configuració->Mòduls).
|
||||
SessionTimeOut=Temps de desconnexió per a la sessió
|
||||
SessionExplanation=Aquest número garanteix que la sessió no caduqui abans d'aquest retard, si el netejador de sessió es fa mitjançant un netejador de sessió de PHP intern (i res més). El netejador de sessió intern de PHP no garanteix que la sessió expire després d'aquest retard. Caducarà, després d'aquest retard, i quan s'executi el netejador de sessió, de manera que cada accés <b> %s / %s </b>, però només durant l'accés fet per altres sessions (si el valor és 0, significa que l'eliminació de la sessió només es fa mitjançant un extern procés). <br> Nota: en alguns servidors amb un mecanisme de neteja de sessió externa (cron sota debian, ubuntu ...), les sessions es poden destruir després d'un període definit per una configuració externa, independentment del valor introduït aquí.
|
||||
SessionExplanation=Aquest número garanteix que la sessió no caducarà mai abans d'aquest retard, si el netejador de sessions el fa el netejador de sessions intern de PHP (i res més). El netejador de sessions intern de PHP no garanteix que la sessió caduqui després d'aquest retard. Caducarà, després d'aquest retard, i quan s'executi el netejador de sessions, de manera que cada accés <b>%s/%s</b>, però només durant l'accés realitzat per altres sessions (si el valor és 0, vol dir que només s'esborra la sessió per un procés extern).<br>Nota: en alguns servidors amb un mecanisme de neteja de sessions extern (cron sota debian, ubuntu...), les sessions es poden destruir després d'un període definit per una configuració externa, sense importar quin sigui el valor introduït aquí.
|
||||
SessionsPurgedByExternalSystem=Sembla que les sessions en aquest servidor són netejades mitjançant un mecanisme extern (cron sota debian, ubuntu ...), probablement cada <b> %s </b> segons (= el valor del paràmetre sessió.gc_maxlifetime ), així que modificant aquest valor aquí no té cap efecte, Heu de sol·licitar a l’administrador del servidor que canviï la durada de la sessió.
|
||||
TriggersAvailable=Triggers disponibles
|
||||
TriggersDesc=Els activadors són fitxers que modificaran el comportament del flux de treball de Dolibarr un cop copiat al directori <b>htdocs/core/triggers</b>. Realitzen accions noves, activades en esdeveniments Dolibarr (creació d'empresa nova, validació de factures...).
|
||||
@ -1310,7 +1311,7 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=Heu d'executar aquesta ordre de
|
||||
YourPHPDoesNotHaveSSLSupport=Funcions SSL no disponibles al vostre PHP
|
||||
DownloadMoreSkins=Més temes per a descarregar
|
||||
SimpleNumRefModelDesc=Retorna el número de referència en el format %syymm-nnnn on yy és l'any, mm és el mes i nnnn és un número d'increment automàtic seqüencial sense restablir
|
||||
SimpleRefNumRefModelDesc=Returns the reference number in the format n where n is a sequential auto-incrementing number with no reset
|
||||
SimpleRefNumRefModelDesc=Retorna el número de referència en el format n on n és un nombre seqüencial d'increment automàtic sense restabliment
|
||||
AdvancedNumRefModelDesc=Retorna el número de referència en el format %syymm-nnnn on yy és l'any, mm és el mes i nnnn és un número d'increment automàtic seqüencial sense restablir
|
||||
SimpleNumRefNoDateModelDesc=Retorna el número de referència en el format %s-nnnn on nnnn és un número d’increment automàtic seqüencial sense restablir
|
||||
ShowProfIdInAddress=Mostra el DNI professional amb adreces
|
||||
@ -1369,7 +1370,7 @@ TitleNumberOfActivatedModules=Mòduls activats
|
||||
TotalNumberOfActivatedModules=Mòduls activats: <b> %s </b> / <b> %s </b>
|
||||
YouMustEnableOneModule=Ha d'activar almenys 1 mòdul.
|
||||
YouMustEnableTranslationOverwriteBefore=Primer heu d'activar la sobreescriptura de traduccions per a poder substituir una traducció
|
||||
ClassNotFoundIntoPathWarning=La classe %s no s'ha trobat a la ruta PHP
|
||||
ClassNotFoundIntoPathWarning=La classe %s no s'ha trobat al camí PHP
|
||||
YesInSummer=Sí a l'estiu
|
||||
OnlyFollowingModulesAreOpenedToExternalUsers=Tingueu en compte que només els següents mòduls estan disponibles per als usuaris externs (independentment dels permisos d'aquests usuaris) i només si es concedeixen permisos: <br>
|
||||
SuhosinSessionEncrypt=Emmagatzematge de sessions xifrades per Suhosin
|
||||
@ -1452,8 +1453,8 @@ SuppliersPayment=Pagaments a proveïdors
|
||||
SupplierPaymentSetup=Configuració de pagaments a proveïdors
|
||||
InvoiceCheckPosteriorDate=Comproveu la data de fabricació abans de la validació
|
||||
InvoiceCheckPosteriorDateHelp=La validació d'una factura estarà prohibida si la seva data és anterior a la data de l'última factura del mateix tipus.
|
||||
InvoiceOptionCategoryOfOperations=Display the mention "category of operations" on the invoice.
|
||||
InvoiceOptionCategoryOfOperationsHelp=Depending on the situation, the mention will appear in the form:<br>- Category of operations: Delivery of goods<br>- Category of operations: Provision of services<br>- Category of operations: Mixed - Delivery of goods & provision of services
|
||||
InvoiceOptionCategoryOfOperations=Mostra la menció «categoria d'operacions» a la factura.
|
||||
InvoiceOptionCategoryOfOperationsHelp=Segons la situació, la menció apareixerà en la forma:<br>- Categoria d'operacions: Entrega de mercaderies<br>- Categoria d'operacions: Prestació de serveis<br>- Categoria d'operacions: Mixta - Entrega de mercaderies i Prestació de serveis
|
||||
InvoiceOptionCategoryOfOperationsYes1=Sí, a sota del bloc d'adreces
|
||||
InvoiceOptionCategoryOfOperationsYes2=Sí, a la cantonada inferior esquerra
|
||||
##### Proposals #####
|
||||
@ -1700,7 +1701,7 @@ SyslogSetup=Configuració del mòdul Syslog
|
||||
SyslogOutput=Sortida del log
|
||||
SyslogFacility=Facilitat
|
||||
SyslogLevel=Nivell
|
||||
SyslogFilename=Nom i ruta de l'arxiu
|
||||
SyslogFilename=Nom i camí del fitxer
|
||||
YouCanUseDOL_DATA_ROOT=Podeu utilitzar DOL_DATA_ROOT/dolibarr.log per a un fitxer de registre al directori "documents" de Dolibarr. Podeu establir un camí diferent per a emmagatzemar aquest fitxer.
|
||||
ErrorUnknownSyslogConstant=La constant %s no és una constant syslog coneguda
|
||||
OnlyWindowsLOG_USER=En Windows, només s'admetrà la funció LOG_USER
|
||||
@ -1766,7 +1767,7 @@ FCKeditorForNotePublic=WYSIWIG creació/edició del camp "notes públiques" d'el
|
||||
FCKeditorForNotePrivate=Creació/edició WYSIWIG del camp "notes privades" d'elements
|
||||
FCKeditorForCompany=Creació / edició de WYSIWIG de la descripció del camp d'elements (excepte productes / serveis)
|
||||
FCKeditorForProductDetails=Creació/edició WYSIWIG de descripció de productes o línies per objectes (línies de pressupostos, comandes, factures, etc...).
|
||||
FCKeditorForProductDetails2=Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.
|
||||
FCKeditorForProductDetails2=Avís: l'ús d'aquesta opció per a aquest cas no es recomana, ja que pot crear problemes amb caràcters especials i format de pàgina en crear fitxers PDF.
|
||||
FCKeditorForMailing= Creació/edició WYSIWIG dels E-Mails
|
||||
FCKeditorForUserSignature=Creació/edició WYSIWIG de la signatura de l'usuari
|
||||
FCKeditorForMail=Edició/creació WYSIWIG per tots els e-mails (excepte Eines->eMailing)
|
||||
@ -1863,7 +1864,7 @@ StockDecreaseForPointOfSaleDisabledbyBatch=La disminució d'accions en POS no é
|
||||
CashDeskYouDidNotDisableStockDecease=No vau desactivar la disminució de l'estoc en fer una venda des del TPV. Per tant, es requereix un magatzem.
|
||||
CashDeskForceDecreaseStockLabel=S'ha forçat la disminució de l'estoc de productes per lots.
|
||||
CashDeskForceDecreaseStockDesc=Disminuïu primer les dates més antigues de consumir i vendre.
|
||||
CashDeskReaderKeyCodeForEnter=Key ASCII code for "Enter" defined in barcode reader (Example: 13)
|
||||
CashDeskReaderKeyCodeForEnter=Codi ASCII per "Enter" definit al lector de codis de barres (Exemple: 13)
|
||||
##### Bookmark #####
|
||||
BookmarkSetup=Configuració del mòdul Bookmark
|
||||
BookmarkDesc=Aquest mòdul us permet gestionar els marcadors. També podeu afegir dreceres a totes les pàgines de Dolibarr o llocs web externs al menú de l'esquerra.
|
||||
@ -1934,7 +1935,7 @@ SalariesSetup=Configuració del mòdul de salaris
|
||||
SortOrder=Ordre de classificació
|
||||
Format=Format
|
||||
TypePaymentDesc=0:Forma de pagament a client, 1:Forma de pagament a proveïdor, 2:Mateixa forma de pagament per clients i proveïdors
|
||||
IncludePath=Incloure ruta (que es defineix a la variable %s)
|
||||
IncludePath=Inclou el camí (definit en la variable %s)
|
||||
ExpenseReportsSetup=Configuració del mòdul Informe de Despeses
|
||||
TemplatePDFExpenseReports=Plantilles de documents per a generar un document d’informe de despeses
|
||||
ExpenseReportsRulesSetup=Configurar mòdul Informes de despeses - Regles
|
||||
@ -1952,7 +1953,7 @@ BackupDumpWizard=Assistent per a crear el fitxer d'exportació de la base de dad
|
||||
BackupZipWizard=Assistent per a crear el directori d’arxiu de documents
|
||||
SomethingMakeInstallFromWebNotPossible=No és possible la instal·lació de mòduls externs des de la interfície web per la següent raó:
|
||||
SomethingMakeInstallFromWebNotPossible2=Per aquest motiu, el procés d'actualització descrit aquí és un procés manual que només un usuari privilegiat pot realitzar.
|
||||
InstallModuleFromWebHasBeenDisabledContactUs=Install or development of external modules or dynamic websites, from the application, is currently locked for security purpose. Please contact us if you need to enable this feature.
|
||||
InstallModuleFromWebHasBeenDisabledContactUs=La instal·lació o desenvolupament de mòduls externs o llocs web dinàmics, des de l'aplicació, està actualment bloquejat per motius de seguretat. Si us plau, poseu-vos en contacte amb nosaltres si necessiteu habilitar aquesta funció.
|
||||
InstallModuleFromWebHasBeenDisabledByFile=El vostre administrador ha desactivat la instal·lació del mòdul extern des de l'aplicació. Heu de demanar-li que suprimeixi el fitxer <strong> %s </strong> per a permetre aquesta funció.
|
||||
ConfFileMustContainCustom=Per a instal·lar o crear un mòdul extern des de l'aplicació es necessita desar els fitxers del mòdul en el directori <strong>%s</strong>. Per a permetre a Dolibarr el processament d'aquest directori, has de configurar el teu <strong>conf/conf.php</strong> afegint aquestes 2 línies:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
|
||||
HighlightLinesOnMouseHover=Remarca línies de la taula quan el ratolí passi per sobre
|
||||
@ -2050,7 +2051,7 @@ activateModuleDependNotSatisfied=El mòdul "%s" depèn del mòdul "%s", que falt
|
||||
CommandIsNotInsideAllowedCommands=L'ordre que intenteu executar no es troba a la llista de comandaments permesos definits al paràmetre <strong> $ dolibarr_main_restrict_os_commands </strong> al fitxer <strong> conf.php </strong>.
|
||||
LandingPage=Pàgina de destinació principal
|
||||
SamePriceAlsoForSharedCompanies=Si utilitzeu un mòdul multicompany, amb l'opció "Preu únic", el preu també serà el mateix per a totes les empreses si es comparteixen productes entre entorns
|
||||
ModuleEnabledAdminMustCheckRights=El mòdul s'ha activat. Els permisos per als mòduls activats només es donen als usuaris administradors. És possible que hagueu de concedir permisos a altres usuaris o grups manualment si cal.
|
||||
ModuleEnabledAdminMustCheckRights=El mòdul s'ha activat. Els permisos per als mòduls activats només es donen als usuaris administradors. És possible que hàgiu de concedir permisos a altres usuaris o grups manualment si cal.
|
||||
UserHasNoPermissions=Aquest usuari no té permisos definits
|
||||
TypeCdr=Utilitzeu "Cap" si la data del termini de pagament és la data de la factura més un delta en dies (el delta és el camp "%s") <br> Utilitzeu "Al final del mes", si, després del delta, s'ha d'augmentar la data per a arribar al final del mes (+ opcional "%s" en dies) <br> Utilitzeu "Actual/Següent" perquè la data del termini de pagament sigui la primera N del mes després del delta (el delta és el camp "%s", N s'emmagatzema al camp "%s").
|
||||
BaseCurrency=Moneda de referència de l'empresa (anar a la configuració de l'empresa per a canviar-ho)
|
||||
@ -2080,8 +2081,8 @@ RemoveSpecialChars=Elimina els caràcters especials
|
||||
COMPANY_AQUARIUM_CLEAN_REGEX=Filtre Regex per a netejar el valor (COMPANY_AQUARIUM_CLEAN_REGEX)
|
||||
COMPANY_DIGITARIA_CLEAN_REGEX=Filtre Regex al valor net (COMPANY_DIGITARIA_CLEAN_REGEX)
|
||||
COMPANY_DIGITARIA_UNIQUE_CODE=No es permet la duplicació
|
||||
RemoveSpecialWords=Clean certain words when generating sub-accounts for customers or suppliers
|
||||
RemoveSpecialWordsHelp=Specify the words to be cleaned before calculating the customer or supplier account. Use a ";" between each word
|
||||
RemoveSpecialWords=Netegeu certes paraules en generar subcomptes per a clients o proveïdors
|
||||
RemoveSpecialWordsHelp=Especifiqueu les paraules a netejar abans de calcular el compte de client o proveïdor. Utilitzeu un ";" entre cada paraula
|
||||
GDPRContact=Oficial de protecció de dades (PDO, privadesa de dades o contacte amb GDPR)
|
||||
GDPRContactDesc=Si emmagatzemeu dades personals al vostre Sistema d'Informació, podeu anomenar aquí el contacte responsable del Reglament General de Protecció de Dades
|
||||
HelpOnTooltip=Ajuda a mostrar el text a la descripció d'informació
|
||||
@ -2139,7 +2140,7 @@ CodeLastResult=Últim codi retornat
|
||||
NbOfEmailsInInbox=Nombre de correus electrònics en el directori font
|
||||
LoadThirdPartyFromName=Carregueu la cerca de tercers al %s (només carrega)
|
||||
LoadThirdPartyFromNameOrCreate=Carregueu la cerca de tercers a %s (crear si no es troba)
|
||||
LoadContactFromEmailOrCreate=Load contact searching on %s (create if not found)
|
||||
LoadContactFromEmailOrCreate=Carregueu el contacte cercant a %s (creeu-lo si no es troba)
|
||||
AttachJoinedDocumentsToObject=Deseu els fitxers adjunts als documents d'objectes si es troba una referència d'un objecte al tema del correu electrònic.
|
||||
WithDolTrackingID=Missatge d'una conversa iniciada per un primer correu electrònic enviat des de Dolibarr
|
||||
WithoutDolTrackingID=Missatge d'una conversa iniciada per un primer correu electrònic NO enviat des de Dolibarr
|
||||
@ -2243,12 +2244,12 @@ MailToPartnership=Associació
|
||||
AGENDA_EVENT_DEFAULT_STATUS=Estat de l'esdeveniment per defecte en crear un esdeveniment des del formulari
|
||||
YouShouldDisablePHPFunctions=Hauríeu de desactivar les funcions PHP
|
||||
IfCLINotRequiredYouShouldDisablePHPFunctions=Excepte si heu d'executar ordres del sistema en codi personalitzat, hauríeu de desactivar les funcions PHP
|
||||
PHPFunctionsRequiredForCLI=For shell purpose (like scheduled job backup or running an antivirus program), you must keep PHP functions
|
||||
PHPFunctionsRequiredForCLI=Per a propòsits d'intèrpret d'ordres (com ara una còpia de seguretat de treballs programats o executar un programa antivirus), heu de mantenir les funcions PHP
|
||||
NoWritableFilesFoundIntoRootDir=No s'ha trobat cap fitxer ni directori d'escriptura dels programes comuns al directori arrel (Bo)
|
||||
RecommendedValueIs=Recomanat: %s
|
||||
Recommended=Recomanada
|
||||
NotRecommended=No es recomana
|
||||
ARestrictedPath=Some restricted path for data files
|
||||
ARestrictedPath=Algun camí restringit per als fitxers de dades
|
||||
CheckForModuleUpdate=Comproveu si hi ha actualitzacions de mòduls externs
|
||||
CheckForModuleUpdateHelp=Aquesta acció es connectarà amb editors de mòduls externs per a comprovar si hi ha una versió nova disponible.
|
||||
ModuleUpdateAvailable=Hi ha disponible una actualització
|
||||
@ -2296,17 +2297,17 @@ LateWarningAfter=Avís "tard" després
|
||||
TemplateforBusinessCards=Plantilla per a una targeta de visita de diferents mides
|
||||
InventorySetup= Configuració de l'inventari
|
||||
ExportUseLowMemoryMode=Utilitzeu un mode de memòria baixa
|
||||
ExportUseLowMemoryModeHelp=Use the low memory mode to generate the dump file (compression is done through a pipe instead of into the PHP memory). This method does not allow to check that the file is complete and error message can't be reported if it fails. Use it if you experience not enough memory errors.
|
||||
ExportUseLowMemoryModeHelp=Utilitzeu el mode de memòria baixa per a generar el fitxer d'abocament (la compressió es fa a través d'una canonada en lloc d'entrar a la memòria PHP). Aquest mètode no permet comprovar que el fitxer estigui complet i no es pot informar del missatge d'error si falla. Utilitzeu-lo si no teniu prou errors de memòria.
|
||||
|
||||
ModuleWebhookName = Webhook
|
||||
ModuleWebhookDesc = Interfície per a capturar activadors de dolibarr i enviar-lo a un URL
|
||||
ModuleWebhookDesc = Interfície per a capturar activadors de dolibarr i enviar dades de l'esdeveniment a un URL
|
||||
WebhookSetup = Configuració del webhook
|
||||
Settings = Configuració
|
||||
WebhookSetupPage = Pàgina de configuració del webhook
|
||||
ShowQuickAddLink=Mostra un botó per a afegir ràpidament un element al menú superior dret
|
||||
|
||||
HashForPing=Hash utilitzat per a fer ping
|
||||
ReadOnlyMode=És una instància en mode "Només lectura".
|
||||
ReadOnlyMode=És una instància en mode «Només lectura».
|
||||
DEBUGBAR_USE_LOG_FILE=Utilitzeu el fitxer <b> dolibarr.log </b> per a atrapar els registres
|
||||
UsingLogFileShowAllRecordOfSubrequestButIsSlower=Utilitzeu el fitxer dolibarr.log per a atrapar els registres en lloc de capturar la memòria en directe. Permet capturar tots els registres en lloc de només el registre del procés actual (per tant, inclosa la de les pàgines de subsol·licituds ajax), però farà que la vostra instància sigui molt molt lenta. No es recomana.
|
||||
FixedOrPercent=Fixat (utilitza la paraula clau "fixat") o per cent (utilitza la paraula clau "percentatge")
|
||||
@ -2341,34 +2342,37 @@ UsePassword=Utilitzeu una contrasenya
|
||||
UseOauth=Utilitzeu un testimoni OAUTH
|
||||
Images=Imatges
|
||||
MaxNumberOfImagesInGetPost=Nombre màxim d'imatges permeses en un camp HTML enviat en un formulari
|
||||
MaxNumberOfPostOnPublicPagesByIP=Max number of posts on public pages with the same IP address in a month
|
||||
MaxNumberOfPostOnPublicPagesByIP=Nombre màxim de publicacions a pàgines públiques amb la mateixa adreça IP en un mes
|
||||
CIDLookupURL=El mòdul aporta un URL que pot utilitzar una eina externa per a obtenir el nom d'un tercer o contacte des del seu número de telèfon. L'URL a utilitzar és:
|
||||
ScriptIsEmpty=El guió és buit
|
||||
ShowHideTheNRequests=Mostra/amaga les sol·licituds SQL %s
|
||||
DefinedAPathForAntivirusCommandIntoSetup=Definiu una ruta per a un programa antivirus a <b> %s </b>
|
||||
DefinedAPathForAntivirusCommandIntoSetup=Definiu un camí per a un programa antivirus a <b>%s</b>
|
||||
TriggerCodes=Esdeveniments desencadenants
|
||||
TriggerCodeInfo=Introduïu aquí els codis activadors que han de generar una publicació d'una sol·licitud web (només es permet l'URL extern). Podeu introduir diversos codis d'activació separats per una coma.
|
||||
EditableWhenDraftOnly=If unchecked, the value can only be modified when object has a draft status
|
||||
EditableWhenDraftOnly=Si no està marcat, el valor només es pot modificar quan l'objecte té un estat d'esborrany
|
||||
CssOnEdit=Css a les pàgines d'edició
|
||||
CssOnView=Css a les pàgines de visualització
|
||||
CssOnList=Css a les pàgines de llistat
|
||||
HelpCssOnEditDesc=The Css used when editing the field.<br>Example: "minwiwdth100 maxwidth500 widthcentpercentminusx"
|
||||
HelpCssOnViewDesc=The Css used when viewing the field.
|
||||
HelpCssOnListDesc=The Css used when field is inside a list table.<br>Example: "tdoverflowmax200"
|
||||
RECEPTION_PDF_HIDE_ORDERED=Hide the quantity ordered on the generated documents for receptions
|
||||
MAIN_PDF_RECEPTION_DISPLAY_AMOUNT_HT=Show the price on the generated documents for receptions
|
||||
HelpCssOnEditDesc=El Css utilitzat en editar el camp.<br>Exemple: «minwiwdth100 maxwidth500 widthcentpercentminusx»
|
||||
HelpCssOnViewDesc=El Css utilitzat en visualitzar el camp.
|
||||
HelpCssOnListDesc=El Css utilitzat quan el camp es troba dins d'una taula de llista.<br>Exemple: «tdoverflowmax200»
|
||||
RECEPTION_PDF_HIDE_ORDERED=Amaga la quantitat demanada als documents generats per a recepcions
|
||||
MAIN_PDF_RECEPTION_DISPLAY_AMOUNT_HT=Mostra el preu als documents generats per a recepcions
|
||||
WarningDisabled=Avís desactivat
|
||||
LimitsAndMitigation=Límits d'accés i mitigació
|
||||
DesktopsOnly=Només escriptoris
|
||||
DesktopsAndSmartphones=Escriptoris i telèfons intel·ligents
|
||||
AllowOnlineSign=Permet la signatura en línia
|
||||
AllowExternalDownload=Allow external download (without login, using a shared link)
|
||||
DeadlineDayVATSubmission=Deadline day for vat submission on the next month
|
||||
AllowExternalDownload=Permet la baixada externa (sense iniciar sessió, mitjançant un enllaç compartit)
|
||||
DeadlineDayVATSubmission=Dia límit per a la presentació del IVA el mes següent
|
||||
MaxNumberOfAttachementOnForms=Nombre màxim de fitxers units en un formulari
|
||||
IfDefinedUseAValueBeetween=If defined, use a value between %s and %s
|
||||
IfDefinedUseAValueBeetween=Si està definit, utilitzeu un valor entre %s i %s
|
||||
Reload=Recarregar
|
||||
ConfirmReload=Confirmeu la recàrrega del mòdul
|
||||
WarningModuleHasChangedLastVersionCheckParameter=Warning: the module %s has set a parameter to check its version at each page access. This is a bad and not allowed practice that may make the page to administer modules instable. Please contact author of module to fix this.
|
||||
WarningModuleHasChangedSecurityCsrfParameter=Warning: the module %s has disabled the CSRF security of your instance. This action is suspect and your installation may no more be secured. Please contact the author of the module for explanation.
|
||||
EMailsInGoingDesc=Incoming emails are managed by the module %s. You must enable and configure it if you need to support ingoing emails.
|
||||
MAIN_IMAP_USE_PHPIMAP=Use the PHP-IMAP library for IMAP instead of native PHP IMAP. This also allows the use of an OAuth2 connection for IMAP (module OAuth must also be activated).
|
||||
WarningModuleHasChangedLastVersionCheckParameter=Avís: el mòdul %s ha establert un paràmetre per a comprovar la seva versió a cada accés a la pàgina. Aquesta és una pràctica dolenta i no permesa que pot fer que la pàgina per a administrar mòduls sigui inestable. Poseu-vos en contacte amb l'autor del mòdul per solucionar-ho.
|
||||
WarningModuleHasChangedSecurityCsrfParameter=Avís: el mòdul %s ha desactivat la seguretat CSRF de la vostra instància. Aquesta acció és sospitosa i és possible que la vostra instal·lació ja no estigui segura. Poseu-vos en contacte amb l'autor del mòdul per a obtenir una explicació.
|
||||
EMailsInGoingDesc=Els correus electrònics entrants són gestionats pel mòdul %s. Heu d'activar-lo i configurar-lo si necessiteu donar suport als correus electrònics entrants.
|
||||
MAIN_IMAP_USE_PHPIMAP=Utilitzeu la biblioteca PHP-IMAP per a IMAP en comptes de l'IMAP PHP natiu. Això també permet l'ús d'una connexió OAuth2 per IMAP (també s'ha d'activar el mòdul OAuth).
|
||||
MAIN_CHECKBOX_LEFT_COLUMN=Mostra la columna per a la selecció de camps i línies a l'esquerra (a la dreta per defecte)
|
||||
|
||||
CSSPage=Estil CSS
|
||||
|
||||
@ -88,7 +88,7 @@ SupplierInvoiceSentByEMail=Factura de proveïdor %s enviada per e-mail
|
||||
ShippingSentByEMail=Enviament %s enviat per email
|
||||
ShippingValidated= Enviament %s validat
|
||||
InterventionSentByEMail=Intervenció %s enviada per e-mail
|
||||
ProjectSentByEMail=Project %s sent by email
|
||||
ProjectSentByEMail=Projecte %s enviat per correu electrònic
|
||||
ProposalDeleted=Pressupost esborrat
|
||||
OrderDeleted=Comanda esborrada
|
||||
InvoiceDeleted=Factura esborrada
|
||||
@ -102,7 +102,7 @@ PRODUCT_DELETEInDolibarr=Producte %s eliminat
|
||||
HOLIDAY_CREATEInDolibarr=S'ha creat la sol·licitud de permís %s
|
||||
HOLIDAY_MODIFYInDolibarr=S'ha modificat la sol·licitud de permís %s
|
||||
HOLIDAY_APPROVEInDolibarr=Sol·licitud de dies lliures %s aprovada
|
||||
HOLIDAY_VALIDATEInDolibarr=La sol·licitud d’excedència %s validada
|
||||
HOLIDAY_VALIDATEInDolibarr=Sol·licitud de dies lliures %s validada
|
||||
HOLIDAY_DELETEInDolibarr=S'ha suprimit la sol·licitud de permís %s
|
||||
EXPENSE_REPORT_CREATEInDolibarr=Creat l'informe de despeses %s
|
||||
EXPENSE_REPORT_VALIDATEInDolibarr=S'ha validat l'informe de despeses %s
|
||||
@ -152,7 +152,7 @@ ExtSitesEnableThisTool=Mostra calendaris externs (definit a la configuració glo
|
||||
ExtSitesNbOfAgenda=Nombre de calendaris
|
||||
AgendaExtNb=Calendari núm. %s
|
||||
ExtSiteUrlAgenda=URL per a accedir al fitxer .ical
|
||||
ExtSiteNoLabel=Sense descripció
|
||||
ExtSiteNoLabel=Sense nom
|
||||
VisibleTimeRange=Rang de temps visible
|
||||
VisibleDaysRange=Rang de dies visible
|
||||
AddEvent=Crear esdeveniment
|
||||
|
||||
@ -25,7 +25,7 @@ InitialBankBalance=Saldo inicial
|
||||
EndBankBalance=Saldo final
|
||||
CurrentBalance=Saldo actual
|
||||
FutureBalance=Saldo previst
|
||||
ShowAllTimeBalance=Mostar balanç des de principi
|
||||
ShowAllTimeBalance=Mostra el saldo des de l'inici
|
||||
AllTime=Des del principi
|
||||
Reconciliation=Conciliació
|
||||
RIB=Compte bancari
|
||||
@ -144,7 +144,7 @@ AllAccounts=Tots els comptes bancaris i en efectiu
|
||||
BackToAccount=Tornar al compte
|
||||
ShowAllAccounts=Mostra per a tots els comptes
|
||||
FutureTransaction=Transacció futura. No és possible conciliar.
|
||||
SelectChequeTransactionAndGenerate=Seleccioneu / filtreu els xecs que s’inclouran al rebut del dipòsit de xecs. A continuació, feu clic a "Crea".
|
||||
SelectChequeTransactionAndGenerate=Seleccioneu/filtreu els xecs que s'han d'incloure a la remesa de xecs. A continuació, feu clic a «Crea».
|
||||
InputReceiptNumber=Selecciona l'estat del compte bancari relacionat amb la conciliació. Utilitza un valor numèric que es pugui ordenar: AAAAMM o AAAAMMDD
|
||||
EventualyAddCategory=Finalment, especifiqueu una categoria on classificar els registres
|
||||
ToConciliate=A conciliar?
|
||||
|
||||
@ -13,7 +13,7 @@ BillsStatistics=Estadístiques factures a clients
|
||||
BillsStatisticsSuppliers=Estadístiques de Factures de proveïdors
|
||||
DisabledBecauseDispatchedInBookkeeping=Desactivat perquè la factura ja s'ha comptabilitzat
|
||||
DisabledBecauseNotLastInvoice=Desactivat perquè la factura no es pot esborrar. Algunes factures s'han registrat després d'aquesta i això crearia espais buits al comptador.
|
||||
DisabledBecauseNotLastSituationInvoice=Disabled because invoice is not erasable. This invoice is not the last one in situation invoice cycle.
|
||||
DisabledBecauseNotLastSituationInvoice=S'ha desactivat perquè la factura no es pot esborrar. Aquesta factura no és l'última del cicle de facturació de situació.
|
||||
DisabledBecauseNotErasable=S'ha desactivat perquè no es pot esborrar
|
||||
InvoiceStandard=Factura estàndard
|
||||
InvoiceStandardAsk=Factura estàndard
|
||||
@ -99,12 +99,12 @@ PaymentAmount=Import pagament
|
||||
PaymentHigherThanReminderToPay=Pagament superior a la resta a pagar
|
||||
HelpPaymentHigherThanReminderToPay=Atenció, l'import del pagament d'una o més factures és superior a l'import pendent de pagar. <br> Editeu la vostra entrada; en cas contrari, confirmeu i considereu la possibilitat de crear un abonament per l'excés rebut per cada factura pagada de més.
|
||||
HelpPaymentHigherThanReminderToPaySupplier=Atenció, l'import del pagament d'una o més factures és superior a l'import pendent de pagar.<br>Editeu l'entrada, en cas contrari, confirmeu i considereu la possibilitat de crear un abonament per l'excés pagat per cada factura pagada de més.
|
||||
ClassifyPaid=Classifica "Pagat"
|
||||
ClassifyUnPaid=Classifica "sense pagar"
|
||||
ClassifyPaidPartially=Classifica "Pagat parcialment"
|
||||
ClassifyCanceled=Classifica "Abandonat"
|
||||
ClassifyClosed=Classifica "Tancat"
|
||||
ClassifyUnBilled=Classifiqueu 'facturar'
|
||||
ClassifyPaid=Marca «Pagat»
|
||||
ClassifyUnPaid=Marca «No pagat»
|
||||
ClassifyPaidPartially=Marca «Pagat parcialment»
|
||||
ClassifyCanceled=Marca «Abandonats»
|
||||
ClassifyClosed=Marca «Tancat»
|
||||
ClassifyUnBilled=Marca «No facturat»
|
||||
CreateBill=Crear factura
|
||||
CreateCreditNote=Crear abonament
|
||||
AddBill=Crear factura o abonament
|
||||
@ -131,7 +131,7 @@ BillStatusPaidBackOrConverted=Nota de crèdit reembossada o marcada com a crèdi
|
||||
BillStatusConverted=Pagada (llesta per a utilitzar-se en la factura final)
|
||||
BillStatusCanceled=Abandonada
|
||||
BillStatusValidated=Validada (a pagar)
|
||||
BillStatusStarted=Pagada parcialment
|
||||
BillStatusStarted=Començat
|
||||
BillStatusNotPaid=Pendent
|
||||
BillStatusNotRefunded=No reemborsat
|
||||
BillStatusClosedUnpaid=Tancada (Pendent)
|
||||
@ -143,7 +143,7 @@ Refunded=Reemborsada
|
||||
BillShortStatusConverted=Tractada
|
||||
BillShortStatusCanceled=Abandonada
|
||||
BillShortStatusValidated=Validada
|
||||
BillShortStatusStarted=Començada
|
||||
BillShortStatusStarted=Començat
|
||||
BillShortStatusNotPaid=Pendent
|
||||
BillShortStatusNotRefunded=No reemborsat
|
||||
BillShortStatusClosedUnpaid=Tancada
|
||||
@ -172,7 +172,7 @@ NewBill=Factura nova
|
||||
LastBills=Últimes %s factures
|
||||
LatestTemplateInvoices=Últimes %s plantilles de factura
|
||||
LatestCustomerTemplateInvoices=Últimes %s plantilles de factures de client
|
||||
LatestSupplierTemplateInvoices=Darreres %s plantilles de factures de proveïdor
|
||||
LatestSupplierTemplateInvoices=Últimes %s plantilles de factures de proveïdor
|
||||
LastCustomersBills=Últimes %s factures de client
|
||||
LastSuppliersBills=Últimes %s factures de proveïdor
|
||||
AllBills=Totes les factures
|
||||
@ -188,7 +188,7 @@ ConfirmValidateBill=Està segur de voler validar aquesta factura amb la referèn
|
||||
ConfirmUnvalidateBill=Està segur de voler tornar la factura <b>%s</b> a l'estat esborrany?
|
||||
ConfirmClassifyPaidBill=Està segur de voler classificar la factura <b>%s</b> com pagada?
|
||||
ConfirmCancelBill=Està segur de voler anul·lar la factura <b>%s</b>?
|
||||
ConfirmCancelBillQuestion=Per quina raó vols classificar aquesta factura com 'abandonada'?
|
||||
ConfirmCancelBillQuestion=Per què voleu marcar aquesta factura com a «abandonada»?
|
||||
ConfirmClassifyPaidPartially=Està segur de voler classificar la factura <b>%s</b> com pagada?
|
||||
ConfirmClassifyPaidPartiallyQuestion=Aquesta factura no s'ha pagat completament. Quin és el motiu de tancament d'aquesta factura?
|
||||
ConfirmClassifyPaidPartiallyReasonAvoir=La resta a pagar <b>(%s %s)</b> és un descompte atorgat perquè el pagament es va fer abans de temps. Regularitzaré l'IVA d'aquest descompte amb un abonament.
|
||||
@ -196,7 +196,7 @@ ConfirmClassifyPaidPartiallyReasonDiscount=La resta a pagar <b>(%s %s)</b> és u
|
||||
ConfirmClassifyPaidPartiallyReasonDiscountNoVat=La resta a pagar <b>(%s %s)</b> és un descompte acordat després de la facturació. Accepto perdre l'IVA d'aquest descompte
|
||||
ConfirmClassifyPaidPartiallyReasonDiscountVat=La resta a pagar <b>(%s %s)</b> és un descompte atorgat perquè el pagament es va fer abans de temps. Recupero l'IVA d'aquest descompte, sense un abonament.
|
||||
ConfirmClassifyPaidPartiallyReasonBadCustomer=Client morós
|
||||
ConfirmClassifyPaidPartiallyReasonBankCharge=Deducció per banc (comissions bancàries intermediaris)
|
||||
ConfirmClassifyPaidPartiallyReasonBankCharge=Deducció per banc (comissions bancàries)
|
||||
ConfirmClassifyPaidPartiallyReasonProductReturned=Productes retornats en part
|
||||
ConfirmClassifyPaidPartiallyReasonOther=D'altra raó
|
||||
ConfirmClassifyPaidPartiallyReasonDiscountNoVatDesc=Aquesta opció és possible si la vostra factura ha rebut els comentaris adequats. (Exemple «Només l'impost corresponent al preu realment pagat dona dret a la deducció»)
|
||||
@ -204,7 +204,7 @@ ConfirmClassifyPaidPartiallyReasonDiscountVatDesc=En alguns països, aquesta opc
|
||||
ConfirmClassifyPaidPartiallyReasonAvoirDesc=Aquesta elecció és l'elecció que s'ha de prendre si les altres no són aplicables
|
||||
ConfirmClassifyPaidPartiallyReasonBadCustomerDesc=Un <b> client morós </b> és un client que es nega a pagar el seu deute.
|
||||
ConfirmClassifyPaidPartiallyReasonProductReturnedDesc=Aquesta elecció és possible si el cas de pagament incomplet és arran d'una devolució de part dels productes
|
||||
ConfirmClassifyPaidPartiallyReasonBankChargeDesc=L'import no pagat és <b> comissions bancàries intermediaris </b> , deduïdes directament de l'import correcte <b> </b> pagat pel Client.
|
||||
ConfirmClassifyPaidPartiallyReasonBankChargeDesc=L'import no pagat son <b>comissions bancàries</b>, deduïdes directament de <b>l'import correcte</b> pagat pel Client.
|
||||
ConfirmClassifyPaidPartiallyReasonOtherDesc=Utilitza aquesta opció si totes les altres no són adequades, per exemple, en la següent situació: <br>- el pagament no s'ha completat perquè alguns productes es van tornar a enviar<br>- la quantitat reclamada és massa important perquè s'ha oblidat un descompte <br>En tots els casos, s'ha de corregir l'import excessiu en el sistema de comptabilitat mitjançant la creació d’un abonament.
|
||||
ConfirmClassifyAbandonReasonOther=Altres
|
||||
ConfirmClassifyAbandonReasonOtherDesc=Aquesta elecció serà per a qualsevol altre cas. Per exemple arran de la intenció de crear una factura rectificativa.
|
||||
@ -275,7 +275,7 @@ DatePointOfTax=Punt d'impostos
|
||||
NoInvoice=Cap factura
|
||||
NoOpenInvoice=No hi ha factura oberta
|
||||
NbOfOpenInvoices=Nombre de factures obertes
|
||||
ClassifyBill=Classifica la factura
|
||||
ClassifyBill=Marca la factura
|
||||
SupplierBillsToPay=Factures de proveïdors pendents de pagament
|
||||
CustomerBillsUnpaid=Factures de client pendents de cobrament
|
||||
NonPercuRecuperable=No percebut recuperable
|
||||
@ -535,12 +535,12 @@ CantRemovePaymentSalaryPaid=No es pot eliminar el pagament perquè el salari est
|
||||
ExpectedToPay=Esperant el pagament
|
||||
CantRemoveConciliatedPayment=No es pot eliminar el pagament reconciliat
|
||||
PayedByThisPayment=Pagada per aquest pagament
|
||||
ClosePaidInvoicesAutomatically=Classifiqueu automàticament totes les factures estàndard, de pagament inicial o de reemplaçament com a "Pagades" quan el pagament es realitzi completament.
|
||||
ClosePaidCreditNotesAutomatically=Classifiqueu automàticament totes les notes de crèdit com a "Pagades" quan es faci la devolució íntegra.
|
||||
ClosePaidContributionsAutomatically=Classifiqueu automàticament totes les contribucions socials o fiscals com a "Pagades" quan el pagament es realitzi íntegrament.
|
||||
ClosePaidVATAutomatically=Classifica automàticament la declaració d'IVA com a "Pagada" quan el pagament es realitzi completament.
|
||||
ClosePaidSalaryAutomatically=Classifiqueu automàticament el salari com a "Pagat" quan el pagament es faci completament.
|
||||
AllCompletelyPayedInvoiceWillBeClosed=Totes les factures no pendents de pagament es tancaran automàticament amb l'estat "Pagat".
|
||||
ClosePaidInvoicesAutomatically=Marca automàticament totes les factures estàndard, de pagament inicial o de substitució com a «Pagades» quan el pagament s'hagi fet completament.
|
||||
ClosePaidCreditNotesAutomatically=Marca automàticament totes les notes de crèdit com a «Pagades» quan el reemborsament s'hagi fet completament.
|
||||
ClosePaidContributionsAutomatically=Marca automàticament totes les cotitzacions socials o fiscals com a "Pagades" quan el pagament s'hagi fet íntegrament.
|
||||
ClosePaidVATAutomatically=Marca automàticament la declaració d'IVA com a «Pagada» quan el pagament s'hagi fet completament.
|
||||
ClosePaidSalaryAutomatically=Marca automàticament el sou com a «Pagat» quan el pagament s'hagi fet completament.
|
||||
AllCompletelyPayedInvoiceWillBeClosed=Totes les factures sense pagaments pendents es tancaran automàticament amb l'estat «Pagat».
|
||||
ToMakePayment=Pagar
|
||||
ToMakePaymentBack=Reemborsar
|
||||
ListOfYourUnpaidInvoices=Llistat de factures impagades
|
||||
@ -555,7 +555,7 @@ PDFCrevetteDescription=Plantilla Crevette per factures PDF. Una plantilla de fac
|
||||
TerreNumRefModelDesc1=Retorna el número en el format %syymm-nnnn per a les factures estàndard i %syymm-nnnn per a les notes de crèdit on aa és any, mm és mes i nnnn és un número d’increment automàtic seqüencial sense interrupció i sense retorn a 0
|
||||
MarsNumRefModelDesc1=Número de devolució en el format %syymm-nnnn per a factures estàndard, %syymm-nnnn per a factures de substitució, %syymm-nnnn per a factures d’avançament i %syymm notes i any sense descans i sense retorn a 0
|
||||
TerreNumRefModelError=Ja existeix una factura que comença amb $syymm i no és compatible amb aquest model de seqüència. Elimineu-la o canvieu-li el nom per a activar aquest mòdul.
|
||||
CactusNumRefModelDesc1=Número de devolució en el format %syymm-nnnn per a les factures estàndard, %syymm-nnnn per a les notes de crèdit i %syymm-nnnn per a les factures d’avançament en què yy és any, mm és mes i nnnn és un número que no ha de retorn automàtic 0
|
||||
CactusNumRefModelDesc1=Retorna un número en el format %syymm-nnnn per a factures estàndard, %syymm-nnnn per a devolucions i %syymm-nnnn per a factures de bestreta on yy és l'any, mm és el mes i nnnn és un número seqüencial auto-incrementat sense ruptura ni retorn a 0
|
||||
EarlyClosingReason=Motiu de tancament anticipat
|
||||
EarlyClosingComment=Nota de tancament anticipat
|
||||
##### Types de contacts #####
|
||||
@ -626,8 +626,8 @@ PaymentRegisteredAndInvoiceSetToPaid=Pagament registrat i factura %s configurada
|
||||
SendEmailsRemindersOnInvoiceDueDate=Envieu un recordatori per correu electrònic per a les factures no pagades
|
||||
MakePaymentAndClassifyPayed=Registre de pagament
|
||||
BulkPaymentNotPossibleForInvoice=El pagament massiu no és possible per a la factura %s (tipus o estat incorrecte)
|
||||
MentionVATDebitOptionIsOn=Option to pay tax based on debits
|
||||
MentionVATDebitOptionIsOn=Opció de pagar impostos en funció de dèbits
|
||||
MentionCategoryOfOperations=Categoria d'operacions
|
||||
MentionCategoryOfOperations0=Lliurament de mercaderies
|
||||
MentionCategoryOfOperations1=Prestació de serveis
|
||||
MentionCategoryOfOperations2=Mixed - Delivery of goods & provision of services
|
||||
MentionCategoryOfOperations2=Mixt: lliurament de béns i prestació de serveis
|
||||
|
||||
@ -18,13 +18,13 @@ BoxLastActions=Últimes accions
|
||||
BoxLastContracts=Últims contractes
|
||||
BoxLastContacts=Últims contactes/adreces
|
||||
BoxLastMembers=Últims socis
|
||||
BoxLastModifiedMembers=Darrers membres modificats
|
||||
BoxLastMembersSubscriptions=Últimes subscripcions de membres
|
||||
BoxLastModifiedMembers=Últims socis modificats
|
||||
BoxLastMembersSubscriptions=Últimes subscripcions de socis
|
||||
BoxFicheInter=Últimes intervencions
|
||||
BoxCurrentAccounts=Balanç de comptes oberts
|
||||
BoxTitleMemberNextBirthdays=Aniversaris d'aquest mes (membres)
|
||||
BoxTitleMembersByType=Membres per tipus i estat
|
||||
BoxTitleMembersByTags=Members by tags and status
|
||||
BoxTitleMembersByTags=Socis per etiquetes i estat
|
||||
BoxTitleMembersSubscriptionsByYear=Subscripcions de membres per any
|
||||
BoxTitleLastRssInfos=Últimes %s notícies de %s
|
||||
BoxTitleLastProducts=Productes / Serveis: últims %s modificats
|
||||
@ -33,8 +33,8 @@ BoxTitleLastSuppliers=Últims %s proveïdors registrats
|
||||
BoxTitleLastModifiedSuppliers=Proveïdors: últims %s modificats
|
||||
BoxTitleLastModifiedCustomers=Clients: últims %s modificats
|
||||
BoxTitleLastCustomersOrProspects=Últims %s clients o clients potencials
|
||||
BoxTitleLastCustomerBills=Darreres %s factures a client modificades
|
||||
BoxTitleLastSupplierBills=Darreres %s factures de proveïdor modificades
|
||||
BoxTitleLastCustomerBills=Últimes %s factures de client modificades
|
||||
BoxTitleLastSupplierBills=Últimes %s factures de proveïdor modificades
|
||||
BoxTitleLastModifiedProspects=Clients Potencials: últims %s modificats
|
||||
BoxTitleLastModifiedMembers=Últims %s socis
|
||||
BoxTitleLastFicheInter=Últimes %s intervencions modificades
|
||||
@ -48,12 +48,12 @@ BoxOldestExpiredServices=Serveis antics expirats
|
||||
BoxOldestActions=Els esdeveniments més antics per a fer
|
||||
BoxLastExpiredServices=Últims %s contactes amb serveis actius expirats
|
||||
BoxTitleLastActionsToDo=Últimes %s accions a fer
|
||||
BoxTitleOldestActionsToDo=Oldest %s events to do, not completed
|
||||
BoxTitleLastContracts=Últims contractes %s que es van modificar
|
||||
BoxTitleLastModifiedDonations=Últimes donacions %s que es van modificar
|
||||
BoxTitleLastModifiedExpenses=Últims informes de despeses %s que es van modificar
|
||||
BoxTitleLatestModifiedBoms=Últims BOMs %s que es van modificar
|
||||
BoxTitleLatestModifiedMos=Últimes comandes de fabricació %s que es van modificar
|
||||
BoxTitleOldestActionsToDo=Els esdeveniments %s més antics per a fer, no s'han completat
|
||||
BoxTitleLastContracts=Últims %s contractes que s'han modificat
|
||||
BoxTitleLastModifiedDonations=Últimes %s donacions que s'han modificat
|
||||
BoxTitleLastModifiedExpenses=Últims %s informes de despeses que s'han modificat
|
||||
BoxTitleLatestModifiedBoms=Últims %s BOMs que s'han modificat
|
||||
BoxTitleLatestModifiedMos=Últimes %s ordres de fabricació modificades
|
||||
BoxTitleLastOutstandingBillReached=Clients que han superat el màxim pendent
|
||||
BoxGlobalActivity=Activitat global
|
||||
BoxGoodCustomers=Bons clients
|
||||
@ -61,7 +61,7 @@ BoxTitleGoodCustomers=% bons clients
|
||||
BoxScheduledJobs=Tasques programades
|
||||
BoxTitleFunnelOfProspection=Oportunitat embut
|
||||
FailedToRefreshDataInfoNotUpToDate=No s'ha pogut actualitzar el flux RSS. Última data d'actualització amb èxit: %s
|
||||
LastRefreshDate=Última data que es va refrescar
|
||||
LastRefreshDate=Última data d'actualització
|
||||
NoRecordedBookmarks=No hi ha marcadors personals.
|
||||
ClickToAdd=Feu clic aquí per a afegir.
|
||||
NoRecordedCustomers=Cap client registrat
|
||||
@ -94,8 +94,8 @@ BoxTitleLatestModifiedSupplierOrders=Comandes a Proveïdor: últimes %s modifica
|
||||
BoxTitleLastModifiedCustomerBills=Factures del client: últimes %s modificades
|
||||
BoxTitleLastModifiedCustomerOrders=Comandes de venda: últimes %s modificades
|
||||
BoxTitleLastModifiedPropals=Últims %s pressupostos modificats
|
||||
BoxTitleLatestModifiedJobPositions=Últims llocs de treball modificats %s
|
||||
BoxTitleLatestModifiedCandidatures=Últimes aplicacions de treball modificades %s
|
||||
BoxTitleLatestModifiedJobPositions=Últims %s llocs de treball modificats
|
||||
BoxTitleLatestModifiedCandidatures=Últimes %s sol·licituds de feina modificades
|
||||
ForCustomersInvoices=Factures a clients
|
||||
ForCustomersOrders=Comandes de clients
|
||||
ForProposals=Pressupostos
|
||||
@ -103,7 +103,7 @@ LastXMonthRolling=Els últims %s mesos consecutius
|
||||
ChooseBoxToAdd=Afegeix el panell a la teva taula de control
|
||||
BoxAdded=S'ha afegit el panell a la teva taula de control
|
||||
BoxTitleUserBirthdaysOfMonth=Aniversaris d'aquest mes (usuaris)
|
||||
BoxLastManualEntries=Últim registre de comptabilitat introduït manualment o sense document d'origen
|
||||
BoxLastManualEntries=Últim registre en comptabilitat introduït manualment o sense document d'origen
|
||||
BoxTitleLastManualEntries=%s últim registre introduït manualment o sense document d'origen
|
||||
NoRecordedManualEntries=No hi ha registres d'entrades manuals en comptabilitat
|
||||
BoxSuspenseAccount=Operació comptable de comptes amb compte de suspens
|
||||
@ -118,6 +118,27 @@ BoxCustomersOutstandingBillReached=Clients que superen el límit pendent
|
||||
UsersHome=Usuaris i grups domèstics
|
||||
MembersHome=Membres a casa
|
||||
ThirdpartiesHome=Inici Tercers
|
||||
productindex=Inici de productes i serveis
|
||||
mrpindex=Inici MRP
|
||||
commercialindex=Inici de comercial
|
||||
projectsindex=Inici de projectes
|
||||
invoiceindex=Inici de factures
|
||||
hrmindex=Inici de factures
|
||||
TicketsHome=Entrades a casa
|
||||
stockindex=Inici d'estocs
|
||||
sendingindex=Inici d'enviaments
|
||||
receptionindex=inici de recepcions
|
||||
activityindex=Inici d'activitat
|
||||
proposalindex=Inici de propostes
|
||||
ordersindex=Inici de comandes
|
||||
orderssuppliersindex=Inici de comandes a proveïdors
|
||||
contractindex=Inici de contractes
|
||||
interventionindex=Inici de intervencions
|
||||
suppliersproposalsindex=Inici de propostes de proveïdors
|
||||
donationindex=Inici de donacions
|
||||
specialexpensesindex=Inici de despeses especials
|
||||
expensereportindex=Inici de informe de despeses
|
||||
mailingindex=Inici de correu massiu
|
||||
opensurveyindex=Inici d'enquesta oberta
|
||||
AccountancyHome=Inici Comptabilitat
|
||||
ValidatedProjects=Projectes validats
|
||||
|
||||
@ -312,7 +312,7 @@ CustomerRelativeDiscountShort=Descompte relatiu
|
||||
CustomerAbsoluteDiscountShort=Descompte fixe
|
||||
CompanyHasRelativeDiscount=Aquest client té un descompte per defecte de <b>%s%%</b>
|
||||
CompanyHasNoRelativeDiscount=Aquest client no té descomptes relatius per defecte
|
||||
HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> with this vendor
|
||||
HasRelativeDiscountFromSupplier=Teniu un descompte predeterminat de <b>%s%%</b> amb aquest proveïdor
|
||||
HasNoRelativeDiscountFromSupplier=No hi ha descompte relatiu predeterminat amb aquest venedor
|
||||
CompanyHasAbsoluteDiscount=Aquest client té descomptes disponibles (notes de crèdit o bestretes) per <b>%s</b> %s
|
||||
CompanyHasDownPaymentOrCommercialDiscount=Aquest client té un descompte disponible (comercial, de pagament) per a <b>%s</b>%s
|
||||
@ -357,7 +357,7 @@ RequiredIfSupplier=Obligatori si un tercer és proveïdor
|
||||
ValidityControledByModule=Validesa controlada pel mòdul
|
||||
ThisIsModuleRules=Regles per a aquest mòdul
|
||||
ProspectToContact=Client potencial a contactar
|
||||
CompanyDeleted=L'empresa "%s" ha estat eliminada
|
||||
CompanyDeleted=L'empresa «%s» s'ha suprimit de la base de dades.
|
||||
ListOfContacts=Llistat de contactes
|
||||
ListOfContactsAddresses=Llistat de contactes
|
||||
ListOfThirdParties=Llista de tercers
|
||||
@ -386,7 +386,7 @@ VATIntraCheck=Verificar
|
||||
VATIntraCheckDesc=El NIF Intracomunitari ha d'incloure el prefix del país. L'enllaç <b>%s</b> utilitza el servei europeu de verificació de NIF (VIES) que requereix accés a Internet des del servidor Dolibarr.
|
||||
VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
|
||||
VATIntraCheckableOnEUSite=Verifica el NIF Intracomunitari a la web de la Comissió Europea
|
||||
VATIntraManualCheck=També podeu comprovar manualment al lloc web de la Comissió Europea <a href="%s" target="_blank" rel="noopener noreferrer"> %s </a>
|
||||
VATIntraManualCheck=També podeu comprovar manualment al lloc web de la Comissió Europea <a href="%s" target="_blank" rel="noopener noreferrer">%s</a>
|
||||
ErrorVATCheckMS_UNAVAILABLE=Comprovació impossible. El servei de comprovació no és prestat pel país membre (%s).
|
||||
NorProspectNorCustomer=Ni client, ni client potencial
|
||||
JuridicalStatus=Tipus d'entitat empresarial
|
||||
@ -462,7 +462,7 @@ ListSuppliersShort=Llistat de proveïdors
|
||||
ListProspectsShort=Llistat de clients potencials
|
||||
ListCustomersShort=Llistat de clients
|
||||
ThirdPartiesArea=Àrea de tercers i contactes
|
||||
LastModifiedThirdParties=Últims tercers %s que van ser modificats
|
||||
LastModifiedThirdParties=Últims %s tercers que s'han modificat
|
||||
UniqueThirdParties=Nombre total de tercers
|
||||
InActivity=Actiu
|
||||
ActivityCeased=Tancat
|
||||
@ -499,7 +499,7 @@ OutOfEurope=Fora d’Europa (CEE)
|
||||
CurrentOutstandingBillLate=Factura pendent actual en retard
|
||||
BecarefullChangeThirdpartyBeforeAddProductToInvoice=Ves amb compte, en funció de la configuració del preu del producte, has de canviar de tercer abans d’afegir el producte al TPV.
|
||||
EmailAlreadyExistsPleaseRewriteYourCompanyName=El correu electrònic ja existeix, si us plau, reescriu el nom de la teva empresa
|
||||
TwoRecordsOfCompanyName=more than one record exists for this company, please contact us to complete your partnership request
|
||||
TwoRecordsOfCompanyName=Hi ha més d'un registre per a aquesta empresa, poseu-vos en contacte amb nosaltres per a completar la vostra sol·licitud d'associació
|
||||
CompanySection=Secció d'empresa
|
||||
ShowSocialNetworks=Mostra les xarxes socials
|
||||
HideSocialNetworks=Amaga les xarxes socials
|
||||
|
||||
@ -1,13 +1,13 @@
|
||||
# Dolibarr language file - Source file is en_US - compta
|
||||
MenuFinancial=Financera
|
||||
TaxModuleSetupToModifyRules=Aneu a <a href="%s"> Configuració del mòdul Impostos </a> per a modificar les regles de càlcul
|
||||
TaxModuleSetupToModifyRulesLT=Aneu a <a href="%s"> Configuració de l'empresa </a> per a modificar les regles de càlcul
|
||||
TaxModuleSetupToModifyRulesLT=Aneu a <a href="%s">Configuració de l'empresa</a> per a modificar les regles de càlcul
|
||||
OptionMode=Opció de gestió comptable
|
||||
OptionModeTrue=Opció Ingressos-Despeses
|
||||
OptionModeVirtual=Opció Crèdits-Deutes
|
||||
OptionModeTrueDesc=En aquest context, la facturació es calcula sobre els pagaments (data dels pagaments). La validesa de les xifres només està assegurada si la comptabilitat es controla mitjançant l'entrada/sortida dels comptes mitjançant factures.
|
||||
OptionModeVirtualDesc=En aquest context, la facturació es calcula sobre les factures (data de validació). Quan es venguin aquestes factures, tant si s'han pagat com si no, s'enumeren a la sortida de la facturació.
|
||||
FeatureIsSupportedInInOutModeOnly=Funció disponible només en el mode comptes CREDITS-DEUTES (Veure la configuració del mòdul comptes)
|
||||
FeatureIsSupportedInInOutModeOnly=Funció només disponible en el mode de comptabilitat CRÈDITS-DEUTES (vegeu la configuració del mòdul de comptabilitat)
|
||||
VATReportBuildWithOptionDefinedInModule=Els imports obtinguts es calculen segons la configuració del mòdul Impostos.
|
||||
LTReportBuildWithOptionDefinedInModule=Els imports obtinguts es calculen segons la configuració de l'Empresa
|
||||
Param=Configuració
|
||||
@ -73,7 +73,7 @@ SocialContributions=Impostos varis
|
||||
SocialContributionsDeductibles=Impostos varis deduïbles
|
||||
SocialContributionsNondeductibles=Impostos varis no deduïbles
|
||||
DateOfSocialContribution=Data de l’impost social o fiscal
|
||||
LabelContrib=Aportació d'etiquetes
|
||||
LabelContrib=Nom d'aportació
|
||||
TypeContrib=Tipus d'aportació
|
||||
MenuSpecialExpenses=Pagaments especials
|
||||
MenuTaxAndDividends=Impostos i càrregues
|
||||
@ -132,7 +132,7 @@ ByThirdParties=Per tercer
|
||||
ByUserAuthorOfInvoice=Per autor de la factura
|
||||
CheckReceipt=Ingrés de xec
|
||||
CheckReceiptShort=Ingrés de xec
|
||||
LastCheckReceiptShort=Últimes %s remeses de xec
|
||||
LastCheckReceiptShort=Últims %s rebuts de xec
|
||||
NewCheckReceipt=Descompte nou
|
||||
NewCheckDeposit=Ingrés nou
|
||||
NewCheckDepositOn=Crear el rebut per a l'ingrés al compte: %s
|
||||
@ -142,9 +142,9 @@ NbOfCheques=Nombre de xecs
|
||||
PaySocialContribution=Pagar un impost varis
|
||||
PayVAT=Paga una declaració d’IVA
|
||||
PaySalary=Pagar una targeta salarial
|
||||
ConfirmPaySocialContribution=Esteu segur que voleu classificar aquest impost varis com a pagat?
|
||||
ConfirmPayVAT=Esteu segur que voleu classificar aquesta declaració d'IVA com a pagada?
|
||||
ConfirmPaySalary=Esteu segur que voleu classificar aquesta targeta salarial com a pagada?
|
||||
ConfirmPaySocialContribution=Esteu segur que voleu marcar aquest impost varis com a pagat?
|
||||
ConfirmPayVAT=Esteu segur que voleu marcar aquesta declaració d'IVA com a pagada?
|
||||
ConfirmPaySalary=Esteu segur que voleu marcar aquesta fitxa salarial com a pagada?
|
||||
DeleteSocialContribution=Elimina un pagament d'impost varis
|
||||
DeleteVAT=Suprimeix una declaració d’IVA
|
||||
DeleteSalary=Elimina una fitxa salarial
|
||||
@ -236,7 +236,7 @@ Pcg_subtype=Subtipus de compte
|
||||
InvoiceLinesToDispatch=Línies de factures a desglossar
|
||||
ByProductsAndServices=Per producte i servei
|
||||
RefExt=Ref. externa
|
||||
ToCreateAPredefinedInvoice=Per a crear una plantilla de factura, creeu una factura estàndard, després, sense validar-la, feu clic al botó "%s".
|
||||
ToCreateAPredefinedInvoice=Per a crear una plantilla de factura, creeu una factura estàndard, després, sense validar-la, feu clic al botó «%s».
|
||||
LinkedOrder=Enllaçar a una comanda
|
||||
Mode1=Mètode 1
|
||||
Mode2=Mètode 2
|
||||
@ -252,7 +252,7 @@ ACCOUNTING_VAT_PAY_ACCOUNT=Compte (del pla comptable) que s'utilitzarà com a co
|
||||
ACCOUNTING_ACCOUNT_CUSTOMER=Compte (del pla comptable) utilitzat per a tercers «clients».
|
||||
ACCOUNTING_ACCOUNT_CUSTOMER_Desc=El compte comptable dedicat definit a la fitxa de tercer només s’utilitzarà per a la comptabilitat auxiliar. Aquest s'utilitzarà per al llibre major i com a valor per defecte de la comptabilitat auxiliar si no es defineix un compte comptable de client dedicat a tercers.
|
||||
ACCOUNTING_ACCOUNT_SUPPLIER=Compte (del pla comptable) utilitzat per a tercers «proveïdors».
|
||||
ACCOUNTING_ACCOUNT_SUPPLIER_Desc=El compte comptable dedicat definit a la fitxa de tercers només s'utilitzarà per al Llibre Major. Aquest serà utilitzat pel Llibre Major i com a valor predeterminat del subcompte si no es defineix un compte comptable a la fitxa del tercer.
|
||||
ACCOUNTING_ACCOUNT_SUPPLIER_Desc=El compte comptable dedicat definit a la fitxa de tercers s'utilitzarà només per a la comptabilitat de subllibre. Aquest s'utilitzarà per al Llibre Major i com a valor predeterminat de la comptabilitat del subllibre si no es defineix un compte comptable de proveïdor dedicat a tercers.
|
||||
ConfirmCloneTax=Confirma el clonat d'un impost social / fiscal
|
||||
ConfirmCloneVAT=Confirma la còpia d’una declaració d’IVA
|
||||
ConfirmCloneSalary=Confirmeu el clon d'un salari
|
||||
|
||||
@ -57,12 +57,12 @@ LastContracts=Últims %s contractes
|
||||
LastModifiedServices=Últims %s serveis modificats
|
||||
ContractStartDate=Data inici
|
||||
ContractEndDate=Data finalització
|
||||
DateStartPlanned=Data prevista posada en servei
|
||||
DateStartPlannedShort=Data inici prevista
|
||||
DateStartPlanned=Data d'inici prevista
|
||||
DateStartPlannedShort=Data d'inici prevista
|
||||
DateEndPlanned=Data prevista finalització del servei
|
||||
DateEndPlannedShort=Data final prevista
|
||||
DateStartReal=Data real posada en servei
|
||||
DateStartRealShort=Data inici
|
||||
DateStartReal=Data d'inici real
|
||||
DateStartRealShort=Data d'inici real
|
||||
DateEndReal=Data real finalització del servei
|
||||
DateEndRealShort=Data real finalització
|
||||
CloseService=Finalitzar servei
|
||||
@ -89,7 +89,7 @@ ListOfServicesToExpire=Llistat de serveis actius a expirar
|
||||
NoteListOfYourExpiredServices=Aquest llistat només conté els serveis de contractes de tercers que tens enllaçats com a agent comercial
|
||||
StandardContractsTemplate=Plantilla de contracte Standard
|
||||
ContactNameAndSignature=Per %s, nom i signatura:
|
||||
OnlyLinesWithTypeServiceAreUsed=Només les línies amb tipus "Servei" seran clonades.
|
||||
OnlyLinesWithTypeServiceAreUsed=Només es clonaran les línies amb el tipus «Servei».
|
||||
ConfirmCloneContract=Esteu segur que voleu clonar el contracte <b> %s </b>?
|
||||
LowerDateEndPlannedShort=Baixa data de finalització planificada dels serveis actius
|
||||
SendContractRef=Informació del contracte __REF__
|
||||
|
||||
@ -64,7 +64,7 @@ CronTaskInactive=Aquest treball està desactivat (no programat)
|
||||
CronId=Id
|
||||
CronClassFile=Filename with class
|
||||
CronModuleHelp=Nom del directori del mòdul de Dolibarr (també funciona amb mòduls externs). <BR> Per exemple, per cridar al mètode "fetch" de l'objecte Producte de Dolibarr /htdocs/<u>product</u>/class/product.class.php, el valor pel mòdul és <br><i>product</i>
|
||||
CronClassFileHelp=La ruta relativa i el nom del fitxer a carregar (la ruta és relativa al directori arrel del servidor web). <BR> Per exemple, per cridar al mètode "fetch" de l'objecte Producte de Dolibarr /htdocs/product/class/<u>product.class.php</u>, el valor del nom del fitxer de classe és<br> <i>product/class/product.class.php</i>
|
||||
CronClassFileHelp=El camí relatiu i el nom del fitxer a carregar (el camí és relatiu al directori arrel del servidor web). <BR> Per exemple, per a cridar al mètode fetch de l'objecte Producte de Dolibarr htdocs/product/class/<u>product.class.php</u>, el valor del nom del fitxer de classe és <br><i>product/class/product.class.php</i>
|
||||
CronObjectHelp=El nom de l'objecte a carregar. <BR> Per exemple, per cridar al mètode "fetch" de l'objecte Producte de Dolibarr /htdocs/product/class/product.class.php, el valor pel nom del fitxer de classe és<br> <i>Product</i>
|
||||
CronMethodHelp=El mètode d'objecte a cridar. <BR> Per exemple, per cridar al mètode "fetch" de l'objecte Producte de Dolibarr /htdocs/product/class/product.class.php, el valor pel mètode és<br> <i>fetch</i>
|
||||
CronArgsHelp=Els arguments del mètode. <BR> Per exemple, cridar al mètode "fetch" de l'objecte Producte de Dolibarr /htdocs/product/class/product.class.php, el valor dels paràmetres pot ser <br> <i>0, ProductRef</i>
|
||||
|
||||
@ -5,7 +5,7 @@ ECMSectionManual=Carpeta manual
|
||||
ECMSectionAuto=Carpeta automàtica
|
||||
ECMSectionsManual=Arbre manual
|
||||
ECMSectionsAuto=Arbre automàtic
|
||||
ECMSectionsMedias=Medias tree
|
||||
ECMSectionsMedias=Arbre dels multimèdia
|
||||
ECMSections=Carpetes
|
||||
ECMRoot=Arrel del ECM
|
||||
ECMNewSection=Carpeta nova
|
||||
@ -17,9 +17,9 @@ ECMNbOfFilesInSubDir=Nombre d'arxius en les subcarpetes
|
||||
ECMCreationUser=Creador
|
||||
ECMArea=Àrea SGD/GCE
|
||||
ECMAreaDesc=L’àrea SGD/GED (Sistema de Gestió de Documents / Gestió de Continguts Electrònics) us permet desar, compartir i cercar ràpidament tota mena de documents a Dolibarr.
|
||||
ECMAreaDesc2a=* Manual directories can be used to save documents not linked to a particular element.
|
||||
ECMAreaDesc2b=* Automatic directories are filled automatically when adding documents from the page of an element.
|
||||
ECMAreaDesc3=* Medias directories are files into the subdirectory <b>/medias</b> of documents directory, readable by everybody with no need to be logged and no need to have the file shared explicitely. It is used to store image files from emailing or website module.
|
||||
ECMAreaDesc2a=* Els directoris manuals es poden utilitzar per a desar documents no vinculats a un element concret.
|
||||
ECMAreaDesc2b=* Els directoris automàtics s'omplen automàticament quan s'afegeixen documents des de la pàgina d'un element.
|
||||
ECMAreaDesc3=* Els directoris de multimèdia són fitxers del subdirectori <b>/medias</b> del directori de documents, llegibles per a tothom sense necessitat de registrar-se i sense necessitat de compartir el fitxer de manera explícita. S'utilitza per a emmagatzemar fitxers d'imatge per al mòdul de correu electrònic o lloc web, per exemple.
|
||||
ECMSectionWasRemoved=La carpeta <b>%s</b> ha estat eliminada
|
||||
ECMSectionWasCreated=S'ha creat el directori <b>%s</b>.
|
||||
ECMSearchByKeywords=Cercar per paraules clau
|
||||
|
||||
@ -15,10 +15,10 @@ ErrorGroupAlreadyExists=El grup %s ja existeix.
|
||||
ErrorEmailAlreadyExists=El correu electrònic %s ja existeix.
|
||||
ErrorRecordNotFound=Registre no trobat
|
||||
ErrorRecordNotFoundShort=No trobat
|
||||
ErrorFailToCopyFile=No s'ha pogut copiar el fitxer "<b> %s </b>" a "<b> %s </b>".
|
||||
ErrorFailToCopyFile=No s'ha pogut copiar el fitxer «<b>%s</b>» a «<b>%s</b>».
|
||||
ErrorFailToCopyDir=No s'ha pogut copiar el directori '<b> %s </b>' a '<b> %s </b>'.
|
||||
ErrorFailToRenameFile=Error al renomenar l'arxiu '<b>%s</b>' a '<b>%s</b>'.
|
||||
ErrorFailToDeleteFile=No s'ha pogut eliminar el fitxer "<b> %s </b>".
|
||||
ErrorFailToDeleteFile=No s'ha pogut eliminar el fitxer «<b>%s</b>».
|
||||
ErrorFailToCreateFile=Error al crear l'arxiu '<b>%s</b>'
|
||||
ErrorFailToRenameDir=Error al renomenar la carpeta '<b>%s</b>' a '<b>%s</b>'.
|
||||
ErrorFailToCreateDir=Error al crear la carpeta '<b>%s</b>'
|
||||
@ -60,8 +60,8 @@ ErrorSetupOfEmailsNotComplete=La configuració dels correus electrònics no s'ha
|
||||
ErrorFeatureNeedJavascript=Aquesta funcionalitat requereix javascript actiu per funcionar. Modifiqueu en configuració->entorn.
|
||||
ErrorTopMenuMustHaveAParentWithId0=Un menú del tipus 'Superior' no pot tenir un menú pare. Poseu 0 al menú pare o trieu un menú del tipus 'Esquerra'.
|
||||
ErrorLeftMenuMustHaveAParentId=Un menú del tipus 'Esquerra' ha de tenir un ID de pare
|
||||
ErrorFileNotFound=Arxiu no trobat (ruta incorrecta, permisos incorrectes o accés prohibit pel paràmetre openbasedir)
|
||||
ErrorDirNotFound=Directori <b>%s</b> no trobat (Ruta incorrecta, permisos inadequats o accés prohibit pel paràmetre PHP openbasedir o safe_mode)
|
||||
ErrorFileNotFound=No s'ha trobat el fitxer <b>%s</b> (camí incorrecte, permisos incorrectes o accés denegat pel paràmetre PHP openbasedir o safe_mode)
|
||||
ErrorDirNotFound=No s'ha trobat el directori <b>%s</b> (camí incorrecte, permisos incorrectes o accés denegat pel paràmetre PHP openbasedir o safe_mode)
|
||||
ErrorFunctionNotAvailableInPHP=La funció <b>%s</b> és requerida per aquesta característica, però no es troba disponible en aquesta versió/instal·lació de PHP.
|
||||
ErrorDirAlreadyExists=Ja existeix una carpeta amb aquest nom.
|
||||
ErrorFileAlreadyExists=Ja existeix un fitxer amb aquest nom.
|
||||
@ -84,7 +84,7 @@ ErrorNoAccountancyModuleLoaded=Mòdul de comptabilitat no activat
|
||||
ErrorExportDuplicateProfil=El nom d'aquest perfil ja existeix per aquest conjunt d'exportació
|
||||
ErrorLDAPSetupNotComplete=La configuració Dolibarr-LDAP és incompleta.
|
||||
ErrorLDAPMakeManualTest=S'ha generat un fitxer .ldif al directori %s. Proveu de carregar-lo manualment des de la línia d'ordres per a obtenir més informació sobre els errors.
|
||||
ErrorCantSaveADoneUserWithZeroPercentage=No es pot desar una acció amb "estat no iniciat" si el camp "fet per" també s'omple.
|
||||
ErrorCantSaveADoneUserWithZeroPercentage=No es pot desar una acció amb «estat no iniciat» si també s'omple el camp «fet per».
|
||||
ErrorRefAlreadyExists=La referència <b> %s </b> ja existeix.
|
||||
ErrorPleaseTypeBankTransactionReportName=Introduïu el nom de l’extracte bancari on s’ha d’informar de l’entrada (format AAAAAMM o AAAAAMMDD)
|
||||
ErrorRecordHasChildren=No s'ha pogut eliminar el registre, ja que té alguns registres fills.
|
||||
@ -97,7 +97,7 @@ ErrorWrongValueForField=Camp <b> %s </b>: '<b> %s </b>' no coincideix amb la reg
|
||||
ErrorHtmlInjectionForField=Camp <b> %s </b> : el valor ' <b> %s </b> no conté dades malicioses '
|
||||
ErrorFieldValueNotIn=Camp <b> %s </b>: '<b> %s </b>' no és un valor trobat en el camp <b> %s </b> de <b> %s </b>
|
||||
ErrorFieldRefNotIn=Camp <b> %s </b>: '<b> %s </b>' no és un <b> %s </b> ref actual
|
||||
ErrorMultipleRecordFoundFromRef=Several record found when searching from ref <b>%s</b>. No way to know which ID to use.
|
||||
ErrorMultipleRecordFoundFromRef=S'han trobat diversos registres en cercar des de la referència<b>%s</b>. No hi ha manera de saber quina identificació utilitzar.
|
||||
ErrorsOnXLines=S'han trobat %s errors
|
||||
ErrorFileIsInfectedWithAVirus=L'antivirus no ha pogut validar aquest arxiu (és probable que estigui infectat per un virus)!
|
||||
ErrorNumRefModel=Hi ha una referència a la base de dades (%s) i no és compatible amb aquesta regla de numeració. Elimineu el registre o canvieu el nom de referència per a activar aquest mòdul.
|
||||
@ -125,7 +125,7 @@ ErrorCantReadFile=Error de lectura del fitxer '%s'
|
||||
ErrorCantReadDir=Error de lectura de la carpeta '%s'
|
||||
ErrorBadLoginPassword=Identificadors d'usuari o contrasenya incorrectes
|
||||
ErrorLoginDisabled=El seu compte està desactivat
|
||||
ErrorFailedToRunExternalCommand=No s'ha pogut executar l'ordre extern. Comproveu que estigui disponible i executable pel vostre usuari del servidor PHP. Comproveu que l'ordre no estigui protegida a nivell d'intèrpret d'ordres per una capa de seguretat com apparmor.
|
||||
ErrorFailedToRunExternalCommand=No s'ha pogut executar l'ordre extern. Comproveu que estigui disponible i que l'executi el vostre usuari del servidor PHP. Comproveu també que l'ordre no estigui protegida en l'àmbit d'intèrpret d'ordres per una capa de seguretat com apparmor.
|
||||
ErrorFailedToChangePassword=Error en la modificació de la contrasenya
|
||||
ErrorLoginDoesNotExists=El compte d'usuari de <b>%s</b> no s'ha trobat.
|
||||
ErrorLoginHasNoEmail=Aquest usuari no té e-mail. Impossible continuar.
|
||||
@ -136,7 +136,7 @@ ErrorLinesCantBeNegativeForOneVATRate=El total de línies (net d’impostos) no
|
||||
ErrorLinesCantBeNegativeOnDeposits=Les línies no poden ser negatives en un dipòsit. Si ho feu, podreu tenir problemes quan necessiteu consumir el dipòsit a la factura final
|
||||
ErrorQtyForCustomerInvoiceCantBeNegative=La quantitat a les línies de factures a client no poden ser negatives
|
||||
ErrorWebServerUserHasNotPermission=El compte d'execució del servidor web <b>%s</b> no disposa dels permisos per això
|
||||
ErrorNoActivatedBarcode=No hi ha activat cap tipus de codi de barres
|
||||
ErrorNoActivatedBarcode=No s'ha activat cap mena de codi de barres
|
||||
ErrUnzipFails=No s'ha pogut descomprimir el fitxer %s amb ZipArchive
|
||||
ErrNoZipEngine=No engine to zip/unzip %s file in this PHP
|
||||
ErrorFileMustBeADolibarrPackage=El fitxer %s ha de ser un paquet Dolibarr en format zip
|
||||
@ -244,7 +244,7 @@ ErrorObjectMustHaveStatusActiveToBeDisabled=Per a desactivar els objectes, han d
|
||||
ErrorObjectMustHaveStatusDraftOrDisabledToBeActivated=Per ser activats, els objectes han de tenir l'estat "Esborrany" o "Desactivat"
|
||||
ErrorNoFieldWithAttributeShowoncombobox=Cap camp té la propietat "showoncombobox" en la definició de l'objecte "%s". No es pot mostrar el llistat desplegable.
|
||||
ErrorFieldRequiredForProduct=El camp "%s" és obligatori per al producte %s
|
||||
AlreadyTooMuchPostOnThisIPAdress=You have already posted too much on this IP address.
|
||||
AlreadyTooMuchPostOnThisIPAdress=Ja heu publicat massa en aquesta adreça IP.
|
||||
ProblemIsInSetupOfTerminal=El problema està en la configuració del terminal %s.
|
||||
ErrorAddAtLeastOneLineFirst=Afegeix almenys una primera línia
|
||||
ErrorRecordAlreadyInAccountingDeletionNotPossible=Error, el registre ja s’ha transferit a la comptabilitat, no es pot eliminar.
|
||||
@ -262,6 +262,7 @@ ErrorParameterMustBeEnabledToAllwoThisFeature=Error, el paràmetre <b> %s </b> s
|
||||
ErrorLoginDateValidity=Error, aquest inici de sessió està fora de l'interval de dates de validesa
|
||||
ErrorValueLength=La longitud del camp '<b> %s </b>' ha de ser superior a '<b> %s </b>'
|
||||
ErrorReservedKeyword=La paraula '<b> %s </b>' és una paraula clau reservada
|
||||
ErrorFilenameReserved=El nom de fitxer <b>%s</b> no es pot utilitzar perquè és una ordre reservada i protegida.
|
||||
ErrorNotAvailableWithThisDistribution=No disponible amb aquesta distribució
|
||||
ErrorPublicInterfaceNotEnabled=La interfície pública no s'ha activat
|
||||
ErrorLanguageRequiredIfPageIsTranslationOfAnother=Cal definir l'idioma de la pàgina nova si es defineix com a traducció d'una altra pàgina
|
||||
@ -280,8 +281,8 @@ ErrorWrongFileName=El nom del fitxer no pot contenir __COSA__
|
||||
ErrorNotInDictionaryPaymentConditions=No es troba al Diccionari de condicions de pagament, modifiqueu-lo.
|
||||
ErrorIsNotADraft=%s no és un esborrany
|
||||
ErrorExecIdFailed=No es pot executar l'ordre "id"
|
||||
ErrorBadCharIntoLoginName=Unauthorized character in the field %s
|
||||
ErrorRequestTooLarge=Error, request too large or session expired
|
||||
ErrorBadCharIntoLoginName=Caràcter no autoritzat al camp %s
|
||||
ErrorRequestTooLarge=Error, sol·licitud massa gran o sessió caducada
|
||||
ErrorNotApproverForHoliday=No sou l'autor de l'abandonament %s
|
||||
ErrorAttributeIsUsedIntoProduct=Aquest atribut s'utilitza en una o més variants de producte
|
||||
ErrorAttributeValueIsUsedIntoProduct=Aquest valor d'atribut s'utilitza en una o més variants de producte
|
||||
@ -298,17 +299,17 @@ ErrorFailedToLoadThirdParty=No s'ha pogut trobar/carregar un tercer des d'id=%s,
|
||||
ErrorThisPaymentModeIsNotSepa=Aquest mode de pagament no és un compte bancari
|
||||
ErrorStripeCustomerNotFoundCreateFirst=El client de Stripe no està configurat per a aquest tercer (o s'ha establert un valor suprimit al costat de Stripe). Creeu-lo (o torneu-lo a adjuntar) primer.
|
||||
ErrorCharPlusNotSupportedByImapForSearch=La cerca IMAP no pot cercar al remitent o al destinatari una cadena que contingui el caràcter +
|
||||
ErrorTableNotFound=Table <b>%s</b> not found
|
||||
ErrorValueForTooLow=Value for <b>%s</b> is too low
|
||||
ErrorValueCantBeNull=Value for <b>%s</b> can't be null
|
||||
ErrorDateOfMovementLowerThanDateOfFileTransmission=The date of the bank transaction can't be lower than the date of the file transmission
|
||||
ErrorTooMuchFileInForm=Too much files in form, the maximum number is %s file(s)
|
||||
ErrorSessionInvalidatedAfterPasswordChange=The session was been invalidated following a change of password, status or dates of validity. Please relogin.
|
||||
ErrorExistingPermission = Permission <b>%s</b> for object <b>%s</b> already exists
|
||||
ErrorFieldExist=The value for <b>%s</b> already exist
|
||||
ErrorEqualModule=Module invalid in <b>%s</b>
|
||||
ErrorFieldValue=Value for <b>%s</b> is incorrect
|
||||
ErrorCoherenceMenu=<b>%s</b> is required when <b>%</b> equal LEFT
|
||||
ErrorTableNotFound=No s'ha trobat la taula <b>%s</b>
|
||||
ErrorValueForTooLow=El valor de <b>%s</b> és massa baix
|
||||
ErrorValueCantBeNull=El valor de <b>%s</b> no pot ser nul
|
||||
ErrorDateOfMovementLowerThanDateOfFileTransmission=La data de la transacció bancària no pot ser inferior a la data de transmissió del fitxer
|
||||
ErrorTooMuchFileInForm=Hi ha massa fitxers en el formulari, el nombre màxim és de %s fitxers
|
||||
ErrorSessionInvalidatedAfterPasswordChange=La sessió s'ha invalidat després d'un canvi de contrasenya, estat o dates de validesa. Si us plau, torneu a iniciar sessió.
|
||||
ErrorExistingPermission = Ja existeix el permís <b>%s</b> per a l'objecte <b>%s</b>
|
||||
ErrorFieldExist=El valor de <b>%s</b> ja existeix
|
||||
ErrorEqualModule=El mòdul no és vàlid a <b>%s</b>
|
||||
ErrorFieldValue=El valor de <b>%s</b> és incorrecte
|
||||
ErrorCoherenceMenu= <b>%s</b> és necessari quan <b>%s</b> és «left»
|
||||
|
||||
# Warnings
|
||||
WarningParamUploadMaxFileSizeHigherThanPostMaxSize=El paràmetre PHP upload_max_filesize (%s) és superior al paràmetre PHP post_max_size (%s). No es tracta d’una configuració consistent.
|
||||
@ -346,8 +347,8 @@ WarningModuleXDisabledSoYouMayMissEventHere=El mòdul %s no s'ha habilitat. Per
|
||||
WarningPaypalPaymentNotCompatibleWithStrict=El valor "Estricte" fa que les funcions de pagament en línia no funcionin correctament. Utilitzeu "Lax".
|
||||
WarningThemeForcedTo=Avís, el tema s'ha forçat a <b> %s </b> per la constant oculta MAIN_FORCETHEME
|
||||
WarningPagesWillBeDeleted=Advertència, això també suprimirà totes les pàgines/contenidors existents del lloc web. Hauríeu d'exportar el vostre lloc web abans, de manera que tingueu una còpia de seguretat per tornar-lo a importar més tard.
|
||||
WarningAutoValNotPossibleWhenStockIsDecreasedOnInvoiceVal=Automatic validation is disabled when option to decrease stock is set on "Invoice validation".
|
||||
WarningModuleNeedRefrech = Module <b>%s</b> has been disabled. Don't forget to enable it
|
||||
WarningAutoValNotPossibleWhenStockIsDecreasedOnInvoiceVal=La validació automàtica es desactiva quan l'opció de disminució d'estoc s'estableix a "Validació de la factura".
|
||||
WarningModuleNeedRefrech = El mòdul <b>%s</b> s'ha desactivat. No oblideu activar-lo
|
||||
|
||||
# Validate
|
||||
RequireValidValue = El valor no és vàlid
|
||||
|
||||
@ -3,10 +3,10 @@ CommunitySupport=Assistència Forums i Wiki
|
||||
EMailSupport=Assistència E-Mail
|
||||
RemoteControlSupport=Suport en línia en temps real / remot
|
||||
OtherSupport=Altres tipus d'assistència
|
||||
ToSeeListOfAvailableRessources=Per contactar/veure els recursos disponibles:
|
||||
ToSeeListOfAvailableRessources=Per a contactar/veure els recursos disponibles:
|
||||
HelpCenter=Centre d'ajuda
|
||||
DolibarrHelpCenter=Centre d'Ajuda i Suport de Dolibarr
|
||||
ToGoBackToDolibarr=En cas contrari, <a href="%s"> fes clic aquí per continuar utilitzant Dolibarr </a>.
|
||||
ToGoBackToDolibarr=En cas contrari, <a href="%s">feu clic aquí per a continuar utilitzant Dolibarr</a>.
|
||||
TypeOfSupport=Tipus de suport
|
||||
TypeSupportCommunauty=Comunitari (gratuït)
|
||||
TypeSupportCommercial=Comercial
|
||||
@ -20,4 +20,4 @@ BackToHelpCenter=En cas contrari, <a href="%s"> torna a la pàgina d'inici del C
|
||||
LinkToGoldMember=Pots trucar a un dels formadors preseleccionats per Dolibarr pel teu idioma (%s) fent clic al seu Panell (l'estat i el preu màxim s'actualitzen automàticament):
|
||||
PossibleLanguages=Idiomes disponibles
|
||||
SubscribeToFoundation=Ajuda al projecte Dolibarr, adhereix-te a l'associació
|
||||
SeeOfficalSupport=Per a obtenir suport oficial de Dolibarr en el vostre idioma: <br> <b> <a href="%s" target="_blank" rel="noopener noreferrer"> %s </a> </b>
|
||||
SeeOfficalSupport=Per a obtenir suport oficial de Dolibarr en el vostre idioma: <br><b><a href="%s" target="_blank" rel="noopener noreferrer">%s</a></b>
|
||||
|
||||
@ -8,7 +8,7 @@ MenuAddCP=Sol·licitud nova de dia lliure
|
||||
MenuCollectiveAddCP=Nova sol·licitud de festiu col·lectiu
|
||||
NotActiveModCP=Heu d'habilitar el mòdul Dies lliures per a veure aquesta pàgina.
|
||||
AddCP=Feu una sol·licitud de dia lliure
|
||||
DateDebCP=Data inici
|
||||
DateDebCP=Data d'inici
|
||||
DateFinCP=Data fi
|
||||
DraftCP=Esborrany
|
||||
ToReviewCP=A l'espera d'aprovació
|
||||
@ -85,7 +85,7 @@ AddEventToUserOkCP=S'ha completat la incorporació del dia lliure excepcional.
|
||||
ErrorFieldRequiredUserOrGroup=Cal omplir el camp "grup" o el camp "usuari".
|
||||
fusionGroupsUsers=El camp de grups i el camp d'usuari es fusionaran
|
||||
MenuLogCP=Veure registre de canvis
|
||||
LogCP=Registre de totes les actualitzacions fetes a "Saldo de dies lliures"
|
||||
LogCP=Registre de totes les actualitzacions fetes a «Saldo de dies lliures»
|
||||
ActionByCP=Actualitzat per
|
||||
UserUpdateCP=Actualitzat per a
|
||||
PrevSoldeCP=Saldo anterior
|
||||
@ -107,7 +107,7 @@ HolidaysCancelation=Cancel·lació de la sol·licitud de dies lliures
|
||||
EmployeeLastname=Cognoms de l'empleat
|
||||
EmployeeFirstname=Nom de l'empleat
|
||||
TypeWasDisabledOrRemoved=El tipus de dia lliure (id %s) ha sigut desactivat o eliminat
|
||||
LastHolidays=Les darreres %s sol·licituds de permís
|
||||
LastHolidays=Últimes %s sol·licituds de dies lliures
|
||||
AllHolidays=Totes les sol·licituds de permís
|
||||
HalfDay=Mig dia
|
||||
NotTheAssignedApprover=No sou l'aprovador assignat
|
||||
@ -129,13 +129,13 @@ HolidaysToValidateBody=A continuació es mostra una sol·licitud de permís per
|
||||
HolidaysToValidateDelay=Aquesta sol·licitud de dies lliures retribuïts tindrà lloc en un termini de menys de %s dies.
|
||||
HolidaysToValidateAlertSolde=L'usuari que ha realitzat la sol·licitud de dies lliures retribuïts no disposa de suficients dies disponibles
|
||||
HolidaysValidated=Sol·licituds de permís validats
|
||||
HolidaysValidatedBody=La seva sol·licitud de dies lliures retribuïts des de el %s al %s ha sigut validada.
|
||||
HolidaysValidatedBody=La vostra sol·licitud de dies lliures de %s a %s s'ha validat.
|
||||
HolidaysRefused=Dies lliures retribuïts denegats
|
||||
HolidaysRefusedBody=La seva sol·licitud de dies lliures retribuïts des de el %s al %s ha sigut denegada per el següent motiu:
|
||||
HolidaysCanceled=Dies lliures retribuïts cancel·lats
|
||||
HolidaysCanceledBody=S'ha cancel·lat la vostra sol·licitud de permís del %s al %s.
|
||||
FollowedByACounter=1: Aquest tipus de dia lliure necessita el seguiment d'un comptador. El comptador s'incrementa manualment o automàticament i quan hi ha una petició de dia lliure validada, el comptador es decrementa.<br>0: No seguit per un comptador.
|
||||
NoLeaveWithCounterDefined=No hi ha cap tipus de dia lliure definit que hagi de seguir un comptador
|
||||
NoLeaveWithCounterDefined=No hi ha cap mena de dia lliure definit que hagi de ser seguit per un comptador
|
||||
GoIntoDictionaryHolidayTypes=Aneu a <strong> Inici - Configuració - Diccionaris - Tipus de dies lliures </strong> per a configurar els diferents tipus de dies lliures.
|
||||
HolidaySetup=Configuració del mòdul Dies de permís
|
||||
HolidaysNumberingModules=Models de numeració de sol·licituds de dies de permís
|
||||
@ -149,10 +149,10 @@ XIsAUsualNonWorkingDay=%s sol ser un dia NO laborable
|
||||
BlockHolidayIfNegative=Bloqueja si el saldo és negatiu
|
||||
LeaveRequestCreationBlockedBecauseBalanceIsNegative=La creació d'aquesta sol·licitud de vacances està bloquejada perquè el vostre saldo és negatiu
|
||||
ErrorLeaveRequestMustBeDraftCanceledOrRefusedToBeDeleted=La sol·licitud d'abandonament %s ha de ser esborrany, cancel·lada o rebutjada per eliminar-la
|
||||
IncreaseHolidays=Increase leave balance
|
||||
HolidayRecordsIncreased= %s leave balances increased
|
||||
HolidayRecordIncreased=Leave balance increased
|
||||
ConfirmMassIncreaseHoliday=Bulk leave balance increase
|
||||
NumberDayAddMass=Number of day to add to the selection
|
||||
ConfirmMassIncreaseHolidayQuestion=Are you sure you want to increase holiday of the %s selected record(s)?
|
||||
IncreaseHolidays=Augmentar el saldo de dies lliures
|
||||
HolidayRecordsIncreased= %s saldos de dies lliures augmentats
|
||||
HolidayRecordIncreased=Saldo de dies lliures augmentat
|
||||
ConfirmMassIncreaseHoliday=Augment massiu del saldo de dies lliures
|
||||
NumberDayAddMass=Nombre de dia per a afegir a la selecció
|
||||
ConfirmMassIncreaseHolidayQuestion=Esteu segur que voleu augmentar les vacances dels registres seleccionats %s?
|
||||
HolidayQtyNotModified=El saldo dels dies restants per a %s no s'ha canviat
|
||||
|
||||
@ -8,7 +8,7 @@ ConfFileIsNotWritable=L'arxiu de configuració <b>%s</b> no és modificable. Com
|
||||
ConfFileIsWritable=L'arxiu <b>%s</b> és modificable.
|
||||
ConfFileMustBeAFileNotADir=El fitxer de configuració <b> %s</b> ha de ser un fitxer, no un directori.
|
||||
ConfFileReload=Actualització dels paràmetres del fitxer de configuració.
|
||||
NoReadableConfFileSoStartInstall=El fitxer de configuració <b> conf/conf.php </b> no existeix o no es pot llegir. Executarem el procés d'instal·lació per intentar inicialitzar-lo.
|
||||
NoReadableConfFileSoStartInstall=El fitxer de configuració <b>conf/conf.php</b> no existeix o no es pot llegir. Executarem el procés d'instal·lació per a intentar inicialitzar-lo.
|
||||
PHPSupportPOSTGETOk=Aquest PHP suporta bé les variables POST i GET.
|
||||
PHPSupportPOSTGETKo=És possible que aquest PHP no suport les variables POST i/o GET. Comproveu el paràmetre <b>variables_order</b> del php.ini.
|
||||
PHPSupportSessions=Aquest PHP suporta sessions
|
||||
@ -82,7 +82,7 @@ GoToDolibarr=Aneu a Dolibarr
|
||||
GoToSetupArea=Aneu a Dolibarr (àrea de configuració)
|
||||
MigrationNotFinished=La versió de la base de dades no està completament actualitzada: torneu a executar el procés d'actualització.
|
||||
GoToUpgradePage=Aneu de nou a la pàgina d'actualització
|
||||
WithNoSlashAtTheEnd=Sense el signe "/" al final
|
||||
WithNoSlashAtTheEnd=Sense la barra inclinada «/» al final
|
||||
DirectoryRecommendation= <span class="warning"> IMPORTANT </span>: Heu d'utilitzar un directori que es troba fora de les pàgines web (no utilitzeu un subdirector del paràmetre anterior).
|
||||
LoginAlreadyExists=Ja existeix
|
||||
DolibarrAdminLogin=Nom d'usuari d’administrador de Dolibarr
|
||||
@ -94,7 +94,7 @@ ChoosedMigrateScript=Elecció de l'script de migració
|
||||
DataMigration=Migració de la base de dades (dades)
|
||||
DatabaseMigration=Migració de la base de dades (estructura + algunes dades)
|
||||
ProcessMigrateScript=Execució del script
|
||||
ChooseYourSetupMode=Trieu el mode de configuració i feu clic a "Comença"...
|
||||
ChooseYourSetupMode=Trieu el vostre mode de configuració i feu clic a «Inici»...
|
||||
FreshInstall=Nova instal·lació
|
||||
FreshInstallDesc=Utilitzeu aquest mode si aquesta és la vostra primera instal·lació. Si no, aquest mode pot reparar una instal·lació prèvia incompleta. Si voleu actualitzar la vostra versió, seleccioneu "Actualitzar".
|
||||
Upgrade=Actualització
|
||||
@ -129,7 +129,7 @@ MigrationCustomerOrderShipping=Migració de dades d'enviament de comandes de ven
|
||||
MigrationShippingDelivery=Actualització de les dades d'enviaments
|
||||
MigrationShippingDelivery2=Actualització de les dades d'enviaments 2
|
||||
MigrationFinished=S'ha acabat la migració
|
||||
LastStepDesc=<strong> Darrer pas </strong>: definiu aquí l'inici de sessió i la contrasenya que voleu utilitzar per connectar-se a Dolibarr. <b> No perdis això, ja que és el compte mestre per administrar tots els altres / comptes d'usuari addicionals.</b>
|
||||
LastStepDesc=<strong>Últim pas</strong>: Definiu aquí l'inici de sessió i la contrasenya que voleu utilitzar per a connectar-vos a Dolibarr. <b>No la perdeu, ja que és el compte principal per a administrar tots els altres comptes d'usuari addicionals.</b>
|
||||
ActivateModule=Activació del mòdul %s
|
||||
ShowEditTechnicalParameters=Feu clic aquí per a mostrar/editar els paràmetres avançats (mode expert)
|
||||
WarningUpgrade=Avís:\nHas fet una còpia de seguretat de la base de dades primer?\nAixò és molt recomanable. La pèrdua de dades (a causa, per exemple, d'errors a la versió de mysql 5.5.40/41/42/43) és possible durant aquest procés, per la qual cosa és essencial fer un bolcat complet de la base de dades abans d'iniciar qualsevol migració.\n\nFeu clic a D'acord per a iniciar el procés de migració...
|
||||
@ -157,7 +157,7 @@ MigrationPaymentsUpdate=Actualització dels pagaments (vincle nn pagaments-factu
|
||||
MigrationPaymentsNumberToUpdate=%s pagament(s) a actualitzar
|
||||
MigrationProcessPaymentUpdate=Actualització pagament(s) %s
|
||||
MigrationPaymentsNothingToUpdate=No hi ha més pagaments orfes que hagin de corregir.
|
||||
MigrationPaymentsNothingUpdatable=No hi ha més pagaments per corregir
|
||||
MigrationPaymentsNothingUpdatable=No hi ha més pagaments que es puguin corregir
|
||||
MigrationContractsUpdate=Actualització dels contractes sense detalls (gestió del contracte + detall de contracte)
|
||||
MigrationContractsNumberToUpdate=%s contracte(s) a actualitzar
|
||||
MigrationContractsLineCreation=Crea una línia de contracte per referència del contracte %s
|
||||
@ -165,8 +165,8 @@ MigrationContractsNothingToUpdate=No hi ha més contractes (vinculats a un produ
|
||||
MigrationContractsFieldDontExist=El camp fk_facture ja no existeix. Res a fer.
|
||||
MigrationContractsEmptyDatesUpdate=Correcció de la data buida de contracte
|
||||
MigrationContractsEmptyDatesUpdateSuccess=La correcció de la data buida del contracte s'ha realitzat correctament
|
||||
MigrationContractsEmptyDatesNothingToUpdate=No hi ha data de contracte buida per corregir
|
||||
MigrationContractsEmptyCreationDatesNothingToUpdate=No hi ha data de creació del contracte per corregir
|
||||
MigrationContractsEmptyDatesNothingToUpdate=Cap data de contracte buida a corregir
|
||||
MigrationContractsEmptyCreationDatesNothingToUpdate=Cap data de creació de contracte a corregir
|
||||
MigrationContractsInvalidDatesUpdate=Correcció del valor incorrecte de la data de contracte
|
||||
MigrationContractsInvalidDateFix=Corregir contracte %s (data contracte=%s, Data posada en servei min=%s)
|
||||
MigrationContractsInvalidDatesNumber=%s contractes modificats
|
||||
@ -205,13 +205,13 @@ MigrationResetBlockedLog=Restablir el mòdul BlockedLog per l'algoritme v7
|
||||
MigrationImportOrExportProfiles=Migració de perfils d'importació o exportació (%s)
|
||||
ShowNotAvailableOptions=Mostra les opcions no disponibles
|
||||
HideNotAvailableOptions=Amaga les opcions no disponibles
|
||||
ErrorFoundDuringMigration=S'han reportat error(s) durant el procés de migració, de manera que el següent pas no està disponible. Per ignorar els errors, podeu <a href="%s"> fer clic aquí </a>, però l'aplicació o algunes funcions no funcionen correctament fins que es resolen els errors.
|
||||
ErrorFoundDuringMigration=S'han informat errors durant el procés de migració, de manera que el pas següent no està disponible. Per a ignorar els errors, podeu fer <a href="%s">clic aquí</a>, però és possible que l'aplicació o algunes funcions no funcionin correctament fins que es resolguin els errors.
|
||||
YouTryInstallDisabledByDirLock=L'aplicació ha intentat actualitzar-se automàticament, però les pàgines d'instal·lació / actualització s'han desactivat per a la seguretat (el directori rep el nom amb el sufix .lock). <br>
|
||||
YouTryInstallDisabledByFileLock=L'aplicació s'ha intentat actualitzar automàticament, però les pàgines d'instal·lació / actualització s'han desactivat per a la seguretat (per l'existència d'un fitxer de bloqueig <strong> install.lock </strong> al directori de documents del dolibarr). <br>
|
||||
YouTryUpgradeDisabledByMissingFileUnLock=The application tried to self-upgrade, but the upgrade process is currently not allowed.<br>
|
||||
YouTryUpgradeDisabledByMissingFileUnLock=L'aplicació ha intentat actualitzar-se, però el procés d'actualització no està permès actualment. <br>
|
||||
ClickHereToGoToApp=Fes clic aquí per anar a la teva aplicació
|
||||
ClickOnLinkOrRemoveManualy=Si una actualització està en curs, espereu. Si no, feu clic al següent enllaç. Si sempre veieu aquesta mateixa pàgina, heu de suprimir / canviar el nom del fitxer install.lock del directori de documents.
|
||||
ClickOnLinkOrCreateUnlockFileManualy=If an upgrade is in progress, please wait... If not, you must create a file upgrade.unlock into the Dolibarr documents directory.
|
||||
ClickOnLinkOrCreateUnlockFileManualy=Si hi ha una actualització en curs, espereu... Si no, heu de crear un fitxer upgrade.unlock al directori de documents de Dolibarr.
|
||||
Loaded=Carregat
|
||||
FunctionTest=Prova de funció
|
||||
NodoUpgradeAfterDB=Cap acció sol·licitada pels mòduls externs després de l'actualització de la base de dades
|
||||
|
||||
@ -24,9 +24,9 @@ NameAndSignatureOfInternalContact=Nom i signatura del participant:
|
||||
NameAndSignatureOfExternalContact=Nom i signatura del client:
|
||||
DocumentModelStandard=Document model estàndard per a intervencions
|
||||
InterventionCardsAndInterventionLines=Fitxes i línies d'intervenció
|
||||
InterventionClassifyBilled=Classifica "Facturat"
|
||||
InterventionClassifyUnBilled=Classifica "No facturat"
|
||||
InterventionClassifyDone=Classifica com a "Fet"
|
||||
InterventionClassifyBilled=Marca «Facturat»
|
||||
InterventionClassifyUnBilled=Marca «No facturat»
|
||||
InterventionClassifyDone=Marca «Fet»
|
||||
StatusInterInvoiced=Facturada
|
||||
SendInterventionRef=Presentar intervenció %s
|
||||
SendInterventionByMail=Envia la intervenció per e-mail
|
||||
@ -50,7 +50,7 @@ UseDateWithoutHourOnFichinter=Oculta hores i minuts del camp de dates dels regis
|
||||
InterventionStatistics=Estadístiques de intervencions
|
||||
NbOfinterventions=Nombre de fitxers d’intervenció
|
||||
NumberOfInterventionsByMonth=Nombre de fitxes d'intervenció per mes (data de validació)
|
||||
AmountOfInteventionNotIncludedByDefault=La quantitat d'intervenció no s'inclou per defecte als beneficis (en la majoria dels casos, les fulles de temps s'utilitzen per a comptar el temps dedicat). Afegiu l'opció PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT a 1 a Inici-Vonfiguració-Altres per a incloure'ls.
|
||||
AmountOfInteventionNotIncludedByDefault=La quantitat d'intervenció no s'inclou per defecte als beneficis (en la majoria dels casos, les fulles de temps s'utilitzen per a comptar el temps dedicat). Podeu utilitzar l'opció PROJECT_ELEMENTS_FOR_ADD_MARGIN i PROJECT_ELEMENTS_FOR_MINUS_MARGIN a la configuració d'Inici-Configuració-Altres per a completar la llista d'elements inclosos als beneficis.
|
||||
InterId=Id. d'intervenció
|
||||
InterRef=Ref. d'intervenció
|
||||
InterDateCreation=Data de creació de la intervenció
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user