diff --git a/ChangeLog b/ChangeLog index 3a5fa7d4f37..803225db301 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,11 +4,13 @@ English Dolibarr ChangeLog ***** ChangeLog for 7.0.0 compared to 6.0.5 ***** For users: +NEW: Add a preview icon after files that can be previewed (pdf + images) NEW: When payment is registered, PDF of invoices are also regenerated so payments appears with no need to click on regenerate. NEW: #5711 Add shipment line deleting and editing for draft shipments. +NEW: Accept substitution key __(ABC)__ replaced with value of translation of key ABC NEW: Accept substitution key __[ABC]__ replaced with value of const ABC -NEW: Accountancy Add variant on sell account for intracommunity sales & export sales +NEW: Accountancy Add fields for sale accounting account for intracommunity sales & export sales NEW: Add a button "Activate all services" on contracts NEW: Add a confirmation for all mass action 'delete' NEW: Add a group task line for tasks on same level on gantt diagram @@ -573,7 +575,9 @@ Following changes may create regression for some external modules, but were nece exists, but if an external module need action on it, it must provides itself its trigger file. * Use $conf->global->MULTICOMPANY_TRANSVERSE_MODE instead $conf->multicompany->transverse_mode. So, if you set var $multicompany_transverse_mode to 1 into your conf file, you must remove this line and a new key into - the Home - setup - other admin page. + the Home - setup - other admin page. +* If you use Multicompany transverse mode, it will be necessary to check the activation of the modules in the children + entities and to review completely the rights of the groups and the users. * Use getEntity('xxx') instead getEntity('xxx', 1) and use getEntity('xxx', 0) instead getEntity('xxx') * Some other change were done in the way we read permission of a user when module multicompany is enabled. You can retreive the old behavior by adding constant MULTICOMPANY_BACKWARD_COMPATIBILITY to 1. diff --git a/build/debian/patches/use-etc-dolibarr-conf.patch b/build/debian/patches/use-etc-dolibarr-conf.patch index 3bca20ee66f..07346ad4e63 100644 --- a/build/debian/patches/use-etc-dolibarr-conf.patch +++ b/build/debian/patches/use-etc-dolibarr-conf.patch @@ -34,17 +34,4 @@ This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ +$conffiletoshow = "/etc/dolibarr/conf.php"; - // Load conf file if it is already defined ---- a/htdocs/support/inc.php -+++ b/htdocs/support/inc.php -@@ -69,8 +69,8 @@ $conffiletoshowshort = "conf.php"; - $conffile = "../conf/conf.php"; - $conffiletoshow = "htdocs/conf/conf.php"; - // For debian/redhat like systems --//$conffile = "/etc/dolibarr/conf.php"; --//$conffiletoshow = "/etc/dolibarr/conf.php"; -+$conffile = "/etc/dolibarr/conf.php"; -+$conffiletoshow = "/etc/dolibarr/conf.php"; - - // Load conf file if it is already defined diff --git a/build/debian/rules b/build/debian/rules index 50866c03e68..1fe2360133f 100755 --- a/build/debian/rules +++ b/build/debian/rules @@ -10,12 +10,23 @@ export DH_OPTIONS=-v %: dh $@ +# Replace standard debian package actions with a new one +######################################################## + override_dh_auto_clean: # Do nothing. Added to disable launchpad to use bugged dh_auto_clean search for ant override_dh_auto_build: # Do nothing. Added to disable launchpad to use bugged dh_auto_build search for ant - + +#override_dh_compress: +# dh_compress --no-act -X.png + +# We disable this for png file because it modify content of original file so make +# the dolibarr signature not valid. +override_dh_strip_nondeterminism: + dh_strip_nondeterminism -X.png + override_dh_install: dh_install # Delete files diff --git a/build/makepack-dolibarr.pl b/build/makepack-dolibarr.pl index 7da6d180dcb..839a8092a7c 100755 --- a/build/makepack-dolibarr.pl +++ b/build/makepack-dolibarr.pl @@ -558,7 +558,7 @@ if ($nboftargetok) { $ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/geoip/sample*.*`; $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/ckeditor/ckeditor/adapters`; # Keep this removal in case we embed libraries $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/ckeditor/ckeditor/samples`; # Keep this removal in case we embed libraries - #$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/ckeditor/_source`; # _source must be kept into tarball + $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/ckeditor/_source`; # _source must be kept into tarball for official debian, not for the rest $ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/jquery/plugins/multiselect/MIT-LICENSE.txt`; $ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/jquery/plugins/select2/release.sh`; @@ -767,8 +767,8 @@ if ($nboftargetok) { $cmd="cp -pr '$BUILDROOT/$PROJECT' '$BUILDROOT/$FILENAMETGZ2'"; $ret=`$cmd`; - # Removed files we don't need - $ret=`rm -fr $BUILDROOT/$FILENAMETGZ2/htdocs/includes/ckeditor/_source`; + # Removed files we don't need (already removed before) + #$ret=`rm -fr $BUILDROOT/$FILENAMETGZ2/htdocs/includes/ckeditor/_source`; print "Set permissions on files/dir\n"; $ret=`chmod -R 755 $BUILDROOT/$FILENAMETGZ2`; @@ -915,8 +915,8 @@ if ($nboftargetok) { $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/mike42/escpos-php/LICENSE.md`; $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/mobiledetect/mobiledetectlib/LICENSE.txt`; - # Removed files we don't need - $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/ckeditor/ckeditor/_source`; + # Removed files we don't need (already removed) + #$ret=`rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/ckeditor/ckeditor/_source`; # Rename upstream changelog to match debian rules $ret=`mv $BUILDROOT/$PROJECT.tmp/ChangeLog $BUILDROOT/$PROJECT.tmp/changelog`; @@ -978,7 +978,7 @@ if ($nboftargetok) { $ret=`chmod 755 $BUILDROOT/$PROJECT.tmp/debian/rules`; $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/dev/translation/autotranslator.class.php`; $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/htdocs/modulebuilder/template/class/actions_mymodule.class.php`; - $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/htdocs/modulebuilder/template/class/api_myobject.class.php`; + $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/htdocs/modulebuilder/template/class/api_mymodule.class.php`; $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/htdocs/modulebuilder/template/class/myobject.class.php`; $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/htdocs/modulebuilder/template/core/modules/modMyModule.class.php`; $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/htdocs/modulebuilder/template/mymoduleindex.php`; diff --git a/build/rpm/dolibarr-forrpm.patch b/build/rpm/dolibarr-forrpm.patch index 6c484345be9..5413702efa3 100644 --- a/build/rpm/dolibarr-forrpm.patch +++ b/build/rpm/dolibarr-forrpm.patch @@ -15,21 +15,7 @@ diff -up htdocs/filefunc.inc.php.patch htdocs/filefunc.inc.php diff -up htdocs/install/inc.php.patch htdocs/install/inc.php --- htdocs/install/inc.php.patch 2011-09-03 02:33:26.450952000 +0200 +++ htdocs/install/inc.php 2011-09-03 02:33:36.286952001 +0200 -@@ -71,8 +71,8 @@ - $conffile = "../conf/conf.php"; - $conffiletoshow = "htdocs/conf/conf.php"; - // For debian/redhat like systems --//$conffile = "/etc/dolibarr/conf.php"; --//$conffiletoshow = "/etc/dolibarr/conf.php"; -+$conffile = "/etc/dolibarr/conf.php"; -+$conffiletoshow = "/etc/dolibarr/conf.php"; - - - // Load conf file if it is already defined -diff -up htdocs/support/inc.php.patch htdocs/support/inc.php ---- htdocs/support/inc.php.patch 2011-09-03 02:34:39.606952000 +0200 -+++ htdocs/support/inc.php 2011-09-03 02:33:59.814952000 +0200 -@@ -69,8 +69,8 @@ +@@ -74,8 +74,8 @@ $conffile = "../conf/conf.php"; $conffiletoshow = "htdocs/conf/conf.php"; // For debian/redhat like systems diff --git a/build/rpm/dolibarr_fedora.spec b/build/rpm/dolibarr_fedora.spec index 077aaeb9483..6df6ccf052e 100755 --- a/build/rpm/dolibarr_fedora.spec +++ b/build/rpm/dolibarr_fedora.spec @@ -25,7 +25,7 @@ BuildArch: noarch BuildRoot: %{_tmppath}/%{name}-%{version}-build Group: Applications/Productivity -Requires: httpd, php >= 5.3.0, php-cli, php-gd, php-ldap, php-imap, php-mysql, php-adodb, php-nusoap, dejavu-sans-fonts +Requires: httpd, php >= 5.3.0, php-cli, php-gd, php-ldap, php-imap, php-mysqli, php-adodb, php-nusoap, dejavu-sans-fonts Requires: mysql-server, mysql #BuildRequires: desktop-file-utils diff --git a/build/rpm/dolibarr_generic.spec b/build/rpm/dolibarr_generic.spec index 5b39bac7761..f99836b7f74 100755 --- a/build/rpm/dolibarr_generic.spec +++ b/build/rpm/dolibarr_generic.spec @@ -46,7 +46,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-build %if 0%{?fedora} || 0%{?rhel_version} || 0%{?centos_version} Group: Applications/Productivity -Requires: httpd, php >= 5.3.0, php-cli, php-gd, php-ldap, php-imap, php-mysql, php-adodb, php-nusoap, dejavu-sans-fonts +Requires: httpd, php >= 5.3.0, php-cli, php-gd, php-ldap, php-imap, php-mysqli, php-adodb, php-nusoap, dejavu-sans-fonts, php-mbstring, php-xml Requires: mysql-server, mysql BuildRequires: desktop-file-utils %else @@ -63,9 +63,9 @@ Requires: mysql-community-server, mysql-community-server-client BuildRequires: update-desktop-files fdupes %else Group: Applications/Productivity -Requires: httpd, php >= 5.3.0, php-cli, php-gd, php-ldap, php-imap +Requires: httpd, php >= 5.3.0, php-cli, php-gd, php-ldap, php-imap, php-mbstring, php-xml Requires: mysql-server, mysql -Requires: php-mysql >= 4.1.0 +Requires: php-mysqli >= 4.1.0 %endif %endif %endif @@ -441,8 +441,8 @@ if [ "x$os" = "xfedora-redhat" -a -s /sbin/restorecon ]; then %else echo Add SE Linux permissions for dolibarr # semanage add records into /etc/selinux/targeted/contexts/files/file_contexts.local - semanage fcontext -a -t httpd_sys_script_rw_t "/etc/dolibarr(/.*?)" - semanage fcontext -a -t httpd_sys_script_rw_t "/var/lib/dolibarr(/.*?)" + semanage fcontext -a -t httpd_sys_rw_content_t "/etc/dolibarr(/.*)?" + semanage fcontext -a -t httpd_sys_rw_content_t "/var/lib/dolibarr(/.*)?" restorecon -R -v /etc/dolibarr restorecon -R -v /var/lib/dolibarr %endif diff --git a/build/rpm/httpd-dolibarr.conf b/build/rpm/httpd-dolibarr.conf index 5e778e15b38..1126d4fe442 100644 --- a/build/rpm/httpd-dolibarr.conf +++ b/build/rpm/httpd-dolibarr.conf @@ -15,8 +15,14 @@ Alias /dolibarr /usr/share/dolibarr/htdocs # Directory for web pages - Order deny,allow - Allow from all + = 2.3> + Require all granted + + + Order deny,allow + Allow from all + + DirectoryIndex index.php Options +FollowSymLinks +Indexes @@ -60,27 +66,51 @@ Alias /dolibarr /usr/share/dolibarr/htdocs # Directory for public pages - AllowOverride All + = 2.3> + Require all granted + + Order deny,allow Allow from all + + + AllowOverride All # Config files - AllowOverride All + = 2.3> + Require all granted + + Order deny,allow Allow from all + + + AllowOverride All # Directory for data files - AllowOverride All + = 2.3> + Require all granted + + Order deny,allow Allow from all + + + AllowOverride All - AllowOverride All - Order deny,allow + = 2.3> + Require all granted + + + Order allow,deny Allow from all + + + AllowOverride All diff --git a/dev/initdemo/initdemo.sh b/dev/initdemo/initdemo.sh index ddba2ea6fd9..2e49327ae1d 100755 --- a/dev/initdemo/initdemo.sh +++ b/dev/initdemo/initdemo.sh @@ -171,6 +171,7 @@ then cp -pr $mydir/../../htdocs/install/doctemplates/* "$documentdir/doctemplates/" mkdir -p "$documentdir/ecm/Administrative documents" mkdir -p "$documentdir/ecm/Images" + rm -f "$documentdir/doctemplates/"*/index.html echo cp -pr $mydir/../../doc/images/* "$documentdir/ecm/Images" cp -pr $mydir/../../doc/images/* "$documentdir/ecm/Images" else diff --git a/htdocs/accountancy/admin/categories_list.php b/htdocs/accountancy/admin/categories_list.php index 9833a1c01b1..0dcefdcc0ee 100644 --- a/htdocs/accountancy/admin/categories_list.php +++ b/htdocs/accountancy/admin/categories_list.php @@ -113,7 +113,7 @@ $tabcond[32]= ! empty($conf->accounting->enabled); // List of help for fields $tabhelp=array(); -$tabhelp[32] = array('code'=>$langs->trans("EnterAnyCode")); +$tabhelp[32] = array('code'=>$langs->trans("EnterAnyCode"), 'category_type'=>$langs->trans("SetToYesIfGroupIsComputationOfOtherGroups"), 'formula'=>$langs->trans("EnterCalculationRuleIfPreviousFieldIsYes")); // List of check for fields (NOT USED YET) $tabfieldcheck=array(); diff --git a/htdocs/accountancy/admin/export.php b/htdocs/accountancy/admin/export.php index bdf0a7c1826..dbe2a3b0c1c 100644 --- a/htdocs/accountancy/admin/export.php +++ b/htdocs/accountancy/admin/export.php @@ -135,7 +135,7 @@ llxHeader(); $form = new Form($db); -// $linkback = '' . $langs->trans("BackToModuleList") . ''; +// $linkback = '' . $langs->trans("BackToModuleList") . ''; print load_fiche_titre($langs->trans('ConfigAccountingExpert'), $linkback, 'title_setup'); print "\n".' - '; - } - print '

'; + + // Using BANK_REPORT_LAST_NUM_RELEVE to automatically report last num (or not) + if ($conf->global->BANK_REPORT_LAST_NUM_RELEVE == 1) + { + print ' + + '; + } + print '

'; } // Form to add a transaction with no invoice @@ -640,7 +644,7 @@ if ($resql) print ' '; print ''.$langs->trans("Type").''; print ''.$langs->trans("Numero").''; - //if (! $account > 0) + //if (! $search_account > 0) //{ print ''.$langs->trans("BankAccount").''; //} @@ -674,10 +678,10 @@ if ($resql) print ''; print ''; print ''; - //if (! $account > 0) + //if (! $search_account > 0) //{ print ''; - $form->select_comptes(GETPOST('add_account','int')?GETPOST('add_account','int'):$account,'add_account',0,'',1, ($id > 0 || ! empty($ref)?' disabled="disabled"':'')); + $form->select_comptes(GETPOST('add_account','int')?GETPOST('add_account','int'):$search_account,'add_account',0,'',1, ($id > 0 || ! empty($ref)?' disabled="disabled"':'')); print ''; //} print ''; @@ -685,7 +689,7 @@ if ($resql) /*if (! empty($conf->accounting->enabled)) { print ''; - print $formaccounting->select_account($accountancy_code, 'accountancy_code', 1, null, 1, 1, ''); + print $formaccounting->select_account($search_accountancy_code, 'search_accountancy_code', 1, null, 1, 1, ''); print ''; }*/ print ''; @@ -721,11 +725,6 @@ if ($resql) // Title $bankcateg=new BankCateg($db); - $morehtml='
'; - $morehtml.= ' "; // ' Page '; - $morehtml.=''; - $morehtml.='/'.$nbtotalofpages.' '; - $morehtml.='
'; $addbutton = ''; if ($action != 'addline' && $action != 'reconcile') @@ -735,7 +734,7 @@ if ($resql) if (! empty($conf->global->BANK_USE_VARIOUS_PAYMENT)) // If direct entries is done using miscellaneous payments { if ($user->rights->banque->modifier) { - $addbutton = ''.$langs->trans("AddBankRecord").''; + $addbutton = ''.$langs->trans("AddBankRecord").''; } else { $addbutton = ''.$langs->trans("AddBankRecord").''; } @@ -754,19 +753,24 @@ if ($resql) $addbutton = ''.$langs->trans("AddBankRecord").''; } } + + $morehtml='
'; + $morehtml.= ' "; // ' Page '; + $morehtml.=''; + $morehtml.='/'.$nbtotalofpages.' '; + $morehtml.='
'; + + if ($action != 'addline' && $action != 'reconcile') + { + $morehtml.=$buttonreconcile; + } + $morehtml.=$addbutton; $picto='title_bank'; if ($id > 0 || ! empty($ref)) $picto=''; - if (GETPOST("bid")) - { - $result=$bankcateg->fetch(GETPOST("bid")); - print_barre_liste($langs->trans("BankTransactionForCategory",$bankcateg->label).' '.($socid?' '.$soc->name:''), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, $picto, 0, $morehtml, '', $limit); - } - else - { - print_barre_liste($langs->trans("BankTransactions"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, $picto, 0, $morehtml, '', $limit); - } + + print_barre_liste($langs->trans("BankTransactions"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, $picto, 0, $morehtml, '', $limit); // We can add page now to param if ($page != '') $param.='&page='.urlencode($page); @@ -789,6 +793,22 @@ if ($resql) $moreforfilter .= '
'.$langs->trans('to') . ' ' . $form->select_date($search_dv_end, 'search_end_dv', 0, 0, 1, "search_form", 1, 0, 1).'
'; $moreforfilter .= ''; + if (! empty($conf->categorie->enabled)) + { + // Categories + if (! empty($conf->categorie->enabled) && ! empty($user->rights->categorie->lire)) + { + $langs->load('categories'); + + // Bank line + $moreforfilter.='
'; + $moreforfilter.=$langs->trans('RubriquesTransactions').' : '; + $cate_arbo = $form->select_all_categories(Categorie::TYPE_BANK_LINE, $search_bid, 'parent', null, null, 1); + $moreforfilter.=$form->selectarray('search_bid', $cate_arbo, $search_bid, 1); + $moreforfilter.='
'; + } + } + $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldPreListTitle',$parameters); // Note that $action and $object may have been modified by hook if (empty($reshook)) $moreforfilter .= $hookmanager->resPrint; @@ -832,7 +852,7 @@ if ($resql) if (! empty($arrayfields['type']['checked'])) { print ''; - $form->select_types_paiements(empty($type)?'':$type, 'type', '', 2, 0, 1, 0, 1, 'maxwidth100'); + $form->select_types_paiements(empty($search_type)?'':$search_type, 'search_type', '', 2, 0, 1, 0, 1, 'maxwidth100'); print ''; } if (! empty($arrayfields['b.num_chq']['checked'])) @@ -842,12 +862,12 @@ if ($resql) } if (! empty($arrayfields['bu.label']['checked'])) { - print ''; + print ''; } if (! empty($arrayfields['ba.ref']['checked'])) { print ''; - $form->select_comptes($account,'account',0,'',1, ($id > 0 || ! empty($ref)?' disabled="disabled"':'')); + $form->select_comptes($search_account,'search_account',0,'',1, ($id > 0 || ! empty($ref)?' disabled="disabled"':'')); print ''; } if (! empty($arrayfields['b.debit']['checked'])) @@ -924,6 +944,7 @@ if ($resql) $balance = 0; // For balance $balancecalculated = false; + $posconciliatecol = 0; // Loop on each record $sign = 1; @@ -936,7 +957,7 @@ if ($resql) // If we are in a situation where we need/can show balance, we calculate the start of balance if (! $balancecalculated && (! empty($arrayfields['balancebefore']['checked']) || ! empty($arrayfields['balance']['checked'])) && $mode_balance_ok) { - if (! $account) + if (! $search_account) { dol_print_error('', 'account is not defined but $mode_balance_ok is true'); exit; @@ -951,7 +972,7 @@ if ($resql) $sqlforbalance.= " ".MAIN_DB_PREFIX."bank as b"; $sqlforbalance.= " WHERE b.fk_account = ba.rowid"; $sqlforbalance.= " AND ba.entity IN (".getEntity('bank_account').")"; - $sqlforbalance.= " AND b.fk_account = ".$account; + $sqlforbalance.= " AND b.fk_account = ".$search_account; $sqlforbalance.= " AND (b.datev < '" . $db->idate($db->jdate($objp->dv)) . "' OR (b.datev = '" . $db->idate($db->jdate($objp->dv)) . "' AND (b.dateo < '".$db->idate($db->jdate($objp->do))."' OR (b.dateo = '".$db->idate($db->jdate($objp->do))."' AND b.rowid < ".$objp->rowid."))))"; $resqlforbalance = $db->query($sqlforbalance); //print $sqlforbalance; @@ -1011,7 +1032,7 @@ if ($resql) print ''; print price(price2num($balance, 'MT'), 1, $langs); print ''; - print ''; + print ''; print ''; print ''; } @@ -1037,7 +1058,7 @@ if ($resql) if (! empty($arrayfields['b.rowid']['checked'])) { print ''; - print "rowid.'">'.img_object($langs->trans("ShowPayment").': '.$objp->rowid, 'account', 'class="classfortooltip"').' '.$objp->rowid."   "; + print "rowid.'&save_lastsearch_values=1">'.img_object($langs->trans("ShowPayment").': '.$objp->rowid, 'account', 'class="classfortooltip"').' '.$objp->rowid."   "; print ''; if (! $i) $totalarray['nbfield']++; } @@ -1347,7 +1368,11 @@ if ($resql) } } print ''; - if (! $i) $totalarray['nbfield']++; + if (! $i) + { + $totalarray['nbfield']++; + $posconciliatecol = $totalarray['nbfield']; + } } if (! empty($arrayfields['b.conciliated']['checked'])) @@ -1430,6 +1455,12 @@ if ($resql) } elseif ($totalarray['totaldebfield'] == $i) print ''.price(-1 * $totalarray['totaldeb']).''; elseif ($totalarray['totalcredfield'] == $i) print ''.price($totalarray['totalcred']).''; + elseif ($i == $posconciliatecol) + { + print ''; + if ($user->rights->banque->consolidate && $action == 'reconcile') print ''; + print ''; + } else print ''; } print ''; diff --git a/htdocs/compta/bank/transfer.php b/htdocs/compta/bank/transfer.php index 3819e2acccb..61a4f524a1a 100644 --- a/htdocs/compta/bank/transfer.php +++ b/htdocs/compta/bank/transfer.php @@ -125,7 +125,7 @@ if ($action == 'add') if (! $error) { - $mesgs = $langs->trans("TransferFromToDone",''.$accountfrom->label."",''.$accountto->label."",$amount,$langs->transnoentities("Currency".$conf->currency)); + $mesgs = $langs->trans("TransferFromToDone",''.$accountfrom->label."",''.$accountto->label."",$amount,$langs->transnoentities("Currency".$conf->currency)); setEventMessages($mesgs, null, 'mesgs'); $db->commit(); } diff --git a/htdocs/compta/facture/admin/facture_cust_extrafields.php b/htdocs/compta/facture/admin/facture_cust_extrafields.php index 2e985c8a009..7e6b069b0d9 100644 --- a/htdocs/compta/facture/admin/facture_cust_extrafields.php +++ b/htdocs/compta/facture/admin/facture_cust_extrafields.php @@ -64,7 +64,7 @@ $textobject=strtolower($langs->transnoentitiesnoconv("BillsCustomers")); llxHeader('',$langs->trans("BillsSetup")); -$linkback=''.$langs->trans("BackToModuleList").''; +$linkback=''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans("BillsSetup"),$linkback,'title_setup'); diff --git a/htdocs/compta/facture/admin/facture_rec_cust_extrafields.php b/htdocs/compta/facture/admin/facture_rec_cust_extrafields.php index 0cbea0c8d89..76284e7fe73 100644 --- a/htdocs/compta/facture/admin/facture_rec_cust_extrafields.php +++ b/htdocs/compta/facture/admin/facture_rec_cust_extrafields.php @@ -65,7 +65,7 @@ $textobject=strtolower($langs->transnoentitiesnoconv("BillsCustomers")); llxHeader('',$langs->trans("BillsSetup")); -$linkback=''.$langs->trans("BackToModuleList").''; +$linkback=''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans("BillsSetup"),$linkback,'title_setup'); diff --git a/htdocs/compta/facture/admin/facturedet_cust_extrafields.php b/htdocs/compta/facture/admin/facturedet_cust_extrafields.php index b17e3c416d2..d42139e4ec0 100644 --- a/htdocs/compta/facture/admin/facturedet_cust_extrafields.php +++ b/htdocs/compta/facture/admin/facturedet_cust_extrafields.php @@ -65,7 +65,7 @@ $textobject=strtolower($langs->transnoentitiesnoconv("BillsCustomers")); llxHeader('',$langs->trans("BillsSetup")); -$linkback=''.$langs->trans("BackToModuleList").''; +$linkback=''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans("BillsSetup"),$linkback,'title_setup'); diff --git a/htdocs/compta/facture/admin/facturedet_rec_cust_extrafields.php b/htdocs/compta/facture/admin/facturedet_rec_cust_extrafields.php index 0951dff721b..cc33b8dc026 100644 --- a/htdocs/compta/facture/admin/facturedet_rec_cust_extrafields.php +++ b/htdocs/compta/facture/admin/facturedet_rec_cust_extrafields.php @@ -65,7 +65,7 @@ $textobject=strtolower($langs->transnoentitiesnoconv("BillsCustomers")); llxHeader('',$langs->trans("BillsSetup")); -$linkback=''.$langs->trans("BackToModuleList").''; +$linkback=''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans("BillsSetup"),$linkback,'title_setup'); diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index ca6d2bc8fdd..37f38b732fe 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -191,7 +191,7 @@ if (empty($reshook)) $result = $object->delete($user, 0, $idwarehouse); if ($result > 0) { - header('Location: ' . DOL_URL_ROOT . '/compta/facture/list.php'); + header('Location: ' . DOL_URL_ROOT . '/compta/facture/list.php?restore_lastsearch_values=1'); exit(); } else { setEventMessages($object->error, $object->errors, 'errors'); @@ -217,6 +217,7 @@ if (empty($reshook)) if (! empty($newlang)) { $outputlangs = new Translate("", $conf); $outputlangs->setDefaultLang($newlang); + $outputlangs->load('products'); } if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) { $ret = $object->fetch($id); // Reload to get new records @@ -529,6 +530,7 @@ if (empty($reshook)) if (! empty($newlang)) { $outputlangs = new Translate("", $conf); $outputlangs->setDefaultLang($newlang); + $outputlangs->load('products'); } $model=$object->modelpdf; $ret = $object->fetch($id); // Reload to get new records @@ -606,7 +608,6 @@ if (empty($reshook)) $result=$object->set_draft($user, $idwarehouse); if ($result<0) setEventMessages($object->error, $object->errors, 'errors'); - // Define output language if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) { @@ -617,6 +618,7 @@ if (empty($reshook)) if (! empty($newlang)) { $outputlangs = new Translate("", $conf); $outputlangs->setDefaultLang($newlang); + $outputlangs->load('products'); } $model=$object->modelpdf; $ret = $object->fetch($id); // Reload to get new records @@ -923,6 +925,12 @@ if (empty($reshook)) foreach($facture_source->lines as $line) { + // Extrafields + if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED) && method_exists($line, 'fetch_optionals')) { + // load extrafields + $line->fetch_optionals(); + } + // Reset fk_parent_line for no child products and special product if (($line->product_type != 9 && empty($line->fk_parent_line)) || $line->product_type == 9) { $fk_parent_line = 0; @@ -1495,6 +1503,7 @@ if (empty($reshook)) if (! empty($newlang)) { $outputlangs = new Translate("", $conf); $outputlangs->setDefaultLang($newlang); + $outputlangs->load('products'); } $model=$object->modelpdf; $ret = $object->fetch($id); // Reload to get new records @@ -1747,6 +1756,7 @@ if (empty($reshook)) if (! empty($newlang)) { $outputlangs = new Translate("", $conf); $outputlangs->setDefaultLang($newlang); + $outputlangs->load('products'); } $desc = (! empty($prod->multilangs [$outputlangs->defaultlang] ["description"])) ? $prod->multilangs [$outputlangs->defaultlang] ["description"] : $prod->description; @@ -1770,6 +1780,7 @@ if (empty($reshook)) if (! empty($newlang)) { $outputlangs = new Translate("", $conf); $outputlangs->setDefaultLang($newlang); + $outputlangs->load('products'); } if (! empty($prod->customcode)) $tmptxt .= $outputlangs->transnoentitiesnoconv("CustomCode") . ': ' . $prod->customcode; @@ -1835,6 +1846,7 @@ if (empty($reshook)) if (! empty($newlang)) { $outputlangs = new Translate("", $conf); $outputlangs->setDefaultLang($newlang); + $outputlangs->load('products'); } $model=$object->modelpdf; $ret = $object->fetch($id); // Reload to get new records @@ -2012,6 +2024,7 @@ if (empty($reshook)) if (! empty($newlang)) { $outputlangs = new Translate("", $conf); $outputlangs->setDefaultLang($newlang); + $outputlangs->load('products'); } $ret = $object->fetch($id); // Reload to get new records @@ -3250,7 +3263,7 @@ else if ($id > 0 || ! empty($ref)) // Invoice content - $linkback = '' . $langs->trans("BackToList") . ''; + $linkback = '' . $langs->trans("BackToList") . ''; $morehtmlref='
'; // Ref customer diff --git a/htdocs/compta/facture/class/facture-rec.class.php b/htdocs/compta/facture/class/facture-rec.class.php index 1636be2aace..aeed921d136 100644 --- a/htdocs/compta/facture/class/facture-rec.class.php +++ b/htdocs/compta/facture/class/facture-rec.class.php @@ -1009,7 +1009,7 @@ class FactureRec extends CommonInvoice $facture->type = self::TYPE_STANDARD; $facture->brouillon = 1; - $facture->date = $facturerec->date_when; // We could also use dol_now here but we prefer date_when so invoice has real date when we would like even if we generate later. + $facture->date = (empty($facturerec->date_when)?$now:$facturerec->date_when); // We could also use dol_now here but we prefer date_when so invoice has real date when we would like even if we generate later. $facture->socid = $facturerec->socid; $invoiceidgenerated = $facture->create($user); diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 35ab14454ef..601b1d29495 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -557,6 +557,15 @@ class Facture extends CommonInvoice } $newinvoiceline->fk_parent_line=$fk_parent_line; + + if($this->type === Facture::TYPE_REPLACEMENT && $newinvoiceline->fk_remise_except){ + $discount = new DiscountAbsolute($this->db); + $discount->fetch($newinvoiceline->fk_remise_except); + + $discountId = $soc->set_remise_except($discount->amount_ht, $user, $discount->description, $discount->tva_tx); + $newinvoiceline->fk_remise_except = $discountId; + } + $result=$newinvoiceline->insert(); // Defined the new fk_parent_line @@ -1230,7 +1239,7 @@ class Facture extends CommonInvoice if (empty($rowid) && empty($ref) && empty($ref_ext) && empty($ref_int)) return -1; - $sql = 'SELECT f.rowid,f.facnumber,f.ref_client,f.ref_ext,f.ref_int,f.type,f.fk_soc,f.amount'; + $sql = 'SELECT f.rowid,f.entity,f.facnumber,f.ref_client,f.ref_ext,f.ref_int,f.type,f.fk_soc,f.amount'; $sql.= ', f.tva, f.localtax1, f.localtax2, f.total, f.total_ttc, f.revenuestamp'; $sql.= ', f.remise_percent, f.remise_absolue, f.remise'; $sql.= ', f.datef as df, f.date_pointoftax'; @@ -1267,6 +1276,8 @@ class Facture extends CommonInvoice $obj = $this->db->fetch_object($result); $this->id = $obj->rowid; + $this->entity = $obj->entity; + $this->ref = $obj->facnumber; $this->ref_client = $obj->ref_client; $this->ref_ext = $obj->ref_ext; @@ -2359,9 +2370,12 @@ class Facture extends CommonInvoice $final = ($this->lines[$i]->situation_percent == 100); $i++; } - if ($final) { - $this->setFinal($user); - } + + if (empty($final)) $this->situation_final = 0; + else $this->situation_final = 1; + + $this->setFinal($user); + } } } @@ -3004,6 +3018,9 @@ class Facture extends CommonInvoice $line->total_ttc = $tabprice[2]; $line->total_localtax1 = $tabprice[9]; $line->total_localtax2 = $tabprice[10]; + $line->multicurrency_total_ht = $tabprice[16]; + $line->multicurrency_total_tva = $tabprice[17]; + $line->multicurrency_total_ttc = $tabprice[18]; $line->update($user); $this->update_price(1); $this->db->commit(); @@ -3205,62 +3222,6 @@ class Facture extends CommonInvoice } } - /** - * Return list of payments - * - * @param string $filtertype 1 to filter on type of payment == 'PRE' - * @return array Array with list of payments - */ - function getListOfPayments($filtertype='') - { - $retarray=array(); - - $table='paiement_facture'; - $table2='paiement'; - $field='fk_facture'; - $field2='fk_paiement'; - $sharedentity='facture'; - if ($this->element == 'facture_fourn' || $this->element == 'invoice_supplier') - { - $table='paiementfourn_facturefourn'; - $table2='paiementfourn'; - $field='fk_facturefourn'; - $field2='fk_paiementfourn'; - $sharedentity='facture_fourn'; - } - - $sql = 'SELECT p.ref, pf.amount, pf.multicurrency_amount, p.fk_paiement, p.datep, p.num_paiement as num, t.code'; - $sql.= ' FROM '.MAIN_DB_PREFIX.$table.' as pf, '.MAIN_DB_PREFIX.$table2.' as p, '.MAIN_DB_PREFIX.'c_paiement as t'; - $sql.= ' WHERE pf.'.$field.' = '.$this->id; - //$sql.= ' WHERE pf.'.$field.' = 1'; - $sql.= ' AND pf.'.$field2.' = p.rowid'; - $sql.= ' AND p.fk_paiement = t.id'; - $sql.= ' AND p.entity IN (' . getEntity($sharedentity).')'; - if ($filtertype) $sql.=" AND t.code='PRE'"; - - dol_syslog(get_class($this)."::getListOfPayments", LOG_DEBUG); - $resql=$this->db->query($sql); - if ($resql) - { - $num = $this->db->num_rows($resql); - $i=0; - while ($i < $num) - { - $obj = $this->db->fetch_object($resql); - $retarray[]=array('amount'=>$obj->amount,'type'=>$obj->code, 'date'=>$obj->datep, 'num'=>$obj->num, 'ref'=>$obj->ref); - $i++; - } - $this->db->free($resql); - return $retarray; - } - else - { - $this->error=$this->db->lasterror(); - dol_print_error($this->db); - return array(); - } - } - /** * Return next reference of customer invoice not already used (or last reference) @@ -3834,6 +3795,7 @@ class Facture extends CommonInvoice // Initialize parameters $this->id=0; + $this->entity = 1; $this->ref = 'SPECIMEN'; $this->specimen=1; $this->socid = 1; @@ -4117,7 +4079,6 @@ class Facture extends CommonInvoice $this->db->begin(); - $this->situation_final = 1; $sql = 'UPDATE ' . MAIN_DB_PREFIX . 'facture SET situation_final = ' . $this->situation_final . ' where rowid = ' . $this->id; dol_syslog(__METHOD__, LOG_DEBUG); diff --git a/htdocs/compta/facture/fiche-rec.php b/htdocs/compta/facture/fiche-rec.php index af81e797252..a3d93608ebf 100644 --- a/htdocs/compta/facture/fiche-rec.php +++ b/htdocs/compta/facture/fiche-rec.php @@ -116,6 +116,8 @@ $permissionnote = $user->rights->facture->creer; // Used by the include of actio $permissiondellink=$user->rights->facture->creer; // Used by the include of actions_dellink.inc.php $permissiontoedit = $user->rights->facture->creer; // Used by the include of actions_lineupdonw.inc.php +$now = dol_now(); + /* * Actions @@ -1131,7 +1133,7 @@ if ($action == 'create') print " ".$form->selectarray('unit_frequency', array('d'=>$langs->trans('Day'), 'm'=>$langs->trans('Month'), 'y'=>$langs->trans('Year')), (GETPOST('unit_frequency')?GETPOST('unit_frequency'):'m')); print ""; - // First date of execution for cron + // Date next run print "".$langs->trans('NextDateToExecution').""; $date_next_execution = isset($date_next_execution) ? $date_next_execution : (GETPOST('remonth') ? dol_mktime(12, 0, 0, GETPOST('remonth'), GETPOST('reday'), GETPOST('reyear')) : -1); print $form->select_date($date_next_execution, '', 1, 1, '', "add", 1, 1, 1); @@ -1531,6 +1533,8 @@ else { print $form->editfieldval($langs->trans("NextDateToExecution"), 'date_when', $object->date_when, $object, $user->rights->facture->creer, 'day', $object->date_when, null, '', '', 0, 'strikeIfMaxNbGenReached'); } + //var_dump(dol_print_date($object->date_when+60, 'dayhour').' - '.dol_print_date($now, 'dayhour')); + if ($action != 'editdate_when' && $object->frequency > 0 && $object->date_when && $object->date_when < $now) print img_warning($langs->trans("Late")); print ''; print ''; diff --git a/htdocs/compta/facture/invoicetemplate_list.php b/htdocs/compta/facture/invoicetemplate_list.php index d3a7c01b4c0..0966807facd 100644 --- a/htdocs/compta/facture/invoicetemplate_list.php +++ b/htdocs/compta/facture/invoicetemplate_list.php @@ -72,12 +72,12 @@ $search_montant_vat=GETPOST('search_montant_vat'); $search_montant_ttc=GETPOST('search_montant_ttc'); $search_payment_mode=GETPOST('search_payment_mode'); $search_payment_term=GETPOST('search_payment_term'); -$day=GETPOST('day'); -$year=GETPOST('year'); -$month=GETPOST('month'); -$day_date_when=GETPOST('day_date_when'); -$year_date_when=GETPOST('year_date_when'); -$month_date_when=GETPOST('month_date_when'); +$search_day=GETPOST('search_day','int'); +$search_year=GETPOST('search_year','int'); +$search_month=GETPOST('search_month','int'); +$search_day_date_when=GETPOST('search_day_date_when','int'); +$search_year_date_when=GETPOST('search_year_date_when','int'); +$search_month_date_when=GETPOST('search_month_date_when','int'); $search_recurring=GETPOST('search_recurring','int'); $search_frequency=GETPOST('search_frequency','alpha'); $search_unit_frequency=GETPOST('search_unit_frequency','alpha'); @@ -172,12 +172,12 @@ if (empty($reshook)) $search_montant_ttc=''; $search_payment_mode=''; $search_payment_term=''; - $day=''; - $year=''; - $month=''; - $day_date_when=''; - $year_date_when=''; - $month_date_when=''; + $search_day=''; + $search_year=''; + $search_month=''; + $search_day_date_when=''; + $search_year_date_when=''; + $search_month_date_when=''; $search_recurring=''; $search_frequency=''; $search_unit_frequency=''; @@ -239,38 +239,38 @@ if (! empty($search_payment_term) && $search_payment_term != '-1') $sql .= nat if ($search_recurring == '1') $sql .= ' AND f.frequency > 0'; if ($search_recurring == '0') $sql .= ' AND (f.frequency IS NULL or f.frequency = 0)'; if ($search_frequency != '') $sql .= natural_search('f.frequency', $search_frequency, 1); -if ($search_unit_frequency != '') $sql .= natural_search('f.unit_frequency', $search_unit_frequency); +if ($search_unit_frequency != '') $sql .= ' AND f.frequency > 0'.natural_search('f.unit_frequency', $search_unit_frequency); if ($search_status != '' && $search_status >= -1) { if ($search_status == 0) $sql.= ' AND frequency = 0 AND suspended = 0'; if ($search_status == 1) $sql.= ' AND frequency != 0 AND suspended = 0'; if ($search_status == -1) $sql.= ' AND suspended = 1'; } -if ($month > 0) +if ($search_month > 0) { - if ($year > 0 && empty($day)) - $sql.= " AND f.date_last_gen BETWEEN '".$db->idate(dol_get_first_day($year,$month,false))."' AND '".$db->idate(dol_get_last_day($year,$month,false))."'"; - else if ($year > 0 && ! empty($day)) - $sql.= " AND f.date_last_gen BETWEEN '".$db->idate(dol_mktime(0, 0, 0, $month, $day, $year))."' AND '".$db->idate(dol_mktime(23, 59, 59, $month, $day, $year))."'"; + if ($search_year > 0 && empty($search_day)) + $sql.= " AND f.date_last_gen BETWEEN '".$db->idate(dol_get_first_day($search_year,$search_month,false))."' AND '".$db->idate(dol_get_last_day($search_year,$search_month,false))."'"; + else if ($search_year > 0 && ! empty($search_day)) + $sql.= " AND f.date_last_gen BETWEEN '".$db->idate(dol_mktime(0, 0, 0, $search_month, $search_day, $search_year))."' AND '".$db->idate(dol_mktime(23, 59, 59, $search_month, $search_day, $search_year))."'"; else - $sql.= " AND date_format(f.date_last_gen, '%m') = '".$month."'"; + $sql.= " AND date_format(f.date_last_gen, '%m') = '".$db->escape($search_month)."'"; } -else if ($year > 0) +else if ($search_year > 0) { - $sql.= " AND f.date_last_gen BETWEEN '".$db->idate(dol_get_first_day($year,1,false))."' AND '".$db->idate(dol_get_last_day($year,12,false))."'"; + $sql.= " AND f.date_last_gen BETWEEN '".$db->idate(dol_get_first_day($search_year,1,false))."' AND '".$db->idate(dol_get_last_day($search_year,12,false))."'"; } -if ($month_date_when > 0) +if ($search_month_date_when > 0) { - if ($year_date_when > 0 && empty($day_date_when)) - $sql.= " AND f.date_when BETWEEN '".$db->idate(dol_get_first_day($year_date_when,$month_date_when,false))."' AND '".$db->idate(dol_get_last_day($year_date_when,$month_date_when,false))."'"; - else if ($year_date_when > 0 && ! empty($day_date_when)) - $sql.= " AND f.date_date_when_reglement BETWEEN '".$db->idate(dol_mktime(0, 0, 0, $month_date_when, $day_date_when, $year_date_when))."' AND '".$db->idate(dol_mktime(23, 59, 59, $month_date_when, $day_date_when, $year_date_when))."'"; + if ($search_year_date_when > 0 && empty($search_day_date_when)) + $sql.= " AND f.date_when BETWEEN '".$db->idate(dol_get_first_day($search_year_date_when,$search_month_date_when,false))."' AND '".$db->idate(dol_get_last_day($search_year_date_when,$search_month_date_when,false))."'"; + else if ($search_year_date_when > 0 && ! empty($search_day_date_when)) + $sql.= " AND f.date_date_when_reglement BETWEEN '".$db->idate(dol_mktime(0, 0, 0, $search_month_date_when, $search_day_date_when, $search_year_date_when))."' AND '".$db->idate(dol_mktime(23, 59, 59, $search_month_date_when, $search_day_date_when, $search_year_date_when))."'"; else - $sql.= " AND date_format(f.date_when, '%m') = '".$month_date_when."'"; + $sql.= " AND date_format(f.date_when, '%m') = '".$db->escape($search_month_date_when)."'"; } -else if ($year_date_when > 0) +else if ($search_year_date_when > 0) { - $sql.= " AND f.date_when BETWEEN '".$db->idate(dol_get_first_day($year_date_when,1,false))."' AND '".$db->idate(dol_get_last_day($year_date_when,12,false))."'"; + $sql.= " AND f.date_when BETWEEN '".$db->idate(dol_get_first_day($search_year_date_when,1,false))."' AND '".$db->idate(dol_get_last_day($search_year_date_when,12,false))."'"; } $nbtotalofrecords = ''; @@ -291,26 +291,26 @@ if ($resql) $param=''; if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.urlencode($contextpage); if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.urlencode($limit); - if ($socid) $param.='&socid='.urlencode($socid); - if ($day) $param.='&day='.urlencode($day); - if ($month) $param.='&month='.urlencode($month); - if ($year) $param.='&year=' .urlencode($year); - if ($day_date_when) $param.='&day_date_when='.urlencode($day_date_when); - if ($month_date_when) $param.='&month_date_when='.urlencode($month_date_when); - if ($year_date_when) $param.='&year_date_when=' .urlencode($year_date_when); - if ($search_ref) $param.='&search_ref=' .urlencode($search_ref); - if ($search_societe) $param.='&search_societe=' .urlencode($search_societe); + if ($socid) $param.='&socid='.urlencode($socid); + if ($search_day) $param.='&search_day='.urlencode($search_day); + if ($search_month) $param.='&search_month='.urlencode($search_month); + if ($search_year) $param.='&search_year=' .urlencode($search_year); + if ($search_day_date_when) $param.='&search_day_date_when='.urlencode($search_day_date_when); + if ($search_month_date_when) $param.='&search_month_date_when='.urlencode($search_month_date_when); + if ($search_year_date_when) $param.='&search_year_date_when=' .urlencode($search_year_date_when); + if ($search_ref) $param.='&search_ref=' .urlencode($search_ref); + if ($search_societe) $param.='&search_societe=' .urlencode($search_societe); if ($search_montant_ht != '') $param.='&search_montant_ht=' .urlencode($search_montant_ht); if ($search_montant_vat != '') $param.='&search_montant_vat='.urlencode($search_montant_vat); if ($search_montant_ttc != '') $param.='&search_montant_ttc='.urlencode($search_montant_ttc); if ($search_payment_mode != '') $param.='&search_payment_mode='.urlencode($search_payment_mode); if ($search_payment_type != '') $param.='&search_payment_type='.urlencode($search_payment_type); if ($search_recurring != '' && $search_recurrning != '-1') $param.='&search_recurring=' .urlencode($search_recurring); - if ($search_frequency > 0) $param.='&search_frequency=' .urlencode($search_frequency); - if ($search_unit_frequency > 0) $param.='&search_unit_frequency='.urlencode($search_unit_frequency); + if ($search_frequency > 0) $param.='&search_frequency=' .urlencode($search_frequency); + if ($search_unit_frequency != '') $param.='&search_unit_frequency='.urlencode($search_unit_frequency); if ($search_status != '') $param.='&search_status='.urlencode($search_status); - if ($option) $param.="&option=".urlencode($option); - if ($optioncss != '') $param.='&optioncss='.urlencode($optioncss); + if ($option) $param.="&option=".urlencode($option); + if ($optioncss != '') $param.='&optioncss='.urlencode($optioncss); // Add $param from extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php'; @@ -420,18 +420,18 @@ if ($resql) if (! empty($arrayfields['f.date_last_gen']['checked'])) { print ''; - if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print ''; - print ''; - $formother->select_year($year?$year:-1,'year',1, 20, 5); + if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print ''; + print ''; + $formother->select_year($search_year?$search_year:-1,'search_year',1, 20, 5); print ''; } - // Date due + // Date next generation if (! empty($arrayfields['f.date_when']['checked'])) { print ''; - if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print ''; - print ''; - $formother->select_year($year_date_when?$year_date_when:-1,'year_date_when',1, 20, 5); + if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print ''; + print ''; + $formother->select_year($search_year_date_when?$search_year_date_when:-1,'search_year_date_when',1, 20, 5); print ''; } // Extra fields @@ -583,21 +583,24 @@ if ($resql) if (! empty($arrayfields['f.nb_gen_done']['checked'])) { print ''; - print ($objp->frequency ? $objp->nb_gen_done.($objp->nb_gen_max>0?' / '. $objp->nb_gen_max:'') : ''.$langs->trans('NA').''); + print ($objp->frequency > 0 ? $objp->nb_gen_done.($objp->nb_gen_max>0?' / '. $objp->nb_gen_max:'') : ''.$langs->trans('NA').''); print ''; if (! $i) $totalarray['nbfield']++; } + // Date last generation if (! empty($arrayfields['f.date_last_gen']['checked'])) { print ''; - print ($objp->frequency ? dol_print_date($db->jdate($objp->date_last_gen),'day') : ''.$langs->trans('NA').''); + print ($objp->frequency > 0 ? dol_print_date($db->jdate($objp->date_last_gen),'day') : ''.$langs->trans('NA').''); print ''; if (! $i) $totalarray['nbfield']++; } + // Date next generation if (! empty($arrayfields['f.date_when']['checked'])) { print ''; print ($objp->frequency ? ($invoicerectmp->isMaxNbGenReached()?'':'').dol_print_date($db->jdate($objp->date_when),'day').($invoicerectmp->isMaxNbGenReached()?'':'') : ''.$langs->trans('NA').''); + if ($objp->frequency > 0 && $db->jdate($objp->date_when) && $db->jdate($objp->date_when) < $now) print img_warning($langs->trans("Late")); print ''; if (! $i) $totalarray['nbfield']++; } diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index 84898930ed9..8d3f8971ef4 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -46,8 +46,9 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/invoice.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; if (! empty($conf->commande->enabled)) require_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php'; -if (! empty($conf->projet->enabled)) require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; + $langs->load('bills'); $langs->load('companies'); @@ -152,7 +153,7 @@ $arrayfields=array( 'f.type'=>array('label'=>$langs->trans("Type"), 'checked'=>0), 'f.date'=>array('label'=>$langs->trans("DateInvoice"), 'checked'=>1), 'f.date_lim_reglement'=>array('label'=>$langs->trans("DateDue"), 'checked'=>1), - 'p.ref'=>array('label'=>$langs->trans("ProjectRef"), 'checked'=>0), + 'p.ref'=>array('label'=>$langs->trans("ProjectRef"), 'checked'=>0, 'enabled'=>(empty($conf->projet->enabled)?0:1)), 's.nom'=>array('label'=>$langs->trans("ThirdParty"), 'checked'=>1), 's.town'=>array('label'=>$langs->trans("Town"), 'checked'=>1), 's.zip'=>array('label'=>$langs->trans("Zip"), 'checked'=>1), @@ -162,8 +163,8 @@ $arrayfields=array( 'f.fk_mode_reglement'=>array('label'=>$langs->trans("PaymentMode"), 'checked'=>1), 'f.total_ht'=>array('label'=>$langs->trans("AmountHT"), 'checked'=>1), 'f.total_vat'=>array('label'=>$langs->trans("AmountVAT"), 'checked'=>0), - 'f.total_localtax1'=>array('label'=>$langs->transcountry("AmountLT1", $mysoc->country_code), 'checked'=>0, 'enabled'=>$mysoc->localtax1_assuj=="1"), - 'f.total_localtax2'=>array('label'=>$langs->transcountry("AmountLT2", $mysoc->country_code), 'checked'=>0, 'enabled'=>$mysoc->localtax2_assuj=="1"), + 'f.total_localtax1'=>array('label'=>$langs->transcountry("AmountLT1", $mysoc->country_code), 'checked'=>0, 'enabled'=>($mysoc->localtax1_assuj=="1")), + 'f.total_localtax2'=>array('label'=>$langs->transcountry("AmountLT2", $mysoc->country_code), 'checked'=>0, 'enabled'=>($mysoc->localtax2_assuj=="1")), 'f.total_ttc'=>array('label'=>$langs->trans("AmountTTC"), 'checked'=>0), 'dynamount_payed'=>array('label'=>$langs->trans("Received"), 'checked'=>0), 'rtp'=>array('label'=>$langs->trans("Rest"), 'checked'=>0), @@ -861,7 +862,7 @@ if ($resql) // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; // Hook fields - $parameters=array('arrayfields'=>$arrayfields); + $parameters=array('arrayfields'=>$arrayfields,'param'=>$param,'sortfield'=>$sortfield,'sortorder'=>$sortorder); $reshook=$hookmanager->executeHooks('printFieldListTitle',$parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; if (! empty($arrayfields['f.datec']['checked'])) print_liste_field_titre($arrayfields['f.datec']['label'],$_SERVER["PHP_SELF"],"f.datec","",$param,'align="center" class="nowrap"',$sortfield,$sortorder); diff --git a/htdocs/compta/paiement/card.php b/htdocs/compta/paiement/card.php index 3ec17c2521d..6179fb9ac22 100644 --- a/htdocs/compta/paiement/card.php +++ b/htdocs/compta/paiement/card.php @@ -236,7 +236,7 @@ print $form->editfieldval("Numero",'num_paiement',$object->numero,$object,$objec print ''; // Amount -print ''.$langs->trans('Amount').''.price($object->montant,'',$langs,0,0,-1,$conf->currency).''; +print ''.$langs->trans('Amount').''.price($object->amount,'',$langs,0,-1,-1,$conf->currency).''; // Note print ''.$form->editfieldkey("Note",'note',$object->note,$object,$user->rights->facture->paiement).''; diff --git a/htdocs/compta/paiement/cheque/card.php b/htdocs/compta/paiement/cheque/card.php index c684e041660..8a165ebe811 100644 --- a/htdocs/compta/paiement/cheque/card.php +++ b/htdocs/compta/paiement/cheque/card.php @@ -564,7 +564,7 @@ else $accountstatic=new Account($db); $accountstatic->fetch($object->account_id); - $linkback=''.$langs->trans("BackToList").''; + $linkback=''.$langs->trans("BackToList").''; $morehtmlref=''; dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref); diff --git a/htdocs/compta/paiement/cheque/class/remisecheque.class.php b/htdocs/compta/paiement/cheque/class/remisecheque.class.php index 3458e6bc82a..528b01477a6 100644 --- a/htdocs/compta/paiement/cheque/class/remisecheque.class.php +++ b/htdocs/compta/paiement/cheque/class/remisecheque.class.php @@ -979,25 +979,56 @@ class RemiseCheque extends CommonObject } /** - * Return clicable name (with picto eventually) + * Return clicable name (with picto eventually) * - * @param int $withpicto 0=No picto, 1=Include picto into link, 2=Only picto - * @param string $option Sur quoi pointe le lien - * @return string Chaine avec URL + * @param int $withpicto 0=No picto, 1=Include picto into link, 2=Only picto + * @param string $option Sur quoi pointe le lien + * @param int $notooltip 1=Disable tooltip + * @param string $morecss Add more css on link + * @param int $save_lastsearch_value -1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking + * @return string Chaine avec URL */ - function getNomUrl($withpicto=0,$option='') + function getNomUrl($withpicto=0, $option='', $notooltip=0, $morecss='', $save_lastsearch_value=-1) { - global $langs; + global $conf, $langs; $result=''; - $label = $langs->trans("ShowCheckReceipt").': '.$this->ref; - $link = ''; + $label = ''.$langs->trans("ShowCheckReceipt").''; + $label.= '
'; + $label.= '' . $langs->trans('Ref') . ': ' . $this->ref; + + $url = DOL_URL_ROOT.'/compta/paiement/cheque/card.php?id='.$this->id; + + if ($option != 'nolink') + { + // Add param to save lastsearch_values or not + $add_save_lastsearch_values=($save_lastsearch_value == 1 ? 1 : 0); + if ($save_lastsearch_value == -1 && preg_match('/list\.php/',$_SERVER["PHP_SELF"])) $add_save_lastsearch_values=1; + if ($add_save_lastsearch_values) $url.='&save_lastsearch_values=1'; + } + + $linkclose=''; + if (empty($notooltip)) + { + if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) + { + $label=$langs->trans("ShowCheckReceipt"); + $linkclose.=' alt="'.dol_escape_htmltag($label, 1).'"'; + } + $linkclose.=' title="'.dol_escape_htmltag($label, 1).'"'; + $linkclose.=' class="classfortooltip'.($morecss?' '.$morecss:'').'"'; + } + else $linkclose = ($morecss?' class="'.$morecss.'"':''); + + $linkstart = '
'; $linkend=''; - if ($withpicto) $result.=($link.img_object($label, 'payment', 'class="classfortooltip"').$linkend); - if ($withpicto && $withpicto != 2) $result.=' '; - if ($withpicto != 2) $result.=$link.$this->ref.$linkend; + $result .= $linkstart; + if ($withpicto) $result.=img_object(($notooltip?'':$label), ($this->picto?$this->picto:'generic'), ($notooltip?(($withpicto != 2) ? 'class="paddingright"' : ''):'class="'.(($withpicto != 2) ? 'paddingright ' : '').'classfortooltip"'), 0, 0, $notooltip?0:1); + if ($withpicto != 2) $result.= $this->ref; + $result .= $linkend; return $result; } diff --git a/htdocs/compta/paiement/cheque/index.php b/htdocs/compta/paiement/cheque/index.php index e9f887e37f4..9ddbd0b5cf6 100644 --- a/htdocs/compta/paiement/cheque/index.php +++ b/htdocs/compta/paiement/cheque/index.php @@ -92,10 +92,12 @@ print '
'; $max=10; -$sql = "SELECT bc.rowid, bc.date_bordereau as db, bc.amount, bc.ref as ref"; -$sql.= ", bc.statut, bc.nbcheque"; -$sql.= ", ba.label, ba.rowid as bid"; +$sql = "SELECT bc.rowid, bc.date_bordereau as db, bc.amount, bc.ref as ref,"; +$sql.= " bc.statut, bc.nbcheque,"; +$sql.= " ba.ref, ba.label, ba.rowid as bid, ba.number, ba.currency_code, ba.account_number, ba.accountancy_journal,"; +$sql.= " aj.code"; $sql.= " FROM ".MAIN_DB_PREFIX."bordereau_cheque as bc, ".MAIN_DB_PREFIX."bank_account as ba"; +$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."accounting_journal as aj ON aj.rowid = ba.fk_accountancy_journal"; $sql.= " WHERE ba.rowid = bc.fk_bank_account"; $sql.= " AND bc.entity = ".$conf->entity; $sql.= " ORDER BY bc.date_bordereau DESC, rowid DESC"; @@ -122,8 +124,13 @@ if ($resql) $checkdepositstatic->statut=$objp->statut; $accountstatic->id=$objp->bid; + $accountstatic->ref=$objp->ref; $accountstatic->label=$objp->label; - + $accountstatic->number=$objp->number; + $accountstatic->currency_code=$objp->currency_code; + $accountstatic->account_number=$objp->account_number; + $accountstatic->accountancy_journal=$objp->code; + print ''."\n"; print ''.$checkdepositstatic->getNomUrl(1).''; diff --git a/htdocs/compta/paiement/class/paiement.class.php b/htdocs/compta/paiement/class/paiement.class.php index fdcfc89c4e0..42106c1cb13 100644 --- a/htdocs/compta/paiement/class/paiement.class.php +++ b/htdocs/compta/paiement/class/paiement.class.php @@ -1047,7 +1047,7 @@ class Paiement extends CommonObject */ function getNomUrl($withpicto=0, $option='', $mode='withlistofinvoices', $notooltip=0) { - global $langs; + global $conf, $langs; if (! empty($conf->dol_no_mouse_hover)) $notooltip=1; // Force disable tooltips @@ -1089,7 +1089,7 @@ class Paiement extends CommonObject $result .= $linkstart; if ($withpicto) $result.=img_object(($notooltip?'':$label), ($this->picto?$this->picto:'generic'), ($notooltip?(($withpicto != 2) ? 'class="paddingright"' : ''):'class="'.(($withpicto != 2) ? 'paddingright ' : '').'classfortooltip"'), 0, 0, $notooltip?0:1); - if ($withpicto && $withpicto != 2) $result.= $this->ref; + if ($withpicto && $withpicto != 2) $result.= ($this->ref?$this->ref:$this->id); $result .= $linkend; return $result; diff --git a/htdocs/compta/prelevement/factures.php b/htdocs/compta/prelevement/factures.php index c829b139436..64811c7604a 100644 --- a/htdocs/compta/prelevement/factures.php +++ b/htdocs/compta/prelevement/factures.php @@ -205,7 +205,7 @@ if ($result) print_liste_field_titre("Bill",$_SERVER["PHP_SELF"],"p.ref",'',$param,'',$sortfield,$sortorder); print_liste_field_titre("ThirdParty",$_SERVER["PHP_SELF"],"s.nom",'',$param,'',$sortfield,$sortorder); print_liste_field_titre("AmountInvoice",$_SERVER["PHP_SELF"],"f.total_ttc","",$param,'align="right"',$sortfield,$sortorder); - print_liste_field_titre("AmountRequested",$_SERVER["PHP_SELF"],"pl.amount_requested","",$param,'align="right"',$sortfield,$sortorder); + print_liste_field_titre("AmountRequested",$_SERVER["PHP_SELF"],"pl.amount","",$param,'align="right"',$sortfield,$sortorder); print_liste_field_titre("StatusDebitCredit",$_SERVER["PHP_SELF"],"","",$param,'align="center"',$sortfield,$sortorder); print_liste_field_titre(''); print "\n"; diff --git a/htdocs/compta/prelevement/list.php b/htdocs/compta/prelevement/list.php index 245903101cf..ff6fe4e109c 100644 --- a/htdocs/compta/prelevement/list.php +++ b/htdocs/compta/prelevement/list.php @@ -2,7 +2,7 @@ /* Copyright (C) 2005 Rodolphe Quiedeville * Copyright (C) 2005-2016 Laurent Destailleur * Copyright (C) 2005-2009 Regis Houssin - * Copyright (C) 2010-2012 Juanjo Menent + * Copyright (C) 2010-2018 Juanjo Menent * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -101,7 +101,7 @@ if ($socid) $sql.= " AND s.rowid = ".$socid; if ($search_line) $sql.= " AND pl.rowid = '".$db->escape($search_line)."'"; if ($search_bon) $sql.= natural_search("p.ref", $search_bon); if ($search_code) $sql.= natural_search("s.code_client", $search_code); -if ($search_company) natural_search("s.nom", $search_company); +if ($search_company) $sql.= natural_search("s.nom", $search_company); $sql.= $db->order($sortfield,$sortorder); @@ -123,13 +123,14 @@ if ($result) $urladd = "&statut=".$statut; $urladd .= "&search_bon=".$search_bon; - - print_barre_liste($langs->trans("WithdrawalsLines"), $page, $_SERVER["PHP_SELF"], $urladd, $sortfield, $sortorder, '', $num, $nbtotalofrecords, 'title_generic', 0, '', '', $limit); + if ($limit > 0 && $limit != $conf->liste_limit) $urladd.='&limit='.urlencode($limit); print"\n\n"; print '
'; - $moreforfilter=''; + print_barre_liste($langs->trans("WithdrawalsLines"), $page, $_SERVER["PHP_SELF"], $urladd, $sortfield, $sortorder, '', $num, $nbtotalofrecords, 'title_generic', 0, '', '', $limit); + + $moreforfilter=''; print '
'; print ''."\n"; diff --git a/htdocs/compta/recap-compta.php b/htdocs/compta/recap-compta.php index 4b5351324a3..6102c9fd734 100644 --- a/htdocs/compta/recap-compta.php +++ b/htdocs/compta/recap-compta.php @@ -52,13 +52,13 @@ if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, $offset = $limit * $page; $pageprev = $page - 1; $pagenext = $page + 1; -if (! $sortfield) $sortfield="f.datef"; // Set here default search field +if (! $sortfield) $sortfield="f.datef,f.rowid"; // Set here default search field if (! $sortorder) $sortorder="DESC"; $arrayfields=array( 'f.datef'=>array('label'=>"Date", 'checked'=>1), - //... + //... ); /* @@ -94,7 +94,7 @@ if ($id > 0) dol_fiche_head($head, 'customer', $langs->trans("ThirdParty"), 0, 'company'); dol_banner_tab($object, 'socid', '', ($user->societe_id?0:1), 'rowid', 'nom', '', '', 0, '', '', 1); dol_fiche_end(); - + if (! empty($conf->facture->enabled) && $user->rights->facture->lire) { // Invoice list @@ -110,9 +110,8 @@ if ($id > 0) print ''; print ''; print ''; - + $TData = array(); - $TDataSort = array(); $sql = "SELECT s.nom, s.rowid as socid, f.facnumber, f.amount, f.datef as df,"; $sql.= " f.paye as paye, f.fk_statut as statut, f.rowid as facid,"; @@ -142,25 +141,25 @@ if ($id > 0) continue; } $totalpaye = $fac->getSommePaiement(); - + $userstatic->id=$objf->userid; $userstatic->login=$objf->login; - + $values = array( 'fk_facture' => $objf->facid, 'date' => $fac->date, + 'datefieldforsort' => $fac->date.'-'.$fac->ref, 'link' => $fac->getNomUrl(1), 'status' => $fac->getLibStatut(2,$totalpaye), 'amount' => $fac->total_ttc, 'author' => $userstatic->getLoginUrl(1) ); - + $parameters = array('socid' => $id, 'values' => &$values, 'fac' => $fac, 'userstatic' => $userstatic); $reshook = $hookmanager->executeHooks('facdao', $parameters, $object); // Note that $parameters['values'] and $object may have been modified by some hooks if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); - + $TData[] = $values; - $TDataSort[] = $fac->date; // Paiements $sql = "SELECT p.rowid, p.datep as dp, pf.amount, p.statut,"; @@ -171,7 +170,7 @@ if ($id > 0) $sql.= " WHERE pf.fk_paiement = p.rowid"; $sql.= " AND p.entity = ".$conf->entity; $sql.= " AND pf.fk_facture = ".$fac->id; - $sql.= " ORDER BY p.datep ASC"; + $sql.= " ORDER BY p.datep ASC, p.rowid ASC"; $resqlp = $db->query($sql); if ($resqlp) @@ -182,28 +181,28 @@ if ($id > 0) while ($j < $nump) { $objp = $db->fetch_object($resqlp); - + $paymentstatic = new Paiement($db); $paymentstatic->id = $objp->rowid; - + $userstatic->id=$objp->userid; $userstatic->login=$objp->login; - + $values = array( - 'fk_paiement' => $objp->rowid, + 'fk_paiement' => $objp->rowid, 'date' => $db->jdate($objp->dp), + 'datefieldforsort' => $db->jdate($objp->dp).'-'.$fac->ref, 'link' => $langs->trans("Payment") .' '. $paymentstatic->getNomUrl(1), 'status' => '', 'amount' => -$objp->amount, 'author' => $userstatic->getLoginUrl(1) ); - + $parameters = array('socid' => $id, 'values' => &$values, 'fac' => $fac, 'userstatic' => $userstatic, 'paymentstatic' => $paymentstatic); $reshook = $hookmanager->executeHooks('paydao', $parameters, $object); // Note that $parameters['values'] and $object may have been modified by some hooks if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); - + $TData[] = $values; - $TDataSort[] = $db->jdate($objp->dp); $j++; } @@ -220,55 +219,58 @@ if ($id > 0) { dol_print_error($db); } - + if(empty($TData)) { print ''; } else { - - // Sort array by date - asort($TDataSort); - array_multisort($TData,$TDataSort); + + // Sort array by date ASC to calucalte balance + $TData = dol_sort_array($TData, 'datefieldforsort', 'ASC'); // Balance calculation + $balance = 0; foreach($TData as &$data1) { $balance += $data1['amount']; $data1['balance'] += $balance; } - - // Reverse array to have last elements on top - $TData = dol_sort_array($TData, 'date', $sortorder); - - + + // Resorte array to have elements on the required $sortorder + $TData = dol_sort_array($TData, 'datefieldforsort', $sortorder); + $totalDebit = 0; $totalCredit = 0; - + // Display array foreach($TData as $data) { - + $html_class = ''; if (!empty($data['fk_facture'])) $html_class = 'facid-'.$data['fk_facture']; elseif (!empty($data['fk_paiement'])) $html_class = 'payid-'.$data['fk_paiement']; - + print ''; - - print "\n"; + + print "\n"; print '\n"; - + print ''; print '\n"; $totalDebit += ($data['amount'] > 0) ? abs($data['amount']) : 0; print '\n"; $totalCredit += ($data['amount'] > 0) ? 0 : abs($data['amount']); + // Balance print '\n"; - + // Author print ''; - + print "\n"; } - + print ''; print ''; print ''; @@ -277,7 +279,7 @@ if ($id > 0) print ''; print "\n"; } - + print "
'.$langs->trans("Balance").''.$langs->trans("Author").'
'.$langs->trans("NoInvoice").'
".dol_print_date($data['date'],'day').""; + if (!empty($data['fk_facture'])) print dol_print_date($data['date'],'day'); + elseif (!empty($data['fk_paiement'])) print dol_print_date($data['date'],'dayhour'); + print "'.$data['link']."'.$data['status'].''.(($data['amount'] > 0) ? price(abs($data['amount'])) : '')."'.(($data['amount'] > 0) ? '' : price(abs($data['amount'])))."'.price($data['balance'])."'; print $data['author']; print '
 '.price($totalDebit).'
"; } } diff --git a/htdocs/compta/tva/class/tva.class.php b/htdocs/compta/tva/class/tva.class.php index 689e5d8fed3..b5b36232e28 100644 --- a/htdocs/compta/tva/class/tva.class.php +++ b/htdocs/compta/tva/class/tva.class.php @@ -59,7 +59,6 @@ class Tva extends CommonObject $this->db = $db; $this->element = 'tva'; $this->table_element = 'tva'; - return 1; } @@ -149,7 +148,7 @@ class Tva extends CommonObject * @param int $notrigger 0=no, 1=yes (no update trigger) * @return int <0 if KO, >0 if OK */ - function update($user=null, $notrigger=0) + function update($user, $notrigger=0) { global $conf, $langs; @@ -652,9 +651,10 @@ class Tva extends CommonObject * @param int $withpicto 0=No picto, 1=Include picto into link, 2=Only picto * @param string $option link option * @param int $notooltip 1=Disable tooltip + * @param string $morecss More CSS * @return string Chaine with URL */ - function getNomUrl($withpicto=0, $option='', $notooltip=0) + function getNomUrl($withpicto=0, $option='', $notooltip=0, $morecss='') { global $langs, $conf; @@ -668,6 +668,9 @@ class Tva extends CommonObject $linkclose=''; if (empty($notooltip)) { + + + if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) { $label=$langs->trans("ShowMyObject"); diff --git a/htdocs/contrat/admin/contract_extrafields.php b/htdocs/contrat/admin/contract_extrafields.php index 8a0476fb674..3fb55acc2ca 100644 --- a/htdocs/contrat/admin/contract_extrafields.php +++ b/htdocs/contrat/admin/contract_extrafields.php @@ -66,7 +66,7 @@ $textobject = $langs->transnoentitiesnoconv('Contracts'); llxHeader(); -$linkback=''.$langs->trans("BackToModuleList").''; +$linkback=''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans("ContractsSetup"),$linkback,'title_setup'); $head=contract_admin_prepare_head(); diff --git a/htdocs/contrat/admin/contractdet_extrafields.php b/htdocs/contrat/admin/contractdet_extrafields.php index e2eb2bacc6c..e3047466e1b 100644 --- a/htdocs/contrat/admin/contractdet_extrafields.php +++ b/htdocs/contrat/admin/contractdet_extrafields.php @@ -66,7 +66,7 @@ $textobject = $langs->transnoentitiesnoconv('Contracts'); llxHeader(); -$linkback=''.$langs->trans("BackToModuleList").''; +$linkback=''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans("ContractsSetup"),$linkback,'title_setup'); $head=contract_admin_prepare_head(); diff --git a/htdocs/contrat/card.php b/htdocs/contrat/card.php index db3301174c3..7a3dbeb5ddc 100644 --- a/htdocs/contrat/card.php +++ b/htdocs/contrat/card.php @@ -819,7 +819,7 @@ if (empty($reshook)) $result=$object->delete($user); if ($result >= 0) { - header("Location: index.php"); + header("Location: list.php?restore_lastsearch_values=1"); return; } else @@ -1549,7 +1549,7 @@ else if ($action != 'editline' || GETPOST('rowid') != $objp->rowid) { - print ''; + print ''; // Label if ($objp->fk_product > 0) { @@ -1559,12 +1559,10 @@ else $productstatic->ref=$objp->pref; $productstatic->entity=$objp->pentity; $productstatic->label=$objp->plabel; - $text = $productstatic->getNomUrl(1,'',20); + $text = $productstatic->getNomUrl(1,'',32); if ($objp->plabel) { $text .= ' - '; - //$productstatic->ref=$objp->label; - //$text .= $productstatic->getNomUrl(0,'',16); $text .= $objp->plabel; } $description = $objp->description; @@ -1701,8 +1699,8 @@ else $productstatic->type=$objp->ptype; $productstatic->ref=$objp->pref; $productstatic->entity=$objp->pentity; - print $productstatic->getNomUrl(1,'',20); - print $objp->label?' - '.dol_trunc($objp->label,16):''; + print $productstatic->getNomUrl(1,'',32); + print $objp->label?' - '.dol_trunc($objp->label,32):''; print '
'; } else @@ -1810,7 +1808,7 @@ else 'text' => $langs->trans("ConfirmMoveToAnotherContractQuestion"), array('type' => 'select', 'name' => 'newcid', 'values' => $arraycontractid)); - $form->form_confirm($_SERVER["PHP_SELF"]."?id=".$object->id."&lineid=".GETPOST('rowid'),$langs->trans("MoveToAnotherContract"),$langs->trans("ConfirmMoveToAnotherContract"),"confirm_move",$formquestion); + print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id."&lineid=".GETPOST('rowid'),$langs->trans("MoveToAnotherContract"),$langs->trans("ConfirmMoveToAnotherContract"),"confirm_move",$formquestion); print '
'; } @@ -1822,7 +1820,7 @@ else $dateactstart = dol_mktime(12, 0, 0, GETPOST('remonth'), GETPOST('reday'), GETPOST('reyear')); $dateactend = dol_mktime(12, 0, 0, GETPOST('endmonth'), GETPOST('endday'), GETPOST('endyear')); $comment = GETPOST('comment','alpha'); - $form->form_confirm($_SERVER["PHP_SELF"]."?id=".$object->id."&ligne=".GETPOST('ligne')."&date=".$dateactstart."&dateend=".$dateactend."&comment=".urlencode($comment),$langs->trans("ActivateService"),$langs->trans("ConfirmActivateService",dol_print_date($dateactstart,"%A %d %B %Y")),"confirm_active", '', 0, 1); + print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id."&ligne=".GETPOST('ligne')."&date=".$dateactstart."&dateend=".$dateactend."&comment=".urlencode($comment),$langs->trans("ActivateService"),$langs->trans("ConfirmActivateService",dol_print_date($dateactstart,"%A %d %B %Y")),"confirm_active", '', 0, 1); print '
'; } @@ -1841,7 +1839,7 @@ else } else { - $form->form_confirm($_SERVER["PHP_SELF"]."?id=".$object->id."&ligne=".GETPOST('ligne','int')."&date=".$dateactstart."&dateend=".$dateactend."&comment=".urlencode($comment), $langs->trans("CloseService"), $langs->trans("ConfirmCloseService",dol_print_date($dateactend,"%A %d %B %Y")), "confirm_closeline", '', 0, 1); + print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id."&ligne=".GETPOST('ligne','int')."&date=".$dateactstart."&dateend=".$dateactend."&comment=".urlencode($comment), $langs->trans("CloseService"), $langs->trans("ConfirmCloseService",dol_print_date($dateactend,"%A %d %B %Y")), "confirm_closeline", '', 0, 1); } print '
'; } @@ -1870,7 +1868,7 @@ else } if (($tmpaction=='activateline' && $user->rights->contrat->activer) || ($tmpaction=='unactivateline' && $user->rights->contrat->desactiver)) { - print ''; + print ''; print img_picto($tmpactiontext, $tmpactionpicto); print ''; } @@ -1971,7 +1969,7 @@ else print ''; print ''; - print ''; + print '
'; // Definie date debut et fin par defaut $dateactstart = $objp->date_debut_reelle; diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index e3900d2d89e..85128ea8a69 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -261,9 +261,11 @@ class Contrat extends CommonObject * * @param User $user Object User making action * @param int|string $date_start Date start (now if empty) + * @param int $notrigger 1=Does not execute triggers, 0=Execute triggers + * @param string $comment Comment * @return int <0 if KO, >0 if OK */ - function activateAll($user, $date_start='') + function activateAll($user, $date_start='', $notrigger=0, $comment='') { if (empty($date_start)) $date_start = dol_now(); @@ -278,7 +280,9 @@ class Contrat extends CommonObject // Open lines not already open if ($contratline->statut != 4) { - $result = $contratline->active_line($user, $date_start, -1); + $contratline->context = $this->context; + + $result = $contratline->active_line($user, $date_start, -1, $comment); if ($result < 0) { $ok=false; @@ -881,7 +885,6 @@ class Contrat extends CommonObject $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."contrat"); - // Load object modContract $module=(! empty($conf->global->CONTRACT_ADDON)?$conf->global->CONTRACT_ADDON:'mod_contract_serpis'); if (substr($module, 0, 13) == 'mod_contract_' && substr($module, -3) == 'php') @@ -1205,7 +1208,7 @@ class Contrat extends CommonObject * @param int $notrigger 0=launch triggers after, 1=disable triggers * @return int <0 if KO, >0 if OK */ - function update($user=null, $notrigger=0) + function update($user, $notrigger=0) { global $conf, $langs; $error=0; @@ -1462,49 +1465,39 @@ class Contrat extends CommonObject { $contractlineid = $this->db->last_insert_id(MAIN_DB_PREFIX."contratdet"); - $result=$this->update_statut($user); - if ($result > 0) + if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED) && is_array($array_options) && count($array_options)>0) // For avoid conflicts if trigger used { - - if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED) && is_array($array_options) && count($array_options)>0) // For avoid conflicts if trigger used + $contractline = new ContratLigne($this->db); + $contractline->array_options=$array_options; + $contractline->id=$contractlineid; + $result=$contractline->insertExtraFields(); + if ($result < 0) { - $contractline = new ContratLigne($this->db); - $contractline->array_options=$array_options; - $contractline->id=$contractlineid; - $result=$contractline->insertExtraFields(); - if ($result < 0) - { - $this->error[]=$contractline->error; - $error++; - } - } - - if (empty($error)) { - // Call trigger - $result=$this->call_trigger('LINECONTRACT_INSERT',$user); - if ($result < 0) - { - $error++; - } - // End call triggers - } - - if ($error) - { - $this->db->rollback(); - return -1; - } - else - { - $this->db->commit(); - return $contractlineid; + $this->error[]=$contractline->error; + $error++; } } - else + + if (empty($error)) { + // Call trigger + $result=$this->call_trigger('LINECONTRACT_INSERT',$user); + if ($result < 0) + { + $error++; + } + // End call triggers + } + + if ($error) { $this->db->rollback(); return -1; } + else + { + $this->db->commit(); + return $contractlineid; + } } else { @@ -2987,7 +2980,7 @@ class ContratLigne extends CommonObjectLine */ public function insert($notrigger = 0) { - global $user; + global $conf, $user; // Insertion dans la base $sql = "INSERT INTO ".MAIN_DB_PREFIX."contratdet"; @@ -3026,7 +3019,16 @@ class ContratLigne extends CommonObjectLine { $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX.'contratdet'); - // FIXME Missing insert of extrafields + // Insert of extrafields + if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED) && is_array($this->array_options) && count($this->array_options)>0) // For avoid conflicts if trigger used + { + $result = $this->insertExtraFields(); + if ($result < 0) + { + $this->db->rollback(); + return -1; + } + } if (!$notrigger) { @@ -3063,13 +3065,6 @@ class ContratLigne extends CommonObjectLine { global $langs, $conf; - // Update object - $this->date_ouverture = $date; - $this->date_fin_validite = $date_end; - $this->fk_user_ouverture = $user->id; - $this->date_cloture = null; - $this->commentaire = $comment; - $error = 0; $this->db->begin(); @@ -3087,15 +3082,26 @@ class ContratLigne extends CommonObjectLine if ($resql) { // Call trigger $result = $this->call_trigger('CONTRACT_SERVICE_ACTIVATE', $user); - if ($result < 0) { - $error++; + if ($result < 0) $error++; + // End call triggers + + if (! $error) + { + $this->statut = 4; + $this->date_ouverture = $date; + $this->date_fin_validite = $date_end; + $this->fk_user_ouverture = $user->id; + $this->date_cloture = null; + $this->commentaire = $comment; + + $this->db->commit(); + return 1; + } + else + { $this->db->rollback(); return -1; } - // End call triggers - - $this->db->commit(); - return 1; } else { $this->error = $this->db->lasterror(); $this->db->rollback(); diff --git a/htdocs/contrat/services_list.php b/htdocs/contrat/services_list.php index 5bede6be358..108fb6d4403 100644 --- a/htdocs/contrat/services_list.php +++ b/htdocs/contrat/services_list.php @@ -75,7 +75,7 @@ $opclotureyear=GETPOST('opclotureyear'); $filter_opcloture=GETPOST('filter_opcloture'); // Initialize context for list -$contextpage=GETPOST('contextpage','aZ')?GETPOST('contextpage','aZ'):'servicelist'.$mode; +$contextpage=GETPOST('contextpage','aZ')?GETPOST('contextpage','aZ'):'contractservicelist'.$mode; // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context $hookmanager->initHooks(array($contextpage)); @@ -483,7 +483,6 @@ if (! empty($arrayfields['cd.date_cloture']['checked'])) print ''; } // Extra fields -// Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; // Fields from hook diff --git a/htdocs/contrat/tpl/linkedobjectblock.tpl.php b/htdocs/contrat/tpl/linkedobjectblock.tpl.php index e0b76ba689b..a44f20679b8 100644 --- a/htdocs/contrat/tpl/linkedobjectblock.tpl.php +++ b/htdocs/contrat/tpl/linkedobjectblock.tpl.php @@ -1,5 +1,6 @@ + * Copyright (C) 2018 Juanjo Menent * * 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 @@ -50,10 +51,22 @@ foreach($linkedObjectBlock as $key => $objectlink) - + - \ No newline at end of file + diff --git a/htdocs/core/actions_linkedfiles.inc.php b/htdocs/core/actions_linkedfiles.inc.php index 0e0c444af33..2ef3191154d 100644 --- a/htdocs/core/actions_linkedfiles.inc.php +++ b/htdocs/core/actions_linkedfiles.inc.php @@ -177,42 +177,50 @@ elseif ($action == 'confirm_updateline' && GETPOST('save','alpha') && GETPOST('l elseif ($action == 'renamefile' && GETPOST('renamefilesave','alpha')) { // For documents pages, upload_dir contains already path to file from module dir, so we clean path into urlfile. - if (! empty($upload_dir)) - { - $filenamefrom=dol_sanitizeFileName(GETPOST('renamefilefrom','alpha'), '_', 0); // Do not remove accents - $filenameto=dol_sanitizeFileName(GETPOST('renamefileto','alpha'), '_', 0); // Do not remove accents + if (! empty($upload_dir)) + { + $reshook=$hookmanager->initHooks(array('actionlinkedfiles')); - // Security: - // Disallow file with some extensions. We rename them. - // Because if we put the documents directory into a directory inside web root (very bad), this allows to execute on demand arbitrary code. - if (preg_match('/\.htm|\.html|\.php|\.pl|\.cgi$/i',$filenameto) && empty($conf->global->MAIN_DOCUMENT_IS_OUTSIDE_WEBROOT_SO_NOEXE_NOT_REQUIRED)) - { - $filenameto.= '.noexe'; - } + $filenamefrom=dol_sanitizeFileName(GETPOST('renamefilefrom','alpha'), '_', 0); // Do not remove accents + $filenameto=dol_sanitizeFileName(GETPOST('renamefileto','alpha'), '_', 0); // Do not remove accents - if ($filenamefrom && $filenameto) - { - $srcpath = $upload_dir.'/'.$filenamefrom; - $destpath = $upload_dir.'/'.$filenameto; + $parameters=array('filenamefrom' => $filenamefrom, 'filenameto' => $filenameto, 'upload_dir' => $upload_dir); + $reshook=$hookmanager->executeHooks('renameUploadedFile', $parameters, $object); - $result = dol_move($srcpath, $destpath); - if ($result) - { - if ($object->id) - { - $object->addThumbs($destpath); - } + if (empty($reshook)) + { + // Security: + // Disallow file with some extensions. We rename them. + // Because if we put the documents directory into a directory inside web root (very bad), this allows to execute on demand arbitrary code. + if (preg_match('/\.htm|\.html|\.php|\.pl|\.cgi$/i',$filenameto) && empty($conf->global->MAIN_DOCUMENT_IS_OUTSIDE_WEBROOT_SO_NOEXE_NOT_REQUIRED)) + { + $filenameto.= '.noexe'; + } - // TODO Add revert function of addThumbs to remove for old name - //$object->delThumbs($srcpath); + if ($filenamefrom && $filenameto) + { + $srcpath = $upload_dir.'/'.$filenamefrom; + $destpath = $upload_dir.'/'.$filenameto; - setEventMessages($langs->trans("FileRenamed"), null); - } - else - { - $langs->load("errors"); // key must be loaded because we can't rely on loading during output, we need var substitution to be done now. - setEventMessages($langs->trans("ErrorFailToRenameFile", $filenamefrom, $filenameto), null, 'errors'); - } - } + $result = dol_move($srcpath, $destpath); + if ($result) + { + if ($object->id) + { + $object->addThumbs($destpath); + } + + // TODO Add revert function of addThumbs to remove for old name + //$object->delThumbs($srcpath); + + setEventMessages($langs->trans("FileRenamed"), null); + } + else + { + $langs->load("errors"); // key must be loaded because we can't rely on loading during output, we need var substitution to be done now. + setEventMessages($langs->trans("ErrorFailToRenameFile", $filenamefrom, $filenameto), null, 'errors'); + } + } + } } } diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php index b08993acf8a..fae976dec80 100644 --- a/htdocs/core/actions_massactions.inc.php +++ b/htdocs/core/actions_massactions.inc.php @@ -46,7 +46,7 @@ if (! empty($massaction) && count($toselect) < 1) $error++; setEventMessages($langs->trans("NoRecordSelected"), null, "warnings"); } -if (! $error && count($toselect) > $maxformassaction) +if (! $error && is_array($toselect) && count($toselect) > $maxformassaction) { setEventMessages($langs->trans('TooManyRecordForMassAction',$maxformassaction), null, 'errors'); $error++; diff --git a/htdocs/core/boxes/box_members.php b/htdocs/core/boxes/box_members.php index 25fa257d098..e5819f0f14c 100644 --- a/htdocs/core/boxes/box_members.php +++ b/htdocs/core/boxes/box_members.php @@ -88,7 +88,7 @@ class box_members extends ModeleBoxes $sql.= " a.datec, a.tms, a.statut as status, a.datefin as date_end_subscription,"; $sql.= " t.subscription"; $sql.= " FROM ".MAIN_DB_PREFIX."adherent as a, ".MAIN_DB_PREFIX."adherent_type as t"; - $sql.= " WHERE a.entity = ".$conf->entity; + $sql.= " WHERE a.entity IN (".getEntity('member').")"; $sql.= " AND a.fk_adherent_type = t.rowid"; $sql.= " ORDER BY a.tms DESC"; $sql.= $db->plimit($max, 0); diff --git a/htdocs/core/class/commoninvoice.class.php b/htdocs/core/class/commoninvoice.class.php index 9d7ae9d0998..ac5d3869a3d 100644 --- a/htdocs/core/class/commoninvoice.class.php +++ b/htdocs/core/class/commoninvoice.class.php @@ -274,6 +274,63 @@ abstract class CommonInvoice extends CommonObject } } + /** + * Return list of payments + * + * @param string $filtertype 1 to filter on type of payment == 'PRE' + * @return array Array with list of payments + */ + function getListOfPayments($filtertype='') + { + $retarray=array(); + + $table='paiement_facture'; + $table2='paiement'; + $field='fk_facture'; + $field2='fk_paiement'; + $sharedentity='facture'; + if ($this->element == 'facture_fourn' || $this->element == 'invoice_supplier') + { + $table='paiementfourn_facturefourn'; + $table2='paiementfourn'; + $field='fk_facturefourn'; + $field2='fk_paiementfourn'; + $sharedentity='facture_fourn'; + } + + $sql = 'SELECT p.ref, pf.amount, pf.multicurrency_amount, p.fk_paiement, p.datep, p.num_paiement as num, t.code'; + $sql.= ' FROM '.MAIN_DB_PREFIX.$table.' as pf, '.MAIN_DB_PREFIX.$table2.' as p, '.MAIN_DB_PREFIX.'c_paiement as t'; + $sql.= ' WHERE pf.'.$field.' = '.$this->id; + //$sql.= ' WHERE pf.'.$field.' = 1'; + $sql.= ' AND pf.'.$field2.' = p.rowid'; + $sql.= ' AND p.fk_paiement = t.id'; + $sql.= ' AND p.entity IN (' . getEntity($sharedentity).')'; + if ($filtertype) $sql.=" AND t.code='PRE'"; + + dol_syslog(get_class($this)."::getListOfPayments", LOG_DEBUG); + $resql=$this->db->query($sql); + if ($resql) + { + $num = $this->db->num_rows($resql); + $i=0; + while ($i < $num) + { + $obj = $this->db->fetch_object($resql); + $retarray[]=array('amount'=>$obj->amount,'type'=>$obj->code, 'date'=>$obj->datep, 'num'=>$obj->num, 'ref'=>$obj->ref); + $i++; + } + $this->db->free($resql); + return $retarray; + } + else + { + $this->error=$this->db->lasterror(); + dol_print_error($this->db); + return array(); + } + } + + /** * Return if an invoice can be deleted * Rule is: @@ -457,7 +514,7 @@ abstract class CommonInvoice extends CommonObject { if ($status == 0) return img_picto($langs->trans('BillStatusDraft'),'statut0').' '.$langs->trans('Bill'.$prefix.'StatusDraft'); if (($status == 3 || $status == 2) && $alreadypaid <= 0) return img_picto($langs->trans('StatusCanceled'),'statut5').' '.$langs->trans('Bill'.$prefix.'StatusCanceled'); - if (($status == 3 || $status == 2) && $alreadypaid > 0) return img_picto($langs->trans('BillStatusClosedPaidPartially'),'statut7').' '.$langs->trans('Bill'.$prefix.'StatusClosedPaidPartially'); + if (($status == 3 || $status == 2) && $alreadypaid > 0) return img_picto($langs->trans('BillStatusClosedPaidPartially'),'statut9').' '.$langs->trans('Bill'.$prefix.'StatusClosedPaidPartially'); if ($alreadypaid <= 0) return img_picto($langs->trans('BillStatusNotPaid'),'statut1').' '.$langs->trans('Bill'.$prefix.'StatusNotPaid'); return img_picto($langs->trans('BillStatusStarted'),'statut3').' '.$langs->trans('Bill'.$prefix.'StatusStarted'); } @@ -475,7 +532,7 @@ abstract class CommonInvoice extends CommonObject { if ($status == 0) return img_picto($langs->trans('BillStatusDraft'),'statut0'); if (($status == 3 || $status == 2) && $alreadypaid <= 0) return img_picto($langs->trans('BillStatusCanceled'),'statut5'); - if (($status == 3 || $status == 2) && $alreadypaid > 0) return img_picto($langs->trans('BillStatusClosedPaidPartially'),'statut7'); + if (($status == 3 || $status == 2) && $alreadypaid > 0) return img_picto($langs->trans('BillStatusClosedPaidPartially'),'statut9'); if ($alreadypaid <= 0) return img_picto($langs->trans('BillStatusNotPaid'),'statut1'); return img_picto($langs->trans('BillStatusStarted'),'statut3'); } @@ -493,7 +550,7 @@ abstract class CommonInvoice extends CommonObject { if ($status == 0) return img_picto($langs->trans('BillStatusDraft'),'statut0').' '.$langs->trans('BillStatusDraft'); if (($status == 3 || $status == 2) && $alreadypaid <= 0) return img_picto($langs->trans('BillStatusCanceled'),'statut5').' '.$langs->trans('Bill'.$prefix.'StatusCanceled'); - if (($status == 3 || $status == 2) && $alreadypaid > 0) return img_picto($langs->trans('BillStatusClosedPaidPartially'),'statut7').' '.$langs->trans('Bill'.$prefix.'StatusClosedPaidPartially'); + if (($status == 3 || $status == 2) && $alreadypaid > 0) return img_picto($langs->trans('BillStatusClosedPaidPartially'),'statut9').' '.$langs->trans('Bill'.$prefix.'StatusClosedPaidPartially'); if ($alreadypaid <= 0) return img_picto($langs->trans('BillStatusNotPaid'),'statut1').' '.$langs->trans('BillStatusNotPaid'); return img_picto($langs->trans('BillStatusStarted'),'statut3').' '.$langs->trans('BillStatusStarted'); } @@ -512,7 +569,7 @@ abstract class CommonInvoice extends CommonObject { if ($status == 0) return ''.$langs->trans('Bill'.$prefix.'StatusDraft').' '.img_picto($langs->trans('BillStatusDraft'),'statut0'); if (($status == 3 || $status == 2) && $alreadypaid <= 0) return ''.$langs->trans('Bill'.$prefix.'StatusCanceled').' '.img_picto($langs->trans('BillStatusCanceled'),'statut5'); - if (($status == 3 || $status == 2) && $alreadypaid > 0) return ''.$langs->trans('Bill'.$prefix.'StatusClosedPaidPartially').' '.img_picto($langs->trans('BillStatusClosedPaidPartially'),'statut7'); + if (($status == 3 || $status == 2) && $alreadypaid > 0) return ''.$langs->trans('Bill'.$prefix.'StatusClosedPaidPartially').' '.img_picto($langs->trans('BillStatusClosedPaidPartially'),'statut9'); if ($alreadypaid <= 0) { if ($type == self::TYPE_CREDIT_NOTE) return ''.$langs->trans('Bill'.$prefix.'StatusNotRefunded').' '.img_picto($langs->trans('StatusNotRefunded'),'statut1'); diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 18d3f203dac..504d03e6c7e 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -1300,7 +1300,10 @@ abstract class CommonObject if ($resql) { $row = $this->db->fetch_row($resql); - $result = $this->fetch($row[0]); + // Test for avoid error -1 + if ($row[0] > 0) { + $result = $this->fetch($row[0]); + } } return $result; @@ -3431,7 +3434,7 @@ abstract class CommonObject /** * Return if a country is inside the EEC (European Economic Community) - * @deprecated + * @deprecated Use function isInEEC function instead * * @return boolean true = country inside EEC, false = country outside EEC */ @@ -4408,7 +4411,7 @@ abstract class CommonObject if (! is_array($optionsArray)) { // If $extrafields is not a known object, we initialize it. Best practice is to have $extrafields defined into card.php or list.php page. - // TODO Use of existing extrafield is not yet ready (must mutualize code that use extrafields in form first) + // TODO Use of existing $extrafield is not yet ready (must mutualize code that use extrafields in form first) // global $extrafields; //if (! is_object($extrafields)) //{ @@ -4423,6 +4426,10 @@ abstract class CommonObject } $optionsArray = $extrafields->attributes[$this->table_element]['label']; } + else + { + dol_syslog("Warning: fetch_optionals was called with param optionsArray defined when you should pass null now", LOG_WARNING); + } $table_element = $this->table_element; if ($table_element == 'categorie') $table_element = 'categories'; // For compatibility @@ -4456,7 +4463,17 @@ abstract class CommonObject if ($key != 'rowid' && $key != 'tms' && $key != 'fk_member' && ! is_int($key)) { // we can add this attribute to object - $this->array_options["options_".$key]=$value; + if (! empty($extrafields) && in_array($extrafields->attributes[$this->table_element]['type'][$key], array('date','datetime'))) + { + //var_dump($extrafields->attributes[$this->table_element]['type'][$key]); + $this->array_options["options_".$key]=$this->db->jdate($value); + } + else + { + $this->array_options["options_".$key]=$value; + } + + //var_dump('key '.$key.' '.$value.' type='.$extrafields->attributes[$this->table_element]['type'][$key].' '.$this->array_options["options_".$key]); } } } @@ -6455,7 +6472,7 @@ abstract class CommonObject } } - if (! $error) + if (! $error && ! empty($this->isextrafieldmanaged)) { $sql = "DELETE FROM " . MAIN_DB_PREFIX . $this->table_element."_extrafields"; $sql.= " WHERE fk_object=" . $this->id; diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index 22b65d688fd..3d934baaf75 100644 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -1404,12 +1404,12 @@ class ExtraFields if ($type == 'date') { $showsize=10; - $value=dol_print_date($value, 'day', 'tzuser'); + $value=dol_print_date($value, 'day'); } elseif ($type == 'datetime') { $showsize=19; - $value=dol_print_date($value, 'dayhour', 'tzuser'); + $value=dol_print_date($value, 'dayhour'); } elseif ($type == 'int') { diff --git a/htdocs/core/class/html.formactions.class.php b/htdocs/core/class/html.formactions.class.php index 84c37a1cf4f..2d66661c839 100644 --- a/htdocs/core/class/html.formactions.class.php +++ b/htdocs/core/class/html.formactions.class.php @@ -1,7 +1,7 @@ * Copyright (C) 2010-2012 Regis Houssin - * Copyright (C) 2010 Juanjo Menent + * Copyright (C) 2010-2018 Juanjo Menent * * 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 @@ -194,9 +194,12 @@ class FormActions $projectid = $object->fk_project; if ($typeelement == 'project') $projectid = $object->id; - $buttontoaddnewevent = ''; - $buttontoaddnewevent.= $langs->trans("AddEvent"); - $buttontoaddnewevent.= ''; + if (! empty($conf->agenda->enabled)) + { + $buttontoaddnewevent = ''; + $buttontoaddnewevent.= $langs->trans("AddEvent"); + $buttontoaddnewevent.= ''; + } print ''."\n"; print load_fiche_titre($title, $buttontoaddnewevent, '', 0, 0, '', $morehtmlright); diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php index 4bff96700d5..f3ee31653f7 100644 --- a/htdocs/core/class/html.formfile.class.php +++ b/htdocs/core/class/html.formfile.class.php @@ -586,7 +586,7 @@ class FormFile } } - // Set headershown to avoit to have table opened a second time later + // Set headershown to avoid to have table opened a second time later $headershown=1; $buttonlabeltoshow=$buttonlabel; @@ -692,7 +692,8 @@ class FormFile $out.= ''."\n"; // Show title of array if not already shown - if ((! empty($file_list) || ! empty($link_list) || preg_match('/^massfilesarea/', $modulepart)) && ! $headershown) + if ((! empty($file_list) || ! empty($link_list) || preg_match('/^massfilesarea/', $modulepart)) + && ! $headershown) { $headershown=1; $out.= '
'.$titletoshow.'
'."\n"; @@ -716,13 +717,13 @@ class FormFile if (isset($conf->global->DOL_URL_ROOT_DOCUMENT_PHP)) $documenturl=$conf->global->DOL_URL_ROOT_DOCUMENT_PHP; // To use another wrapper // Show file name with link to download - $out.= '
'; @@ -1087,7 +1088,7 @@ class FormFile print ''; // File name - print ''; - print ''; print ''; + print ''; print ''; print ''; // Action column diff --git a/htdocs/core/class/html.formmail.class.php b/htdocs/core/class/html.formmail.class.php index 94ab828ee39..2fd38d097c0 100644 --- a/htdocs/core/class/html.formmail.class.php +++ b/htdocs/core/class/html.formmail.class.php @@ -252,6 +252,14 @@ class FormMail extends Form $langs->load("other"); $langs->load("mails"); + + // Clear temp files. Must be done at beginning, before call of triggers + if (GETPOST('mode','alpha') == 'init' || (GETPOST('modelmailselected','alpha') && GETPOST('modelmailselected','alpha') != '-1')) + { + $this->clear_attached_files(); + } + + // Call hook getFormMail $hookmanager->initHooks(array('formmail')); $parameters=array( @@ -306,7 +314,6 @@ class FormMail extends Form if (GETPOST('mode','alpha') == 'init' || (GETPOST('modelmailselected','alpha') && GETPOST('modelmailselected','alpha') != '-1')) { - $this->clear_attached_files(); if (! empty($arraydefaultmessage['joinfiles']) && is_array($this->param['fileinit'])) { foreach($this->param['fileinit'] as $file) @@ -399,7 +406,7 @@ class FormMail extends Form - $out.= '
getNomUrl(1); ?> date_contrat,'day'); ?>total_ttc); ?>rights->contrat->lire && empty($conf->global->CONTRACT_SHOW_TOTAL_OF_PRODUCT_AS_PRICE)) + { + $totalcontrat = 0; + foreach ($objectlink->lines as $linecontrat) { + $totalcontrat = $totalcontrat + $linecontrat->total_ht; + $total = $total + $linecontrat->total_ht; + } + echo price($totalcontrat); + } ?> getLibStatut(7); ?> ">transnoentitiesnoconv("RemoveLink")); ?>
'; + $out.= ''; $out.= 'trans("File").': '.$file["name"]); - $out.= $file["name"]; + $out.= dol_trunc($file["name"], 150); $out.= ''."\n"; $out.= $this->showPreview($file,$modulepart,$relativepath,0,$param); $out.= '
'; + print ''; // Show file name with link to download //print "XX".$file['name']; //$file['name'] must be utf8 @@ -1110,7 +1111,7 @@ class FormFile } else { - print $file['name']; + print dol_trunc($file['name'], 200); print ''; } // Preview link @@ -1297,8 +1298,8 @@ class FormFile if (! empty($addfilterfields)) { print '
'."\n"; + $out.= '
'."\n"; // Substitution array if (! empty($this->withsubstit)) // Unset or set ->withsubstit=0 to disable this. diff --git a/htdocs/core/class/utils.class.php b/htdocs/core/class/utils.class.php index 4502eb03240..37ccea748f1 100644 --- a/htdocs/core/class/utils.class.php +++ b/htdocs/core/class/utils.class.php @@ -67,7 +67,7 @@ class Utils // Delete temporary files if ($dolibarr_main_data_root) { - $filesarray=dol_dir_list($dolibarr_main_data_root,"directories",1,'^temp$','','','',2); + $filesarray=dol_dir_list($dolibarr_main_data_root, "directories", 1, '^temp$', '', 'name', SORT_ASC, 2, 0, '', 1); // Do not follow symlinks if ($choice == 'tempfilesold') { $now = dol_now(); @@ -81,10 +81,10 @@ class Utils if ($choice=='allfiles') { - // Delete all files (except install.lock) + // Delete all files (except install.lock, do not follow symbolic links) if ($dolibarr_main_data_root) { - $filesarray=dol_dir_list($dolibarr_main_data_root,"all",0,'','install\.lock$'); + $filesarray=dol_dir_list($dolibarr_main_data_root, "all", 0, '', 'install\.lock$', 'name', SORT_ASC, 0, 0, '', 1); } } @@ -93,7 +93,7 @@ class Utils // Define files log if ($dolibarr_main_data_root) { - $filesarray=dol_dir_list($dolibarr_main_data_root, "files", 0, '.*\.log[\.0-9]*$', 'install\.lock$'); + $filesarray=dol_dir_list($dolibarr_main_data_root, "files", 0, '.*\.log[\.0-9]*$', 'install\.lock$', 'name', SORT_ASC, 0, 0, '', 1); } $filelog=''; diff --git a/htdocs/core/lib/company.lib.php b/htdocs/core/lib/company.lib.php index 4f1726a45c6..3f7c45dda52 100644 --- a/htdocs/core/lib/company.lib.php +++ b/htdocs/core/lib/company.lib.php @@ -206,7 +206,7 @@ function societe_prepare_head(Societe $object) $h++; } - if (! empty($conf->website->enabled) && (!empty($user->rights->societe->lire) )) + if (! empty($conf->website->enabled) && (! empty($conf->global->WEBSITE_USE_WEBSITE_ACCOUNTS)) && (!empty($user->rights->societe->lire))) { $head[$h][0] = DOL_URL_ROOT.'/societe/website.php?id='.$object->id; $head[$h][1] = $langs->trans("WebSiteAccounts"); @@ -573,7 +573,7 @@ function getFormeJuridiqueLabel($code) } /** - * Return if a country is inside the EEC (European Economic Community) + * Return if a country of an object is inside the EEC (European Economic Community) * TODO Add a field into country dictionary. * * @param Object $object Object diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index 206d1bb8099..088b68b1c2f 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -52,10 +52,11 @@ function dol_basename($pathfile) * @param int $mode 0=Return array minimum keys loaded (faster), 1=Force all keys like date and size to be loaded (slower), 2=Force load of date only, 3=Force load of size only * @param int $nohook Disable all hooks * @param string $relativename For recursive purpose only. Must be "" at first call. + * @param string $donotfollowsymlinks Do not follow symbolic links * @return array Array of array('name'=>'xxx','fullname'=>'/abc/xxx','date'=>'yyy','size'=>99,'type'=>'dir|file',...) * @see dol_dir_list_indatabase */ -function dol_dir_list($path, $types="all", $recursive=0, $filter="", $excludefilter=null, $sortcriteria="name", $sortorder=SORT_ASC, $mode=0, $nohook=0, $relativename="") +function dol_dir_list($path, $types="all", $recursive=0, $filter="", $excludefilter=null, $sortcriteria="name", $sortorder=SORT_ASC, $mode=0, $nohook=0, $relativename="", $donotfollowsymlinks=0) { global $db, $hookmanager; global $object; @@ -159,7 +160,11 @@ function dol_dir_list($path, $types="all", $recursive=0, $filter="", $excludefil // if we're in a directory and we want recursive behavior, call this function again if ($recursive) { - $file_list = array_merge($file_list, dol_dir_list($path."/".$file, $types, $recursive, $filter, $excludefilter, $sortcriteria, $sortorder, $mode, $nohook, ($relativename!=''?$relativename.'/':'').$file)); + if (empty($donotfollowsymlinks) || ! is_link($path."/".$file)) + { + //var_dump('eee '. $path."/".$file. ' '.is_dir($path."/".$file).' '.is_link($path."/".$file)); + $file_list = array_merge($file_list, dol_dir_list($path."/".$file, $types, $recursive, $filter, $excludefilter, $sortcriteria, $sortorder, $mode, $nohook, ($relativename!=''?$relativename.'/':'').$file, $donotfollowsymlinks)); + } } } else if (! $isdir && (($types == "files") || ($types == "all"))) @@ -2777,28 +2782,42 @@ function dol_readcachefile($directory, $filename) */ function getFilesUpdated(&$file_list, SimpleXMLElement $dir, $path = '', $pathref = '', &$checksumconcat = array()) { + global $conffile; + $exclude = 'install'; foreach ($dir->md5file as $file) // $file is a simpleXMLElement { $filename = $path.$file['name']; $file_list['insignature'][] = $filename; + $expectedmd5 = (string) $file; //if (preg_match('#'.$exclude.'#', $filename)) continue; if (!file_exists($pathref.'/'.$filename)) { - $file_list['missing'][] = array('filename'=>$filename, 'expectedmd5'=>(string) $file); + $file_list['missing'][] = array('filename'=>$filename, 'expectedmd5'=>$expectedmd5); } else { $md5_local = md5_file($pathref.'/'.$filename); - if ($md5_local != (string) $file) $file_list['updated'][] = array('filename'=>$filename, 'expectedmd5'=>(string) $file, 'md5'=>(string) $md5_local); - $checksumconcat[] = $md5_local; + + if ($conffile == '/etc/dolibarr/conf.php' && $filename == '/filefunc.inc.php') // For install with deb or rpm, we ignore test on filefunc.inc.php that was modified by package + { + $checksumconcat[] = $expectedmd5; + } + else + { + if ($md5_local != $expectedmd5) $file_list['updated'][] = array('filename'=>$filename, 'expectedmd5'=>$expectedmd5, 'md5'=>(string) $md5_local); + $checksumconcat[] = $md5_local; + } } } - foreach ($dir->dir as $subdir) getFilesUpdated($file_list, $subdir, $path.$subdir['name'].'/', $pathref, $checksumconcat); + foreach ($dir->dir as $subdir) // $subdir['name'] is '' or '/accountancy/admin' for example + { + getFilesUpdated($file_list, $subdir, $path.$subdir['name'].'/', $pathref, $checksumconcat); + } return $file_list; } diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 6a67dec48f6..99aa4ccc84f 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -3800,7 +3800,8 @@ function print_barre_liste($titre, $page, $file, $options='', $sortfield='', $so { if ($totalnboflines) // If we know total nb of lines { - $maxnbofpage=(empty($conf->dol_optimize_smallscreen) ? 4 : 1); // page nb before and after selected page + ... + first or last + // Define nb of extra page links before and after selected page + ... + first or last + $maxnbofpage=(empty($conf->dol_optimize_smallscreen) ? 4 : 1); if ($limit > 0) $nbpages=ceil($totalnboflines/$limit); else $nbpages=1; @@ -5441,6 +5442,7 @@ function getCommonSubstitutionArray($outputlangs, $onlykey=0, $exclude=null, $ob $substitutionarray['__THIRDPARTY_ID__'] = '__THIRDPARTY_ID__'; $substitutionarray['__THIRDPARTY_NAME__'] = '__THIRDPARTY_NAME__'; + $substitutionarray['__THIRDPARTY_EMAIL__'] = '__THIRDPARTY_EMAIL__'; if (is_object($object) && $object->element == 'shipping') { @@ -5504,11 +5506,15 @@ function getCommonSubstitutionArray($outputlangs, $onlykey=0, $exclude=null, $ob { $substitutionarray['__THIRDPARTY_ID__'] = (is_object($object)?$object->id:''); $substitutionarray['__THIRDPARTY_NAME__'] = (is_object($object)?$object->name:''); + $substitutionarray['__THIRDPARTY_NAME_ALIAS__'] = (is_object($object)?$object->name_alias:''); + $substitutionarray['__THIRDPARTY_EMAIL__'] = (is_object($object)?$object->email:''); } elseif (is_object($object->thirdparty) && $object->thirdparty->id > 0) { $substitutionarray['__THIRDPARTY_ID__'] = (is_object($object->thirdparty)?$object->thirdparty->id:''); $substitutionarray['__THIRDPARTY_NAME__'] = (is_object($object->thirdparty)?$object->thirdparty->name:''); + $substitutionarray['__THIRDPARTY_NAME_ALIAS__'] = (is_object($object->thirdparty)?$object->thirdparty->name_alias:''); + $substitutionarray['__THIRDPARTY_EMAIL__'] = (is_object($object->thirdparty)?$object->thirdparty->email:''); } if (is_object($object->projet) && $object->projet->id > 0) @@ -5621,7 +5627,7 @@ function getCommonSubstitutionArray($outputlangs, $onlykey=0, $exclude=null, $ob '__USER_LASTNAME__' => (string) $user->lastname, '__USER_FIRSTNAME__' => (string) $user->firstname, '__USER_FULLNAME__' => (string) $user->getFullName($outputlangs), - '__USER_SUPERVISOR_ID__' => (string) $user->fk_user + '__USER_SUPERVISOR_ID__' => (string) ($user->fk_user ? $user->fk_user : '0') ) ); } @@ -5679,7 +5685,8 @@ function make_substitutions($text, $substitutionarray, $outputlangs=null) if (dol_textishtml($text,1)) $msgishtml = 1; $keyfound = $reg[1]; - $newval=empty($conf->global->$keyfound)?'':$conf->global->$keyfound; + if (preg_match('/(_pass|password|secret|_key|key$)/i', $keyfound)) $newval = '*****forbidden*****'; + else $newval=empty($conf->global->$keyfound)?'':$conf->global->$keyfound; $text = preg_replace('/__\['.preg_quote($keyfound, '/').'\]__/', $msgishtml?dol_htmlentitiesbr($newval):$newval, $text); } @@ -6832,7 +6839,7 @@ function getAdvancedPreviewUrl($modulepart, $relativepath, $alldata=0, $param='' if (empty($conf->use_javascript_ajax)) return ''; - $mime_preview = array('bmp', 'jpeg', 'png', 'gif', 'tiff', 'pdf', 'plain', 'css'); + $mime_preview = array('bmp', 'jpeg', 'png', 'gif', 'tiff', 'pdf', 'plain', 'css', 'svg+xml'); //$mime_preview[]='vnd.oasis.opendocument.presentation'; //$mime_preview[]='archive'; $num_mime = array_search(dol_mimetype($relativepath, '', 1), $mime_preview); @@ -6919,6 +6926,7 @@ function dol_mimetype($file, $default='application/octet-stream', $mode=0) if (preg_match('/\.gif$/i',$tmpfile)) { $mime='image/gif'; $imgmime='image.png'; $famime='file-image-o'; } if (preg_match('/\.bmp$/i',$tmpfile)) { $mime='image/bmp'; $imgmime='image.png'; $famime='file-image-o'; } if (preg_match('/\.(tif|tiff)$/i',$tmpfile)) { $mime='image/tiff'; $imgmime='image.png'; $famime='file-image-o'; } + if (preg_match('/\.svg$/i',$tmpfile)) { $mime='image/svg+xml';$imgmime='image.png'; $famime='file-image-o'; } // Calendar if (preg_match('/\.vcs$/i',$tmpfile)) { $mime='text/calendar'; $imgmime='other.png'; $famime='file-text-o'; } if (preg_match('/\.ics$/i',$tmpfile)) { $mime='text/calendar'; $imgmime='other.png'; $famime='file-text-o'; } diff --git a/htdocs/core/lib/images.lib.php b/htdocs/core/lib/images.lib.php index e6f69da1d93..f0a666b03e9 100644 --- a/htdocs/core/lib/images.lib.php +++ b/htdocs/core/lib/images.lib.php @@ -37,7 +37,7 @@ $quality = 80; */ function image_format_supported($file) { - $regeximgext='\.gif|\.jpg|\.jpeg|\.png|\.bmp|\.xpm|\.xbm'; // See also into product.class.php + $regeximgext='\.gif|\.jpg|\.jpeg|\.png|\.bmp|\.xpm|\.xbm|\.svg'; // See also into product.class.php // Case filename is not a format image if (! preg_match('/('.$regeximgext.')$/i',$file,$reg)) return -1; diff --git a/htdocs/core/lib/resource.lib.php b/htdocs/core/lib/resource.lib.php index 78cd0af3a12..6ab25c5b57f 100644 --- a/htdocs/core/lib/resource.lib.php +++ b/htdocs/core/lib/resource.lib.php @@ -40,7 +40,7 @@ function resource_prepare_head($object) $head[$h][2] = 'resource'; $h++; - if (empty($conf->global->MAIN_DISABLE_CONTACTS_TAB)) + if (empty($conf->global->MAIN_DISABLE_CONTACTS_TAB) && (empty($conf->global->RESOURCE_HIDE_ADD_CONTACT_USER) || empty($conf->global->RESOURCE_HIDE_ADD_CONTACT_THIPARTY))) { $nbContact = count($object->liste_contact(-1,'internal')) + count($object->liste_contact(-1,'external')); $head[$h][0] = DOL_URL_ROOT.'/resource/contact.php?id='.$object->id; diff --git a/htdocs/core/lib/security.lib.php b/htdocs/core/lib/security.lib.php index 03612250b85..a901dd817d5 100644 --- a/htdocs/core/lib/security.lib.php +++ b/htdocs/core/lib/security.lib.php @@ -106,7 +106,7 @@ function dol_hash($chain, $type='0') * @param string $features Features to check (it must be module name. Examples: 'societe', 'contact', 'produit&service', 'produit|service', ...) * @param int $objectid Object ID if we want to check a particular record (optional) is linked to a owned thirdparty (optional). * @param string $tableandshare 'TableName&SharedElement' with Tablename is table where object is stored. SharedElement is an optional key to define where to check entity for multicompany modume. Param not used if objectid is null (optional). - * @param string $feature2 Feature to check, second level of permission (optional). Can be or check with 'level1|level2'. + * @param string $feature2 Feature to check, second level of permission (optional). Can be a 'or' check with 'level1|level2'. * @param string $dbt_keyfield Field name for socid foreign key if not fk_soc. Not used if objectid is null (optional) * @param string $dbt_select Field name for select if not rowid. Not used if objectid is null (optional) * @param Canvas $objcanvas Object canvas diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index b2e723e0c0c..81031d5e49c 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -230,11 +230,14 @@ function getAllImages($object, $objectpage, $urltograb, &$tmp, &$action, $modify $error=0; + dol_syslog("Call getAllImages with grabimagesinto=".$grabimagesinto); + $alreadygrabbed=array(); if (preg_match('/\/$/', $urltograb)) $urltograb.='.'; $urltograb = dirname($urltograb); // So urltograb is now http://www.nltechno.com or http://www.nltechno.com/dir1 + // Search X in "img...src=X" preg_match_all('/]*)>/i', $tmp, $regs); foreach ($regs[0] as $key => $val) @@ -323,16 +326,20 @@ function getAllImages($object, $objectpage, $urltograb, &$tmp, &$action, $modify } $linkwithoutdomain = $regs[2][$key]; - $filetosave = $conf->medias->multidir_output[$conf->entity].'/image/'.$object->ref.'/'.$objectpage->pageurl.(preg_match('/^\//', $regs[2][$key])?'':'/').$regs[2][$key]; + + $dirforimages = '/'.$objectpage->pageurl; + if ($grabimagesinto == 'root') $dirforimages=''; + + $filetosave = $conf->medias->multidir_output[$conf->entity].'/image/'.$object->ref.$dirforimages.(preg_match('/^\//', $regs[2][$key])?'':'/').$regs[2][$key]; if (preg_match('/^http/', $regs[2][$key])) { $urltograbbis = $regs[2][$key]; $linkwithoutdomain = preg_replace('/^https?:\/\/[^\/]+\//i', '', $regs[2][$key]); - $filetosave = $conf->medias->multidir_output[$conf->entity].'/image/'.$object->ref.'/'.$objectpage->pageurl.(preg_match('/^\//', $linkwithoutdomain)?'':'/').$linkwithoutdomain; + $filetosave = $conf->medias->multidir_output[$conf->entity].'/image/'.$object->ref.$dirforimages.(preg_match('/^\//', $linkwithoutdomain)?'':'/').$linkwithoutdomain; } - $filename = 'image/'.$object->ref.'/'.$objectpage->pageurl.(preg_match('/^\//', $linkwithoutdomain)?'':'/').$linkwithoutdomain; + $filename = 'image/'.$object->ref.$dirforimages.(preg_match('/^\//', $linkwithoutdomain)?'':'/').$linkwithoutdomain; // Clean the aa/bb/../cc into aa/cc $filetosave = preg_replace('/\/[^\/]+\/\.\./', '', $filetosave); @@ -451,9 +458,9 @@ function dolSavePageContent($filetpl, $object, $objectpage) $tplcontent.= ''."\n"; $tplcontent.= ''."\n"; $tplcontent.= ''."\n"; - $tplcontent.= 'ref.'/htmlheader.html"); ?>'."\n"; - $tplcontent.= ''."\n"; - $tplcontent.= $objectpage->htmlheader."\n"; + $tplcontent.= '/ims\', \'\', file_get_contents(DOL_DATA_ROOT."/website/'.$object->ref.'/htmlheader.html")); ?>'."\n"; + $tplcontent.= ''."\n"; + $tplcontent.= preg_replace('/<\/?html>/ims', '', $objectpage->htmlheader)."\n"; $tplcontent.= ''."\n"; $tplcontent.= ''."\n"; diff --git a/htdocs/core/menus/standard/auguria.lib.php b/htdocs/core/menus/standard/auguria.lib.php index 4dae9628c30..bf00f3d3ba9 100644 --- a/htdocs/core/menus/standard/auguria.lib.php +++ b/htdocs/core/menus/standard/auguria.lib.php @@ -382,7 +382,7 @@ function print_left_auguria_menu($db,$menu_array_before,$menu_array_after,&$tabM if ($objp->nature == 9) $nature="hasnew"; // To enable when page exists - if ($conf->global->MAIN_FEATURES_LEVEL >= 2) + if ($conf->global->MAIN_FEATURES_LEVEL < 2) { if ($nature == 'various' || $nature == 'hasnew') $nature=''; } diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index d2dba66c53c..077b6c8ba64 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -993,7 +993,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy_admin/',$leftmenu)) $newmenu->add("/accountancy/admin/export.php?mainmenu=accountancy&leftmenu=accountancy_admin", $langs->trans("ExportOptions"),2, $user->rights->accounting->chartofaccount, '', $mainmenu, 'accountancy_admin_export', 60); // Fiscal year - if ($conf->global->MAIN_FEATURES_LEVEL > 0) // Not yet used. In a future will lock some periods. + if ($conf->global->MAIN_FEATURES_LEVEL > 1) // Not yet used. In a future will lock some periods. { if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy_admin/',$leftmenu)) $newmenu->add("/accountancy/admin/fiscalyear.php?mainmenu=accountancy&leftmenu=accountancy_admin", $langs->trans("FiscalPeriod"), 2, $user->rights->accounting->fiscalyear, '', $mainmenu, 'fiscalyear'); } @@ -1054,7 +1054,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu if ($objp->nature == 9) $nature="hasnew"; // To enable when page exists - if ($conf->global->MAIN_FEATURES_LEVEL >= 2) + if ($conf->global->MAIN_FEATURES_LEVEL < 2) { if ($nature == 'various' || $nature == 'hasnew') $nature=''; } diff --git a/htdocs/core/modules/commande/doc/doc_generic_order_odt.modules.php b/htdocs/core/modules/commande/doc/doc_generic_order_odt.modules.php index 9ff01c9f5b5..0fb5dbabc03 100644 --- a/htdocs/core/modules/commande/doc/doc_generic_order_odt.modules.php +++ b/htdocs/core/modules/commande/doc/doc_generic_order_odt.modules.php @@ -163,7 +163,7 @@ class doc_generic_order_odt extends ModelePDFCommandes } $texte.='
'; } - + $texte.= ''; $texte.= '
- + diff --git a/htdocs/core/modules/dons/html_cerfafr.modules.php b/htdocs/core/modules/dons/html_cerfafr.modules.php index 0f7f2aa2c36..c9d2b4984ad 100644 --- a/htdocs/core/modules/dons/html_cerfafr.modules.php +++ b/htdocs/core/modules/dons/html_cerfafr.modules.php @@ -3,7 +3,7 @@ * Copyright (C) 2005-2006 Laurent Destailleur * Copyright (C) 2012 Regis Houssin * Copyright (C) 2012 Marcos García - * Copyright (C) 2014-2015 Alexandre Spangaro + * Copyright (C) 2014-2015 Alexandre Spangaro * Copyright (C) 2015 Benoit Bruchard * * This program is free software; you can redistribute it and/or modify @@ -89,7 +89,7 @@ class html_cerfafr extends ModeleDon $outputlangs->load("donations"); $currency = !empty($currency) ? $currency : $conf->currency; - + if (! empty($conf->don->dir_output)) { // Definition of the object don (for upward compatibility) @@ -134,21 +134,21 @@ class html_cerfafr extends ModeleDon $paymentmode = $formclass->cache_types_paiements[$don->modepaiementid]['label']; } else $paymentmode = ''; - - if ($don->modepaiementid==7){ + + if ($don->modepaymentcode=='CHQ'){ $ModePaiement = ''; } - else if ($don->modepaiementid==4){ + else if ($don->modepaymentcode=='LIQ'){ $ModePaiement = ''; } - else if ($don->modepaiementid==2 || $don->modepaiementid==3 || $don->modepaiementid==6){ + else if ($don->modepaymentcode=='VIR' || $don->modepaymentcode=='PRE' || $don->modepaymentcode=='CB'){ $ModePaiement = ''; - } - else + } + else { $ModePaiement = ''; } - + /* if (empty($don->societe)) { @@ -159,14 +159,14 @@ class html_cerfafr extends ModeleDon $CodeDon = ''; } */ - + // Define contents $donmodel=DOL_DOCUMENT_ROOT ."/core/modules/dons/html_cerfafr.html"; $form = implode('', file($donmodel)); $form = str_replace('__REF__',$don->id,$form); $form = str_replace('__DATE__',dol_print_date($don->date,'day',false,$outputlangs),$form); //$form = str_replace('__IP__',$user->ip,$form); // TODO $user->ip not exist - $form = str_replace('__AMOUNT__',$don->amount,$form); + $form = str_replace('__AMOUNT__', price($don->amount), $form); $form = str_replace('__AMOUNTLETTERS__',chiffre_en_lettre($don->amount),$form); $form = str_replace('__CURRENCY__',$outputlangs->transnoentitiesnoconv("Currency".$currency),$form); $form = str_replace('__CURRENCYCODE__',$conf->currency,$form); @@ -183,7 +183,6 @@ class html_cerfafr extends ModeleDon $form = str_replace('__DONATOR_ZIP__',$don->zip,$form); $form = str_replace('__DONATOR_TOWN__',$don->town,$form); $form = str_replace('__PAYMENTMODE_LIB__ ', $paymentmode,$form); - $form = str_replace('__ModePaiement__', $ModePaiement,$form); $form = str_replace('__NOW__',dol_print_date($now,'day',false,$outputlangs),$form); $form = str_replace('__DonationRef__',$outputlangs->trans("DonationRef"),$form); $form = str_replace('__DonationTitle__',$outputlangs->trans("DonationTitle"),$form); @@ -204,6 +203,8 @@ class html_cerfafr extends ModeleDon $form = str_replace('__IConfirmDonationReception__',$outputlangs->trans("IConfirmDonationReception"),$form); $form = str_replace('__DonationMessage__',$conf->global->DONATION_MESSAGE,$form); + $form = str_replace('__ModePaiement__', $ModePaiement,$form); + $frencharticle=''; if (preg_match('/fr/i',$outputlangs->defaultlang)) $frencharticle='Article 200, 238 bis et 885-0 V bis A du code général des impôts (CGI)'; $form = str_replace('__FrenchArticle__',$frencharticle,$form); @@ -260,7 +261,7 @@ class html_cerfafr extends ModeleDon @chmod($file, octdec($conf->global->MAIN_UMASK)); $this->result = array('fullpath'=>$file); - + return 1; } else @@ -394,34 +395,34 @@ function chiffre_en_lettre($montant, $devise1='', $devise2='') if($cent[$i]==1) $trio[$i]='cent'; else if($cent[$i]!=0 || $cent[$i]!='') $trio[$i]=$chif[$cent[$i]] .' cents'; } - - + + $chif2=array('', 'dix', 'vingt', 'trente', 'quarante', 'cinquante', 'soixante', 'soixante-dix', 'quatre-vingts', 'quatre-vingts dix'); $secon_c=$chif2[$dix_c]; if($cent_c==1) $trio_c='cent'; else if($cent_c!=0 || $cent_c!='') $trio_c=$chif[$cent_c] .' cents'; - + if(($cent[3]==0 || $cent[3]=='') && ($dix[3]==0 || $dix[3]=='') && ($unite[3]==1)) $somme = $trio[3]. ' ' .$secon[3]. ' ' . $prim[3]. ' million '; else if(($cent[3]!=0 && $cent[3]!='') || ($dix[3]!=0 && $dix[3]!='') || ($unite[3]!=0 && $unite[3]!='')) $somme = $trio[3]. ' ' .$secon[3]. ' ' . $prim[3]. ' millions '; else $somme = $trio[3]. ' ' .$secon[3]. ' ' . $prim[3]; - + if(($cent[2]==0 || $cent[2]=='') && ($dix[2]==0 || $dix[2]=='') && ($unite[2]==1)) $somme = $somme.' mille '; else if(($cent[2]!=0 && $cent[2]!='') || ($dix[2]!=0 && $dix[2]!='') || ($unite[2]!=0 && $unite[2]!='')) $somme = $somme. $trio[2]. ' ' .$secon[2]. ' ' . $prim[2]. ' milles '; else $somme = $somme. $trio[2]. ' ' .$secon[2]. ' ' . $prim[2]; - + $somme = $somme. $trio[1]. ' ' .$secon[1]. ' ' . $prim[1]; - + $somme = $somme. ' '. $dev1 .' ' ; - + if(($cent_c=='0' || $cent_c=='') && ($dix_c=='0' || $dix_c=='')) return $somme. ' et zéro '. $dev2; else return $somme. $trio_c. ' ' .$secon_c. ' ' . $dev2; - + } diff --git a/htdocs/core/modules/expedition/doc/doc_generic_shipment_odt.modules.php b/htdocs/core/modules/expedition/doc/doc_generic_shipment_odt.modules.php index 77a5677c003..9c45c135ac3 100644 --- a/htdocs/core/modules/expedition/doc/doc_generic_shipment_odt.modules.php +++ b/htdocs/core/modules/expedition/doc/doc_generic_shipment_odt.modules.php @@ -437,30 +437,42 @@ class doc_generic_shipment_odt extends ModelePdfExpedition // Replace tags of lines try { - $listlines = $odfHandler->setSegment('lines'); - foreach ($object->lines as $line) - { - $tmparray=$this->get_substitutionarray_shipment_lines($line,$outputlangs); - complete_substitutions_array($tmparray, $outputlangs, $object, $line, "completesubstitutionarray_lines"); - // Call the ODTSubstitutionLine hook - $parameters=array('odfHandler'=>&$odfHandler,'file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs,'substitutionarray'=>&$tmparray,'line'=>$line); - $reshook=$hookmanager->executeHooks('ODTSubstitutionLine',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks - foreach($tmparray as $key => $val) - { - try - { - $listlines->setVars($key, $val, true, 'UTF-8'); - } - catch(OdfException $e) - { - } - catch(SegmentException $e) - { - } - } - $listlines->merge(); + $foundtagforlines = 1; + try { + $listlines = $odfHandler->setSegment('lines'); + } + catch(OdfException $e) + { + // We may arrive here if tags for lines not present into template + $foundtagforlines = 0; + dol_syslog($e->getMessage(), LOG_INFO); + } + if ($foundtagforlines) + { + foreach ($object->lines as $line) + { + $tmparray=$this->get_substitutionarray_shipment_lines($line,$outputlangs); + complete_substitutions_array($tmparray, $outputlangs, $object, $line, "completesubstitutionarray_lines"); + // Call the ODTSubstitutionLine hook + $parameters=array('odfHandler'=>&$odfHandler,'file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs,'substitutionarray'=>&$tmparray,'line'=>$line); + $reshook=$hookmanager->executeHooks('ODTSubstitutionLine',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks + foreach($tmparray as $key => $val) + { + try + { + $listlines->setVars($key, $val, true, 'UTF-8'); + } + catch(OdfException $e) + { + } + catch(SegmentException $e) + { + } + } + $listlines->merge(); + } + $odfHandler->mergeSegment($listlines); } - $odfHandler->mergeSegment($listlines); } catch(OdfException $e) { @@ -511,7 +523,7 @@ class doc_generic_shipment_odt extends ModelePdfExpedition $odfHandler=null; // Destroy object $this->result = array('fullpath'=>$file); - + return 1; // Success } else diff --git a/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php b/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php index 15d48694277..c236c9ad017 100644 --- a/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php +++ b/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php @@ -328,7 +328,15 @@ class pdf_standard extends ModeleExpenseReport $nextColumnPosX = $this->posxprojet; } - $pdf->MultiCell($nextColumnPosX-$this->posxtype-0.8, 4, dol_trunc($outputlangs->transnoentities($object->lines[$i]->type_fees_code), 10), 0, 'C'); + $expensereporttypecode = $object->lines[$i]->type_fees_code; + $expensereporttypecodetoshow = $outputlangs->transnoentities($expensereporttypecode); + if ($expensereporttypecodetoshow == $expensereporttypecode) + { + $expensereporttypecodetoshow = preg_replace('/^(EX_|TF_)/', '', $expensereporttypecodetoshow); + } + $expensereporttypecodetoshow = dol_trunc($expensereporttypecodetoshow, 9); // 10 is too much + + $pdf->MultiCell($nextColumnPosX-$this->posxtype-0.8, 4, $expensereporttypecodetoshow, 0, 'C'); // Project if (! empty($conf->projet->enabled)) diff --git a/htdocs/core/modules/facture/doc/doc_generic_invoice_odt.modules.php b/htdocs/core/modules/facture/doc/doc_generic_invoice_odt.modules.php index 79b848c5773..c9f18218d9a 100644 --- a/htdocs/core/modules/facture/doc/doc_generic_invoice_odt.modules.php +++ b/htdocs/core/modules/facture/doc/doc_generic_invoice_odt.modules.php @@ -401,30 +401,42 @@ class doc_generic_invoice_odt extends ModelePDFFactures // Replace tags of lines try { - $listlines = $odfHandler->setSegment('lines'); - foreach ($object->lines as $line) - { - $tmparray=$this->get_substitutionarray_lines($line,$outputlangs); - complete_substitutions_array($tmparray, $outputlangs, $object, $line, "completesubstitutionarray_lines"); - // Call the ODTSubstitutionLine hook - $parameters=array('odfHandler'=>&$odfHandler,'file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs,'substitutionarray'=>&$tmparray,'line'=>$line); - $reshook=$hookmanager->executeHooks('ODTSubstitutionLine',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks - foreach($tmparray as $key => $val) - { - try - { - $listlines->setVars($key, $val, true, 'UTF-8'); - } - catch(OdfException $e) - { - } - catch(SegmentException $e) - { - } - } - $listlines->merge(); + $foundtagforlines = 1; + try { + $listlines = $odfHandler->setSegment('lines'); + } + catch(OdfException $e) + { + // We may arrive here if tags for lines not present into template + $foundtagforlines = 0; + dol_syslog($e->getMessage(), LOG_INFO); + } + if ($foundtagforlines) + { + foreach ($object->lines as $line) + { + $tmparray=$this->get_substitutionarray_lines($line,$outputlangs); + complete_substitutions_array($tmparray, $outputlangs, $object, $line, "completesubstitutionarray_lines"); + // Call the ODTSubstitutionLine hook + $parameters=array('odfHandler'=>&$odfHandler,'file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs,'substitutionarray'=>&$tmparray,'line'=>$line); + $reshook=$hookmanager->executeHooks('ODTSubstitutionLine',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks + foreach($tmparray as $key => $val) + { + try + { + $listlines->setVars($key, $val, true, 'UTF-8'); + } + catch(OdfException $e) + { + } + catch(SegmentException $e) + { + } + } + $listlines->merge(); + } + $odfHandler->mergeSegment($listlines); } - $odfHandler->mergeSegment($listlines); } catch(OdfException $e) { @@ -475,7 +487,7 @@ class doc_generic_invoice_odt extends ModelePDFFactures $odfHandler=null; // Destroy object $this->result = array('fullpath'=>$file); - + return 1; // Success } else diff --git a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php index eda568b5be1..8050abf811b 100644 --- a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php @@ -171,7 +171,7 @@ class pdf_crabe extends ModelePDFFactures */ function write_file($object,$outputlangs,$srctemplatepath='',$hidedetails=0,$hidedesc=0,$hideref=0) { - global $user,$langs,$conf,$mysoc,$db,$hookmanager; + global $user,$langs,$conf,$mysoc,$db,$hookmanager,$nblignes; if (! is_object($outputlangs)) $outputlangs=$langs; // For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO @@ -334,15 +334,16 @@ class pdf_crabe extends ModelePDFFactures if (! empty($tplidx)) $pdf->useTemplate($tplidx); $pagenb++; - $this->_pagehead($pdf, $object, 1, $outputlangs); + $top_shift = $this->_pagehead($pdf, $object, 1, $outputlangs); $pdf->SetFont('','', $default_font_size - 1); $pdf->MultiCell(0, 3, ''); // Set interline to 3 $pdf->SetTextColor(0,0,0); - $tab_top = 90; - $tab_top_newpage = (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)?42:10); - $tab_height = 130; + $tab_top = 90+$top_shift; + $tab_top_newpage = (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)?42+$top_shift:10); + $tab_height = 130-$top_shift; $tab_height_newpage = 150; + if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $tab_height_newpage -= $top_shift; // Incoterm $height_incoterms = 0; @@ -1679,9 +1680,15 @@ class pdf_crabe extends ModelePDFFactures $posy+=1; + $top_shift = 0; // Show list of linked objects + $current_y = $pdf->getY(); $posy = pdf_writeLinkedObjects($pdf, $object, $outputlangs, $posx, $posy, $w, 3, 'R', $default_font_size); - + if ($current_y < $pdf->getY()) + { + $top_shift = $pdf->getY() - $current_y; + } + if ($showaddress) { // Sender properties @@ -1689,6 +1696,7 @@ class pdf_crabe extends ModelePDFFactures // Show sender $posy=!empty($conf->global->MAIN_PDF_USE_ISO_LOCATION) ? 40 : 42; + $posy+=$top_shift; $posx=$this->marge_gauche; if (! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT)) $posx=$this->page_largeur-$this->marge_droite-80; @@ -1744,6 +1752,7 @@ class pdf_crabe extends ModelePDFFactures $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=!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; @@ -1768,6 +1777,7 @@ class pdf_crabe extends ModelePDFFactures } $pdf->SetTextColor(0,0,0); + return $top_shift; } /** diff --git a/htdocs/core/modules/mailings/fraise.modules.php b/htdocs/core/modules/mailings/fraise.modules.php index a1674d6ab08..f71b6b925f0 100644 --- a/htdocs/core/modules/mailings/fraise.modules.php +++ b/htdocs/core/modules/mailings/fraise.modules.php @@ -127,7 +127,7 @@ class mailing_fraise extends MailingTargets $s.=''; } + // Validator if (!$edit) { print ''; print ''; @@ -1189,7 +1190,7 @@ else print ''; print ''; print ''; print ''; } @@ -1254,7 +1255,7 @@ else { print ''.$langs->trans("Validate").''; } - if ($user->rights->holiday->delete && $object->statut == 1) // If draft + if ($user->rights->holiday->delete && ($object->statut == 1 || $object->statut == 4 || $object->statut == 5)) // If draft or canceled or refused { print ''.$langs->trans("DeleteCP").''; } diff --git a/htdocs/holiday/define_holiday.php b/htdocs/holiday/define_holiday.php index b4440700be7..a7d4789468e 100644 --- a/htdocs/holiday/define_holiday.php +++ b/htdocs/holiday/define_holiday.php @@ -118,7 +118,7 @@ if (empty($reshook)) $userValue = $_POST['nb_holiday_'.$val['rowid']]; $userValue = $userValue[$userID]; - if (!empty($userValue)) + if (!empty($userValue) || (string) $userValue == '0') { $userValue = price2num($userValue,5); } else { @@ -174,11 +174,14 @@ $userstatic=new User($db); llxHeader('', $langs->trans('CPTitreMenu')); +$typeleaves=$holiday->getTypes(1,1); + + print ''; if ($optioncss != '') print ''; print ''; print ''; -print ''; +print ''; print ''; print ''; print ''; @@ -223,10 +226,8 @@ if (is_numeric($listUsers) && $listUsers < 0) setEventMessages($holiday->error, $holiday->errors, 'errors'); } -$var=true; $i = 0; -$typeleaves=$holiday->getTypes(1,1); if (count($typeleaves) == 0) { @@ -240,8 +241,6 @@ else $canedit=0; if (! empty($user->rights->holiday->define_holiday)) $canedit=1; - print ''; - $moreforfilter=''; print '
'; diff --git a/htdocs/hrm/admin/admin_establishment.php b/htdocs/hrm/admin/admin_establishment.php index 077d76d0d32..23e92b83004 100644 --- a/htdocs/hrm/admin/admin_establishment.php +++ b/htdocs/hrm/admin/admin_establishment.php @@ -69,7 +69,7 @@ $establishmenttmp=new Establishment($db); dol_htmloutput_mesg($mesg); // Subheader -$linkback = '' . $langs->trans("BackToModuleList") . ''; +$linkback = '' . $langs->trans("BackToModuleList") . ''; print load_fiche_titre($langs->trans("HRMSetup"), $linkback); // Configuration header diff --git a/htdocs/hrm/admin/admin_hrm.php b/htdocs/hrm/admin/admin_hrm.php index f488eb562e5..05fccafbda8 100644 --- a/htdocs/hrm/admin/admin_hrm.php +++ b/htdocs/hrm/admin/admin_hrm.php @@ -68,7 +68,7 @@ $form = new Form($db); dol_htmloutput_mesg($mesg); // Subheader -$linkback = '' . $langs->trans("BackToModuleList") . ''; +$linkback = '' . $langs->trans("BackToModuleList") . ''; print load_fiche_titre($langs->trans("HRMSetup"), $linkback); // Configuration header diff --git a/htdocs/hrm/index.php b/htdocs/hrm/index.php index e21db6a1dd1..f0e279bb848 100644 --- a/htdocs/hrm/index.php +++ b/htdocs/hrm/index.php @@ -265,6 +265,7 @@ if (! empty($conf->deplacement->enabled) && $user->rights->deplacement->lire) $i = 0; + print '
'; print '
'; @@ -368,7 +368,7 @@ class doc_generic_order_odt extends ModelePDFCommandes $tmparray = array_merge($array_user,$array_soc,$array_thirdparty,$array_objet,$array_other,$array_thirdparty_contact); complete_substitutions_array($tmparray, $outputlangs, $object); // Call the ODTSubstitution hook - + $parameters=array('odfHandler'=>&$odfHandler,'file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs,'substitutionarray'=>&$tmparray); $reshook=$hookmanager->executeHooks('ODTSubstitution',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks @@ -392,30 +392,42 @@ class doc_generic_order_odt extends ModelePDFCommandes // Replace tags of lines try { - $listlines = $odfHandler->setSegment('lines'); - foreach ($object->lines as $line) - { - $tmparray=$this->get_substitutionarray_lines($line,$outputlangs); - complete_substitutions_array($tmparray, $outputlangs, $object, $line, "completesubstitutionarray_lines"); - // Call the ODTSubstitutionLine hook - $parameters=array('odfHandler'=>&$odfHandler,'file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs,'substitutionarray'=>&$tmparray,'line'=>$line); - $reshook=$hookmanager->executeHooks('ODTSubstitutionLine',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks - foreach($tmparray as $key => $val) - { - try - { - $listlines->setVars($key, $val, true, 'UTF-8'); - } - catch(OdfException $e) - { - } - catch(SegmentException $e) - { - } - } - $listlines->merge(); + $foundtagforlines = 1; + try { + $listlines = $odfHandler->setSegment('lines'); + } + catch(OdfException $e) + { + // We may arrive here if tags for lines not present into template + $foundtagforlines = 0; + dol_syslog($e->getMessage(), LOG_INFO); + } + if ($foundtagforlines) + { + foreach ($object->lines as $line) + { + $tmparray=$this->get_substitutionarray_lines($line,$outputlangs); + complete_substitutions_array($tmparray, $outputlangs, $object, $line, "completesubstitutionarray_lines"); + // Call the ODTSubstitutionLine hook + $parameters=array('odfHandler'=>&$odfHandler,'file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs,'substitutionarray'=>&$tmparray,'line'=>$line); + $reshook=$hookmanager->executeHooks('ODTSubstitutionLine',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks + foreach($tmparray as $key => $val) + { + try + { + $listlines->setVars($key, $val, true, 'UTF-8'); + } + catch(OdfException $e) + { + } + catch(SegmentException $e) + { + } + } + $listlines->merge(); + } + $odfHandler->mergeSegment($listlines); } - $odfHandler->mergeSegment($listlines); } catch(OdfException $e) { @@ -468,7 +480,7 @@ class doc_generic_order_odt extends ModelePDFCommandes $odfHandler=null; // Destroy object $this->result = array('fullpath'=>$file); - + return 1; // Success } else diff --git a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php index f8b68f8035b..7c24e49e89b 100644 --- a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php +++ b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php @@ -185,7 +185,7 @@ class pdf_einstein extends ModelePDFCommandes */ function write_file($object,$outputlangs,$srctemplatepath='',$hidedetails=0,$hidedesc=0,$hideref=0) { - global $user,$langs,$conf,$mysoc,$db,$hookmanager; + global $user,$langs,$conf,$mysoc,$db,$hookmanager,$nblignes; if (! is_object($outputlangs)) $outputlangs=$langs; // For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO @@ -299,16 +299,17 @@ class pdf_einstein extends ModelePDFCommandes $pdf->AddPage(); if (! empty($tplidx)) $pdf->useTemplate($tplidx); $pagenb++; - $this->_pagehead($pdf, $object, 1, $outputlangs); + $top_shift = $this->_pagehead($pdf, $object, 1, $outputlangs); $pdf->SetFont('','', $default_font_size - 1); $pdf->MultiCell(0, 3, ''); // Set interline to 3 $pdf->SetTextColor(0,0,0); - $tab_top = 90; - $tab_top_newpage = (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)?42:10); - $tab_height = 130; + $tab_top = 90+$top_shift; + $tab_top_newpage = (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)?42+$top_shift:10); + $tab_height = 130-$top_shift; $tab_height_newpage = 150; + if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $tab_height_newpage -= $top_shift; // Incoterm $height_incoterms = 0; @@ -1307,16 +1308,32 @@ class pdf_einstein extends ModelePDFCommandes $posy+=2; + $top_shift = 0; // Show list of linked objects + $current_y = $pdf->getY(); $posy = pdf_writeLinkedObjects($pdf, $object, $outputlangs, $posx, $posy, 100, 3, 'R', $default_font_size); - + if ($current_y < $pdf->getY()) + { + $top_shift = $pdf->getY() - $current_y; + } + if ($showaddress) { // Sender properties - $carac_emetteur = pdf_build_address($outputlangs, $this->emetteur, $object->thirdparty); + $carac_emetteur=''; + // Add internal contact of proposal if defined + $arrayidcontact=$object->getIdContact('internal','SALESREPFOLL'); + if (count($arrayidcontact) > 0) + { + $object->fetch_user($arrayidcontact[0]); + $labelbeforecontactname=($outputlangs->transnoentities("FromContactName")!='FromContactName'?$outputlangs->transnoentities("FromContactName"):$outputlangs->transnoentities("Name")); + $carac_emetteur .= ($carac_emetteur ? "\n" : '' ).$labelbeforecontactname." ".$outputlangs->convToOutputCharset($object->user->getFullName($outputlangs))."\n"; + } + + $carac_emetteur .= pdf_build_address($outputlangs, $this->emetteur, $object->thirdparty); // Show sender - $posy=42; + $posy=42+$top_shift; $posx=$this->marge_gauche; if (! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT)) $posx=$this->page_largeur-$this->marge_droite-80; $hautcadre=40; @@ -1368,7 +1385,7 @@ class pdf_einstein extends ModelePDFCommandes // Show recipient $widthrecbox=100; if ($this->page_largeur < 210) $widthrecbox=84; // To work with US executive format - $posy=42; + $posy=42+$top_shift; $posx=$this->page_largeur-$this->marge_droite-$widthrecbox; if (! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT)) $posx=$this->marge_gauche; @@ -1393,6 +1410,7 @@ class pdf_einstein extends ModelePDFCommandes } $pdf->SetTextColor(0,0,0); + return $top_shift; } /** diff --git a/htdocs/core/modules/contract/doc/doc_generic_contract_odt.modules.php b/htdocs/core/modules/contract/doc/doc_generic_contract_odt.modules.php index d99d43396bc..7e308964e29 100644 --- a/htdocs/core/modules/contract/doc/doc_generic_contract_odt.modules.php +++ b/htdocs/core/modules/contract/doc/doc_generic_contract_odt.modules.php @@ -290,27 +290,47 @@ class doc_generic_contract_odt extends ModelePDFContract { $socobject=$object->thirdparty; } - // Make substitution - $substitutionarray=array( - '__FROM_NAME__' => $this->emetteur->name, - '__FROM_EMAIL__' => $this->emetteur->email, - '__TOTAL_TTC__' => $object->total_ttc, - '__TOTAL_HT__' => $object->total_ht, - '__TOTAL_VAT__' => $object->total_vat - ); - complete_substitutions_array($substitutionarray, $langs, $object); + + $object->fetch_optionals(); + + + // Define substitution array + $substitutionarray = getCommonSubstitutionArray($outputlangs, 0, null, $object); + $substitutionarray['__FROM_NAME__'] = $this->emetteur->name; + $substitutionarray['__FROM_EMAIL__'] = $this->emetteur->email; + $substitutionarray['__TOTAL_TTC__'] = $object->total_ttc; + $substitutionarray['__TOTAL_HT__'] = $object->total_ht; + $substitutionarray['__TOTAL_VAT__'] = $object->total_vat; + + // Make substitutions into ODT + $array_contract=$this->get_substitutionarray_each_var_object($object, $outputlangs); + $array_user=$this->get_substitutionarray_user($user,$outputlangs); + $array_soc=$this->get_substitutionarray_mysoc($mysoc,$outputlangs); + $array_thirdparty=$this->get_substitutionarray_thirdparty($socobject,$outputlangs); + $array_objet=$this->get_substitutionarray_object($object,$outputlangs); + $array_other=$this->get_substitutionarray_other($outputlangs); + // retrieve contact information for use in contract as contact_xxx tags + $array_thirdparty_contact = array(); + if ($usecontact) $array_thirdparty_contact=$this->get_substitutionarray_contact($contactobject,$outputlangs,'contact'); + + $substitutionarray = array_merge($substitutionarray,$array_contract,$array_user,$array_soc,$array_thirdparty,$array_objet,$array_other,$array_thirdparty_contact); + complete_substitutions_array($substitutionarray, $outputlangs, $object); + + $tmparray = $substitutionarray; + // Call the ODTSubstitution hook - $parameters=array('file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs,'substitutionarray'=>&$substitutionarray); + $parameters=array('file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs,'substitutionarray'=>&$tmparray); $reshook=$hookmanager->executeHooks('ODTSubstitution',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks // Line of free text $newfreetext=''; - $paramfreetext='contract_FREE_TEXT'; + $paramfreetext='CONTRACT_FREE_TEXT'; if (! empty($conf->global->$paramfreetext)) { $newfreetext=make_substitutions($conf->global->$paramfreetext,$substitutionarray); } + // Open and load template require_once ODTPHP_PATH.'odf.php'; try { @@ -344,24 +364,6 @@ class doc_generic_contract_odt extends ModelePDFContract { } - // Make substitutions into odt - $array_contract=$this->get_substitutionarray_each_var_object($object, $outputlangs); - $array_user=$this->get_substitutionarray_user($user,$outputlangs); - $array_soc=$this->get_substitutionarray_mysoc($mysoc,$outputlangs); - $array_thirdparty=$this->get_substitutionarray_thirdparty($socobject,$outputlangs); - $array_objet=$this->get_substitutionarray_object($object,$outputlangs); - $array_other=$this->get_substitutionarray_other($outputlangs); - // retrieve contact information for use in contract as contact_xxx tags - $array_thirdparty_contact = array(); - if ($usecontact) - $array_thirdparty_contact=$this->get_substitutionarray_contact($contactobject,$outputlangs,'contact'); - - $tmparray = array_merge($array_contract,$array_user,$array_soc,$array_thirdparty,$array_objet,$array_other,$array_thirdparty_contact); - complete_substitutions_array($tmparray, $outputlangs, $object); - $object->fetch_optionals(); - // Call the ODTSubstitution hook - $parameters=array('file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs,'substitutionarray'=>&$tmparray); - $reshook=$hookmanager->executeHooks('ODTSubstitution',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks foreach($tmparray as $key=>$value) { try { @@ -379,33 +381,46 @@ class doc_generic_contract_odt extends ModelePDFContract { } } + // Replace tags of lines try { - $listlines = $odfHandler->setSegment('lines'); - foreach ($object->lines as $line) - { - $tmparray=$this->get_substitutionarray_lines($line,$outputlangs); - complete_substitutions_array($tmparray, $outputlangs, $object, $line, "completesubstitutionarray_lines"); - // Call the ODTSubstitutionLine hook - $parameters=array('odfHandler'=>&$odfHandler,'file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs,'substitutionarray'=>&$tmparray,'line'=>$line); - $reshook=$hookmanager->executeHooks('ODTSubstitutionLine',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks - foreach($tmparray as $key => $val) - { - try - { - $listlines->setVars($key, $val, true, 'UTF-8'); - } - catch(OdfException $e) - { - } - catch(SegmentException $e) - { - } - } - $listlines->merge(); + $foundtagforlines = 1; + try { + $listlines = $odfHandler->setSegment('lines'); + } + catch(OdfException $e) + { + // We may arrive here if tags for lines not present into template + $foundtagforlines = 0; + dol_syslog($e->getMessage(), LOG_INFO); + } + if ($foundtagforlines) + { + foreach ($object->lines as $line) + { + $tmparray=$this->get_substitutionarray_lines($line,$outputlangs); + complete_substitutions_array($tmparray, $outputlangs, $object, $line, "completesubstitutionarray_lines"); + // Call the ODTSubstitutionLine hook + $parameters=array('odfHandler'=>&$odfHandler,'file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs,'substitutionarray'=>&$tmparray,'line'=>$line); + $reshook=$hookmanager->executeHooks('ODTSubstitutionLine',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks + foreach($tmparray as $key => $val) + { + try + { + $listlines->setVars($key, $val, true, 'UTF-8'); + } + catch(OdfException $e) + { + } + catch(SegmentException $e) + { + } + } + $listlines->merge(); + } + $odfHandler->mergeSegment($listlines); } - $odfHandler->mergeSegment($listlines); } catch(OdfException $e) { @@ -456,7 +471,7 @@ class doc_generic_contract_odt extends ModelePDFContract $odfHandler=null; // Destroy object $this->result = array('fullpath'=>$file); - + return 1; // Success } else diff --git a/htdocs/core/modules/dons/html_cerfafr.html b/htdocs/core/modules/dons/html_cerfafr.html index bd066d73a05..614f22cf998 100644 --- a/htdocs/core/modules/dons/html_cerfafr.html +++ b/htdocs/core/modules/dons/html_cerfafr.html @@ -72,7 +72,7 @@ Fondation d'entreprise
Oeuvre ou organisme d'intérêt général
Remise d\'espèces Chèque Virement, prélèvement, carte bancaire Remise d\'espèces Chèque Virement, prélèvement, carte bancaire Remise d\'espèces Chèque Virement, prélèvement, carte bancaire Remise d\'espèces Chèque Virement, prélèvement, carte bancaire 200 du CGI 238 bis du CGI 885-0 V bis A du CGI'; // Convert date into timestamp format - if (in_array($extrafields->attributes[$object->table_element]['type'][$key], array('date','datetime'))) { - $value = isset($_POST["options_" . $key]) ? dol_mktime($_POST["options_" . $key . "hour"], $_POST["options_" . $key . "min"], 0, $_POST["options_" . $key . "month"], $_POST["options_" . $key . "day"], $_POST["options_" . $key . "year"]) : $db->jdate($object->array_options['options_' . $key]); + if (in_array($extrafields->attributes[$object->table_element]['type'][$key], array('date','datetime'))) + { + $datenotinstring = $object->array_options['options_' . $key]; + // print 'X'.$object->array_options['options_' . $key].'-'.$datenotinstring.'x'; + if (! is_numeric($object->array_options['options_' . $key])) // For backward compatibility + { + $datenotinstring = $db->jdate($datenotinstring); + } + //print 'x'.$object->array_options['options_' . $key].'-'.$datenotinstring.' - '.dol_print_date($datenotinstring, 'dayhour'); + $value = isset($_POST["options_" . $key]) ? dol_mktime($_POST["options_" . $key . "hour"], $_POST["options_" . $key . "min"], 0, $_POST["options_" . $key . "month"], $_POST["options_" . $key . "day"], $_POST["options_" . $key . "year"]) : $datenotinstring; } //TODO Improve element and rights detection diff --git a/htdocs/core/tpl/login.tpl.php b/htdocs/core/tpl/login.tpl.php index 0deca9be98d..e3dc94cd30e 100644 --- a/htdocs/core/tpl/login.tpl.php +++ b/htdocs/core/tpl/login.tpl.php @@ -270,7 +270,7 @@ if (!empty($conf->global->MAIN_EASTER_EGG_COMMITSTRIP)) { { $xml = simplexml_load_string($resgetcommitstrip['content']); $little = $xml->channel->item[0]->children('content',true); - print $little->encoded; + print preg_replace('/width="650" height="658"/', '', $little->encoded); } } diff --git a/htdocs/cron/admin/cron.php b/htdocs/cron/admin/cron.php index 3efec52edfa..db2bebf1a14 100644 --- a/htdocs/cron/admin/cron.php +++ b/htdocs/cron/admin/cron.php @@ -65,7 +65,7 @@ if (!empty($actionsave)) llxHeader(); -$linkback=''.$langs->trans("BackToModuleList").''; +$linkback=''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans("CronSetup"),$linkback,'title_setup'); // Configuration header diff --git a/htdocs/cron/card.php b/htdocs/cron/card.php index 8e540c799fe..8c97bc4e2c8 100644 --- a/htdocs/cron/card.php +++ b/htdocs/cron/card.php @@ -557,7 +557,7 @@ else dol_fiche_head($head, 'card', $langs->trans("CronTask"), -1, 'cron'); - $linkback = '' . $langs->trans("BackToList") . ''; + $linkback = '' . $langs->trans("BackToList") . ''; $morehtmlref='
'; $morehtmlref.='
'; diff --git a/htdocs/cron/class/cronjob.class.php b/htdocs/cron/class/cronjob.class.php index a63982c5b12..46ad08f849b 100644 --- a/htdocs/cron/class/cronjob.class.php +++ b/htdocs/cron/class/cronjob.class.php @@ -805,6 +805,69 @@ class Cronjob extends CommonObject $this->libname = ''; } + + /** + * Return a link to the object card (with optionaly the picto) + * + * @param int $withpicto Include picto in link (0=No picto, 1=Include picto into link, 2=Only picto) + * @param string $option On what the link point to ('nolink', ...) + * @param int $notooltip 1=Disable tooltip + * @param string $morecss Add more css on link + * @param int $save_lastsearch_value -1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking + * @return string String with URL + */ + function getNomUrl($withpicto=0, $option='', $notooltip=0, $morecss='', $save_lastsearch_value=-1) + { + global $db, $conf, $langs; + global $dolibarr_main_authentication, $dolibarr_main_demo; + global $menumanager; + + if (! empty($conf->dol_no_mouse_hover)) $notooltip=1; // Force disable tooltips + + $result = ''; + $companylink = ''; + + $label = '' . $langs->trans("CronJob") . ''; + $label.= '
'; + $label.= '' . $langs->trans('Ref') . ': ' . $this->ref; + + $url = DOL_URL_ROOT.'/cron/card.php?id='.$this->id; + + if ($option != 'nolink') + { + // Add param to save lastsearch_values or not + $add_save_lastsearch_values=($save_lastsearch_value == 1 ? 1 : 0); + if ($save_lastsearch_value == -1 && preg_match('/list\.php/',$_SERVER["PHP_SELF"])) $add_save_lastsearch_values=1; + if ($add_save_lastsearch_values) $url.='&save_lastsearch_values=1'; + } + + $linkclose=''; + if (empty($notooltip)) + { + if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) + { + $label=$langs->trans("ShowCronJob"); + $linkclose.=' alt="'.dol_escape_htmltag($label, 1).'"'; + } + $linkclose.=' title="'.dol_escape_htmltag($label, 1).'"'; + $linkclose.=' class="classfortooltip'.($morecss?' '.$morecss:'').'"'; + } + else $linkclose = ($morecss?' class="'.$morecss.'"':''); + + $linkstart = ''; + $linkend=''; + + $result .= $linkstart; + if ($withpicto) $result.=img_object(($notooltip?'':$label), ($this->picto?$this->picto:'generic'), ($notooltip?(($withpicto != 2) ? 'class="paddingright"' : ''):'class="'.(($withpicto != 2) ? 'paddingright ' : '').'classfortooltip"'), 0, 0, $notooltip?0:1); + if ($withpicto != 2) $result.= $this->ref; + $result .= $linkend; + //if ($withpicto != 2) $result.=(($addlabel && $this->label) ? $sep . dol_trunc($this->label, ($addlabel > 1 ? $addlabel : 0)) : ''); + + return $result; + } + + /** * Load object information * diff --git a/htdocs/cron/info.php b/htdocs/cron/info.php index d3365abb90b..18bfde73bde 100644 --- a/htdocs/cron/info.php +++ b/htdocs/cron/info.php @@ -50,7 +50,7 @@ $head = cron_prepare_head($object); dol_fiche_head($head, 'info', $langs->trans("CronTask"), -1, 'cron'); -$linkback = '' . $langs->trans("BackToList") . ''; +$linkback = '' . $langs->trans("BackToList") . ''; $morehtmlref='
'; $morehtmlref.='
'; diff --git a/htdocs/cron/list.php b/htdocs/cron/list.php index 3933a30a54b..ba28d019958 100644 --- a/htdocs/cron/list.php +++ b/htdocs/cron/list.php @@ -38,6 +38,7 @@ if (!$user->rights->cron->read) accessforbidden(); $action=GETPOST('action','alpha'); $confirm=GETPOST('confirm','alpha'); $id=GETPOST('id','int'); +$contextpage= GETPOST('contextpage','aZ')?GETPOST('contextpage','aZ'):'cronjoblist'; // To manage different context of search $limit = GETPOST('limit','int')?GETPOST('limit','int'):$conf->liste_limit; $sortfield = GETPOST("sortfield",'alpha'); @@ -50,9 +51,6 @@ $pagenext = $page + 1; if (! $sortfield) $sortfield='t.status'; if (! $sortorder) $sortorder='ASC'; -// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context -$contextpage='cronjoblist'; - $status=GETPOST('status','int'); if ($status == '') $status=-2; @@ -151,6 +149,7 @@ if ($action == 'confirm_execute' && $confirm == "yes" && $user->rights->cron->ex */ $form = new Form($db); +$cronjob = new Cronjob($db); $pagetitle=$langs->trans("CronList"); @@ -280,6 +279,9 @@ if (! empty($conf->global->CRON_WARNING_DELAY_HOURS)) $text.=$langs->trans("Warn print info_admin($text); print '
'; +$varpage=empty($contextpage)?$_SERVER["PHP_SELF"]:$contextpage; +//$selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields +//$selectedfields.=(count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); print '
'; print ''; @@ -340,19 +342,22 @@ if ($num > 0) if (empty($obj)) break; if (! verifCond($obj->test)) continue; // Discard line with test = false + $object->id = $obj->rowid; + $object->ref = $obj->rowid; + $object->label = $obj->label; + print ''; print ''; print '".''; + // Payment mode + print "\n"; + // Public note print ''; print ''; @@ -480,14 +488,14 @@ if (! empty($id) && $action == 'edit') print "".''; + // Payment mode print "\n"; + // Status print "".''; // Project @@ -764,7 +772,7 @@ if (! empty($id) && $action != 'edit') $filename = dol_sanitizeFileName($object->id); $filedir = $conf->don->dir_output . "/" . dol_sanitizeFileName($object->id); $urlsource = $_SERVER['PHP_SELF'].'?rowid='.$object->id; - $genallowed = ($object->statut == 2 && ($object->paid == 0 || $user->admin) && $user->rights->don->lire); + $genallowed = (($object->paid == 0 || $user->admin) && $user->rights->don->lire); $delallowed = $user->rights->don->creer; print $formfile->showdocuments('donation',$filename,$filedir,$urlsource,$genallowed,$delallowed,$object->modelpdf); diff --git a/htdocs/don/class/don.class.php b/htdocs/don/class/don.class.php index df298831c22..a9a431d5320 100644 --- a/htdocs/don/class/don.class.php +++ b/htdocs/don/class/don.class.php @@ -69,7 +69,7 @@ class Don extends CommonObject global $langs; $this->db = $db; - $this->modepaiementid = 0; + $this->modepaymentid = 0; $langs->load("donations"); $this->labelstatut[-1]=$langs->trans("Canceled"); @@ -338,7 +338,6 @@ class Don extends CommonObject $sql.= ", address"; $sql.= ", zip"; $sql.= ", town"; - // $sql.= ", country"; -- Deprecated $sql.= ", fk_country"; $sql.= ", public"; $sql.= ", fk_projet"; @@ -354,7 +353,7 @@ class Don extends CommonObject $sql.= " '".$this->db->idate($now)."'"; $sql.= ", ".$conf->entity; $sql.= ", ".price2num($this->amount); - $sql.= ", ".($this->modepaiementid?$this->modepaiementid:"null"); + $sql.= ", ".($this->modepaymentid?$this->modepaymentid:"null"); $sql.= ", '".$this->db->escape($this->firstname)."'"; $sql.= ", '".$this->db->escape($this->lastname)."'"; $sql.= ", '".$this->db->escape($this->societe)."'"; @@ -605,9 +604,10 @@ class Don extends CommonObject $sql = "SELECT d.rowid, d.datec, d.date_valid, d.tms as datem, d.datedon,"; $sql.= " d.firstname, d.lastname, d.societe, d.amount, d.fk_statut, d.address, d.zip, d.town, "; - $sql.= " d.fk_country, d.country as country_olddata, d.public, d.amount, d.fk_payment, d.paid, d.note_private, d.note_public, cp.libelle, d.email, d.phone, "; + $sql.= " d.fk_country, d.country as country_olddata, d.public, d.amount, d.fk_payment, d.paid, d.note_private, d.note_public, d.email, d.phone, "; $sql.= " d.phone_mobile, d.fk_projet as fk_project, d.model_pdf,"; $sql.= " p.ref as project_ref,"; + $sql.= " cp.libelle as payment_label, cp.code as payment_code,"; $sql.= " c.code as country_code, c.label as country"; $sql.= " FROM ".MAIN_DB_PREFIX."don as d"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."projet as p ON p.rowid = d.fk_projet"; @@ -657,7 +657,8 @@ class Don extends CommonObject $this->fk_project = $obj->fk_project; $this->public = $obj->public; $this->modepaymentid = $obj->fk_payment; - $this->modepayment = $obj->libelle; + $this->modepaymentcode = $obj->payment_code; + $this->modepayment = $obj->payment_label; $this->paid = $obj->paid; $this->amount = $obj->amount; $this->note_private = $obj->note_private; diff --git a/htdocs/expedition/card.php b/htdocs/expedition/card.php index 08f6c35404a..9f48d27ca00 100644 --- a/htdocs/expedition/card.php +++ b/htdocs/expedition/card.php @@ -29,7 +29,7 @@ /** * \file htdocs/expedition/card.php * \ingroup expedition - * \brief Fiche descriptive d'une expedition + * \brief Card of a shipment */ require '../main.inc.php'; @@ -2492,7 +2492,7 @@ else if ($id || $ref) if (empty($reshook)) { - if ($object->statut == 0 && $num_prod > 0) + if ($object->statut == Expedition::STATUS_DRAFT && $num_prod > 0) { if ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->expedition->creer)) || (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->expedition->shipping_advance->validate))) @@ -2507,9 +2507,16 @@ else if ($id || $ref) // TODO add alternative status // 0=draft, 1=validated, 2=billed, we miss a status "delivered" (only available on order) - if ($object->statut == 2 && $object->billed && $user->rights->expedition->creer) + if ($object->statut == Expedition::STATUS_CLOSED && $user->rights->expedition->creer) { - print ''.$langs->trans("ReOpen").''; + if (! empty($conf->facture->enabled) && ! empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT)) // Quand l'option est on, il faut avoir le bouton en plus et non en remplacement du Close ? + { + print ''.$langs->trans("ClassifyUnbilled").''; + } + else + { + print ''.$langs->trans("ReOpen").''; + } } // Send diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php index 9817e232e9e..85408c7e14a 100644 --- a/htdocs/expedition/class/expedition.class.php +++ b/htdocs/expedition/class/expedition.class.php @@ -108,6 +108,8 @@ class Expedition extends CommonObject */ function __construct($db) { + global $conf; + $this->db = $db; $this->lines = array(); $this->products = array(); @@ -118,6 +120,20 @@ class Expedition extends CommonObject $this->statuts[0] = 'StatusSendingDraft'; $this->statuts[1] = 'StatusSendingValidated'; $this->statuts[2] = 'StatusSendingProcessed'; + + // List of short language codes for status + $this->statutshorts = array(); + $this->statutshorts[-1] = 'StatusSendingCanceledShort'; + $this->statutshorts[0] = 'StatusSendingDraftShort'; + $this->statutshorts[1] = 'StatusSendingValidatedShort'; + $this->statutshorts[2] = 'StatusSendingProcessedShort'; + + /* Status "billed" or not is managed by another field than status + if (! empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT)) + { + $this->statuts[2] = 'StatusSendingBilled'; + $this->statutshorts[2] = 'StatusSendingBilledShort'; + }*/ } /** @@ -1575,32 +1591,32 @@ class Expedition extends CommonObject if ($mode==0) { if ($statut==0) return $langs->trans($this->statuts[$statut]); - if ($statut==1) return $langs->trans($this->statuts[$statut]); - if ($statut==2) return $langs->trans($this->statuts[$statut]); + if ($statut==1) return $langs->trans($this->statuts[$statut]); + if ($statut==2) return $langs->trans($this->statuts[$statut]); } if ($mode==1) { - if ($statut==0) return $langs->trans('StatusSendingDraftShort'); - if ($statut==1) return $langs->trans('StatusSendingValidatedShort'); - if ($statut==2) return $langs->trans('StatusSendingProcessedShort'); + if ($statut==0) return $langs->trans($this->statutshorts[$statut]); + if ($statut==1) return $langs->trans($this->statutshorts[$statut]); + if ($statut==2) return $langs->trans($this->statutshorts[$statut]); } if ($mode == 3) { if ($statut==0) return img_picto($langs->trans($this->statuts[$statut]),'statut0'); if ($statut==1) return img_picto($langs->trans($this->statuts[$statut]),'statut4'); - if ($statut==2) return img_picto($langs->trans('StatusSendingProcessed'),'statut6'); + if ($statut==2) return img_picto($langs->trans($this->statuts[$statut]),'statut6'); } if ($mode == 4) { if ($statut==0) return img_picto($langs->trans($this->statuts[$statut]),'statut0').' '.$langs->trans($this->statuts[$statut]); if ($statut==1) return img_picto($langs->trans($this->statuts[$statut]),'statut4').' '.$langs->trans($this->statuts[$statut]); - if ($statut==2) return img_picto($langs->trans('StatusSendingProcessed'),'statut6').' '.$langs->trans('StatusSendingProcessed'); + if ($statut==2) return img_picto($langs->trans($this->statuts[$statut]),'statut6').' '.$langs->trans($this->statuts[$statut]); } if ($mode == 5) { - if ($statut==0) return $langs->trans('StatusSendingDraftShort').' '.img_picto($langs->trans($this->statuts[$statut]),'statut0'); - if ($statut==1) return $langs->trans('StatusSendingValidatedShort').' '.img_picto($langs->trans($this->statuts[$statut]),'statut4'); - if ($statut==2) return $langs->trans('StatusSendingProcessedShort').' '.img_picto($langs->trans('StatusSendingProcessedShort'),'statut6'); + if ($statut==0) return $langs->trans($this->statutshorts[$statut]).' '.img_picto($langs->trans($this->statuts[$statut]),'statut0'); + if ($statut==1) return $langs->trans($this->statutshorts[$statut]).' '.img_picto($langs->trans($this->statuts[$statut]),'statut4'); + if ($statut==2) return $langs->trans($this->statutshorts[$statut]).' '.img_picto($langs->trans($this->statuts[$statut]),'statut6'); } } @@ -2070,7 +2086,7 @@ class Expedition extends CommonObject /** * Classify the shipping as validated/opened * - * @return int <0 if ko, >0 if ok + * @return int <0 if KO, 0 if already open, >0 if OK */ function reOpen() { @@ -2078,6 +2094,12 @@ class Expedition extends CommonObject $error=0; + // Protection. This avoid to move stock later when we should not + if ($this->statut == self::STATUS_VALIDATED) + { + return 0; + } + $this->db->begin(); $sql = 'UPDATE '.MAIN_DB_PREFIX.'expedition SET fk_statut=1'; diff --git a/htdocs/expensereport/card.php b/htdocs/expensereport/card.php index 6d989e6efc0..6cebfb0fe2d 100644 --- a/htdocs/expensereport/card.php +++ b/htdocs/expensereport/card.php @@ -1978,7 +1978,8 @@ else $i = 0;$total = 0; print ''; - print ''; + print ''; + //print ''; print ''; if (! empty($conf->projet->enabled)) print ''; if (!empty($conf->global->MAIN_USE_EXPENSE_IK)) print ''; @@ -2001,15 +2002,21 @@ else foreach ($object->lines as &$line) { - $piece_comptable = $i + 1; + $numline = $i + 1; if ($action != 'editline' || $line->rowid != GETPOST('rowid')) { print ''; print ''; + + /*print ''; + print ' '.$piece_comptable.''; + print '';*/ + print ''; if (! empty($conf->projet->enabled)) { diff --git a/htdocs/externalsite/admin/externalsite.php b/htdocs/externalsite/admin/externalsite.php index 3d1fb6af478..a590717ccd3 100644 --- a/htdocs/externalsite/admin/externalsite.php +++ b/htdocs/externalsite/admin/externalsite.php @@ -74,7 +74,7 @@ if ($action == 'update') llxHeader(); -$linkback=''.$langs->trans("BackToModuleList").''; +$linkback=''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans("ExternalSiteSetup"),$linkback,'title_setup'); print '
'; diff --git a/htdocs/fichinter/admin/fichinter_extrafields.php b/htdocs/fichinter/admin/fichinter_extrafields.php index 1afe5feaeed..6116423bdec 100644 --- a/htdocs/fichinter/admin/fichinter_extrafields.php +++ b/htdocs/fichinter/admin/fichinter_extrafields.php @@ -66,7 +66,7 @@ $textobject=$langs->transnoentitiesnoconv("Interventions"); llxHeader(); -$linkback=''.$langs->trans("BackToModuleList").''; +$linkback=''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans("InterventionsSetup"),$linkback,'title_setup'); $head=fichinter_admin_prepare_head(); diff --git a/htdocs/fichinter/admin/fichinterdet_extrafields.php b/htdocs/fichinter/admin/fichinterdet_extrafields.php index cd21b3d9590..df06bab1336 100644 --- a/htdocs/fichinter/admin/fichinterdet_extrafields.php +++ b/htdocs/fichinter/admin/fichinterdet_extrafields.php @@ -66,7 +66,7 @@ $textobject=$langs->transnoentitiesnoconv("Interventions"); llxHeader(); -$linkback=''.$langs->trans("BackToModuleList").''; +$linkback=''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans("InterventionsSetup"),$linkback,'title_setup'); diff --git a/htdocs/fichinter/card.php b/htdocs/fichinter/card.php index 81e7fe9ac54..23dde2290b4 100644 --- a/htdocs/fichinter/card.php +++ b/htdocs/fichinter/card.php @@ -470,7 +470,7 @@ if (empty($reshook)) setEventMessages($object->error, $object->errors, 'errors'); } - header('Location: '.DOL_URL_ROOT.'/fichinter/list.php?leftmenu=ficheinter'); + header('Location: '.DOL_URL_ROOT.'/fichinter/list.php?leftmenu=ficheinter&restore_lastsearch_values=1'); exit; } diff --git a/htdocs/fichinter/class/api_interventions.class.php b/htdocs/fichinter/class/api_interventions.class.php index 23073737d7e..2cfe14c7197 100644 --- a/htdocs/fichinter/class/api_interventions.class.php +++ b/htdocs/fichinter/class/api_interventions.class.php @@ -162,6 +162,7 @@ class Interventions extends DolibarrApi { $num = $db->num_rows($result); $min = min($num, ($limit <= 0 ? $num : $limit)); + $i = 0; while ($i < $min) { $obj = $db->fetch_object($result); diff --git a/htdocs/fichinter/class/fichinter.class.php b/htdocs/fichinter/class/fichinter.class.php index ce122b045b5..6ee279d2015 100644 --- a/htdocs/fichinter/class/fichinter.class.php +++ b/htdocs/fichinter/class/fichinter.class.php @@ -1223,6 +1223,8 @@ class Fichinter extends CommonObject */ function fetch_lines() { + $this->lines = array(); + $sql = 'SELECT rowid, description, duree, date, rang'; $sql.= ' FROM '.MAIN_DB_PREFIX.'fichinterdet'; $sql.=' WHERE fk_fichinter = '.$this->id .' ORDER BY rang ASC, date ASC' ; diff --git a/htdocs/filefunc.inc.php b/htdocs/filefunc.inc.php index 256501048ba..3e9fffae38b 100644 --- a/htdocs/filefunc.inc.php +++ b/htdocs/filefunc.inc.php @@ -69,21 +69,9 @@ $conffiletoshow = "htdocs/conf/conf.php"; // Include configuration // --- End of part replaced by Dolibarr packager makepack-dolibarr -// Replace conf filename with "conf" parameter on url by GET -/* Disabled. This is a serious security hole -if (! empty($_GET['conf'])) -{ - $confname=basename($_GET['conf']); - setcookie('dolconf', $confname, 0, '/'); - $conffile = 'conf/'.$confname.'.php'; -} else { - $confname=basename(empty($_COOKIE['dolconf']) ? 'conf' : $_COOKIE['dolconf']); - $conffile = 'conf/'.$confname.'.php'; -} -*/ // Include configuration -$result=@include_once $conffile; // Keep @ because with some error reporting this break the redirect +$result=@include_once $conffile; // Keep @ because with some error reporting this break the redirect done when file not found if (! $result && ! empty($_SERVER["GATEWAY_INTERFACE"])) // If install not done and we are in a web session { diff --git a/htdocs/fourn/card.php b/htdocs/fourn/card.php index 724f90af228..8d10d55b3bd 100644 --- a/htdocs/fourn/card.php +++ b/htdocs/fourn/card.php @@ -107,7 +107,7 @@ if (empty($reshook)) // Fill array 'array_options' with data from update form $extralabels = $extrafields->fetch_name_optionals_label($object->table_element); $ret = $extrafields->setOptionalsFromPost($extralabels, $object, GETPOST('attribute')); - + if ($ret < 0) $error++; if (! $error) { @@ -305,7 +305,7 @@ if ($object->id > 0) $outstandingTotal=$tmp['total_ht']; $outstandingTotalIncTax=$tmp['total_ttc']; $text=$langs->trans("OverAllSupplierProposals"); - $link=''; + $link=DOL_URL_ROOT.'/supplier_proposal/list.php?socid='.$object->id; $icon='bill'; if ($link) $boxstat.=''; $boxstat.='
'; @@ -323,7 +323,7 @@ if ($object->id > 0) $outstandingTotal=$tmp['total_ht']; $outstandingTotalIncTax=$tmp['total_ttc']; $text=$langs->trans("OverAllOrders"); - $link=''; + $link=DOL_URL_ROOT.'/fourn/commande/list.php?socid='.$object->id; $icon='bill'; if ($link) $boxstat.=''; $boxstat.='
'; @@ -341,7 +341,7 @@ if ($object->id > 0) $outstandingTotalIncTax=$tmp['total_ttc']; $text=$langs->trans("OverAllInvoices"); - $link=''; + $link=DOL_URL_ROOT.'/fourn/facture/list.php?socid='.$object->id; $icon='bill'; if ($link) $boxstat.=''; $boxstat.='
'; @@ -456,7 +456,7 @@ if ($object->id > 0) /* - * Last supplier proposal + * Latest supplier proposal */ $proposalstatic = new SupplierProposal($db); @@ -465,7 +465,7 @@ if ($object->id > 0) $sql = "SELECT p.rowid, p.ref, p.date_valid as dc, p.fk_statut, p.total_ht, p.tva as total_tva, p.total as total_ttc"; $sql.= " FROM ".MAIN_DB_PREFIX."supplier_proposal as p "; $sql.= " WHERE p.fk_soc =".$object->id; - $sql.= " AND p.entity =".$conf->entity; + $sql.= " AND p.entity IN (".getEntity('supplier_proposal').")"; $sql.= " ORDER BY p.date_valid DESC"; $sql.= " ".$db->plimit($MAXLIST); @@ -528,7 +528,7 @@ if ($object->id > 0) } /* - * Last supplier orders + * Latest supplier orders */ $orderstatic = new CommandeFournisseur($db); @@ -541,6 +541,7 @@ if ($object->id > 0) $sql2.= ' FROM '.MAIN_DB_PREFIX.'societe as s'; $sql2.= ', '.MAIN_DB_PREFIX.'commande_fournisseur as c'; $sql2.= ' WHERE c.fk_soc = s.rowid'; + $sql2.= " AND c.entity IN (".getEntity('commande_fournisseur').")"; $sql2.= ' AND s.rowid = '.$object->id; // Show orders with status validated, shipping started and delivered (well any order we can bill) $sql2.= " AND c.fk_statut IN (5)"; @@ -558,9 +559,9 @@ if ($object->id > 0) // TODO move to DAO class $sql = "SELECT count(p.rowid) as total"; - $sql.= " FROM ".MAIN_DB_PREFIX."commande_fournisseur as p "; + $sql.= " FROM ".MAIN_DB_PREFIX."commande_fournisseur as p"; $sql.= " WHERE p.fk_soc =".$object->id; - $sql.= " AND p.entity =".$conf->entity; + $sql.= " AND p.entity IN (".getEntity('commande_fournisseur').")"; $resql=$db->query($sql); if ($resql) { @@ -569,9 +570,9 @@ if ($object->id > 0) } $sql = "SELECT p.rowid,p.ref, p.date_commande as dc, p.fk_statut, p.total_ht, p.tva as total_tva, p.total_ttc"; - $sql.= " FROM ".MAIN_DB_PREFIX."commande_fournisseur as p "; + $sql.= " FROM ".MAIN_DB_PREFIX."commande_fournisseur as p"; $sql.= " WHERE p.fk_soc =".$object->id; - $sql.= " AND p.entity =".$conf->entity; + $sql.= " AND p.entity IN (".getEntity('commande_fournisseur').")"; $sql.= " ORDER BY p.date_commande DESC"; $sql.= " ".$db->plimit($MAXLIST); $resql=$db->query($sql); @@ -632,7 +633,7 @@ if ($object->id > 0) } /* - * Last supplier invoices + * Latest supplier invoices */ $langs->load('bills'); @@ -646,7 +647,7 @@ if ($object->id > 0) $sql.= ' FROM '.MAIN_DB_PREFIX.'facture_fourn as f'; $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'paiementfourn_facturefourn as pf ON f.rowid=pf.fk_facturefourn'; $sql.= ' WHERE f.fk_soc = '.$object->id; - $sql.= " AND f.entity =".$conf->entity; + $sql.= " AND f.entity IN (".getEntity('facture_fourn').")"; $sql.= ' GROUP BY f.rowid,f.libelle,f.ref,f.ref_supplier,f.fk_statut,f.datef,f.total_ht,f.total_tva,f.total_ttc,f.paye'; $sql.= ' ORDER BY f.datef DESC'; $resql=$db->query($sql); @@ -674,15 +675,15 @@ if ($object->id > 0) print '
'; print ''; print ''; diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index 38d0e42d36a..a42546fdb84 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -218,7 +218,7 @@ class CommandeFournisseur extends CommonOrder // Check parameters if (empty($id) && empty($ref)) return -1; - $sql = "SELECT c.rowid, c.ref, ref_supplier, c.fk_soc, c.fk_statut, c.amount_ht, c.total_ht, c.total_ttc, c.tva as total_vat,"; + $sql = "SELECT c.rowid, c.entity, c.ref, ref_supplier, c.fk_soc, c.fk_statut, c.amount_ht, c.total_ht, c.total_ttc, c.tva as total_vat,"; $sql.= " c.localtax1, c.localtax2, "; $sql.= " c.date_creation, c.date_valid, c.date_approve, c.date_approve2,"; $sql.= " c.fk_user_author, c.fk_user_valid, c.fk_user_approve, c.fk_user_approve2,"; @@ -253,6 +253,8 @@ class CommandeFournisseur extends CommonOrder } $this->id = $obj->rowid; + $this->entity = $obj->entity; + $this->ref = $obj->ref; $this->ref_supplier = $obj->ref_supplier; $this->socid = $obj->fk_soc; diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php index 444eb5d200a..292466ea0d8 100644 --- a/htdocs/fourn/class/fournisseur.facture.class.php +++ b/htdocs/fourn/class/fournisseur.facture.class.php @@ -1929,6 +1929,8 @@ class FactureFournisseur extends CommonInvoice $label .= '
' . $langs->trans('Ref') . ': ' . $this->ref; if (! empty($this->ref_supplier)) $label.= '
' . $langs->trans('RefSupplier') . ': ' . $this->ref_supplier; + if (! empty($this->libelle)) + $label.= '
' . $langs->trans('Label') . ': ' . $this->libelle; if (! empty($this->total_ht)) $label.= '
' . $langs->trans('AmountHT') . ': ' . price($this->total_ht, 0, $langs, 0, -1, -1, $conf->currency); if (! empty($this->total_tva)) diff --git a/htdocs/fourn/commande/card.php b/htdocs/fourn/commande/card.php index 617039f25da..bd2d0591400 100644 --- a/htdocs/fourn/commande/card.php +++ b/htdocs/fourn/commande/card.php @@ -850,7 +850,7 @@ if (empty($reshook)) $result=$object->delete($user); if ($result > 0) { - header("Location: ".DOL_URL_ROOT.'/fourn/commande/list.php'); + header("Location: ".DOL_URL_ROOT.'/fourn/commande/list.php?restore_lastsearch_values=1'); exit; } else diff --git a/htdocs/fourn/commande/list.php b/htdocs/fourn/commande/list.php index 731c26af038..ef5f8816a94 100644 --- a/htdocs/fourn/commande/list.php +++ b/htdocs/fourn/commande/list.php @@ -914,7 +914,7 @@ if ($resql) // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; // Hook fields - $parameters=array('arrayfields'=>$arrayfields); + $parameters=array('arrayfields'=>$arrayfields,'param'=>$param,'sortfield'=>$sortfield,'sortorder'=>$sortorder); $reshook=$hookmanager->executeHooks('printFieldListTitle',$parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; if (! empty($arrayfields['cf.datec']['checked'])) print_liste_field_titre($arrayfields['cf.datec']['label'],$_SERVER["PHP_SELF"],"cf.date_creation","",$param,'align="center" class="nowrap"',$sortfield,$sortorder); @@ -1150,6 +1150,28 @@ if ($resql) print "
\n"; $i++; } + + // Show total line + if (isset($totalarray['totalhtfield'])) + { + print ''; + $i=0; + while ($i < $totalarray['nbfield']) + { + $i++; + if ($i == 1) + { + if ($num < $limit) print ''; + else print ''; + } + elseif ($totalarray['totalhtfield'] == $i) print ''; + elseif ($totalarray['totalvatfield'] == $i) print ''; + elseif ($totalarray['totalttcfield'] == $i) print ''; + else print ''; + } + print ''; + } + print "
'; - print ''; - print img_picto('', 'object_cron').' '; - print $obj->rowid; - print ''; + print $object->getNomUrl(1); print ''; if (! empty($obj->label)) { - print ''.$langs->trans($obj->label).''; + $object->ref = $langs->trans($obj->label); + print $object->getNomUrl(0, '', 1); + $object->ref = $obj->rowid; } else { @@ -430,7 +435,7 @@ if ($num > 0) print ''; if ($user->rights->cron->create) { - print "rowid."&action=edit".($sortfield?'&sortfield='.$sortfield:'').($sortorder?'&sortorder='.$sortorder:'').$param."&backtourl=".urlencode($_SERVER["PHP_SELF"])."\" title=\"".dol_escape_htmltag($langs->trans('Edit'))."\">".img_picto($langs->trans('Edit'),'edit')."  "; + print "rowid."&action=edit".($sortfield?'&sortfield='.$sortfield:'').($sortorder?'&sortorder='.$sortorder:'').$param."&backtourl=".urlencode($_SERVER["PHP_SELF"].($param?'?'.$param:''))."\" title=\"".dol_escape_htmltag($langs->trans('Edit'))."\">".img_picto($langs->trans('Edit'),'edit')."  "; } if ($user->rights->cron->delete) { diff --git a/htdocs/don/admin/donation.php b/htdocs/don/admin/donation.php index fc659565c56..f471ffd7ce7 100644 --- a/htdocs/don/admin/donation.php +++ b/htdocs/don/admin/donation.php @@ -204,12 +204,12 @@ $form=new Form($db); if (! empty($conf->accounting->enabled)) $formaccounting = new FormAccounting($db); llxHeader('',$langs->trans("DonationsSetup"),'DonConfiguration'); -$linkback=''.$langs->trans("BackToModuleList").''; +$linkback=''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans("DonationsSetup"),$linkback,'title_setup'); $head = donation_admin_prepare_head(); -dol_fiche_head($head, 'general', $langs->trans("Donations"), 0, 'payment'); +dol_fiche_head($head, 'general', $langs->trans("Donations"), -1, 'payment'); // Document templates diff --git a/htdocs/don/admin/donation_extrafields.php b/htdocs/don/admin/donation_extrafields.php index d1dbb6dccfa..cc4078cfdbe 100644 --- a/htdocs/don/admin/donation_extrafields.php +++ b/htdocs/don/admin/donation_extrafields.php @@ -61,13 +61,13 @@ $textobject=$langs->transnoentitiesnoconv("Donations"); llxHeader('',$langs->trans("DonationsSetup")); -$linkback=''.$langs->trans("BackToModuleList").''; +$linkback=''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans("DonationsSetup"),$linkback,'title_setup'); $head = donation_admin_prepare_head(); -dol_fiche_head($head, 'attributes', $langs->trans("Donations"), 0, 'payment'); +dol_fiche_head($head, 'attributes', $langs->trans("Donations"), -1, 'payment'); require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_view.tpl.php'; diff --git a/htdocs/don/card.php b/htdocs/don/card.php index 01164c47508..4bc05f6482c 100644 --- a/htdocs/don/card.php +++ b/htdocs/don/card.php @@ -98,20 +98,21 @@ if ($action == 'update') { $object->fetch($id); - $object->firstname = GETPOST("firstname"); - $object->lastname = GETPOST("lastname"); - $object->societe = GETPOST("societe"); - $object->address = GETPOST("address"); - $object->amount = price2num(GETPOST("amount")); - $object->town = GETPOST("town"); - $object->zip = GETPOST("zipcode"); + $object->firstname = GETPOST("firstname",'alpha'); + $object->lastname = GETPOST("lastname",'alpha'); + $object->societe = GETPOST("societe",'alpha'); + $object->address = GETPOST("address",'alpha'); + $object->amount = price2num(GETPOST("amount",'alpha')); + $object->town = GETPOST("town",'alpha'); + $object->zip = GETPOST("zipcode",'alpha'); $object->country_id = GETPOST('country_id', 'int'); - $object->email = GETPOST("email"); + $object->email = GETPOST("email",'alpha'); $object->date = $donation_date; - $object->public = GETPOST("public"); - $object->fk_project = GETPOST("fk_project"); - $object->note_private= GETPOST("note_private"); - $object->note_public = GETPOST("note_public"); + $object->public = GETPOST("public",'alpha'); + $object->fk_project = GETPOST("fk_project",'alpha'); + $object->note_private= GETPOST("note_private",'none'); + $object->note_public = GETPOST("note_public",'none'); + $object->modepaymentid = GETPOST('modepayment','int'); // Fill array 'array_options' with data from add form $ret = $extrafields->setOptionalsFromPost($extralabels,$object); @@ -151,20 +152,21 @@ if ($action == 'add') if (! $error) { - $object->firstname = GETPOST("firstname"); - $object->lastname = GETPOST("lastname"); - $object->societe = GETPOST("societe"); - $object->address = GETPOST("address"); - $object->amount = price2num(GETPOST("amount")); - $object->zip = GETPOST("zipcode"); - $object->town = GETPOST("town"); + $object->firstname = GETPOST("firstname",'alpha'); + $object->lastname = GETPOST("lastname",'alpha'); + $object->societe = GETPOST("societe",'alpha'); + $object->address = GETPOST("address",'alpha'); + $object->amount = price2num(GETPOST("amount",'alpha')); + $object->zip = GETPOST("zipcode",'alpha'); + $object->town = GETPOST("town",'alpha'); $object->country_id = GETPOST('country_id', 'int'); - $object->email = GETPOST("email"); + $object->email = GETPOST("email",'alpha'); $object->date = $donation_date; - $object->note_private= GETPOST("note_private"); - $object->note_public = GETPOST("note_public"); - $object->public = GETPOST("public"); - $object->fk_project = GETPOST("fk_project"); + $object->note_private= GETPOST("note_private",'none'); + $object->note_public = GETPOST("note_public",'none'); + $object->public = GETPOST("public",'alpha'); + $object->fk_project = GETPOST("fk_project",'alpha'); + $object->modepaymentid = GETPOST('modepayment','int'); // Fill array 'array_options' with data from add form $ret = $extrafields->setOptionalsFromPost($extralabels,$object); @@ -348,6 +350,12 @@ if ($action == 'create') print "
'.$langs->trans("EMail").'
".$langs->trans("PaymentMode")."\n"; + $selected = GETPOST('modepayment','int'); + $form->select_types_paiements($selected, 'modepayment', 'CRDT', 0, 1); + print "
' . $langs->trans('NotePublic') . '
'.$langs->trans("EMail").'
".$langs->trans("PaymentMode")."\n"; - if ($object->modepaymentid) $selected = $object->modepaymentid; else $selected = ''; - $form->select_types_paiements($selected, 'modepayment', 'CRDT', 0, 1); print "
'.$langs->trans("Status").''.$object->getLibStatut(4).'
'.$langs->trans('Piece').''.$langs->trans('LineNb').''.$langs->trans('Piece').''.$langs->trans('Date').''.$langs->trans('Project').''.$langs->trans('CarCategory').'
'; + print $numline; + print ''; print img_picto($langs->trans("Document"), "object_generic"); - print ' '.$piece_comptable.''.dol_print_date($db->jdate($line->date), 'day').''; print ''; $facturestatic->id=$obj->rowid; - $facturestatic->ref=($obj->ref?$obj->ref:$obj->rowid).($obj->ref_supplier?' - '.$obj->ref_supplier:''); - $facturestatic->ref_supplier = $obj->ref_supplier; - $facturestatic->total_ht = $obj->total_ht; + $facturestatic->ref=($obj->ref?$obj->ref:$obj->rowid); + $facturestatic->ref_supplier = $obj->ref_supplier; + $facturestatic->libelle = $obj->libelle; + $facturestatic->total_ht = $obj->total_ht; $facturestatic->total_tva = $obj->total_tva; $facturestatic->total_ttc = $obj->total_ttc; - //$facturestatic->ref_supplier=$obj->ref_supplier; print $facturestatic->getNomUrl(1); - //print img_object($langs->trans('ShowBill'),'bill').' '.($obj->ref?$obj->ref:$obj->rowid).' - '.$obj->ref_supplier.''; - print ' '.dol_trunc($obj->libelle,14); + print $obj->ref_supplier?' - '.$obj->ref_supplier:''; + print ($obj->libelle?' - ':'').dol_trunc($obj->libelle,14); print ''.dol_print_date($db->jdate($obj->df),'day').''.price($obj->amount).'
'.$langs->trans("Total").''.$langs->trans("Totalforthispage").''.price($totalarray['totalht']).''.price($totalarray['totalvat']).''.price($totalarray['totalttc']).'
\n"; print '
'; print "\n"; diff --git a/htdocs/fourn/facture/card.php b/htdocs/fourn/facture/card.php index 761d5d591e3..5b1148cd885 100644 --- a/htdocs/fourn/facture/card.php +++ b/htdocs/fourn/facture/card.php @@ -224,7 +224,7 @@ if (empty($reshook)) $result=$object->delete($user); if ($result > 0) { - header('Location: list.php'); + header('Location: list.php?restore_lastsearch_values=1'); exit; } else diff --git a/htdocs/fourn/facture/list.php b/htdocs/fourn/facture/list.php index 31d6ba2f183..0876cfc7595 100644 --- a/htdocs/fourn/facture/list.php +++ b/htdocs/fourn/facture/list.php @@ -762,7 +762,7 @@ if ($resql) // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; // Hook fields - $parameters=array('arrayfields'=>$arrayfields); + $parameters=array('arrayfields'=>$arrayfields,'param'=>$param,'sortfield'=>$sortfield,'sortorder'=>$sortorder); $reshook=$hookmanager->executeHooks('printFieldListTitle',$parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; if (! empty($arrayfields['f.datec']['checked'])) print_liste_field_titre($arrayfields['f.datec']['label'],$_SERVER["PHP_SELF"],"f.datec","",$param,'align="center" class="nowrap"',$sortfield,$sortorder); diff --git a/htdocs/ftp/admin/ftpclient.php b/htdocs/ftp/admin/ftpclient.php index 845760c26b7..9a8ada55de5 100644 --- a/htdocs/ftp/admin/ftpclient.php +++ b/htdocs/ftp/admin/ftpclient.php @@ -142,7 +142,7 @@ $form=new Form($db); llxHeader(); -$linkback=''.$langs->trans("BackToModuleList").''; +$linkback=''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans("FTPClientSetup"), $linkback, 'title_setup'); print '
'; diff --git a/htdocs/holiday/card.php b/htdocs/holiday/card.php index e3009c975bc..59cb522d7d5 100644 --- a/htdocs/holiday/card.php +++ b/htdocs/holiday/card.php @@ -282,8 +282,8 @@ if ($action == 'confirm_delete' && GETPOST('confirm') == 'yes' && $user->rights- $canedit=(($user->id == $object->fk_user && $user->rights->holiday->write) || ($user->id != $object->fk_user && $user->rights->holiday->write_all)); - // If this is a rough draft - if ($object->statut == 1 || $object->statut == 3) + // If this is a rough draft, approved, canceled or refused + if ($object->statut == 1 || $object->statut == 4 || $object->statut == 5) { // Si l'utilisateur à le droit de lire cette demande, il peut la supprimer if ($canedit) @@ -299,7 +299,7 @@ if ($action == 'confirm_delete' && GETPOST('confirm') == 'yes' && $user->rights- if (! $error) { $db->commit(); - header('Location: list.php'); + header('Location: list.php?restore_lastsearch_values=1'); exit; } else @@ -1180,6 +1180,7 @@ else print '
'.$langs->trans('ReviewedByCP').'
'.$langs->trans('ReviewedByCP').''; - print $form->select_dolusers($object->fk_user, "valideur", 1, ($user->admin ? '' : array($user->id))); // By default, hierarchical parent + print $form->select_dolusers($object->fk_validator, "valideur", 1, ($user->admin ? '' : array($user->id))); // By default, hierarchical parent print '
'; print ''; print ''; @@ -309,7 +310,8 @@ if (! empty($conf->deplacement->enabled) && $user->rights->deplacement->lire) { print ''; } - print '
'.$langs->trans("BoxTitleLastModifiedExpenses",min($max,$num)).'
'.$langs->trans("None").'

'; + print ''; + print '
'; } else dol_print_error($db); } @@ -336,6 +338,7 @@ if (! empty($conf->expensereport->enabled) && $user->rights->expensereport->lire $i = 0; + print '
'; print ''; print ''; print ''; @@ -381,6 +384,7 @@ if (! empty($conf->expensereport->enabled) && $user->rights->expensereport->lire print ''; } print '
'.$langs->trans("BoxTitleLastModifiedExpenses",min($max,$num)).'
'.$langs->trans("None").'
'; + print '
'; } else dol_print_error($db); } diff --git a/htdocs/imports/import.php b/htdocs/imports/import.php index 93cb22ea469..08d3495c33c 100644 --- a/htdocs/imports/import.php +++ b/htdocs/imports/import.php @@ -1475,10 +1475,11 @@ if ($step == 5 && $datatoimport) $sourcelinenb=0; $endoffile=0; // Loop on each input file record - while ($sourcelinenb < $nboflines && ! $endoffile) + while (($sourcelinenb < $nboflines) && ! $endoffile) { $sourcelinenb++; // Read line and store it into $arrayrecord + //dol_syslog("line ".$sourcelinenb.' - '.$nboflines.' - '.$excludefirstline.' - '.$endatlinenb); $arrayrecord=$obj->import_read_record(); if ($arrayrecord === false) { @@ -1487,7 +1488,7 @@ if ($step == 5 && $datatoimport) continue; } if ($excludefirstline && ($sourcelinenb < $excludefirstline)) continue; - if ($endatlinenb && ($sourcelinenb > $endatlinenb)) continue; + if ($endatlinenb && ($sourcelinenb > $endatlinenb)) break; // Run import $result=$obj->import_insert($arrayrecord,$array_match_file_to_database,$objimport,count($fieldssource),$importid,$updatekeys); @@ -1857,7 +1858,7 @@ if ($step == 6 && $datatoimport) continue; } if ($excludefirstline && ($sourcelinenb < $excludefirstline)) continue; - if ($endatlinenb && ($sourcelinenb > $endatlinenb)) continue; + if ($endatlinenb && ($sourcelinenb > $endatlinenb)) break; // Run import $result=$obj->import_insert($arrayrecord,$array_match_file_to_database,$objimport,count($fieldssource),$importid,$updatekeys); @@ -1941,7 +1942,7 @@ function show_elem($fieldssource,$pos,$key,$var,$nostyle='') $height='24'; print "\n\n\n"; - print '
'."\n"; + print '
'."\n"; print ''."\n"; if ($pos && $pos > count($fieldssource)) // No fields diff --git a/htdocs/install/check.php b/htdocs/install/check.php index 50409fb55e5..7e6d15115d5 100644 --- a/htdocs/install/check.php +++ b/htdocs/install/check.php @@ -35,7 +35,7 @@ $allowinstall = 0; $allowupgrade = false; $checksok = 1; -$setuplang=GETPOST("selectlang",'',3)?GETPOST("selectlang",'',3):$langs->getDefaultLang(); +$setuplang=GETPOST("selectlang",'az09',3)?GETPOST("selectlang",'az09',3):$langs->getDefaultLang(); $langs->setDefaultLang($setuplang); $langs->load("install"); @@ -345,6 +345,10 @@ else $conf->db->dolibarr_main_db_cryptkey = $dolibarr_main_db_cryptkey; $conf->setValues($db); + // Reset forced setup after the setValues + if (defined('SYSLOG_FILE')) $conf->global->SYSLOG_FILE=constant('SYSLOG_FILE'); + $conf->global->MAIN_ENABLE_LOG_TO_HTML = 1; + // Current version is $conf->global->MAIN_VERSION_LAST_UPGRADE // Version to install is DOL_VERSION $dolibarrlastupgradeversionarray=preg_split('/[\.-]/',isset($conf->global->MAIN_VERSION_LAST_UPGRADE) ? $conf->global->MAIN_VERSION_LAST_UPGRADE : (isset($conf->global->MAIN_VERSION_LAST_INSTALL)?$conf->global->MAIN_VERSION_LAST_INSTALL:'')); diff --git a/htdocs/install/mysql/migration/5.0.0-6.0.0.sql b/htdocs/install/mysql/migration/5.0.0-6.0.0.sql index 1e0388cff94..56659ea714c 100644 --- a/htdocs/install/mysql/migration/5.0.0-6.0.0.sql +++ b/htdocs/install/mysql/migration/5.0.0-6.0.0.sql @@ -242,7 +242,7 @@ UPDATE llx_bank_account SET accountancy_journal = 'OD' WHERE accountancy_journal ALTER TABLE llx_bank_account ADD COLUMN fk_accountancy_journal integer; ALTER TABLE llx_bank_account ADD INDEX idx_fk_accountancy_journal (fk_accountancy_journal); -UPDATE llx_bank_account AS ba SET fk_accountancy_journal = (SELECT rowid FROM llx_accounting_journal AS aj WHERE ba.accountancy_journal = aj.code) WHERE accountancy_journal NOT IN ('1', '2', '3', '4', '5', '6', '5', '8', '9', '10', '11', '12', '13', '14', '15'); +UPDATE llx_bank_account AS ba SET fk_accountancy_journal = (SELECT rowid FROM llx_accounting_journal AS aj WHERE ba.accountancy_journal = aj.code AND aj.entity = ba.entity) WHERE accountancy_journal NOT IN ('1', '2', '3', '4', '5', '6', '5', '8', '9', '10', '11', '12', '13', '14', '15'); ALTER TABLE llx_bank_account ADD CONSTRAINT fk_bank_account_accountancy_journal FOREIGN KEY (fk_accountancy_journal) REFERENCES llx_accounting_journal (rowid); --Update general ledger for FEC format & harmonization diff --git a/htdocs/install/mysql/migration/6.0.0-7.0.0.sql b/htdocs/install/mysql/migration/6.0.0-7.0.0.sql index 4ffe73ac6ea..e745ad20847 100644 --- a/htdocs/install/mysql/migration/6.0.0-7.0.0.sql +++ b/htdocs/install/mysql/migration/6.0.0-7.0.0.sql @@ -321,6 +321,8 @@ CREATE TABLE IF NOT EXISTS llx_expensereport_ik ( active integer DEFAULT 1 )ENGINE=innodb; +ALTER TABLE llx_expensereport_ik ADD COLUMN ikoffset double DEFAULT 0 NOT NULL; + CREATE TABLE IF NOT EXISTS llx_c_exp_tax_cat ( rowid integer AUTO_INCREMENT PRIMARY KEY, label varchar(48) NOT NULL, @@ -435,7 +437,7 @@ CREATE TABLE llx_expensereport_rules ( fk_usergroup integer DEFAULT NULL, fk_c_type_fees integer NOT NULL, code_expense_rules_type varchar(50) NOT NULL, - is_for_all tinyint DEFAULT '0', + is_for_all tinyint DEFAULT 0, entity integer DEFAULT 1 )ENGINE=innodb; @@ -684,3 +686,14 @@ ALTER TABLE llx_resource ADD fk_country integer DEFAULT NULL; ALTER TABLE llx_resource ADD INDEX idx_resource_fk_country (fk_country); ALTER TABLE llx_resource ADD CONSTRAINT fk_resource_fk_country FOREIGN KEY (fk_country) REFERENCES llx_c_country (rowid); + +create table llx_facture_rec_extrafields +( + rowid integer AUTO_INCREMENT PRIMARY KEY, + tms timestamp, + fk_object integer NOT NULL, + import_key varchar(14) -- import key +) ENGINE=innodb; + + +ALTER TABLE llx_facture_rec_extrafields ADD INDEX idx_facture_rec_extrafields (fk_object); diff --git a/htdocs/install/mysql/tables/llx_don.sql b/htdocs/install/mysql/tables/llx_don.sql index 2120f6a5b2b..a2e39f7039c 100644 --- a/htdocs/install/mysql/tables/llx_don.sql +++ b/htdocs/install/mysql/tables/llx_don.sql @@ -29,7 +29,7 @@ create table llx_don fk_statut smallint NOT NULL DEFAULT 0, -- Status of donation promise or validate datedon datetime, -- Date of the donation/promise amount double(24,8) DEFAULT 0, - fk_payment integer, + fk_payment integer, -- Id of payment mode paid smallint default 0 NOT NULL, firstname varchar(50), lastname varchar(50), diff --git a/htdocs/install/mysql/tables/llx_expensereport_rules.sql b/htdocs/install/mysql/tables/llx_expensereport_rules.sql index e6103ee8fb9..feacf572c1f 100644 --- a/htdocs/install/mysql/tables/llx_expensereport_rules.sql +++ b/htdocs/install/mysql/tables/llx_expensereport_rules.sql @@ -29,6 +29,6 @@ CREATE TABLE llx_expensereport_rules ( fk_usergroup integer DEFAULT NULL, fk_c_type_fees integer NOT NULL, code_expense_rules_type varchar(50) NOT NULL, - is_for_all tinyint DEFAULT '0', + is_for_all tinyint DEFAULT 0, entity integer DEFAULT 1 -) ENGINE=InnoDB \ No newline at end of file +) ENGINE=InnoDB; \ No newline at end of file diff --git a/htdocs/install/repair.php b/htdocs/install/repair.php index 5db07cd1412..229ae0a3c3e 100644 --- a/htdocs/install/repair.php +++ b/htdocs/install/repair.php @@ -42,10 +42,8 @@ error_reporting(0); @set_time_limit(120); error_reporting($err); -$setuplang=GETPOST("selectlang",'',3)?GETPOST("selectlang",'',3):'auto'; +$setuplang=GETPOST("selectlang",'az09',3)?GETPOST("selectlang",'az09',3):'auto'; $langs->setDefaultLang($setuplang); -$versionfrom=GETPOST("versionfrom",'',3)?GETPOST("versionfrom",'',3):(empty($argv[1])?'':$argv[1]); -$versionto=GETPOST("versionto",'',3)?GETPOST("versionto",'',3):(empty($argv[2])?'':$argv[2]); $langs->loadLangs(array("admin","install","other")); @@ -78,6 +76,7 @@ print 'Option clean_product_stock_batch (0 or \'test\' or \'confirmed\') is '.(G print 'Option set_empty_time_spent_amount (0 or \'test\' or \'confirmed\') is '.(GETPOST('set_empty_time_spent_amount','alpha')?GETPOST('set_empty_time_spent_amount','alpha'):'0').'
'."\n"; print 'Option rebuild_product_thumbs (0 or \'test\' or \'confirmed\') is '.(GETPOST('rebuild_product_thumbs','alpha')?GETPOST('rebuild_product_thumbs','alpha'):'0').'
'."\n"; print 'Option force_disable_of_modules_not_found (0 or \'test\' or \'confirmed\') is '.(GETPOST('force_disable_of_modules_not_found','alpha')?GETPOST('force_disable_of_modules_not_found','alpha'):'0').'
'."\n"; +print 'Option clean_perm_table (0 or \'test\' or \'confirmed\') is '.(GETPOST('clean_perm_table','alpha')?GETPOST('clean_perm_table','alpha'):'0').'
'."\n"; print 'Option force_utf8_on_tables, for mysql/mariadb only (0 or \'test\' or \'confirmed\') is '.(GETPOST('force_utf8_on_tables','alpha')?GETPOST('force_utf8_on_tables','alpha'):'0').'
'."\n"; print '
'; @@ -154,13 +153,16 @@ if ($ok) } $conf->setValues($db); - +// Reset forced setup after the setValues +if (defined('SYSLOG_FILE')) $conf->global->SYSLOG_FILE=constant('SYSLOG_FILE'); +$conf->global->MAIN_ENABLE_LOG_TO_HTML = 1; /* Start action here */ $oneoptionset=0; $oneoptionset=(GETPOST('standard', 'alpha') || GETPOST('restore_thirdparties_logos','alpha') || GETPOST('clean_linked_elements','alpha') || GETPOST('clean_menus','alpha') || GETPOST('clean_orphelin_dir','alpha') || GETPOST('clean_product_stock_batch','alpha') || GETPOST('set_empty_time_spent_amount','alpha') || GETPOST('rebuild_product_thumbs','alpha') + || GETPOST('clean_perm_table','alpha') || GETPOST('force_disable_of_modules_not_found','alpha') || GETPOST('force_utf8_on_tables','alpha')); if ($ok && $oneoptionset) @@ -586,8 +588,6 @@ if ($ok && GETPOST('clean_menus','alpha')) // clean_orphelin_dir: Run purge of directory if ($ok && GETPOST('clean_orphelin_dir','alpha')) { - $conf->setValues($db); - $listmodulepart=array('company','invoice','invoice_supplier','propal','order','order_supplier','contract','tax'); foreach ($listmodulepart as $modulepart) { @@ -904,7 +904,7 @@ if ($ok && GETPOST('set_empty_time_spent_amount','alpha')) // clean_old_module_entries: Clean data into const when files of module were removed without being if ($ok && GETPOST('force_disable_of_modules_not_found','alpha')) { - print ''; + print ''; $arraylistofkey=array('hooks','js','css'); @@ -1020,6 +1020,56 @@ if ($ok && GETPOST('force_disable_of_modules_not_found','alpha')) } +// clean_old_module_entries: Clean data into const when files of module were removed without being +if ($ok && GETPOST('clean_perm_table','alpha')) +{ + print ''; + + $listofmods=''; + foreach($conf->modules as $key => $val) + { + $listofmods.=($listofmods?',':'')."'".$val."'"; + } + $sql = 'SELECT id, libelle, module from '.MAIN_DB_PREFIX.'rights_def WHERE module not in ('.$listofmods.') AND id > 100000'; + $resql = $db->query($sql); + if ($resql) + { + $num = $db->num_rows($resql); + if ($num) + { + $i = 0; + while ($i < $num) + { + $obj=$db->fetch_object($resql); + if ($obj->id > 0) + { + print ''; + } + $i++; + } + } + else + { + print ''; + } + } + else + { + dol_print_error($db); + } +} + // clean_linked_elements: Check and clean linked elements diff --git a/htdocs/install/step1.php b/htdocs/install/step1.php index 6b662e4306d..838ef34afa3 100644 --- a/htdocs/install/step1.php +++ b/htdocs/install/step1.php @@ -491,7 +491,7 @@ if (! $error && $db->connected && $action == "set") 'thirdparties' => 'thirdparty', 'usergroups' => 'usergroups', 'users' => 'user', - 'usergroups' => 'usergroups', + 'usergroups' => 'usergroups', ); foreach($docs as $cursordir => $cursorfile) { diff --git a/htdocs/install/step5.php b/htdocs/install/step5.php index b7d320aab59..df8ec9812c1 100644 --- a/htdocs/install/step5.php +++ b/htdocs/install/step5.php @@ -165,6 +165,9 @@ if ($action == "set" || empty($action) || preg_match('/upgrade/i',$action)) if ($db->connected) { $conf->setValues($db); + // Reset forced setup after the setValues + if (defined('SYSLOG_FILE')) $conf->global->SYSLOG_FILE=constant('SYSLOG_FILE'); + $conf->global->MAIN_ENABLE_LOG_TO_HTML = 1; // Create admin user include_once DOL_DOCUMENT_ROOT .'/user/class/user.class.php'; @@ -295,6 +298,9 @@ if ($action == "set" || empty($action) || preg_match('/upgrade/i',$action)) if ($db->connected) { $conf->setValues($db); + // Reset forced setup after the setValues + if (defined('SYSLOG_FILE')) $conf->global->SYSLOG_FILE=constant('SYSLOG_FILE'); + $conf->global->MAIN_ENABLE_LOG_TO_HTML = 1; // Define if we need to update the MAIN_VERSION_LAST_UPGRADE value in database $tagdatabase=false; diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php index 430c6f46c94..560bf3d2593 100644 --- a/htdocs/install/upgrade2.php +++ b/htdocs/install/upgrade2.php @@ -163,7 +163,13 @@ if (! GETPOST('action','aZ09') || preg_match('/upgrade/i',GETPOST('action','aZ09 $conf->db->dolibarr_main_db_cryptkey = $dolibarr_main_db_cryptkey; // Chargement config - if (! $error) $conf->setValues($db); + if (! $error) + { + $conf->setValues($db); + // Reset forced setup after the setValues + if (defined('SYSLOG_FILE')) $conf->global->SYSLOG_FILE=constant('SYSLOG_FILE'); + $conf->global->MAIN_ENABLE_LOG_TO_HTML = 1; + } /*************************************************************************************** @@ -371,7 +377,20 @@ if (! GETPOST('action','aZ09') || preg_match('/upgrade/i',GETPOST('action','aZ09 $beforeversionarray=explode('.','6.0.9'); if (versioncompare($versiontoarray,$afterversionarray) >= 0 && versioncompare($versiontoarray,$beforeversionarray) <= 0) { - // No particular code + if (! empty($conf->multicompany->enabled)) + { + global $multicompany_transverse_mode; + + // Only if the transverse mode is not used + if (empty($multicompany_transverse_mode)) + { + // Migrate to add entity value into llx_user_rights + migrate_user_rights_entity($db, $langs, $conf); + + // Migrate to add entity value into llx_usergroup_rights + migrate_usergroup_rights_entity($db, $langs, $conf); + } + } } // Scripts for last version @@ -3940,7 +3959,7 @@ function migrate_reset_blocked_log($db,$langs,$conf) else { // Add set line - $object=new stdClass; + $object=new stdClass(); $object->id = 1; $object->element = 'module'; $object->ref = 'systemevent'; @@ -3958,7 +3977,7 @@ function migrate_reset_blocked_log($db,$langs,$conf) } else { - print ' - '.$langs->trans('AlreadyInV7'); + print ' - '.$langs->trans('AlreadyInV7').'
'; } } else @@ -4182,6 +4201,158 @@ function migrate_remise_except_entity($db,$langs,$conf) print ''; } +/** + * Migrate to add entity value into llx_user_rights + * + * @param DoliDB $db Database handler + * @param Translate $langs Object langs + * @param Conf $conf Object conf + * @return void + */ +function migrate_user_rights_entity($db,$langs,$conf) +{ + print ''; +} + +/** + * Migrate to add entity value into llx_usergroup_rights + * + * @param DoliDB $db Database handler + * @param Translate $langs Object langs + * @param Conf $conf Object conf + * @return void + */ +function migrate_usergroup_rights_entity($db,$langs,$conf) +{ + print ''; +} + /** * Migration directory * diff --git a/htdocs/langs/en_AU/main.lang b/htdocs/langs/en_AU/main.lang index 5edc39f2f32..423a2e5e379 100644 --- a/htdocs/langs/en_AU/main.lang +++ b/htdocs/langs/en_AU/main.lang @@ -4,19 +4,19 @@ FONTFORPDF=helvetica FONTSIZEFORPDF=10 SeparatorDecimal=. SeparatorThousand=, -FormatDateShort=%m/%d/%Y -FormatDateShortInput=%m/%d/%Y -FormatDateShortJava=MM/dd/yyyy -FormatDateShortJavaInput=MM/dd/yyyy -FormatDateShortJQuery=mm/dd/yy -FormatDateShortJQueryInput=mm/dd/yy +FormatDateShort=%d/%m/%Y +FormatDateShortInput=%d/%m/%Y +FormatDateShortJava=dd/MM/yyyy +FormatDateShortJavaInput=dd/MM/yyyy +FormatDateShortJQuery=dd/mm/yy +FormatDateShortJQueryInput=dd/mm/yy FormatHourShortJQuery=HH:MI FormatHourShort=%I:%M %p FormatHourShortDuration=%H:%M FormatDateTextShort=%b %d, %Y FormatDateText=%B %d, %Y -FormatDateHourShort=%m/%d/%Y %I:%M %p -FormatDateHourSecShort=%m/%d/%Y %I:%M:%S %p +FormatDateHourShort=%d/%m/%Y %I:%M %p +FormatDateHourSecShort=%d/%m/%Y %I:%M:%S %p FormatDateHourTextShort=%b %d, %Y, %I:%M %p FormatDateHourText=%B %d, %Y, %I:%M %p ErrorNoVATRateDefinedForSellerCountry=Error, no GST rates defined for country '%s'. diff --git a/htdocs/langs/en_US/accountancy.lang b/htdocs/langs/en_US/accountancy.lang index c23e13a6bff..28a77095084 100644 --- a/htdocs/langs/en_US/accountancy.lang +++ b/htdocs/langs/en_US/accountancy.lang @@ -220,7 +220,7 @@ ErrorAccountancyCodeIsAlreadyUse=Error, you cannot delete this accounting accoun MvtNotCorrectlyBalanced=Movement not correctly balanced. Credit = %s. Debit = %s FicheVentilation=Binding card GeneralLedgerIsWritten=Transactions are written in the Ledger -GeneralLedgerSomeRecordWasNotRecorded=Some of the transactions could not be dispatched. If there is no other error message, this is probably because they were already dispatched. +GeneralLedgerSomeRecordWasNotRecorded=Some of the transactions could not be journalized. If there is no other error message, this is probably because they were already journalized. NoNewRecordSaved=No more record to journalize ListOfProductsWithoutAccountingAccount=List of products not bound to any accounting account ChangeBinding=Change the binding @@ -284,6 +284,8 @@ Formula=Formula ## Error SomeMandatoryStepsOfSetupWereNotDone=Some mandatory steps of setup was not done, please complete them ErrorNoAccountingCategoryForThisCountry=No accounting account group available for country %s (See Home - Setup - Dictionaries) +ErrorInvoiceContainsLinesNotYetBounded=You try to journalize some lines of the invoice %s, but some other lines are not yet bounded to accounting account. Journalization of all invoice lines for this invoice are refused. +ErrorInvoiceContainsLinesNotYetBoundedShort=Some lines on invoice are not bound to accounting account. ExportNotSupported=The export format setuped is not supported into this page BookeppingLineAlreayExists=Lines already existing into bookeeping NoJournalDefined=No journal defined diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index c7b835806c8..29673edf51c 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -341,7 +341,7 @@ ErrorCantUseRazIfNoYearInMask=Error, can't use option @ to reset counter each ye ErrorCantUseRazInStartedYearIfNoYearMonthInMask=Error, can't use option @ if sequence {yy}{mm} or {yyyy}{mm} is not in mask. UMask=UMask parameter for new files on Unix/Linux/BSD/Mac file system. UMaskExplanation=This parameter allow you to define permissions set by default on files created by Dolibarr on server (during upload for example).
It must be the octal value (for example, 0666 means read and write for everyone).
This parameter is useless on a Windows server. -SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and their organisation +SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and their organization UseACacheDelay= Delay for caching export response in seconds (0 or empty for no cache) DisableLinkToHelpCenter=Hide link "Need help or support" on login page DisableLinkToHelp=Hide link to online help "%s" @@ -448,7 +448,8 @@ ModuleCompanyCodePanicum=Return an empty accounting code. ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code. Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).
Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required. UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than... -WarningPHPMail=WARNING: Some email providers (like Yahoo) does not allow you to send an email from another server than the Yahoo server if the email address used as a sender is your Yahoo email (like myemail@yahoo.com, myemail@yahoo.fr, ...). Your current setup use the server of the application to send email, so some recipients (the one compatible with the restrictive DMARC protocol), will ask Yahoo if they can accept your email and Yahoo will respond "no" because the server is not a server owned by Yahoo, so few of your sent Emails may not be accepted.
If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account). +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be car also to your email provider sending quota).
If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account). +WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of your ERP CRM application: %s. ClickToShowDescription=Click to show description DependsOn=This module need the module(s) RequiredBy=This module is required by module(s) @@ -910,8 +911,8 @@ TypeOfRevenueStamp=Type of revenue stamp VATManagement=VAT Management VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:
If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.
If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule.
If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.
If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold. End of rule.
If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.
In any othe case the proposed default is VAT=0. End of rule. VATIsNotUsedDesc=By default the proposed VAT is 0 which can be used for cases like associations, individuals ou small companies. -VATIsUsedExampleFR=In France, it means companies or organisations having a real fiscal system (Simplified real or normal real). A system in which VAT is declared. -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organisations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration. This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices. +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real). A system in which VAT is declared. +VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration. This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices. ##### Local Taxes ##### LTRate=Rate LocalTax1IsNotUsed=Do not use second tax @@ -976,7 +977,7 @@ Host=Server DriverType=Driver type SummarySystem=System information summary SummaryConst=List of all Dolibarr setup parameters -MenuCompanySetup=Company/Organisation +MenuCompanySetup=Company/Organization DefaultMenuManager= Standard menu manager DefaultMenuSmartphoneManager=Smartphone menu manager Skin=Skin theme @@ -992,8 +993,8 @@ PermanentLeftSearchForm=Permanent search form on left menu DefaultLanguage=Default language to use (language code) EnableMultilangInterface=Enable multilingual interface EnableShowLogo=Show logo on left menu -CompanyInfo=Company/organisation information -CompanyIds=Company/organisation identities +CompanyInfo=Company/organization information +CompanyIds=Company/organization identities CompanyName=Name CompanyAddress=Address CompanyZip=Zip @@ -1549,7 +1550,7 @@ SupposedToBeInvoiceDate=Invoice date used Buy=Buy Sell=Sell InvoiceDateUsed=Invoice date used -YourCompanyDoesNotUseVAT=Your company has been defined to not use VAT (Home - Setup - Company/Organisation), so there is no VAT options to setup. +YourCompanyDoesNotUseVAT=Your company has been defined to not use VAT (Home - Setup - Company/Organization), so there is no VAT options to setup. AccountancyCode=Accounting Code AccountancyCodeSell=Sale account. code AccountancyCodeBuy=Purchase account. code @@ -1763,9 +1764,11 @@ MAIN_PDF_MARGIN_LEFT=Left margin on PDF MAIN_PDF_MARGIN_RIGHT=Right margin on PDF MAIN_PDF_MARGIN_TOP=Top margin on PDF MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF +SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2') ##### Resource #### ResourceSetup=Configuration du module Resource UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list). -DisabledResourceLinkUser=Disabled resource link to user -DisabledResourceLinkContact=Disabled resource link to contact +DisabledResourceLinkUser=Disable feature to link a resource to users +DisabledResourceLinkContact=Disable feature to link a resource to contacts ConfirmUnactivation=Confirm module reset diff --git a/htdocs/langs/en_US/bills.lang b/htdocs/langs/en_US/bills.lang index 5ed49679e04..668090129ff 100644 --- a/htdocs/langs/en_US/bills.lang +++ b/htdocs/langs/en_US/bills.lang @@ -119,7 +119,7 @@ StatusOfGeneratedInvoices=Status of generated invoices BillStatusDraft=Draft (needs to be validated) BillStatusPaid=Paid BillStatusPaidBackOrConverted=Credit note refund or converted into discount -BillStatusConverted=Paid (ready for final invoice) +BillStatusConverted=Paid (ready for consumption in final invoice) BillStatusCanceled=Abandoned BillStatusValidated=Validated (needs to be paid) BillStatusStarted=Started diff --git a/htdocs/langs/en_US/companies.lang b/htdocs/langs/en_US/companies.lang index 353b8ca0c47..defecf8ed67 100644 --- a/htdocs/langs/en_US/companies.lang +++ b/htdocs/langs/en_US/companies.lang @@ -74,8 +74,8 @@ Town=City Web=Web Poste= Position DefaultLang=Language by default -VATIsUsed=VAT is used -VATIsNotUsed=VAT is not used +VATIsUsed=Sales tax is used +VATIsNotUsed=Sales tax is not used CopyAddressFromSoc=Fill address with third party address ThirdpartyNotCustomerNotSupplierSoNoRef=Thirdparty neither customer nor supplier, no available refering objects PaymentBankAccount=Payment bank account @@ -238,7 +238,7 @@ ProfId3TN=Prof Id 3 (Douane code) ProfId4TN=Prof Id 4 (BAN) ProfId5TN=- ProfId6TN=- -ProfId1US=Prof Id +ProfId1US=Prof Id (FEIN) ProfId2US=- ProfId3US=- ProfId4US=- @@ -254,8 +254,8 @@ ProfId1DZ=RC ProfId2DZ=Art. ProfId3DZ=NIF ProfId4DZ=NIS -VATIntra=VAT number -VATIntraShort=VAT number +VATIntra=Sales tax ID +VATIntraShort=Tax ID VATIntraSyntaxIsValid=Syntax is valid ProspectCustomer=Prospect / Customer Prospect=Prospect diff --git a/htdocs/langs/en_US/ecm.lang b/htdocs/langs/en_US/ecm.lang index 95318155813..fe5600004ed 100644 --- a/htdocs/langs/en_US/ecm.lang +++ b/htdocs/langs/en_US/ecm.lang @@ -41,7 +41,7 @@ ConfirmDeleteSection=Can you confirm you want to delete the directory %s? ECMDirectoryForFiles=Relative directory for files CannotRemoveDirectoryContainsFiles=Removed not possible because it contains some files ECMFileManager=File manager -ECMSelectASection=Select a directory on left tree... +ECMSelectASection=Select a directory in the tree... DirNotSynchronizedSyncFirst=This directory seems to be created or modified outside ECM module. You must click on "Resync" button first to synchronize disk and database to get content of this directory. ReSyncListOfDir=Resync list of directories HashOfFileContent=Hash of file content diff --git a/htdocs/langs/en_US/errors.lang b/htdocs/langs/en_US/errors.lang index e51bdfc1be0..f87a30ecfb2 100644 --- a/htdocs/langs/en_US/errors.lang +++ b/htdocs/langs/en_US/errors.lang @@ -73,7 +73,7 @@ ErrorLDAPSetupNotComplete=Dolibarr-LDAP matching is not complete. ErrorLDAPMakeManualTest=A .ldif file has been generated in directory %s. Try to load it manually from command line to have more information on errors. ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "statut not started" if field "done by" is also filled. ErrorRefAlreadyExists=Ref used for creation already exists. -ErrorPleaseTypeBankTransactionReportName=Please type bank statement name where entry is reported (Format YYYYMM or YYYYMMDD) +ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD) ErrorRecordHasChildren=Failed to delete record since it has some childs. ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into other object. @@ -127,7 +127,7 @@ ErrorFailedToAddToMailmanList=Failed to add record %s to Mailman list %s or SPIP ErrorFailedToRemoveToMailmanList=Failed to remove record %s to Mailman list %s or SPIP base ErrorNewValueCantMatchOldValue=New value can't be equal to old one ErrorFailedToValidatePasswordReset=Failed to reinit password. May be the reinit was already done (this link can be used only one time). If not, try to restart the reinit process. -ErrorToConnectToMysqlCheckInstance=Connect to database fails. Check Mysql server is running (in most cases, you can launch it from command line with 'sudo /etc/init.d/mysql start'). +ErrorToConnectToMysqlCheckInstance=Connect to database fails. Check database server is running (for example, with mysql/mariadb, you can launch it from command line with 'sudo service mysql start'). ErrorFailedToAddContact=Failed to add contact ErrorDateMustBeBeforeToday=The date cannot be greater than today ErrorPaymentModeDefinedToWithoutSetup=A payment mode was set to type %s but setup of module Invoice was not completed to define information to show for this payment mode. diff --git a/htdocs/langs/en_US/install.lang b/htdocs/langs/en_US/install.lang index 87ef7d79b13..27a2edd1fda 100644 --- a/htdocs/langs/en_US/install.lang +++ b/htdocs/langs/en_US/install.lang @@ -196,6 +196,8 @@ MigrationEvents=Migration of events to add event owner into assignement table MigrationEventsContact=Migration of events to add event contact into assignement table MigrationRemiseEntity=Update entity field value of llx_societe_remise MigrationRemiseExceptEntity=Update entity field value of llx_societe_remise_except +MigrationUserRightsEntity=Update entity field value of llx_user_rights +MigrationUserGroupRightsEntity=Update entity field value of llx_usergroup_rights MigrationReloadModule=Reload module %s MigrationResetBlockedLog=Reset module BlockedLog for v7 algorithm ShowNotAvailableOptions=Show not available options diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index 28ddd9d56a8..19c7967e43a 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -44,7 +44,7 @@ ErrorConstantNotDefined=Parameter %s not defined ErrorUnknown=Unknown error ErrorSQL=SQL Error ErrorLogoFileNotFound=Logo file '%s' was not found -ErrorGoToGlobalSetup=Go to 'Company/Organisation' setup to fix this +ErrorGoToGlobalSetup=Go to 'Company/Organization' setup to fix this ErrorGoToModuleSetup=Go to Module setup to fix this ErrorFailedToSendMail=Failed to send mail (sender=%s, receiver=%s) ErrorFileNotUploaded=File was not uploaded. Check that size does not exceed maximum allowed, that free space is available on disk and that there is not already a file with same name in this directory. @@ -421,7 +421,7 @@ ActionRunningShort=In progress ActionDoneShort=Finished ActionUncomplete=Uncomplete LatestLinkedEvents=Latest %s linked events -CompanyFoundation=Company/Organisation +CompanyFoundation=Company/Organization ContactsForCompany=Contacts for this third party ContactsAddressesForCompany=Contacts/addresses for this third party AddressesForCompany=Addresses for this third party @@ -810,6 +810,7 @@ ConfirmMassDeletion=Bulk delete confirmation ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ? RelatedObjects=Related Objects ClassifyBilled=Classify billed +ClassifyUnbilled=Classify unbilled Progress=Progress ClickHere=Click here FrontOffice=Front office @@ -853,6 +854,7 @@ FileNotShared=File not shared to exernal public Project=Project Projects=Projects Rights=Permissions +LineNb=Line nb # Week day Monday=Monday Tuesday=Tuesday diff --git a/htdocs/langs/en_US/trips.lang b/htdocs/langs/en_US/trips.lang index a5ab097aa0e..2b254bf91e7 100644 --- a/htdocs/langs/en_US/trips.lang +++ b/htdocs/langs/en_US/trips.lang @@ -12,7 +12,7 @@ ShowTrip=Show expense report NewTrip=New expense report LastExpenseReports=Latest %s expense reports AllExpenseReports=All expense reports -CompanyVisited=Company/organisation visited +CompanyVisited=Company/organization visited FeesKilometersOrAmout=Amount or kilometers DeleteTrip=Delete expense report ConfirmDeleteTrip=Are you sure you want to delete this expense report? diff --git a/htdocs/langs/en_US/users.lang b/htdocs/langs/en_US/users.lang index 3c1a8644bf0..b34be6b4421 100644 --- a/htdocs/langs/en_US/users.lang +++ b/htdocs/langs/en_US/users.lang @@ -67,8 +67,8 @@ InternalUser=Internal user ExportDataset_user_1=Dolibarr's users and properties DomainUser=Domain user %s Reactivate=Reactivate -CreateInternalUserDesc=This form allows you to create an user internal to your company/organisation. To create an external user (customer, supplier, ...), use the button 'Create Dolibarr user' from third party's contact card. -InternalExternalDesc=An internal user is a user that is part of your company/organisation.
An external user is a customer, supplier or other.

In both cases, permissions defines rights on Dolibarr, also external user can have a different menu manager than internal user (See Home - Setup - Display) +CreateInternalUserDesc=This form allows you to create an user internal to your company/organization. To create an external user (customer, supplier, ...), use the button 'Create Dolibarr user' from third party's contact card. +InternalExternalDesc=An internal user is a user that is part of your company/organization.
An external user is a customer, supplier or other.

In both cases, permissions defines rights on Dolibarr, also external user can have a different menu manager than internal user (See Home - Setup - Display) PermissionInheritedFromAGroup=Permission granted because inherited from one of a user's group. Inherited=Inherited UserWillBeInternalUser=Created user will be an internal user (because not linked to a particular third party) diff --git a/htdocs/langs/en_US/website.lang b/htdocs/langs/en_US/website.lang index a329661a056..dd90533ba28 100644 --- a/htdocs/langs/en_US/website.lang +++ b/htdocs/langs/en_US/website.lang @@ -55,7 +55,7 @@ OrEnterPageInfoManually=Or create empty page from scratch... FetchAndCreate=Fetch and Create ExportSite=Export site IDOfPage=Id of page -Banner=Bandeau +Banner=Banner BlogPost=Blog post WebsiteAccount=Web site account WebsiteAccounts=Web site accounts @@ -64,3 +64,6 @@ BackToListOfThirdParty=Back to list for Third Party DisableSiteFirst=Disable website first MyContainerTitle=My web site title AnotherContainer=Another container +YouMustDefineTheHomePage=You must first define the default Home page +OnlyEditionOfSourceForGrabbedContentFuture=Note: only edition of HTML source will be possible when a page content is intiliazed by grabbing it from an external page (WYSIWYG editor will not be available) +OnlyEditionOfSourceForGrabbedContent=Only edition of HTML source is possible when content was grabber from an external site \ No newline at end of file diff --git a/htdocs/langs/es_EC/admin.lang b/htdocs/langs/es_EC/admin.lang index 3224e309358..aa4ce9ecbfc 100644 --- a/htdocs/langs/es_EC/admin.lang +++ b/htdocs/langs/es_EC/admin.lang @@ -199,7 +199,7 @@ MAIN_MAIL_SMTP_SERVER=SMTP/Host SMTPS (Por defecto en php.ini: %s) MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS puerto (No está definido en PHP en sistemas Unix) MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (No está definido en PHP en sistemas Unix) MAIN_MAIL_EMAIL_FROM=Dirección electróica del remitente para correos electrónicos automáticos (por defecto en php.ini: %s) -MAIN_MAIL_ERRORS_TO=Remitente de correo electrónico se utilizara para devolver los correos electrónicos enviados con errores +MAIN_MAIL_ERRORS_TO=Correo electrónico utilizado como campo 'Errores a' en los correos electrónicos enviados MAIN_MAIL_AUTOCOPY_TO=Enviar sistemáticamente una copia carbon oculta (CCO) de todos los correos enviados a MAIN_DISABLE_ALL_MAILS=Desactivar todos los envíos de correo electrónico (con fines de prueba o demos) MAIN_MAIL_SENDMODE=Método a utilizar para enviar mensajes de correo electrónico @@ -323,7 +323,7 @@ ExtrafieldParamHelpcheckbox=La lista de valores debe ser líneas con la clave de ExtrafieldParamHelpradio=La lista de valores debe ser líneas con la clave de formato, valor (donde la clave no puede ser '0')

por ejemplo:
1,valor1
2,valor2
3,valor3
... ExtrafieldParamHelpsellist=La lista de valores viene de una tabla
Sintaxis : table_name:label_field:id_field::filter
Ejemplo : c_typent:libelle:id::filtro

- idfilter es necesariamente una llave int primario
- el filtro puede ser una prueba simple (ej activo=1) para mostrar sólo el valor activo
También puede usar $ID$ en el filtro donde es el id actual del objeto actual
Para hacer un SELECT en filtro use $SEL$
si desea filtrar en campos extra utilizar la sintaxis extra.fieldcode=… (donde código de campo es el código de extrafield)

Para que la lista dependa de otra lista de atributos complementarios:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

Para que la lista dependa en otra lista:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=La lista de valores proviene de un tabla
Syntax: nombre_tabla:label_field:id_field::filter
Example : c_typent:libelle:id::filter

filter puede ser una prueba simple (por ejemplo, activa=1) para mostrar sólo el valor activo
También puede usar $ID$ en filtro con el id actual del objeto actual
Para hacer un SELECT en el filtro use $SEL$
si quiere filtrar en extrafields use sintaxis extra.fieldcode=...(donde código de campo es el código de extrafield)

Para tener la lista dependiendo de otra lista de atributos complementarios:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

Para que la lista dependa de otra lista:
c_typent:libelle:id:parent_list_code|parent_column:filter -ExtrafieldParamHelplink=Los parámetros deben ser ObjectName:Classpath
Syntaxis : ObjectName:Classpath
Ejemplo : Societe:societe/class/societe.class.php +ExtrafieldParamHelplink=Los parámetros deben ser ObjectName: Classpath
Syntax: ObjectName: Classpath
Examples:
Societe: societe/class/societe.class.php
Contacto: contact/class/contact.class.php LibraryToBuildPDF=Biblioteca utilizado para la generación de PDF WarningUsingFPDF=Advertencia: Su conf.php contiene una directiva dolibarr_pdf_force_fpdf=1. Esto significa que utiliza la biblioteca FPDF para generar archivos PDF. Esta biblioteca es antigua y no soporta muchas características (Unicode, transparencia de imagen, cyrillic, árabe y idiomas asiáticos, ...), por lo que puede experimentar errores durante la generación de PDF.
Para resolver esto y tener un soporte completo de generación de PDF, por favor descargue TCPDF library, luego comenta o elimina la línea $dolibarr_pdf_force_fpdf=1, and Agregar en su lugar $dolibarr_lib_TCPDF_PATH='path_to_TCPDF_dir' LocalTaxDesc=Algunos países aplican 2 o 3 impuestos en cada línea de factura. Si este es el caso, elija el tipo de segundo y tercer impuesto y su tasa. El tipo posible es:
1 : el impuesto local se aplica sobre los productos y servicios sin IVA (impuesto local se calcula sobre la cantidad sin impuestos)
2 : El impuesto local se aplica en los productos y los servicios incluyendo el IVA (el impuesto local se calcula sobre la cantidad + impuesto principal)
3 : El impuesto local se aplica en los productos sin IVA (el impuesto local se calcula sobre la cantidad sin impuestos)
4 : El impuesto local se aplica a los productos, incluido el IVA (el impuesto local se calcula sobre la cantidad + impuesto principal)
5 : Se aplica el impuesto local sobre los servicios sin IVA (el impuesto local se calcula sobre la cantidad sin impuestos)
6 : Se aplican impuestos locales sobre los servicios, incluido el IVA (el impuesto local se calcula sobre el importe + impuestos) @@ -381,7 +381,6 @@ Module25Desc=Administración de pedidos de clientes Module30Name=Facturas Module30Desc=Gestión de facturas y notas de crédito para clientes. Gestión de facturas para proveedores Module40Desc=Administración de suministros y compras (órdenes y facturas) -Module42Name=Registros Module42Desc=Instalaciones de registro (archivo, syslog,...). Dichos registros son para propósitos técnicos/depuración. Module49Desc=Administración del editor Module50Desc=Administración de producto @@ -447,8 +446,7 @@ Module2300Name=Trabajos programados Module2300Desc=Gestión de trabajos programados (alias cron o chrono table) Module2400Name=Eventos / Agenda Module2400Desc=Seguir los eventos realizados y próximos. Permita que la aplicación registre eventos automáticos para propósitos de seguimiento o registre eventos manuales o cita. -Module2500Name=Administración de contenidos electrónicos -Module2500Desc=Guardar y compartir documentos +Module2500Desc=Sistema de gestión de documentos / gestión electrónica de contenidos. Organización automática de sus documentos generados o almacenados. Compártelos cuando lo necesites. Module2600Name=API / Servicios Web (servidor SOAP) Module2600Desc=Habilitar el servidor SOAP de Dolibarr que proporciona servicios API Module2610Name=API / Servicios Web (servidor REST) @@ -458,7 +456,7 @@ Module2660Desc=Habilitar el cliente de servicios web de Dolibarr (Puede ser util Module2700Desc=Utilice el servicio Gravatar en línea (www.gravatar.com) para mostrar la foto de los usuarios/miembros (que se encuentran con sus correos electrónicos). Necesita un acceso a Internet Module2900Desc=Capacidades de conversiones GeoIP Maxmind Module3100Desc=Agregar un botón de Skype a usuarios / cliente / proveedor / contactos / tarjetas de miembros -Module3200Desc=Active el registro de algunos eventos empresariales en un registro no reversible. Los eventos se archivan en tiempo real. El registro es una tabla de sucesos encadenados que se pueden leer y exportar. Este módulo puede ser obligatorio para algunos países. +Module3200Desc=Active el registro de algunos eventos comerciales en un registro inalterable. Los eventos se archivan en tiempo real. El registro es una tabla de eventos encadenados que solo se puede leer y exportar. Este módulo puede ser obligatorio para algunos países. Module4000Desc=Administración de recursos humanos (administración del departamento, los contratos y los sentimientos de los empleados) Module5000Desc=Permite gestionar múltiples empresas Module6000Name=Flujo de Trabajo @@ -467,7 +465,6 @@ Module10000Name=Sitios Web Module10000Desc=Cree sitios web públicos con un editor WYSIWYG. Simplemente configure su servidor web (Apache, Nginx, ...) para que apunte al directorio dedicado de Dolibarr para tenerlo en línea en Internet con su propio nombre de dominio. Module20000Name=Administración de solicitudes de permisos Module20000Desc=Declare y siga las solicitudes de los empleados -Module39000Name=Lote de producto Module39000Desc=Administración de lotes o numeros de series, fechas de caducidad y venta de los productos Module50000Name=Paybox Module50000Desc=Módulo para ofrecer una página de pago en línea que acepta pagos con tarjeta de crédito/débito a través de PayBox. Esto se puede usar para permitir que sus clientes realicen pagos gratuitos o para un pago en un objeto Dolibarr en particular (factura, orden, ...) @@ -651,6 +648,7 @@ Permission1202=Crear / Modificar una exportación Permission1231=Leer facturas de proveedores Permission1232=Crear / modificar facturas de proveedores Permission1235=Enviar facturas de proveedor por correo electrónico +Permission1236=Exportar facturas de proveedores, atributos y pagos Permission1237=Exportar órdenes de proveedores y sus detalles Permission1251=Ejecutar importaciones masivas de datos externos en la base de datos (carga de datos) Permission1321=Exportar facturas, atributos y pagos de clientes @@ -698,6 +696,7 @@ DictionarySendingMethods=Métodos de envío DictionaryStaff=Personal DictionaryAvailability=Retraso en la entrega DictionarySource=Origen de las propuestas / pedidos +DictionaryAccountancyCategory=Grupos personalizados para informes DictionaryAccountancysystem=Modelos para el plan de cuentas DictionaryAccountancyJournal=Diarios / libros de contabilidad DictionaryEMailTemplates=Plantillas de correo electrónico @@ -864,11 +863,15 @@ MAIN_PROXY_PASS=Contraseña para utilizar el servidor proxy DefineHereComplementaryAttributes=Defina aquí todos los atributos, que ya no están disponibles de forma predeterminada y que desea que sean compatible con %s. ExtraFields=Atributos complementarios ExtraFieldsLines=Atributos complementarios (líneas) +ExtraFieldsLinesRec=Atributos complementarios (plantillas de líneas de facturas) +ExtraFieldsSupplierOrdersLines=Atributos complementarios (líneas de pedido) +ExtraFieldsSupplierInvoicesLines=Atributos complementarios (líneas de factura) ExtraFieldsThirdParties=Atributos complementarios (cliente/proveedor) ExtraFieldsContacts=Atributos complementarios (contacto/dirección) ExtraFieldsMember=Atributos complementarios (miembro) ExtraFieldsMemberType=Atributos complementarios (tipo de miembro) ExtraFieldsCustomerInvoices=Atributos complementarios (facturas) +ExtraFieldsCustomerInvoicesRec=Atributos complementarios (plantillas de facturas) ExtraFieldsSupplierOrders=Atributos complementarios (pedidos) ExtraFieldsSupplierInvoices=Atributos complementarios (facturas) ExtraFieldsProject=Atributos complementarios (proyectos) @@ -1361,11 +1364,19 @@ ToGenerateCodeDefineAutomaticRuleFirst=Para poder generar códigos automáticame SeeSubstitutionVars=Ver * nota para la lista de posibles variables de sustitución SeeChangeLog=Consulte el archivo ChangeLog (solo en inglés) AllPublishers=Todos los editores +AddRemoveTabs=Añadir o eliminar pestañas +AddDataTables=Añadir tablas de objetos AddDictionaries=Agregar tablas de diccionarios +AddData=Agregar objetos o datos de diccionarios AddBoxes=Añadir widgets AddSheduledJobs=Añadir trabajos programados AddHooks=Añadir ganchos AddTriggers=Añadir disparadores +AddMenus=Añadir menús +AddPermissions=Añadir permisos +AddExportProfiles=Añadir perfiles de exportación +AddImportProfiles=Añadir perfiles de importación +AddOtherPagesOrServices=Añadir otras páginas o servicios AddModels=Agregar plantillas de documento o de numeración AddSubstitutions=Agregar sustituciones de claves DetectionNotPossible=La detección no es posible diff --git a/htdocs/langs/es_ES/admin.lang b/htdocs/langs/es_ES/admin.lang index 5776fdc61e6..142337a0206 100644 --- a/htdocs/langs/es_ES/admin.lang +++ b/htdocs/langs/es_ES/admin.lang @@ -269,10 +269,10 @@ MAIN_MAIL_SMTP_SERVER=Nombre host o ip del servidor SMTP (Por defecto en php.ini MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=Puerto del servidor SMTP (No definido en PHP en sistemas de tipo Unix) MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=Nombre servidor o ip del servidor SMTP (No definido en PHP en sistemas de tipo Unix) MAIN_MAIL_EMAIL_FROM=E-mail del remitente para e-mails automáticos (por defecto en php.ini: %s) -MAIN_MAIL_ERRORS_TO=Email used as 'Errors-To' field in emails sent +MAIN_MAIL_ERRORS_TO=E-mail a usar para los e-mails de error enviados MAIN_MAIL_AUTOCOPY_TO= Enviar automáticamente copia oculta de los e-mails enviados a MAIN_DISABLE_ALL_MAILS=Deshabilitar todos los envíos de e-mail (para propósitos de prueba o demostraciones) -MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes) +MAIN_MAIL_FORCE_SENDTO=Enviar todos los e-mails a (en lugar de destinatarios reales, para pruebas) MAIN_MAIL_SENDMODE=Método de envío de e-mails MAIN_MAIL_SMTPS_ID=ID de autentificación SMTP si se requiere autenticación SMTP MAIN_MAIL_SMTPS_PW=Contraseña autentificación SMTP si se requiere autentificación SMTP @@ -416,7 +416,7 @@ ExtrafieldParamHelpcheckbox=El listado de parámetros tiene que ser key,valor

por ejemplo:
1,value1
2,value2
3,value3
... ExtrafieldParamHelpsellist=Lista de parámetros proviene de una tabla
Sintaxis: nombre_tabla: etiqueta_field: id_field :: filtro
Ejemplo: c_typent: libelle: id :: filtro

filtro puede ser una prueba simple (por ejemplo, activa = 1) Para mostrar sólo el valor activo
También puede utilizar $ ID $ en el filtro witch es el actual id del objeto actual
Para hacer un SELECT en el filtro de uso $ SEL $
si desea filtrar en campos adicionales utilizar la sintaxis Extra.fieldcode = ... (donde código de campo es el código de campo adicional)

Para que la lista dependa de otra lista de campos adicionales:
c_typent: libelle: id: options_ parent_list_code | parent_column: filter

Para que la lista dependa de otra lista:
c_typent: libelle: id: parent_list_code | parent_column: filter ExtrafieldParamHelpchkbxlst=Lista de parámetros proviene de una tabla
Sintaxis: nombre_tabla: etiqueta_field: id_field :: filtro
Ejemplo: c_typent: libelle: id :: filtro

filtro puede ser una prueba simple (por ejemplo, activa = 1) Para mostrar sólo el valor activo
También puede utilizar $ ID $ en el filtro witch es el id actual del objeto actual
Para hacer un SELECT en el filtro de uso $ SEL $
si desea filtrar en campos adicionales utilizar la sintaxis Extra.fieldcode = ... (donde código de campo es el código de campo adicional)

Para que la lista dependa de otra lista de campos adicionales:
c_typent: libelle: id: options_ parent_list_code | parent_column: filter

Para que la lista dependa de otra lista:
c_typent: libelle: id: parent_list_code | parent_column: filter -ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax : ObjectName:Classpath
Examples :
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelplink=Los parámetros deben ser ObjectName: Classpath
Sintaxis: ObjectName:Classpath
Ejemplo:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php LibraryToBuildPDF=Libreria usada en la generación de los PDF WarningUsingFPDF=Atención: Su archivo conf.php contiene la directiva dolibarr_pdf_force_fpdf=1. Esto hace que se use la librería FPDF para generar sus archivos PDF. Esta librería es antigua y no cubre algunas funcionalidades (Unicode, transparencia de imágenes, idiomas cirílicos, árabes o asiáticos, etc.), por lo que puede tener problemas en la generación de los PDF.
Para resolverlo, y disponer de un soporte completo de PDF, puede descargar la librería TCPDF , y a continuación comentar o eliminar la línea $dolibarr_pdf_force_fpdf=1, y añadir en su lugar $dolibarr_lib_TCPDF_PATH='ruta_a_TCPDF' LocalTaxDesc=Algunos países aplican 2 o 3 tasas a cada línea de factura. Si es el caso, escoja el tipo de la segunda y tercera tasa y su valor. Los posibles tipos son:
1 : tasa local aplicable a productos y servicios sin IVA (tasa local es calculada sobre la base imponible)
2 : tasa local se aplica a productos y servicios incluyendo el IVA (tasa local es calculada sobre base imponible+IVA)
3 : tasa local se aplica a productos sin IVA (tasa local es calculada sobre la base imponible)
4 : tasa local se aplica a productos incluyendo el IVA (tasa local es calculada sobre base imponible+IVA)
5 : tasa local se aplica a servicios sin IVA (tasa local es calculada sobre base imponible)
6 : tasa local se aplica a servicios incluyendo el IVA (tasa local es calculada sobre base imponible+IVA) @@ -489,7 +489,7 @@ Module30Name=Facturas y abonos Module30Desc=Gestión de facturas y abonos a clientes. Gestión facturas de proveedores Module40Name=Proveedores Module40Desc=Gestión de proveedores -Module42Name=Debug Logs +Module42Name=Registros de depuración Module42Desc=Generación de logs (archivos, syslog,...). Dichos registros son para propósitos técnicos/de depuración. Module49Name=Editores Module49Desc=Gestión de editores @@ -574,8 +574,8 @@ Module2300Name=Tareas programadas Module2300Desc=Gestión del Trabajo programado (alias cron) Module2400Name=Eventos/Agenda Module2400Desc=Siga los eventos o citas. Registre eventos manuales en las agendas o deje a la aplicación registrar eventos automáticos para fines de seguimiento. -Module2500Name=DMS / ECM -Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need. +Module2500Name=GED / SGD +Module2500Desc=Sistema de Gestión de Documentos / Gestión Electrónica de Contenidos. Organización automática de sus documentos generados o almacenados. Compártalos cuando lo necesite. Module2600Name=API/Servicios web (servidor SOAP) Module2600Desc=Habilitar los servicios Dolibarr SOAP proporcionando servicios API Module2610Name=API/Servicios web (servidor REST) @@ -589,8 +589,8 @@ Module2900Name=GeoIPMaxmind Module2900Desc=Capacidades de conversión GeoIP Maxmind Module3100Name=Skype Module3100Desc=Añadir un botón Skype en las fichas de usuarios/terceros/contactos/miembros -Module3200Name=Unalterable Archives -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries. +Module3200Name=Archivos inalterables +Module3200Desc=Activar el registro de algunos eventos empresariales en un registro no reversible. Los eventos se archivan en tiempo real. El registro es una tabla de sucesos encadenados que se pueden leer y exportar. Este módulo puede ser obligatorio en algunos países. Module4000Name=RRHH Module4000Desc=Departamento de Recursos Humanos (gestión del departamento, contratos de empleados) Module5000Name=Multi-empresa diff --git a/htdocs/langs/es_ES/bills.lang b/htdocs/langs/es_ES/bills.lang index f1f1684fca7..6946e96c971 100644 --- a/htdocs/langs/es_ES/bills.lang +++ b/htdocs/langs/es_ES/bills.lang @@ -148,7 +148,7 @@ ErrorDiscountAlreadyUsed=Error, la remesa está ya asignada ErrorInvoiceAvoirMustBeNegative=Error, una factura de tipo Abono debe tener un importe negativo ErrorInvoiceOfThisTypeMustBePositive=Error, una factura de este tipo debe tener un importe positivo ErrorCantCancelIfReplacementInvoiceNotValidated=Error, no es posible cancelar una factura que ha sido sustituida por otra que se encuentra en el estado 'borrador '. -ErrorThisPartOrAnotherIsAlreadyUsedSoDiscountSerieCantBeRemoved=This part or another is already used so discount serie cant be removed. +ErrorThisPartOrAnotherIsAlreadyUsedSoDiscountSerieCantBeRemoved=Esta parte u otra ya ha sido usada, la serie de descuento no se puede eliminar. BillFrom=Emisor BillTo=Enviar a ActionsOnBill=Eventos sobre la factura diff --git a/htdocs/langs/es_ES/companies.lang b/htdocs/langs/es_ES/companies.lang index c9dbeb960f9..65867f3831f 100644 --- a/htdocs/langs/es_ES/companies.lang +++ b/htdocs/langs/es_ES/companies.lang @@ -56,7 +56,7 @@ Address=Dirección State=Provincia StateShort=Estado Region=Región -Region-State=Region - State +Region-State=Región - Estado Country=País CountryCode=Código país CountryId=Id país diff --git a/htdocs/langs/es_ES/compta.lang b/htdocs/langs/es_ES/compta.lang index b2434f90479..277c8f8fcf5 100644 --- a/htdocs/langs/es_ES/compta.lang +++ b/htdocs/langs/es_ES/compta.lang @@ -1,5 +1,5 @@ # Dolibarr language file - Source file is en_US - compta -MenuFinancial=Billing | Payment +MenuFinancial=Financiera TaxModuleSetupToModifyRules=Ir a la configuración del módulo de impuestos para modificar las reglas de cálculo TaxModuleSetupToModifyRulesLT=Ir a la configuración de la Empresa para modificar las reglas de cálculo OptionMode=Opción de gestión contable diff --git a/htdocs/langs/es_ES/ecm.lang b/htdocs/langs/es_ES/ecm.lang index 03142eb9ff0..d0dd4ed578a 100644 --- a/htdocs/langs/es_ES/ecm.lang +++ b/htdocs/langs/es_ES/ecm.lang @@ -14,8 +14,8 @@ ECMNbOfFilesInDir=Número de archivos en el directorio ECMNbOfSubDir=Número de subdirectorios ECMNbOfFilesInSubDir=Número de archivos en los subdirectorios ECMCreationUser=Creador -ECMArea=DMS/ECM area -ECMAreaDesc=The DMS/ECM (Document Management System / Electronic Content Management) area allows you to save, share and search quickly all kind of documents in Dolibarr. +ECMArea=Área GED +ECMAreaDesc=El área GED (Gestión Electrónica de Documentos) le permite guardar, compartir y buscar rápidamente todo tipo de documentos en Dolibarr. ECMAreaDesc2=Puede crear directorios manuales y adjuntar los documentos
Los directorios automáticos son rellenados automáticamente en la adición de un documento en una ficha. ECMSectionWasRemoved=El directorio %s ha sido eliminado ECMSectionWasCreated=El directorio %s ha sido creado. diff --git a/htdocs/langs/es_ES/mails.lang b/htdocs/langs/es_ES/mails.lang index 81f0e87e114..48932dbba97 100644 --- a/htdocs/langs/es_ES/mails.lang +++ b/htdocs/langs/es_ES/mails.lang @@ -87,7 +87,7 @@ MailingModuleDescEmailsFromFile=E-mails de archivo MailingModuleDescEmailsFromUser=E-mails enviados por usuario MailingModuleDescDolibarrUsers=Usuarios con e-mails MailingModuleDescThirdPartiesByCategories=Terceros (por categoría) -SendingFromWebInterfaceIsNotAllowed=Sending from web interface is not allowed. +SendingFromWebInterfaceIsNotAllowed=El envío desde la interfaz web no está permitido. # Libelle des modules de liste de destinataires mailing LineInFile=Línea %s en archivo diff --git a/htdocs/langs/es_ES/main.lang b/htdocs/langs/es_ES/main.lang index 66444ab64c0..e9d3aff70dc 100644 --- a/htdocs/langs/es_ES/main.lang +++ b/htdocs/langs/es_ES/main.lang @@ -498,8 +498,8 @@ AddPhoto=Añadir foto DeletePicture=Eliminar imagen ConfirmDeletePicture=¿Confirma la eliminación de la imagen? Login=Login -LoginEmail=Login (email) -LoginOrEmail=Login or Email +LoginEmail=Ingreso (e-mail) +LoginOrEmail=Login o e-mail CurrentLogin=Login actual EnterLoginDetail=Introduzca los datos de inicio de sesión January=enero diff --git a/htdocs/langs/es_ES/other.lang b/htdocs/langs/es_ES/other.lang index 9805345d7fc..bca0fdaa899 100644 --- a/htdocs/langs/es_ES/other.lang +++ b/htdocs/langs/es_ES/other.lang @@ -227,9 +227,9 @@ Chart=Gráfico PassEncoding=Cifrado de contraseña PermissionsAdd=Permisos añadidos PermissionsDelete=Permisos eliminados -YourPasswordMustHaveAtLeastXChars=Your password must have at least %s chars -YourPasswordHasBeenReset=Your password has been reset successfully -ApplicantIpAddress=IP address of applicant +YourPasswordMustHaveAtLeastXChars=Su contraseña debe contener al menos %s caracteres +YourPasswordHasBeenReset=Su contraseña ha sido restablecida con éxito +ApplicantIpAddress=Dirección IP del solicitante ##### Export ##### ExportsArea=Área de exportaciones AvailableFormats=Formatos disponibles diff --git a/htdocs/langs/es_ES/salaries.lang b/htdocs/langs/es_ES/salaries.lang index d808f325b9e..c4b8eaf2577 100644 --- a/htdocs/langs/es_ES/salaries.lang +++ b/htdocs/langs/es_ES/salaries.lang @@ -1,7 +1,7 @@ # Dolibarr language file - Source file is en_US - salaries SALARIES_ACCOUNTING_ACCOUNT_PAYMENT=Cuenta contable usada para los terceros SALARIES_ACCOUNTING_ACCOUNT_PAYMENT_Desc=Se utilizará una cuenta contable dedicada definida en la ficha de usuario para el relleno del Libro Mayor, o como valor predeterminado de la contabilidad del Libro Mayor si no se define una cuenta contable en la ficha del usuario -SALARIES_ACCOUNTING_ACCOUNT_CHARGE=Accounting account by default for wage payments +SALARIES_ACCOUNTING_ACCOUNT_CHARGE=Cuenta contable por defecto para pagos de salarios Salary=Salario Salaries=Salarios NewSalaryPayment=Nuevo pago diff --git a/htdocs/langs/es_ES/users.lang b/htdocs/langs/es_ES/users.lang index 2cabe499c81..68d7a47bae2 100644 --- a/htdocs/langs/es_ES/users.lang +++ b/htdocs/langs/es_ES/users.lang @@ -6,7 +6,7 @@ Permission=Derecho Permissions=Permisos EditPassword=Modificar contraseña SendNewPassword=Enviar nueva contraseña -SendNewPasswordLink=Send link to reset password +SendNewPasswordLink=Enviar enlace para restablecer la contraseña ReinitPassword=Generar nueva contraseña PasswordChangedTo=Contraseña modificada en: %s SubjectNewPassword=Su nueva contraseña para %s @@ -44,9 +44,9 @@ NewGroup=Nuevo grupo CreateGroup=Crear el grupo RemoveFromGroup=Eliminar del grupo PasswordChangedAndSentTo=Contraseña cambiada y enviada a %s. -PasswordChangeRequest=Request to change password for %s +PasswordChangeRequest=Solicitud para cambiar la contraseña de %s PasswordChangeRequestSent=Petición de cambio de contraseña para %s enviada a %s. -ConfirmPasswordReset=Confirm password reset +ConfirmPasswordReset=Confirmar restablecimiento de contraseña MenuUsersAndGroups=Usuarios y grupos LastGroupsCreated=Últimos %s grupos creados LastUsersCreated=Últimos %s usuarios creados diff --git a/htdocs/langs/fr_FR/accountancy.lang b/htdocs/langs/fr_FR/accountancy.lang index 079e1c34d8e..85d1f6a5b58 100644 --- a/htdocs/langs/fr_FR/accountancy.lang +++ b/htdocs/langs/fr_FR/accountancy.lang @@ -224,8 +224,8 @@ GeneralLedgerSomeRecordWasNotRecorded=Certaines des opérations n'ont pu être e NoNewRecordSaved=Plus d'enregistrements à journaliser ListOfProductsWithoutAccountingAccount=Liste des produits non liés à un compte comptable ChangeBinding=Changer les liens -Accounted=Accounted in ledger -NotYetAccounted=Not yet accounted in ledger +Accounted=Comptabilisé dans le grand livre +NotYetAccounted=Pas encore comptabilisé dans le grand livre ## Admin ApplyMassCategories=Application en masse des catégories @@ -291,4 +291,4 @@ Binded=Lignes liées ToBind=Lignes à lier UseMenuToSetBindindManualy=L'autodection n'est pas possible, utilisez le menu %s pour effectuer la liaison manuellement -WarningReportNotReliable=Attention : ce rapport n'est pas basé sur le grand livre et ne contient donc pas les écritures manuelles qui lui ont été ajoutées. Une fonctionnalité améliorée sera présente dans les prochaines versions. +WarningReportNotReliable=Attention : ce rapport n'est pas basé sur le grand livre et ne contient donc pas les écritures manuelles qui lui ont été ajoutées. Si votre journalisation est à jour, la vue depuis le grand livre sera plus précise. diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang index 74364386066..15cebb242f7 100644 --- a/htdocs/langs/fr_FR/admin.lang +++ b/htdocs/langs/fr_FR/admin.lang @@ -269,10 +269,10 @@ MAIN_MAIL_SMTP_SERVER=Nom d'hôte ou adresse IP du serveur SMTP/SMTPS (Par défa MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=Port du serveur SMTP/SMTPS (Non défini dans le PHP sur les systèmes de type Unix) MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=Nom d'hôte ou adresse IP du serveur SMTP/SMTPS (Non défini dans le PHP sur les systèmes de type Unix) MAIN_MAIL_EMAIL_FROM=Adresse email de l'émetteur pour l'envoi d'emails automatiques (Par défaut dans php.ini: %s) -MAIN_MAIL_ERRORS_TO=Email used as 'Errors-To' field in emails sent +MAIN_MAIL_ERRORS_TO=E-mail utilisé comme champ "Errors-To" dans les e-mails envoyés MAIN_MAIL_AUTOCOPY_TO= Envoyer systématiquement une copie cachée des emails envoyés à MAIN_DISABLE_ALL_MAILS=Désactiver globalement tout envoi d'emails (pour mode test ou démos) -MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes) +MAIN_MAIL_FORCE_SENDTO=Envoyer tous les emails à (au lieu des vrais destinataires, à des fins de test) MAIN_MAIL_SENDMODE=Méthode d'envoi des emails MAIN_MAIL_SMTPS_ID=Identifiant d'authentification SMTP si authentification SMTP requise MAIN_MAIL_SMTPS_PW=Mot de passe d'authentification SMTP si authentification SMTP requise @@ -489,7 +489,7 @@ Module30Name=Factures et avoirs Module30Desc=Gestion des factures et avoirs clients. Gestion des factures fournisseurs Module40Name=Fournisseurs Module40Desc=Gestion des fournisseurs et des achats (commandes et factures) -Module42Name=Debug Logs +Module42Name=Journaux et traces de Debug Module42Desc=Systèmes de logs ( fichier, syslog,... ). De tels logs ont un but technique / de débogage. Module49Name=Éditeurs Module49Desc=Gestion des éditeurs @@ -574,7 +574,7 @@ Module2300Name=Travaux planifiés Module2300Desc=Gestion des travaux planifiées (alias cron ou table chrono) Module2400Name=Événements/Agenda Module2400Desc=Gestion des événements réalisés ou à venir. Enregistrer manuellement des événements ou rendez-vous dans l'agenda ou laisser l'application enregistrer automatiquement des événements à des fins de suivi. -Module2500Name=DMS / ECM +Module2500Name=GED Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need. Module2600Name=API/Web services (serveur SOAP) Module2600Desc=Active le server SOAP Dolibarr fournissant des services API @@ -589,8 +589,8 @@ Module2900Name=GeoIPMaxmind Module2900Desc=Capacités de conversion GeoIP Maxmind Module3100Name=Skype Module3100Desc=Ajouter un bouton Skype dans les fiches utilisateurs / tiers / contacts / adhérents -Module3200Name=Unalterable Archives -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries. +Module3200Name=Archives/Logs Inaltérables +Module3200Desc=Active la journalisation de certains événements métiers dans une log/archive inaltérable. Les événements sont archivés en temps réel. L'archive est une table d'événements chaînés qui peut être lu uniquement et exporté. Ce module permet d'être compatible avec les exigences des lois de certains pays (comme par exemple la loi Finance 2016 ou norme 525 en France). Module4000Name=GRH Module4000Desc=Gestion des ressources humaines (gestion du département, contrats des employés et appréciations) Module5000Name=Multi-société @@ -640,7 +640,7 @@ Permission32=Créer/modifier les produits Permission34=Supprimer les produits Permission36=Voir/gérer les produits cachés Permission38=Exporter les produits -Permission41=Lire les projets et tâches (partagés ou dont vous êtes un contact). Permet la saisie de temps passé, par vous et votre supérieur hiérarchique, sur les tâches assignées. +Permission41=Lire les projets et tâches (partagés ou dont vous êtes un contact). Permet la saisie de temps passé, par vous et votre hiérarchie (vos subordonnés), sur les tâches assignées. Permission42=Créer/modifier les projets (projets partagés et projets pour lesquels je suis contact). Permet aussi de créer des tâches et d'assigner des utilisateurs aux projets et tâches. Permission44=Supprimer les projets et tâches (partagés ou dont je suis contact) Permission45=Exporter les projets diff --git a/htdocs/langs/fr_FR/bills.lang b/htdocs/langs/fr_FR/bills.lang index 95283de8042..13729eb43fa 100644 --- a/htdocs/langs/fr_FR/bills.lang +++ b/htdocs/langs/fr_FR/bills.lang @@ -148,7 +148,7 @@ ErrorDiscountAlreadyUsed=Erreur, la remise a déjà été attribuée ErrorInvoiceAvoirMustBeNegative=Erreur, une facture de type Avoir doit avoir un montant négatif ErrorInvoiceOfThisTypeMustBePositive=Erreur, une facture de ce type doit avoir un montant positif ErrorCantCancelIfReplacementInvoiceNotValidated=Erreur, il n'est pas possible d'annuler une facture qui a été remplacée par une autre qui se trouve toujours à l'état 'brouillon'. -ErrorThisPartOrAnotherIsAlreadyUsedSoDiscountSerieCantBeRemoved=This part or another is already used so discount serie cant be removed. +ErrorThisPartOrAnotherIsAlreadyUsedSoDiscountSerieCantBeRemoved=Cette partie ou une autre est déjà utilisé, aussi la remise ne peut être supprimée. BillFrom=Émetteur BillTo=Adressé à ActionsOnBill=Événements sur la facture @@ -179,7 +179,7 @@ ConfirmCancelBillQuestion=Pour quelle raison voulez-vous classer la facture aban ConfirmClassifyPaidPartially=Êtes-vous sûr de vouloir classer la facture %s comme payée ? ConfirmClassifyPaidPartiallyQuestion=Cette facture n'a pas été payée à hauteur du montant initial. Pour quelle raison voulez-vous la classer malgré tout ? ConfirmClassifyPaidPartiallyReasonAvoir=Le reste à payer (%s %s) est un trop facturé (car article retourné, oubli, escompte réalisé...), régularisé par un avoir -ConfirmClassifyPaidPartiallyReasonDiscount=Remaining unpaid (%s %s) is a discount granted because payment was made before term. +ConfirmClassifyPaidPartiallyReasonDiscount=Le reste à payer (%s %s) est un escompte accordé parce que le paiement a été effectué avant terme. ConfirmClassifyPaidPartiallyReasonDiscountNoVat=Le reste à payer (%s %s) est un escompte accordé après facture. J'accepte de perdre la TVA sur cet escompte ConfirmClassifyPaidPartiallyReasonDiscountVat=Le reste à payer (%s %s) est un escompte ConfirmClassifyPaidPartiallyReasonBadCustomer=Mauvais payeur diff --git a/htdocs/langs/fr_FR/companies.lang b/htdocs/langs/fr_FR/companies.lang index 5252c6f8987..05104ac860b 100644 --- a/htdocs/langs/fr_FR/companies.lang +++ b/htdocs/langs/fr_FR/companies.lang @@ -56,7 +56,7 @@ Address=Adresse State=Département/Canton StateShort=Département Region=Région -Region-State=Region - State +Region-State=Région - État Country=Pays CountryCode=Code pays CountryId=Identifiant pays diff --git a/htdocs/langs/fr_FR/ecm.lang b/htdocs/langs/fr_FR/ecm.lang index 1a648e170fe..83a92bcf767 100644 --- a/htdocs/langs/fr_FR/ecm.lang +++ b/htdocs/langs/fr_FR/ecm.lang @@ -14,8 +14,8 @@ ECMNbOfFilesInDir=Nombre de fichiers dans le répertoire ECMNbOfSubDir=Nombre de sous-répertoires ECMNbOfFilesInSubDir=Nombre de fichiers dans les sous-répertoires ECMCreationUser=Créateur -ECMArea=DMS/ECM area -ECMAreaDesc=The DMS/ECM (Document Management System / Electronic Content Management) area allows you to save, share and search quickly all kind of documents in Dolibarr. +ECMArea=Espace GED +ECMAreaDesc=L'espace GED (Gestion Électronique de Documents) vous permet de stocker, partager et chercher rapidement tout type de documents dans Dolibarr. ECMAreaDesc2=* Les répertoires automatiques sont alimentés automatiquement lors de l'ajout d'un document depuis une fiche objet (proposition commerciale, facture...).
* Les répertoires manuels peuvent être utilisés pour stocker des documents divers, non liés à un objet particulier. ECMSectionWasRemoved=Le répertoire %s a été effacé. ECMSectionWasCreated=Le répertoire %s a été créé. diff --git a/htdocs/langs/fr_FR/interventions.lang b/htdocs/langs/fr_FR/interventions.lang index f8993be0df2..d1f57e2e951 100644 --- a/htdocs/langs/fr_FR/interventions.lang +++ b/htdocs/langs/fr_FR/interventions.lang @@ -52,7 +52,7 @@ UseDateWithoutHourOnFichinter=Masque les heures et les minutes du champ de la da InterventionStatistics=Statistiques des interventions NbOfinterventions=Nb de fiches d'intervention NumberOfInterventionsByMonth=Nb de fiches d'intervention par mois (date de validation) -AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them. +AmountOfInteventionNotIncludedByDefault=Le total des interventions 'nest pas inclus par défaut dans les profits (dans la plupart des cas, les feuilles de temps totalisent le temps passé). Activez l'option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT à 1 dans Accueil > Condiguration > Divers ##### Exports ##### InterId=Id intervention InterRef=Intervention ref. diff --git a/htdocs/langs/fr_FR/mails.lang b/htdocs/langs/fr_FR/mails.lang index 3f532c5fcb1..487861f4c8b 100644 --- a/htdocs/langs/fr_FR/mails.lang +++ b/htdocs/langs/fr_FR/mails.lang @@ -87,7 +87,7 @@ MailingModuleDescEmailsFromFile=E-mails à partir d'un fichier MailingModuleDescEmailsFromUser=E-mails entrés par l'utilisateur MailingModuleDescDolibarrUsers=Utilisateurs avec e-mail MailingModuleDescThirdPartiesByCategories=Tiers (par catégories/tags) -SendingFromWebInterfaceIsNotAllowed=Sending from web interface is not allowed. +SendingFromWebInterfaceIsNotAllowed=L'envoyer depuis l'interface Web n'est pas autorisé. # Libelle des modules de liste de destinataires mailing LineInFile=Ligne %s du fichier diff --git a/htdocs/langs/fr_FR/main.lang b/htdocs/langs/fr_FR/main.lang index a0b0eb5c34e..cd087a9a4b8 100644 --- a/htdocs/langs/fr_FR/main.lang +++ b/htdocs/langs/fr_FR/main.lang @@ -499,7 +499,7 @@ DeletePicture=Effacer ilage ConfirmDeletePicture=Confirmer la suppressionde l'image Login=Identifiant LoginEmail=Login (email) -LoginOrEmail=Login or Email +LoginOrEmail=Login ou Email CurrentLogin=Identifiant courant EnterLoginDetail=Saisir les informations de connexion January=janvier diff --git a/htdocs/langs/fr_FR/modulebuilder.lang b/htdocs/langs/fr_FR/modulebuilder.lang index 414086a3119..ca1aa0ab1d4 100644 --- a/htdocs/langs/fr_FR/modulebuilder.lang +++ b/htdocs/langs/fr_FR/modulebuilder.lang @@ -75,11 +75,11 @@ GoToApiExplorer=Se rendre sur l'explorateur d'API ListOfMenusEntries=Liste des entrées du menu ListOfPermissionsDefined=Liste des permissions EnabledDesc=Condition pour que ce champ soit actif (Exemples: 1 ou $conf->global->MYMODULE_MYOPTION) -VisibleDesc=Is the field visible ? (Examples: 0=Never visible, 1=Visible on list and create/update/view forms, 2=Visible on list only, 3=Visible on create/update/view form only. Using a negative value means field is not shown by default on list but can be selected for viewing) +VisibleDesc=Le champ est-il visible ? (Exemples: 0 = Jamais visible, 1 = Visible sur les listes et formulaires de création/mise à jour/visualisation, 2 = Visible uniquement sur la liste, 3 = Visible uniquement sur le formulaire de création/mise à jour/affichage. Utiliser une valeur négative signifie que le champ n'est pas affiché par défaut sur la liste mais peut être sélectionné pour l'affichage) IsAMeasureDesc=Peut-on cumuler la valeur du champ pour obtenir un total dans les listes ? (Exemples: 1 ou 0) SearchAllDesc=Le champ doit-il être utilisé pour effectuer une recherche à partir de l'outil de recherche rapide ? (Exemples: 1 ou 0) SpecDefDesc=Entrez ici toute la documentation que vous souhaitez joindre au module et qui n'a pas encore été définis dans d'autres onglets. Vous pouvez utiliser .md ou, mieux, la syntaxe enrichie .asciidoc. -LanguageDefDesc=Enter in this files, all the key and the translation for each language file. +LanguageDefDesc=Entrez dans ces fichiers, toutes les clés et la traduction pour chaque fichier de langue. MenusDefDesc=Define here the menus provided by your module (once defined, they are visible into the menu editor %s) PermissionsDefDesc=Define here the new permissions provided by your module (once defined, they are visible into the default permissions setup %s) HooksDefDesc=Define in the module_parts['hooks'] property, in the module descriptor, the context of hooks you want to manage (list of contexts can be found by a search on 'initHooks(' in core code).
Edit the hook file to add code of your hooked functions (hookable functions can be found by a search on 'executeHooks' in core code). diff --git a/htdocs/langs/fr_FR/multicurrency.lang b/htdocs/langs/fr_FR/multicurrency.lang index 7475e826ecf..c833ae46bf9 100644 --- a/htdocs/langs/fr_FR/multicurrency.lang +++ b/htdocs/langs/fr_FR/multicurrency.lang @@ -7,7 +7,7 @@ multicurrency_syncronize_error=Erreur de synchronisation %s MULTICURRENCY_USE_RATE_ON_DOCUMENT_DATE=Utilisez la date du document pour trouver le taux de change, au lieu d'utiliser dernier taux connu multicurrency_useOriginTx=Quand un objet est créé à partir d'un autre, garder le taux original de l'objet source (sinon utiliser le dernier taux connu) CurrencyLayerAccount=API CurrencyLayer -CurrencyLayerAccount_help_to_synchronize=You sould create an account on their website to use this functionnality
Get your API key
If you use a free account you can't change the currency source (USD by default)
But if your main currency isn't USD you can use the alternate currency source to force you main currency

You are limited at 1000 synchronizations per month +CurrencyLayerAccount_help_to_synchronize=You sould create an account on their website to use this functionnality
Get your API key
If you use a free account you can't change the currency source (USD by default)
But if your main currency isn't USD you can use the alternate currency source to force you main currency

You are limited at 1000 synchronizations per month multicurrency_appId=Clé API multicurrency_appCurrencySource=Devise source multicurrency_alternateCurrencySource=Devise du document source @@ -17,4 +17,4 @@ rate=taux MulticurrencyReceived=Reçu, devise originale MulticurrencyRemainderToTake=Montant restant, devise originale MulticurrencyPaymentAmount=Montant du règlement (devise d'origine) -AmountToOthercurrency=Amount To (in currency of receiving account) +AmountToOthercurrency=Montant destination (en devise du compte de réception) diff --git a/htdocs/langs/fr_FR/orders.lang b/htdocs/langs/fr_FR/orders.lang index 23050cc7a6e..f833fa3b64c 100644 --- a/htdocs/langs/fr_FR/orders.lang +++ b/htdocs/langs/fr_FR/orders.lang @@ -97,7 +97,7 @@ ConfirmMakeOrder=Êtes-vous sûr de vouloir confirmer cette commande en date du GenerateBill=Facturer ClassifyShipped=Classer livrée DraftOrders=Commandes brouillons -DraftSuppliersOrders=Brouillon de commandes fournisseurs +DraftSuppliersOrders=Commandes fournisseurs brouillons OnProcessOrders=Commandes en cours de traitement RefOrder=Réf. commande RefCustomerOrder=Réf. commande client @@ -153,6 +153,6 @@ OrderFail=Une erreur s'est produite pendant la création de vos commandes CreateOrders=Créer commandes ToBillSeveralOrderSelectCustomer=Pour créer une facture pour plusieurs commandes, cliquez d'abord sur le client, puis choisir "%s". OptionToSetOrderBilledNotEnabled=Option (from module Workflow) to set order to 'Billed' automatically when invoice is validated is off, so you will have to set status of order to 'Billed' manually. -IfValidateInvoiceIsNoOrderStayUnbilled=If invoice validation is 'No', the order will remain to status 'Unbilled' until the invoice is validated. +IfValidateInvoiceIsNoOrderStayUnbilled=Si la validation de facture est à "Non", la commande restera au statut "Non facturé" jusqu'à ce que la facture soit validée. CloseReceivedSupplierOrdersAutomatically=Fermer la commande "%s" automatiquement si tous les produits ont été reçus. SetShippingMode=Définir la méthode d'expédition diff --git a/htdocs/langs/fr_FR/other.lang b/htdocs/langs/fr_FR/other.lang index 0b4f1e8a222..610a4f59ab3 100644 --- a/htdocs/langs/fr_FR/other.lang +++ b/htdocs/langs/fr_FR/other.lang @@ -227,9 +227,9 @@ Chart=Graphique PassEncoding=Codage du mot de passe PermissionsAdd=Permissions ajoutés PermissionsDelete=Permissions retirées -YourPasswordMustHaveAtLeastXChars=Your password must have at least %s chars -YourPasswordHasBeenReset=Your password has been reset successfully -ApplicantIpAddress=IP address of applicant +YourPasswordMustHaveAtLeastXChars=Votre mot de passe doit avoir au moins %s caractères +YourPasswordHasBeenReset=Votre mot de passe a été réinitialisé avec succès +ApplicantIpAddress=Adresse IP du demandeur ##### Export ##### ExportsArea=Espace exports AvailableFormats=Formats disponibles diff --git a/htdocs/langs/fr_FR/printing.lang b/htdocs/langs/fr_FR/printing.lang index 434f43fdeb7..62cad4af2c5 100644 --- a/htdocs/langs/fr_FR/printing.lang +++ b/htdocs/langs/fr_FR/printing.lang @@ -49,4 +49,6 @@ DirectPrintingJobsDesc=Cette page liste les travaux d'impression trouvés sur le GoogleAuthNotConfigured=Configuration Google OAuth non terminé. Activer le module OAuth et entrer un Google ID/Secret GoogleAuthConfigured=Identifiants Google OAuth trouvé dans la configuration du module OAuth. PrintingDriverDescprintgcp=Paramètres de configuration des drivers Google Cloud Print pour les impressions. +PrintingDriverDescprintipp=Variables de configuration pour le pilotes d'impression Cups. PrintTestDescprintgcp=List des imprimantes Google Cloud Print. +PrintTestDescprintipp=Liste des imprimantes pour Cups. diff --git a/htdocs/langs/fr_FR/salaries.lang b/htdocs/langs/fr_FR/salaries.lang index 4dcb5432ca8..f6f76d690bb 100644 --- a/htdocs/langs/fr_FR/salaries.lang +++ b/htdocs/langs/fr_FR/salaries.lang @@ -1,7 +1,7 @@ # Dolibarr language file - Source file is en_US - salaries SALARIES_ACCOUNTING_ACCOUNT_PAYMENT=Compte comptable utilisé pour les utilisateurs SALARIES_ACCOUNTING_ACCOUNT_PAYMENT_Desc=Le compte comptable défini sur la carte utilisateur sera utilisé uniquement pour la comptabilité auxiliaire. Celui-ci sera utilisé pour le grand livre et comme valeur par défaut de la comptabilité auxiliaire si le compte dédié de l'utilisateur n'est pas défini. -SALARIES_ACCOUNTING_ACCOUNT_CHARGE=Accounting account by default for wage payments +SALARIES_ACCOUNTING_ACCOUNT_CHARGE=Compte comptable par défaut pour les paiements de salaires Salary=Salaire Salaries=Salaires NewSalaryPayment=Nouveau règlement de salaire diff --git a/htdocs/langs/fr_FR/trips.lang b/htdocs/langs/fr_FR/trips.lang index ada5f240cb9..b8151ca57d8 100644 --- a/htdocs/langs/fr_FR/trips.lang +++ b/htdocs/langs/fr_FR/trips.lang @@ -72,7 +72,7 @@ EX_TOL_VP=Péage EX_PAR_VP=Stationnement EX_CAM_VP=Entretien et réparation DefaultCategoryCar=Mode de déplacement par défaut -DefaultRangeNumber=Default range number +DefaultRangeNumber=Numéro de plage par défaut ErrorDoubleDeclaration=Vous avez déclaré une autre note de frais dans une période similaire. AucuneLigne=Aucune note de frais déclarée @@ -116,7 +116,7 @@ CloneExpenseReport=Cloner la note de frais ConfirmCloneExpenseReport=Êtes-vous sûr de vouloir cloner cette note de frais ? ExpenseReportsIk=index des frais kilométriques des notes de frais ExpenseReportsRules=Règle de note de frais -ExpenseReportIkDesc=You can modify the calculation of kilometers expense by category and range who they are previously defined. d is the distance in kilometers +ExpenseReportIkDesc=Vous pouvez modifier le calcul des indemnités kilométriques par catégories et gammes précédemment définies. d est la distance en kilomètres. ExpenseReportRulesDesc=Vous pouvez créer ou mettre à jour toutes les règles de calcul. Cette règle sera utilisée à la création d'une note de frais par un utilisateur. expenseReportOffset=Décalage expenseReportCoef=Coefficient @@ -133,19 +133,19 @@ ExpenseReportLimitOn=Limite sur ExpenseReportDateStart=Date début ExpenseReportDateEnd=Date fin ExpenseReportLimitAmount=Montant limite -ExpenseReportRestrictive=Restrictive +ExpenseReportRestrictive=Restrictif AllExpenseReport=Tout type de note de frais OnExpense=Ligne de dépense ExpenseReportRuleSave=Règle de calcul enregistrée ExpenseReportRuleErrorOnSave=Erreur: %s RangeNum=Plage %d -ExpenseReportConstraintViolationError=Constraint violation id [%s]: %s is superior to %s %s +ExpenseReportConstraintViolationError=Violation de contrainte ID [%s]: %s est supérieur à %s %s byEX_DAY=par jour (limité à %s) byEX_MON=par mois (limité à%s) byEX_YEA=par an (limité à %s) byEX_EXP=par ligne (limité à %s) -ExpenseReportConstraintViolationWarning=Constraint violation id [%s]: %s is superior to %s %s +ExpenseReportConstraintViolationWarning=Violation de contrainte ID [%s]: %s est supérieur à %s %s nolimitbyEX_DAY=par jour (sans limite) nolimitbyEX_MON=par mois (sans limite) nolimitbyEX_YEA=par an (sans limite) diff --git a/htdocs/langs/fr_FR/users.lang b/htdocs/langs/fr_FR/users.lang index c87b331c29d..2b7da2d4507 100644 --- a/htdocs/langs/fr_FR/users.lang +++ b/htdocs/langs/fr_FR/users.lang @@ -6,7 +6,7 @@ Permission=Droit Permissions=Droits EditPassword=Modifier mot de passe SendNewPassword=Régénérer et envoyer mot de passe -SendNewPasswordLink=Send link to reset password +SendNewPasswordLink=Envoyer le lien pour réinitialiser le mot de passe ReinitPassword=Régénérer mot de passe PasswordChangedTo=Mot de passe modifié en: %s SubjectNewPassword=Votre mot de passe pour %s @@ -44,9 +44,9 @@ NewGroup=Nouveau groupe CreateGroup=Créer le groupe RemoveFromGroup=Supprimer du groupe PasswordChangedAndSentTo=Mot de passe changé et envoyé à %s. -PasswordChangeRequest=Request to change password for %s +PasswordChangeRequest=Demande de changement de mot de passe pour %s PasswordChangeRequestSent=Demande de changement de mot de passe pour %s envoyée à %s. -ConfirmPasswordReset=Confirm password reset +ConfirmPasswordReset=Confirmer réinitialisation du mot de passe MenuUsersAndGroups=Utilisateurs & Groupes LastGroupsCreated=Les %s derniers groupes créés LastUsersCreated=Les %s derniers utilisateurs créés diff --git a/htdocs/langs/nb_NO/admin.lang b/htdocs/langs/nb_NO/admin.lang index eecaa03cc94..af5812b05cd 100644 --- a/htdocs/langs/nb_NO/admin.lang +++ b/htdocs/langs/nb_NO/admin.lang @@ -269,10 +269,10 @@ MAIN_MAIL_SMTP_SERVER=SMTP-server (Standard i php.ini: %s) MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP-port (Settes ikke i PHP på Unix/Linux) MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP-server (Settes ikke i PHP på Unix/Linux) MAIN_MAIL_EMAIL_FROM=Avsender-e-post for automatiske e-poster (Som standard i php.ini: %s) -MAIN_MAIL_ERRORS_TO=Email used as 'Errors-To' field in emails sent +MAIN_MAIL_ERRORS_TO=E-post brukt som "Feil til" -felt i e-postmeldinger sendt MAIN_MAIL_AUTOCOPY_TO= Send systematisk en skjult karbon-kopi av alle sendte e-post til MAIN_DISABLE_ALL_MAILS=Deaktiver alle e-postmeldinger (for testformål eller demoer) -MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes) +MAIN_MAIL_FORCE_SENDTO=Send alle e-post til (i stedet for ekte mottakere, til testformål) MAIN_MAIL_SENDMODE=Metode for å sende e-post MAIN_MAIL_SMTPS_ID=SMTP-ID hvis godkjenning kreves MAIN_MAIL_SMTPS_PW=SMTP-passord hvis godkjenning kreves diff --git a/htdocs/langs/nb_NO/compta.lang b/htdocs/langs/nb_NO/compta.lang index d8300a631b5..5a062dfee7b 100644 --- a/htdocs/langs/nb_NO/compta.lang +++ b/htdocs/langs/nb_NO/compta.lang @@ -1,5 +1,5 @@ # Dolibarr language file - Source file is en_US - compta -MenuFinancial=Billing | Payment +MenuFinancial=Fakturering | Betaling TaxModuleSetupToModifyRules=Gå til Oppsett av Skatter/avgifter-modul for å endre regler for utregning TaxModuleSetupToModifyRulesLT=Gå til Firmaoppsett for å endre kalkulasjonsreglene OptionMode=Alternativ for regnskap diff --git a/htdocs/langs/nl_NL/admin.lang b/htdocs/langs/nl_NL/admin.lang index 647fdf4c10b..7a60a35696c 100644 --- a/htdocs/langs/nl_NL/admin.lang +++ b/htdocs/langs/nl_NL/admin.lang @@ -909,7 +909,7 @@ BackToModuleList=Terug naar moduleoverzicht BackToDictionaryList=Terug naar de woordenboeken lijst TypeOfRevenueStamp=Type of revenue stamp VATManagement=BTW-beheer -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:
If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.
If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule.
If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.
If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold. End of rule.
If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.
In any othe case the proposed default is VAT=0. End of rule. +VATIsUsedDesc=Het standaard BTW-tarief bij het aanmaken van prospecten, facturen, orders etc volgt de actieve standaard regel:
Als de verkoper onderworpen is aan BTW, dan wordt BTW standaard op 0 gezet. Einde van de regel.
Als het 'land van de verkoper' = 'het land van de koper' dan wordt de BTW standaard ingesteld op de BTW van het product in het verkopende land. Einde van de regel.
Als verkoper en koper zich in de Europese Gemeenschap bevinden en het betreft een nieuw vervoersmiddel (auto, boot, vliegtuig), dan wordt de BTW standaard ingesteld op 0 (De BTW moet worden betaald door koper in het grenskantoor van zijn land en niet door de verkoper). Einde van de regel.
Als verkoper en koper zich in de Europese Unie bevinden en de koper is een persoon of bedrijf zonder BTW-registratienummer = BTW-standaard van het verkochte product. Einde van de regel.
Als verkoper en koper zich in de Europese Gemeenschap bevinden en de koper geen bedrijf is, dan wordt de BTW standaard ingesteld op de BTW van het verkochte product. Einde van de regel

In alle andere gevallen wordt de BTW standaard ingesteld op 0. Einde van de regel.
VATIsNotUsedDesc=Standaard is de voorgestelde BTW 0. Dit kan gebruikt worden in situaties zoals verenigingen, particulieren of kleine bedrijven. VATIsUsedExampleFR=In Frankrijk, betekent dit dat bedrijven of organisaties met een echt fiscaalsysteem (Vereenvoudigd reëel of normaal reëel). Een systeem waarbij de BTW wordt aangegeven. VATIsNotUsedExampleFR=In Frankrijk, betekent dit verenigingen die geen BTW aangegeven of bedrijven, organisaties of vrije beroepen die hebben gekozen voor het micro-onderneming fiscale stelsel (BTW in franchise) en een franchise BTW betaalden zonder BTW aangifte. Bij het maken van deze keuze verschijnt de vermelding "Niet van toepassing BTW - art-293B van CGI" op de facturen. @@ -1011,9 +1011,9 @@ ShowBugTrackLink=Toon de link "%s" Alerts=Kennisgevingen DelaysOfToleranceBeforeWarning=Getolereerde vertraging voor kennisgeving DelaysOfToleranceDesc=In dit scherm kunt u de getolereerde vertraging voordat een kennisgeving wordt gemeld op het scherm met een icoontje %s voor elk te laat element. -Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events (agenda events) not completed yet +Delays_MAIN_DELAY_ACTIONS_TODO=Getolereerde vertraging (in dagen) voor geplande evenementen (agenda) nog niet voltooid Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet +Delays_MAIN_DELAY_TASKS_TODO=Getolereerde vertraging (in dagen) voor geplande taken (project-taken) nog niet voltooid Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on suppliers orders not processed yet Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Getolereerde vertraging (in dagen) voor een kennisgeving, op af te sluiten offertes word getoond diff --git a/htdocs/langs/pt_BR/accountancy.lang b/htdocs/langs/pt_BR/accountancy.lang index 26cb9f5fc17..82f62863844 100644 --- a/htdocs/langs/pt_BR/accountancy.lang +++ b/htdocs/langs/pt_BR/accountancy.lang @@ -1,50 +1,93 @@ # Dolibarr language file - Source file is en_US - accountancy ACCOUNTING_EXPORT_SEPARATORCSV=Separador de coluna para arquivo de exportação ACCOUNTING_EXPORT_DATE=Formato de data para arquivo de exportação -ACCOUNTING_EXPORT_PIECE=Exportar a quantidade +ACCOUNTING_EXPORT_PIECE=Exportar a quantidade de peça ACCOUNTING_EXPORT_GLOBAL_ACCOUNT=Exportação com conta global? ACCOUNTING_EXPORT_LABEL=Exportar a Descrição? ACCOUNTING_EXPORT_AMOUNT=Exportar o montante? ACCOUNTING_EXPORT_DEVISE=Exportar Moedas Selectformat=Selecione o formato do arquivo ACCOUNTING_EXPORT_FORMAT=Selecione o formato do arquivo +ACCOUNTING_EXPORT_ENDLINE=Selecione o tipo de retorno do frete ACCOUNTING_EXPORT_PREFIX_SPEC=Especifique o prefixo do nome do arquivo +DefaultForService=Padrão para serviço +CantSuggest=Não posso sugerir AccountancySetupDoneFromAccountancyMenu=A maioria das configurações da Contabilidade é feita a partir do menu %s ConfigAccountingExpert=Configuração do módulo específico de contabilidade Journalization=Lançamento no Livro Chartofaccounts=Plano de contas +InvoiceLabel=Rótulo da fatura +OverviewOfAmountOfLinesNotBound=Visão geral do montante das linhas não vinculadas a uma conta contábil +OverviewOfAmountOfLinesBound=Visão geral do montante das linhas já vinculadas a uma conta contábil +DeleteCptCategory=Remover conta contábil do grupo +ConfirmDeleteCptCategory=Tem certeza de que deseja remover esta conta contábil do grupo de contabilidade? +JournalizationInLedgerStatus=Situação do registro do diário +AlreadyInGeneralLedger=Já foram Livros de registro em livros contabilísticos +NotYetInGeneralLedger=Ainda não publicado em livros contábeis +GroupIsEmptyCheckSetup=O grupo está vazio, verifique a configuração do grupo de contabilidade personalizado +DetailByAccount=Mostrar detalhes por conta +AccountWithNonZeroValues=Contas com valores não zerados +ListOfAccounts=Lista de contas +MainAccountForCustomersNotDefined=Conta contábil principal para clientes não definidos na configuração +MainAccountForSuppliersNotDefined=Conta contábil principal para fornecedores não definidos na configuração +MainAccountForUsersNotDefined=Conta contábil principal para usuários não definidos na configuração +MainAccountForVatPaymentNotDefined=Conta contábil principal para o pagamento do IVA não definido na configuração AccountancyArea=Área da Contabilidade AccountancyAreaDescIntro=O uso do módulo Contabilidade é feito em diversas etapas: AccountancyAreaDescActionOnce=As ações a seguir são normalmente realizadas apenas uma vez, ou uma vez por ano... +AccountancyAreaDescActionOnceBis=Os próximos passos devem ser feitos para economizar tempo no futuro, sugerindo-lhe a conta de contabilidade padrão correta ao fazer a reviravolta (gravação de registros em Livros de Registros e contabilidade geral) AccountancyAreaDescActionFreq=As ações a seguir são normalmente executadas a cada mês, semana ou dia para grandes empresas... +AccountancyAreaDescJournalSetup=PASSO %s: Crie ou verifique o conteúdo da sua lista de diários a partir do menu %s AccountancyAreaDescChartModel=ETAPA %s: Criar um modelo de gráfico de conta a partir do menu %s AccountancyAreaDescChart=ETAPA %s: Criar ou verificar o conteúdo do seu gráfico de conta a partir do menu %s +AccountancyAreaDescVat=PASSO %s: defina contas contábeis para cada taxa de IVA. Para isso, use a entrada de menu %s. +AccountancyAreaDescExpenseReport=PASSO %s: Defina contas contábeis padrão para cada tipo de relatório de despesas. Para isso, use a entrada de menu %s. +AccountancyAreaDescSal=PASSO %s: Defina contas contábeis padrão para pagamento de salários. Para isso, use a entrada de menu %s. +AccountancyAreaDescContrib=PASSO %s: Defina contas contábeis padrão para despesas especiais (impostos diversos). Para isso, use a entrada de menu %s. +AccountancyAreaDescDonation=PASSO %s: Defina contas contábeis padrão para doação. Para isso, use a entrada de menu %s. +AccountancyAreaDescMisc=PASSO %s: Defina a conta padrão obrigatória e contas contábeis padrão para transações diversas. Para isso, use a entrada de menu %s. +AccountancyAreaDescLoan=PASSO %s: Defina contas contábeis padrão para empréstimos. Para isso, use a entrada de menu %s. AccountancyAreaDescBank=PASSO %s:Defina contabilidade e código de diário para cada banco e contas contábil. Para isso, use o menu de entradas %s. AccountancyAreaDescProd=PASSO %s: Defina contas contábeis em seus produtos / serviços. Para isso, use o menu de entradas %s. +AccountancyAreaDescBind=PASSO %s: verifique a ligação entre as linhas %s existentes e a conta contábil feita, de modo que o aplicativo poderá periodizar transações no Livro de Registro em um clique. Complete as ligações faltantes. Para isso, use a entrada de menu %s. +AccountancyAreaDescWriteRecords=PASSO %s: efetue as transações no Livro de Registro. Para isso, vá para o menu %s e clique no botão %s . AccountancyAreaDescAnalyze=ETAPA %s: Adicionar ou editar as transações existentes, gerar os relatórios e exportar. AccountancyAreaDescClosePeriod=ETAPA %s: Fechar o período de forma que não possamos fazer modificações no futuro. +TheJournalCodeIsNotDefinedOnSomeBankAccount=Uma etapa obrigatória na configuração não foi concluída (o diário de código contábil não está definido para todas as contas bancárias) Selectchartofaccounts=Selecione gráfico ativo de contas ChangeAndLoad=Alterar e carregar Addanaccount=Adicionar uma conta contábil AccountAccounting=Conta contábil +SubledgerAccount=Conta Sub Livros de registros +ShowAccountingAccount=Mostrar conta contábil +ShowAccountingJournal=Mostrar contabilidade AccountAccountingSuggest=Sugerir Conta de Contabilidade MenuBankAccounts=Contas bancárias +MenuVatAccounts=Contas de Impostos sobre valor agregado +MenuLoanAccounts=Contas de empréstimos MenuProductsAccounts=Contas de produto ProductsBinding=Contas dos produtos Ventilation=Vinculando para as contas CustomersVentilation=Vinculando as faturas do cliente SuppliersVentilation=Vinculando as faturas do fornecedor +ExpenseReportsVentilation=Relatório de despesas obrigatórias WriteBookKeeping=Transações no Livro Razão Bookkeeping=Razão +ObjectsRef=Referência da fonte do objeto CAHTF=Total de Compras em fornecedores sem Impostos +TotalExpenseReport=Relatório de despesas totais InvoiceLines=Linhas da fatura a vincular InvoiceLinesDone=Linhas das faturas vinculadas +ExpenseReportLines=Relatórios de linhas de despesas obrigatórias +ExpenseReportLinesDone=Relatórios de linhas de despesas vinculadas IntoAccount=Vincular linha com conta contábil Processing=Processando EndProcessing=Processo foi finalizado. +LineOfExpenseReport=Relatório de linha de despesas NoAccountSelected=Nenhuma conta da Contabilidade selecionada VentilatedinAccount=Vinculado a conta contábil com sucesso NotVentilatedinAccount=Não vinculado a conta contábil +XLineSuccessfullyBinded=%s produtos / serviços vinculados com sucesso a uma conta contábil XLineFailedToBeBinded=%s produtos/serviços não estão vinculados a qualquer conta da Contabilidade ACCOUNTING_LIMIT_LIST_VENTILATION=Numero de elementos para vincular, mostrado por página (máximo recomendado: 50) ACCOUNTING_LIST_SORT_VENTILATION_TODO=Iniciar a página "Vinculações a fazer" ordenando pelos elementos mais recentes @@ -55,8 +98,8 @@ ACCOUNTING_LENGTH_GACCOUNT=Comprimento das contas de contabilidade geral (se o v ACCOUNTING_LENGTH_AACCOUNT=Comprimento das contas contábeis de terceiros (se você definir o valor para 6 aqui, a conta '401' aparecerá como '401000' na tela) ACCOUNTING_MANAGE_ZERO=Permite gerenciar diferentes números de zero no final de uma conta contábil. Necessário por alguns países (como a Suíça). Se manter desligado (padrão), você pode configurar os 2 seguintes parâmetros para pedir ao aplicativo que adicione uma mascara com zero virtual. BANK_DISABLE_DIRECT_INPUT=Desabilitar o registro direto da transação na conta bancária -ACCOUNTING_SELL_JOURNAL=Resumo diário das Vendas -ACCOUNTING_PURCHASE_JOURNAL=Resumo diário das Compras +ACCOUNTING_SELL_JOURNAL=Diário de Vendas +ACCOUNTING_PURCHASE_JOURNAL=Diário de Compras ACCOUNTING_MISCELLANEOUS_JOURNAL=Diário diversos ACCOUNTING_EXPENSEREPORT_JOURNAL=Diário de relatórios de despesas ACCOUNTING_ACCOUNT_TRANSFER_CASH=Conta contábil de transferência @@ -68,26 +111,38 @@ ACCOUNTING_SERVICE_BUY_ACCOUNT=Conta contábil padrão para os serviços comprad ACCOUNTING_SERVICE_SOLD_ACCOUNT=Conta contábil padrão para os serviços vendidos (se não for definido na listagem de serviços) Code_tiers=Terceiro LabelAccount=Conta rótulo +LabelOperation=Operação de etiqueta Sens=Significado TransactionNumShort=Nº da transação GroupByAccountAccounting=Agrupar pela conta da Contabilidade +AccountingAccountGroupsDesc=Você pode definir aqui alguns grupos de contabilidade. Eles serão usados ​​para relatórios contábeis personalizados. +ByPredefinedAccountGroups=Por grupos predefinidos +ByPersonalizedAccountGroups=Por grupos personalizados NotMatch=Não Definido DeleteMvt=Excluir linha do razão DelYear=Ano a ser deletado DelJournal=Resumo a ser deletado ConfirmDeleteMvt=Isso eliminará todas as linhas do Razão por ano e / ou de um período específico. Pelo menos um critério é necessário. +ConfirmDeleteMvtPartial=Isso eliminará a transação do Livro de Registro (todas as linhas relacionadas à mesma transação serão excluídas) DelBookKeeping=Excluir os registros do razão +DescJournalOnlyBindedVisible=Esta é uma visão de registro que é vinculada a uma conta contábil e pode ser gravada no Livro de Registro. VATAccountNotDefined=Conta para ICMS não definida ThirdpartyAccountNotDefined=Conta para terceiro não definida ProductAccountNotDefined=Conta para produto não definida +FeeAccountNotDefined=Conta por taxa não definida BankAccountNotDefined=Conta para o banco não definida ThirdPartyAccount=Conta de terceiro ListeMvts=Lista de movimentações ErrorDebitCredit=Débito e Crédito não pode ter valor preenchido ao mesmo tempo +AddCompteFromBK=Adicionar contas contábeis ao grupo DescThirdPartyReport=Consulte aqui a lista dos terceiros, clientes e fornecedores, e as suas contas contábeis ListAccounts=Lista das contas contábeis +UnknownAccountForThirdparty=Conta de terceiros desconhecida. Usaremos %s +UnknownAccountForThirdpartyBlocking=Conta de terceiros desconhecida. Erro de bloqueio +UnknownAccountForThirdpartyAndWaitingAccountNotDefinedBlocking=Conta de terceiros desconhecida e conta de espera não definida. Erro de bloqueio Pcgtype=Plano de Contas Pcgsubtype=Subgrupo de Contas +PcgtypeDesc=Grupo e subgrupo de conta são usados ​​como critérios de "filtro" e "agrupamento" predefinidos para alguns relatórios contábeis. Por exemplo, 'RESULTADO' ou 'DESPESAS' são utilizados como grupos para contas contábeis de produtos para construir o relatório de despesas / renda. TotalVente=Volume total negociado sem Impostos TotalMarge=Margem de vendas totais DescVentilCustomer=Consulte aqui a lista linhas de pedidos de clientes vinculadas (ou não) a uma conta contábil de produto @@ -97,15 +152,29 @@ DescVentilTodoCustomer=Linhas da fatura ainda não vinculadas à conta da Contab ChangeAccount=Mudar a conta da Contabilidade do produto/serviço para as linhas selecionadas com a seguinte conta da Contabilidade DescVentilSupplier=Consulte aqui a lista das linhas da fatura do fornecedor vinculadas ou ainda não vinculadas a uma conta da Contabilidade de um produto DescVentilDoneSupplier=Consulte aqui a lista das linhas de faturas de fornecedores e sua conta de contabilidade +DescVentilTodoExpenseReport=Relatórios de linhas de despesas de ligação já não estão vinculadas com uma conta contábil com taxa +DescVentilExpenseReport=Consulte aqui a lista de relatório de linhas de despesas vinculadas (ou não) a uma conta contábil com taxa +DescVentilExpenseReportMore=Se você configurar a conta contábil no tipo de relatórios de linha de despesas, o aplicativo poderá fazer toda a vinculação entre seus relatórios de linhas de despesas e a conta contábil do seu plano de contas, com apenas um clique com o botão "%s" . Se a conta não foi definida no dicionário de tarifas ou se você ainda possui algumas linhas não vinculadas a nenhuma conta, você terá que fazer uma ligação manual no menu " %s ". +DescVentilDoneExpenseReport=Consulte aqui a lista dos relatórios de linha de despesas e sua conta contábil de taxas ValidateHistory=Vincular Automaticamente AutomaticBindingDone=Vinculação automática realizada ErrorAccountancyCodeIsAlreadyUse=Erro, você não pode excluir esta conta contábil, pois ela esta em uso MvtNotCorrectlyBalanced=Existem diferenças nos movimentos . Crédito = %s. Débito = %s GeneralLedgerIsWritten=As transações estão escritas no Razão +GeneralLedgerSomeRecordWasNotRecorded=Algumas das transações não podem ser enviadas. Se não houver outra mensagem de erro, isso provavelmente é porque eles já foram despachados. +NoNewRecordSaved=Não há mais registro para lançar ListOfProductsWithoutAccountingAccount=Lista de produtos não vinculados a qualquer conta da Contabilidade ChangeBinding=Alterar a vinculação +AddAccountFromBookKeepingWithNoCategories=Contagem disponível ainda não em um grupo personalizado +CategoryDeleted=A categoria para a conta contábil foi removida AccountingJournals=Relatórios da contabilidade -AccountingJournalType2=De vendas +AccountingJournal=Livro de Registro de contabilidade +NewAccountingJournal=Novo Livro de Registro contábil +ShowAccoutingJournal=Mostrar contabilidade +AccountingJournalType1=Operação diversa +AccountingJournalType9=Novo +ErrorAccountingJournalIsAlreadyUse=Esta Livro de Registro já está sendo usado +ExportDraftJournal=Livro de Registro de rascunho de exportação Selectmodelcsv=Escolha um modelo de exportação Modelcsv_CEGID=Exportação em direção CEGID Especialista em Contabilidade Modelcsv_COALA=Exportar para Sage Coala @@ -114,6 +183,9 @@ Modelcsv_ciel=Exportar para Sage Ciel Compta ou Compta Evolution Modelcsv_quadratus=Exportar para Quadratus QuadraCompta Modelcsv_ebp=Exportar para EBP Modelcsv_cogilog=Exportar para Cogilog +Modelcsv_agiris=Exportar para Agiris +Modelcsv_configurable=Exportação configurável +ChartofaccountsId=ID do gráfico de contas InitAccountancy=Contabilidade Inicial InitAccountancyDesc=Esta página pode ser usado para inicializar um código de barras em objetos que não têm código de barras definidas. Verifique que o módulo de código de barras tenha sido instalado antes. DefaultBindingDesc=Esta página pode ser usada para definir a conta padrão a ser usada para conectar o registro das transações sobre o pagamento de salários, doações, taxas e o ICMS quando nenhuma conta da Contabilidade específica tiver sido definida. @@ -123,7 +195,13 @@ OptionModeProductSellDesc=Exibir todos os produtos sem uma conta da Contabilidad OptionModeProductBuyDesc=Exibir todos os produtos sem uma conta da Contabilidade definida para compras. CleanFixHistory=Remover o código contábil de linhas que não existem nos gráficos de conta CleanHistory=Redefinir todas as vinculações para o ano selecionado +PredefinedGroups=Grupos predefinidos +WithoutValidAccount=Sem conta dedicada válida +ValueNotIntoChartOfAccount=Este valor da conta contábil não existe no gráfico de conta Range=Faixa da conta da Contabilidade +SomeMandatoryStepsOfSetupWereNotDone=Algumas etapas obrigatórias de configuração não foram feitas, preencha-as ErrorNoAccountingCategoryForThisCountry=Nenhum Plano de Contas Contábil disponível para este país %s (Veja Home - Configurações- Dicionário) ExportNotSupported=O formato de exportação definido não é suportado nesta página BookeppingLineAlreayExists=Linhas já existentes na Contabilidade +UseMenuToSetBindindManualy=A detecção automática não é possível, use o menu %s para fazer a ligação manualmente +WarningReportNotReliable=Aviso, este relatório não é baseado no Livro de Registro, portanto, não contém transação modificada manualmente no Livro de Registro. Se o seu livro está atualizado, a visão da contabilidade é mais precisa. diff --git a/htdocs/langs/pt_BR/admin.lang b/htdocs/langs/pt_BR/admin.lang index 13a39d6bb8b..d686d50cace 100644 --- a/htdocs/langs/pt_BR/admin.lang +++ b/htdocs/langs/pt_BR/admin.lang @@ -37,6 +37,8 @@ WebUserGroup=Servidor Web para usuário/grupo NoSessionFound=Seu PHP parece não permitir listar as sessões ativas. Diretório usado para salvar sessões (%s) pode ser protegido (por exemplo, pelas permissões do sistema operacional ou por diretiva PHP "open_basedir"). DBStoringCharset=Charset base de dados para armazenamento de dados (Database charset to store data) DBSortingCharset=Charset base de dados para classificar os dados (Database charset to sort data) +ClientCharset=Conjunto de clientes +ClientSortingCharset=Conferência de Clientes WarningModuleNotActive=Módulo %s deve ser Ativado! WarningOnlyPermissionOfActivatedModules=Somente as permissões relacionadas com os módulos ativados que aparecem aqui. DolibarrSetup=Instalação/Atualização do Dolibarr @@ -112,6 +114,7 @@ CurrentSessionTimeOut=A sessão expirou YouCanEditPHPTZ=Para definir um fuso horário diferente no PHP (não exigido), você pode tentar adicionar um arquivo .htaccess com uma linha como esta : "SetEnv TZ Europe/Paris" HoursOnThisPageAreOnServerTZ=Atenção, ao contrário de outras telas, o horário nesta página não está no seu fuso horário local, mas no fuso horário do servidor. MaxNbOfLinesForBoxes=Número máximo de linahs para os widgets +AllWidgetsWereEnabled=Todos as ferramentas disponíveis estão habilitadas PositionByDefault=Posição Padrão(default) MenusDesc=O Gerenciador de Menu, define o conteúdo das barras de menu (Horizontal e Vertical). MenusEditorDesc=O editor do menu permite que você defina entradas personalizadas. Use-o com cuidado para evitar instabilidade e entradas no menu que não serão encontradas.
Alguns módulos adicionam entradas no menu (na maioria das vezes, em menu Tudo). Se remover algumas dessas entradas por engano, você poderá restaurá-las desabilitando e reabilitando o módulo. @@ -222,7 +225,7 @@ MAIN_MAIL_SMTP_SERVER=Servidor SMTP/SMTPS (Como padrão em php.ini: %s) MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=Porta SMTP/SMTPS (Não definido no PHP nos sistemas tipo Unix) MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=Servidor SMTP/SMTPS (Não definido no PHP nos sistemas tipo Unix) MAIN_MAIL_EMAIL_FROM=E-mail de envio para os e-mails automáticos (Como padrão no php.ini: %s) -MAIN_MAIL_ERRORS_TO=E-mail de envio usado para o retorno de erros dos e-mails enviados +MAIN_MAIL_ERRORS_TO=Email usado como 'Erros-Para' campo em e-mails enviados MAIN_MAIL_AUTOCOPY_TO=Enviar sistematicamente uma cópia carbono oculta de todos os e-mails enviados para MAIN_DISABLE_ALL_MAILS=Desabilitar todos os envios de e-mail (com o objetivo de teste ou demonstração) MAIN_MAIL_SENDMODE=Método usado para o envio de E-Mails @@ -269,7 +272,7 @@ LastActivationIP=Último IP de ativação UpdateServerOffline=Atualização de servidor off-line WithCounter=Gerenciar um contador GenericMaskCodes=Você pode criar suas próprias mascaras para gerar as referências automáticas.
Como exemplo inicial a mascara 'CLI{000}' vai gerar a ref. CLI001,CLI002,... as mascaras são:
Mascara de contagem {0000}, essa mascara vai contar para cada nova ref. ex:0001,0002,0003,...
Mascara de número inicial ex:{000+100} -> 101,102,103,... ex2:{0000+123} -> 0124,0125,...
Mascara da data {dd} dias (01 a 31), {mm} mês (01 a 12), {yy} {yyyy} para anos ex:{dd}/{mm}/{yy} -> 28/07/15
-GenericMaskCodes2={cccc} o código do cliente com n caracteres
{cccc000} o código do cliente com n caracteres é seguido por um contador dedicado ao cliente. Este contador dedicado ao cliente é redefinido ao mesmo tempo do contador global.
{tttt} O código do tipo de terceiros com n caracteres (veja menu Início - Configuração - Dicionário - Tipos de terceiros). Se você adicionar esta etiqueta (tag), o contador será diferente para cada tipo de terceiro.
+GenericMaskCodes2= {cccc} o código do cliente em n caracteres
{cccc000} o código do cliente em n caracteres é seguido por um contador dedicado ao cliente. Este contador dedicado ao cliente é reiniciado ao mesmo tempo que o contador global.
{tttt} O código de tipo de terceiros em n caracteres (consulte o menu Início - Configuração - Dicionário - Tipos de terceiros) . Se você adicionar esta etiqueta, o contador será diferente para cada tipo de terceiro.
GenericMaskCodes3=Não é permitido espaços.
Mascara fixa, basta colocar uma letra ou número sem {} ex:CLI,FOR

GenericMaskCodes4a=Exemplo com o 99º %s do terceiro ACompanhia, com data 2007-01-31:
GenericMaskCodes4b=Ex: CLI{dd}{mm}{yy}.{000} -> CLI280715.001
@@ -342,13 +345,13 @@ ExtrafieldCheckBox=Caixas de seleção ExtrafieldCheckBoxFromList=Caixas de seleção da tabela ExtrafieldLink=Link para um objeto ComputedFormula=Campo computado -ComputedFormulaDesc=Aqui você pode inserir um fórmula usando outras propriedades do objeto ou qualquer código PHP para obter um valor dinamicamente computado. Você pode usar quaisquer fórmulas compatíveis com PHP, incluindo o operador de condição "?" e os seguintes objetos globais : $db, $conf, $langs, $mysoc, $user, $object.
ATENÇÃO: Somente algumas propriedades do $object podem estar disponíveis. Se você precisar de propriedades não carregadas, basta buscar o objeto na sua fórmula como no segundo exemplo.
Usando um campo computado, significa que você mesmo não pode inserir qualquer valor a partir da interface. Além disso, se houver um erro de sintaxe, a fórmula pode retornar nada.

Exemplo de fórmula :
$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Exemplo para recarregar o objeto
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'

Outro exemplo de fórmula para forçar o carregamento do objeto e do seu objeto pai (superior):
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Projeto pai não encontrado' -ExtrafieldParamHelpselect=A lista dos valores de ser linhas com o formato key,value (onde key 'chave' não pode ser '0')

por exemplo :
1,value1
2,value2
code3,value3
...

A fim de ter a lista dependendo de uma outra lista de atributos complementares :
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

A fim de ter a lista dependente de uma outra lista :
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key +ComputedFormulaDesc=Você pode inserir aqui uma fórmula usando outras propriedades do objeto ou qualquer codificação PHP para obter um valor calculado dinâmico. Você pode usar todas as fórmulas compatíveis com PHP, incluindo o "?" operador de condição e seguinte objeto global: $ db, $ conf, $ langs, $ mysoc, $ user, $ object .
AVISO : Somente algumas propriedades de $ O objeto pode estar disponível. Se você precisar de propriedades não carregadas, basta buscar o objeto na sua fórmula, como no segundo exemplo.
Por usar um campo calculado, você não pode entrar qualquer valor da interface. Além disso, se houver um erro de sintaxe, a fórmula pode não retornar nada.

Exemplo de fórmula:
$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Exemplo para recarregar objeto
(($ reloadedobj = new Societe ($ db)) && ($ reloadedobj-> fetch ($ obj-> id? $ Obj-> id: ($ obj-> rowid? $ Obj-> rowid: $ object-> id))> 0))? $ reloadedobj-> array_options ['options_extrafieldkey'] * $ reloadedobj-> capital / 5: '-1'

Outro exemplo de fórmula para forçar carga de objeto e seu objeto pai:
(($ reloadedobj = new Task ($ db)) && ($ reloadedobj-> fetch ($ object-> id)> 0) && ($ secondloadedobj = new Project ($ db)) && ($ secondloadedobj-> fetch ($ reloadedobj-> fk_project )> 0))? $ secondloadedobj-> ref: 'Projeto pai não encontrado' +ExtrafieldParamHelpselect=A lista de valores deve ser linhas com chave de formato, valor (onde a chave não pode ser '0')

por exemplo:
1, value1
2, value2
code3, value3
...

Para ter a lista dependendo de outra lista de atributos complementares:
1, value1 | options_ parent_list_code : parent_key
2, value2 | options_ parent_list_code : parent_key

Para ter a lista dependendo de outra lista:
1, value1 | parent_list_code : parent_key
2, value2 | parent_list_code : parent_key ExtrafieldParamHelpcheckbox=A lista dos valores deve ser linhas com o formato key,value (onde key 'chave' não pode ser '0')

por exemplo :
1,value1
2,value2
3,value3
... ExtrafieldParamHelpradio=A lista dos valores deve ser linhas com o formato key,value (onde key 'chave' não pode ser '0')

por exemplo :
1,value1
2,value2
3,value3
... ExtrafieldParamHelpsellist=Lista de valores oriundos de uma tabela
Sintaxe : table_name:label_field:id_field::filter
Exemplo : c_typent:libelle:id::filter

- idfilter é necessariamente uma chave interna primária
- filter pode ser um teste simples (ex. active=1) para exibir somente valores ativos
Você também pode usar $ID$ no filtro que é a id atual do objeto atual
Para realizar uma SELEÇÃO no filtro, use $SEL$
Se você deseja filtrar nos campos extras, use a sintaxe extra.fieldcode=... (onde o código do campo é o código do campo extra)

A fim de ter a lista dependendo de uma outra lista de atributos complementares:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

A fim de ter a lista dependendo de uma outra lista:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=A lista de valores oriundos de uma tabela
Sintaxe : table_name:label_field:id_field::filter
Exemplo : c_typent:libelle:id::filter

o filtro pode ser um teste simples (ex. ativo=1) para exibir somente valores ativos
Você também pode usar $ID$ no filtro que é a id atual do objeto atual
Para realizar uma SELEÇÃO no filtro, use $SEL$
Se você deseja filtrar nos campos extras, use a sintaxe extra.fieldcode=... (onde o código do campo é o código do campo extra)

A fim de ter a lista dependendo de uma outra lista de atributos complementares :
c_typent:libelle:id:options_parent_list_code|parent_column:filter

A fim de ter a lista dependendo de uma outra lista :
c_typent:libelle:id:parent_list_code|parent_column:filter -ExtrafieldParamHelplink=Os parâmetros devem ser ObjectName:Classpath
Sintaxe : ObjectName:Classpath
Exemplo : Sociedade:sociedade/class/sociedade.class.php +ExtrafieldParamHelplink=Os parâmetros devem ser ObjectName:Classpath
Sintaxe: ObjectName:Classpath
Exemplos:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php LibraryToBuildPDF=Biblioteca usada para a geração de PDF WarningUsingFPDF=Aviso: Sua conf.php Contém diretrize dolibarr_pdf_force_fpdf=1. Isso significa que você usa a biblioteca FPDF para gerar arquivos em PDF. Essa biblioteca é velha e não suporta muitas novas funções (Unicode, imagem transparente, cyrillic, línguas arábicas e asiáticas,...), portanto pode ocorrer alguns erros durante a geração de PDF.
Para corrigir esse problema e ter todo o suporte na geração de PDF, baixe Biblioteca TCPDF, então comente ou remova essa linha $dolibarr_pdf_force_fpdf=1, e adicione essa $dolibarr_lib_TCPDF_PATH='path_to_TCPDF_dir' LocalTaxDesc=Alguns paises aplicam de 2 a 3 taxas em cada linha de fatura. Se for esse caso, escolha o tipo de segunda e terceira taxa. Os possíveis tipos são:
1 : Taxa local aplicam em produtos e serviços sem ICMS (ICMS não é aplicada em taxa local)
2 : Taxa local aplicam em produtos e serviços antes do ICMS (ICMS é calculado no montante + taxa local)
3 : Taxa local aplicam em produtos sem o ICMS (ICMS não é aplicada na taxa local)
4 : Taxa local aplicam nos produtos antes do ICMS (ICMS é calculado no montante + taxa local)
5 : Taxa local aplicam no serviço sem o ICMS (ICMS não é aplicado em taxa local)
6 : Taxa local aplicam em serviços antes do ICMS (ICMS é calculado no montante + taxa local) @@ -381,8 +384,8 @@ Use3StepsApproval=Por padrão, os Pedidos de Compra necessitam ser criados e apr UseDoubleApproval=Usar uma aprovação de 3 etapas quando o valor (sem taxa) é maior do que ... WarningPHPMail=ALERTA: Alguns provedores de e-mail (como o Yahoo) não permite que você envie um e-mail de um outro servidor que não seja o servidor do Yahoo, se o endereço de e-mail usado como remetente é o seu e-mail do Yahoo (como myemail@yahoo.com, myemail@yahoo.fr, ...). A sua configuração atual usa o servidor do aplicativo para enviar e-mails, assim alguns destinatários (os que forem compatíveis com o protocolo restritivo DMARC), perguntarão ao Yahoo se eles podem aceitar o seu e-mail e o Yahoo responderá "não", pois o servidor não é um servidor de propriedade do Yahoo, assim alguns dos seus E-mails enviados poderão não ser aceitos.
Se o seu provedor de E-mail (como o Yahoo) possui esta restrição, você deve mudar a configuração do E-mail para escolher o outro método "Servidor SMTP" e inserir o servidor SMTP e as credenciais fornecidas pelo seu provedor de E-mail (peça ao seu provedor de EMail para obter as credenciais SMTP para a sua conta). ClickToShowDescription=Clique para exibir a descrição -DependsOn=Este módulo necessita do(s) módulo(s) -RequiredBy=Este módulo é exigido pelo(s) módulo(s) +DependsOn=Este módulo precisa de módulo(s) +RequiredBy=Este módulo é exigido por módulo(s) TheKeyIsTheNameOfHtmlField=Este é o nome do campo HTML. Ele precisa ter conhecimentos técnicos para ler o conteúdo da página HTML para obter o nome da chave de um campo. PageUrlForDefaultValues=Você deve inserir aqui a URL relativa da sua página. Se você incluir parâmetros na URL, os valores padrão serão efetivos se todos os parâmetros são definidos no mesmo valor. Exemplos : PageUrlForDefaultValuesCreate=
Para o formulário que cria um novo terceiro, isto é %s,
Se você deseja apenas o valor padrão se a URL tem algum parâmetro, você pode usar %s @@ -408,7 +411,7 @@ Module25Name=Pedidos de Clientes Module25Desc=Gestor de Pedidos de Clientes Module30Desc=Gestor de Faturas e Notas de Créditos para Clientes. Gestor de faturas para Fornecedores Module40Desc=Gestor de Fornecedores e Compra (Pedidos e Faturas) -Module42Name=Registros +Module42Name=Notas de depuração Module42Desc=Recursos de registro (arquivo, syslog, ...). Tais registros são para propósitos técnicos/debug. Module49Desc=Gestor de Editores Module50Desc=Gestor de Produtos @@ -449,6 +452,7 @@ Module320Desc=Adiciona um RSS feed dentro das páginas de tela do Dolibarr Module330Name=Marcadores de Página Module330Desc=Gerenciamento de agendamentos Module400Name=Projetos +Module400Desc=Gestão de projetos, oportunidades / espera e / ou tarefas. Você também pode atribuir qualquer elemento (fatura, ordem, proposta, intermediação, ...) a um projeto e obter uma visão panorâmica do projeto. Module410Desc=Integração do Webcalendar Module500Name=Taxas, Contribuições Sociais e Dividendos Module500Desc=Gestor Taxas, Contribuições Sociais e Dividentos @@ -458,6 +462,8 @@ Module520Desc=Gestão dos empréstimos Module600Name=Notificações sobre eventos de negócio Module600Desc=Enviar notificações por EMail (disparadas por alguns eventos de negócio) para usuários (configuração definida em cada usuário), para contatos de terceiros (configuração definida em cada terceiro) ou para emails fixos Module600Long=Note que este módulo é dedicado a enviar e-mails em tempo real quando um evento de negócio dedicado ocorre. Se você está buscando uma função para enviar avisos por e-mail sobre os eventos da sua agenda, vá para a configuração do módulo Agenda. +Module610Name=Variáveis de produtos +Module610Desc=Permite a criação de variável de produtos com base em atributos (cor, tamanho, ...) Module700Name=Doações Module700Desc=Gestor de Doações Module770Desc=Gestão e reivindicação de relatórios de despesas (transporte, refeição, ...) @@ -474,8 +480,8 @@ Module2200Desc=Habilitar o uso de expressões matemáticas para os preços Module2300Desc=Gerenciamento dos trabalhos agendados (alias cron ou tabela chrono) Module2400Name=Eventos / Agenda Module2400Desc=Acompanhe os eventos realizados e futuros. Deixe o aplicativo registrar eventos automáticos para fins de rastreamento ou gravar eventos manuais ou reuniões. -Module2500Name=Gerenciamento de Conteúdo Eletrônico -Module2500Desc=Salve e compartilhe documentos +Module2500Name=SGBD / GCE +Module2500Desc=Sistema de Gerenciamento de Documentos / Gerenciamento de Conteúdo Eletrônico. Organização automática de seus documentos gerados ou armazenados. Compartilhe-os quando precisar. Module2600Name=Serviços API/Web (Servidor SOAP) Module2600Desc=Ativa o servidor de serviços web do Dolibarr Module2610Desc=Permitir que o servidor prestação de serviços de API REST do Dolibarr @@ -484,8 +490,8 @@ Module2660Desc=Habilitar o webservices do Dolibarr (pode ser usado para empurrar Module2700Desc=Usar serviço online do Gravatar (www.gravatar.com) para mostrar foto de usuários/membros (achado pelos emails deles). Precisa de acesso a internet Module2900Desc=Capacidade de conversão com o GeoIP Maxmind Module3100Desc=Adicionar um botão Skype nos cartões dos usuários / terceiros / contatos membros -Module3200Name=Registros Não Reversíveis -Module3200Desc=Ativa o registro de alguns eventos de negócio em um registro não reversível. Os eventos são arquivados em tempo real. O registro é uma tabela de eventos em cadeia que podem ser lidos e exportados. Este módulo pode ser obrigatório em alguns países. +Module3200Name=Arquivos inalteráveis +Module3200Desc=Ative gerador de log de alguns eventos comerciais em um registro inalterável. Os eventos são arquivados em tempo real. O gerador de log é uma tabela de eventos encadeados que podem ser lidos e exportados somente. Este módulo pode ser obrigatório para alguns países. Module4000Name=RH Module4000Desc=Gerenciamento de recursos humanos (gerenciamento do departamento, contratos dos funcionários e benefícios) Module5000Name=Multi-Empresas @@ -496,8 +502,10 @@ Module10000Desc=Crie sites públicos com um editor WYSIWYG. Basta configurar seu Module20000Name=Gerenciamento de folgas e férias Module20000Desc=Autorizar e acompanhar solicitações de licença de funcionários Module39000Desc=Lote ou número de serie, para compra e venda administrado produtos +Module50000Desc=Módulo para oferecer uma página de pagamento on-line aceitando pagamentos com cartão de crédito / débito via PayBox. Isso pode ser usado para permitir que seus clientes façam pagamentos gratuitos ou para um pagamento em um determinado objeto Dolibarr (fatura, pedido, ...) Module50100Name=Ponto de Vendas Module50100Desc=Módulo ponto de vendas (PDV) +Module50200Desc=Módulo para oferecer uma página de pagamento on-line aceitando pagamentos usando o PayPal (cartão de crédito ou crédito PayPal). Isso pode ser usado para permitir que seus clientes façam pagamentos gratuitos ou para um pagamento em um determinado objeto Dolibarr (fatura, pedido, ...) Module50400Desc=Gerenciamento da contabilidade (entradas duplicadas, suporta livros contábeis gerais e auxiliares) Module54000Name=ImprimirIPP Module54000Desc=Imprima via Cups IPP @@ -762,10 +770,12 @@ DictionaryTypeContact=Tipos Contato / Endereço DictionaryEcotaxe=Ecotaxa (REEE) DictionaryPaperFormat=Formatos de papel DictionaryFormatCards=Formatos dos cartões +DictionaryFees=Relatório de despesas - Tipos de linhas de relatório de despesas DictionarySendingMethods=Métodos do transporte DictionaryStaff=Pessoal DictionaryOrderMethods=Métodos de compra DictionarySource=Origem das propostas / ordens +DictionaryAccountancyCategory=Grupos personalizados para relatórios DictionaryAccountancysystem=Modelos para o plano de contas DictionaryAccountancyJournal=Relatórios da contabilidade DictionaryEMailTemplates=Modelos de E-mails @@ -775,6 +785,7 @@ DictionaryOpportunityStatus=Status oportunidade para projeto / lead SetupSaved=Configurações Salvas SetupNotSaved=Configuração não salva BackToDictionaryList=Voltar para a lista de dicionários +TypeOfRevenueStamp=Tipo de selo de receita VATManagement=Gestor de ICMS VATIsUsedDesc=Como padrão, quando da criação de orçamentos, faturas, pedidos, etc. a taxa do ICMS acompanha a regra padrão ativa:
se o vendedor não estiver sujeito ao ICMS, então o padrão do ICMS é 0. Fim da regra.
Se o (país da venda= país da compra), então o ICMS por padrão é igual ao ICMS do produto no país da venda. Fim da regra.
Se o vendedor e o comprador estão na Comunidade Europeia e os produtos são meios de transporte (carro, navio, avião), o VAT padrão é 0 (O VAT deverá ser pago pelo comprador à receita federal do seu país e não ao vendedor). Fim da regra.
Se o vendedor e o comprador estão na Comunidade Europeia e o comprador não é uma pessoa jurídica, então o VAT por padrão é o VAT do produto vendido. Fim da regra.
Se o vendedor e o comprador estão na Comunidade Europeia e o comprador é uma pessoa jurídica, então o VAT é 0 por padrão . Fim da regra.
Em qualquer outro caso o padrão proposto é ICMS=0. Fim da regra. VATIsNotUsedDesc=Por padrão o ICMS sugerido é 0, o que pode ser usado em casos tipo associações, pessoas ou pequenas empresas. @@ -955,7 +966,7 @@ PathToDocuments=Caminho para documentos SendmailOptionMayHurtBuggedMTA=Função para envios de correspondência usando o método "PHP mail direct" irá gerar uma mensagem na correspondência que pode não estar corretamente analisada por algum servidor de recepção de correspondência. Resultando que essa correspondência não pode ser lida pela pessoa hostiada por essa plataforma bugada. É caso de alguns provedores de internet (Ex: Orange na França). Isso não é um problema para o Dolibarr nem dentro PHP mas para servidor receptor de correspondência. Você pode contudo adicionar a opção MAIN_FIX_FOR_BUGGED_MTA para 1 dentro da configuração, outra modificação do Dolibarr para evitar isso. Contudo você pode sofrer problemas com outros servidores que respeitão estritamente os padrões SMTP. A outra solução (RECOMENDADA) é usar o método "SMTP socket library" que não tem desvantagens. TranslationKeySearch=Buscar uma chave ou variável de tradução TranslationOverwriteKey=Sobrescrever uma variável de tradução -TranslationDesc=Como definir o idioma do aplicativo exibido: 1 * Sistema inteiro: menu 2 Home - Configuração - Exibição 2 3 * Por usuário: Use a guia 4 Configuração da exibição do usuário 4 no cartão do usuário (clique no nome de usuário na parte superior da tela). +TranslationDesc=Como definir o idioma do aplicativo exibido:
* Systemwide: menu Início - Configuração - Exibição
* Por usuário: use a guia Configuração da tela do usuário no cartão do usuário ( clique no nome de usuário na parte superior da tela). TranslationOverwriteDesc=Você também pode sobrescrever as variáveis preenchendo a tabela a seguir. Escolha o seu idioma a partir do "%s" dropdown, insira a variável com a chave da transação em "%s" e a sua nova tradução em "%s" TranslationOverwriteDesc2=Você pode usar a outra aba para lhe ajudar a conhecer a chave de tradução a ser empregada TranslationString=Variável de tradução @@ -1288,6 +1299,8 @@ AGENDA_USE_EVENT_TYPE_DEFAULT=Definido automaticamente esse valor padrão para o AGENDA_DEFAULT_FILTER_TYPE=Use automaticamente este tipo de evento no filtro de busca da agenda AGENDA_DEFAULT_FILTER_STATUS=Use automaticamente este estado no filtro das buscas da agenda AGENDA_DEFAULT_VIEW=Qual aba voçê quer abrir por padrão quando o menu Agenda e selecionado +AGENDA_REMINDER_EMAIL=Ativar lembrete de evento por emails (A opção de lembrar / atraso pode ser definida em cada evento). Nota: Módulo 1 %s deve ser habilitado e configurado corretamente para que o lembrete seja enviado na freqüência correta. +AGENDA_REMINDER_BROWSER=Ativar lembrete de envento no navegador de usuários (quando a data do evento é atingida, cada usuário pode recusar isso a partir da pergunta de confirmação do navegador) AGENDA_REMINDER_BROWSER_SOUND=Habilitar a notificação sonora AGENDA_SHOW_LINKED_OBJECT=Exibir objeto conectado na visualização da agenda ClickToDialSetup=Configurações do módulo clique para discar @@ -1442,7 +1455,7 @@ activateModuleDependNotSatisfied=O módulo "%s" depende do módulo "%s" que est CommandIsNotInsideAllowedCommands=O comando que você tenta executar não está na lista de comandos permitidos definidos no parâmetro $dolibarr_main_restrict_os_commands no arquivo conf.php. LandingPage=Página de destino SamePriceAlsoForSharedCompanies=Se você usa um módulo de múltiplas empresas, com a escolha de "Preço único", o preço será também o mesmo para todas as empresas se os produtos são compartilhados entre os ambientes. -ModuleEnabledAdminMustCheckRights=O módulo foi ativado. As permissões para o(s) módulo(s) ativado(s) são atribuídas apenas pelos usuários administradores. Você pode precisar atribuir permissões para outros usuários ou grupos manualmente. +ModuleEnabledAdminMustCheckRights=O módulo foi ativado. As permissões para módulo(s) ativado foram fornecidas apenas aos usuários de administração. Talvez seja necessário conceder permissões para outros usuários ou grupos manualmente, se necessário. UserHasNoPermissions=Este usuário não possui permissões definidas TypeCdr=Use "Nenhum" se a data do prazo de pagamento da fatura mais um delta em dias (delta é o campo "Nº de dias")
Use "No fim do mês", se, após o delta, a data deve ser aumentada para alcançar o fim do mês (+ um "Prazo" opcional em dias)
Use "Atual/Próximo" para ter a data do prazo de pagamento sendo o primeiro Nº do mês (N é armazenado no campo "Nº de dias") BaseCurrency=Moeda de referência da companhia (ir para a configuração da companhia para alterá-la) diff --git a/htdocs/langs/pt_BR/banks.lang b/htdocs/langs/pt_BR/banks.lang index 187347403bc..41e59b35c22 100644 --- a/htdocs/langs/pt_BR/banks.lang +++ b/htdocs/langs/pt_BR/banks.lang @@ -1,5 +1,7 @@ # Dolibarr language file - Source file is en_US - banks MenuBankCash=Banco/Caixa +MenuVariousPayment=Pagamentos diversos +MenuNewVariousPayment=Novo pagamento diverso BankAccounts=Contas bancárias ShowAccount=Mostrar conta AccountRef=Ref. da conta financeira @@ -20,6 +22,10 @@ ShowAllTimeBalance=Mostrar saldo desde o início AllTime=Desde o início Reconciliation=Reconciliação RIB=Número da conta bancária +SwiftValid=Código de identificação bancária / Sociedade para Telecomunicações Financeiras Interbancárias Internacionais válido +SwiftVNotalid=Código de identificação bancária / Sociedade para Telecomunicações Financeiras Interbancárias Internacionais inválido +IbanValid=Numero de conta bancária valida +IbanNotValid=Numero de conta bancária inválida AccountStatement=Extrato da conta AccountStatementShort=Extrato AccountStatements=Extratos da conta @@ -122,3 +128,10 @@ CheckRejectedAndInvoicesReopened=Cheque devolvido e faturas reabertas BankAccountModelModule=Temas de documentos para as contas bancárias. DocumentModelSepaMandate=Tema do mandato SEPA. Útil somente para os países europeus na Comunidade Europeia. DocumentModelBan=Tema para imprimir a página com a informação BAN. +NewVariousPayment=Novos pagamentos diversos +VariousPayment=Pagamentos diversos +VariousPayments=Pagamentos diversos +ShowVariousPayment=Mostrar pagamentos diversos +AddVariousPayment=Adicionar pagamentos diversos +YourSEPAMandate=Seu mandato Área Única de Pagamentos em Euros +FindYourSEPAMandate=Este é o seu mandato da SEPA (Área Única de Pagamentos em Euros) para autorizar a nossa empresa a fazer uma ordem de débito direto para o seu banco. Obrigado em devolvê-lo assinado (digitalização do documento assinado) ou enviado por correio para diff --git a/htdocs/langs/pt_BR/bills.lang b/htdocs/langs/pt_BR/bills.lang index 817faa03b93..f8532a3fd3b 100644 --- a/htdocs/langs/pt_BR/bills.lang +++ b/htdocs/langs/pt_BR/bills.lang @@ -3,14 +3,19 @@ BillsCustomers=Faturas a clientes BillsCustomer=Fatura de cliente BillsSuppliers=Faturas de fornecedores BillsCustomersUnpaid=Faturas de clientes não pagos +BillsCustomersUnpaidForCompany=Faturas de clientes não pagas para %s BillsSuppliersUnpaid=Faturas de fornecedores não pagos +BillsSuppliersUnpaidForCompany=Faturas de fornecedores não pagas para %s BillsLate=Pagamentos atrasados BillsStatistics=Estatísticas de faturas de clientes BillsStatisticsSuppliers=Estatísticas faturas de Fornecedores +DisabledBecauseDispatchedInBookkeeping=Desativado porque a nota fiscal foi despachada na contabilidade +DisabledBecauseNotLastInvoice=Desativado porque a fatura não é apagável. Algumas faturas foram gravadas após esta e ele criará buracos no balcão. DisabledBecauseNotErasable=Desativada já que não pode ser apagada InvoiceStandard=Fatura padrão InvoiceStandardAsk=Fatura padrão InvoiceStandardDesc=Esse tipo de fatura é a fatura comum. +InvoiceDepositDesc=Este tipo de fatura é feita quando um pagamento inicial foi recebido. InvoiceProForma=Fatura pro-forma InvoiceProFormaAsk=Fatura pro-forma InvoiceProFormaDesc=Fatura pro-forma é uma imagem verdadeira de fatura porem não tem valor contábil. @@ -33,6 +38,7 @@ UsedByInvoice=Usado para pagar fatura %s NotConsumed=Não consumida NoReplacableInvoice=Nenhuma fatura substituida NoInvoiceToCorrect=Nenhuma fatura para corrigir +InvoiceHasAvoir=Foi fonte de uma ou várias notas de crédito CardBill=Ficha da fatura PredefinedInvoices=Faturas predefinidas Invoice=Fatura @@ -51,6 +57,7 @@ paymentInInvoiceCurrency=na moeda das faturas PaidBack=Reembolso pago DeletePayment=Deletar pagamento ConfirmDeletePayment=Você tem certeza que deseja excluir este pagamento? +ConfirmConvertToReduc=Deseja converter este %s em um desconto absoluto?
O valor será salvo entre todos os descontos e poderá ser usado como um desconto para uma fatura corrente ou futura para este cliente. SupplierPayments=Pagamentos a fornecedores ReceivedCustomersPayments=Pagamentos recebidos de cliente PayedSuppliersPayments=Pagamentos pago ao fornecedores @@ -60,7 +67,9 @@ PaymentsAlreadyDone=Pagamentos já feitos PaymentsBackAlreadyDone=Reembolsos de pagamentos já feitos PaymentRule=Regra de pagamento PaymentMode=Forma de Pagamento +PaymentTypeDC=Cartão de débito / crédito IdPaymentMode=Tipo de pagamento (id) +CodePaymentMode=Tipo de pagamento (código) LabelPaymentMode=Tipo de pagamento (rótulo) PaymentModeShort=Forma de Pagamento PaymentTerm=Termo de pagamento @@ -72,6 +81,7 @@ HelpPaymentHigherThanReminderToPay=Atenção, o valor do pagamento de uma ou mai HelpPaymentHigherThanReminderToPaySupplier=Atenção, o valor do pagamento de uma ou mais contas é maior do que o resto a pagar.
Edite sua entrada, caso contrário, confirmar. ClassifyPaid=Classificar 'pago' ClassifyPaidPartially=Classificar 'parcialmente pago' +ClassifyCanceled=Classificar 'Abandonado' ClassifyClosed=Classificar 'fechado' ClassifyUnBilled=Classificar "à faturar" CreateBill=Criar fatura @@ -82,7 +92,10 @@ SearchACustomerInvoice=Procurar fatura de cliente SearchASupplierInvoice=Procurar fatura de fornecedor CancelBill=Cancelar uma fatura SendRemindByMail=Enviar Lembrete por e-mail +DoPayment=Digite o pagamento +DoPaymentBack=Insira o reembolso ConvertToReduc=Converter em um desconto futuro +ConvertExcessReceivedToReduc=Converta o excesso recebido em desconto futuro EnterPaymentReceivedFromCustomer=Entrar pagamento recebido de cliente EnterPaymentDueToCustomer=Realizar pagamento devido para cliente DisabledBecauseRemainderToPayIsZero=Desabilitado porque o restante a pagar é zero @@ -91,17 +104,21 @@ BillStatus=Status de fatura StatusOfGeneratedInvoices=Situação das faturas geradas BillStatusDraft=Rascunho (precisa ser validada) BillStatusPaid=Pago +BillStatusPaidBackOrConverted=Reembolso de nota de crédito ou convertido em desconto BillStatusConverted=Pago (pronto para fatura final) BillStatusValidated=Validado (precisa ser pago) BillStatusStarted=Iniciado BillStatusNotPaid=Não pago +BillStatusNotRefunded=Não reembolsado BillStatusClosedUnpaid=Fechado (não pago) BillStatusClosedPaidPartially=Pago (parcialmente) BillShortStatusPaid=Pago +BillShortStatusPaidBackOrConverted=Reembolsar ou converter BillShortStatusCanceled=Abandonado BillShortStatusValidated=Validado BillShortStatusStarted=Iniciado BillShortStatusNotPaid=Não pago +BillShortStatusNotRefunded=Não reembolsado BillShortStatusClosedUnpaid=Fechado BillShortStatusClosedPaidPartially=Pago (parcialmente) PaymentStatusToValidShort=Para validar @@ -114,15 +131,26 @@ ErrorDiscountAlreadyUsed=Erro, desconto já utilizado ErrorInvoiceAvoirMustBeNegative=Erro, fatura atual precisa ter um valor negativo ErrorInvoiceOfThisTypeMustBePositive=Erro, esse tipo de fatura deve ter um valor positivo ErrorCantCancelIfReplacementInvoiceNotValidated=Erro, não se pode cancelar uma fatura que foi substituida por outra fatura que ainda esta como rascunho +ErrorThisPartOrAnotherIsAlreadyUsedSoDiscountSerieCantBeRemoved=Esta parte ou outra já é usada, de modo que a série de desconto não pode ser removida. BillFrom=De BillTo=Para ActionsOnBill=Ações na fatura +RecurringInvoiceTemplate=Modelo / nota fiscal recorrente NoQualifiedRecurringInvoiceTemplateFound=Nenhum tema de fatura recorrente qualificado para a geração FoundXQualifiedRecurringInvoiceTemplate=Encontrado(s) %s tema(s) de fatura(s) recorrente(s) qualificado(s) para a geração. NotARecurringInvoiceTemplate=Não é um tema de fatura recorrente NewBill=Nova fatura +LastBills=Últimas notas %s +LatestTemplateInvoices=Últimas faturas do modelo %s +LatestCustomerTemplateInvoices=Últimas faturas do modelo de cliente %s +LatestSupplierTemplateInvoices=Últimas faturas de modelo de fornecedor %s +LastCustomersBills=Últimas notas de clientes %s +LastSuppliersBills=Últimas faturas de fornecedor %s AllBills=Todas faturas +AllCustomerTemplateInvoices=Todas as faturas do modelo DraftBills=Rascunho de faturas +CustomersDraftInvoices=Faturas de rascunho do cliente +SuppliersDraftInvoices=Faturas de rascunho do fornecedor Unpaid=Não pago ConfirmDeleteBill=Você tem certeza que deseja excluir esta fatura? ConfirmValidateBill=Você tem certeza que deseja validar esta fatura com referência %s? @@ -133,6 +161,7 @@ ConfirmCancelBillQuestion=Por quê você deseja classificar esta fatura 'abandon ConfirmClassifyPaidPartially=Você tem certeza que deseja mudar a situação da fatura %s para paga? ConfirmClassifyPaidPartiallyQuestion=Esta fatura não foi completamente paga. Quais são os motivos para você fechar esta fatura? ConfirmClassifyPaidPartiallyReasonAvoir=Restante para pagar (%s %s) é um desconto concedido porque o pagamento foi feito antes do prazo. Eu regularizei o ICMS com uma nota de crédito. +ConfirmClassifyPaidPartiallyReasonDiscount=Restante não remunerado (%s %s) é um desconto concedido porque o pagamento foi feito antes do prazo. ConfirmClassifyPaidPartiallyReasonDiscountNoVat=Restante para pagar (%s %s) é um desconto concedido porque o pagamento foi feito antes do prazo. Eu aceitei perder o ICMS neste desconto. ConfirmClassifyPaidPartiallyReasonDiscountVat=Restante para pagar (%s %s) é um desconto concedido porque o pagamento foi feito antes do prazo. Eu recuperei o ICMS neste desconto sem uma nota de crédito. ConfirmClassifyPaidPartiallyReasonBadCustomer=Cliente mau @@ -159,11 +188,13 @@ ShowBill=Mostrar fatura ShowInvoice=Mostrar fatura ShowInvoiceReplace=Mostrar fatura de substituição ShowInvoiceAvoir=Mostrar nota de crédito +ShowInvoiceDeposit=Mostrar fatura de pagamento ShowInvoiceSituation=Exibir a situação da fatura AlreadyPaid=Já está pago AlreadyPaidBack=Já está estornado RemainderToPay=Restante para pagar RemainderToTake=Restante para pegar +RemainderToPayBack=Valor restante a reembolsar Rest=Pedente AmountExpected=Quantidade reivindicada ExcessReceived=Excesso recebido @@ -183,6 +214,7 @@ SendReminderBillByMail=Enviar o restante por e-mail RelatedCommercialProposals=Orçamentos relacionados RelatedRecurringCustomerInvoices=Faturas recorrentes relacionadas ao cliente MenuToValid=Validar +DateMaxPayment=Pagamento devido em DateInvoice=Data da fatura DatePointOfTax=Ponto de imposto NoInvoice=Nenhuma fatura @@ -216,12 +248,17 @@ ShowReduc=Mostrar o desconto GlobalDiscount=Desconto global CreditNote=Nota de crédito CreditNotes=Notas de crédito +Deposit=Depósito +Deposits=Depósitos DiscountFromCreditNote=Desconto de nota de crédito %s +DiscountFromDeposit=Pagamentos a partir de depósito na fatura %s +DiscountFromExcessReceived=Pagamentos do excesso recebido da fatura %s AbsoluteDiscountUse=Esse tipo de crédito pode ser usado na fatura antes da validação CreditNoteDepositUse=A fatura deve ser validada para utilizar este tipo de crédito NewGlobalDiscount=Novo desconto fixo NewRelativeDiscount=Novo desconto relativo DiscountOfferedBy=Concedido por +DiscountAlreadyCounted=Descontos aplicados BillAddress=Endereço de cobrança HelpEscompte=Esse desconto é um desconto concedido para cliente porque o pagamento foi feito antes do prazo. HelpAbandonBadCustomer=Essa quantia foi abandonada (cliente mencionou a ser um mau cliente) e é considerado uma perca excepcional. @@ -262,15 +299,25 @@ ListOfNextSituationInvoices=Lista das faturas na próxima situação FrequencyPer_d=A cada %s dias FrequencyPer_m=A cada %s meses FrequencyPer_y=A cada %s anos +FrequencyUnit=Unidade de frequência +toolTipFrequency=Exemplos:
fixar 7, Day : dê uma nova fatura a cada 7 dias
Set 3, Month : dê uma nova fatura a cada 3 meses NextDateToExecution=Data para a próxima geração de fatura +NextDateToExecutionShort=Data da próxima geração. DateLastGeneration=Data da última geração +DateLastGenerationShort=Data da última geração. MaxPeriodNumber=Nº máximo de geração de faturas NbOfGenerationDone=Nº de geração de fatura já alcançado +NbOfGenerationDoneShort=Numero de geração feito MaxGenerationReached=Nº máximo de gerações alcançado InvoiceAutoValidate=Validar as faturas automaticamente GeneratedFromRecurringInvoice=Gerar a partir do tem de fatura recorrente %s DateIsNotEnough=Data ainda não alcançada InvoiceGeneratedFromTemplate=Fatura %s gerada a partir do tema de fatura recorrente %s +WarningInvoiceDateInFuture=Atenção, a data da fatura é superior à data atual +WarningInvoiceDateTooFarInFuture=Atenção, a data da fatura está muito longe da data atual +ViewAvailableGlobalDiscounts=Ver descontos disponíveis +PaymentConditionShortRECEP=Após o recebimento +PaymentConditionRECEP=Após o recebimento PaymentConditionShort30DENDMONTH=30 dias do fim do mês PaymentCondition30DENDMONTH=Dentro de 30 dias após o fim do mês PaymentConditionShort60DENDMONTH=60 dias do fim do mês @@ -278,6 +325,14 @@ PaymentCondition60DENDMONTH=Dentro de 60 dias após o fim do mês PaymentConditionShortPT_DELIVERY=Na entrega PaymentConditionPT_ORDER=No pedido PaymentConditionPT_5050=50%% adiantado e 50%% na entrega +PaymentConditionShort10D=10 dias +PaymentCondition10D=10 dias +PaymentConditionShort10DENDMONTH=10 dias do final do mês +PaymentCondition10DENDMONTH=Dentro de 10 dias após o final do mês +PaymentConditionShort14D=14 dias +PaymentCondition14D=14 dias +PaymentConditionShort14DENDMONTH=14 dias do final do mês +PaymentCondition14DENDMONTH=Dentro de 14 dias após o final do mês FixAmount=Corrigir valor VarAmount=Variavel valor (%% total) PaymentTypePRE=Pedido com pagamento em Débito direto @@ -332,16 +387,19 @@ ChequesArea=Área de cheques depositados ChequeDeposits=depósitos de cheques DepositId=Depósito Id NbCheque=Número de cheques +CreditNoteConvertedIntoDiscount=Este %s foi convertido em %s UsBillingContactAsIncoiveRecipientIfExist=Usar o endereço do contato de faturamento do cliente ao invés do endereço de terceiro como recibo das faturas ShowUnpaidAll=Mostras todas as faturas não pagas ShowUnpaidLateOnly=Mostrar todas as faturas atrasadas não pagas PaymentInvoiceRef=Pagamento de fatura %s ValidateInvoice=validar fatura +ValidateInvoices=Validar faturas Cash=DinheiroCash DisabledBecausePayments=Não é possivel devido alguns pagamentos CantRemovePaymentWithOneInvoicePaid=Não posso remover pagamento ao menos que o última fatura sejá classificada como pago ExpectedToPay=Esperando pagamento CantRemoveConciliatedPayment=Não pode remover a conciliação de pagamento +ClosePaidInvoicesAutomatically=Classifique "pago" todas as faturas padrão, antecipadas ou de substituição integralmente pagas. ClosePaidCreditNotesAutomatically=Classificar "pago" todas notas de crédito inteiramente pago de volta. ClosePaidContributionsAutomatically=Classificar como "Pagas" todas as contribuições sociais ou fiscais quitadas. AllCompletelyPayedInvoiceWillBeClosed=Todas faturas sem permanencia para pagar será automaticamente fechada com status "pago". @@ -354,7 +412,9 @@ YouMustCreateStandardInvoiceFirstDesc=Você deve criar antes uma fatura padrão PDFCrabeDescription=Template PDF de fatura Caranguejo. Um completo template de fatura (template recomendado) PDFCrevetteDescription=Tema Crevette para fatura em PDF. Um tema completo para a situação das faturas TerreNumRefModelDesc1=Retorna número com formato %syymm-nnnn para padrão de faturas e %syymm-nnnn para notas de crédito onde yy é ano, mm é mês e nnnn é uma sequência numérica sem quebra e sem retorno para 0 +MarsNumRefModelDesc1=Número de retorno com o formato %syymm-nnnn para faturas padrão, %syymm-nnnn para faturas de substituição, %syymm-nnnn para faturas de adiantamento e %syymm-nnnn para notas de crédito onde yy é ano, mm é mês e nnnn é uma seqüência sem interrupção e não retornar para 0 TerreNumRefModelError=Uma conta começa com %syymm já existe e não é compatível com esse modelo de sequência. Remova ou renomeie ele para ativar esse módulo. +CactusNumRefModelDesc1=Número de retorno com o formato %syymm-nnnn para faturas padrão, %syymm-nnnn para notas de crédito e %syymm-nnnn para faturas de adiantamento, onde yy é ano, mm é mês e nnnn é uma seqüência sem quebra e sem retorno para 0 TypeContact_facture_internal_SALESREPFOLL=Representativo seguindo de fatura de cliente TypeContact_facture_external_BILLING=Contato de fatura de cliente TypeContact_facture_external_SHIPPING=Contato de envio de cliente @@ -388,3 +448,8 @@ ToCreateARecurringInvoiceGene=Para gerar as futuras faturas regular e manualment ToCreateARecurringInvoiceGeneAuto=Se você deseja ter tais faturas sendo geradas automaticamente, peça ao seu Administrador para habilitar e configurar o módulo %s. Note que ambos os métodos (manual e automático) podem ser usados em conjunto sem o risco de duplicação. DeleteRepeatableInvoice=Excluir tema de fatura ConfirmDeleteRepeatableInvoice=Você tem certeza que deseja excluir o tema de fatura? +CreateOneBillByThird=Crie uma fatura por terceiro (caso contrário, uma fatura por pedido) +BillCreated=%s conta(s) criada(s) +StatusOfGeneratedDocuments=Status da geração de documentos +DoNotGenerateDoc=Não gere arquivo de documento +AutogenerateDoc=Auto gerar arquivo de documento diff --git a/htdocs/langs/pt_BR/bookmarks.lang b/htdocs/langs/pt_BR/bookmarks.lang index 4fd7b981f71..1e62b9def06 100644 --- a/htdocs/langs/pt_BR/bookmarks.lang +++ b/htdocs/langs/pt_BR/bookmarks.lang @@ -1,8 +1,10 @@ # Dolibarr language file - Source file is en_US - bookmarks +AddThisPageToBookmarks=Adicione a página atual aos marcadores ListOfBookmarks=Lista de marcadores OpenANewWindow=Abrir uma nova janela ReplaceWindow=Substituir atual janela BookmarkTargetReplaceWindowShort=Atual janela +BehaviourOnClick=Comportamento quando a URL de marcador é selecionada SetHereATitleForLink=Colocar título para o marcador UseAnExternalHttpLinkOrRelativeDolibarrLink=Usar uma URL externa ou uma URL do Dolibarr ChooseIfANewWindowMustBeOpenedOnClickOnBookmark=Escolha se página vinculada deve abrir em uma nova janela ou não diff --git a/htdocs/langs/pt_BR/boxes.lang b/htdocs/langs/pt_BR/boxes.lang index 10ebf7833fc..fddbf14a683 100644 --- a/htdocs/langs/pt_BR/boxes.lang +++ b/htdocs/langs/pt_BR/boxes.lang @@ -1,4 +1,5 @@ # Dolibarr language file - Source file is en_US - boxes +BoxLoginInformation=Informações de login BoxLastProducts=Últimos %s produtos/serviços BoxProductsAlertStock=Alertas de estoque para produtos BoxLastProductsInContract=Últimos %s produtos/serviços contratados @@ -20,6 +21,8 @@ BoxTitleLastSuppliers=Últimos %s fornecedores registrados BoxTitleLastModifiedSuppliers=Últimos %s fornecedores modificados BoxTitleLastModifiedCustomers=Últimos %s clientes modificados BoxTitleLastCustomersOrProspects=Últimos %s clientes ou prospectos de cliente +BoxTitleLastCustomerBills=Últimas notas de clientes %s +BoxTitleLastSupplierBills=Últimas faturas de fornecedor %s BoxTitleLastModifiedProspects=Últimos %s prospectos de cliente modificados BoxTitleLastModifiedMembers=Últimos %s membros BoxTitleLastFicheInter=Últimas %s intervenções modificadas @@ -42,7 +45,12 @@ LastRefreshDate=Ultima data atualizacao NoRecordedBookmarks=Nenhum marcador definido. NoRecordedContacts=Nenhum contato registrado NoActionsToDo=Nenhuma ação para fazer +NoRecordedOrders=Sem pedidos de clientes registrados NoRecordedProposals=Nenhum possível cliente registrado +NoRecordedInvoices=Nenhuma nota fiscal registrada +NoUnpaidCustomerBills=Não há notas fiscais de clientes não pagas +NoUnpaidSupplierBills=Não há notas fiscais de fornecedores não pagas +NoModifiedSupplierBills=Não há notas fiscais registradas do fornecedor NoRecordedProducts=Nenhum registro de produtos/serviços NoRecordedProspects=Nenhum registro de possíveis clientes NoContractedProducts=Nenhum produtos/serviços contratados @@ -63,3 +71,4 @@ ForCustomersInvoices=Faturas de clientes ForCustomersOrders=Pedidos de clientes LastXMonthRolling=Ultima %s mensal ChooseBoxToAdd=Adicionar widget para sua area de notificacoes +BoxAdded=A ferramenta foi adicionada no seu painel diff --git a/htdocs/langs/pt_BR/categories.lang b/htdocs/langs/pt_BR/categories.lang index 04e0fb49582..e622b9b09e2 100644 --- a/htdocs/langs/pt_BR/categories.lang +++ b/htdocs/langs/pt_BR/categories.lang @@ -1,6 +1,7 @@ # Dolibarr language file - Source file is en_US - categories Rubrique=Tag/Categoria Rubriques=Tags/Categorias +RubriquesTransactions=Tags/Categorias de transações categories=tags/categorias NoCategoryYet=Nenhuma tag/categoria deste tipo foi criada In=Em diff --git a/htdocs/langs/pt_BR/commercial.lang b/htdocs/langs/pt_BR/commercial.lang index 7c4282502d2..41a08423970 100644 --- a/htdocs/langs/pt_BR/commercial.lang +++ b/htdocs/langs/pt_BR/commercial.lang @@ -10,6 +10,7 @@ CardAction=Ficha de evento ActionOnContact=Contato relacionado ShowAction=Mostrar evento ActionsReport=Relatório de eventos +SaleRepresentativesOfThirdParty=Representantes de vendas de terceiros SalesRepresentative=Representante comercial SalesRepresentatives=Representantes comerciais SalesRepresentativeFollowUp=Representante comercial (seguindo) @@ -50,3 +51,8 @@ ActionAC_OTH=Outros Stats=Estatísticas de vendas StatusProsp=Status de prospecto de cliente DraftPropals=Minutas de orçamentos +ToOfferALinkForOnlineSignature=Link para assinatura on-line +WelcomeOnOnlineSignaturePage=Bem-vindo à página para aceitar orçamentos / propostas comerciais de %s +ThisScreenAllowsYouToSignDocFrom=Esta tela permite que você aceite e assine ou recuse um orçamento / proposta comercial +SignatureProposalRef=Assinatura do orçamento / proposta comercial %s +FeatureOnlineSignDisabled=Recurso para assinatura on-line desabilitado ou documento gerado antes que o recurso fosse ativado diff --git a/htdocs/langs/pt_BR/companies.lang b/htdocs/langs/pt_BR/companies.lang index 43bedf4b3a0..04a9a5b6fb2 100644 --- a/htdocs/langs/pt_BR/companies.lang +++ b/htdocs/langs/pt_BR/companies.lang @@ -25,6 +25,7 @@ AliasNames=Nome de fantasia (nome comercial, marca registrada etc.) AliasNameShort=Nome de fantasia CountryIsInEEC=O país integra a Comunidade Econômica Europeia ThirdPartyName=Nome do terceiro +ThirdPartyEmail=Email de terceiros ThirdPartyProspects=Prospectos de cliente ThirdPartyProspectsStats=Prospectos de cliente ThirdPartyCustomersWithIdProf12=Clientes com %s ou %s @@ -94,11 +95,26 @@ ProfId3CH=Prof Id 1 (Número federal) ProfId4CH=Prof Id 2 (Número gravado comercial) ProfId2ES=Prof Id 2 (Número de seguro social) ProfId4ES=Prof Id 4 (Número do colegial) +ProfId1FR=SIREN +ProfId2FR=SIRET +ProfId3FR=NAF (Ex APE) +ProfId4FR=RCS/RM ProfId1GB=Número do registro ProfId4IN=ID prof. 4 ProfId5IN=ID prof. 5 ProfId1LU=Id. prof. 1 (R.C.S. Luxemburgo) ProfId2LU=Id. prof. 2 (Permissão para negócios) +ProfId1PT=NIPC +ProfId2PT=Núm. Segurança Social +ProfId3PT=Num. Reg. Comercial +ProfId4PT=Conservatória +ProfId1TN=RC +ProfId2TN=Matrícula Fiscal +ProfId3TN=Código na Alfandega +ProfId4TN=CCC +ProfId1US=ID do Prof. +ProfId3DZ=Numero de Contribuinte +ProfId4DZ=Numero de Identificação Social VATIntra=Número ICMS VATIntraShort=Núm ICMS VATIntraSyntaxIsValid=Sintaxe é válida @@ -109,6 +125,8 @@ CustomerRelativeDiscountShort=Desconto relativo CustomerAbsoluteDiscountShort=Desconto fixo CompanyHasRelativeDiscount=Esse cliente tem um desconto padrão de %s%% CompanyHasNoRelativeDiscount=Esse cliente não tem desconto relativo por padrão +CompanyHasAbsoluteDiscount=Este cliente possui desconto disponível (notas de créditos ou adiantamentos) para %s %s +CompanyHasDownPaymentOrCommercialDiscount=Este cliente possui desconto disponível (comercial, adiantamentos) para %s %s CompanyHasCreditNote=Esse cliente ainda tem notas de crédito por %s %s CompanyHasNoAbsoluteDiscount=Esse cliente não tem desconto de crédito disponível CustomerAbsoluteDiscountAllUsers=Desconto fixo (concedido para todos usuários) @@ -219,6 +237,7 @@ LastModifiedThirdParties=Últimos %s terceiros modificados UniqueThirdParties=Total de terceiros InActivity=Aberto ActivityCeased=Inativo +ThirdPartyIsClosed=O terceiro está fechado ProductsIntoElements=Lista de produtos/serviços em %s CurrentOutstandingBill=Notas aberta correntes OutstandingBill=Conta excelente @@ -228,6 +247,7 @@ LeopardNumRefModelDesc=O código é livre. Esse código pode ser modificado a qu ManagingDirectors=Nome do Representante(CEO,Diretor,Presidente...) MergeOriginThirdparty=Duplicar terceiros (terceiros que deseja excluir) MergeThirdparties=Mesclar terceiros +ConfirmMergeThirdparties=Tem certeza de que deseja juntar esse terceiro no atual? Todos os objetos vinculados (faturas, pedidos, ...) serão movidos para o terceiro atual, então a terceira parte será excluída. ThirdpartiesMergeSuccess=Terceiros foram mesclados SaleRepresentativeLogin=Login para o representante de vendas SaleRepresentativeLastname=Sobrenome do representante de vendas diff --git a/htdocs/langs/pt_BR/compta.lang b/htdocs/langs/pt_BR/compta.lang index 3af2e0bfe22..794c3e64a9a 100644 --- a/htdocs/langs/pt_BR/compta.lang +++ b/htdocs/langs/pt_BR/compta.lang @@ -1,4 +1,5 @@ # Dolibarr language file - Source file is en_US - compta +MenuFinancial=Faturamento | Forma de pagamento TaxModuleSetupToModifyRules=Vá para configuração do módulo Impostos para modificar regras de cálculo TaxModuleSetupToModifyRulesLT=Vá até Configuração >> Empresa para modificar as regras de cálculo OptionMode=Opção de Administração Contabilidade @@ -10,24 +11,48 @@ VATReportBuildWithOptionDefinedInModule=Os valores aqui apresentados são calcul LTReportBuildWithOptionDefinedInModule=Valores mostrados aqui são calculados usando as regras definidas nas configurações da empresa. Param=Configuração RemainingAmountPayment=Pagamento montante remanescente: +Accountparent=Conta principal +Accountsparent=Conta principal Income=Rendimentos MenuReportInOut=Rendimentos/Despesas +ReportInOut=Saldo de receitas e despesas ReportTurnover=Faturamento PaymentsNotLinkedToInvoice=pagamentos vinculados a Nenhuma fatura, por o que nenhum Fornecedor PaymentsNotLinkedToUser=pagamentos não vinculados a um usuário Profit=Lucro AccountingResult=Resultado contábil +BalanceBefore=Balanço (antes) Piece=Doc. contábil AmountHTVATRealPaid=líquido pago VATToPay=ICMS a pagar +VATReceived=Imposto recebido +VATToCollect=Compras fiscais +VATSummary=balanço de impostos +VATPaid=Imposto pago +LT1Summary=Resumo da taxa 2 +LT2Summary=Resumo taxa 3 LT1SummaryES=RE Balançete LT2SummaryES=Saldo de IRPF +LT1SummaryIN=Balanço fiscal +LT2SummaryIN=Balanço Fiscal +LT1Paid=Taxa 2 pago +LT2Paid=Taxa 3 pago LT1PaidES=RE Pago LT2PaidES=IRPF pago +LT1PaidIN=CGST pago +LT2PaidIN=SGST pago +LT1Customer=2 vendas de taxas +LT1Supplier=Compra de taxas 2 compras LT1CustomerES=RE vendas LT1SupplierES=RE compras +LT1CustomerIN=CGST vendas +LT1SupplierIN=Compras do CGST +LT2Customer=Taxa 3 vendas +LT2Supplier=3 compras de taxas LT2CustomerES=IRPF de vendas LT2SupplierES=IRPF de compras +LT2CustomerIN=Vendas de SGST +LT2SupplierIN=Compras SGST VATCollected=ICMS recuperado SocialContribution=Contribuição fiscal ou social SocialContributions=Encargos sociais e fiscais @@ -38,6 +63,7 @@ TypeContrib=Tipo de contribuição MenuSpecialExpenses=Despesas especiais MenuSocialContributions=Contribuições fiscais/sociais NewSocialContribution=Nova contribuição fiscal/social +AddSocialContribution=Adicionar imposto social / fiscal ContributionsToPay=Encargos sociais / fiscais para pagar PaymentCustomerInvoice=Pagamento de fatura de cliente PaymentSupplierInvoice=Pagamento de fatura de fornecedor @@ -59,10 +85,14 @@ LT2PaymentES=Pagamento de IRPF LT2PaymentsES=Pagamentos de IRPF VATPayment=Pagamento da taxa de venda VATPayments=Pagamentos da taxa de venda +VATRefund=Reembolso da taxa sobre vendas Refund=Reembolso SocialContributionsPayments=Pagamentos de impostos sociais / fiscais ShowVatPayment=Ver Pagamentos ICMS TotalToPay=Total a pagar +BalanceVisibilityDependsOnSortAndFilters=O saldo é visível nessa lista somente se a tabela for ordenada ascendendo em %s e filtrada por 1 conta bancária +CustomerAccountancyCode=Código contábil do cliente +SupplierAccountancyCode=Código contábil do fornecedor CustomerAccountancyCodeShort=Cod. cont. cli. SupplierAccountancyCodeShort=Cod. cont. forn. AccountNumber=Número da conta @@ -87,6 +117,7 @@ CalcModeVATDebt=Modo% S VAT compromisso da contabilidade% s. CalcModeVATEngagement=Modo% SVAT sobre os rendimentos e as despesas% s. CalcModeDebt=Modo % s declarações de dívidas% s diz Compromisso da contabilidade . CalcModeEngagement=Modo % s rendimentos e as despesas% s contabilidade do caixa > +CalcModeBookkeeping=Análise de dados periodizados na tabela Razão da Contabilidade CalcModeLT1=Modo %sRE nas faturas dos clientes - faturas dos fornecedores%s CalcModeLT1Debt=Modo %sRE nas faturas dos clientes%s CalcModeLT1Rec=Modo %sRE nas faturas dos fornecedores%s @@ -95,11 +126,20 @@ CalcModeLT2Debt=Modo %sIRPF nas faturas de clientes%s CalcModeLT2Rec=Modo %sIRPF nas faturas de fornecedores%s AnnualSummaryDueDebtMode=Balanço de receitas e despesas, resumo anual AnnualSummaryInputOutputMode=Balanço de receitas e despesas, resumo anual +AnnualByCompanies=Saldo de receitas e despesas, por grupos de conta predefinidos +AnnualByCompaniesDueDebtMode=Saldo de receitas e despesas, detalhe por grupos predefinidos, modo %sClaims-Debts%s disse Contabilidade de Compromisso . +AnnualByCompaniesInputOutputMode=Saldo de receitas e despesas, detalhe por grupos predefinidos, modo %sIncomes-Expenses%s chamada fluxo de caixa . +SeeReportInBookkeepingMode=Consulte o relatório %sBookeeping%s para um cálculo em análise da tabela de contabilidade RulesAmountWithTaxIncluded=- Valores apresentados estão com todos os impostos incluídos RulesResultDue=- Isto inclui as faturas vencidas, despesas, ICMS (VAT), doações, pagas ou não. Isto também inclui os salários pagos.
- Isto isto baseado na data de validação das faturas e ICMS (VAT) e nas datas devidas para as despesas. Para os salários definidos com o módulo Salário, é usado o valor da data do pagamento. RulesResultInOut=- Isto inclui os pagamentos reais feitos nas faturas, despesas, ICMS (VAT) e salários.
- Isto é baseado nas datas de pagamento das faturas, despesas, ICMS (VAT) e salários. A data de doação para a doação. RulesCADue=- Isto inclui as faturas vencidas do cliente, pagas ou não.
- Isto é baseado na data de validação destas faturas.
RulesCAIn=- Inclui os pagamentos efetuados das faturas a clientes.
- Baseia-se na data de pagamento das mesmas
+RulesAmountOnInOutBookkeepingRecord=Inclui registro em seu Ledger com contas contábeis que tem o grupo "DESPESAS" ou "RENDIMENTO" +RulesResultBookkeepingPredefined=Inclui registro em seu Ledger com contas contábeis que tem o grupo "DESPESAS" ou "RENDIMENTO" +RulesResultBookkeepingPersonalized=Mostra registro em seu Livro de Registro com contas contábeis agrupadas por grupos personalizados +SeePageForSetup=Consulte o menu %s para configurar +DepositsAreNotIncluded=- As faturas de adiantamento nem estão incluídas LT2ReportByCustomersInInputOutputModeES=Relatório de fornecedores do IRPF LT1ReportByCustomersInInputOutputModeES=Relatorio por terceiro RE VATReport=Relatório de ICMS @@ -139,14 +179,24 @@ CalculationRuleDesc=Para calcular o total do VAT, há dois métodos:
Métod CalculationRuleDescSupplier=De acordo com o fornecedor, escolher o método adequado aplicar mesma regra de cálculo e obter mesmo resultado esperado pelo seu fornecedor. TurnoverPerProductInCommitmentAccountingNotRelevant=Relatório Volume de negócios por produto, quando se usa um modo de contabilidade de caixa não é relevante. Este relatório está disponível somente quando utilizar o modo de contabilidade engajamento (ver configuração do módulo de contabilidade). CalculationMode=Forma de cálculo +AccountancyJournal=código do Livro de Registro contábil +ACCOUNTING_VAT_SOLD_ACCOUNT=Conta contabilística por padrão para cobrança de IVA - IVA sobre vendas (usado se não definido na configuração do dicionário de IVA) +ACCOUNTING_VAT_BUY_ACCOUNT=Conta contabilística por padrão para IVA recuperado - IVA sobre compras (usado se não definido na configuração do Dicionário de IVA) ACCOUNTING_VAT_PAY_ACCOUNT=Conta da contabilidade padrão para o pagamento de ICMS +ACCOUNTING_ACCOUNT_CUSTOMER=Conta contábil usada para terceiros de clientes +ACCOUNTING_ACCOUNT_CUSTOMER_Desc=A conta contábil dedicada definida no cartão de terceiros será usada somente para o uso exclusivo do Sub Livro de Registro. Este será usado para o Razão Geral e como valor padrão da contabilidade do Sub Livro de Registro se a conta de acesso ao cliente dedicada em terceiros não estiver definida. +ACCOUNTING_ACCOUNT_SUPPLIER=Conta contábil utilizada para fornecedores de terceiros +ACCOUNTING_ACCOUNT_SUPPLIER_Desc=A conta contábil dedicada definida no cartão de terceiros será usada somente para o uso exclusivo do Sub Livro de registro. Este será usado para o Razão Geral e como valor padrão da contabilidade de Sub livro de registro se a conta de participação de fornecedores dedicada em terceiros não estiver definida. CloneTax=Clonar uma taxa social / fiscal ConfirmCloneTax=Confirme o clone de um pagamento de taxa social / fiscal CloneTaxForNextMonth=Clonar para o proximo mes +AddExtraReport=Relatórios extra (adicionar relatório de clientes estrangeiros e nacionais) OtherCountriesCustomersReport=Relação de clientes estrangeiros BasedOnTwoFirstLettersOfVATNumberBeingDifferentFromYourCompanyCountry=Com base nas duas primeiras letras do número de IVA sendo diferente do código de país da sua própria empresa SameCountryCustomersWithVAT=Informar os clientes nacionais BasedOnTwoFirstLettersOfVATNumberBeingTheSameAsYourCompanyCountry=Com base nas duas primeiras letras do número de IVA sendo o mesmo que o código do país da sua própria empresa LinkedFichinter=Vincular a uma intervenção ImportDataset_tax_contrib=Contribuições fiscais/sociais +ImportDataset_tax_vat=Pagamentos de IVA ErrorBankAccountNotFound=Erro: conta bancária não encontrada +ListSocialContributionAssociatedProject=Lista de contribuições sociais associadas ao projeto diff --git a/htdocs/langs/pt_BR/contracts.lang b/htdocs/langs/pt_BR/contracts.lang index 8e8d44596f5..7d563c08514 100644 --- a/htdocs/langs/pt_BR/contracts.lang +++ b/htdocs/langs/pt_BR/contracts.lang @@ -15,6 +15,7 @@ MenuRunningServices=Serviços em vigência MenuExpiredServices=Serviços vencidos ConfirmDeleteAContract=Você tem certeza que deseja excluir este contrato e todos os seus serviços? ConfirmValidateContract=Você tem certeza que deseja validar este contrato sob o mesmo nome %s? +ConfirmActivateAllOnContract=Isso abrirá todos os serviços (ainda não ativos). Tem certeza de que deseja abrir todos os serviços? ConfirmCloseContract=Isto fechará todos os serviços (ativos ou não). Você tem certeza que deseja fechar este contrato? ConfirmCloseService=Você tem certeza que deseja fechar este serviço com a data %s? ValidateAContract=Confirmar um contrato @@ -41,6 +42,7 @@ BoardRunningServices=Serviços Ativos Expirados ServiceStatus=Estado do Serviço DraftContracts=Contratos Rascunho CloseRefusedBecauseOneServiceActive=O contrato não pode ser encerrado já que contém ao menos um serviço aberto. +ActivateAllContracts=Ative todas as linhas de contrato CloseAllContracts=Fechar Todos os Contratos DeleteContractLine=Eliminar a linha do contrato ConfirmDeleteContractLine=Você tem certeza que deseja excluir esta linha do contrato? @@ -56,6 +58,10 @@ NoteListOfYourExpiredServices=Esta lista contém apenas contratos de serviços d StandardContractsTemplate=Modelo de contratos simples ContactNameAndSignature=Para %s, nome e assinatura: OnlyLinesWithTypeServiceAreUsed=Somente as linhas com o tipo de "serviço" será clonado. +CloneContract=Clonagem do contrato +ConfirmCloneContract=Tem certeza de que deseja clonar o contrato %s ? +LowerDateEndPlannedShort=Menor data de término planejada dos serviços ativos +SendContractRef=Informações do contrato __REF__ TypeContact_contrat_internal_SALESREPSIGN=Comercial assinante do contrato TypeContact_contrat_internal_SALESREPFOLL=Comercial seguimento do contrato TypeContact_contrat_external_BILLING=Contato cliente de faturação do contrato diff --git a/htdocs/langs/pt_BR/cron.lang b/htdocs/langs/pt_BR/cron.lang index cf52027886e..ff7e7caf1c0 100644 --- a/htdocs/langs/pt_BR/cron.lang +++ b/htdocs/langs/pt_BR/cron.lang @@ -7,15 +7,21 @@ CronSetup=Configuração do gerenciamento de trabalho agendado URLToLaunchCronJobs=URL para verificar e iniciar os cron jobs qualificados OrToLaunchASpecificJob=Ou checkar e iniciar um specifico trabalho KeyForCronAccess=Chave seguranca para URL que lanca tarefas cron +FileToLaunchCronJobs=Linha de comando para checar e iniciar tarefas cron qualificadas CronExplainHowToRunUnix=No ambiente Unix você deve usar a seguinte entrada crontab para executar a linha de comando a cada 5 minutos CronExplainHowToRunWin=Em ambiente Microsoft (tm) Windows, Você PODE USAR Ferramentas de Tarefa agendada Para executar a Linha de Comando de Cada 5 Minutos CronMethodDoesNotExists=A classe %s não contém método %s algum +CronJobDefDesc=Os perfis de trabalho do Cron são definidos no arquivo do descritor do módulo. Quando o módulo é ativado, eles são carregados e disponíveis para que você possa administrar os trabalhos no menu de ferramentas de administração %s. +CronJobProfiles=Lista de perfis de tarefa cron predefinidas EnabledAndDisabled=Ativado e desativado +CronLastOutput=Saída da última execução +CronLastResult=Código do último resultado CronList=As tarefas agendadas CronDelete=Excluir tarefas agendadas CronConfirmDelete=Você tem certeza que deseja excluir esses cron jobs agendados? CronExecute=Lançar Tarefas agendadas CronConfirmExecute=Você tem certeza que deseja executar agora estas tarefas agendadas? +CronInfo=O módulo de Tarefa Agendada permite agendar tarefas para executá-las automaticamente. As tarefas também podem ser iniciadas manualmente. CronNone=Nenhum CronDtStart=Não antes CronDtEnd=Não depois @@ -33,14 +39,24 @@ CronObject=Instância/Objeto a se criar CronSaveSucess=Salvo com sucesso CronFieldMandatory=O campo %s é obrigatório CronErrEndDateStartDt=A data final não pode ser anterior a data de início +StatusAtInstall=Status na instalação do módulo CronStatusActiveBtn=Ativar CronStatusInactiveBtn=Desativar CronTaskInactive=Está tarefa está desativada +CronClassFile=Nome de arquivo com classe +CronModuleHelp=Nome do diretório do módulo Dolibarr (também funciona com o módulo externo Dolibarr).
Por exemplo, chamar o método de busca do objeto de produto Dolibarr /htdocs/product/class/product.class.php, o valor para o módulo é
produto +CronClassFileHelp=O caminho relativo e o nome do arquivo para carregar (o caminho é relativo ao diretório raiz do servidor web).
Por exemplo, para chamar o método de busca do objeto de produto Dolibarr htdocs / product / class / product.class.php , o valor para o nome do arquivo da classe é
product / class / product.class.php +CronObjectHelp=O nome do objeto para carregar.
Por exemplo, para chamar o método de busca do objeto de produto Dolibarr /htdocs/product/class/product.class.php, o valor para o nome do arquivo de classe é
Produto +CronMethodHelp=O método do objeto para o lançamento.
Por exemplo, para chamar o método de busca do objeto de produto Dolibarr /htdocs/product/class/product.class.php, o valor para o método é
buscar +CronArgsHelp=Os argumentos do método.
Por exemplo, chamar o método de busca do objeto de produto Dolibarr /htdocs/product/class/product.class.php, o valor para parâmetros pode ser
0, ProductRef CronCommandHelp=A linha de comando de sistema que deve ser executada. CronCreateJob=Criar uma nova Tarefa agendada CronType=Tipo de tarefa +CronType_method=Chamar método de uma Classe PHP CronType_command=Comando Shell CronCannotLoadClass=Nao e possivel carregar a classe %s ou o objeto %s UseMenuModuleToolsToAddCronJobs=Vá até o menu "Home >> Ferramentas administrativas >> Tarefas agendadas" para visualizar e editar as tarefas agendadas. JobDisabled=Tarefa desativada MakeLocalDatabaseDumpShort=Backup do banco de dados local +MakeLocalDatabaseDump=Crie um despejo de banco de dados local. Os parâmetros são: compressão ('gz' ou 'bz' ou 'none'), tipo de backup ('mysql' ou 'pgsql'), 1, 'auto' ou nome do arquivo para construir, nb de arquivos de backup para manter +WarningCronDelayed=Atenção, para fins de desempenho, seja qual for a próxima data de execução de tarefas habilitadas, suas tarefas podem ser atrasadas em até um máximo de %s horas, antes de serem executadas. diff --git a/htdocs/langs/pt_BR/deliveries.lang b/htdocs/langs/pt_BR/deliveries.lang index 083399c4e58..8a56722c9f9 100644 --- a/htdocs/langs/pt_BR/deliveries.lang +++ b/htdocs/langs/pt_BR/deliveries.lang @@ -1,5 +1,6 @@ # Dolibarr language file - Source file is en_US - deliveries DeliveryRef=Ref. entrega +DeliveryCard=Recibo de recebimento DeliveryStateSaved=Estado de entrega salvo SetDeliveryDate=Indicar a Data de Envio ValidateDeliveryReceipt=Confirmar a Nota de Entrega diff --git a/htdocs/langs/pt_BR/dict.lang b/htdocs/langs/pt_BR/dict.lang index b1eae1f0bf5..bbd41bf0266 100644 --- a/htdocs/langs/pt_BR/dict.lang +++ b/htdocs/langs/pt_BR/dict.lang @@ -92,3 +92,19 @@ PaperFormatCAP3=Formato P3, Canadá PaperFormatCAP4=Formato P4, Canadá PaperFormatCAP5=Formato P5, Canadá PaperFormatCAP6=Formato P6, Canadá +ExpMotoCat=Motocicleta +ExpAuto3PCV=3 CV e mais +ExpAuto4PCV=4 CV e mais +ExpAuto5PCV=5 CV e mais +ExpAuto6PCV=6 CV e mais +ExpAuto7PCV=7 CV e mais +ExpAuto8PCV=8 CV e mais +ExpAuto9PCV=9 CV e mais +ExpAuto10PCV=10 CV e mais +ExpAuto11PCV=11 CV e mais +ExpAuto12PCV=12 CV e mais +ExpAuto13PCV=13 CV e mais +ExpCyclo=Capacidade abaixo de 50cm3 +ExpMoto12CV=Motocicleta 1 ou 2 CV +ExpMoto345CV=Motocicleta 3, 4 ou 5 CV +ExpMoto5PCV=Motocicleta 5 CV e mais diff --git a/htdocs/langs/pt_BR/ecm.lang b/htdocs/langs/pt_BR/ecm.lang index 84d677e2529..b37cab38257 100644 --- a/htdocs/langs/pt_BR/ecm.lang +++ b/htdocs/langs/pt_BR/ecm.lang @@ -1,5 +1,6 @@ # Dolibarr language file - Source file is en_US - ecm ECMNbOfDocs=Nr. de documentos +ECMRoot=Raiz ECM ECMNewSection=Criar pasta ECMAddSection=Adicionar pasta ECMCreationDate=Data criação @@ -7,8 +8,8 @@ ECMNbOfFilesInDir=Número de arquivos na pasta ECMNbOfSubDir=Número de subpastas ECMNbOfFilesInSubDir=Numero de arquivos nos subpastas ECMCreationUser=Criado por -ECMArea=Área GED -ECMAreaDesc=O GED (Gestão Eletrônica de Documentos) permite salvar, compartilhar e pesquisar rapidamente todos os tipos de documentos contidos no Dolibarr. +ECMArea=Área DMS / ECM +ECMAreaDesc=A área DMS / ECM (Gerenciamento de documentos / Gerenciamento de conteúdo eletrônico) permite salvar, compartilhar e pesquisar rapidamente todos os tipos de documentos no Dolibarr. ECMAreaDesc2=* As pastas automáticas são geradas automaticamente quando algum arquivo é adicionado a algum ficheiro do sistema.
* As pastas manuais podem ser usados ​​para guardar documentos sem ligação a um cadastro do sistema. ECMSectionWasRemoved=A pasta %s foi eliminada ECMSearchByKeywords=Busca usando palavras chave @@ -28,3 +29,8 @@ ECMDirectoryForFiles=Relação de pasta para arquivos CannotRemoveDirectoryContainsFiles=Não foi possível apagar, porque contém alguns arquivos ECMFileManager=Gerenciador de arquivos ECMSelectASection=Selecione uma pasta na árvore a esquerda... +DirNotSynchronizedSyncFirst=Este diretório parece ser criado ou modificado fora do módulo ECM. Você deve clicar no botão "Sincronizar" primeiro para sincronizar o disco do banco de dados para obter o conteúdo desse diretório. +ReSyncListOfDir=Sincronizar lista de diretórios +HashOfFileContent=Hash do conteúdo do arquivo +FileNotYetIndexedInDatabase=Arquivo ainda não indexado no banco de dados (tente voltar a carregá-lo) +FileSharedViaALink=Arquivo compartilhado via um link diff --git a/htdocs/langs/pt_BR/exports.lang b/htdocs/langs/pt_BR/exports.lang index 4dc2c779628..7512f5f8883 100644 --- a/htdocs/langs/pt_BR/exports.lang +++ b/htdocs/langs/pt_BR/exports.lang @@ -85,9 +85,16 @@ Enclosure=Recinto SpecialCode=Código especial ExportStringFilter=Permite substituir um ou mais caracteres no texto ExportDateFilter=AAAA, AAAAMM, AAAAMMDD : filtros por um ano / mês / dia
AAAA+AAAA, AAAAMM+AAAAMM, AAAAMMDD+AAAAMMDD : filtros mais de uma gama de ano / mês / dia inicial
> AAAA, > AAAAMM, > AAAAMMDD : filtros em todos seguindo anos / meses / dias
< AAAA, < AAAAMM, < AAAAMMDD : filtros em todos os anos / meses / dias anteriores +ExportNumericFilter=filtros NNNNN por um valor
filtros NNNNN+NNNNN acima de uma faixa de valores
< filtros NNNNN por valores mais baixos
> filtros NNNNN por valores mais elevados ImportFromLine=Importar iniciando da linha número +ImportFromToLine=Importar números de linhas (de -para) SetThisValueTo2ToExcludeFirstLine=Por exemplo, coloque 3 para este valor para excluir as 2 primeiras linhas KeepEmptyToGoToEndOfFile=Manter este campo em branco para ir até o fim do arquivo +UpdateNotYetSupportedForThisImport=Atualizar não é suportado para este tipo de importação (apenas inserir) +NoUpdateAttempt=Nenhuma tentativa de atualização foi realizada, apenas insira +ImportDataset_user_1=Usuários (funcionários ou não) e propriedades ComputedField=Campo computado SelectFilterFields=Se você deseja filtrar alguns valores, apenas os valores de entrada aqui. FilteredFieldsValues=Valor para o filtro +KeysToUseForUpdates=Chave para atualizar dados +MultipleRecordFoundWithTheseFilters=Múltiplos registros foram encontrados com esses filtros: %s diff --git a/htdocs/langs/pt_BR/holiday.lang b/htdocs/langs/pt_BR/holiday.lang index 9f39557e934..9daa4e6079d 100644 --- a/htdocs/langs/pt_BR/holiday.lang +++ b/htdocs/langs/pt_BR/holiday.lang @@ -57,7 +57,10 @@ FirstDayOfHoliday=Primeiro dia de folga LastDayOfHoliday=Último dia de folga BoxTitleLastLeaveRequests=Últimas %s solicitações de licença modificadas HolidaysCancelation=Cancelamento da solicitação de licença +EmployeeLastname=Sobrenome do empregado +EmployeeFirstname=Nome do empregado TypeWasDisabledOrRemoved=A licença do tipo (id %s) foi desabilitada ou removida +LastHolidays=Últimos pedidos de licença %s LastUpdateCP=Última atualização automática de fixação de licenças MonthOfLastMonthlyUpdate=Mês da última atualização automática de fixação de licenças Module27130Name=Gestão de solicitações de licença diff --git a/htdocs/langs/pt_BR/install.lang b/htdocs/langs/pt_BR/install.lang index f20f11d8118..8f3cda7ce34 100644 --- a/htdocs/langs/pt_BR/install.lang +++ b/htdocs/langs/pt_BR/install.lang @@ -46,6 +46,7 @@ AdminPassword=Password para o administrador da base de dados Dolibarr. Deixar em CreateDatabase=Criar uma base de dados DatabaseSuperUserAccess=Base de dados - Acesso Superuser CheckToCreateDatabase=Verifique se o banco de dados não existe e deve ser criado.
Neste caso, você deve preencher o login / senha para a conta de superuser, na parte inferior desta página. +CheckToCreateUser=Caixa de seleção se o proprietário do banco de dados não existir, assim deve ser criado, ou se ele existe, mas o banco de dados não existe e as permissões devem ser concedidas.
Neste caso, você deve escolher seu login e senha e também preencher o login / senha para a conta do superusuário na parte inferior desta página. Se esta caixa estiver desmarcada, o banco de dados do proprietário e suas senhas devem existir. DatabaseRootLoginDescription=Login do usuário que possui permissão para criar novas bases de dados ou de novos usuários em banco de dados, inútil se o seu banco de dados e seu banco de dados já existe login (como quando você está hospedado por um provedor de hospedagem da web). KeepEmptyIfNoPassword=Deixar em branco se o usuário não tiver password SaveConfigurationFile=Gravar configuração @@ -114,6 +115,9 @@ KeepDefaultValuesWamp=Se você usa o DoliWamp Setup Wizard, então os valores pr KeepDefaultValuesDeb=Voce esta usando o assistente de configuração do Dolibarr do pacote Linux (Ubuntu, Debian, Fedora...), portanto os valores propostos aqui ja estao otimizados. O unico parametro a informar e a senha do administrador de banco de dados. Mude outros parametros somente se voce sabe o que esta fazendo. KeepDefaultValuesMamp=Você usa o DoliMamp Setup Wizard, para valores propostos aqui já estão otimizados. Alterá-los apenas se souber o que está fazendo. KeepDefaultValuesProxmox=Voçê esta usando o asistente de configuração do Dolibarr da aplicação virtual Proxmox , portanto os valores propostos aqui ja estão otimizados. Mude-os somente se você sabe o que esta fazendo. +UpgradeExternalModule=Execute um processo de atualização dedicado de módulos externos +SetAtLeastOneOptionAsUrlParameter=Defina pelo menos uma opção como um parâmetro no URL. Por exemplo: '... repair.php?standard=confirmed' +NothingToDelete=Nada para limpar / excluir MigrationFixData=Correção para dados não normalizados MigrationOrder=Migração de dados para ordens de clientes MigrationProposal=Migração de dados de propostas comerciais @@ -122,6 +126,7 @@ MigrationSuccessfullUpdate=Atualizado com sucesso MigrationUpdateFailed=Falha no processo de upgrade/atualização MigrationRelationshipTables=Migração de dados para as tabelas de relação (%s) MigrationPaymentsUpdate=Correção de dados de pagamento +MigrationPaymentsNumberToUpdate=%s pagamento (s) para atualizar MigrationProcessPaymentUpdate=Atualização de pagamento (s) %s MigrationPaymentsNothingUpdatable=Não mais pagamentos que podem ser corrigidos MigrationContractsUpdate=Correção de dados de contrato @@ -153,8 +158,10 @@ MigrationProjectTaskTime=Atualizar tempo gasto em segundos MigrationActioncommElement=Atualizar dados nas ações MigrationPaymentMode=Migração de dados para o modo de pagamento MigrationEvents=Migração de eventos para adicionar proprietário do evento na tabela de atribuição +MigrationEventsContact=Migração de eventos para adicionar contato de evento na tabela de atribuição MigrationRemiseEntity=Atulizacao do valor da tabela llx_societe_remise MigrationRemiseExceptEntity=Atualizacao do valor no campo da tabela llx_societe_remise_except +MigrationResetBlockedLog=Redefinir o módulo BlockedLog para o algoritmo v7 ShowNotAvailableOptions=Mostrar as opções não disponíveis HideNotAvailableOptions=Esconder opções não disponíveis ErrorFoundDuringMigration=O erro será reportado durante o processo de migração então o próximo passo não está disponível. Para ignorar os erros, você pode clicar aqui, mas a aplicação de algumas funcionalidade não irão funcionar corretamente até que sejam consertadas. diff --git a/htdocs/langs/pt_BR/interventions.lang b/htdocs/langs/pt_BR/interventions.lang index 5208a2af8c8..a597c318f7c 100644 --- a/htdocs/langs/pt_BR/interventions.lang +++ b/htdocs/langs/pt_BR/interventions.lang @@ -25,13 +25,17 @@ InterventionDeletedInDolibarr=Intervenção %s excluída InterventionsArea=Área intervenções DraftFichinter=Rascunho de intervenções LastModifiedInterventions=Últimas %s intervenções modificadas +FichinterToProcess=Intermediações para processar TypeContact_fichinter_external_CUSTOMER=Contato do cliente do seguimento da intervenção PrintProductsOnFichinter=Imprima também linhas do tipo "produto" (e não apenas serviços) na ficha de intervenção PrintProductsOnFichinterDetails=intervenções gerados a partir de ordens UseServicesDurationOnFichinter=duração de uso de serviços para intervenções geradas a partir de ordens +UseDurationOnFichinter=Esconde o campo de duração para os registros de intermediações +UseDateWithoutHourOnFichinter=Oculta horas e minutos fora do campo de data para registros de intermediação InterventionStatistics=Estatística de intervenções NbOfinterventions=Nº de fichas de intervenção NumberOfInterventionsByMonth=Nº de fichas de intervenção por mês (data de validação) +AmountOfInteventionNotIncludedByDefault=A quantidade de intervenção não é incluída por padrão no lucro (na maioria dos casos, as planilhas de tempo são usadas para contar o tempo gasto). Adicione a opção PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT para 1 em home-setup-other para incluí-los. InterId=ID de intervenção InterRef=Intervenção ref. InterDateCreation=Intervenção data de criação diff --git a/htdocs/langs/pt_BR/languages.lang b/htdocs/langs/pt_BR/languages.lang index 4c03fdcccae..a71836b34bb 100644 --- a/htdocs/langs/pt_BR/languages.lang +++ b/htdocs/langs/pt_BR/languages.lang @@ -8,5 +8,6 @@ Language_he_IL=Hebraico Language_ka_GE=Georgiano Language_lo_LA=Laosiano Language_mk_MK=Macedônio +Language_mn_MN=mongol Language_nl_NL=Holandês (Holanda) Language_pl_PL=Polonês diff --git a/htdocs/langs/pt_BR/ldap.lang b/htdocs/langs/pt_BR/ldap.lang index ea11ca3ce03..fdfb449bcfb 100644 --- a/htdocs/langs/pt_BR/ldap.lang +++ b/htdocs/langs/pt_BR/ldap.lang @@ -4,8 +4,11 @@ YouMustChangePassNextLogon=A senha de %s ao domínio %s deve de se UserMustChangePassNextLogon=O usuário deve alterar de senha na próxima login LDAPInformationsForThisContact=Informação da base de dados LDAP deste contato LDAPInformationsForThisUser=Informação da base de dados LDAP deste usuário +LDAPInformationsForThisMemberType=Informação no banco de dados LDAP para esse tipo de membro LDAPUsers=Usuário na base de dados LDAP LDAPFieldFirstSubscriptionAmount=Valor da Primeira Adesão +LDAPFieldLastSubscriptionDate=Data da última adesão +LDAPFieldLastSubscriptionAmount=Valor da última adesão LDAPFieldSkypeExample=Exemplo : nomeskype UserSynchronized=Usuário Sincronizado ErrorFailedToReadLDAP=Erro na leitura do anuário LDAP. Verificar a configuração do módulo LDAP e a acessibilidade do anuário. diff --git a/htdocs/langs/pt_BR/loan.lang b/htdocs/langs/pt_BR/loan.lang index cddd78288b4..5e4f157c4ac 100644 --- a/htdocs/langs/pt_BR/loan.lang +++ b/htdocs/langs/pt_BR/loan.lang @@ -5,6 +5,9 @@ PaymentLoan=Pagamento de empréstimo LoanPayment=Pagamento de empréstimo ShowLoanPayment=Mostrar pagamento de empréstimo Interest=Juro +LoanAccountancyCapitalCode=Capital contabilístico +LoanAccountancyInsuranceCode=Seguro contabilístico +LoanAccountancyInterestCode=Interesse contabilístico ConfirmDeleteLoan=Confirme a exclusão deste empréstimo LoanDeleted=Empréstimo excluído com sucesso ConfirmPayLoan=Confirmar este empréstimo como pago @@ -32,3 +35,9 @@ LoanCalcDesc=Esta calculadora de hipoteca pode ser usada para mostrar os GoToInterest=%s será destinado a JUROS GoToPrincipal=%s será destinado ao PRINCIPAL YouWillSpend=Você gastará %s no ano de %s +ListLoanAssociatedProject=Lista de empréstimos associados ao projeto +AddLoan=Criar empréstimo +LOAN_ACCOUNTING_ACCOUNT_CAPITAL=Capital contabilístico por padrão +LOAN_ACCOUNTING_ACCOUNT_INTEREST=Interesse contabilístico por padrão +LOAN_ACCOUNTING_ACCOUNT_INSURANCE=Seguro contabilístico por padrão +CreateCalcSchedule=Criar / alterar horário de empréstimo diff --git a/htdocs/langs/pt_BR/main.lang b/htdocs/langs/pt_BR/main.lang index bf8a3fee71d..3dd6489c0db 100644 --- a/htdocs/langs/pt_BR/main.lang +++ b/htdocs/langs/pt_BR/main.lang @@ -71,7 +71,6 @@ InformationLastAccessInError=Informação do último erro de acesso ao banco de PrecisionUnitIsLimitedToXDecimals=Dolibarr está configurado para limitar a precisão dos preços unitários a %s Decimais. NoFilter=Nenhum filtro WarningYouHaveAtLeastOneTaskLate=Atenção, tem um elemento a menos que passou a data de tolerância. -yes=sim no=não OnlineHelp=Ajuda online PageWiki=Pagina wiki diff --git a/htdocs/langs/pt_BR/margins.lang b/htdocs/langs/pt_BR/margins.lang index dccb194f19a..216c573e0f9 100644 --- a/htdocs/langs/pt_BR/margins.lang +++ b/htdocs/langs/pt_BR/margins.lang @@ -26,3 +26,4 @@ rateMustBeNumeric=Rata deve ser um valor numerico markRateShouldBeLesserThan100=Rata marcada teria que ser menor do que 100 ShowMarginInfos=Mostrar informações sobre margens CheckMargins=Detalhes das margens +MarginPerSaleRepresentativeWarning=O relatório de margem por usuário usa o link entre terceiros e representantes de vendas para calcular a margem de cada venda representativa. Por causa que alguns terceiros não terem um representante de vendas dedicado e alguns terceiros podem estar ligados a vários, alguns montantes podem não ser incluídos neste relatório (se não houver representante de venda) e alguns podem aparecer em diferentes linhas (para cada representante de venda). diff --git a/htdocs/langs/pt_BR/members.lang b/htdocs/langs/pt_BR/members.lang index 772834e0394..4197d9375a0 100644 --- a/htdocs/langs/pt_BR/members.lang +++ b/htdocs/langs/pt_BR/members.lang @@ -77,6 +77,9 @@ LinkToGeneratedPages=Gerar cartões de visitas LinkToGeneratedPagesDesc=Esta tela permite gerar arquivos PDF com cartões de visita para todos os seus membros ou um membro particular. DocForAllMembersCards=Gerar cartões de visita para todos os membros DocForLabels=Gerar folhas de endereço +LastSubscriptionDate=Data da última adesão +LastSubscriptionAmount=Valor da última adesão +MembersStatisticsByTown=Membros estatísticas por cidade MembersStatisticsByRegion=Membros por região estatísticas NoValidatedMemberYet=Nenhum membro validados encontrado MembersByCountryDesc=Esta tela mostrará estatísticas sobre usuários por países. Gráfico depende, contudo, do Google serviço gráfico on-line e está disponível apenas se uma conexão à Internet é está funcionando. @@ -84,6 +87,7 @@ MembersByStateDesc=Esta tela mostrará estatísticas sobre usuários por estado MembersByTownDesc=Esta tela mostrará estatísticas sobre usuários por cidade. MembersStatisticsDesc=Escolha as estatísticas que você quer ler ... MenuMembersStats=Estatísticas +LatestSubscriptionDate=Data da última adesão Nature=Tipo de produto Public=Informações são públicas NewMemberbyWeb=Novo membro adicionado. Aguardando aprovação diff --git a/htdocs/langs/pt_BR/oauth.lang b/htdocs/langs/pt_BR/oauth.lang index 90aaec44e07..073c5e06cf9 100644 --- a/htdocs/langs/pt_BR/oauth.lang +++ b/htdocs/langs/pt_BR/oauth.lang @@ -1,13 +1,19 @@ # Dolibarr language file - Source file is en_US - oauth ConfigOAuth=Configuração Oauth ManualTokenGeneration=Geração manual do token +TokenManager=Gerenciador de Token +IsTokenGenerated=O token está gerado? NoAccessToken=Nenhum token de acesso guardado na base de dados local HasAccessToken=Um token foi gerado e salvo no banco de dados local +NewTokenStored=Token recebido e salvo +ToCheckDeleteTokenOnProvider=Clique aqui para verificar/apagar autorização salva pelo provedor OAuth %s TokenDeleted=Token excluído RequestAccess=Clique aqui para solicitar/renovar o acesso e receber um novo token para salvar DeleteAccess=Clique aqui para apagar o token UseTheFollowingUrlAsRedirectURI=Utilize o seguinte URL como o URI de redirecionamento ao criar a sua credencial de seu provedor de OAuth: ListOfSupportedOauthProviders=Forneça aqui a credencial fornecida pelo seu provedor OAuth2. Apenas provedores OAuth2 suportados estão visíveis aqui. Esta configuração talvez seja usada por outros módulos que necessitem de autenticação OAuth2. +SeePreviousTab=Ver aba anterior +OAuthIDSecret=Identificação OAuth e Senha TOKEN_REFRESH=Token Atualizar Presente TOKEN_EXPIRED=Token vencido TOKEN_EXPIRE_AT=Token expira no diff --git a/htdocs/langs/pt_BR/opensurvey.lang b/htdocs/langs/pt_BR/opensurvey.lang index c7b097c44ba..d44486228c3 100644 --- a/htdocs/langs/pt_BR/opensurvey.lang +++ b/htdocs/langs/pt_BR/opensurvey.lang @@ -46,3 +46,4 @@ ErrorInsertingComment=Houve um erro ao inserir o seu comentário MoreChoices=Digite mais opções para os votos SurveyExpiredInfo=A enquete foi encerrada ou o período de votação expirou. EmailSomeoneVoted=%s preencheu uma linha.\nVocê pode encontrar sua enquete no link:\n%s +ShowSurvey=Mostrar pesquisa diff --git a/htdocs/langs/pt_BR/orders.lang b/htdocs/langs/pt_BR/orders.lang index 46bcca6444e..8c32323ced4 100644 --- a/htdocs/langs/pt_BR/orders.lang +++ b/htdocs/langs/pt_BR/orders.lang @@ -35,6 +35,7 @@ StatusOrderToProcessShort=A processar StatusOrderOnProcess=Pedido - Aguardando Recebimento StatusOrderOnProcessWithValidation=Ordenada - recepção Standby ou validação StatusOrderToBill=A Faturar +StatusOrderReceivedAll=Todos os produtos recebidos ShippingExist=Existe envio QtyOrdered=Quant. Pedida ProductQtyInDraft=Quantidade do produto em projetos de ordens @@ -122,5 +123,7 @@ OrderCreated=Seus pedidos foram criados OrderFail=Um erro ocorreu durante a criação de seus pedidos CreateOrders=Criar pedidos ToBillSeveralOrderSelectCustomer=Para criar uma nota fiscal para várias encomendas, clique primeiro no cliente, em seguida, escolha "%s". +OptionToSetOrderBilledNotEnabled=A opção (a partir do módulo de Fluxo de Trabalho) para definir a ordem para 'Faturado' automaticamente quando a fatura é validada está desativada, então você terá que definir o status do pedido como 'Faturado' manualmente. +IfValidateInvoiceIsNoOrderStayUnbilled=Se a validação da fatura for 'Não', a ordem permanecerá no status 'Não faturado' até que a fatura seja validada. CloseReceivedSupplierOrdersAutomatically=Fechar automaticamente o pedido como "%s" se todos os produtos foram recebidos. SetShippingMode=Definir modo de envio diff --git a/htdocs/langs/pt_BR/paybox.lang b/htdocs/langs/pt_BR/paybox.lang index 2a3d512f552..49ab60c63fd 100644 --- a/htdocs/langs/pt_BR/paybox.lang +++ b/htdocs/langs/pt_BR/paybox.lang @@ -6,6 +6,7 @@ WelcomeOnPaymentPage=Bem Vindos a Nossos serviços de pagamento on-line ThisScreenAllowsYouToPay=Esta página lhe permite fazer seu pagamento on-line destinado a %s. ThisIsInformationOnPayment=Aqui está a informação sobre o pagamento a realizar Creditor=Beneficiário +PayBoxDoPayment=Pagar com Cartão de Débito ou Crédito (Paybox) ToPay=Realizar pagamento YouWillBeRedirectedOnPayBox=Va a ser redirecionado a a página segura de Paybox para indicar seu cartão de crédito ToOfferALinkForOnlinePayment=URL para %s pagamento diff --git a/htdocs/langs/pt_BR/paypal.lang b/htdocs/langs/pt_BR/paypal.lang index 863799482a7..e7c70788b1b 100644 --- a/htdocs/langs/pt_BR/paypal.lang +++ b/htdocs/langs/pt_BR/paypal.lang @@ -1,6 +1,7 @@ # Dolibarr language file - Source file is en_US - paypal PaypalSetup=Configuração do módulo PayPal PaypalDesc=Este modulo oferece paginas que permitem o pagamento no PayPal aos clientes. Pode ser usado para o pagamento livre ou para o pagamento de algum objeto Dolibarr (fatura, pedido, ...) +PaypalOrCBDoPayment=Pagar com PayPal (Cartão de Crédito ou Paypal) PaypalDoPayment=Pagar com Paypal PAYPAL_API_SANDBOX=Modo teste/caixa de areia PAYPAL_API_USER=API usuario @@ -13,8 +14,12 @@ PaypalModeOnlyPaypal=PayPal apenas ThisIsTransactionId=Eis o id da transação: %s PAYPAL_ADD_PAYMENT_URL=Adicionar URL do pagamento Paypal quando se envia o documento por e-mail PredefinedMailContentLink=Clique no link seguro abaixo para fazer o pagamento (PayPal) se nao esta ainda effetuado.⏎\n⏎\n%s⏎\n⏎\n +YouAreCurrentlyInSandboxMode=No momento você está no %s modo "caixa de areia" +NewOnlinePaymentFailed=Foi tentado novo pagamento online, mas sem hêxito ONLINE_PAYMENT_SENDEMAIL=Endereço e-mail para aviso apos o pagamento (positivo ou nao) ReturnURLAfterPayment=Retornar ao URL após o pagamento +ValidationOfOnlinePaymentFailed=A validação do pagamento online falhou +PaymentSystemConfirmPaymentPageWasCalledButFailed=A página de confirmação de pagamento, que foi chamada pelo sistema de pagamento, retornou um erro SetExpressCheckoutAPICallFailed=Falha ao chamar a API: SetExpressCheckout. DoExpressCheckoutPaymentAPICallFailed=Falha ao chamar a API: DoExpressCheckoutPayment. DetailedErrorMessage=Mensagem de erro detalhada diff --git a/htdocs/langs/pt_BR/productbatch.lang b/htdocs/langs/pt_BR/productbatch.lang index 9656f370eb8..2bb52ffeea0 100644 --- a/htdocs/langs/pt_BR/productbatch.lang +++ b/htdocs/langs/pt_BR/productbatch.lang @@ -18,3 +18,4 @@ ProductDoesNotUseBatchSerial=Este produto não utiliza Lote / número de série ProductLotSetup=Configuração do módulo lote/nº de série ShowCurrentStockOfLot=Exibir o estoque atual para o produto/lote ShowLogOfMovementIfLot=Exibir o registro de movimentações para o produto/lote +StockDetailPerBatch=Detalhes do estoque por lote diff --git a/htdocs/langs/pt_BR/propal.lang b/htdocs/langs/pt_BR/propal.lang index 1e451132e38..82ffe0d9f4d 100644 --- a/htdocs/langs/pt_BR/propal.lang +++ b/htdocs/langs/pt_BR/propal.lang @@ -9,6 +9,7 @@ LastModifiedProposals=Últimas %s propostas modificadas NoProposal=Sem propostas AmountOfProposalsByMonthHT=Valor por Mês (sem ICMS) PropalsOpened=Aberto +PropalStatusValidated=Validado (a proposta esta em aberto) PropalStatusSigned=Assinado (A Faturar) PropalStatusNotSigned=Sem Assinar (Encerrado) PropalStatusBilled=Faturado diff --git a/htdocs/langs/pt_BR/resource.lang b/htdocs/langs/pt_BR/resource.lang index 9916c0f1bc2..4c388946936 100644 --- a/htdocs/langs/pt_BR/resource.lang +++ b/htdocs/langs/pt_BR/resource.lang @@ -14,3 +14,4 @@ ConfirmDeleteResource=Confirme para remover este recurso RessourceSuccessfullyDeleted=Recurso removido com sucesso DictionaryResourceType=Tipo de recurso SelectResource=Selecionar recurso +IdResource=Recurso de identificação diff --git a/htdocs/langs/pt_BR/sendings.lang b/htdocs/langs/pt_BR/sendings.lang index 8110ae95b74..64c08d5cd39 100644 --- a/htdocs/langs/pt_BR/sendings.lang +++ b/htdocs/langs/pt_BR/sendings.lang @@ -8,6 +8,7 @@ LastSendings=Últimas %s remessas SendingCard=Cartão de embarque QtyReceived=Quant. Recibida KeepToShip=Permaneça para enviar +SendingsAndReceivingForSameOrder=Envios e recibos para esse pedido StatusSendingValidated=Validado (produtos a enviar o enviados) SendingSheet=Folha de embarque ConfirmDeleteSending=Tem certeza que quer remover este envio? diff --git a/htdocs/langs/pt_BR/sms.lang b/htdocs/langs/pt_BR/sms.lang index 4cebb058809..29d52940c8b 100644 --- a/htdocs/langs/pt_BR/sms.lang +++ b/htdocs/langs/pt_BR/sms.lang @@ -32,3 +32,4 @@ ThisIsATestMessage=Isto e uma mensagem de teste SmsInfoCharRemain=Nr de caracteres restantes SmsInfoNumero=(formato internacional ex: +33899701761) SmsNoPossibleSenderFound=Nenhum expedidor disponível. Verifique a configuração do seu provedor de SMS. +DisableStopIfSupported=Desabilitar mensagem PARAR (se suportado) diff --git a/htdocs/langs/pt_PT/admin.lang b/htdocs/langs/pt_PT/admin.lang index 210186695db..39874e70b8e 100644 --- a/htdocs/langs/pt_PT/admin.lang +++ b/htdocs/langs/pt_PT/admin.lang @@ -574,8 +574,8 @@ Module2300Name=Tarefas agendadas Module2300Desc=Gestão de trabalhos agendados (alias cron ou tabela chrono) Module2400Name=Eventos/Agenda Module2400Desc=Seguir eventos terminados e que estão para ocorrer. Permitir que a aplicação registe eventos automáticos ou eventos manuais ou encontros. -Module2500Name=DMS / ECM -Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need. +Module2500Name=SGD / GEC +Module2500Desc=Sistema de Gestão de Documentos / Gestão de Conteúdo Eletrónico. Organização automática dos seus documentos gerados ou armazenados. Compartilhe-os quando precisar. Module2600Name=Serviços API/Web (servidor SOAP) Module2600Desc=Ativar o servidor SOAP do Dolibarr, fornecendo serviços API Module2610Name=Serviços API/Web (servidor REST) diff --git a/htdocs/langs/pt_PT/bills.lang b/htdocs/langs/pt_PT/bills.lang index 2494bcf61c2..740d54aac6f 100644 --- a/htdocs/langs/pt_PT/bills.lang +++ b/htdocs/langs/pt_PT/bills.lang @@ -92,11 +92,11 @@ ValidatePayment=Validar pagamento PaymentHigherThanReminderToPay=Pagamento superior ao valor a pagar HelpPaymentHigherThanReminderToPay=Atenção, o montante do pagamento de uma ou mais letras é maior do que o resto a pagar.
Edite sua entrada, caso contrário, confirmar e pensar sobre como criar uma nota de crédito do excesso recebido para cada factura paga em excesso. HelpPaymentHigherThanReminderToPaySupplier=Attention, the payment amount of one or more bills is higher than the rest to pay.
Edit your entry, otherwise confirm. -ClassifyPaid=Classificar 'Pago' -ClassifyPaidPartially=Classificar 'Pago Parcialmente' -ClassifyCanceled=Classificar 'Abandonado' -ClassifyClosed=Classificar 'Fechado' -ClassifyUnBilled=Classify 'Unbilled' +ClassifyPaid=Classificar como 'Pago' +ClassifyPaidPartially=Classificar como 'Pago Parcialmente' +ClassifyCanceled=Classificar como 'Abandonado' +ClassifyClosed=Classificar como 'Fechado' +ClassifyUnBilled=Classificar como 'Não faturado' CreateBill=Criar Factura CreateCreditNote=Criar nota de crédito AddBill=Criar Factura ou Nota de Crédito @@ -463,7 +463,7 @@ CantRemoveConciliatedPayment=Can't remove conciliated payment PayedByThisPayment=Pago por esse pagamento ClosePaidInvoicesAutomatically=Classificar como "Paga" todas as faturas padrão, adiantamentos ou de substituição completamente pagas. ClosePaidCreditNotesAutomatically=Classificar como "Paga" todas as notas de crédito totalmente reembolsadas. -ClosePaidContributionsAutomatically=Classify "Paid" all social or fiscal contributions entirely paid. +ClosePaidContributionsAutomatically=Classificar como "Pago" todas as contribuições sociais ou fiscais totalmente pagas. AllCompletelyPayedInvoiceWillBeClosed=Todas as faturas sem pagamentos em falta serão automaticamente fechadas e classificadas como "Pagas". ToMakePayment=Pagar ToMakePaymentBack=Reembolsar diff --git a/htdocs/langs/pt_PT/companies.lang b/htdocs/langs/pt_PT/companies.lang index 416f91339a9..410786da89b 100644 --- a/htdocs/langs/pt_PT/companies.lang +++ b/htdocs/langs/pt_PT/companies.lang @@ -396,7 +396,7 @@ YouMustCreateContactFirst=Para adicionar a funcionalidade de notificações por ListSuppliersShort=Lista de fornecedores ListProspectsShort=Lista das perspectivas ListCustomersShort=Lista de clientes -ThirdPartiesArea=Terceiros e árrea de contacto +ThirdPartiesArea=Área de Terceiros e Contactos LastModifiedThirdParties=Os últimos %s terceiros modificados UniqueThirdParties=Total de originais terceiros InActivity=Abrir diff --git a/htdocs/langs/pt_PT/compta.lang b/htdocs/langs/pt_PT/compta.lang index 9d5cc66c463..163aa818f4d 100644 --- a/htdocs/langs/pt_PT/compta.lang +++ b/htdocs/langs/pt_PT/compta.lang @@ -129,7 +129,7 @@ NoWaitingChecks=No checks awaiting deposit. DateChequeReceived=Data introdução de dados de recepção cheque NbOfCheques=Nº de Cheques PaySocialContribution=Pay a social/fiscal tax -ConfirmPaySocialContribution=Are you sure you want to classify this social or fiscal tax as paid? +ConfirmPaySocialContribution=Tem certeza de que deseja classificar este imposto social ou fiscal como pago? DeleteSocialContribution=Delete a social or fiscal tax payment ConfirmDeleteSocialContribution=Tem certeza de que deseja eliminar este pagamento de imposto social/fiscal? ExportDataset_tax_1=Social and fiscal taxes and payments diff --git a/htdocs/langs/pt_PT/ecm.lang b/htdocs/langs/pt_PT/ecm.lang index 304535ae0a0..4d5e7fd6f10 100644 --- a/htdocs/langs/pt_PT/ecm.lang +++ b/htdocs/langs/pt_PT/ecm.lang @@ -6,7 +6,7 @@ ECMSectionAuto=Pasta automática ECMSectionsManual=Pastas manuais ECMSectionsAuto=Pastas automáticas ECMSections=Pastas -ECMRoot=Raiz do ECM +ECMRoot=Raiz do GCE ECMNewSection=Nova pasta manual ECMAddSection=Adicionar pasta manual ECMCreationDate=Data de criação @@ -14,8 +14,8 @@ ECMNbOfFilesInDir=Número de ficheiros na pasta ECMNbOfSubDir=Número de sub-pastas ECMNbOfFilesInSubDir=Número de ficheiros em sub-pastas ECMCreationUser=Criador -ECMArea=DMS/ECM area -ECMAreaDesc=The DMS/ECM (Document Management System / Electronic Content Management) area allows you to save, share and search quickly all kind of documents in Dolibarr. +ECMArea=A área de SGD/GCE +ECMAreaDesc=A área de SGD/GCE (Sistema de Gestão de Documentos/Gestão de Conteúdo Eletrónico) permite salvar, compartilhar e pesquisar rapidamente todos os tipos de documentos no Dolibarr. ECMAreaDesc2=* As diretorias automáticas são preenchidas automaticamente ao adicionar documentos a partir de uma ficha de um elemento.
* As diretorias manuais podem ser utlizadas para guardar documentos não associados a um elemento específico. ECMSectionWasRemoved=A pasta %s foi eliminada. ECMSectionWasCreated=O diretório %s foi criado. @@ -42,7 +42,7 @@ ECMDirectoryForFiles=Pasta relativa para ficheiros CannotRemoveDirectoryContainsFiles=Não se pode eliminar porque contem ficheiros ECMFileManager=Explorador de Ficheiros ECMSelectASection=Seleccione uma pasta na árvore da esquerda -DirNotSynchronizedSyncFirst=Este diretório parece ter sido ser criado ou modificado fora do módulo ECM. Você deve clicar no botão "Voltar a sincronizar" primeiro para sincronizar o disco e a base de dados para obter o conteúdo desse diretório. +DirNotSynchronizedSyncFirst=Este diretório parece ter sido ser criado ou modificado fora do módulo GCE. Você deve clicar no botão "Voltar a sincronizar" primeiro para sincronizar o disco e a base de dados para obter o conteúdo desse diretório. ReSyncListOfDir=Voltar a sincronizar a lista de diretórios HashOfFileContent=Hash do conteúdo do ficheiro FileNotYetIndexedInDatabase=Ficheiro ainda não indexado na base de dados (tente voltar a carregá-lo) diff --git a/htdocs/langs/pt_PT/interventions.lang b/htdocs/langs/pt_PT/interventions.lang index 37fa3e3c3b8..9023acc9e1d 100644 --- a/htdocs/langs/pt_PT/interventions.lang +++ b/htdocs/langs/pt_PT/interventions.lang @@ -24,9 +24,9 @@ NameAndSignatureOfInternalContact=Nome e Assinatura do Participante: NameAndSignatureOfExternalContact=Nome e Assinatura do Cliente: DocumentModelStandard=Modelo da Norma Intervenção InterventionCardsAndInterventionLines=Fichas e Linhas de Intervenção -InterventionClassifyBilled=Classificar "Faturado" -InterventionClassifyUnBilled=Classify "Unbilled" -InterventionClassifyDone=Classify "Done" +InterventionClassifyBilled=Classificar como "Faturado" +InterventionClassifyUnBilled=Classificar como "Não faturado" +InterventionClassifyDone=Classificar como "Efetuado" StatusInterInvoiced=Faturados SendInterventionRef=Submission of intervention %s SendInterventionByMail=Send intervention by Email diff --git a/htdocs/langs/pt_PT/loan.lang b/htdocs/langs/pt_PT/loan.lang index 92320ffdbbc..11db1661026 100644 --- a/htdocs/langs/pt_PT/loan.lang +++ b/htdocs/langs/pt_PT/loan.lang @@ -15,7 +15,7 @@ LoanAccountancyInsuranceCode=Accounting account insurance LoanAccountancyInterestCode=Accounting account interest ConfirmDeleteLoan=Confirme a eliminação deste empréstimo LoanDeleted=Empréstimo Apagado Com Sucesso -ConfirmPayLoan=Confirm classify paid this loan +ConfirmPayLoan=Confirmar classificação deste empréstimo como pago LoanPaid=Empréstimo Liquidado # Calc LoanCalc=Bank Loans Calculator @@ -27,7 +27,7 @@ AnnualInterestRate=Taxa de Juros Anual ExplainCalculations=Explain Calculations ShowMeCalculationsAndAmortization=Mostrar-me os cálculos e a amortização MortgagePaymentInformation=Informação do Pagamento da Hipoteca -DownPayment=Down Payment +DownPayment=Adiantamento DownPaymentDesc=The down payment = The price of the home multiplied by the percentage down divided by 100 (for 5% down becomes 5/100 or 0.05) InterestRateDesc=The interest rate = The annual interest percentage divided by 100 MonthlyFactorDesc=The monthly factor = The result of the following formula diff --git a/htdocs/langs/pt_PT/main.lang b/htdocs/langs/pt_PT/main.lang index 7a3f80394ee..2d006a126a0 100644 --- a/htdocs/langs/pt_PT/main.lang +++ b/htdocs/langs/pt_PT/main.lang @@ -116,7 +116,7 @@ DoTest=Teste ToFilter=Filtrar NoFilter=Sem filtro WarningYouHaveAtLeastOneTaskLate=Atenção, tem um elemento a menos que passou a data de tolerencia. -yes=Sim +yes=sim Yes=Sim no=Não No=Não @@ -807,7 +807,7 @@ ShowTempMassFilesArea=Mostrar área para os ficheiros criados através de açõe ConfirmMassDeletion=Confirmação de eliminação em massa ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ? RelatedObjects=Objetos relacionados -ClassifyBilled=Classificar Facturado +ClassifyBilled=Classificar como faturado Progress=Progresso ClickHere=Clique aqui FrontOffice=Front office diff --git a/htdocs/langs/pt_PT/trips.lang b/htdocs/langs/pt_PT/trips.lang index ea6311f8213..f3a63e21817 100644 --- a/htdocs/langs/pt_PT/trips.lang +++ b/htdocs/langs/pt_PT/trips.lang @@ -19,7 +19,7 @@ ConfirmDeleteTrip=Tem certeza de que deseja eliminar este relatório de despesas ListTripsAndExpenses=Lista de relatórios de despesas ListToApprove=A aguardar aprovação ExpensesArea=Expense reports area -ClassifyRefunded=Classificar 'Reembolsado' +ClassifyRefunded=Classificar como 'Reembolsado' ExpenseReportWaitingForApproval=A new expense report has been submitted for approval ExpenseReportWaitingForApprovalMessage=A new expense report has been submitted and is waiting for approval.\n - User: %s\n - Period: %s\nClick here to validate: %s ExpenseReportWaitingForReApproval=An expense report has been submitted for re-approval diff --git a/htdocs/langs/pt_PT/withdrawals.lang b/htdocs/langs/pt_PT/withdrawals.lang index f691035a7b1..06b24cb1c45 100644 --- a/htdocs/langs/pt_PT/withdrawals.lang +++ b/htdocs/langs/pt_PT/withdrawals.lang @@ -26,8 +26,8 @@ LastWithdrawalReceipt=Latest %s direct debit receipts MakeWithdrawRequest=Make a direct debit payment request WithdrawRequestsDone=%s direct debit payment requests recorded ThirdPartyBankCode=Código Banco do Terceiro -NoInvoiceCouldBeWithdrawed=Não há factura de débito directo com sucesso. Verifique se a factura da empresa tem um válido IBAN. -ClassCredited=Classificar creditados +NoInvoiceCouldBeWithdrawed=No invoice withdrawed with success. Check that invoices are on companies with a valid default BAN and that BAN has a RUM with mode %s. +ClassCredited=Classificar como creditado ClassCreditedConfirm=Está seguro de querer classificar este débito directo como realizado sobre a sua conta bancaria? TransData=Data de Envio TransMetod=Método de transmissão diff --git a/htdocs/langs/pt_PT/workflow.lang b/htdocs/langs/pt_PT/workflow.lang index 81681f9a598..adc8112cb89 100644 --- a/htdocs/langs/pt_PT/workflow.lang +++ b/htdocs/langs/pt_PT/workflow.lang @@ -9,12 +9,12 @@ descWORKFLOW_CONTRACT_AUTOCREATE_INVOICE=Criar automaticamente uma fatura de cli descWORKFLOW_ORDER_AUTOCREATE_INVOICE=Automatically create a customer invoice after a customer order is closed (new invoice will have same amount than order) # Autoclassify customer proposal or order descWORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL=Classify linked source proposal(s) to billed when customer order is set to billed (and if amount of the order is same than total amount of signed linked proposals) -descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=Classify linked source proposal(s) to billed when customer invoice is validated (and if amount of the invoice is same than total amount of signed linked proposals) +descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=Classifique os orçamentos de clientes vinculados como faturados quando a fatura do cliente é validada (e se o valor da fatura for igual ao montante total dos orçamentos, assinados, vinculados) descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Classify linked source customer order(s) to billed when customer invoice is validated (and if amount of the invoice is same than total amount of linked orders) descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Classify linked source customer order(s) to billed when customer invoice is set to paid (and if amount of the invoice is same than total amount of linked orders) -descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Classify linked source customer order to shipped when a shipment is validated (and if quantity shipped by all shipments is the same as in the order to update) +descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Classifique a encomenda do cliente vinculada como enviada quando uma expedição é validada (e se a quantidade enviada por todas as expedições for idêntica à da encomenda a atualizar) # Autoclassify supplier order -descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Classify linked source supplier proposal(s) to billed when supplier invoice is validated (and if amount of the invoice is same than total amount of linked proposals) -descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Classify linked source supplier order(s) to billed when supplier invoice is validated (and if amount of the invoice is same than total amount of linked orders) +descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Classifique os pedidos de orçamento do fornecedor vinculados como faturados quando a fatura do fornecedor é validada (e se o montante da fatura for igual ao montante total dos pedidos de orçamento vinculados) +descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Classifique as notas de encomenda de fornecedores vinculadas como faturadas quando a fatura do fornecedor é validada (e se o valor da fatura for igual ao total das notas de encomenda vinculadas) AutomaticCreation=Criação automática AutomaticClassification=Classificação automática diff --git a/htdocs/livraison/card.php b/htdocs/livraison/card.php index b0de98ae2eb..e67d6865090 100644 --- a/htdocs/livraison/card.php +++ b/htdocs/livraison/card.php @@ -165,7 +165,7 @@ if ($action == 'confirm_delete' && $confirm == 'yes' && $user->rights->expeditio { $db->commit(); if (! empty($backtopage)) header("Location: ".$backtopage); - else header("Location: ".DOL_URL_ROOT.'/expedition/index.php'); + else header("Location: ".DOL_URL_ROOT.'/expedition/list.php?restore_lastsearch_values=1'); exit; } else diff --git a/htdocs/margin/admin/margin.php b/htdocs/margin/admin/margin.php index 1918a9aa137..559b5b13564 100644 --- a/htdocs/margin/admin/margin.php +++ b/htdocs/margin/admin/margin.php @@ -113,7 +113,7 @@ if ($action == 'contact') llxHeader('',$langs->trans("margesSetup")); -$linkback=''.$langs->trans("BackToModuleList").''; +$linkback=''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans("margesSetup"),$linkback,'title_setup'); diff --git a/htdocs/modulebuilder/template/admin/about.php b/htdocs/modulebuilder/template/admin/about.php index b6584f8d909..c34574791c1 100644 --- a/htdocs/modulebuilder/template/admin/about.php +++ b/htdocs/modulebuilder/template/admin/about.php @@ -42,14 +42,10 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; require_once '../lib/mymodule.lib.php'; // Translations -$langs->load("errors"); -$langs->load("admin"); -$langs->load("mymodule@mymodule"); +$langs->loadLangs(array("errors","admin","mymodule@mymodule")); // Access control -if (! $user->admin) { - accessforbidden(); -} +if (! $user->admin) accessforbidden(); // Parameters $action = GETPOST('action', 'alpha'); @@ -73,7 +69,7 @@ $page_name = "MyModuleAbout"; llxHeader('', $langs->trans($page_name)); // Subheader -$linkback = ''.$langs->trans("BackToModuleList").''; +$linkback = ''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans($page_name), $linkback, 'object_mymodule@mymodule'); diff --git a/htdocs/modulebuilder/template/admin/setup.php b/htdocs/modulebuilder/template/admin/setup.php index 19908d33546..58a572a42ac 100644 --- a/htdocs/modulebuilder/template/admin/setup.php +++ b/htdocs/modulebuilder/template/admin/setup.php @@ -71,7 +71,7 @@ $page_name = "MyModuleSetup"; llxHeader('', $langs->trans($page_name)); // Subheader -$linkback = ''.$langs->trans("BackToModuleList").''; +$linkback = ''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans($page_name), $linkback, 'object_mymodule@mymodule'); diff --git a/htdocs/modulebuilder/template/class/myobject.class.php b/htdocs/modulebuilder/template/class/myobject.class.php index 616b7ec495d..e40b6b178e6 100644 --- a/htdocs/modulebuilder/template/class/myobject.class.php +++ b/htdocs/modulebuilder/template/class/myobject.class.php @@ -41,9 +41,13 @@ class MyObject extends CommonObject */ public $table_element = 'mymodule_myobject'; /** - * @var array Does myobject support multicompany module ? 0=No test on entity, 1=Test with field entity, 2=Test with link by societe + * @var int Does myobject support multicompany module ? 0=No test on entity, 1=Test with field entity, 2=Test with link by societe */ public $ismultientitymanaged = 0; + /** + * @var int Does myobject support extrafields ? 0=No, 1=Yes + */ + public $isextrafieldmanaged = 1; /** * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png */ diff --git a/htdocs/modulebuilder/template/myobject_card.php b/htdocs/modulebuilder/template/myobject_card.php index 94123008244..68cefa714c3 100644 --- a/htdocs/modulebuilder/template/myobject_card.php +++ b/htdocs/modulebuilder/template/myobject_card.php @@ -235,7 +235,8 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea $formconfirm = ''; // Confirmation to delete - if ($action == 'delete') { + if ($action == 'delete') + { $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('DeleteMyObject'), $langs->trans('ConfirmDeleteMyObject'), 'confirm_delete', '', 0, 1); } diff --git a/htdocs/modulebuilder/template/myobject_list.php b/htdocs/modulebuilder/template/myobject_list.php index fa06a7e7d05..ed8e58e1c12 100644 --- a/htdocs/modulebuilder/template/myobject_list.php +++ b/htdocs/modulebuilder/template/myobject_list.php @@ -407,7 +407,7 @@ foreach($object->fields as $key => $val) // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; // Hook fields -$parameters=array('arrayfields'=>$arrayfields); +$parameters=array('arrayfields'=>$arrayfields,'param'=>$param,'sortfield'=>$sortfield,'sortorder'=>$sortorder); $reshook=$hookmanager->executeHooks('printFieldListTitle', $parameters, $object); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"],'','','','align="center"',$sortfield,$sortorder,'maxwidthsearch ')."\n"; diff --git a/htdocs/paybox/admin/paybox.php b/htdocs/paybox/admin/paybox.php index b5049becbdb..79a6a62ad2a 100644 --- a/htdocs/paybox/admin/paybox.php +++ b/htdocs/paybox/admin/paybox.php @@ -98,7 +98,7 @@ if (empty($conf->global->PAYBOX_IBS_DEVISE)) $conf->global->PAYBOX_IBS_DEVISE=$I llxHeader(); -$linkback=''.$langs->trans("BackToModuleList").''; +$linkback=''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans("PayBoxSetup"),$linkback,'title_setup'); $h = 0; diff --git a/htdocs/paypal/admin/paypal.php b/htdocs/paypal/admin/paypal.php index 3647ea7a4d5..711f898901c 100644 --- a/htdocs/paypal/admin/paypal.php +++ b/htdocs/paypal/admin/paypal.php @@ -112,7 +112,7 @@ $form=new Form($db); llxHeader('',$langs->trans("PaypalSetup")); -$linkback=''.$langs->trans("BackToModuleList").''; +$linkback=''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans("ModuleSetup").' PayPal',$linkback); $head=paypaladmin_prepare_head(); diff --git a/htdocs/printing/admin/printing.php b/htdocs/printing/admin/printing.php index e5892793c77..66d1b0ac6f3 100644 --- a/htdocs/printing/admin/printing.php +++ b/htdocs/printing/admin/printing.php @@ -112,7 +112,7 @@ $form = new Form($db); llxHeader('',$langs->trans("PrintingSetup")); -$linkback=''.$langs->trans("BackToModuleList").''; +$linkback=''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans("PrintingSetup"),$linkback,'title_setup'); $head=printingadmin_prepare_head($mode); diff --git a/htdocs/product/admin/dynamic_prices.php b/htdocs/product/admin/dynamic_prices.php index 747d423f402..bd7fce52b77 100644 --- a/htdocs/product/admin/dynamic_prices.php +++ b/htdocs/product/admin/dynamic_prices.php @@ -149,7 +149,7 @@ $form = new Form($db); llxHeader("","",$langs->trans("CardProduct".$product->type)); -$linkback=''.$langs->trans("BackToModuleList").''; +$linkback=''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans("DynamicPriceConfiguration"), $linkback, 'title_setup'); print $langs->trans("DynamicPriceDesc").'
'; diff --git a/htdocs/product/admin/price_rules.php b/htdocs/product/admin/price_rules.php index 224acd9c04b..088c0126417 100644 --- a/htdocs/product/admin/price_rules.php +++ b/htdocs/product/admin/price_rules.php @@ -124,7 +124,7 @@ if (empty($conf->produit->enabled)) { llxHeader('', $langs->trans('MultipriceRules')); -$linkback=''.$langs->trans("BackToModuleList").''; +$linkback=''.$langs->trans("BackToModuleList").''; print load_fiche_titre($title,$linkback,'title_setup'); diff --git a/htdocs/product/admin/product.php b/htdocs/product/admin/product.php index 06cfc0e0eac..43afe4f74e7 100644 --- a/htdocs/product/admin/product.php +++ b/htdocs/product/admin/product.php @@ -273,7 +273,7 @@ else if (empty($conf->service->enabled)) llxHeader('',$title); -$linkback=''.$langs->trans("BackToModuleList").''; +$linkback=''.$langs->trans("BackToModuleList").''; print load_fiche_titre($title,$linkback,'title_setup'); $head = product_admin_prepare_head(); diff --git a/htdocs/product/admin/product_extrafields.php b/htdocs/product/admin/product_extrafields.php index e7b6a0bd33c..856151a8238 100644 --- a/htdocs/product/admin/product_extrafields.php +++ b/htdocs/product/admin/product_extrafields.php @@ -78,7 +78,7 @@ $help_url=''; llxHeader('',$title,$help_url); -$linkback=''.$langs->trans("BackToModuleList").''; +$linkback=''.$langs->trans("BackToModuleList").''; print load_fiche_titre($title,$linkback,'title_setup'); diff --git a/htdocs/product/admin/product_lot_extrafields.php b/htdocs/product/admin/product_lot_extrafields.php index 225b1fff45c..20f3b9d30b9 100644 --- a/htdocs/product/admin/product_lot_extrafields.php +++ b/htdocs/product/admin/product_lot_extrafields.php @@ -69,7 +69,7 @@ $help_url=''; llxHeader('',$title,$help_url); -$linkback=''.$langs->trans("BackToModuleList").''; +$linkback=''.$langs->trans("BackToModuleList").''; print load_fiche_titre($title,$linkback,'title_setup'); diff --git a/htdocs/product/card.php b/htdocs/product/card.php index 861c46328df..f65898bda68 100644 --- a/htdocs/product/card.php +++ b/htdocs/product/card.php @@ -124,6 +124,9 @@ $hookmanager->initHooks(array('productcard','globalcard')); if ($cancel) $action = ''; +$usercanread = (($object->type == Product::TYPE_PRODUCT && $user->rights->produit->lire) || ($object->type == Product::TYPE_SERVICE && $user->rights->service->lire)); +$usercancreate = (($object->type == Product::TYPE_PRODUCT && $user->rights->produit->creer) || ($object->type == Product::TYPE_SERVICE && $user->rights->service->creer)); +$usercandelete = (($object->type == Product::TYPE_PRODUCT && $user->rights->produit->supprimer) || ($object->type == Product::TYPE_SERVICE && $user->rights->service->supprimer)); $createbarcode=empty($conf->barcode->enabled)?0:1; if (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->barcode->creer_advance)) $createbarcode=0; @@ -134,7 +137,7 @@ if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'e if (empty($reshook)) { // Type - if ($action == 'setfk_product_type' && $user->rights->produit->creer) + if ($action == 'setfk_product_type' && $usercancreate) { $result = $object->setValueFrom('fk_product_type', GETPOST('fk_product_type'), '', null, 'text', '', $user, 'PRODUCT_MODIFY'); header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id); @@ -143,7 +146,7 @@ if (empty($reshook)) // Actions to build doc $upload_dir = $conf->produit->dir_output; - $permissioncreate = $user->rights->produit->creer; + $permissioncreate = $usercancreate; include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php'; include DOL_DOCUMENT_ROOT.'/core/actions_printing.inc.php'; @@ -181,7 +184,7 @@ if (empty($reshook)) } // Add a product or service - if ($action == 'add' && ($user->rights->produit->creer || $user->rights->service->creer)) + if ($action == 'add' && $usercancreate) { $error=0; @@ -360,7 +363,7 @@ if (empty($reshook)) } // Update a product or service - if ($action == 'update' && ($user->rights->produit->creer || $user->rights->service->creer)) + if ($action == 'update' && $usercancreate) { if (GETPOST('cancel','alpha')) { @@ -477,7 +480,7 @@ if (empty($reshook)) // Action clone object if ($action == 'confirm_clone' && $confirm != 'yes') { $action=''; } - if ($action == 'confirm_clone' && $confirm == 'yes' && ($user->rights->produit->creer || $user->rights->service->creer)) + if ($action == 'confirm_clone' && $confirm == 'yes' && $usercancreate) { if (! GETPOST('clone_content') && ! GETPOST('clone_prices') ) { @@ -565,12 +568,9 @@ if (empty($reshook)) // Delete a product if ($action == 'confirm_delete' && $confirm != 'yes') { $action=''; } - if ($action == 'confirm_delete' && $confirm == 'yes') - { - if (($object->type == Product::TYPE_PRODUCT && $user->rights->produit->supprimer) || ($object->type == Product::TYPE_SERVICE && $user->rights->service->supprimer)) - { - $result = $object->delete($user); - } + if ($action == 'confirm_delete' && $confirm == 'yes' && $usercandelete) + { + $result = $object->delete($user); if ($result > 0) { @@ -887,7 +887,7 @@ else // ----------------------------------------- // When used in standard mode // ----------------------------------------- - if ($action == 'create' && ($user->rights->produit->creer || $user->rights->service->creer)) + if ($action == 'create' && $usercancreate) { //WYSIWYG Editor require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; @@ -1240,7 +1240,7 @@ else else if ($object->id > 0) { // Fiche en mode edition - if ($action == 'edit' && ((($object->type == Product::TYPE_PRODUCT && $user->rights->produit->creer) || ($object->type == Product::TYPE_SERVICE && $user->rights->service->creer)))) + if ($action == 'edit' && $usercancreate) { //WYSIWYG Editor require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; @@ -1588,15 +1588,15 @@ else print '
'; print '

*** Force modules not found to be disabled

*** Force modules not found to be disabled (only modules adding js, css or hooks can be detected as removed)

*** Clean table user_rights from lines of external modules no more enabled
Found line with id '.$obj->id.', label "'.$obj->libelle.'" of module "'.$obj->module.'" to delete'; + if (GETPOST('clean_perm_table','alpha') == 'confirmed') + { + $sqldelete = 'DELETE FROM '.MAIN_DB_PREFIX.'rights_def WHERE id = '.$obj->id; + $resqldelete = $db->query($sqldelete); + if (! $resqldelete) + { + dol_print_error($db); + } + print ' - deleted'; + } + print '
No lines of a disabled external module (with id > 100000) found into table rights_def
'; + + print ''.$langs->trans('MigrationUserRightsEntity')."
\n"; + + $error = 0; + + dolibarr_install_syslog("upgrade2::migrate_user_rights_entity"); + + $db->begin(); + + $sqlSelect = "SELECT u.rowid, u.entity"; + $sqlSelect.= " FROM ".MAIN_DB_PREFIX."user as u"; + $sqlSelect.= " WHERE u.entity > 1"; + //print $sqlSelect; + + $resql = $db->query($sqlSelect); + if ($resql) + { + $i = 0; + $num = $db->num_rows($resql); + + if ($num) + { + while ($i < $num) + { + $obj = $db->fetch_object($resql); + + $sqlUpdate = "UPDATE ".MAIN_DB_PREFIX."user_rights SET"; + $sqlUpdate.= " entity = " . $obj->entity; + $sqlUpdate.= " WHERE fk_user = " . $obj->rowid; + + $result=$db->query($sqlUpdate); + if (! $result) + { + $error++; + dol_print_error($db); + } + + print ". "; + $i++; + } + } + else + { + print $langs->trans('AlreadyDone')."
\n"; + } + + if (! $error) + { + $db->commit(); + } + else + { + $db->rollback(); + } + } + else + { + dol_print_error($db); + $db->rollback(); + } + + + print '
'; + + print ''.$langs->trans('MigrationUserGroupRightsEntity')."
\n"; + + $error = 0; + + dolibarr_install_syslog("upgrade2::migrate_usergroup_rights_entity"); + + $db->begin(); + + $sqlSelect = "SELECT u.rowid, u.entity"; + $sqlSelect.= " FROM ".MAIN_DB_PREFIX."usergroup as u"; + $sqlSelect.= " WHERE u.entity > 1"; + //print $sqlSelect; + + $resql = $db->query($sqlSelect); + if ($resql) + { + $i = 0; + $num = $db->num_rows($resql); + + if ($num) + { + while ($i < $num) + { + $obj = $db->fetch_object($resql); + + $sqlUpdate = "UPDATE ".MAIN_DB_PREFIX."usergroup_rights SET"; + $sqlUpdate.= " entity = " . $obj->entity; + $sqlUpdate.= " WHERE fk_usergroup = " . $obj->rowid; + + $result=$db->query($sqlUpdate); + if (! $result) + { + $error++; + dol_print_error($db); + } + + print ". "; + $i++; + } + } + else + { + print $langs->trans('AlreadyDone')."
\n"; + } + + if (! $error) + { + $db->commit(); + } + else + { + $db->rollback(); + } + } + else + { + dol_print_error($db); + $db->rollback(); + } + + + print '
'; - // Type - if (! empty($conf->produit->enabled) && ! empty($conf->service->enabled)) - { - // TODO change for compatibility with edit in place - $typeformat='select;0:'.$langs->trans("Product").',1:'.$langs->trans("Service"); - print ''; - } + // Type + if (! empty($conf->produit->enabled) && ! empty($conf->service->enabled)) + { + // TODO change for compatibility with edit in place + $typeformat='select;0:'.$langs->trans("Product").',1:'.$langs->trans("Service"); + print ''; + } if ($showbarcode) { @@ -1605,7 +1605,7 @@ else print '
'.$form->editfieldkey("Type",'fk_product_type',$object->type,$object,$user->rights->produit->creer||$user->rights->service->creer,$typeformat).''; - print $form->editfieldval("Type",'fk_product_type',$object->type,$object,$user->rights->produit->creer||$user->rights->service->creer,$typeformat); - print '
'.$form->editfieldkey("Type", 'fk_product_type', $object->type, $object, $usercancreate, $typeformat).''; + print $form->editfieldval("Type", 'fk_product_type', $object->type, $object, $usercancreate, $typeformat); + print '
'; - if (($action != 'editbarcodetype') && ! empty($user->rights->produit->creer) && $createbarcode) print ''; + if (($action != 'editbarcodetype') && $usercancreate && $createbarcode) print ''; print '
'; print $langs->trans("BarcodeType"); print 'id.'">'.img_edit($langs->trans('Edit'),1).'id.'">'.img_edit($langs->trans('Edit'),1).'
'; print ''; if ($action == 'editbarcodetype' || $action == 'editbarcode') @@ -1629,7 +1629,7 @@ else print ''; - if (($action != 'editbarcode') && ! empty($user->rights->produit->creer) && $createbarcode) print ''; + if (($action != 'editbarcode') && $usercancreate && $createbarcode) print ''; print '
'; print $langs->trans("BarcodeValue"); print 'id.'">'.img_edit($langs->trans('Edit'),1).'id.'">'.img_edit($langs->trans('Edit'),1).'
'; print ''; if ($action == 'editbarcode') @@ -1741,7 +1741,7 @@ else // Batch number management (to batch) if (! empty($conf->productbatch->enabled)) { print ''.$langs->trans("ManageLotSerial").''; - if (! empty($conf->use_javascript_ajax) && $user->rights->produit->creer && ! empty($conf->global->MAIN_DIRECT_STATUS_UPDATE)) { + if (! empty($conf->use_javascript_ajax) && $usercancreate && ! empty($conf->global->MAIN_DIRECT_STATUS_UPDATE)) { print ajax_object_onoff($object, 'status_batch', 'tobatch', 'ProductStatusOnBatch', 'ProductStatusNotOnBatch'); } else { print $object->getLibStatut(0,2); @@ -1974,9 +1974,8 @@ if ($action != 'create' && $action != 'edit') $parameters=array(); $reshook=$hookmanager->executeHooks('addMoreActionsButtons',$parameters,$object,$action); // Note that $action and $object may have been modified by hook if (empty($reshook)) - { - if (($object->type == Product::TYPE_PRODUCT && $user->rights->produit->creer ) || - ($object->type == Product::TYPE_SERVICE && $user->rights->service->creer)) + { + if ($usercancreate) { if (! isset($object->no_button_edit) || $object->no_button_edit <> 1) print ''; @@ -1994,8 +1993,7 @@ if ($action != 'create' && $action != 'edit') } $object_is_used = $object->isObjectUsed($object->id); - if (($object->type == Product::TYPE_PRODUCT && $user->rights->produit->supprimer) - || ($object->type == Product::TYPE_SERVICE && $user->rights->service->supprimer)) + if ($usercandelete) { if (empty($object_is_used) && (! isset($object->no_button_delete) || $object->no_button_delete <> 1)) { @@ -2151,8 +2149,8 @@ if ($action != 'create' && $action != 'edit' && $action != 'delete') $relativepath = $comref . '/' . $objectref . '.pdf'; $filedir = $conf->produit->dir_output . '/' . $objectref; $urlsource=$_SERVER["PHP_SELF"]."?id=".$object->id; - $genallowed=$user->rights->produit->lire; - $delallowed=$user->rights->produit->creer; + $genallowed=$usercanread; + $delallowed=$usercancreate; $var=true; diff --git a/htdocs/product/composition/card.php b/htdocs/product/composition/card.php index a6cc3427243..8a62533a370 100644 --- a/htdocs/product/composition/card.php +++ b/htdocs/product/composition/card.php @@ -473,7 +473,7 @@ if ($id > 0 || ! empty($ref)) } else { - $colspan=6; + $colspan=8; if (! empty($conf->stock->enabled)) $colspan++; print ''; diff --git a/htdocs/product/fournisseurs.php b/htdocs/product/fournisseurs.php index f70dd2b78d9..5219291e8af 100644 --- a/htdocs/product/fournisseurs.php +++ b/htdocs/product/fournisseurs.php @@ -63,7 +63,9 @@ if (! empty($_REQUEST['search_fourn_id'])) $fieldvalue = (! empty($id) ? $id : (! empty($ref) ? $ref : '')); $fieldtype = (! empty($ref) ? 'ref' : 'rowid'); if ($user->societe_id) $socid=$user->societe_id; -$result=restrictedArea($user,'produit|service&fournisseur',$fieldvalue,'product&product','','',$fieldtype); +$result=restrictedArea($user,'produit|service',$fieldvalue,'product&product','','',$fieldtype); + +if (empty($user->rights->fournisseur->lire)) accessforbidden(); $limit = GETPOST('limit','int')?GETPOST('limit','int'):$conf->liste_limit; $sortfield = GETPOST("sortfield",'alpha'); @@ -76,6 +78,8 @@ $pagenext = $page + 1; if (! $sortfield) $sortfield="s.nom"; if (! $sortorder) $sortorder="ASC"; +$contextpage='pricesuppliercard'; + // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context $hookmanager->initHooks(array('pricesuppliercard','globalcard')); diff --git a/htdocs/product/list.php b/htdocs/product/list.php index 257d3344ba5..178432addbc 100644 --- a/htdocs/product/list.php +++ b/htdocs/product/list.php @@ -269,7 +269,6 @@ else $sql.= ' p.fk_product_type, p.duration, p.tosell, p.tobuy, p.seuil_stock_alerte, p.desiredstock,'; $sql.= ' p.tobatch, p.accountancy_code_sell, p.accountancy_code_buy,'; $sql.= ' p.datec as date_creation, p.tms as date_update, p.pmp,'; - //$sql.= ' pfp.ref_fourn as ref_supplier, '; $sql.= ' MIN(pfp.unitprice) as minsellprice'; if (!empty($conf->variants->enabled) && $search_hidechildproducts && ($search_type === 0)) { $sql .= ', pac.rowid prod_comb_id'; @@ -655,7 +654,7 @@ else // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; // Hook fields - $parameters=array('arrayfields'=>$arrayfields); + $parameters=array('arrayfields'=>$arrayfields,'param'=>$param,'sortfield'=>$sortfield,'sortorder'=>$sortorder); $reshook=$hookmanager->executeHooks('printFieldListTitle',$parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; if (! empty($arrayfields['p.datec']['checked'])) print_liste_field_titre($arrayfields['p.datec']['label'],$_SERVER["PHP_SELF"],"p.datec","",$param,'align="center" class="nowrap"',$sortfield,$sortorder); @@ -716,7 +715,7 @@ else // Ref if (! empty($arrayfields['p.ref']['checked'])) { - print ''; + print ''; print $product_static->getNomUrl(1); print "\n"; if (! $i) $totalarray['nbfield']++; @@ -724,7 +723,7 @@ else // Ref supplier if (! empty($arrayfields['pfp.ref_fourn']['checked'])) { - print ''; + print ''; print $product_static->getNomUrl(1); print "\n"; if (! $i) $totalarray['nbfield']++; diff --git a/htdocs/product/stock/card.php b/htdocs/product/stock/card.php index 8ab36de3428..61bd5c3d47f 100644 --- a/htdocs/product/stock/card.php +++ b/htdocs/product/stock/card.php @@ -117,7 +117,7 @@ if ($action == 'confirm_delete' && $confirm == 'yes' && $user->rights->stock->su if ($result > 0) { setEventMessages($langs->trans("RecordDeleted"), null, 'mesgs'); - header("Location: ".DOL_URL_ROOT.'/product/stock/list.php'); + header("Location: ".DOL_URL_ROOT.'/product/stock/list.php?resotre_lastsearch_values=1'); exit; } else diff --git a/htdocs/projet/admin/project.php b/htdocs/projet/admin/project.php index 0252ab58f36..1eddf00eb46 100644 --- a/htdocs/projet/admin/project.php +++ b/htdocs/projet/admin/project.php @@ -293,7 +293,7 @@ llxHeader("",$langs->trans("ProjectsSetup")); $form=new Form($db); -$linkback=''.$langs->trans("BackToModuleList").''; +$linkback=''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans("ProjectsSetup"),$linkback,'title_setup'); $head=project_admin_prepare_head(); diff --git a/htdocs/projet/admin/project_extrafields.php b/htdocs/projet/admin/project_extrafields.php index eb27110e88c..d247408079c 100644 --- a/htdocs/projet/admin/project_extrafields.php +++ b/htdocs/projet/admin/project_extrafields.php @@ -64,7 +64,7 @@ $textobject=$langs->transnoentitiesnoconv("Project"); llxHeader("",$langs->trans("ProjectsSetup")); -$linkback=''.$langs->trans("BackToModuleList").''; +$linkback=''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans("ProjectsSetup"),$linkback,'title_setup'); diff --git a/htdocs/projet/admin/project_task_extrafields.php b/htdocs/projet/admin/project_task_extrafields.php index 9f47376d02d..01a001bb039 100644 --- a/htdocs/projet/admin/project_task_extrafields.php +++ b/htdocs/projet/admin/project_task_extrafields.php @@ -64,7 +64,7 @@ $textobject=$langs->transnoentitiesnoconv("Project"); llxHeader("",$langs->trans("ProjectsSetup")); -$linkback=''.$langs->trans("BackToModuleList").''; +$linkback=''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans("ProjectsSetup"),$linkback,'title_setup'); $head = project_admin_prepare_head(); diff --git a/htdocs/projet/card.php b/htdocs/projet/card.php index b5646e37128..5ff65eae816 100644 --- a/htdocs/projet/card.php +++ b/htdocs/projet/card.php @@ -407,7 +407,7 @@ if (empty($reshook)) if ($result > 0) { setEventMessages($langs->trans("RecordDeleted"), null, 'mesgs'); - header("Location: index.php"); + header("Location: list.php?restore_lastsearch_values=1"); exit; } else @@ -917,9 +917,9 @@ elseif ($object->id > 0) // Date start - end print ''.$langs->trans("DateStart").' - '.$langs->trans("DateEnd").''; - $start = dol_print_date($object->date_start,'dayhour'); + $start = dol_print_date($object->date_start,'day'); print ($start?$start:'?'); - $end = dol_print_date($object->date_end,'dayhour'); + $end = dol_print_date($object->date_end,'day'); print ' - '; print ($end?$end:'?'); if ($object->hasDelay()) print img_warning("Late"); diff --git a/htdocs/projet/class/project.class.php b/htdocs/projet/class/project.class.php index e24a444702c..d9eeee14d89 100644 --- a/htdocs/projet/class/project.class.php +++ b/htdocs/projet/class/project.class.php @@ -583,10 +583,10 @@ class Project extends CommonObject $i++; } $this->db->free($result); - - /* Return array */ - return $elements; } + + /* Return array even if empty*/ + return $elements; } else { diff --git a/htdocs/projet/contact.php b/htdocs/projet/contact.php index 72b82ac2bb0..fde0ed45288 100644 --- a/htdocs/projet/contact.php +++ b/htdocs/projet/contact.php @@ -150,26 +150,26 @@ if ($id > 0 || ! empty($ref)) // Project card - + $linkback = ''.$langs->trans("BackToList").''; - + $morehtmlref='
'; // Title $morehtmlref.=$object->title; // Thirdparty - if ($object->thirdparty->id > 0) + if ($object->thirdparty->id > 0) { $morehtmlref.='
'.$langs->trans('ThirdParty') . ' : ' . $object->thirdparty->getNomUrl(1, 'project'); } $morehtmlref.='
'; - + // Define a complementary filter for search of next/prev ref. if (! $user->rights->projet->all->lire) { $objectsListId = $object->getProjectsAuthorizedForUser($user,0,0); $object->next_prev_filter=" rowid in (".(count($objectsListId)?join(',',array_keys($objectsListId)):'0').")"; } - + dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref); @@ -178,7 +178,7 @@ if ($id > 0 || ! empty($ref)) print '
'; print ''; - + // Visibility print ''; - + // Opportunity percent print ''; } - + // Date start - end print '
'.$langs->trans("Visibility").''; if ($object->public) print $langs->trans('SharedProject'); @@ -192,7 +192,7 @@ if ($id > 0 || ! empty($ref)) $code = dol_getIdFromCode($db, $object->opp_status, 'c_lead_status', 'rowid', 'code'); if ($code) print $langs->trans("OppStatus".$code); print '
'.$langs->trans("OpportunityProbability").''; if (strcmp($object->opp_percent,'')) print price($object->opp_percent,'',$langs,1,0).' %'; @@ -203,12 +203,12 @@ if ($id > 0 || ! empty($ref)) if (strcmp($object->opp_amount,'')) print price($object->opp_amount,'',$langs,0,0,0,$conf->currency); print '
'.$langs->trans("DateStart").' - '.$langs->trans("DateEnd").''; - $start = dol_print_date($object->date_start,'dayhour'); + $start = dol_print_date($object->date_start,'day'); print ($start?$start:'?'); - $end = dol_print_date($object->date_end,'dayhour'); + $end = dol_print_date($object->date_end,'day'); print ' - '; print ($end?$end:'?'); if ($object->hasDelay()) print img_warning("Late"); @@ -222,40 +222,40 @@ if ($id > 0 || ! empty($ref)) // Other attributes $cols = 2; include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_view.tpl.php'; - + print "
"; print '
'; print '
'; print '
'; print '
'; - + print ''; - + // Description print ''; - + // Categories if ($conf->categorie->enabled) { print '"; } - + print '
'.$langs->trans("Description").''; print nl2br($object->description); print '
'.$langs->trans("Categories").''; print $form->showCategories($object->id,'project',1); print "
'; - + print '
'; print '
'; print '
'; - + print '
'; - + dol_fiche_end(); - + print '
'; - + // Contacts lines (modules that overwrite templates must declare this into descriptor) $dirtpls=array_merge($conf->modules_parts['tpl'],array('/core/tpl')); foreach($dirtpls as $reldir) diff --git a/htdocs/projet/element.php b/htdocs/projet/element.php index d4829d8e839..2b753a50468 100644 --- a/htdocs/projet/element.php +++ b/htdocs/projet/element.php @@ -185,9 +185,9 @@ if (! empty($conf->global->PROJECT_USE_OPPORTUNITIES)) // Date start - end print ''.$langs->trans("DateStart").' - '.$langs->trans("DateEnd").''; -$start = dol_print_date($object->date_start,'dayhour'); +$start = dol_print_date($object->date_start,'day'); print ($start?$start:'?'); -$end = dol_print_date($object->date_end,'dayhour'); +$end = dol_print_date($object->date_end,'day'); print ' - '; print ($end?$end:'?'); if ($object->hasDelay()) print img_warning("Late"); diff --git a/htdocs/projet/ganttview.php b/htdocs/projet/ganttview.php index dd9d03b25b1..0c1e86c8ab5 100644 --- a/htdocs/projet/ganttview.php +++ b/htdocs/projet/ganttview.php @@ -140,9 +140,9 @@ if (($id > 0 && is_numeric($id)) || ! empty($ref)) // Date start - end print ''.$langs->trans("DateStart").' - '.$langs->trans("DateEnd").''; - $start = dol_print_date($object->date_start,'dayhour'); + $start = dol_print_date($object->date_start,'day'); print ($start?$start:'?'); - $end = dol_print_date($object->date_end,'dayhour'); + $end = dol_print_date($object->date_end,'day'); print ' - '; print ($end?$end:'?'); if ($object->hasDelay()) print img_warning("Late"); diff --git a/htdocs/projet/tasks.php b/htdocs/projet/tasks.php index 4d43b6e4bc2..095baa00d03 100644 --- a/htdocs/projet/tasks.php +++ b/htdocs/projet/tasks.php @@ -281,9 +281,9 @@ if ($id > 0 || ! empty($ref)) // Date start - end print ''.$langs->trans("DateStart").' - '.$langs->trans("DateEnd").''; - $start = dol_print_date($object->date_start,'dayhour'); + $start = dol_print_date($object->date_start,'day'); print ($start?$start:'?'); - $end = dol_print_date($object->date_end,'dayhour'); + $end = dol_print_date($object->date_end,'day'); print ' - '; print ($end?$end:'?'); if ($object->hasDelay()) print img_warning("Late"); @@ -578,7 +578,7 @@ else if ($id > 0 || ! empty($ref)) } else { - if ($nboftaskshown < count($tasksarray)) + if ($nboftaskshown < count($tasksarray) && ! GETPOST('search_user_id','int')) { include_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; cleanCorruptedTree($db, 'projet_task', 'fk_task_parent'); diff --git a/htdocs/projet/tasks/comment.php b/htdocs/projet/tasks/comment.php index e4250bad062..49072299ac4 100644 --- a/htdocs/projet/tasks/comment.php +++ b/htdocs/projet/tasks/comment.php @@ -152,9 +152,12 @@ if ($id > 0 || ! empty($ref)) // Date start - end print ''.$langs->trans("DateStart").' - '.$langs->trans("DateEnd").''; - print dol_print_date($projectstatic->date_start,'day'); - $end=dol_print_date($projectstatic->date_end,'day'); - if ($end) print ' - '.$end; + $start = dol_print_date($projectstatic->date_start,'day'); + print ($start?$start:'?'); + $end = dol_print_date($projectstatic->date_end,'day'); + print ' - '; + print ($end?$end:'?'); + if ($projectstatic->hasDelay()) print img_warning("Late"); print ''; // Budget @@ -263,7 +266,7 @@ if ($id > 0 || ! empty($ref)) dol_fiche_end(); - + // Include comment tpl view include DOL_DOCUMENT_ROOT . '/core/tpl/bloc_comment.tpl.php'; diff --git a/htdocs/projet/tasks/contact.php b/htdocs/projet/tasks/contact.php index d3baba4d5fb..a2bb784c062 100644 --- a/htdocs/projet/tasks/contact.php +++ b/htdocs/projet/tasks/contact.php @@ -228,9 +228,12 @@ if ($id > 0 || ! empty($ref)) // Date start - end print ''.$langs->trans("DateStart").' - '.$langs->trans("DateEnd").''; - print dol_print_date($projectstatic->date_start,'day'); - $end=dol_print_date($projectstatic->date_end,'day'); - if ($end) print ' - '.$end; + $start = dol_print_date($projectstatic->date_start,'day'); + print ($start?$start:'?'); + $end = dol_print_date($projectstatic->date_end,'day'); + print ' - '; + print ($end?$end:'?'); + if ($projectstatic->hasDelay()) print img_warning("Late"); print ''; // Budget diff --git a/htdocs/projet/tasks/document.php b/htdocs/projet/tasks/document.php index f6f206f90ec..7fc0b981902 100644 --- a/htdocs/projet/tasks/document.php +++ b/htdocs/projet/tasks/document.php @@ -172,9 +172,12 @@ if ($object->id > 0) // Date start - end print ''.$langs->trans("DateStart").' - '.$langs->trans("DateEnd").''; - print dol_print_date($projectstatic->date_start,'day'); - $end=dol_print_date($projectstatic->date_end,'day'); - if ($end) print ' - '.$end; + $start = dol_print_date($projectstatic->date_start,'day'); + print ($start?$start:'?'); + $end = dol_print_date($projectstatic->date_end,'day'); + print ' - '; + print ($end?$end:'?'); + if ($projectstatic->hasDelay()) print img_warning("Late"); print ''; // Budget diff --git a/htdocs/projet/tasks/note.php b/htdocs/projet/tasks/note.php index 87d949eb645..da33b8b7607 100644 --- a/htdocs/projet/tasks/note.php +++ b/htdocs/projet/tasks/note.php @@ -150,9 +150,12 @@ if ($object->id > 0) // Date start - end print ''.$langs->trans("DateStart").' - '.$langs->trans("DateEnd").''; - print dol_print_date($projectstatic->date_start,'day'); - $end=dol_print_date($projectstatic->date_end,'day'); - if ($end) print ' - '.$end; + $start = dol_print_date($projectstatic->date_start,'day'); + print ($start?$start:'?'); + $end = dol_print_date($projectstatic->date_end,'day'); + print ' - '; + print ($end?$end:'?'); + if ($projectstatic->hasDelay()) print img_warning("Late"); print ''; // Budget diff --git a/htdocs/projet/tasks/task.php b/htdocs/projet/tasks/task.php index 71d487da2d6..e115c51d635 100644 --- a/htdocs/projet/tasks/task.php +++ b/htdocs/projet/tasks/task.php @@ -125,7 +125,7 @@ if ($action == 'confirm_delete' && $confirm == "yes" && $user->rights->projet->s if ($object->delete($user) > 0) { - header('Location: '.DOL_URL_ROOT.'/projet/tasks.php?id='.$projectstatic->id.($withproject?'&withproject=1':'')); + header('Location: '.DOL_URL_ROOT.'/projet/tasks.php?restore_lastsearch_values=1&id='.$projectstatic->id.($withproject?'&withproject=1':'')); exit; } else @@ -262,9 +262,12 @@ if ($id > 0 || ! empty($ref)) // Date start - end print ''.$langs->trans("DateStart").' - '.$langs->trans("DateEnd").''; - print dol_print_date($projectstatic->date_start,'day'); - $end=dol_print_date($projectstatic->date_end,'day'); - if ($end) print ' - '.$end; + $start = dol_print_date($projectstatic->date_start,'day'); + print ($start?$start:'?'); + $end = dol_print_date($projectstatic->date_end,'day'); + print ' - '; + print ($end?$end:'?'); + if ($projectstatic->hasDelay()) print img_warning("Late"); print ''; // Budget diff --git a/htdocs/projet/tasks/time.php b/htdocs/projet/tasks/time.php index 45018d79742..73e9f5ec311 100644 --- a/htdocs/projet/tasks/time.php +++ b/htdocs/projet/tasks/time.php @@ -349,9 +349,12 @@ if (($id > 0 || ! empty($ref)) || $projectidforalltimes > 0) // Date start - end print ''.$langs->trans("DateStart").' - '.$langs->trans("DateEnd").''; - print dol_print_date($projectstatic->date_start,'day'); - $end=dol_print_date($projectstatic->date_end,'day'); - if ($end) print ' - '.$end; + $start = dol_print_date($projectstatic->date_start,'day'); + print ($start?$start:'?'); + $end = dol_print_date($projectstatic->date_end,'day'); + print ' - '; + print ($end?$end:'?'); + if ($projectstatic->hasDelay()) print img_warning("Late"); print ''; // Budget @@ -523,6 +526,7 @@ if (($id > 0 || ! empty($ref)) || $projectidforalltimes > 0) dol_fiche_end(); + print ''."\n"; /* * Form to add time spent @@ -599,7 +603,7 @@ if (($id > 0 || ! empty($ref)) || $projectidforalltimes > 0) if ($projectstatic->id > 0) { - if ($action == 'deleteline') + if ($action == 'deleteline' && ! empty($projectidforalltimes)) { print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id.'&lineid='.$_GET["lineid"].($withproject?'&withproject=1':''),$langs->trans("DeleteATimeSpent"),$langs->trans("ConfirmDeleteATimeSpent"),"confirm_delete",'','',1); } @@ -670,7 +674,9 @@ if (($id > 0 || ! empty($ref)) || $projectidforalltimes > 0) if (! empty($projectidforalltimes)) { - $title=$langs->trans("ListTaskTimeUserProject"); + print ''."\n"; + + $title=$langs->trans("ListTaskTimeUserProject"); $linktotasks=''.$langs->trans("GoToListOfTasks").''; //print_barre_liste($title, 0, $_SERVER["PHP_SELF"], '', $sortfield, $sortorder, $linktotasks, $num, $totalnboflines, 'title_generic.png', 0, '', '', 0, 1); print load_fiche_titre($title,$linktotasks,'title_generic.png'); @@ -693,19 +699,24 @@ if (($id > 0 || ! empty($ref)) || $projectidforalltimes > 0) $arrayofselected=is_array($toselect)?$toselect:array(); - $params=''; + $param=''; if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage; if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit; - if ($search_note != '') $params.= '&search_note='.urlencode($search_note); - if ($search_duration != '') $params.= '&search_field2='.urlencode($search_duration); - if ($optioncss != '') $param.='&optioncss='.$optioncss; + if ($search_month > 0) $param.= '&search_month='.urlencode($search_month); + if ($search_year > 0) $param.= '&search_year='.urlencode($search_year); + if ($search_user > 0) $param.= '&search_user='.urlencode($search_user); + if ($search_task_ref != '') $param.= '&search_task_ref='.urlencode($search_task_ref); + if ($search_task_label != '') $param.= '&search_task_label='.urlencode($search_task_label); + if ($search_note != '') $param.= '&search_note='.urlencode($search_note); + if ($search_duration != '') $param.= '&search_field2='.urlencode($search_duration); + if ($optioncss != '') $param.='&optioncss='.urlencode($optioncss); /* // Add $param from extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php'; */ - if ($id) $params.='&id='.$id; - if ($projectid) $params.='&projectid='.$projectid; - if ($withproject) $params.='&withproject='.$withproject; + if ($id) $param.='&id='.urlencode($id); + if ($projectid) $param.='&projectid='.urlencode($projectid); + if ($withproject) $param.='&withproject='.urlencode($withproject); $arrayofmassactions = array( @@ -791,16 +802,16 @@ if (($id > 0 || ! empty($ref)) || $projectidforalltimes > 0) print ''."\n"; print ''; - if (! empty($arrayfields['t.task_date']['checked'])) print_liste_field_titre($arrayfields['t.task_date']['label'],$_SERVER['PHP_SELF'],'t.task_date,t.task_datehour,t.rowid','',$params,'',$sortfield,$sortorder); + if (! empty($arrayfields['t.task_date']['checked'])) print_liste_field_titre($arrayfields['t.task_date']['label'],$_SERVER['PHP_SELF'],'t.task_date,t.task_datehour,t.rowid','',$param,'',$sortfield,$sortorder); if ((empty($id) && empty($ref)) || ! empty($projectidforalltimes)) // Not a dedicated task { - if (! empty($arrayfields['t.task_ref']['checked'])) print_liste_field_titre($arrayfields['t.task_ref']['label'],$_SERVER['PHP_SELF'],'pt.ref','',$params,'',$sortfield,$sortorder); - if (! empty($arrayfields['t.task_label']['checked'])) print_liste_field_titre($arrayfields['t.task_label']['label'],$_SERVER['PHP_SELF'],'pt.label','',$params,'',$sortfield,$sortorder); + if (! empty($arrayfields['t.task_ref']['checked'])) print_liste_field_titre($arrayfields['t.task_ref']['label'],$_SERVER['PHP_SELF'],'pt.ref','',$param,'',$sortfield,$sortorder); + if (! empty($arrayfields['t.task_label']['checked'])) print_liste_field_titre($arrayfields['t.task_label']['label'],$_SERVER['PHP_SELF'],'pt.label','',$param,'',$sortfield,$sortorder); } - if (! empty($arrayfields['author']['checked'])) print_liste_field_titre($arrayfields['author']['label'],$_SERVER['PHP_SELF'],'','',$params,'',$sortfield,$sortorder); - if (! empty($arrayfields['t.note']['checked'])) print_liste_field_titre($arrayfields['t.note']['label'],$_SERVER['PHP_SELF'],'t.note','',$params,'',$sortfield,$sortorder); - if (! empty($arrayfields['t.task_duration']['checked'])) print_liste_field_titre($arrayfields['t.task_duration']['label'],$_SERVER['PHP_SELF'],'t.task_duration','',$params,'align="right"',$sortfield,$sortorder); - if (! empty($arrayfields['value']['checked'])) print_liste_field_titre($arrayfields['value']['label'],$_SERVER['PHP_SELF'],'','',$params,'align="right"',$sortfield,$sortorder); + if (! empty($arrayfields['author']['checked'])) print_liste_field_titre($arrayfields['author']['label'],$_SERVER['PHP_SELF'],'','',$param,'',$sortfield,$sortorder); + if (! empty($arrayfields['t.note']['checked'])) print_liste_field_titre($arrayfields['t.note']['label'],$_SERVER['PHP_SELF'],'t.note','',$param,'',$sortfield,$sortorder); + if (! empty($arrayfields['t.task_duration']['checked'])) print_liste_field_titre($arrayfields['t.task_duration']['label'],$_SERVER['PHP_SELF'],'t.task_duration','',$param,'align="right"',$sortfield,$sortorder); + if (! empty($arrayfields['value']['checked'])) print_liste_field_titre($arrayfields['value']['label'],$_SERVER['PHP_SELF'],'','',$param,'align="right"',$sortfield,$sortorder); /* // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; @@ -973,12 +984,12 @@ if (($id > 0 || ! empty($ref)) || $projectidforalltimes > 0) if ($task_time->fk_user == $user->id || in_array($task_time->fk_user, $childids) || $user->rights->projet->all->creer) { print ' '; - print 'rowid.($withproject?'&withproject=1':'').'">'; + print 'rowid.($withproject?'&withproject=1':'').'">'; print img_edit(); print ''; print ' '; - print 'rowid.($withproject?'&withproject=1':'').'">'; + print 'rowid.($withproject?'&withproject=1':'').'">'; print img_delete(); print ''; } diff --git a/htdocs/societe/admin/contact_extrafields.php b/htdocs/societe/admin/contact_extrafields.php index f97ceedcca3..4facdd11ea1 100644 --- a/htdocs/societe/admin/contact_extrafields.php +++ b/htdocs/societe/admin/contact_extrafields.php @@ -64,7 +64,7 @@ $help_url='EN:Module Third Parties setup|FR:Paramétrage_du_module_Tiers'; llxHeader('',$langs->trans("CompanySetup"),$help_url); -$linkback=''.$langs->trans("BackToModuleList").''; +$linkback=''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans("CompanySetup"),$linkback,'title_setup'); diff --git a/htdocs/societe/admin/societe.php b/htdocs/societe/admin/societe.php index ed4704471d0..7866ffbf0be 100644 --- a/htdocs/societe/admin/societe.php +++ b/htdocs/societe/admin/societe.php @@ -275,7 +275,7 @@ $form=new Form($db); $help_url='EN:Module Third Parties setup|FR:Paramétrage_du_module_Tiers|ES:Configuración_del_módulo_terceros'; llxHeader('',$langs->trans("CompanySetup"),$help_url); -$linkback=''.$langs->trans("BackToModuleList").''; +$linkback=''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans("CompanySetup"),$linkback,'title_setup'); diff --git a/htdocs/societe/admin/societe_extrafields.php b/htdocs/societe/admin/societe_extrafields.php index 8826f1e4750..06dc57677f5 100644 --- a/htdocs/societe/admin/societe_extrafields.php +++ b/htdocs/societe/admin/societe_extrafields.php @@ -65,7 +65,7 @@ $help_url='EN:Module Third Parties setup|FR:Paramétrage_du_module_Tiers'; llxHeader('',$langs->trans("CompanySetup"),$help_url); -$linkback=''.$langs->trans("BackToModuleList").''; +$linkback=''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans("CompanySetup"),$linkback,'title_setup'); diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index e858eaf9a6e..217a5367ecf 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -647,14 +647,17 @@ if (empty($reshook)) setEventMessages($object->error, $object->errors, 'errors'); $error++; } + // Prevent thirdparty's emptying if a user hasn't rights $user->rights->categorie->lire (in such a case, post of 'custcats' is not defined) + if (!empty($user->rights->categorie->lire)) + { + // Customer categories association + $categories = GETPOST( 'custcats', 'array' ); + $object->setCategories($categories, 'customer'); - // Customer categories association - $categories = GETPOST('custcats', 'array'); - $object->setCategories($categories, 'customer'); - - // Supplier categories association - $categories = GETPOST('suppcats', 'array'); - $object->setCategories($categories, 'supplier'); + // Supplier categories association + $categories = GETPOST('suppcats', 'array'); + $object->setCategories($categories, 'supplier'); + } // Logo/Photo save $dir = $conf->societe->multidir_output[$object->entity]."/".$object->id."/logos"; @@ -761,7 +764,7 @@ if (empty($reshook)) if ($result > 0) { - header("Location: ".DOL_URL_ROOT."/societe/list.php?delsoc=".urlencode($object->name)); + header("Location: ".DOL_URL_ROOT."/societe/list.php?restore_lastsearch_values=1&delsoc=".urlencode($object->name)); exit; } else @@ -1015,13 +1018,13 @@ else print '
'; print $langs->trans("ThirdPartyType").':     '; print '
'; - print '