diff --git a/htdocs/accountancy/admin/index.php b/htdocs/accountancy/admin/index.php index 24d31acddd6..98320613bfc 100644 --- a/htdocs/accountancy/admin/index.php +++ b/htdocs/accountancy/admin/index.php @@ -259,7 +259,7 @@ llxHeader('', $title); $linkback = ''; //$linkback = '' . $langs->trans("BackToModuleList") . ''; -print load_fiche_titre($langs->trans('ConfigAccountingExpert'), $linkback, 'accountancy'); +print load_fiche_titre($title, $linkback, 'accountancy'); print '
'; print ''; diff --git a/htdocs/accountancy/class/accountancyexport.class.php b/htdocs/accountancy/class/accountancyexport.class.php index f007208cf57..0bd60445613 100644 --- a/htdocs/accountancy/class/accountancyexport.class.php +++ b/htdocs/accountancy/class/accountancyexport.class.php @@ -59,6 +59,8 @@ class AccountancyExport public static $EXPORT_TYPE_LDCOMPTA10 = 120; public static $EXPORT_TYPE_GESTIMUMV3 = 130; public static $EXPORT_TYPE_GESTIMUMV5 = 135; + public static $EXPORT_TYPE_ISUITEEXPERT = 200; + // Generic FEC after that public static $EXPORT_TYPE_FEC = 1000; public static $EXPORT_TYPE_FEC2 = 1010; @@ -123,6 +125,7 @@ class AccountancyExport self::$EXPORT_TYPE_GESTIMUMV5 => $langs->trans('Modelcsv_Gestinum_v5'), self::$EXPORT_TYPE_FEC => $langs->trans('Modelcsv_FEC'), self::$EXPORT_TYPE_FEC2 => $langs->trans('Modelcsv_FEC2'), + self::$EXPORT_TYPE_ISUITEEXPERT => 'Export iSuite Expert', ); ksort($listofexporttypes, SORT_NUMERIC); @@ -158,6 +161,7 @@ class AccountancyExport self::$EXPORT_TYPE_GESTIMUMV5 => 'gestimumv5', self::$EXPORT_TYPE_FEC => 'fec', self::$EXPORT_TYPE_FEC2 => 'fec2', + self::$EXPORT_TYPE_ISUITEEXPERT => 'isuiteexpert', ); return $formatcode[$type]; @@ -243,6 +247,10 @@ class AccountancyExport 'label' => $langs->trans('Modelcsv_FEC2'), 'ACCOUNTING_EXPORT_FORMAT' => 'txt', ), + self::$EXPORT_TYPE_ISUITEEXPERT => array( + 'label' => 'iSuite Expert', + 'ACCOUNTING_EXPORT_FORMAT' => 'csv', + ), ), 'cr'=> array( '1' => $langs->trans("Unix"), @@ -334,6 +342,9 @@ class AccountancyExport case self::$EXPORT_TYPE_FEC2: $this->exportFEC2($TData); break; + case self::$EXPORT_TYPE_ISUITEEXPERT : + $this->exportiSuiteExpert($TData); + break; default: $this->errors[] = $langs->trans('accountancy_error_modelnotfound'); break; @@ -1752,6 +1763,62 @@ class AccountancyExport } } + /** + * Export format : iSuite Expert + * + * by OpenSolus [https://opensolus.fr] + * + * @param array $objectLines data + * + * @return void + */ + public function exportiSuiteExpert($objectLines) + { + $this->separator = ';'; + $this->end_line = "\r\n"; + + + foreach ($objectLines as $line) { + $tab = array(); + + $date = dol_print_date($line->doc_date, '%d/%m/%Y'); + + $tab[] = $line->piece_num; + $tab[] = $date; + $tab[] = substr($date, 6, 4); + $tab[] = substr($date, 3, 2); + $tab[] = substr($date, 0, 2); + $tab[] = $line->doc_ref; + //Conversion de chaine UTF8 en Latin9 + $tab[] = mb_convert_encoding(str_replace(' - Compte auxiliaire', '', $line->label_operation), "Windows-1252", 'UTF-8'); + + //Calcul de la longueur des numéros de comptes + $taille_numero = strlen(length_accountg($line->numero_compte)); + + //Création du numéro de client générique + $numero_cpt_client = '411'; + for ($i = 1; $i <= ($taille_numero - 3); $i++) { + $numero_cpt_client .= '0'; + } + + //Création des comptes auxiliaire des clients + if (length_accountg($line->numero_compte) == $numero_cpt_client) { + $tab[] = rtrim(length_accounta($line->subledger_account), "0"); + } else { + $tab[] = length_accountg($line->numero_compte); + } + $nom_client = explode(" - ", $line->label_operation); + $tab[] = mb_convert_encoding($nom_client[0], "Windows-1252", 'UTF-8'); + $tab[] = price($line->debit); + $tab[] = price($line->credit); + $tab[] = price($line->montant); + $tab[] = $line->code_journal; + + $separator = $this->separator; + print implode($separator, $tab) . $this->end_line; + } + } + /** * trunc * diff --git a/htdocs/accountancy/customer/index.php b/htdocs/accountancy/customer/index.php index dde599a1462..ede72c9d9e6 100644 --- a/htdocs/accountancy/customer/index.php +++ b/htdocs/accountancy/customer/index.php @@ -158,6 +158,9 @@ if ($action == 'validatehistory') { $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."accounting_account as aa4 ON " . $alias_societe_perentity . ".accountancy_code_sell = aa4.account_number AND aa4.active = 1 AND aa4.fk_pcg_version = '".$db->escape($chartaccountcode)."' AND aa4.entity = ".$conf->entity; $sql .= " WHERE f.fk_statut > 0 AND l.fk_code_ventilation <= 0"; $sql .= " AND l.product_type <= 2"; + if (!empty($conf->global->ACCOUNTING_DATE_START_BINDING)) { + $sql .= " AND f.datef >= '".$db->idate($conf->global->ACCOUNTING_DATE_START_BINDING)."'"; + } dol_syslog('htdocs/accountancy/customer/index.php'); $result = $db->query($sql); @@ -201,11 +204,13 @@ if ($action == 'validatehistory') { } } - // Level 3: Search suggested account for this thirdparty (similar code exists in page index.php to make automatic binding) - if (!empty($objp->company_code_sell)) { - $objp->code_sell_t = $objp->company_code_sell; - $objp->aarowid_suggest = $objp->aarowid_thirdparty; - $suggestedaccountingaccountfor = ''; + if (!empty($conf->global->ACCOUNTANCY_USE_PRODUCT_ACCOUNT_ON_THIRDPARTY)) { + // Level 3: Search suggested account for this thirdparty (similar code exists in page index.php to make automatic binding) + if (!empty($objp->company_code_sell)) { + $objp->code_sell_t = $objp->company_code_sell; + $objp->aarowid_suggest = $objp->aarowid_thirdparty; + $suggestedaccountingaccountfor = ''; + } } if ($objp->aarowid_suggest > 0) { diff --git a/htdocs/accountancy/supplier/index.php b/htdocs/accountancy/supplier/index.php index b5c6804c7d6..f047ddf70de 100644 --- a/htdocs/accountancy/supplier/index.php +++ b/htdocs/accountancy/supplier/index.php @@ -166,6 +166,9 @@ if ($action == 'validatehistory') { $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."accounting_account as aa4 ON " . $alias_product_perentity . ".accountancy_code_buy = aa4.account_number AND aa4.active = 1 AND aa4.fk_pcg_version = '".$db->escape($chartaccountcode)."' AND aa4.entity = ".$conf->entity; $sql .= " WHERE f.fk_statut > 0 AND l.fk_code_ventilation <= 0"; $sql .= " AND l.product_type <= 2"; + if (!empty($conf->global->ACCOUNTING_DATE_START_BINDING)) { + $sql .= " AND f.datef >= '".$db->idate($conf->global->ACCOUNTING_DATE_START_BINDING)."'"; + } dol_syslog('htdocs/accountancy/supplier/index.php'); @@ -202,11 +205,13 @@ if ($action == 'validatehistory') { } } - // Level 3: Search suggested account for this thirdparty (similar code exists in page index.php to make automatic binding) - if (!empty($objp->company_code_buy)) { - $objp->code_buy_t = $objp->company_code_buy; - $objp->aarowid_suggest = $objp->aarowid_thirdparty; - $suggestedaccountingaccountfor = ''; + if (!empty($conf->global->ACCOUNTANCY_USE_PRODUCT_ACCOUNT_ON_THIRDPARTY)) { + // Level 3: Search suggested account for this thirdparty (similar code exists in page index.php to make automatic binding) + if (!empty($objp->company_code_buy)) { + $objp->code_buy_t = $objp->company_code_buy; + $objp->aarowid_suggest = $objp->aarowid_thirdparty; + $suggestedaccountingaccountfor = ''; + } } if ($objp->aarowid_suggest > 0) { diff --git a/htdocs/adherents/admin/member.php b/htdocs/adherents/admin/member.php index 621873afc94..d03beec610e 100644 --- a/htdocs/adherents/admin/member.php +++ b/htdocs/adherents/admin/member.php @@ -263,6 +263,7 @@ if ($conf->facture->enabled) { print ''.$langs->trans("ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS").''; print ''; $selected = (empty($conf->global->ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS) ? '' : $conf->global->ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS); + print img_picto('', 'product', 'class="pictofixedwidth"'); $form->select_produits($selected, 'ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS', '', 0); print ''; } diff --git a/htdocs/adherents/canvas/default/tpl/adherentcard_create.tpl.php b/htdocs/adherents/canvas/default/tpl/adherentcard_create.tpl.php index 87b8a6874c4..419b32f3c34 100644 --- a/htdocs/adherents/canvas/default/tpl/adherentcard_create.tpl.php +++ b/htdocs/adherents/canvas/default/tpl/adherentcard_create.tpl.php @@ -31,8 +31,6 @@ print load_fiche_titre($this->control->tpl['title']); dol_htmloutput_errors((is_numeric($object->error) ? '' : $object->error), $object->errors); -dol_htmloutput_errors((is_numeric($GLOBALS['error']) ? '' : $GLOBALS['error']), $GLOBALS['errors']); - dol_htmloutput_errors($this->control->tpl['error'], $this->control->tpl['errors']); echo $this->control->tpl['ajax_selectcountry']; ?> diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php index da84fd5bf6b..7c5d074d51e 100644 --- a/htdocs/adherents/card.php +++ b/htdocs/adherents/card.php @@ -1054,6 +1054,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { // Country $object->country_id = $object->country_id ? $object->country_id : $mysoc->country_id; print ''.$langs->trans('Country').''; + print img_picto('', 'country', 'class="pictofixedwidth"'); print $form->select_country(GETPOSTISSET('country_id') ? GETPOST('country_id', 'alpha') : $object->country_id, 'country_id'); if ($user->admin) { print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1); @@ -1064,6 +1065,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { if (empty($conf->global->MEMBER_DISABLE_STATE)) { print ''.$langs->trans('State').''; if ($object->country_id) { + print img_picto('', 'state', 'class="pictofixedwidth"'); print $formcompany->select_state(GETPOSTISSET('state_id') ? GETPOST('state_id', 'int') : $object->state_id, $object->country_code); } else { print $countrynotdefined; @@ -1303,6 +1305,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { // Country //$object->country_id=$object->country_id?$object->country_id:$mysoc->country_id; // In edit mode we don't force to company country if not defined print ''.$langs->trans('Country').''; + print img_picto('', 'country', 'class="pictofixedwidth"'); print $form->select_country(GETPOSTISSET("country_id") ? GETPOST("country_id", "alpha") : $object->country_id, 'country_id'); if ($user->admin) { print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1); @@ -1312,21 +1315,22 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { // State if (empty($conf->global->MEMBER_DISABLE_STATE)) { print ''.$langs->trans('State').''; + print img_picto('', 'state', 'class="pictofixedwidth"'); print $formcompany->select_state($object->state_id, GETPOSTISSET("country_id") ? GETPOST("country_id", "alpha") : $object->country_id); print ''; } // Pro phone print ''.$langs->trans("PhonePro").''; - print ''.img_picto('', 'object_phoning').' phone).'">'; + print ''.img_picto('', 'object_phoning', 'class="pictofixedwidth"').' phone).'">'; // Personal phone print ''.$langs->trans("PhonePerso").''; - print ''.img_picto('', 'object_phoning').' phone_perso).'">'; + print ''.img_picto('', 'object_phoning', 'class="pictofixedwidth"').' phone_perso).'">'; // Mobile phone print ''.$langs->trans("PhoneMobile").''; - print ''.img_picto('', 'object_phoning_mobile').' phone_mobile).'">'; + print ''.img_picto('', 'object_phoning_mobile', 'class="pictofixedwidth"').' phone_mobile).'">'; if (!empty($conf->socialnetworks->enabled)) { foreach ($socialnetworks as $key => $value) { diff --git a/htdocs/adherents/note.php b/htdocs/adherents/note.php index cc216d794d1..0444d03b2ff 100644 --- a/htdocs/adherents/note.php +++ b/htdocs/adherents/note.php @@ -68,16 +68,21 @@ if ($id) { $caneditfieldmember = $user->rights->adherent->creer; } +$hookmanager->initHooks(array('membernote')); + // Security check $result = restrictedArea($user, 'adherent', $object->id, '', '', 'socid', 'rowid', 0); - /* * Actions */ - -include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once - +$reshook = $hookmanager->executeHooks('doActions', array(), $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) { + setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); +} +if (empty($reshook)) { + include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once +} /* diff --git a/htdocs/admin/accountant.php b/htdocs/admin/accountant.php index 1e924699cd5..7c82775abad 100644 --- a/htdocs/admin/accountant.php +++ b/htdocs/admin/accountant.php @@ -131,7 +131,7 @@ print ''; -print img_picto('', 'globe-americas', 'class="paddingrightonly"'); +print img_picto('', 'globe-americas', 'class="pictofixedwidth"'); print $form->select_country((GETPOSTISSET('country_id') ? GETPOST('country_id', 'int') : (!empty($conf->global->MAIN_INFO_ACCOUNTANT_COUNTRY) ? $conf->global->MAIN_INFO_ACCOUNTANT_COUNTRY : '')), 'country_id'); if ($user->admin) { print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1); @@ -139,27 +139,28 @@ if ($user->admin) { print ''."\n"; print ''; -$formcompany->select_departement((GETPOSTISSET('state_id') ? GETPOST('state_id', 'alpha') : (!empty($conf->global->MAIN_INFO_ACCOUNTANT_STATE) ? $conf->global->MAIN_INFO_ACCOUNTANT_STATE : '')), (GETPOSTISSET('country_id') ? GETPOST('country_id', 'int') : (!empty($conf->global->MAIN_INFO_ACCOUNTANT_COUNTRY) ? $conf->global->MAIN_INFO_ACCOUNTANT_COUNTRY : '')), 'state_id'); +print img_picto('', 'state', 'class="pictofixedwidth"'); +print $formcompany->select_state((GETPOSTISSET('state_id') ? GETPOST('state_id', 'alpha') : (!empty($conf->global->MAIN_INFO_ACCOUNTANT_STATE) ? $conf->global->MAIN_INFO_ACCOUNTANT_STATE : '')), (GETPOSTISSET('country_id') ? GETPOST('country_id', 'int') : (!empty($conf->global->MAIN_INFO_ACCOUNTANT_COUNTRY) ? $conf->global->MAIN_INFO_ACCOUNTANT_COUNTRY : '')), 'state_id'); print ''."\n"; print ''; -print img_picto('', 'object_phoning', '', false, 0, 0, '', 'paddingright'); +print img_picto('', 'object_phoning', '', false, 0, 0, '', 'pictofixedwidth'); print ''; print ''."\n"; print ''; -print img_picto('', 'object_phoning_fax', '', false, 0, 0, '', 'paddingright'); +print img_picto('', 'object_phoning_fax', '', false, 0, 0, '', 'pictofixedwidth'); print ''; print ''."\n"; print ''; -print img_picto('', 'object_email', '', false, 0, 0, '', 'paddingright'); +print img_picto('', 'object_email', '', false, 0, 0, '', 'pictofixedwidth'); print ''; print ''."\n"; // Web print ''; -print img_picto('', 'globe', '', false, 0, 0, '', 'paddingright'); +print img_picto('', 'globe', '', false, 0, 0, '', 'pictofixedwidth'); print ''; print ''."\n"; diff --git a/htdocs/admin/accounting.php b/htdocs/admin/accounting.php index e775f5bd8e3..ebe0712b03a 100644 --- a/htdocs/admin/accounting.php +++ b/htdocs/admin/accounting.php @@ -1,5 +1,5 @@ +/* Copyright (C) 2018-2021 Alexandre Spangaro * * 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 @@ -18,7 +18,7 @@ /** * \file htdocs/admin/accounting.php * \ingroup accounting - * \brief Setup page to configure accountanting module + * \brief Setup page to configure accounting module */ require '../main.inc.php'; @@ -32,7 +32,7 @@ $action = GETPOST('action', 'aZ09'); $contextpage = GETPOST('contextpage', 'aZ') ?GETPOST('contextpage', 'aZ') : 'adminaccoutant'; // To manage different context of search // Load translation files required by the page -$langs->loadLangs(array('admin', 'companies')); +$langs->loadLangs(array('admin', 'companies', 'accountancy')); if (!$user->admin) { accessforbidden(); @@ -52,12 +52,13 @@ $error = 0; * View */ +$title = $langs->trans("ConfigAccountingExpert"); $help_url = ''; -llxHeader('', $langs->trans("ConfigAccountingExpert"), $help_url); +llxHeader('', $title, $help_url); $linkback = ''.$langs->trans("BackToModuleList").''; -print load_fiche_titre($langs->trans("ConfigAccountingExpert"), $linkback, 'title_setup'); +print load_fiche_titre($title, $linkback, 'title_setup'); print "
\n"; print ''.$langs->trans("AccountancySetupDoneFromAccountancyMenu", $langs->transnoentitiesnoconv("Accounting").' - '.$langs->transnoentitiesnoconv("Setup"))."
\n"; diff --git a/htdocs/admin/clicktodial.php b/htdocs/admin/clicktodial.php index 7b1c94de1ec..25ada4d2d89 100644 --- a/htdocs/admin/clicktodial.php +++ b/htdocs/admin/clicktodial.php @@ -1,6 +1,6 @@ - * Copyright (C) 2005-2020 Laurent Destailleur + * Copyright (C) 2005-2021 Laurent Destailleur * Copyright (C) 2011-2013 Juanjo Menent * * This program is free software; you can redistribute it and/or modify @@ -20,7 +20,7 @@ /** * \file htdocs/admin/clicktodial.php * \ingroup clicktodial - * \brief Page to setup module clicktodial + * \brief Page to setup module ClickToDial */ require '../main.inc.php'; @@ -99,7 +99,12 @@ print ''; -print $langs->trans("Example").':
http://myphoneserver/mypage?login=__LOGIN__&password=__PASS__&caller=__PHONEFROM__&called=__PHONETO__'; +print '
'; +print ''; +print $langs->trans("Example").':
'; +print 'http://myphoneserver/mypage?login=__LOGIN__&password=__PASS__&caller=__PHONEFROM__&called=__PHONETO__
'; +print 'sip:__PHONETO__@my.sip.server'; +print '
'; //if (! empty($user->clicktodial_url)) //{ diff --git a/htdocs/admin/company.php b/htdocs/admin/company.php index 804ed9934bf..d2dac38b500 100644 --- a/htdocs/admin/company.php +++ b/htdocs/admin/company.php @@ -417,7 +417,7 @@ print ''; -print img_picto('', 'globe-americas', 'class="paddingrightonly"'); +print img_picto('', 'globe-americas', 'class="pictofixedwidth"'); print $form->select_country($mysoc->country_id, 'country_id', '', 0); if ($user->admin) { print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1); @@ -430,35 +430,37 @@ if (!empty($conf->global->MAIN_INFO_SOCIETE_STATE)) { $tmp = explode(':', $conf->global->MAIN_INFO_SOCIETE_STATE); $state_id = $tmp[0]; } -$formcompany->select_departement($state_id, $mysoc->country_code, 'state_id'); +print img_picto('', 'state', 'class="pictofixedwidth"'); +print $formcompany->select_state($state_id, $mysoc->country_code, 'state_id'); print ''."\n"; // Currency print ''; +print img_picto('', 'multicurrency', 'class="pictofixedwidth"'); print $form->selectCurrency($conf->currency, "currency"); print ''."\n"; // Phone print ''; -print img_picto('', 'object_phoning', '', false, 0, 0, '', 'paddingright'); +print img_picto('', 'object_phoning', '', false, 0, 0, '', 'pictofixedwidth'); print ''; print ''."\n"; // Fax print ''; -print img_picto('', 'object_phoning_fax', '', false, 0, 0, '', 'paddingright'); +print img_picto('', 'object_phoning_fax', '', false, 0, 0, '', 'pictofixedwidth'); print ''; print ''."\n"; // Email print ''; -print img_picto('', 'object_email', '', false, 0, 0, '', 'paddingright'); +print img_picto('', 'object_email', '', false, 0, 0, '', 'pictofixedwidth'); print ''; print ''."\n"; // Web print ''; -print img_picto('', 'globe', '', false, 0, 0, '', 'paddingright'); +print img_picto('', 'globe', '', false, 0, 0, '', 'pictofixedwidth'); print ''; print ''."\n"; @@ -466,7 +468,7 @@ print ''."\n"; if (!empty($conf->barcode->enabled)) { print ''; print ''; - print ''; + print ''; print ''; print ''; } diff --git a/htdocs/admin/company_socialnetworks.php b/htdocs/admin/company_socialnetworks.php index 4809a418861..2d4b2e6d128 100644 --- a/htdocs/admin/company_socialnetworks.php +++ b/htdocs/admin/company_socialnetworks.php @@ -74,6 +74,8 @@ if (($action == 'update' && !GETPOST("cancel", 'alpha'))) { } } } + + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } diff --git a/htdocs/admin/defaultvalues.php b/htdocs/admin/defaultvalues.php index dc801059e41..038d8d0915c 100644 --- a/htdocs/admin/defaultvalues.php +++ b/htdocs/admin/defaultvalues.php @@ -241,7 +241,7 @@ if ($defaultvalue) { } -print 'entity) && !empty($debug)) ? '?debug=1' : '').'" method="POST">'; +print ''; if ($optioncss != '') { print ''; } @@ -393,8 +393,8 @@ if (!is_array($result) && $result<0) { // Actions print ''; if ($action != 'edit' || GETPOST('rowid') != $defaultvalue->id) { - print ''.img_edit().''; - print ''.img_delete().''; + print ''.img_edit().''; + print ''.img_delete().''; } else { print ''; print ''; diff --git a/htdocs/admin/dict.php b/htdocs/admin/dict.php index 35e20b96570..1bfc3611439 100644 --- a/htdocs/admin/dict.php +++ b/htdocs/admin/dict.php @@ -100,7 +100,7 @@ $hookmanager->initHooks(array('admin')); // Put here declaration of dictionaries properties // Sort order to show dictionary (0 is space). All other dictionaries (added by modules) will be at end of this. -$taborder = array(9, 0, 4, 3, 2, 0, 1, 8, 19, 16, 39, 27, 40, 38, 0, 5, 11, 0, 6, 0, 29, 0, 33, 34, 32, 24, 28, 17, 35, 36, 0, 10, 23, 12, 13, 7, 0, 14, 0, 22, 20, 18, 21, 41, 0, 15, 30, 0, 37, 42, 0, 43, 0, 25, 0); +$taborder = array(9, 15, 30, 0, 4, 3, 2, 0, 1, 8, 19, 16, 39, 27, 40, 38, 0, 5, 11, 0, 6, 24, 0, 29, 0, 33, 34, 32, 28, 17, 35, 36, 0, 10, 23, 12, 13, 7, 0, 14, 0, 22, 20, 18, 21, 41, 0, 37, 42, 0, 43, 0, 25, 0); // Name of SQL tables of dictionaries $tabname = array(); @@ -223,7 +223,7 @@ $tabsql[24] = "SELECT rowid as rowid, code, label, active FROM ".MAIN_DB_PREFI $tabsql[25] = "SELECT rowid as rowid, code, label, active, module FROM ".MAIN_DB_PREFIX."c_type_container as t WHERE t.entity IN (".getEntity('c_type_container').")"; //$tabsql[26]= "SELECT rowid as rowid, code, label, short_label, active FROM ".MAIN_DB_PREFIX."c_units"; $tabsql[27] = "SELECT id as rowid, code, libelle, picto, active FROM ".MAIN_DB_PREFIX."c_stcomm"; -$tabsql[28] = "SELECT h.rowid as rowid, h.code, h.label, h.affect, h.delay, h.newbymonth, h.fk_country as country_id, c.code as country_code, c.label as country, h.active FROM ".MAIN_DB_PREFIX."c_holiday_types as h LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON h.fk_country=c.rowid"; +$tabsql[28] = "SELECT h.rowid as rowid, h.code, h.label, h.affect, h.delay, h.newByMonth, h.fk_country as country_id, c.code as country_code, c.label as country, h.active FROM ".MAIN_DB_PREFIX."c_holiday_types as h LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON h.fk_country=c.rowid"; $tabsql[29] = "SELECT rowid as rowid, code, label, percent, position, active FROM ".MAIN_DB_PREFIX."c_lead_status"; $tabsql[30] = "SELECT rowid, code, name, paper_size, orientation, metric, leftmargin, topmargin, nx, ny, spacex, spacey, width, height, font_size, custom_x, custom_y, active FROM ".MAIN_DB_PREFIX."c_format_cards"; //$tabsql[31]= "SELECT s.rowid as rowid, pcg_version, s.label, s.active FROM ".MAIN_DB_PREFIX."accounting_system as s"; @@ -315,7 +315,7 @@ $tabfield[24] = "code,label"; $tabfield[25] = "code,label"; //$tabfield[26]= "code,label,short_label"; $tabfield[27] = "code,libelle,picto"; -$tabfield[28] = "code,label,affect,delay,newbymonth,country_id,country"; +$tabfield[28] = "code,label,affect,delay,newByMonth,country_id,country"; $tabfield[29] = "code,label,percent,position"; $tabfield[30] = "code,name,paper_size,orientation,metric,leftmargin,topmargin,nx,ny,spacex,spacey,width,height,font_size,custom_x,custom_y"; //$tabfield[31]= "pcg_version,label"; @@ -361,7 +361,7 @@ $tabfieldvalue[24] = "code,label"; $tabfieldvalue[25] = "code,label"; //$tabfieldvalue[26]= "code,label,short_label"; $tabfieldvalue[27] = "code,libelle,picto"; -$tabfieldvalue[28] = "code,label,affect,delay,newbymonth,country"; +$tabfieldvalue[28] = "code,label,affect,delay,newByMonth,country"; $tabfieldvalue[29] = "code,label,percent,position"; $tabfieldvalue[30] = "code,name,paper_size,orientation,metric,leftmargin,topmargin,nx,ny,spacex,spacey,width,height,font_size,custom_x,custom_y"; //$tabfieldvalue[31]= "pcg_version,label"; @@ -407,7 +407,7 @@ $tabfieldinsert[24] = "code,label"; $tabfieldinsert[25] = "code,label"; //$tabfieldinsert[26]= "code,label,short_label"; $tabfieldinsert[27] = "code,libelle,picto"; -$tabfieldinsert[28] = "code,label,affect,delay,newbymonth,fk_country"; +$tabfieldinsert[28] = "code,label,affect,delay,newByMonth,fk_country"; $tabfieldinsert[29] = "code,label,percent,position"; $tabfieldinsert[30] = "code,name,paper_size,orientation,metric,leftmargin,topmargin,nx,ny,spacex,spacey,width,height,font_size,custom_x,custom_y"; //$tabfieldinsert[31]= "pcg_version,label"; @@ -548,7 +548,7 @@ $tabhelp[24] = array('code'=>$langs->trans("EnterAnyCode")); $tabhelp[25] = array('code'=>$langs->trans('EnterAnyCode')); //$tabhelp[26] = array('code'=>$langs->trans("EnterAnyCode")); $tabhelp[27] = array('code'=>$langs->trans("EnterAnyCode"), 'picto'=>$langs->trans("PictoHelp")); -$tabhelp[28] = array('affect'=>$langs->trans("FollowedByACounter"), 'delay'=>$langs->trans("MinimumNoticePeriod"), 'newbymonth'=>$langs->trans("NbAddedAutomatically")); +$tabhelp[28] = array('affect'=>$langs->trans("FollowedByACounter"), 'delay'=>$langs->trans("MinimumNoticePeriod"), 'newByMonth'=>$langs->trans("NbAddedAutomatically")); $tabhelp[29] = array('code'=>$langs->trans("EnterAnyCode"), 'percent'=>$langs->trans("OpportunityPercent"), 'position'=>$langs->trans("PositionIntoComboList")); $tabhelp[30] = array('code'=>$langs->trans("EnterAnyCode"), 'name'=>$langs->trans("LabelName"), 'paper_size'=>$langs->trans("LabelPaperSize")); //$tabhelp[31] = array('pcg_version'=>$langs->trans("EnterAnyCode")); @@ -568,8 +568,8 @@ $tabhelp[43] = array('code'=>$langs->trans("EnterAnyCode")); // Table to store complete informations (will replace all other table). Key is table name. $tabcomplete = array( 'c_forme_juridique'=>array('picto'=>'company'), - 'c_departements'=>array('picto'=>'country'), - 'c_regions'=>array('picto'=>'country'), + 'c_departements'=>array('picto'=>'state'), + 'c_regions'=>array('picto'=>'region'), 'c_country'=>array('picto'=>'country'), 'c_civility'=>array('picto'=>'contact'), 'c_actioncomm'=>array('picto'=>'action'), @@ -695,7 +695,7 @@ if (GETPOST('actionadd') || GETPOST('actionmodify')) { $listfieldmodify = explode(',', $tabfieldinsert[$id]); $listfieldvalue = explode(',', $tabfieldvalue[$id]); - // Check that all fields are filled + // Check that all mandatory fields are filled $ok = 1; foreach ($listfield as $f => $value) { // Discard check of mandatory fields for country for some tables @@ -882,12 +882,12 @@ if (GETPOST('actionadd') || GETPOST('actionmodify')) { } if ($keycode == 'sortorder') { // For column name 'sortorder', we use the field name 'position' - $sql .= "'".(int) GETPOST('position', 'int')."'"; + $sql .= (int) GETPOST('position', 'int'); } elseif ($_POST[$keycode] == '' && !($keycode == 'code' && $id == 10)) { $sql .= "null"; // For vat, we want/accept code = '' } elseif ($keycode == 'content') { $sql .= "'".$db->escape(GETPOST($keycode, 'restricthtml'))."'"; - } elseif (in_array($keycode, array('joinfile', 'private', 'position', 'scale'))) { + } elseif (in_array($keycode, array('joinfile', 'private', 'pos', 'position', 'scale', 'use_default'))) { $sql .= (int) GETPOST($keycode, 'int'); } else { $sql .= "'".$db->escape(GETPOST($keycode, 'nohtml'))."'"; @@ -898,8 +898,8 @@ if (GETPOST('actionadd') || GETPOST('actionmodify')) { $sql .= ",1)"; dol_syslog("actionadd", LOG_DEBUG); - $result = $db->query($sql); - if ($result) { // Add is ok + $resql = $db->query($sql); + if ($resql) { // Add is ok setEventMessages($langs->transnoentities("RecordCreatedSuccessfully"), null, 'mesgs'); // Clean $_POST array, we keep only id of dictionary @@ -956,7 +956,7 @@ if (GETPOST('actionadd') || GETPOST('actionmodify')) { $sql .= "null"; // For vat, we want/accept code = '' } elseif ($keycode == 'content') { $sql .= "'".$db->escape(GETPOST($keycode, 'restricthtml'))."'"; - } elseif (in_array($keycode, array('private', 'position', 'scale'))) { + } elseif (in_array($keycode, array('joinfile', 'private', 'pos', 'position', 'scale', 'use_default'))) { $sql .= (int) GETPOST($keycode, 'int'); } else { $sql .= "'".$db->escape(GETPOST($keycode, 'nohtml'))."'"; @@ -1234,7 +1234,7 @@ if ($id) { $class = ''; if ($value == 'pos') { - $valuetoshow = $langs->trans("Position"); $class = 'maxwidth100'; + $valuetoshow = $langs->trans("Position"); $class = 'right'; } if ($value == 'source') { $valuetoshow = $langs->trans("Contact"); @@ -1341,6 +1341,9 @@ if ($id) { if ($value == 'short_label') { $valuetoshow = $langs->trans("ShortLabel"); } + if ($value == 'fk_parent') { + $valuetoshow = $langs->trans("ParentID"); $class = 'center'; + } if ($value == 'range_account') { $valuetoshow = $langs->trans("Range"); } @@ -1389,7 +1392,7 @@ if ($id) { if ($value == 'delay') { $valuetoshow = $langs->trans("NoticePeriod"); } - if ($value == 'newbymonth') { + if ($value == 'newByMonth') { $valuetoshow = $langs->trans("NewByMonth"); } if ($value == 'fk_tva') { @@ -1623,11 +1626,8 @@ if ($id) { if ($value == 'code') { $valuetoshow = $langs->trans("Code"); } - if ($value == 'pos') { - $cssprefix = 'right '; $valuetoshow = $langs->trans("Position"); - } - if ($value == 'position') { - $cssprefix = 'right '; $valuetoshow = $langs->trans("Position"); + if (in_array($value, array('pos', 'position'))) { + $valuetoshow = $langs->trans("Position"); $cssprefix = 'right '; } if ($value == 'libelle' || $value == 'label') { $valuetoshow = $langs->trans("Label"); @@ -1686,6 +1686,9 @@ if ($id) { if ($value == 'short_label') { $valuetoshow = $langs->trans("ShortLabel"); } + if ($value == 'fk_parent') { + $valuetoshow = $langs->trans("ParentID"); $cssprefix = 'center '; + } if ($value == 'range_account') { $valuetoshow = $langs->trans("Range"); } @@ -1734,7 +1737,7 @@ if ($id) { if ($value == 'delay') { $valuetoshow = $langs->trans("NoticePeriod"); } - if ($value == 'newbymonth') { + if ($value == 'newByMonth') { $valuetoshow = $langs->trans("NewByMonth"); } if ($value == 'fk_tva') { @@ -1992,19 +1995,13 @@ if ($id) { if ($value == 'tracking') { $class .= ' tdoverflowauto'; } - if ($value == 'position') { + if (in_array($value, array('pos', 'position'))) { $class .= ' right'; } - if ($value == 'localtax1_type') { + if (in_array($value, array('localtax1_type', 'localtax2_type'))) { $class .= ' nowrap'; } - if ($value == 'localtax2_type') { - $class .= ' nowrap'; - } - if ($value == 'pos') { - $class .= ' right'; - } - if ($value == 'use_default') { + if (in_array($value, array('use_default', 'fk_parent'))) { $class .= ' center'; } if ($value == 'public') { @@ -2271,7 +2268,13 @@ function fieldList($fieldlist, $obj = '', $tabname = '', $context = '') print ''; print $form->selectarray('source', $sourceList, (!empty($obj->{$value}) ? $obj->{$value}:'')); print ''; + } elseif (in_array($value, array('public', 'use_default'))) { + // Fields 0/1 with a combo select Yes/No + print ''; + print $form->selectyesno($value, (!empty($obj->{$value}) ? $obj->{$value}:''), 1); + print ''; } elseif ($value == 'private') { + // Fields 'no'/'yes' with a combo select Yes/No print ''; print $form->selectyesno("private", (!empty($obj->{$value}) ? $obj->{$value}:'')); print ''; @@ -2367,7 +2370,7 @@ function fieldList($fieldlist, $obj = '', $tabname = '', $context = '') print $form->selectExpenseRanges($obj->fk_range); print ''; } else { - $fieldValue = isset($obj->{$value}) ? $obj->{$value}:''; + $fieldValue = isset($obj->{$value}) ? $obj->{$value}: ''; if ($value == 'sortorder') { $fieldlist[$field] = 'position'; @@ -2377,15 +2380,24 @@ function fieldList($fieldlist, $obj = '', $tabname = '', $context = '') if ($fieldlist[$field] == 'code') { $class = 'maxwidth100'; } - if (in_array($fieldlist[$field], array('dayrule', 'day', 'month', 'year', 'pos', 'use_default', 'affect', 'delay', 'position', 'public', 'sortorder', 'sens', 'category_type'))) { + if (in_array($fieldlist[$field], array('pos', 'position'))) { + $classtd = 'right'; $class = 'maxwidth50 right'; + } + if (in_array($fieldlist[$field], array('dayrule', 'day', 'month', 'year', 'use_default', 'affect', 'delay', 'public', 'sortorder', 'sens', 'category_type', 'fk_parent'))) { $class = 'maxwidth50 center'; } - if (in_array($fieldlist[$field], array('use_default', 'public'))) { + if (in_array($fieldlist[$field], array('use_default', 'public', 'fk_parent'))) { $classtd = 'center'; } if (in_array($fieldlist[$field], array('libelle', 'label', 'tracking'))) { $class = 'quatrevingtpercent'; } + // Fields that must be suggested as '0' instead of '' + if ($fieldlist[$field] == 'fk_parent') { + if (empty($fieldValue)) { + $fieldValue = '0'; + } + } print ''; $transfound = 0; $transkey = ''; diff --git a/htdocs/admin/eventorganization.php b/htdocs/admin/eventorganization.php index a57df57d782..53d27efeba2 100644 --- a/htdocs/admin/eventorganization.php +++ b/htdocs/admin/eventorganization.php @@ -54,12 +54,12 @@ $arrayofparameters = array( 'EVENTORGANIZATION_CATEG_THIRDPARTY_BOOTH'=>array('type'=>'category:'.Categorie::TYPE_CUSTOMER, 'enabled'=>1), //'EVENTORGANIZATION_FILTERATTENDEES_CAT'=>array('type'=>'category:'.Categorie::TYPE_CUSTOMER, 'enabled'=>1), //'EVENTORGANIZATION_FILTERATTENDEES_TYPE'=>array('type'=>'thirdparty_type:', 'enabled'=>1), - 'EVENTORGANIZATION_TEMPLATE_EMAIL_ASK_CONF'=>array('type'=>'emailtemplate:eventorganization_send', 'enabled'=>1), - 'EVENTORGANIZATION_TEMPLATE_EMAIL_ASK_BOOTH'=>array('type'=>'emailtemplate:eventorganization_send', 'enabled'=>1), - 'EVENTORGANIZATION_TEMPLATE_EMAIL_AFT_SUBS_BOOTH'=>array('type'=>'emailtemplate:eventorganization_send', 'enabled'=>1), - 'EVENTORGANIZATION_TEMPLATE_EMAIL_AFT_SUBS_EVENT'=>array('type'=>'emailtemplate:eventorganization_send', 'enabled'=>1), - 'EVENTORGANIZATION_TEMPLATE_EMAIL_BULK_SPEAKER'=>array('type'=>'emailtemplate:eventorganization_send', 'enabled'=>1), - 'EVENTORGANIZATION_TEMPLATE_EMAIL_BULK_ATTENDES'=>array('type'=>'emailtemplate:eventorganization_send', 'enabled'=>1), + 'EVENTORGANIZATION_TEMPLATE_EMAIL_ASK_CONF'=>array('type'=>'emailtemplate:conferenceorbooth', 'enabled'=>1), + 'EVENTORGANIZATION_TEMPLATE_EMAIL_ASK_BOOTH'=>array('type'=>'emailtemplate:conferenceorbooth', 'enabled'=>1), + 'EVENTORGANIZATION_TEMPLATE_EMAIL_AFT_SUBS_BOOTH'=>array('type'=>'emailtemplate:conferenceorbooth', 'enabled'=>1), + 'EVENTORGANIZATION_TEMPLATE_EMAIL_AFT_SUBS_EVENT'=>array('type'=>'emailtemplate:conferenceorbooth', 'enabled'=>1), + 'EVENTORGANIZATION_TEMPLATE_EMAIL_BULK_SPEAKER'=>array('type'=>'emailtemplate:conferenceorbooth', 'enabled'=>1), + 'EVENTORGANIZATION_TEMPLATE_EMAIL_BULK_ATTENDES'=>array('type'=>'emailtemplate:conferenceorbooth', 'enabled'=>1), 'EVENTORGANIZATION_SECUREKEY'=>array('type'=>'securekey', 'enabled'=>1), 'SERVICE_BOOTH_LOCATION'=>array('type'=>'product', 'enabled'=>1), 'SERVICE_CONFERENCE_ATTENDEE_SUBSCRIPTION'=>array('type'=>'product', 'enabled'=>1), diff --git a/htdocs/admin/fckeditor.php b/htdocs/admin/fckeditor.php index 987f435e38f..3388b649a67 100644 --- a/htdocs/admin/fckeditor.php +++ b/htdocs/admin/fckeditor.php @@ -117,7 +117,7 @@ if (GETPOST('save', 'alpha')) { $error++; } - $fckeditor_test = GETPOST('formtestfield'); + $fckeditor_test = GETPOST('formtestfield', 'restricthtml'); if (!empty($fckeditor_test)) { if (!dolibarr_set_const($db, 'FCKEDITOR_TEST', $fckeditor_test, 'chaine', 0, '', $conf->entity)) { $error++; diff --git a/htdocs/admin/ihm.php b/htdocs/admin/ihm.php index f4ea09966fc..cf4c250a678 100644 --- a/htdocs/admin/ihm.php +++ b/htdocs/admin/ihm.php @@ -255,7 +255,7 @@ if ($action == 'update') { $_SESSION["mainmenu"] = ""; // Le gestionnaire de menu a pu changer - header("Location: ".$_SERVER["PHP_SELF"]."?mainmenu=home&leftmenu=setup"); + header("Location: ".$_SERVER["PHP_SELF"]."?mainmenu=home&leftmenu=setup".(GETPOSTISSET('page_y', 'int') ? '&page_y='.GETPOST('page_y', 'int') : '')); exit; } @@ -281,6 +281,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; print ''; print ''; print ''; +print ''; clearstatcache(); @@ -292,8 +293,9 @@ print ''; // Default language print ''.$langs->trans("DefaultLanguage").''; +print img_picto('', 'language', 'class="pictofixedwidth"'); print $formadmin->select_language($conf->global->MAIN_LANG_DEFAULT, 'MAIN_LANG_DEFAULT', 1, null, '', 0, 0, 'minwidth300', 2); -print ''; +//print ''; print ''; print ''; @@ -303,12 +305,24 @@ print ajax_constantonoff("MAIN_MULTILANGS", array(), $conf->entity, 0, 0, 1, 0); print ''; print ''; -print '
'."\n"; +print ''."\n"; print ''; +print '
'; +print '
'; +print ''; +print '
'; + +print '

'; + // Themes and themes options showSkins(null, 1); print '
'; +print '
'; +print ''; +print '
'; + +print '

'; // Other print '
'; @@ -440,6 +454,12 @@ print '
'; print '
'; +print '
'; +print ''; +print '
'; + +print '

'; + // Other print '
'; print ''; @@ -497,7 +517,7 @@ print ''; print '
'; print '
'; -print ''; +print ''; print '
'; print ''; diff --git a/htdocs/admin/index.php b/htdocs/admin/index.php index 396570b2155..aa571644871 100644 --- a/htdocs/admin/index.php +++ b/htdocs/admin/index.php @@ -51,6 +51,7 @@ if (!empty($conf->global->MAIN_MOTD_SETUPPAGE)) { $conf->global->MAIN_MOTD_SETUPPAGE = preg_replace('//i', '
', $conf->global->MAIN_MOTD_SETUPPAGE); if (!empty($conf->global->MAIN_MOTD_SETUPPAGE)) { $i = 0; + $reg = array(); while (preg_match('/__\(([a-zA-Z|@]+)\)__/i', $conf->global->MAIN_MOTD_SETUPPAGE, $reg) && $i < 100) { $tmp = explode('|', $reg[1]); if (!empty($tmp[1])) { diff --git a/htdocs/admin/mails_senderprofile_list.php b/htdocs/admin/mails_senderprofile_list.php index e27c48b0416..8ba5a990c33 100644 --- a/htdocs/admin/mails_senderprofile_list.php +++ b/htdocs/admin/mails_senderprofile_list.php @@ -499,7 +499,7 @@ foreach ($object->fields as $key => $val) { if (!empty($val['arrayofkeyval']) && is_array($val['arrayofkeyval'])) { print $form->selectarray('search_'.$key, $val['arrayofkeyval'], empty($search[$key]) ? '' : $search[$key], $val['notnull'], 0, 0, '', 1, 0, 0, '', 'maxwidth100', 1); } elseif (strpos($val['type'], 'integer:') === 0) { - print $object->showInputField($val, $key, $search[$key], '', '', 'search_', 'maxwidth150', 1); + print $object->showInputField($val, $key, empty($search[$key]) ? '' : $search[$key], '', '', 'search_', 'maxwidth150', 1); } elseif (!preg_match('/^(date|timestamp)/', $val['type'])) { print ''; } diff --git a/htdocs/admin/modules.php b/htdocs/admin/modules.php index 494dfc2f625..f60e011f41c 100644 --- a/htdocs/admin/modules.php +++ b/htdocs/admin/modules.php @@ -919,7 +919,6 @@ if ($mode == 'common' || $mode == 'commonkanban') { if ($objMod->needUpdate) { $versionTitle = $langs->trans('ModuleUpdateAvailable').' : '.$objMod->lastVersion; print ''.$versiontrans.''; - $foundoneexternalmodulewithupdate++; } else { print $versiontrans; } @@ -937,6 +936,9 @@ if ($mode == 'common' || $mode == 'commonkanban') { print "\n"; } + if ($objMod->needUpdate) { + $foundoneexternalmodulewithupdate++; + } } if ($action == 'checklastversion') { diff --git a/htdocs/admin/oauth.php b/htdocs/admin/oauth.php index 079e55cb523..e2f123f627c 100644 --- a/htdocs/admin/oauth.php +++ b/htdocs/admin/oauth.php @@ -91,6 +91,7 @@ print dol_get_fiche_head($head, 'services', '', -1, 'technic'); print ''.$langs->trans("ListOfSupportedOauthProviders").'

'; +print '
'; print '
'; $i = 0; @@ -145,6 +146,7 @@ foreach ($list as $key) { } print '
'."\n"; +print '
'; print dol_get_fiche_end(); diff --git a/htdocs/admin/oauthlogintokens.php b/htdocs/admin/oauthlogintokens.php index 1b2886cd8ef..998b6c39c0f 100644 --- a/htdocs/admin/oauthlogintokens.php +++ b/htdocs/admin/oauthlogintokens.php @@ -230,7 +230,7 @@ if ($mode == 'setup' && $user->admin) { print ''; print ''; - + print '
'; print ''."\n"; print ''; @@ -262,15 +262,15 @@ if ($mode == 'setup' && $user->admin) { print $langs->trans("NoAccessToken"); } print ''; - print '
'; + print ''; // Links to delete/checks token if (is_object($tokenobj)) { //test on $storage->hasAccessToken($OAUTH_SERVICENAME) ? - print ''.$langs->trans('DeleteAccess').'
'; + print ''.$langs->trans('DeleteAccess').'
'; } // Request remote token if ($urltorenew) { - print ''.$langs->trans('RequestAccess').'
'; + print ''.$langs->trans('RequestAccess').'
'; } // Check remote access if ($urltocheckperms) { @@ -330,6 +330,7 @@ if ($mode == 'setup' && $user->admin) { } print '
'; + print '
'; if (!empty($driver)) { if ($submit_enabled) { @@ -345,6 +346,7 @@ if ($mode == 'setup' && $user->admin) { if ($mode == 'test' && $user->admin) { print $langs->trans('PrintTestDesc'.$driver)."

\n"; + print '
'; print ''; if (!empty($driver)) { require_once DOL_DOCUMENT_ROOT.'/core/modules/printing/'.$driver.'.modules.php'; @@ -364,11 +366,13 @@ if ($mode == 'test' && $user->admin) { } print '
'; + print '
'; } if ($mode == 'userconf' && $user->admin) { print $langs->trans('PrintUserConfDesc'.$driver)."

\n"; + print '
'; print ''; print ''; print ''; @@ -395,6 +399,7 @@ if ($mode == 'userconf' && $user->admin) { print "\n"; } print '
'.$langs->trans("User").'
'; + print '
'; } print dol_get_fiche_end(); diff --git a/htdocs/admin/pdf.php b/htdocs/admin/pdf.php index 7d7b5e36a40..d5873e2a50e 100644 --- a/htdocs/admin/pdf.php +++ b/htdocs/admin/pdf.php @@ -371,17 +371,7 @@ print $formadmin->select_language($selected, 'PDF_USE_ALSO_LANGUAGE_CODE', 0, nu //} print ''; -//Desc - -print ''.$langs->trans("HideDescOnPDF").''; -if ($conf->use_javascript_ajax) { - print ajax_constantonoff('MAIN_GENERATE_DOCUMENTS_HIDE_DESC'); -} else { - print $form->selectyesno('MAIN_GENERATE_DOCUMENTS_HIDE_DESC', (!empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DESC)) ? $conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DESC : 0, 1); -} -print ''; - -//Ref +// Ref print ''.$langs->trans("HideRefOnPDF").''; if ($conf->use_javascript_ajax) { @@ -391,7 +381,17 @@ if ($conf->use_javascript_ajax) { } print ''; -//Details +// Desc + +print ''.$langs->trans("HideDescOnPDF").''; +if ($conf->use_javascript_ajax) { + print ajax_constantonoff('MAIN_GENERATE_DOCUMENTS_HIDE_DESC'); +} else { + print $form->selectyesno('MAIN_GENERATE_DOCUMENTS_HIDE_DESC', (!empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DESC)) ? $conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DESC : 0, 1); +} +print ''; + +// Details print ''.$langs->trans("HideDetailsOnPDF").''; if ($conf->use_javascript_ajax) { diff --git a/htdocs/admin/pdf_other.php b/htdocs/admin/pdf_other.php index 03c27fd3721..ed14f2ac119 100644 --- a/htdocs/admin/pdf_other.php +++ b/htdocs/admin/pdf_other.php @@ -78,7 +78,8 @@ $head = pdf_admin_prepare_head(); print dol_get_fiche_head($head, 'other', $langs->trans("other"), -1, 'pdf'); -print ''.$form->textwithpicto($langs->trans("PDFOtherDesc"), $s)."
\n"; +$tooltiptext = ''; +print ''.$form->textwithpicto($langs->trans("PDFOtherDesc"), $tooltiptext)."
\n"; print "
\n"; print load_fiche_titre($langs->trans("Proposal"), '', ''); @@ -116,10 +117,11 @@ print ''; print ''; print ''; - +/* print '
'; print ''; print '
'; +*/ print ''; diff --git a/htdocs/admin/security.php b/htdocs/admin/security.php index e94dd6bad39..064fb5650a4 100644 --- a/htdocs/admin/security.php +++ b/htdocs/admin/security.php @@ -251,7 +251,7 @@ foreach ($arrayhandler as $key => $module) { } elseif ($tmp == 'NotConfigured') { print $langs->trans($tmp); } else { - print $tmp; + print ''.$tmp.''; } print ''."\n"; diff --git a/htdocs/admin/system/dolibarr.php b/htdocs/admin/system/dolibarr.php index 9af09164469..58f6af55d60 100644 --- a/htdocs/admin/system/dolibarr.php +++ b/htdocs/admin/system/dolibarr.php @@ -309,57 +309,59 @@ print '
'; // Parameters in conf.php file (when a parameter start with ?, it is shown only if defined) $configfileparameters = array( - 'dolibarr_main_url_root' => $langs->trans("URLRoot"), - '?dolibarr_main_url_root_alt' => $langs->trans("URLRoot").' (alt)', - 'dolibarr_main_document_root'=> $langs->trans("DocumentRootServer"), - '?dolibarr_main_document_root_alt' => $langs->trans("DocumentRootServer").' (alt)', - 'dolibarr_main_data_root' => $langs->trans("DataRootServer"), - 'dolibarr_main_instance_unique_id' => $langs->trans("InstanceUniqueID"), - 'separator1' => '', - 'dolibarr_main_db_host' => $langs->trans("DatabaseServer"), - 'dolibarr_main_db_port' => $langs->trans("DatabasePort"), - 'dolibarr_main_db_name' => $langs->trans("DatabaseName"), - 'dolibarr_main_db_type' => $langs->trans("DriverType"), - 'dolibarr_main_db_user' => $langs->trans("DatabaseUser"), - 'dolibarr_main_db_pass' => $langs->trans("DatabasePassword"), - 'dolibarr_main_db_character_set' => $langs->trans("DBStoringCharset"), - 'dolibarr_main_db_collation' => $langs->trans("DBSortingCollation"), - '?dolibarr_main_db_prefix' => $langs->trans("Prefix"), - 'separator2' => '', - 'dolibarr_main_authentication' => $langs->trans("AuthenticationMode"), - '?multicompany_transverse_mode'=> $langs->trans("MultiCompanyMode"), - 'separator'=> '', - '?dolibarr_main_auth_ldap_login_attribute' => 'dolibarr_main_auth_ldap_login_attribute', - '?dolibarr_main_auth_ldap_host' => 'dolibarr_main_auth_ldap_host', - '?dolibarr_main_auth_ldap_port' => 'dolibarr_main_auth_ldap_port', - '?dolibarr_main_auth_ldap_version' => 'dolibarr_main_auth_ldap_version', - '?dolibarr_main_auth_ldap_dn' => 'dolibarr_main_auth_ldap_dn', - '?dolibarr_main_auth_ldap_admin_login' => 'dolibarr_main_auth_ldap_admin_login', - '?dolibarr_main_auth_ldap_admin_pass' => 'dolibarr_main_auth_ldap_admin_pass', - '?dolibarr_main_auth_ldap_debug' => 'dolibarr_main_auth_ldap_debug', - 'separator3' => '', - '?dolibarr_lib_ADODB_PATH' => 'dolibarr_lib_ADODB_PATH', - '?dolibarr_lib_FPDF_PATH' => 'dolibarr_lib_FPDF_PATH', - '?dolibarr_lib_TCPDF_PATH' => 'dolibarr_lib_TCPDF_PATH', - '?dolibarr_lib_FPDI_PATH' => 'dolibarr_lib_FPDI_PATH', - '?dolibarr_lib_TCPDI_PATH' => 'dolibarr_lib_TCPDI_PATH', - '?dolibarr_lib_NUSOAP_PATH' => 'dolibarr_lib_NUSOAP_PATH', - '?dolibarr_lib_GEOIP_PATH' => 'dolibarr_lib_GEOIP_PATH', - '?dolibarr_lib_ODTPHP_PATH' => 'dolibarr_lib_ODTPHP_PATH', - '?dolibarr_lib_ODTPHP_PATHTOPCLZIP' => 'dolibarr_lib_ODTPHP_PATHTOPCLZIP', - '?dolibarr_js_CKEDITOR' => 'dolibarr_js_CKEDITOR', - '?dolibarr_js_JQUERY' => 'dolibarr_js_JQUERY', - '?dolibarr_js_JQUERY_UI' => 'dolibarr_js_JQUERY_UI', - '?dolibarr_font_DOL_DEFAULT_TTF' => 'dolibarr_font_DOL_DEFAULT_TTF', - '?dolibarr_font_DOL_DEFAULT_TTF_BOLD' => 'dolibarr_font_DOL_DEFAULT_TTF_BOLD', - 'separator4' => '', - 'dolibarr_main_prod' => 'Production mode (Hide all error messages)', - 'dolibarr_main_restrict_os_commands' => 'Restrict CLI commands for backups', - 'dolibarr_main_restrict_ip' => 'Restrict access to some IPs only', - '?dolibarr_mailing_limit_sendbyweb' => 'Limit nb of email sent by page', - '?dolibarr_mailing_limit_sendbycli' => 'Limit nb of email sent by cli', - '?dolibarr_strict_mode' => 'Strict mode is on/off', - '?dolibarr_nocsrfcheck' => 'Disable CSRF security checks' + 'dolibarr_main_prod' => 'Production mode (Hide all error messages)', + 'dolibarr_main_instance_unique_id' => $langs->trans("InstanceUniqueID"), + 'separator0' => '', + 'dolibarr_main_url_root' => $langs->trans("URLRoot"), + '?dolibarr_main_url_root_alt' => $langs->trans("URLRoot").' (alt)', + 'dolibarr_main_document_root'=> $langs->trans("DocumentRootServer"), + '?dolibarr_main_document_root_alt' => $langs->trans("DocumentRootServer").' (alt)', + 'dolibarr_main_data_root' => $langs->trans("DataRootServer"), + 'separator1' => '', + 'dolibarr_main_db_host' => $langs->trans("DatabaseServer"), + 'dolibarr_main_db_port' => $langs->trans("DatabasePort"), + 'dolibarr_main_db_name' => $langs->trans("DatabaseName"), + 'dolibarr_main_db_type' => $langs->trans("DriverType"), + 'dolibarr_main_db_user' => $langs->trans("DatabaseUser"), + 'dolibarr_main_db_pass' => $langs->trans("DatabasePassword"), + 'dolibarr_main_db_character_set' => $langs->trans("DBStoringCharset"), + 'dolibarr_main_db_collation' => $langs->trans("DBSortingCollation"), + '?dolibarr_main_db_prefix' => $langs->trans("DatabasePrefix"), + 'dolibarr_main_db_readonly' => $langs->trans("ReadOnlyMode"), + 'separator2' => '', + 'dolibarr_main_authentication' => $langs->trans("AuthenticationMode"), + '?multicompany_transverse_mode'=> $langs->trans("MultiCompanyMode"), + 'separator'=> '', + '?dolibarr_main_auth_ldap_login_attribute' => 'dolibarr_main_auth_ldap_login_attribute', + '?dolibarr_main_auth_ldap_host' => 'dolibarr_main_auth_ldap_host', + '?dolibarr_main_auth_ldap_port' => 'dolibarr_main_auth_ldap_port', + '?dolibarr_main_auth_ldap_version' => 'dolibarr_main_auth_ldap_version', + '?dolibarr_main_auth_ldap_dn' => 'dolibarr_main_auth_ldap_dn', + '?dolibarr_main_auth_ldap_admin_login' => 'dolibarr_main_auth_ldap_admin_login', + '?dolibarr_main_auth_ldap_admin_pass' => 'dolibarr_main_auth_ldap_admin_pass', + '?dolibarr_main_auth_ldap_debug' => 'dolibarr_main_auth_ldap_debug', + 'separator3' => '', + '?dolibarr_lib_ADODB_PATH' => 'dolibarr_lib_ADODB_PATH', + '?dolibarr_lib_FPDF_PATH' => 'dolibarr_lib_FPDF_PATH', + '?dolibarr_lib_TCPDF_PATH' => 'dolibarr_lib_TCPDF_PATH', + '?dolibarr_lib_FPDI_PATH' => 'dolibarr_lib_FPDI_PATH', + '?dolibarr_lib_TCPDI_PATH' => 'dolibarr_lib_TCPDI_PATH', + '?dolibarr_lib_NUSOAP_PATH' => 'dolibarr_lib_NUSOAP_PATH', + '?dolibarr_lib_GEOIP_PATH' => 'dolibarr_lib_GEOIP_PATH', + '?dolibarr_lib_ODTPHP_PATH' => 'dolibarr_lib_ODTPHP_PATH', + '?dolibarr_lib_ODTPHP_PATHTOPCLZIP' => 'dolibarr_lib_ODTPHP_PATHTOPCLZIP', + '?dolibarr_js_CKEDITOR' => 'dolibarr_js_CKEDITOR', + '?dolibarr_js_JQUERY' => 'dolibarr_js_JQUERY', + '?dolibarr_js_JQUERY_UI' => 'dolibarr_js_JQUERY_UI', + '?dolibarr_font_DOL_DEFAULT_TTF' => 'dolibarr_font_DOL_DEFAULT_TTF', + '?dolibarr_font_DOL_DEFAULT_TTF_BOLD' => 'dolibarr_font_DOL_DEFAULT_TTF_BOLD', + 'separator4' => '', + 'dolibarr_main_restrict_os_commands' => 'Restrict CLI commands for backups', + 'dolibarr_main_restrict_ip' => 'Restrict access to some IPs only', + '?dolibarr_mailing_limit_sendbyweb' => 'Limit nb of email sent by page', + '?dolibarr_mailing_limit_sendbycli' => 'Limit nb of email sent by cli', + '?dolibarr_strict_mode' => 'Strict mode is on/off', + '?dolibarr_nocsrfcheck' => 'Disable CSRF security checks' ); print '
'; @@ -400,8 +402,10 @@ foreach ($configfileparameters as $key => $value) { if (in_array($newkey, array('dolibarr_main_db_pass', 'dolibarr_main_auth_ldap_admin_pass'))) { if (empty($dolibarr_main_prod)) { print ''; + print showValueWithClipboardCPButton(${$newkey}, 0, '********'); + } else { + print '**********'; } - print '**********'; } elseif ($newkey == 'dolibarr_main_url_root' && preg_match('/__auto__/', ${$newkey})) { print ${$newkey}.' => '.constant('DOL_MAIN_URL_ROOT'); } elseif ($newkey == 'dolibarr_main_document_root_alt') { @@ -420,9 +424,14 @@ foreach ($configfileparameters as $key => $value) { } } elseif ($newkey == 'dolibarr_main_instance_unique_id') { //print $conf->file->instance_unique_id; - global $dolibarr_main_cookie_cryptkey; - $valuetoshow = ${$newkey} ? ${$newkey} : $dolibarr_main_cookie_cryptkey; // Use $dolibarr_main_instance_unique_id first then $dolibarr_main_cookie_cryptkey - print $valuetoshow; + global $dolibarr_main_cookie_cryptkey, $dolibarr_main_instance_unique_id; + $valuetoshow = $dolibarr_main_instance_unique_id ? $dolibarr_main_instance_unique_id : $dolibarr_main_cookie_cryptkey; // Use $dolibarr_main_instance_unique_id first then $dolibarr_main_cookie_cryptkey + if (empty($dolibarr_main_prod)) { + print ''; + print showValueWithClipboardCPButton($valuetoshow, 0, '********'); + } else { + print '**********'; + } if (empty($valuetoshow)) { print img_warning("EditConfigFileToAddEntry", 'dolibarr_main_instance_unique_id'); } @@ -441,6 +450,13 @@ foreach ($configfileparameters as $key => $value) { if (!empty($valuetoshow)) { print img_warning($langs->trans('SwitchThisForABetterSecurity', 0)); } + } elseif ($newkey == 'dolibarr_main_db_readonly') { + print ${$newkey}; + + $valuetoshow = ${$newkey}; + if (!empty($valuetoshow)) { + print img_warning($langs->trans('ReadOnlyMode', 1)); + } } else { print (empty(${$newkey}) ? '' : ${$newkey}); } diff --git a/htdocs/admin/system/security.php b/htdocs/admin/system/security.php index 0b2f2678521..032a23a68c8 100644 --- a/htdocs/admin/system/security.php +++ b/htdocs/admin/system/security.php @@ -251,7 +251,7 @@ print '
'; if (empty($conf->global->SECURITY_DISABLE_TEST_ON_OBFUSCATED_CONF)) { print '$dolibarr_main_db_pass: '; if (!empty($dolibarr_main_db_pass) && empty($dolibarr_main_db_encrypted_pass)) { - print img_picto('', 'warning').' '.$langs->trans("DatabasePasswordNotObfuscated").'   ('.$langs->trans("Recommanded").': '.$langs->trans("SetOptionTo", $langs->transnoentitiesnoconv("MainDbPasswordFileConfEncrypted"), yn(1)).')'; + print img_picto('', 'warning').' '.$langs->trans("DatabasePasswordNotObfuscated").'   ('.$langs->trans("Recommended").': '.$langs->trans("SetOptionTo", $langs->transnoentitiesnoconv("MainDbPasswordFileConfEncrypted"), yn(1)).')'; //print ' ('.$langs->trans("RecommendedValueIs", $langs->transnoentitiesnoconv("IPsOfUsers")).')'; } else { print img_picto('', 'tick').' '.$langs->trans("DatabasePasswordObfuscated"); @@ -267,49 +267,14 @@ if (empty($conf->global->SECURITY_DISABLE_TEST_ON_OBFUSCATED_CONF)) { print '
'; print '
'; print '
'; -print load_fiche_titre($langs->trans("Menu").' '.$langs->trans("SecuritySetup").' + '.$langs->trans("OtherSetup"), '', 'folder'); -//print ''.$langs->trans("PasswordEncryption").': '; -print 'MAIN_SECURITY_HASH_ALGO = '.(empty($conf->global->MAIN_SECURITY_HASH_ALGO) ? ''.$langs->trans("Undefined").'' : $conf->global->MAIN_SECURITY_HASH_ALGO)."   "; -if (empty($conf->global->MAIN_SECURITY_HASH_ALGO)) { - print '     If unset: \'md5\''; -} -if ($conf->global->MAIN_SECURITY_HASH_ALGO != 'password_hash') { - print '
MAIN_SECURITY_SALT = '.(empty($conf->global->MAIN_SECURITY_SALT) ? ''.$langs->trans("Undefined").'' : $conf->global->MAIN_SECURITY_SALT).'
'; -} else { - print '('.$langs->trans("Recommanded").': password_hash)'; - print '
'; -} -if ($conf->global->MAIN_SECURITY_HASH_ALGO != 'password_hash') { - print '
The recommanded value for MAIN_SECURITY_HASH_ALGO is now \'password_hash\' but setting it now will make ALL existing passwords of all users not valid, so update is not possible.
'; - print 'If you really want to switch, you must:
'; - print '- Go on home - setup - other and add constant MAIN_SECURITY_HASH_ALGO to value \'password_hash\'
'; - print '- In same session, WITHOUT LOGGING OUT, go into your admin user record and set a new password
'; - print '- You can now logout and login with this new password. You must now reset password of all other users.
'; - print '

'; -} +print load_fiche_titre($langs->trans("Menu").' '.$langs->trans("SecuritySetup"), '', 'folder'); + + +print ''.$langs->trans("UseCaptchaCode").': '; +print empty($conf->global->MAIN_SECURITY_ENABLECAPTCHA) ? '' : img_picto('', 'tick').' '; +print yn(empty($conf->global->MAIN_SECURITY_ENABLECAPTCHA) ? 0 : 1); print '
'; - - -print 'MAIN_SECURITY_ANTI_SSRF_SERVER_IP = '.(empty($conf->global->MAIN_SECURITY_ANTI_SSRF_SERVER_IP) ? ''.$langs->trans("Undefined").'   ('.$langs->trans("Example").': static-ips-of-server - '.$langs->trans("Note").': common loopback ip like 127.*.*.*, [::1] are already added)' : $conf->global->MAIN_SECURITY_ANTI_SSRF_SERVER_IP)."
"; -print '
'; - -print 'MAIN_ALLOW_SVG_FILES_AS_IMAGES = '.(empty($conf->global->MAIN_ALLOW_SVG_FILES_AS_IMAGES) ? '0   ('.$langs->trans("Recommanded").': 0)' : $conf->global->MAIN_ALLOW_SVG_FILES_AS_IMAGES)."
"; -print '
'; - -print 'MAIN_EXEC_USE_POPEN = '; -if (empty($conf->global->MAIN_EXEC_USE_POPEN)) { - print ''.$langs->trans("Undefined").''; -} else { - print $conf->global->MAIN_EXEC_USE_POPEN; -} -if ($execmethod == 1) { - print '   ("exec" PHP method will be used for shell commands)'; -} -if ($execmethod == 2) { - print '   ("popen" PHP method will be used for shell commands)'; -} -print "
"; print '
'; @@ -354,6 +319,62 @@ if (empty($out)) { } print '
'; +print '
'; +print '
'; +print '
'; + + +print load_fiche_titre($langs->trans("OtherSetup").' ('.$langs->trans("Experimental").')', '', 'folder'); + + +//print ''.$langs->trans("PasswordEncryption").': '; +print 'MAIN_SECURITY_HASH_ALGO = '.(empty($conf->global->MAIN_SECURITY_HASH_ALGO) ? ''.$langs->trans("Undefined").'' : $conf->global->MAIN_SECURITY_HASH_ALGO)."   "; +if (empty($conf->global->MAIN_SECURITY_HASH_ALGO)) { + print '     If unset: \'md5\''; +} +if ($conf->global->MAIN_SECURITY_HASH_ALGO != 'password_hash') { + print '
MAIN_SECURITY_SALT = '.(empty($conf->global->MAIN_SECURITY_SALT) ? ''.$langs->trans("Undefined").'' : $conf->global->MAIN_SECURITY_SALT).'
'; +} else { + print '('.$langs->trans("Recommanded").': password_hash)'; + print '
'; +} +if ($conf->global->MAIN_SECURITY_HASH_ALGO != 'password_hash') { + print '
The recommanded value for MAIN_SECURITY_HASH_ALGO is now \'password_hash\' but setting it now will make ALL existing passwords of all users not valid, so update is not possible.
'; + print 'If you really want to switch, you must:
'; + print '- Go on home - setup - other and add constant MAIN_SECURITY_HASH_ALGO to value \'password_hash\'
'; + print '- In same session, WITHOUT LOGGING OUT, go into your admin user record and set a new password
'; + print '- You can now logout and login with this new password. You must now reset password of all other users.
'; + print '

'; +} +print '
'; + +print 'MAIN_SECURITY_ANTI_SSRF_SERVER_IP = '.(empty($conf->global->MAIN_SECURITY_ANTI_SSRF_SERVER_IP) ? ''.$langs->trans("Undefined").'   ('.$langs->trans("Example").': static-ips-of-server - '.$langs->trans("Note").': common loopback ip like 127.*.*.*, [::1] are already added)' : $conf->global->MAIN_SECURITY_ANTI_SSRF_SERVER_IP)."
"; +print '
'; + +print 'MAIN_ALLOW_SVG_FILES_AS_IMAGES = '.(empty($conf->global->MAIN_ALLOW_SVG_FILES_AS_IMAGES) ? '0   ('.$langs->trans("Recommanded").': 0)' : $conf->global->MAIN_ALLOW_SVG_FILES_AS_IMAGES)."
"; +print '
'; + +print 'MAIN_RESTRICTHTML_ONLY_VALID_HTML = '.(empty($conf->global->MAIN_RESTRICTHTML_ONLY_VALID_HTML) ? ''.$langs->trans("Undefined").'   ('.$langs->trans("Recommanded").': 1)' : $conf->global->MAIN_RESTRICTHTML_ONLY_VALID_HTML)."
"; +print '
'; + +print 'MAIN_RESTRICTHTML_REMOVE_ALSO_BAD_ATTRIBUTES = '.(empty($conf->global->MAIN_RESTRICTHTML_REMOVE_ALSO_BAD_ATTRIBUTES) ? ''.$langs->trans("Undefined").'   ('.$langs->trans("Recommanded").': 1)' : $conf->global->MAIN_RESTRICTHTML_REMOVE_ALSO_BAD_ATTRIBUTES)."
"; +print '
'; + +print 'MAIN_EXEC_USE_POPEN = '; +if (empty($conf->global->MAIN_EXEC_USE_POPEN)) { + print ''.$langs->trans("Undefined").''; +} else { + print $conf->global->MAIN_EXEC_USE_POPEN; +} +if ($execmethod == 1) { + print '   ("exec" PHP method will be used for shell commands)'; +} +if ($execmethod == 2) { + print '   ("popen" PHP method will be used for shell commands)'; +} +print "
"; +print '
'; + // Modules/Applications @@ -405,7 +426,7 @@ if (empty($conf->api->enabled) && empty($conf->webservices->enabled)) { print '
'; } if (!empty($conf->api->enabled)) { - print 'API_ENDPOINT_RULES = '.(empty($conf->global->API_ENDPOINT_RULES) ? ''.$langs->trans("Undefined").'' : $conf->global->API_ENDPOINT_RULES)."
\n"; + print 'API_ENDPOINT_RULES = '.(empty($conf->global->API_ENDPOINT_RULES) ? ''.$langs->trans("Undefined").'   ('.$langs->trans("Example").': endpoint1:1,endpoint2:1,...)' : $conf->global->API_ENDPOINT_RULES)."
\n"; print '
'; } } diff --git a/htdocs/asset/note.php b/htdocs/asset/note.php index 752591ade9e..16af18d8277 100644 --- a/htdocs/asset/note.php +++ b/htdocs/asset/note.php @@ -70,8 +70,13 @@ $permissionnote = 1; * Actions */ -include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once - +$reshook = $hookmanager->executeHooks('doActions', array(), $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) { + setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); +} +if (empty($reshook)) { + include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once +} /* * View diff --git a/htdocs/bom/bom_card.php b/htdocs/bom/bom_card.php index b598b95ae0a..cd530994b9b 100644 --- a/htdocs/bom/bom_card.php +++ b/htdocs/bom/bom_card.php @@ -532,10 +532,11 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea */ if (!empty($object->table_element_line)) { - print '
+ print ' + '; diff --git a/htdocs/bom/bom_list.php b/htdocs/bom/bom_list.php index a47b1692ca9..76f16c838be 100644 --- a/htdocs/bom/bom_list.php +++ b/htdocs/bom/bom_list.php @@ -83,6 +83,10 @@ foreach ($object->fields as $key => $val) { if (GETPOST('search_'.$key, 'alpha') !== '') { $search[$key] = GETPOST('search_'.$key, 'alpha'); } + if (preg_match('/^(date|timestamp|datetime)/', $val['type'])) { + $search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOST('search_'.$key.'_dtstartmonth', 'int'), GETPOST('search_'.$key.'_dtstartday', 'int'), GETPOST('search_'.$key.'_dtstartyear', 'int')); + $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOST('search_'.$key.'_dtendmonth', 'int'), GETPOST('search_'.$key.'_dtendday', 'int'), GETPOST('search_'.$key.'_dtendyear', 'int')); + } } // List of fields to search into when doing a "search in all" @@ -104,7 +108,7 @@ foreach ($object->fields as $key => $val) { 'checked'=>(($visible < 0) ? 0 : 1), 'enabled'=>($visible != 3 && dol_eval($val['enabled'], 1)), 'position'=>$val['position'], - 'help'=>$val['help'] + 'help'=> isset($val['help']) ? $val['help'] : '' ); } } @@ -131,7 +135,8 @@ $result = restrictedArea($user, 'bom'); */ if (GETPOST('cancel', 'alpha')) { - $action = 'list'; $massaction = ''; + $action = 'list'; + $massaction = ''; } if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'presend' && $massaction != 'confirm_presend') { $massaction = ''; @@ -151,6 +156,10 @@ if (empty($reshook)) { if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // All tests are required to be compatible with all browsers foreach ($object->fields as $key => $val) { $search[$key] = ''; + if (preg_match('/^(date|timestamp|datetime)/', $val['type'])) { + $search[$key.'_dtstart'] = ''; + $search[$key.'_dtend'] = ''; + } } $toselect = array(); $search_array_options = array(); @@ -277,18 +286,18 @@ $now = dol_now(); $help_url = 'EN:Module_BOM'; $title = $langs->trans('ListOfBOMs'); +$morejs = array(); +$morecss = array(); // Build and execute select // -------------------------------------------------------------------- $sql = 'SELECT '; -foreach ($object->fields as $key => $val) { - $sql .= 't.'.$key.', '; -} +$sql .= $object->getFieldList('t'); // Add fields from extrafields if (!empty($extrafields->attributes[$object->table_element]['label'])) { foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) { - $sql .= ($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? "ef.".$key.' as options_'.$key.', ' : ''); + $sql .= ($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? ", ef.".$key.' as options_'.$key.', ' : ''); } } // Add fields from hooks @@ -297,33 +306,52 @@ $reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters, $obje $sql .= preg_replace('/^,/', '', $hookmanager->resPrint); $sql = preg_replace('/,\s*$/', '', $sql); $sql .= " FROM ".MAIN_DB_PREFIX.$object->table_element." as t"; -if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) { +if (isset($extrafields->attributes[$object->table_element]['label']) && is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) { $sql .= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (t.rowid = ef.fk_object)"; } +// Add table from hooks +$parameters = array(); +$reshook = $hookmanager->executeHooks('printFieldListFrom', $parameters, $object); // Note that $action and $object may have been modified by hook +$sql .= $hookmanager->resPrint; if ($object->ismultientitymanaged == 1) { $sql .= " WHERE t.entity IN (".getEntity($object->element).")"; } else { $sql .= " WHERE 1 = 1"; } foreach ($search as $key => $val) { - if ($key == 'status' && $search[$key] == -1) { - continue; - } - $mode_search = (($object->isInt($object->fields[$key]) || $object->isFloat($object->fields[$key])) ? 1 : 0); - if (strpos($object->fields[$key]['type'], 'integer:') === 0) { - if ($search[$key] == '-1') { - $search[$key] = ''; + if (array_key_exists($key, $object->fields)) { + if ($key == 'status' && $search[$key] == -1) { + continue; + } + $mode_search = (($object->isInt($object->fields[$key]) || $object->isFloat($object->fields[$key])) ? 1 : 0); + if ((strpos($object->fields[$key]['type'], 'integer:') === 0) || (strpos($object->fields[$key]['type'], 'sellist:') === 0) || !empty($object->fields[$key]['arrayofkeyval'])) { + if ($search[$key] == '-1' || $search[$key] === '0') { + $search[$key] = ''; + } + $mode_search = 2; + } + if ($search[$key] != '') { + $sql .= natural_search($key, $search[$key], (($key == 'status') ? 2 : $mode_search)); + } + } else { + if (preg_match('/(_dtstart|_dtend)$/', $key) && $search[$key] != '') { + $columnName=preg_replace('/(_dtstart|_dtend)$/', '', $key); + if (preg_match('/^(date|timestamp|datetime)/', $object->fields[$columnName]['type'])) { + if (preg_match('/_dtstart$/', $key)) { + $sql .= " AND t." . $columnName . " >= '" . $db->idate($search[$key]) . "'"; + } + if (preg_match('/_dtend$/', $key)) { + $sql .= " AND t." . $columnName . " <= '" . $db->idate($search[$key]) . "'"; + } + } } - $mode_search = 2; - } - if ($search[$key] != '') { - $sql .= natural_search($key, $search[$key], (($key == 'status') ? 2 : $mode_search)); } } if ($search_all) { $sql .= natural_search(array_keys($fieldstosearchall), $search_all); } +//$sql.= dolSqlDateFilter("t.field", $search_xxxday, $search_xxxmonth, $search_xxxyear); // Add where from extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php'; // Add where from hooks @@ -332,7 +360,7 @@ $reshook = $hookmanager->executeHooks('printFieldListWhere', $parameters, $objec $sql .= $hookmanager->resPrint; /* If a group by is required -$sql.= " GROUP BY " +$sql.= " GROUP BY "; foreach($object->fields as $key => $val) { $sql.='t.'.$key.', '; @@ -345,7 +373,7 @@ if (! empty($extrafields->attributes[$object->table_element]['label'])) { } // Add where from hooks $parameters=array(); -$reshook=$hookmanager->executeHooks('printFieldListGroupBy',$parameters); // Note that $action and $object may have been modified by hook +$reshook=$hookmanager->executeHooks('printFieldListGroupBy', $parameters, $object); // Note that $action and $object may have been modified by hook $sql.=$hookmanager->resPrint; $sql=preg_replace('/,\s*$/','', $sql); */ @@ -391,7 +419,7 @@ if ($num == 1 && !empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && $ // Output page // -------------------------------------------------------------------- -llxHeader('', $title, $help_url); +llxHeader('', $title, $help_url, '', 0, 0, $morejs, $morecss, '', ''); $arrayofselected = is_array($toselect) ? $toselect : array(); @@ -416,6 +444,10 @@ if ($optioncss != '') { } // Add $param from extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php'; +// Add $param from hooks +$parameters = array(); +$reshook = $hookmanager->executeHooks('printFieldListSearchParam', $parameters, $object); // Note that $action and $object may have been modified by hook +$param .= $hookmanager->resPrint; // List of mass actions available $arrayofmassactions = array( @@ -431,7 +463,7 @@ if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend', 'pr } $massactionbutton = $form->selectMassAction('', $arrayofmassactions); -print ''; +print ''."\n"; if ($optioncss != '') { print ''; } @@ -440,11 +472,12 @@ print ''; print ''; print ''; +print ''; print ''; $newcardbutton = dolGetButtonTitle($langs->trans('New'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/bom/bom_card.php?action=create&backtopage='.urlencode($_SERVER['PHP_SELF']), '', $user->rights->bom->write); -print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'bom', 0, $newcardbutton, '', $limit, 0, 0, 1); +print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'object_'.$object->picto, 0, $newcardbutton, '', $limit, 0, 0, 1); // Add code for pre mass action (confirmation or email presend form) $topicmail = "SendBillOfMaterialsRef"; @@ -504,11 +537,18 @@ foreach ($object->fields as $key => $val) { if (!empty($arrayfields['t.'.$key]['checked'])) { print ''; if (!empty($val['arrayofkeyval']) && is_array($val['arrayofkeyval'])) { - print $form->selectarray('search_'.$key, $val['arrayofkeyval'], $search[$key], $val['notnull'], 0, 0, '', 1, 0, 0, '', 'maxwidth100', 1); + print $form->selectarray('search_'.$key, $val['arrayofkeyval'], (isset($search[$key]) ? $search[$key] : ''), $val['notnull'], 0, 0, '', 1, 0, 0, '', 'maxwidth100', 1); } elseif ((strpos($val['type'], 'integer:') === 0) || (strpos($val['type'], 'sellist:') === 0)) { - print $object->showInputField($val, $key, $search[$key], '', '', 'search_', 'maxwidth125', 1); - } elseif (!preg_match('/^(date|timestamp)/', $val['type'])) { - print ''; + print $object->showInputField($val, $key, (isset($search[$key]) ? $search[$key] : ''), '', '', 'search_', 'maxwidth125', 1); + } elseif (!preg_match('/^(date|timestamp|datetime)/', $val['type'])) { + print ''; + } elseif (preg_match('/^(date|timestamp|datetime)/', $val['type'])) { + print '
'; + print $form->selectDate($search[$key.'_dtstart'] ? $search[$key.'_dtstart'] : '', "search_".$key."_dtstart", 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From')); + print '
'; + print '
'; + print $form->selectDate($search[$key.'_dtend'] ? $search[$key.'_dtend'] : '', "search_".$key."_dtend", 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('to')); + print '
'; } print ''; } @@ -559,7 +599,7 @@ print ''."\n"; // Detect if we need a fetch on each output line $needToFetchEachLine = 0; -if (is_array($extrafields->attributes[$object->table_element]['computed']) && count($extrafields->attributes[$object->table_element]['computed']) > 0) { +if (isset($extrafields->attributes[$object->table_element]['computed']) && is_array($extrafields->attributes[$object->table_element]['computed']) && count($extrafields->attributes[$object->table_element]['computed']) > 0) { foreach ($extrafields->attributes[$object->table_element]['computed'] as $key => $val) { if (preg_match('/\$object/', $val)) { $needToFetchEachLine++; // There is at least one compute field that use $object @@ -572,6 +612,7 @@ if (is_array($extrafields->attributes[$object->table_element]['computed']) && co // -------------------------------------------------------------------- $i = 0; $totalarray = array(); +$totalarray['nbfield'] = 0; while ($i < ($limit ? min($num, $limit) : $num)) { $obj = $db->fetch_object($resql); if (empty($obj)) { @@ -597,17 +638,16 @@ while ($i < ($limit ? min($num, $limit) : $num)) { $cssforfield .= ($cssforfield ? ' ' : '').'nowrap'; } - if (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price')) && $key != 'status' && empty($val['arrayofkeyval'])) { + if (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price')) && !in_array($key, array('rowid', 'status')) && empty($val['arrayofkeyval'])) { $cssforfield .= ($cssforfield ? ' ' : '').'right'; } - if (in_array($key, array('fk_soc', 'fk_user', 'fk_warehouse'))) { - $cssforfield = 'tdoverflowmax100'; - } if (!empty($arrayfields['t.'.$key]['checked'])) { print ''; if ($key == 'status') { print $object->getLibStatut(5); + } elseif ($key == 'rowid') { + print $object->showOutputField($val, $key, $object->id, ''); } else { print $object->showOutputField($val, $key, $object->$key, ''); } diff --git a/htdocs/bom/bom_note.php b/htdocs/bom/bom_note.php index 539eb654751..f456e7ddf98 100644 --- a/htdocs/bom/bom_note.php +++ b/htdocs/bom/bom_note.php @@ -70,7 +70,13 @@ restrictedArea($user, 'bom', $object->id, 'bom_bom', '', '', 'rowid', $isdraft); * Actions */ -include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once +$reshook = $hookmanager->executeHooks('doActions', array(), $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) { + setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); +} +if (empty($reshook)) { + include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once +} /* diff --git a/htdocs/bom/class/bom.class.php b/htdocs/bom/class/bom.class.php index 0fe08bb1a4a..3996b5e49bd 100644 --- a/htdocs/bom/class/bom.class.php +++ b/htdocs/bom/class/bom.class.php @@ -97,23 +97,23 @@ class BOM extends CommonObject 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>1, 'visible'=>-1, 'position'=>1, 'notnull'=>1, 'index'=>1, 'comment'=>"Id",), 'entity' => array('type'=>'integer', 'label'=>'Entity', 'enabled'=>1, 'visible'=>0, 'notnull'=> 1, 'default'=>1, 'index'=>1, 'position'=>5), 'ref' => array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>1, 'noteditable'=>1, 'visible'=>4, 'position'=>10, 'notnull'=>1, 'default'=>'(PROV)', 'index'=>1, 'searchall'=>1, 'comment'=>"Reference of BOM", 'showoncombobox'=>'1',), - 'label' => array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>1, 'visible'=>1, 'position'=>30, 'notnull'=>1, 'searchall'=>1, 'showoncombobox'=>'2', 'autofocusoncreate'=>1), + 'label' => array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>1, 'visible'=>1, 'position'=>30, 'notnull'=>1, 'searchall'=>1, 'showoncombobox'=>'2', 'autofocusoncreate'=>1, 'css'=>'maxwidth300', 'csslist'=>'tdoverflowmax200'), 'bomtype' => array('type'=>'integer', 'label'=>'Type', 'enabled'=>1, 'visible'=>1, 'position'=>33, 'notnull'=>1, 'default'=>'0', 'arrayofkeyval'=>array(0=>'Manufacturing', 1=>'Disassemble'), 'css'=>'minwidth150', 'csslist'=>'minwidth150 center'), //'bomtype' => array('type'=>'integer', 'label'=>'Type', 'enabled'=>1, 'visible'=>-1, 'position'=>32, 'notnull'=>1, 'default'=>'0', 'arrayofkeyval'=>array(0=>'Manufacturing')), - 'fk_product' => array('type'=>'integer:Product:product/class/product.class.php:1:(finished IS NULL or finished <> 0)', 'label'=>'Product', 'picto'=>'product', 'enabled'=>1, 'visible'=>1, 'position'=>35, 'notnull'=>1, 'index'=>1, 'help'=>'ProductBOMHelp', 'css'=>'maxwidth500'), + 'fk_product' => array('type'=>'integer:Product:product/class/product.class.php:1:(finished IS NULL or finished <> 0)', 'label'=>'Product', 'picto'=>'product', 'enabled'=>1, 'visible'=>1, 'position'=>35, 'notnull'=>1, 'index'=>1, 'help'=>'ProductBOMHelp', 'css'=>'maxwidth500', 'csslist'=>'tdoverflowmax100'), 'description' => array('type'=>'text', 'label'=>'Description', 'enabled'=>1, 'visible'=>-1, 'position'=>60, 'notnull'=>-1,), 'qty' => array('type'=>'real', 'label'=>'Quantity', 'enabled'=>1, 'visible'=>1, 'default'=>1, 'position'=>55, 'notnull'=>1, 'isameasure'=>'1', 'css'=>'maxwidth75imp'), //'efficiency' => array('type'=>'real', 'label'=>'ManufacturingEfficiency', 'enabled'=>1, 'visible'=>-1, 'default'=>1, 'position'=>100, 'notnull'=>0, 'css'=>'maxwidth50imp', 'help'=>'ValueOfMeansLossForProductProduced'), 'duration' => array('type'=>'duration', 'label'=>'EstimatedDuration', 'enabled'=>1, 'visible'=>-1, 'position'=>101, 'notnull'=>-1, 'css'=>'maxwidth50imp', 'help'=>'EstimatedDurationDesc'), - 'fk_warehouse' => array('type'=>'integer:Entrepot:product/stock/class/entrepot.class.php:0', 'label'=>'WarehouseForProduction', 'picto'=>'stock', 'enabled'=>1, 'visible'=>-1, 'position'=>102, 'css'=>'maxwidth500'), + 'fk_warehouse' => array('type'=>'integer:Entrepot:product/stock/class/entrepot.class.php:0', 'label'=>'WarehouseForProduction', 'picto'=>'stock', 'enabled'=>1, 'visible'=>-1, 'position'=>102, 'css'=>'maxwidth500', 'csslist'=>'tdoverflowmax100'), 'note_public' => array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>1, 'visible'=>-2, 'position'=>161, 'notnull'=>-1,), 'note_private' => array('type'=>'html', 'label'=>'NotePrivate', 'enabled'=>1, 'visible'=>-2, 'position'=>162, 'notnull'=>-1,), 'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>1, 'visible'=>-2, 'position'=>300, 'notnull'=>1,), 'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>1, 'visible'=>-2, 'position'=>501, 'notnull'=>1,), 'date_valid' => array('type'=>'datetime', 'label'=>'DateValidation', 'enabled'=>1, 'visible'=>-2, 'position'=>502, 'notnull'=>0,), - 'fk_user_creat' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserCreation', 'picto'=>'user', 'enabled'=>1, 'visible'=>-2, 'position'=>510, 'notnull'=>1, 'foreignkey'=>'user.rowid',), - 'fk_user_modif' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserModif', 'picto'=>'user', 'enabled'=>1, 'visible'=>-2, 'position'=>511, 'notnull'=>-1,), - 'fk_user_valid' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserValidation', 'picto'=>'user', 'enabled'=>1, 'visible'=>-2, 'position'=>512, 'notnull'=>0,), + 'fk_user_creat' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserCreation', 'picto'=>'user', 'enabled'=>1, 'visible'=>-2, 'position'=>510, 'notnull'=>1, 'foreignkey'=>'user.rowid', 'csslist'=>'tdoverflowmax100'), + 'fk_user_modif' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserModif', 'picto'=>'user', 'enabled'=>1, 'visible'=>-2, 'position'=>511, 'notnull'=>-1, 'csslist'=>'tdoverflowmax100'), + 'fk_user_valid' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserValidation', 'picto'=>'user', 'enabled'=>1, 'visible'=>-2, 'position'=>512, 'notnull'=>0, 'csslist'=>'tdoverflowmax100'), 'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>1, 'visible'=>-2, 'position'=>1000, 'notnull'=>-1,), 'model_pdf' =>array('type'=>'varchar(255)', 'label'=>'Model pdf', 'enabled'=>1, 'visible'=>0, 'position'=>1010), 'status' => array('type'=>'integer', 'label'=>'Status', 'enabled'=>1, 'visible'=>2, 'position'=>1000, 'notnull'=>1, 'default'=>0, 'index'=>1, 'arrayofkeyval'=>array(0=>'Draft', 1=>'Enabled', 9=>'Disabled')), @@ -786,6 +786,9 @@ class BOM extends CommonObject } $label .= '
'; $label .= ''.$langs->trans('Ref').': '.$this->ref; + if (isset($this->label)) { + $label .= '
'.$langs->trans('Label').': '.$this->label; + } $url = DOL_URL_ROOT.'/bom/bom_card.php?id='.$this->id; diff --git a/htdocs/categories/card.php b/htdocs/categories/card.php index 734f2e89506..141e061ac20 100644 --- a/htdocs/categories/card.php +++ b/htdocs/categories/card.php @@ -1,6 +1,6 @@ - * Copyright (C) 2006-2017 Laurent Destailleur + * Copyright (C) 2006-2021 Laurent Destailleur * Copyright (C) 2005-2014 Regis Houssin * Copyright (C) 2007 Patrick Raguin * Copyright (C) 2013 Florian Henry @@ -257,6 +257,7 @@ if ($user->rights->categorie->creer) { // Parent category print ''.$langs->trans("AddIn").''; + print img_picto($langs->trans("ParentCategory"), 'category', 'class="pictofixedwidth"'); print $form->select_all_categories($type, $catorigin, 'parent'); print ajax_combobox('parent'); print ''; diff --git a/htdocs/comm/action/index.php b/htdocs/comm/action/index.php index 9b76329d8da..c87af9558e8 100644 --- a/htdocs/comm/action/index.php +++ b/htdocs/comm/action/index.php @@ -138,16 +138,18 @@ if (empty($action) && !GETPOSTISSET('action')) { if ($action == 'default') { // When action is default, we want a calendar view and not the list $action = (($defaultview != 'show_list') ? $defaultview : 'show_month'); } -if (GETPOST('viewcal', 'restricthtml') && GETPOST('action', 'alpha') != 'show_day' && GETPOST('action', 'alpha') != 'show_week') { +if (GETPOST('viewcal', 'int') && GETPOST('action', 'alpha') != 'show_day' && GETPOST('action', 'alpha') != 'show_week') { $action = 'show_month'; $day = ''; } // View by month -if (GETPOST('viewweek', 'restricthtml') || GETPOST('action', 'alpha') == 'show_week') { +if (GETPOST('viewweek', 'int') || GETPOST('action', 'alpha') == 'show_week') { $action = 'show_week'; $week = ($week ? $week : date("W")); $day = ($day ? $day : date("d")); } // View by week -if (GETPOST('viewday', 'restricthtml') || GETPOST('action', 'alpha') == 'show_day') { +if (GETPOST('viewday', 'int') || GETPOST('action', 'alpha') == 'show_day') { $action = 'show_day'; $day = ($day ? $day : date("d")); } // View by day +$object = new ActionComm($db); + // Load translation files required by the page $langs->loadLangs(array('agenda', 'other', 'commercial')); @@ -197,6 +199,7 @@ if (GETPOST("viewperuser", 'alpha') || $action == 'show_peruser') { exit; } +/* if ($action == 'delete_action') { $event = new ActionComm($db); $event->fetch($actionid); @@ -206,6 +209,7 @@ if ($action == 'delete_action') { $result = $event->delete(); } +*/ /* @@ -484,25 +488,25 @@ $viewmode .= img_picto($langs->trans("List"), 'object_list', 'class="pictoaction //$viewmode .= ''; $viewmode .= ''.$langs->trans("ViewList").''; -$viewmode .= ''; +$viewmode .= ''; //$viewmode .= ''; $viewmode .= img_picto($langs->trans("ViewCal"), 'object_calendarmonth', 'class="pictoactionview block"'); //$viewmode .= ''; $viewmode .= ''.$langs->trans("ViewCal").''; -$viewmode .= ''; +$viewmode .= ''; //$viewmode .= ''; $viewmode .= img_picto($langs->trans("ViewWeek"), 'object_calendarweek', 'class="pictoactionview block"'); //$viewmode .= ''; $viewmode .= ''.$langs->trans("ViewWeek").''; -$viewmode .= ''; +$viewmode .= ''; //$viewmode .= ''; $viewmode .= img_picto($langs->trans("ViewDay"), 'object_calendarday', 'class="pictoactionview block"'); //$viewmode .= ''; $viewmode .= ''.$langs->trans("ViewDay").''; -$viewmode .= ''; +$viewmode .= ''; //$viewmode .= ''; $viewmode .= img_picto($langs->trans("ViewPerUser"), 'object_calendarperuser', 'class="pictoactionview block"'); //$viewmode .= ''; @@ -939,6 +943,7 @@ if ($showbirthday) { } } +// LEAVE CALENDAR $sql = "SELECT u.rowid as uid, u.lastname, u.firstname, u.statut, x.rowid, x.date_debut as date_start, x.date_fin as date_end, x.halfday, x.statut as status"; $sql .= " FROM ".MAIN_DB_PREFIX."holiday as x, ".MAIN_DB_PREFIX."user as u"; $sql .= " WHERE u.rowid = x.fk_user"; @@ -1877,7 +1882,8 @@ function show_day_events($db, $day, $month, $year, $monthshown, $style, &$eventa $cacheusers[$tmpid] = $newuser; } - $listofusertoshow .= '
'.$cacheusers[$tmpid]->getNomUrl(-3, '', 0, 0, 0, 0, '', 'paddingright valigntextbottom'); + $listofusertoshow = ''; + $listofusertoshow .= '
'.$cacheusers[$tmpid]->getNomUrl(-1, '', 0, 0, 0, 0, '', 'paddingright valigntextbottom'); print $listofusertoshow; } else { // Other calendar // Picto diff --git a/htdocs/comm/mailing/card.php b/htdocs/comm/mailing/card.php index d801b4429c7..e03d13c29e8 100644 --- a/htdocs/comm/mailing/card.php +++ b/htdocs/comm/mailing/card.php @@ -577,7 +577,6 @@ if (empty($reshook)) { if (!$isupload) { $mesgs = array(); - $object->sujet = (string) GETPOST("sujet"); $object->body = (string) GETPOST("bodyemail", 'restricthtml'); $object->bgcolor = (string) GETPOST("bgcolor"); @@ -744,7 +743,7 @@ if ($action == 'create') { print '
'; // wysiwyg editor require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; - $doleditor = new DolEditor('bodyemail', GETPOST('bodyemail', 'restricthtml'), '', 600, 'dolibarr_mailings', '', true, true, $conf->global->FCKEDITOR_ENABLE_MAILING, 20, '90%'); + $doleditor = new DolEditor('bodyemail', GETPOST('bodyemail', 'restricthtmlallowunvalid'), '', 600, 'dolibarr_mailings', '', true, true, $conf->global->FCKEDITOR_ENABLE_MAILING, 20, '90%'); $doleditor->Create(); print '
'; diff --git a/htdocs/comm/mailing/class/mailing.class.php b/htdocs/comm/mailing/class/mailing.class.php index 04d2f7c17d8..d281fcb1a3a 100644 --- a/htdocs/comm/mailing/class/mailing.class.php +++ b/htdocs/comm/mailing/class/mailing.class.php @@ -208,6 +208,12 @@ class Mailing extends CommonObject { global $conf, $langs; + // Check properties + if ($this->body === 'InvalidHTMLString') { + $this->error = 'InvalidHTMLString'; + return -1; + } + $this->db->begin(); $this->title = trim($this->title); @@ -257,6 +263,12 @@ class Mailing extends CommonObject */ public function update($user) { + // Check properties + if ($this->body === 'InvalidHTMLString') { + $this->error = 'InvalidHTMLString'; + return -1; + } + $sql = "UPDATE ".MAIN_DB_PREFIX."mailing "; $sql .= " SET titre = '".$this->db->escape($this->title)."'"; $sql .= ", sujet = '".$this->db->escape($this->sujet)."'"; diff --git a/htdocs/comm/propal/card.php b/htdocs/comm/propal/card.php index 8b5f757ad0e..3c0d8dd9a28 100644 --- a/htdocs/comm/propal/card.php +++ b/htdocs/comm/propal/card.php @@ -843,16 +843,16 @@ if (empty($reshook)) { } } - if ($prod_entry_mode == 'free' && empty($idprod) && GETPOST('type') < 0) { + if ($prod_entry_mode == 'free' && (empty($idprod) || $idprod < 0) && GETPOST('type') < 0) { setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Type")), null, 'errors'); $error++; } - if ($prod_entry_mode == 'free' && empty($idprod) && $price_ht === '' && $price_ht_devise === '') { // Unit price can be 0 but not ''. Also price can be negative for proposal. + if ($prod_entry_mode == 'free' && (empty($idprod) || $idprod < 0) && $price_ht === '' && $price_ht_devise === '') { // Unit price can be 0 but not ''. Also price can be negative for proposal. setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("UnitPriceHT")), null, 'errors'); $error++; } - if ($prod_entry_mode == 'free' && empty($idprod) && empty($product_desc)) { + if ($prod_entry_mode == 'free' && (empty($idprod) || $idprod < 0) && empty($product_desc)) { setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Description")), null, 'errors'); $error++; } @@ -871,7 +871,7 @@ if (empty($reshook)) { } } - if (!$error && ($qty >= 0) && (!empty($product_desc) || !empty($idprod))) { + if (!$error && ($qty >= 0) && (!empty($product_desc) || (!empty($idprod) && $idprod > 0))) { $pu_ht = 0; $pu_ttc = 0; $price_min = 0; @@ -885,7 +885,7 @@ if (empty($reshook)) { // Ecrase $desc par celui du produit // Ecrase $tva_tx par celui du produit // Replaces $fk_unit with the product unit - if (!empty($idprod)) { + if (!empty($idprod) && $idprod > 0) { $prod = new Product($db); $prod->fetch($idprod); @@ -2450,10 +2450,11 @@ if ($action == 'create') { // Show object lines $result = $object->getLinesArray(); - print ' + print ' + '; @@ -2594,9 +2595,14 @@ if ($action == 'create') { } // Close as accepted/refused - if ($object->statut == Propal::STATUS_VALIDATED && $usercanclose) { - print '
global->MAIN_JUMP_TAG) ? '' : '#close').'"'; - print '>'.$langs->trans('SetAcceptedRefused').''; + if ($object->statut == Propal::STATUS_VALIDATED) { + if ($usercanclose) { + print 'global->MAIN_JUMP_TAG) ? '' : '#close').'"'; + print '>'.$langs->trans('SetAcceptedRefused').''; + } else { + print ''.$langs->trans('SetAcceptedRefused').''; + } } // Clone diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index 940e0156c7e..3bc30d7d729 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -605,7 +605,7 @@ class Propal extends CommonObject $this->db->begin(); $product_type = $type; - if (!empty($fk_product)) { + if (!empty($fk_product) && $fk_product > 0) { $product = new Product($this->db); $result = $product->fetch($fk_product); $product_type = $product->type; diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php index d99c8b81b2c..2d4eb5fb164 100644 --- a/htdocs/comm/propal/list.php +++ b/htdocs/comm/propal/list.php @@ -220,17 +220,16 @@ $permissiontoread = $user->rights->propal->lire; $permissiontoadd = $user->rights->propal->creer; $permissiontodelete = $user->rights->propal->supprimer; if (!empty($conf->global->MAIN_USE_ADVANCED_PERMS)) { - $permissiontovalidate = $user->rights->propale->propal_advance->validate; - $permissiontoclose = $user->rights->propale->propal_advance->close; - $permissiontosendbymail = $user->rights->propale->propal_advance->send; + $permissiontovalidate = $user->rights->propal->propal_advance->validate; + $permissiontoclose = $user->rights->propal->propal_advance->close; + $permissiontosendbymail = $user->rights->propal->propal_advance->send; } else { $permissiontovalidate = $user->rights->propal->creer; $permissiontoclose = $user->rights->propal->creer; + $permissiontosendbymail = $user->rights->propal->lire; } - - /* * Actions */ diff --git a/htdocs/comm/propal/note.php b/htdocs/comm/propal/note.php index 6dd62a9990d..53a3a37c84d 100644 --- a/htdocs/comm/propal/note.php +++ b/htdocs/comm/propal/note.php @@ -52,6 +52,10 @@ if ($user->socid > 0) { $socid = $user->socid; $object->id = $user->socid; } + +// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context +$hookmanager->initHooks(array('propalnote')); + restrictedArea($user, 'propal', $object->id, 'propal'); @@ -61,7 +65,13 @@ restrictedArea($user, 'propal', $object->id, 'propal'); $permissionnote = $user->rights->propale->creer; // Used by the include of actions_setnotes.inc.php -include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not includ_once +$reshook = $hookmanager->executeHooks('doActions', array(), $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) { + setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); +} +if (empty($reshook)) { + include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once +} diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php index 6d0badf6380..8420a5e7f87 100644 --- a/htdocs/commande/card.php +++ b/htdocs/commande/card.php @@ -91,6 +91,10 @@ $hideref = (GETPOST('hideref', 'int') ? GETPOST('hideref', 'int') : (!empty($con if (!empty($user->socid)) { $socid = $user->socid; } + +// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context +$hookmanager->initHooks(array('ordercard', 'globalcard')); + $result = restrictedArea($user, 'commande', $id); $object = new Commande($db); @@ -102,9 +106,6 @@ $extrafields->fetch_name_optionals_label($object->table_element); // Load object include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once -// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context -$hookmanager->initHooks(array('ordercard', 'globalcard')); - $usercanread = $user->rights->commande->lire; $usercancreate = $user->rights->commande->creer; $usercandelete = $user->rights->commande->supprimer; @@ -645,15 +646,15 @@ if (empty($reshook)) { } } - if (empty($idprod) && ($price_ht < 0) && ($qty < 0)) { + if ((empty($idprod) || $idprod < 0) && ($price_ht < 0) && ($qty < 0)) { setEventMessages($langs->trans('ErrorBothFieldCantBeNegative', $langs->transnoentitiesnoconv('UnitPriceHT'), $langs->transnoentitiesnoconv('Qty')), null, 'errors'); $error++; } - if ($prod_entry_mode == 'free' && empty($idprod) && GETPOST('type') < 0) { + if ($prod_entry_mode == 'free' && (empty($idprod) || $idprod < 0) && GETPOST('type') < 0) { setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Type')), null, 'errors'); $error++; } - if ($prod_entry_mode == 'free' && empty($idprod) && $price_ht == '' && $price_ht_devise == '') { // Unit price can be 0 but not ''. Also price can be negative for order. + if ($prod_entry_mode == 'free' && (empty($idprod) || $idprod < 0) && $price_ht == '' && $price_ht_devise == '') { // Unit price can be 0 but not ''. Also price can be negative for order. setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("UnitPriceHT")), null, 'errors'); $error++; } @@ -661,7 +662,7 @@ if (empty($reshook)) { setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Qty')), null, 'errors'); $error++; } - if ($prod_entry_mode == 'free' && empty($idprod) && empty($product_desc)) { + if ($prod_entry_mode == 'free' && (empty($idprod) || $idprod < 0) && empty($product_desc)) { setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Description')), null, 'errors'); $error++; } @@ -680,7 +681,7 @@ if (empty($reshook)) { } } - if (!$error && ($qty >= 0) && (!empty($product_desc) || !empty($idprod))) { + if (!$error && ($qty >= 0) && (!empty($product_desc) || (!empty($idprod) && $idprod > 0))) { // Clean parameters $date_start = dol_mktime(GETPOST('date_start'.$predef.'hour'), GETPOST('date_start'.$predef.'min'), GETPOST('date_start'.$predef.'sec'), GETPOST('date_start'.$predef.'month'), GETPOST('date_start'.$predef.'day'), GETPOST('date_start'.$predef.'year')); $date_end = dol_mktime(GETPOST('date_end'.$predef.'hour'), GETPOST('date_end'.$predef.'min'), GETPOST('date_end'.$predef.'sec'), GETPOST('date_end'.$predef.'month'), GETPOST('date_end'.$predef.'day'), GETPOST('date_end'.$predef.'year')); @@ -690,7 +691,7 @@ if (empty($reshook)) { // Ecrase $desc par celui du produit // Ecrase $tva_tx par celui du produit // Ecrase $base_price_type par celui du produit - if (!empty($idprod)) { + if (!empty($idprod) && $idprod > 0) { $prod = new Product($db); $prod->fetch($idprod); @@ -2417,10 +2418,11 @@ if ($action == 'create' && $usercancreate) { */ $result = $object->getLinesArray(); - print ' + print ' + '; if (!empty($conf->use_javascript_ajax) && $object->statut == Commande::STATUS_DRAFT) { diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index aa9897f9dc7..333d4e2ded6 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -1518,7 +1518,7 @@ class Commande extends CommonOrder $this->db->begin(); $product_type = $type; - if (!empty($fk_product)) { + if (!empty($fk_product) && $fk_product > 0) { $product = new Product($this->db); $result = $product->fetch($fk_product); $product_type = $product->type; @@ -4389,7 +4389,7 @@ class OrderLine extends CommonOrderLine $sql .= " '".price2num($this->localtax2_tx)."',"; $sql .= " '".$this->db->escape($this->localtax1_type)."',"; $sql .= " '".$this->db->escape($this->localtax2_type)."',"; - $sql .= ' '.(!empty($this->fk_product) ? $this->fk_product : "null").','; + $sql .= ' '.((!empty($this->fk_product) && $this->fk_product > 0) ? $this->fk_product : "null").','; $sql .= " '".$this->db->escape($this->product_type)."',"; $sql .= " '".price2num($this->remise_percent)."',"; $sql .= " ".(price2num($this->subprice) !== '' ?price2num($this->subprice) : "null").","; diff --git a/htdocs/commande/list.php b/htdocs/commande/list.php index 73413d1070f..77eedcd3e34 100644 --- a/htdocs/commande/list.php +++ b/htdocs/commande/list.php @@ -494,7 +494,7 @@ if ($search_billed != '' && $search_billed >= 0) { $sql .= ' AND c.facture = '.((int) $search_billed); } if ($search_status <> '') { - if ($search_status < 4 && $search_status > -3) { + if ($search_status < 4 && $search_status > -4) { if ($search_status == 1 && empty($conf->expedition->enabled)) { $sql .= ' AND c.fk_statut IN (1,2)'; // If module expedition disabled, we include order with status 'sending in process' into 'validated' } else { @@ -513,6 +513,11 @@ if ($search_status <> '') { //$sql.= ' AND c.facture = 0'; // invoice not created $sql .= ' AND ((c.fk_statut IN (1,2)) OR (c.fk_statut = 3 AND c.facture = 0))'; // validated, in process or closed but not billed } + + + if ($search_status == -4) { // "validate and in progress" + $sql .= ' AND (c.fk_statut IN (1,2))'; // validated, in process + } } if ($search_datecloture_start) { @@ -675,6 +680,9 @@ if ($resql) { if ($search_status == -3) { $title .= ' - '.$langs->trans('StatusOrderValidated').', '.(empty($conf->expedition->enabled) ? '' : $langs->trans("StatusOrderSent").', ').$langs->trans('StatusOrderToBill'); } + if ($search_status == -4) { + $title .= ' - '.$langs->trans("StatusOrderValidatedShort").'+'.$langs->trans("StatusOrderSentShort"); + } $num = $db->num_rows($resql); @@ -1236,6 +1244,7 @@ if ($resql) { Commande::STATUS_SHIPMENTONPROCESS=>$langs->trans("StatusOrderSentShort"), Commande::STATUS_CLOSED=>$langs->trans("StatusOrderDelivered"), -3=>$langs->trans("StatusOrderValidatedShort").'+'.$langs->trans("StatusOrderSentShort").'+'.$langs->trans("StatusOrderDelivered"), + -4=>$langs->trans("StatusOrderValidatedShort").'+'.$langs->trans("StatusOrderSentShort"), Commande::STATUS_CANCELED=>$langs->trans("StatusOrderCanceledShort") ); print $form->selectarray('search_status', $liststatus, $search_status, -4, 0, 0, '', 0, 0, 0, '', 'maxwidth100', 1); diff --git a/htdocs/commande/note.php b/htdocs/commande/note.php index 6872990a3ec..dbfb0bdd43c 100644 --- a/htdocs/commande/note.php +++ b/htdocs/commande/note.php @@ -45,6 +45,10 @@ $socid = 0; if ($user->socid) { $socid = $user->socid; } + +// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context +$hookmanager->initHooks(array('ordernote')); + $result = restrictedArea($user, 'commande', $id, ''); @@ -61,7 +65,13 @@ $permissionnote = $user->rights->commande->creer; // Used by the include of acti * Actions */ -include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not includ_once +$reshook = $hookmanager->executeHooks('doActions', array(), $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) { + setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); +} +if (empty($reshook)) { + include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once +} /* diff --git a/htdocs/compta/bank/card.php b/htdocs/compta/bank/card.php index 7f1c830d45b..ea9f7799849 100644 --- a/htdocs/compta/bank/card.php +++ b/htdocs/compta/bank/card.php @@ -399,7 +399,8 @@ if ($action == 'create') { // State print ''.$langs->trans('State').''; if ($selectedcode) { - $formcompany->select_departement(GETPOSTISSET("account_state_id") ? GETPOST("account_state_id") : '', $selectedcode, 'account_state_id'); + print img_picto('', 'state', 'class="pictofixedwidth"'); + print $formcompany->select_state(GETPOSTISSET("account_state_id") ? GETPOST("account_state_id") : '', $selectedcode, 'account_state_id'); } else { print $countrynotdefined; } @@ -407,7 +408,10 @@ if ($action == 'create') { // Web print ''.$langs->trans("Web").''; - print ''; + print ''; + print img_picto('', 'globe', 'class="pictofixedwidth"'); + print ''; + print ''; // Tags-Categories if ($conf->categorie->enabled) { @@ -865,6 +869,7 @@ if ($action == 'create') { if (!$selectedcode) { $selectedcode = $conf->currency; } + print img_picto('', 'multicurrency', 'class="pictofixedwidth"'); print $form->selectCurrency((GETPOSTISSET("account_currency_code") ? GETPOST("account_currency_code") : $selectedcode), 'account_currency_code'); //print $langs->trans("Currency".$conf->currency); //print ''; @@ -897,6 +902,7 @@ if ($action == 'create') { // State print ''.$langs->trans('State').''; if ($selectedcode) { + print img_picto('', 'state', 'class="pictofixedwidth"'); print $formcompany->select_state(GETPOSTISSET("account_state_id") ? GETPOST("account_state_id") : $object->state_id, $selectedcode, 'account_state_id'); } else { print $countrynotdefined; @@ -925,7 +931,9 @@ if ($action == 'create') { // Web print ''.$langs->trans("Web").''; - print 'url).'">'; + print ''; + print img_picto('', 'globe', 'class="pictofixedwidth"'); + print 'url).'">'; print ''; // Tags-Categories diff --git a/htdocs/compta/bank/class/account.class.php b/htdocs/compta/bank/class/account.class.php index 46d1bb93684..8619ff25dae 100644 --- a/htdocs/compta/bank/class/account.class.php +++ b/htdocs/compta/bank/class/account.class.php @@ -829,8 +829,8 @@ class Account extends CommonObject $sql .= ",min_desired = ".($this->min_desired != '' ? price2num($this->min_desired) : "null"); $sql .= ",comment = '".$this->db->escape($this->comment)."'"; - $sql .= ",state_id = ".($this->state_id > 0 ? $this->state_id : "null"); - $sql .= ",fk_pays = ".($this->country_id > 0 ? $this->country_id : "null"); + $sql .= ",state_id = ".($this->state_id > 0 ? ((int) $this->state_id) : "null"); + $sql .= ",fk_pays = ".($this->country_id > 0 ? ((int) $this->country_id) : "null"); $sql .= ",ics = '".$this->db->escape($this->ics)."'"; $sql .= ",ics_transfer = '".$this->db->escape($this->ics_transfer)."'"; diff --git a/htdocs/compta/bank/list.php b/htdocs/compta/bank/list.php index 67599ffff0e..c1b446a9dd0 100644 --- a/htdocs/compta/bank/list.php +++ b/htdocs/compta/bank/list.php @@ -564,7 +564,7 @@ foreach ($accounts as $key => $type) { // Account number if (!empty($arrayfields['b.account_number']['checked'])) { - print ''; + print ''; if (!empty($conf->accounting->enabled) && !empty($objecttmp->account_number)) { $accountingaccount = new AccountingAccount($db); $accountingaccount->fetch('', $objecttmp->account_number, 1); diff --git a/htdocs/compta/bank/treso.php b/htdocs/compta/bank/treso.php index d9b54ad1c3d..98a51947c0e 100644 --- a/htdocs/compta/bank/treso.php +++ b/htdocs/compta/bank/treso.php @@ -98,44 +98,6 @@ if (GETPOST("account") || GETPOST("ref")) { print dol_get_fiche_end(); - print '
'; - - $solde = $object->solde(0); - if ($conf->global->MULTICOMPANY_INVOICE_SHARING_ENABLED) { - $colspan = 6; - } else { - $colspan = 5; - } - - // Show next coming entries - print '
'; - print ''; - - // Ligne de titre tableau des ecritures - print ''; - print ''; - print ''; - if ($conf->global->MULTICOMPANY_INVOICE_SHARING_ENABLED) { - print ''; - } - print ''; - print ''; - print ''; - print ''; - print ''; - - // Current balance - print ''; - print ''; - print ''; - print ''; - - - print ''; - print ''; - print ''; - print ''; - // Remainder to pay in future $sqls = array(); @@ -183,10 +145,12 @@ if (GETPOST("account") || GETPOST("ref")) { $error = 0; $tab_sqlobjOrder = array(); $tab_sqlobj = array(); + $nbtotalofrecords = 0; foreach ($sqls as $sql) { $resql = $db->query($sql); if ($resql) { + $nbtotalofrecords += $db->num_rows($resql); while ($sqlobj = $db->fetch_object($resql)) { $tmpobj = new stdClass(); $tmpobj->family = $sqlobj->family; @@ -194,7 +158,7 @@ if (GETPOST("account") || GETPOST("ref")) { $tmpobj->ref = $sqlobj->ref; $tmpobj->total_ttc = $sqlobj->total_ttc; $tmpobj->type = $sqlobj->type; - $tmpobj->dlt = $sqlobj->dlr; + $tmpobj->dlr = $db->jdate($sqlobj->dlr); $tmpobj->socid = $sqlobj->socid; $tmpobj->name = $sqlobj->name; $tmpobj->fournisseur = $sqlobj->fournisseur; @@ -208,6 +172,48 @@ if (GETPOST("account") || GETPOST("ref")) { } } + $param = ''; + $sortfield = ''; + $sortorder = ''; + $massactionbutton = ''; + $num = 0; + $picto = ''; + $morehtml = ''; + $limit = 0; + + print_barre_liste($langs->trans("RemainderToPay"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, $picto, 0, $morehtml, '', $limit, 0, 0, 1); + + + $solde = $object->solde(0); + if ($conf->global->MULTICOMPANY_INVOICE_SHARING_ENABLED) { + $colspan = 6; + } else { + $colspan = 5; + } + + // Show next coming entries + print '
'; + print '
'.$langs->trans("DateDue").''.$langs->trans("Description").''.$langs->trans("Entity").''.$langs->trans("ThirdParty").''.$langs->trans("Debit").''.$langs->trans("Credit").''.$langs->trans("BankBalance").'
'.$langs->trans("CurrentBalance").''.price($solde).'
'.$langs->trans("RemainderToPay").' 
'; + + // Ligne de titre tableau des ecritures + print ''; + print ''; + print ''; + if ($conf->global->MULTICOMPANY_INVOICE_SHARING_ENABLED) { + print ''; + } + print ''; + print ''; + print ''; + print ''; + print ''; + + // Current balance + print ''; + print ''; + print ''; + print ''; + // Sort array if (!$error) { array_multisort($tab_sqlobjOrder, $tab_sqlobj); @@ -220,60 +226,60 @@ if (GETPOST("account") || GETPOST("ref")) { $refcomp = ''; $totalpayment = ''; - $obj = array_shift($tab_sqlobj); + $tmpobj = array_shift($tab_sqlobj); - if ($obj->family == 'invoice_supplier') { + if ($tmpobj->family == 'invoice_supplier') { $showline = 1; // Uncomment this line to avoid to count suppliers credit note (ff.type = 2) - //$showline=(($obj->total_ttc < 0 && $obj->type != 2) || ($obj->total_ttc > 0 && $obj->type == 2)) + //$showline=(($tmpobj->total_ttc < 0 && $tmpobj->type != 2) || ($tmpobj->total_ttc > 0 && $tmpobj->type == 2)) if ($showline) { - $ref = $obj->ref; + $ref = $tmpobj->ref; $facturefournstatic->ref = $ref; - $facturefournstatic->id = $obj->objid; - $facturefournstatic->type = $obj->type; + $facturefournstatic->id = $tmpobj->objid; + $facturefournstatic->type = $tmpobj->type; $ref = $facturefournstatic->getNomUrl(1, ''); - $societestatic->id = $obj->socid; - $societestatic->name = $obj->name; + $societestatic->id = $tmpobj->socid; + $societestatic->name = $tmpobj->name; $refcomp = $societestatic->getNomUrl(1, '', 24); $totalpayment = -1 * $facturefournstatic->getSommePaiement(); // Payment already done } } - if ($obj->family == 'invoice') { - $facturestatic->ref = $obj->ref; - $facturestatic->id = $obj->objid; - $facturestatic->type = $obj->type; + if ($tmpobj->family == 'invoice') { + $facturestatic->ref = $tmpobj->ref; + $facturestatic->id = $tmpobj->objid; + $facturestatic->type = $tmpobj->type; $ref = $facturestatic->getNomUrl(1, ''); - $societestatic->id = $obj->socid; - $societestatic->name = $obj->name; + $societestatic->id = $tmpobj->socid; + $societestatic->name = $tmpobj->name; $refcomp = $societestatic->getNomUrl(1, '', 24); $totalpayment = $facturestatic->getSommePaiement(); // Payment already done $totalpayment += $facturestatic->getSumDepositsUsed(); $totalpayment += $facturestatic->getSumCreditNotesUsed(); } - if ($obj->family == 'social_contribution') { - $socialcontribstatic->ref = $obj->ref; - $socialcontribstatic->id = $obj->objid; - $socialcontribstatic->label = $obj->type; + if ($tmpobj->family == 'social_contribution') { + $socialcontribstatic->ref = $tmpobj->ref; + $socialcontribstatic->id = $tmpobj->objid; + $socialcontribstatic->label = $tmpobj->type; $ref = $socialcontribstatic->getNomUrl(1, 24); $totalpayment = -1 * $socialcontribstatic->getSommePaiement(); // Payment already done } - $parameters = array('obj' => $obj, 'ref' => $ref, 'refcomp' => $refcomp, 'totalpayment' => $totalpayment); - $reshook = $hookmanager->executeHooks('moreFamily', $parameters, $object, $action); // Note that $action and $object may have been modified by hook + $parameters = array('obj' => $tmpobj, 'ref' => $ref, 'refcomp' => $refcomp, 'totalpayment' => $totalpayment); + $reshook = $hookmanager->executeHooks('moreFamily', $parameters, $tmpobject, $action); // Note that $action and $tmpobject may have been modified by hook if (empty($reshook)) { $ref = isset($hookmanager->resArray['ref']) ? $hookmanager->resArray['ref'] : $ref; $refcomp = isset($hookmanager->resArray['refcomp']) ? $hookmanager->resArray['refcomp'] : $refcomp; $totalpayment = isset($hookmanager->resArray['totalpayment']) ? $hookmanager->resArray['totalpayment'] : $totalpayment; } - $total_ttc = $obj->total_ttc; + $total_ttc = $tmpobj->total_ttc; if ($totalpayment) { - $total_ttc = $obj->total_ttc - $totalpayment; + $total_ttc = $tmpobj->total_ttc - $totalpayment; } $solde += $total_ttc; @@ -282,26 +288,26 @@ if (GETPOST("account") || GETPOST("ref")) { // Show line print ''; print '"; print ""; if ($conf->global->MULTICOMPANY_INVOICE_SHARING_ENABLED) { - if ($obj->family == 'invoice') { - $mc->getInfo($obj->entity); + if ($tmpobj->family == 'invoice') { + $mc->getInfo($tmpobj->entity); print ""; } else { print ""; } } print ""; - if ($obj->total_ttc < 0) { + if ($tmpobj->total_ttc < 0) { print '"; }; - if ($obj->total_ttc >= 0) { + if ($tmpobj->total_ttc >= 0) { print '"; }; print ''; diff --git a/htdocs/compta/cashcontrol/cashcontrol_list.php b/htdocs/compta/cashcontrol/cashcontrol_list.php index ec7af37940c..42e53085ea8 100644 --- a/htdocs/compta/cashcontrol/cashcontrol_list.php +++ b/htdocs/compta/cashcontrol/cashcontrol_list.php @@ -131,7 +131,7 @@ foreach ($object->fields as $key => $val) { 'checked'=>(($visible < 0) ? 0 : 1), 'enabled'=>($visible != 3 && dol_eval($val['enabled'], 1)), 'position'=>$val['position'], - 'help'=>$val['help'] + 'help'=> isset($val['help']) ? $val['help'] : '' ); } } diff --git a/htdocs/compta/facture/card-rec.php b/htdocs/compta/facture/card-rec.php index dd4042b9e34..affdd2e8991 100644 --- a/htdocs/compta/facture/card-rec.php +++ b/htdocs/compta/facture/card-rec.php @@ -447,15 +447,15 @@ if (empty($reshook)) { } } - if (empty($idprod) && ($price_ht < 0) && ($qty < 0)) { + if ((empty($idprod) || $idprod < 0) && ($price_ht < 0) && ($qty < 0)) { setEventMessages($langs->trans('ErrorBothFieldCantBeNegative', $langs->transnoentitiesnoconv('UnitPriceHT'), $langs->transnoentitiesnoconv('Qty')), null, 'errors'); $error++; } - if ($prod_entry_mode == 'free' && empty($idprod) && GETPOST('type') < 0) { + if ($prod_entry_mode == 'free' && (empty($idprod) || $idprod < 0) && GETPOST('type') < 0) { setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Type')), null, 'errors'); $error++; } - if ($prod_entry_mode == 'free' && empty($idprod) && (!($price_ht >= 0) || $price_ht == '')) { // Unit price can be 0 but not '' + if ($prod_entry_mode == 'free' && (empty($idprod) || $idprod < 0) && (!($price_ht >= 0) || $price_ht == '')) { // Unit price can be 0 but not '' setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("UnitPriceHT")), null, 'errors'); $error++; } @@ -463,7 +463,7 @@ if (empty($reshook)) { setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Qty')), null, 'errors'); $error++; } - if ($prod_entry_mode == 'free' && empty($idprod) && empty($product_desc)) { + if ($prod_entry_mode == 'free' && (empty($idprod) || $idprod < 0) && empty($product_desc)) { setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Description')), null, 'errors'); $error++; } @@ -473,7 +473,7 @@ if (empty($reshook)) { $error++; } - if (!$error && ($qty >= 0) && (!empty($product_desc) || !empty($idprod))) { + if (!$error && ($qty >= 0) && (!empty($product_desc) || (!empty($idprod) && $idprod > 0))) { $ret = $object->fetch($id); if ($ret < 0) { dol_print_error($db, $object->error); @@ -495,7 +495,7 @@ if (empty($reshook)) { // Ecrase $tva_tx par celui du produit // Ecrase $base_price_type par celui du produit // Replaces $fk_unit with the product's - if (!empty($idprod)) { + if (!empty($idprod) && $idprod > 0) { $prod = new Product($db); $prod->fetch($idprod); diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index d2c6a9bd643..699a10d3ef5 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -2000,7 +2000,7 @@ if (empty($reshook)) { } } - if (empty($idprod) && ($price_ht < 0) && ($qty < 0)) { + if ((empty($idprod) || $idprod < 0) && ($price_ht < 0) && ($qty < 0)) { setEventMessages($langs->trans('ErrorBothFieldCantBeNegative', $langs->transnoentitiesnoconv('UnitPriceHT'), $langs->transnoentitiesnoconv('Qty')), null, 'errors'); $error++; } @@ -2010,11 +2010,11 @@ if (empty($reshook)) { $error++; } } - if ($prod_entry_mode == 'free' && empty($idprod) && GETPOST('type') < 0) { + if ($prod_entry_mode == 'free' && (empty($idprod) || $idprod < 0) && GETPOST('type') < 0) { setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Type')), null, 'errors'); $error++; } - if (($prod_entry_mode == 'free' && empty($idprod) && (($price_ht < 0 && empty($conf->global->FACTURE_ENABLE_NEGATIVE_LINES)) || $price_ht == '') && $price_ht_devise == '') && $object->type != Facture::TYPE_CREDIT_NOTE) { // Unit price can be 0 but not '' + if (($prod_entry_mode == 'free' && (empty($idprod) || $idprod < 0) && (($price_ht < 0 && empty($conf->global->FACTURE_ENABLE_NEGATIVE_LINES)) || $price_ht == '') && $price_ht_devise == '') && $object->type != Facture::TYPE_CREDIT_NOTE) { // Unit price can be 0 but not '' if ($price_ht < 0 && empty($conf->global->FACTURE_ENABLE_NEGATIVE_LINES)) { $langs->load("errors"); if ($object->type == $object::TYPE_DEPOSIT) { @@ -2057,7 +2057,7 @@ if (empty($reshook)) { } } - if (!$error && ($qty >= 0) && (!empty($product_desc) || !empty($idprod))) { + if (!$error && ($qty >= 0) && (!empty($product_desc) || (!empty($idprod) && $idprod > 0))) { $ret = $object->fetch($id); if ($ret < 0) { dol_print_error($db, $object->error); @@ -2079,7 +2079,7 @@ if (empty($reshook)) { // Ecrase $tva_tx par celui du produit // Ecrase $base_price_type par celui du produit // Replaces $fk_unit with the product's - if (!empty($idprod)) { + if (!empty($idprod) && $idprod > 0) { $prod = new Product($db); $prod->fetch($idprod); @@ -5195,10 +5195,11 @@ if ($action == 'create') { } } - print ' + print ' + '; @@ -5393,7 +5394,7 @@ if ($action == 'create') { } // Create a credit note - if (($object->type == Facture::TYPE_STANDARD || $object->type == Facture::TYPE_DEPOSIT || $object->type == Facture::TYPE_PROFORMA) && $object->statut > 0 && $usercancreate) { + if (($object->type == Facture::TYPE_STANDARD || ($object->type == Facture::TYPE_DEPOSIT && empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) || $object->type == Facture::TYPE_PROFORMA) && $object->statut > 0 && $usercancreate) { if (!$objectidnext) { print ''.$langs->trans("CreateCreditNote").''; } diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 735f2877184..9cbfb33e5bd 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -3213,7 +3213,7 @@ class Facture extends CommonInvoice $this->db->begin(); $product_type = $type; - if (!empty($fk_product)) { + if (!empty($fk_product) && $fk_product > 0) { $product = new Product($this->db); $result = $product->fetch($fk_product); $product_type = $product->type; @@ -5342,7 +5342,7 @@ class FactureLigne extends CommonInvoiceLine $this->error = 'ErrorProductTypeMustBe0orMore'; return -1; } - if (!empty($this->fk_product)) { + if (!empty($this->fk_product) && $this->fk_product > 0) { // Check product exists $result = Product::isExistingObject('product', $this->fk_product); if ($result <= 0) { @@ -5377,7 +5377,7 @@ class FactureLigne extends CommonInvoiceLine $sql .= " ".price2num($this->localtax2_tx).","; $sql .= " '".$this->db->escape($this->localtax1_type)."',"; $sql .= " '".$this->db->escape($this->localtax2_type)."',"; - $sql .= ' '.(!empty($this->fk_product) ? $this->fk_product : "null").','; + $sql .= ' '.((!empty($this->fk_product) && $this->fk_product > 0) ? $this->fk_product : "null").','; $sql .= " ".((int) $this->product_type).","; $sql .= " ".price2num($this->remise_percent).","; $sql .= " ".price2num($this->subprice).","; diff --git a/htdocs/compta/facture/note.php b/htdocs/compta/facture/note.php index f019d822529..efb0e23a27a 100644 --- a/htdocs/compta/facture/note.php +++ b/htdocs/compta/facture/note.php @@ -54,6 +54,8 @@ $socid = 0; if ($user->socid) { $socid = $user->socid; } +$hookmanager->initHooks(array('invoicenote')); + $result = restrictedArea($user, 'facture', $id, ''); @@ -61,7 +63,13 @@ $result = restrictedArea($user, 'facture', $id, ''); * Actions */ -include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not includ_once +$reshook = $hookmanager->executeHooks('doActions', array(), $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) { + setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); +} +if (empty($reshook)) { + include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once +} diff --git a/htdocs/compta/sociales/class/cchargesociales.class.php b/htdocs/compta/sociales/class/cchargesociales.class.php index 8cfadd84f4f..ee9a270b283 100644 --- a/htdocs/compta/sociales/class/cchargesociales.class.php +++ b/htdocs/compta/sociales/class/cchargesociales.class.php @@ -260,13 +260,13 @@ class Cchargesociales // Update request $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element.' SET'; $sql .= ' libelle = '.(isset($this->libelle) ? "'".$this->db->escape($this->libelle)."'" : "null").','; - $sql .= ' deductible = '.(isset($this->deductible) ? $this->deductible : "null").','; - $sql .= ' active = '.(isset($this->active) ? $this->active : "null").','; + $sql .= ' deductible = '.(isset($this->deductible) ? ((int) $this->deductible) : "null").','; + $sql .= ' active = '.(isset($this->active) ? ((int) $this->active) : "null").','; $sql .= ' code = '.(isset($this->code) ? "'".$this->db->escape($this->code)."'" : "null").','; - $sql .= ' fk_pays = '.(isset($this->fk_pays) ? $this->fk_pays : "null").','; + $sql .= ' fk_pays = '.((isset($this->fk_pays) && $this->fk_pays > 0) ? ((int) $this->fk_pays) : "null").','; $sql .= ' module = '.(isset($this->module) ? "'".$this->db->escape($this->module)."'" : "null").','; $sql .= ' accountancy_code = '.(isset($this->accountancy_code) ? "'".$this->db->escape($this->accountancy_code)."'" : "null"); - $sql .= ' WHERE id='.$this->id; + $sql .= ' WHERE id='.((int) $this->id); $this->db->begin(); diff --git a/htdocs/conf/conf.php.example b/htdocs/conf/conf.php.example index fba3e1004f4..71f0a82e32f 100644 --- a/htdocs/conf/conf.php.example +++ b/htdocs/conf/conf.php.example @@ -151,6 +151,15 @@ $dolibarr_main_db_character_set='utf8'; $dolibarr_main_db_collation='utf8_unicode_ci'; +// dolibarr_main_db_readonly +// Set this to 1 to have the application working in readonly mode. All sql access INSERT/UPDATE/DELETE/CREATE/ALTER/TRUNCATE/DROP will be disabled. +// Default value: 0 +// Examples: +// $dolibarr_main_db_readonly='0'; +// +$dolibarr_main_db_readonly=0; + + // dolibarr_main_instance_unique_id // An secret ID that is unique for each installation. // This value is also visible and never propagated outside of Dolibarr, so it can be used as a salt / key for some encryption. diff --git a/htdocs/contact/canvas/default/tpl/contactcard_create.tpl.php b/htdocs/contact/canvas/default/tpl/contactcard_create.tpl.php index cceb6310dc2..bc8ff9ebcf4 100644 --- a/htdocs/contact/canvas/default/tpl/contactcard_create.tpl.php +++ b/htdocs/contact/canvas/default/tpl/contactcard_create.tpl.php @@ -30,8 +30,6 @@ print load_fiche_titre($this->control->tpl['title']); dol_htmloutput_errors((is_numeric($object->error) ? '' : $object->error), $object->errors); -dol_htmloutput_errors((is_numeric($GLOBALS['error']) ? '' : $GLOBALS['error']), $GLOBALS['errors']); - dol_htmloutput_errors($this->control->tpl['error'], $this->control->tpl['errors']); echo $this->control->tpl['ajax_selectcountry']; ?> diff --git a/htdocs/contact/card.php b/htdocs/contact/card.php index dea4f9d185d..469869f00e9 100644 --- a/htdocs/contact/card.php +++ b/htdocs/contact/card.php @@ -726,6 +726,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { } if ($object->country_id) { + print img_picto('', 'state', 'class="pictofixedwidth"'); print $formcompany->select_state(GETPOST("state_id", 'alpha') ? GETPOST("state_id", 'alpha') : $object->state_id, $object->country_code, 'state_id'); } else { print $countrynotdefined; @@ -1019,6 +1020,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { print ''; } diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index a5f408f4299..165a7bf7bc3 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -100,15 +100,15 @@ class Contact extends CommonObject 'firstname' =>array('type'=>'varchar(50)', 'label'=>'Firstname', 'enabled'=>1, 'visible'=>1, 'position'=>50, 'showoncombobox'=>1, 'searchall'=>1), 'address' =>array('type'=>'varchar(255)', 'label'=>'Address', 'enabled'=>1, 'visible'=>-1, 'position'=>55), 'zip' =>array('type'=>'varchar(25)', 'label'=>'Zip', 'enabled'=>1, 'visible'=>1, 'position'=>60), - 'town' =>array('type'=>'text', 'label'=>'Town', 'enabled'=>1, 'visible'=>1, 'position'=>65), + 'town' =>array('type'=>'text', 'label'=>'Town', 'enabled'=>1, 'visible'=>-1, 'position'=>65), 'fk_departement' =>array('type'=>'integer', 'label'=>'Fk departement', 'enabled'=>1, 'visible'=>3, 'position'=>70), 'fk_pays' =>array('type'=>'integer', 'label'=>'Fk pays', 'enabled'=>1, 'visible'=>3, 'position'=>75), 'birthday' =>array('type'=>'date', 'label'=>'Birthday', 'enabled'=>1, 'visible'=>3, 'position'=>80), 'poste' =>array('type'=>'varchar(80)', 'label'=>'PostOrFunction', 'enabled'=>1, 'visible'=>-1, 'position'=>85), 'phone' =>array('type'=>'varchar(30)', 'label'=>'Phone', 'enabled'=>1, 'visible'=>1, 'position'=>90, 'searchall'=>1), - 'phone_perso' =>array('type'=>'varchar(30)', 'label'=>'PhonePerso', 'enabled'=>1, 'visible'=>1, 'position'=>95, 'searchall'=>1), + 'phone_perso' =>array('type'=>'varchar(30)', 'label'=>'PhonePerso', 'enabled'=>1, 'visible'=>-1, 'position'=>95, 'searchall'=>1), 'phone_mobile' =>array('type'=>'varchar(30)', 'label'=>'PhoneMobile', 'enabled'=>1, 'visible'=>1, 'position'=>100, 'searchall'=>1), - 'fax' =>array('type'=>'varchar(30)', 'label'=>'Fax', 'enabled'=>1, 'visible'=>1, 'position'=>105, 'searchall'=>1), + 'fax' =>array('type'=>'varchar(30)', 'label'=>'Fax', 'enabled'=>1, 'visible'=>-1, 'position'=>105, 'searchall'=>1), 'email' =>array('type'=>'varchar(255)', 'label'=>'Email', 'enabled'=>1, 'visible'=>1, 'position'=>110, 'searchall'=>1), 'socialnetworks' =>array('type'=>'text', 'label'=>'SocialNetworks', 'enabled'=>1, 'visible'=>3, 'position'=>115), 'photo' =>array('type'=>'varchar(255)', 'label'=>'Photo', 'enabled'=>1, 'visible'=>3, 'position'=>170), diff --git a/htdocs/contact/list.php b/htdocs/contact/list.php index fe8e20bac9c..e5a9ab3f0d6 100644 --- a/htdocs/contact/list.php +++ b/htdocs/contact/list.php @@ -1097,28 +1097,28 @@ while ($i < min($num, $limit)) { } // Phone if (!empty($arrayfields['p.phone']['checked'])) { - print ''; + print ''; if (!$i) { $totalarray['nbfield']++; } } // Phone perso if (!empty($arrayfields['p.phone_perso']['checked'])) { - print ''; + print ''; if (!$i) { $totalarray['nbfield']++; } } // Phone mobile if (!empty($arrayfields['p.phone_mobile']['checked'])) { - print ''; + print ''; if (!$i) { $totalarray['nbfield']++; } } // Fax if (!empty($arrayfields['p.fax']['checked'])) { - print ''; + print ''; if (!$i) { $totalarray['nbfield']++; } diff --git a/htdocs/contact/note.php b/htdocs/contact/note.php index c301ef02276..1cb76b5336e 100644 --- a/htdocs/contact/note.php +++ b/htdocs/contact/note.php @@ -49,13 +49,20 @@ if ($id > 0) { $permissionnote = $user->rights->societe->creer; // Used by the include of actions_setnotes.inc.php // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context -$hookmanager->initHooks(array('contactcard')); +// $hookmanager->initHooks(array('contactcard')); -> Name conflict with product/card.php +$hookmanager->initHooks(array('contactnote')); + /* * Actions */ - -include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not includ_once +$reshook = $hookmanager->executeHooks('doActions', array(), $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) { + setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); +} +if (empty($reshook)) { + include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once +} /* diff --git a/htdocs/contrat/card.php b/htdocs/contrat/card.php index 05c7436c22e..32edf9a1558 100644 --- a/htdocs/contrat/card.php +++ b/htdocs/contrat/card.php @@ -386,7 +386,7 @@ if (empty($reshook)) { setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Qty")), null, 'errors'); $error++; } - if (GETPOST('prod_entry_mode', 'alpha') == 'free' && empty($idprod) && empty($product_desc)) { + if (GETPOST('prod_entry_mode', 'alpha') == 'free' && (empty($idprod) || $idprod < 0) && empty($product_desc)) { setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Description")), null, 'errors'); $error++; } diff --git a/htdocs/contrat/note.php b/htdocs/contrat/note.php index eab56b97a16..46a710a754d 100644 --- a/htdocs/contrat/note.php +++ b/htdocs/contrat/note.php @@ -44,6 +44,10 @@ $ref = GETPOST('ref', 'alpha'); if ($user->socid) { $socid = $user->socid; } +// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context +//$hookmanager->initHooks(array('contractcard', 'globalcard')); -> Conflict with contrat\card.php +$hookmanager->initHooks(array('contractnote')); + $result = restrictedArea($user, 'contrat', $id); $object = new Contrat($db); @@ -51,16 +55,18 @@ $object->fetch($id, $ref); $permissionnote = $user->rights->contrat->creer; // Used by the include of actions_setnotes.inc.php -// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context -$hookmanager->initHooks(array('contractcard', 'globalcard')); - - /* * Actions */ -include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not includ_once +$reshook = $hookmanager->executeHooks('doActions', array(), $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) { + setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); +} +if (empty($reshook)) { + include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once +} diff --git a/htdocs/core/boxes/box_graph_nb_tickets_type.php b/htdocs/core/boxes/box_graph_nb_tickets_type.php index 86ea5e2a11c..2da54d84e7a 100644 --- a/htdocs/core/boxes/box_graph_nb_tickets_type.php +++ b/htdocs/core/boxes/box_graph_nb_tickets_type.php @@ -69,20 +69,11 @@ class box_graph_nb_tickets_type extends ModeleBoxes global $theme_datacolor, $badgeStatus8; require_once DOL_DOCUMENT_ROOT."/core/lib/functions2.lib.php"; + require_once DOL_DOCUMENT_ROOT."/theme/".$conf->theme."/theme_vars.inc.php"; - $badgeStatus0 = '#cbd3d3'; // draft - $badgeStatus1 = '#bc9526'; // validated - $badgeStatus1b = '#bc9526'; // validated - $badgeStatus2 = '#9c9c26'; // approved - $badgeStatus3 = '#bca52b'; - $badgeStatus4 = '#25a580'; // Color ok - $badgeStatus4b = '#25a580'; // Color ok - $badgeStatus5 = '#cad2d2'; - $badgeStatus6 = '#cad2d2'; - $badgeStatus7 = '#baa32b'; $badgeStatus8 = '#993013'; - $badgeStatus9 = '#e7f0f0'; + $text = $langs->trans("BoxTicketType"); $this->info_box_head = array( 'text' => $text, diff --git a/htdocs/core/boxes/box_scheduled_jobs.php b/htdocs/core/boxes/box_scheduled_jobs.php index 793b0cc8c79..53cf5c79571 100644 --- a/htdocs/core/boxes/box_scheduled_jobs.php +++ b/htdocs/core/boxes/box_scheduled_jobs.php @@ -85,7 +85,7 @@ class box_scheduled_jobs extends ModeleBoxes $resultarray = array(); $result = 0; - $sql = "SELECT t.rowid, t.datelastrun, t.datenextrun,"; + $sql = "SELECT t.rowid, t.datelastrun, t.datenextrun, t.datestart,"; $sql .= " t.label, t.status, t.test, t.lastresult"; $sql .= " FROM " . MAIN_DB_PREFIX . "cronjob as t"; $sql .= " WHERE status <> ".$cronstatic::STATUS_DISABLED; diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 5467490ea0e..b3ae722a5d3 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -6254,10 +6254,12 @@ abstract class CommonObject $this->array_options["options_".$key] = price2num($this->array_options["options_".$key]); break; case 'date': - $this->array_options["options_".$key] = $this->db->idate($this->array_options["options_".$key]); - break; case 'datetime': - $this->array_options["options_".$key] = $this->db->idate($this->array_options["options_".$key]); + if (empty($this->array_options["options_".$key])) { + $this->array_options["options_".$key] = null; + } else { + $this->array_options["options_".$key] = $this->db->idate($this->array_options["options_".$key]); + } break; /* case 'link': @@ -6305,7 +6307,11 @@ abstract class CommonObject } if ($linealreadyfound) { - $sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element."_extrafields SET ".$key." = '".$this->db->escape($this->array_options["options_".$key])."'"; + if ($this->array_options["options_".$key] === null) { + $sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element."_extrafields SET ".$key." = null"; + } else { + $sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element."_extrafields SET ".$key." = '".$this->db->escape($this->array_options["options_".$key])."'"; + } $sql .= " WHERE fk_object = ".$this->id; } else { $result = $this->insertExtraFields('', $user); @@ -7486,6 +7492,9 @@ abstract class CommonObject if ($display_type == 'card') { $out .= ''; + if ( ! empty($conf->global->MAIN_VIEW_LINE_NUMBER) ) { + $out .= ''; + } $out .= ''; @@ -953,7 +953,7 @@ function showSkins($fuser, $edit = 0, $foruserprofile = false) // Use MAIN_OPTIMIZEFORTEXTBROWSER - if ($foruserprofile) { + if ($foruserprofile && !empty($fuser->conf->MAIN_OPTIMIZEFORCOLORBLIND)) { //$default=yn($conf->global->MAIN_OPTIMIZEFORCOLORBLIND); $default = $langs->trans('No'); print ''; diff --git a/htdocs/core/login/functions_ldap.php b/htdocs/core/login/functions_ldap.php index 9de95be506b..0f3927709eb 100644 --- a/htdocs/core/login/functions_ldap.php +++ b/htdocs/core/login/functions_ldap.php @@ -29,7 +29,7 @@ * * @param string $usertotest Login * @param string $passwordtotest Password - * @param int $entitytotest Number of instance (always 1 if module multicompany not enabled) + * @param int $entitytotest Numero of instance (always 1 if module multicompany not enabled) * @return string Login if OK, '' if KO */ function check_user_password_ldap($usertotest, $passwordtotest, $entitytotest) @@ -151,10 +151,13 @@ function check_user_password_ldap($usertotest, $passwordtotest, $entitytotest) if ($result > 0) { if ($result == 2) { // Connection is ok for user/pass into LDAP $login = $usertotest; - if (!empty($conf->global->LDAP_FIELD_LOGIN)) { - $login = $ldap->login; - } dol_syslog("functions_ldap::check_user_password_ldap $login authentication ok"); + // For the case, we search the user id using a search key without the login (but using other fields like id), + // we need to get the real login to use in the ldap answer. + if (!empty($conf->global->LDAP_FIELD_LOGIN) && !empty($ldap->login)) { + $login = $ldap->login; + dol_syslog("functions_ldap::check_user_password_ldap login is now $login (LDAP_FIELD_LOGIN=".$conf->global->LDAP_FIELD_LOGIN.")"); + } require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; @@ -207,7 +210,7 @@ function check_user_password_ldap($usertotest, $passwordtotest, $entitytotest) } $usertmp = new User($db); - $resultFetchUser = $usertmp->fetch('', $login, $sid); + $resultFetchUser = $usertmp->fetch('', $login, $sid, 1, ($entitytotest > 0 ? $entitytotest : -1)); if ($resultFetchUser > 0) { dol_syslog("functions_ldap::check_user_password_ldap Sync user found user id=".$usertmp->id); // On verifie si le login a change et on met a jour les attributs dolibarr @@ -215,7 +218,7 @@ function check_user_password_ldap($usertotest, $passwordtotest, $entitytotest) if ($usertmp->login != $ldap->login && $ldap->login) { $usertmp->login = $ldap->login; $usertmp->update($usertmp); - // TODO Que faire si update echoue car on update avec un login deja existant. + // TODO Que faire si update echoue car on update avec un login deja existant pour un autre compte. } //$resultUpdate = $usertmp->update_ldap2dolibarr($ldap); @@ -231,7 +234,7 @@ function check_user_password_ldap($usertotest, $passwordtotest, $entitytotest) $usertmp->fetch('', $login); $ret = $mc->checkRight($usertmp->id, $entitytotest); if ($ret < 0) { - dol_syslog("functions_ldap::check_user_password_ldap Authentication KO entity '".$entitytotest."' not allowed for user '".$usertmp->id."'", LOG_NOTICE); + dol_syslog("functions_ldap::check_user_password_ldap Authentication KO entity '".$entitytotest."' not allowed for user id '".$usertmp->id."'", LOG_NOTICE); $login = ''; // force authentication failure } unset($usertmp); diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index 90de417c767..c192d5e6ac6 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -1797,11 +1797,11 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM $newmenu->add("/holiday/card.php?mainmenu=hrm&leftmenu=holiday&action=create", $langs->trans("New"), 1, $user->rights->holiday->write); $newmenu->add("/holiday/list.php?mainmenu=hrm&leftmenu=hrm", $langs->trans("List"), 1, $user->rights->holiday->read); if ($usemenuhider || empty($leftmenu) || $leftmenu == "hrm") { - $newmenu->add("/holiday/list.php?search_statut=1&mainmenu=hrm&leftmenu=hrm", $langs->trans("DraftCP"), 2, $user->rights->holiday->read); - $newmenu->add("/holiday/list.php?search_statut=2&mainmenu=hrm&leftmenu=hrm", $langs->trans("ToReviewCP"), 2, $user->rights->holiday->read); - $newmenu->add("/holiday/list.php?search_statut=3&mainmenu=hrm&leftmenu=hrm", $langs->trans("ApprovedCP"), 2, $user->rights->holiday->read); - $newmenu->add("/holiday/list.php?search_statut=4&mainmenu=hrm&leftmenu=hrm", $langs->trans("CancelCP"), 2, $user->rights->holiday->read); - $newmenu->add("/holiday/list.php?search_statut=5&mainmenu=hrm&leftmenu=hrm", $langs->trans("RefuseCP"), 2, $user->rights->holiday->read); + $newmenu->add("/holiday/list.php?search_status=1&mainmenu=hrm&leftmenu=hrm", $langs->trans("DraftCP"), 2, $user->rights->holiday->read); + $newmenu->add("/holiday/list.php?search_status=2&mainmenu=hrm&leftmenu=hrm", $langs->trans("ToReviewCP"), 2, $user->rights->holiday->read); + $newmenu->add("/holiday/list.php?search_status=3&mainmenu=hrm&leftmenu=hrm", $langs->trans("ApprovedCP"), 2, $user->rights->holiday->read); + $newmenu->add("/holiday/list.php?search_status=4&mainmenu=hrm&leftmenu=hrm", $langs->trans("CancelCP"), 2, $user->rights->holiday->read); + $newmenu->add("/holiday/list.php?search_status=5&mainmenu=hrm&leftmenu=hrm", $langs->trans("RefuseCP"), 2, $user->rights->holiday->read); } $newmenu->add("/holiday/define_holiday.php?mainmenu=hrm&action=request", $langs->trans("MenuConfCP"), 1, $user->rights->holiday->read); $newmenu->add("/holiday/month_report.php?mainmenu=hrm&leftmenu=holiday", $langs->trans("MenuReportMonth"), 1, $user->rights->holiday->readall); diff --git a/htdocs/core/modules/modAccounting.class.php b/htdocs/core/modules/modAccounting.class.php index d6127f65b83..e0bf3a9bbc5 100644 --- a/htdocs/core/modules/modAccounting.class.php +++ b/htdocs/core/modules/modAccounting.class.php @@ -60,7 +60,7 @@ class modAccounting extends DolibarrModules $this->dirs = array('/accounting/temp'); // Config pages - $this->config_page_url = array('accounting.php'); + $this->config_page_url = array('accounting.php?mainmenu=accountancy&leftmenu=accountancy_admin'); // Dependencies $this->depends = array("modFacture", "modBanque", "modTax"); // List of modules id that must be enabled if this module is enabled diff --git a/htdocs/core/modules/modClickToDial.class.php b/htdocs/core/modules/modClickToDial.class.php index f28659bbd5d..18f1e6befeb 100644 --- a/htdocs/core/modules/modClickToDial.class.php +++ b/htdocs/core/modules/modClickToDial.class.php @@ -18,7 +18,7 @@ /** * \defgroup clicktodial Module clicktodial - * \brief Module pour gerer l'appel automatique + * \brief Module to manage a ClickToDial system * \file htdocs/core/modules/modClickToDial.class.php * \ingroup clicktodial * \brief Description and activation file for the module Click to Dial @@ -46,7 +46,8 @@ class modClickToDial extends DolibarrModules $this->family = "interface"; // Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module) $this->name = preg_replace('/^mod/i', '', get_class($this)); - $this->description = "Gestion du Click To Dial"; + $this->description = "Integration of a ClickToDial system (Asterisk, ...)"; + $this->descriptionlong = "Support a Click To Dial feature with a SIP system. When clicking on a phone number, your phone system automatically call the callee."; $this->version = 'dolibarr'; // 'development' or 'experimental' or 'dolibarr' or version diff --git a/htdocs/core/modules/modProduct.class.php b/htdocs/core/modules/modProduct.class.php index 37cda4b7b30..3caf5db88c6 100644 --- a/htdocs/core/modules/modProduct.class.php +++ b/htdocs/core/modules/modProduct.class.php @@ -322,7 +322,7 @@ class modProduct extends DolibarrModules $this->export_code[$r] = $this->rights_class.'_'.$r; $this->export_label[$r] = "ProductsMultiPrice"; // Translation key (used only if key ExportDataset_xxx_z not found) $this->export_permission[$r] = array(array("produit", "export")); - $this->export_fields_array[$r] = array('p.rowid'=>"Id", 'p.ref'=>"Ref", + $this->export_fields_array[$r] = array('p.rowid'=>"Id", 'p.ref'=>"Ref", 'p.label'=>"Label", 'pr.price_base_type'=>"PriceBase", 'pr.price_level'=>"PriceLevel", 'pr.price'=>"PriceLevelUnitPriceHT", 'pr.price_ttc'=>"PriceLevelUnitPriceTTC", 'pr.price_min'=>"MinPriceLevelUnitPriceHT", 'pr.price_min_ttc'=>"MinPriceLevelUnitPriceTTC", @@ -337,7 +337,7 @@ class modProduct extends DolibarrModules // 'p.price_base_type'=>"Text",'p.price'=>"Numeric",'p.price_ttc'=>"Numeric",'p.tva_tx'=>'Numeric','p.tosell'=>"Boolean",'p.tobuy'=>"Boolean", // 'p.datec'=>'Date','p.tms'=>'Date' //); - $this->export_entities_array[$r] = array('p.rowid'=>"product", 'p.ref'=>"product", + $this->export_entities_array[$r] = array('p.rowid'=>"product", 'p.ref'=>"product", 'p.label'=>"Label", 'pr.price_base_type'=>"product", 'pr.price_level'=>"product", 'pr.price'=>"product", 'pr.price_ttc'=>"product", 'pr.price_min'=>"product", 'pr.price_min_ttc'=>"product", @@ -348,6 +348,8 @@ class modProduct extends DolibarrModules $this->export_sql_end[$r] = ' FROM '.MAIN_DB_PREFIX.'product as p'; $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'product_price as pr ON p.rowid = pr.fk_product AND pr.entity = '.$conf->entity; // export prices only for the current entity $this->export_sql_end[$r] .= ' WHERE p.entity IN ('.getEntity('product').')'; // For product and service profile + $this->export_sql_end[$r] .= ' AND pr.date_price = (SELECT MAX(pr2.date_price) FROM '.MAIN_DB_PREFIX.'product_price as pr2 WHERE pr2.fk_product = pr.fk_product AND pr2.entity IN ('.getEntity('product').'))'; // export only latest prices not full history + $this->export_sql_end[$r] .= ' ORDER BY p.ref, pr.price_level'; } if (!empty($conf->global->PRODUIT_CUSTOMER_PRICES)) { @@ -356,7 +358,7 @@ class modProduct extends DolibarrModules $this->export_code[$r] = $this->rights_class.'_'.$r; $this->export_label[$r] = "ProductsPricePerCustomer"; // Translation key (used only if key ExportDataset_xxx_z not found) $this->export_permission[$r] = array(array("produit", "export")); - $this->export_fields_array[$r] = array('p.rowid'=>"Id", 'p.ref'=>"Ref", + $this->export_fields_array[$r] = array('p.rowid'=>"Id", 'p.ref'=>"Ref", 'p.label'=>"Label", 's.nom'=>'ThirdParty', 'pr.price_base_type'=>"PriceBase", 'pr.price'=>"PriceUnitPriceHT", 'pr.price_ttc'=>"PriceUnitPriceTTC", @@ -367,7 +369,7 @@ class modProduct extends DolibarrModules if (is_object($mysoc) && $usenpr) { $this->export_fields_array[$r]['pr.recuperableonly'] = 'NPR'; } - $this->export_entities_array[$r] = array('p.rowid'=>"product", 'p.ref'=>"product", + $this->export_entities_array[$r] = array('p.rowid'=>"product", 'p.ref'=>"product", 'p.label'=>"Label", 's.nom'=>'company', 'pr.price_base_type'=>"product", 'pr.price'=>"product", 'pr.price_ttc'=>"product", diff --git a/htdocs/core/modules/modTicket.class.php b/htdocs/core/modules/modTicket.class.php index 8b1a1dc8525..15f2b5fecca 100644 --- a/htdocs/core/modules/modTicket.class.php +++ b/htdocs/core/modules/modTicket.class.php @@ -127,19 +127,19 @@ class modTicket extends DolibarrModules 'tabsql' => array( 'SELECT f.rowid as rowid, f.code, f.pos, f.label, f.active, f.use_default FROM '.MAIN_DB_PREFIX.'c_ticket_type as f', 'SELECT f.rowid as rowid, f.code, f.pos, f.label, f.active, f.use_default FROM '.MAIN_DB_PREFIX.'c_ticket_severity as f', - 'SELECT f.rowid as rowid, f.code, f.pos, f.label, f.active, f.use_default, f.public FROM '.MAIN_DB_PREFIX.'c_ticket_category as f', + 'SELECT f.rowid as rowid, f.code, f.pos, f.label, f.active, f.use_default, f.public, f.fk_parent FROM '.MAIN_DB_PREFIX.'c_ticket_category as f', 'SELECT f.rowid as rowid, f.code, f.pos, f.label, f.active, f.use_default FROM '.MAIN_DB_PREFIX.'c_ticket_resolution as f' ), 'tabsqlsort' => array("pos ASC", "pos ASC", "pos ASC", "pos ASC"), - 'tabfield' => array("code,label,pos,use_default", "code,label,pos,use_default", "code,label,pos,use_default,public", "code,label,pos,use_default"), - 'tabfieldvalue' => array("code,label,pos,use_default", "code,label,pos,use_default", "code,label,pos,use_default,public", "code,label,pos,use_default"), - 'tabfieldinsert' => array("code,label,pos,use_default", "code,label,pos,use_default", "code,label,pos,use_default,public", "code,label,pos,use_default"), + 'tabfield' => array("code,label,pos,use_default", "code,label,pos,use_default", "code,label,pos,use_default,public,fk_parent", "code,label,pos,use_default"), + 'tabfieldvalue' => array("code,label,pos,use_default", "code,label,pos,use_default", "code,label,pos,use_default,public,fk_parent", "code,label,pos,use_default"), + 'tabfieldinsert' => array("code,label,pos,use_default", "code,label,pos,use_default", "code,label,pos,use_default,public,fk_parent", "code,label,pos,use_default"), 'tabrowid' => array("rowid", "rowid", "rowid", "rowid"), 'tabcond' => array($conf->ticket->enabled, $conf->ticket->enabled, $conf->ticket->enabled, $conf->ticket->enabled), 'tabhelp' => array( array('code'=>$langs->trans("EnterAnyCode"), 'use_default'=>$langs->trans("Enter0or1")), array('code'=>$langs->trans("EnterAnyCode"), 'use_default'=>$langs->trans("Enter0or1")), - array('code'=>$langs->trans("EnterAnyCode"), 'use_default'=>$langs->trans("Enter0or1"), 'public'=>$langs->trans("Enter0or1").'
'.$langs->trans("TicketGroupIsPublicDesc")), + array('code'=>$langs->trans("EnterAnyCode"), 'use_default'=>$langs->trans("Enter0or1"), 'public'=>$langs->trans("Enter0or1").'
'.$langs->trans("TicketGroupIsPublicDesc"), 'fk_parent'=>$langs->trans("IfThisCategoryIsChildOfAnother")), array('code'=>$langs->trans("EnterAnyCode"), 'use_default'=>$langs->trans("Enter0or1")) ), ); diff --git a/htdocs/core/modules/security/generate/modGeneratePassStandard.class.php b/htdocs/core/modules/security/generate/modGeneratePassStandard.class.php index e091b5069e9..a358f916429 100644 --- a/htdocs/core/modules/security/generate/modGeneratePassStandard.class.php +++ b/htdocs/core/modules/security/generate/modGeneratePassStandard.class.php @@ -99,7 +99,7 @@ class modGeneratePassStandard extends ModeleGenPassword $password = ""; // define possible characters - $possible = "0123456789bcdfghjkmnpqrstvwxyz"; + $possible = "0123456789qwertyuiopasdfghjklzxcvbnmASDFGHJKLZXCVBNMQWERTYUIOP"; // set up a counter $i = 0; @@ -107,10 +107,13 @@ class modGeneratePassStandard extends ModeleGenPassword // add random characters to $password until $length is reached while ($i < $this->length) { // pick a random character from the possible ones - $char = substr($possible, mt_rand(0, dol_strlen($possible) - 1), 1); + if (function_exists('random_int')) { // Cryptographic random + $char = substr($possible, random_int(0, dol_strlen($possible) - 1), 1); + } else { + $char = substr($possible, mt_rand(0, dol_strlen($possible) - 1), 1); + } - // we don't want this character if it's already in the password - if (!strstr($password, $char)) { + if (substr_count($password, $char) <= 6) { // we don't want this character if it's already 5 times in the password $password .= $char; $i++; } diff --git a/htdocs/core/tpl/commonfields_add.tpl.php b/htdocs/core/tpl/commonfields_add.tpl.php index 3a43f04c149..cd07c0b8191 100644 --- a/htdocs/core/tpl/commonfields_add.tpl.php +++ b/htdocs/core/tpl/commonfields_add.tpl.php @@ -47,7 +47,7 @@ foreach ($object->fields as $key => $val) { print ''; print ''; if (!empty($val['picto'])) { - print img_picto('', $val['picto']); + print img_picto('', $val['picto'], '', false, 0, 0, '', 'pictofixedwidth'); } if (in_array($val['type'], array('int', 'integer'))) { $value = GETPOST($key, 'int'); diff --git a/htdocs/core/tpl/commonfields_edit.tpl.php b/htdocs/core/tpl/commonfields_edit.tpl.php index 9fef2d2f2b9..9670271d1a4 100644 --- a/htdocs/core/tpl/commonfields_edit.tpl.php +++ b/htdocs/core/tpl/commonfields_edit.tpl.php @@ -48,7 +48,7 @@ foreach ($object->fields as $key => $val) { print ''; if (!empty($val['picto'])) { - print img_picto('', $val['picto']); + print img_picto('', $val['picto'], '', false, 0, 0, '', 'pictofixedwidth'); } if (in_array($val['type'], array('int', 'integer'))) { $value = GETPOSTISSET($key) ?GETPOST($key, 'int') : $object->$key; diff --git a/htdocs/core/tpl/login.tpl.php b/htdocs/core/tpl/login.tpl.php index 9af5bc7d7b4..e668d1e6d58 100644 --- a/htdocs/core/tpl/login.tpl.php +++ b/htdocs/core/tpl/login.tpl.php @@ -356,7 +356,7 @@ if (!empty($conf->global->MAIN_EASTER_EGG_COMMITSTRIP)) { - diff --git a/htdocs/core/tpl/objectline_view.tpl.php b/htdocs/core/tpl/objectline_view.tpl.php index c0339c28fc4..3e8ef7ea411 100644 --- a/htdocs/core/tpl/objectline_view.tpl.php +++ b/htdocs/core/tpl/objectline_view.tpl.php @@ -135,7 +135,7 @@ if (($line->info_bits & 2) == 2) { $format = (!empty($conf->global->MAIN_USE_HOURMIN_IN_DATE_RANGE) ? 'dayhour' : 'day'); if ($line->fk_product > 0) { - print $form->textwithtooltip($text, $description, 3, '', '', $i, 0, (!empty($line->fk_parent_line) ?img_picto('', 'rightarrow') : '')); + print $form->textwithtooltip($text, $description, 3, 0, '', $i, 0, (!empty($line->fk_parent_line) ?img_picto('', 'rightarrow') : '')); } else { $type = (!empty($line->product_type) ? $line->product_type : $line->fk_product_type); if ($type == 1) { @@ -146,7 +146,7 @@ if (($line->info_bits & 2) == 2) { if (!empty($line->label)) { $text .= ' '.$line->label.''; - print $form->textwithtooltip($text, dol_htmlentitiesbr($line->description), 3, '', '', $i, 0, (!empty($line->fk_parent_line) ?img_picto('', 'rightarrow') : '')); + print $form->textwithtooltip($text, dol_htmlentitiesbr($line->description), 3, 0, '', $i, 0, (!empty($line->fk_parent_line) ?img_picto('', 'rightarrow') : '')); } else { if (!empty($line->fk_parent_line)) { print img_picto('', 'rightarrow'); @@ -179,7 +179,7 @@ if (($line->info_bits & 2) == 2) { } } else { if ($line->date_start || $line->date_end) { - print '
'.get_date_range($line->date_start, $line->date_end, $format).'
'; + print '
'.get_date_range($line->date_start, $line->date_end, $format).'
'; } //print get_date_range($line->date_start, $line->date_end, $format); } @@ -353,7 +353,15 @@ if ($outputalsopricetotalwithtax) { $coldisplay++; } -if ($this->statut == 0 && ($object_rights->creer) && $action != 'selectlines') { +if ($this->statut == 0 && !empty($object_rights->creer) && $action != 'selectlines') { + $situationinvoicelinewithparent = 0; + if ($line->fk_prev_id != null && in_array($object->element, array('facture', 'facturedet'))) { + if ($object->type == $object::TYPE_SITUATION) { // The constant TYPE_SITUATION exists only for object invoice + // Set constant to disallow editing during a situation cycle + $situationinvoicelinewithparent = 1; + } + } + print ''; } // Fin si c'est payé/validé - print '
'.$langs->trans("DateDue").''.$langs->trans("Description").''.$langs->trans("Entity").''.$langs->trans("ThirdParty").''.$langs->trans("Debit").''.$langs->trans("Credit").''.$langs->trans("BankBalance").'
'.$langs->trans("CurrentBalance").''.price($solde).'
'; - if ($obj->dlr) { - print dol_print_date($db->jdate($obj->dlr), "day"); + if ($tmpobj->dlr) { + print dol_print_date($tmpobj->dlr, "day"); } else { print $langs->trans("NotDefined"); } print "".$ref."".$mc->label."".$refcomp."'.price(abs($total_ttc))."  '.price($total_ttc)."'.price($solde).'
'; } + print img_picto('', 'state', 'class="pictofixedwidth"'); print $formcompany->select_state(GETPOSTISSET('state_id') ? GETPOST('state_id', 'alpha') : $object->state_id, $object->country_code, 'state_id'); print '
'.dol_print_phone($obj->phone_pro, $obj->country_code, $obj->rowid, $obj->socid, 'AC_TEL', ' ', 'phone').''.dol_print_phone($obj->phone_pro, $obj->country_code, $obj->rowid, $obj->socid, 'AC_TEL', ' ', 'phone').''.dol_print_phone($obj->phone_perso, $obj->country_code, $obj->rowid, $obj->socid, 'AC_TEL', ' ', 'phone').''.dol_print_phone($obj->phone_perso, $obj->country_code, $obj->rowid, $obj->socid, 'AC_TEL', ' ', 'phone').''.dol_print_phone($obj->phone_mobile, $obj->country_code, $obj->rowid, $obj->socid, 'AC_TEL', ' ', 'mobile').''.dol_print_phone($obj->phone_mobile, $obj->country_code, $obj->rowid, $obj->socid, 'AC_TEL', ' ', 'mobile').''.dol_print_phone($obj->fax, $obj->country_code, $obj->rowid, $obj->socid, 'AC_TEL', ' ', 'fax').''.dol_print_phone($obj->fax, $obj->country_code, $obj->rowid, $obj->socid, 'AC_TEL', ' ', 'fax').'
'; @@ -7711,7 +7720,7 @@ abstract class CommonObject $buyPrice = $unitPrice * (1 - $discountPercent / 100); } else { // Get cost price for margin calculation - if (!empty($fk_product)) { + if (!empty($fk_product) && $fk_product > 0) { if (isset($conf->global->MARGIN_TYPE) && $conf->global->MARGIN_TYPE == 'costprice') { require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php'; $product = new Product($this->db); diff --git a/htdocs/core/class/dolgraph.class.php b/htdocs/core/class/dolgraph.class.php index b1819e24ab0..a1725526898 100644 --- a/htdocs/core/class/dolgraph.class.php +++ b/htdocs/core/class/dolgraph.class.php @@ -596,7 +596,7 @@ class DolGraph // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Get max value + * Get max value among all values of all series * * @return int Max value */ @@ -607,25 +607,26 @@ class DolGraph return 0; } - $k = 0; - $vals = array(); + $max = null; - $nblines = count($this->data); - $nbvalues = (empty($this->data[0]) ? 0 : count($this->data[0]) - 1); + $nbseries = (empty($this->data[0]) ? 0 : count($this->data[0]) - 1); - for ($j = 0; $j < $nblines; $j++) { - for ($i = 0; $i < $nbvalues; $i++) { - $vals[$k] = $this->data[$j][$i + 1]; - $k++; + foreach ($this->data as $x) { // Loop on each x + for ($i = 0; $i < $nbseries; $i++) { // Loop on each serie + if (is_null($max)) { + $max = $x[$i + 1]; // $i+1 because the index 0 is the legend + } elseif ($max < $x[$i + 1]) { + $max = $x[$i + 1]; + } } } - rsort($vals); - return $vals[0]; + + return $max; } // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Return min value of all data + * Return min value of all values of all series * * @return int Min value of all data */ @@ -636,20 +637,21 @@ class DolGraph return 0; } - $k = 0; - $vals = array(); + $min = null; - $nblines = count($this->data); - $nbvalues = (empty($this->data[0]) ? 0 : count($this->data[0]) - 1); + $nbseries = (empty($this->data[0]) ? 0 : count($this->data[0]) - 1); - for ($j = 0; $j < $nblines; $j++) { - for ($i = 0; $i < $nbvalues; $i++) { - $vals[$k] = $this->data[$j][$i + 1]; - $k++; + foreach ($this->data as $x) { // Loop on each x + for ($i = 0; $i < $nbseries; $i++) { // Loop on each serie + if (is_null($min)) { + $min = $x[$i + 1]; // $i+1 because the index 0 is the legend + } elseif ($min > $x[$i + 1]) { + $min = $x[$i + 1]; + } } } - sort($vals); - return $vals[0]; + + return $min; } // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps diff --git a/htdocs/core/class/dolreceiptprinter.class.php b/htdocs/core/class/dolreceiptprinter.class.php index c109bc65733..45c87401416 100644 --- a/htdocs/core/class/dolreceiptprinter.class.php +++ b/htdocs/core/class/dolreceiptprinter.class.php @@ -390,7 +390,7 @@ class dolReceiptPrinter extends Printer $error = 0; $sql = 'INSERT INTO '.MAIN_DB_PREFIX.'printer_receipt'; $sql .= ' (name, fk_type, fk_profile, parameter, entity)'; - $sql .= ' VALUES ("'.$this->db->escape($name).'", '.$type.', '.$profile.', "'.$this->db->escape($parameter).'", '.$conf->entity.')'; + $sql .= ' VALUES ("'.$this->db->escape($name).'", '.((int) $type).', '.((int) $profile).', "'.$this->db->escape($parameter).'", '.$conf->entity.')'; $resql = $this->db->query($sql); if (!$resql) { $error++; @@ -415,10 +415,10 @@ class dolReceiptPrinter extends Printer $error = 0; $sql = 'UPDATE '.MAIN_DB_PREFIX.'printer_receipt'; $sql .= ' SET name="'.$this->db->escape($name).'"'; - $sql .= ', fk_type='.$type; - $sql .= ', fk_profile='.$profile; + $sql .= ', fk_type='.((int) $type); + $sql .= ', fk_profile='.((int) $profile); $sql .= ', parameter="'.$this->db->escape($parameter).'"'; - $sql .= ' WHERE rowid='.$printerid; + $sql .= ' WHERE rowid='.((int) $printerid); $resql = $this->db->query($sql); if (!$resql) { $error++; @@ -438,7 +438,7 @@ class dolReceiptPrinter extends Printer global $conf; $error = 0; $sql = 'DELETE FROM '.MAIN_DB_PREFIX.'printer_receipt'; - $sql .= ' WHERE rowid='.$printerid; + $sql .= ' WHERE rowid='.((int) $printerid); $resql = $this->db->query($sql); if (!$resql) { $error++; @@ -480,7 +480,7 @@ class dolReceiptPrinter extends Printer global $conf; $error = 0; $sql = 'DELETE FROM '.MAIN_DB_PREFIX.'printer_receipt_template'; - $sql .= " WHERE rowid = ".((int) $this->db->escape($templateid)); + $sql .= " WHERE rowid = ".((int) $templateid); $sql .= " AND entity = ".$conf->entity; $resql = $this->db->query($sql); if (!$resql) { @@ -505,7 +505,7 @@ class dolReceiptPrinter extends Printer $sql = 'UPDATE '.MAIN_DB_PREFIX.'printer_receipt_template'; $sql .= ' SET name="'.$this->db->escape($name).'"'; $sql .= ', template="'.$this->db->escape($template).'"'; - $sql .= ' WHERE rowid='.$templateid; + $sql .= ' WHERE rowid='.((int) $templateid); $resql = $this->db->query($sql); if (!$resql) { $error++; @@ -524,6 +524,7 @@ class dolReceiptPrinter extends Printer public function sendTestToPrinter($printerid) { global $conf; + $error = 0; $img = EscposImage::load(DOL_DOCUMENT_ROOT.'/theme/dolibarr_logo_bw.png'); //$this->profile = CapabilityProfile::load("TM-T88IV"); @@ -543,7 +544,7 @@ class dolReceiptPrinter extends Printer // If is DummyPrintConnector send to log to debugging if ($this->printer->connector instanceof DummyPrintConnector) { - $data = $this->printer->connector-> getData(); + $data = $this->printer->connector->getData(); dol_syslog($data); } $this->printer->close(); @@ -899,7 +900,7 @@ class dolReceiptPrinter extends Printer public function initPrinter($printerid) { global $conf; - if ($conf->global->TAKEPOS_PRINT_METHOD == "takeposconnector") { + if (getDolGlobalString('TAKEPOS_PRINT_METHOD') == "takeposconnector") { $this->connector = new DummyPrintConnector(); $this->printer = new Printer($this->connector, $this->profile); return; @@ -934,8 +935,8 @@ class dolReceiptPrinter extends Printer $parameters = explode(':', $parameter); $this->connector = new NetworkPrintConnector($parameters[0], $parameters[1]); break; - case 4: - $this->connector = new WindowsPrintConnector($parameter); + case 4: // LPT1, smb://... + $this->connector = new WindowsPrintConnector(dol_sanitizePathName($parameter)); break; case 5: $this->connector = new CupsPrintConnector($parameter); diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 0b1504d229a..048fbb0cad3 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -589,6 +589,7 @@ class Form if (!$htmltext) { return $text; } + $direction = (int) $direction; // For backward compatibility when $direction was set to '' instead of 0 $tag = 'td'; if ($notabs == 2) { @@ -1251,6 +1252,9 @@ class Form if (is_null($ajaxoptions)) { $ajaxoptions = array(); } + + require_once DOL_DOCUMENT_ROOT . '/core/lib/ajax.lib.php'; + // No immediate load of all database $placeholder = ''; if ($selected && empty($selected_input_value)) { @@ -2176,7 +2180,7 @@ class Form * * @param int $selected Preselected products * @param string $htmlname Name of HTML select field (must be unique in page). - * @param int $filtertype Filter on product type (''=nofilter, 0=product, 1=service) + * @param int|string $filtertype Filter on product type (''=nofilter, 0=product, 1=service) * @param int $limit Limit on number of returned lines * @param int $price_level Level of price to show * @param int $status Sell status -1=Return all products, 0=Products not on sell, 1=Products on sell @@ -2604,7 +2608,7 @@ class Form } } if ($showempty) { - $out .= ''; + $out .= ''; } $i = 0; diff --git a/htdocs/core/class/html.formadmin.class.php b/htdocs/core/class/html.formadmin.class.php index 411b45e03a7..8e03f158a02 100644 --- a/htdocs/core/class/html.formadmin.class.php +++ b/htdocs/core/class/html.formadmin.class.php @@ -393,9 +393,10 @@ class FormAdmin * @param string $htmlname Name of HTML select field * @param string $filter Value to filter on code * @param int $showempty Add empty value + * @param int $forcecombo Force to load all values and output a standard combobox (with no beautification) * @return string Return HTML output */ - public function select_paper_format($selected = '', $htmlname = 'paperformat_id', $filter = 0, $showempty = 0) + public function select_paper_format($selected = '', $htmlname = 'paperformat_id', $filter = 0, $showempty = 0, $forcecombo = 0) { // phpcs:enable global $langs; @@ -444,6 +445,11 @@ class FormAdmin } $out .= ''; + if (!$forcecombo) { + include_once DOL_DOCUMENT_ROOT.'/core/lib/ajax.lib.php'; + $out .= ajax_combobox($htmlname); + } + return $out; } } diff --git a/htdocs/core/class/html.formticket.class.php b/htdocs/core/class/html.formticket.class.php index daafa88333f..0a4a622f4a8 100644 --- a/htdocs/core/class/html.formticket.class.php +++ b/htdocs/core/class/html.formticket.class.php @@ -561,28 +561,27 @@ class FormTicket /** * Return html list of ticket anaytic codes * - * @param string $selected Id categorie pre-selectionnée - * @param string $htmlname Nom de la zone select - * @param string $filtertype To filter on some properties in llx_c_ticket_category ('public = 1'). This parameter must not come from input of users. - * @param int $format 0=id+libelle, 1=code+code, 2=code+libelle, 3=id+code - * @param int $empty 1=peut etre vide, 0 sinon - * @param int $noadmininfo 0=Add admin info, 1=Disable admin info - * @param int $maxlength Max length of label - * @param string $morecss More CSS - * @param int $use_multilevel if > 0 create a multilevel select which use $htmlname example: $use_multilevel = 1 permit to have 2 select boxes. + * @param string $selected Id categorie pre-selectionnée + * @param string $htmlname Name of select component + * @param string $filtertype To filter on some properties in llx_c_ticket_category ('public = 1'). This parameter must not come from input of users. + * @param int $format 0=id+libelle, 1=code+code, 2=code+libelle, 3=id+code + * @param int $empty 1=peut etre vide, 0 sinon + * @param int $noadmininfo 0=Add admin info, 1=Disable admin info + * @param int $maxlength Max length of label + * @param string $morecss More CSS + * @param int $use_multilevel If > 0 create a multilevel select which use $htmlname example: $use_multilevel = 1 permit to have 2 select boxes. * @return void */ public function selectGroupTickets($selected = '', $htmlname = 'ticketcategory', $filtertype = '', $format = 0, $empty = 0, $noadmininfo = 0, $maxlength = 0, $morecss = '', $use_multilevel = 0) { global $langs, $user; + dol_syslog(get_class($this)."::selectCategoryTickets ".$selected.", ".$htmlname.", ".$filtertype.", ".$format, LOG_DEBUG); + + $ticketstat = new Ticket($this->db); + $ticketstat->loadCacheCategoriesTickets(); + if ($use_multilevel <= 0) { - $ticketstat = new Ticket($this->db); - - dol_syslog(get_class($this)."::selectCategoryTickets ".$selected.", ".$htmlname.", ".$filtertype.", ".$format, LOG_DEBUG); - - $ticketstat->loadCacheCategoriesTickets(); - print ''; } - $stringtoprint .= ' '; + $stringtoprint .= ' '; + $levelid = 1; while ($levelid <= $use_multilevel) { $tabscript = array(); @@ -708,8 +710,10 @@ class FormTicket $sql .= $this->db->ifsql("ctc.rowid NOT IN (SELECT ctcfather.rowid FROM llx_c_ticket_category as ctcfather JOIN llx_c_ticket_category as ctcjoin ON ctcfather.rowid = ctcjoin.fk_parent)", "'NOTPARENT'", "'PARENT'")." as isparent"; $sql .= " FROM ".MAIN_DB_PREFIX."c_ticket_category as ctc"; $sql .= " JOIN ".MAIN_DB_PREFIX."c_ticket_category as ctcjoin ON ctc.fk_parent = ctcjoin.rowid"; - $sql .= " WHERE ctc.public = 1"; - $sql .= " AND ctc.active = 1"; + $sql .= " WHERE ctc.active = 1"; + if ($filtertype == 'public=1') { + $sql .= " AND ctc.public = 1"; + } if (!empty($arrayidused)) { $sql .= " AND ctc.fk_parent IN ( "; foreach ($arrayidused as $idused) { @@ -741,7 +745,7 @@ class FormTicket $iselected = $groupticketchild == $obj->code ?'selected':''; $stringtoprint .= ''; if (empty($tabscript[$groupcodefather])) { - $tabscript[$groupcodefather] = 'if($("#'.$htmlname.($levelid > 1 ?'_child_'.$levelid-1:'').'")[0].value == "'.dol_escape_js($groupcodefather).'"){ + $tabscript[$groupcodefather] = 'if ($("#'.$htmlname.($levelid > 1 ?'_child_'.$levelid-1:'').'")[0].value == "'.dol_escape_js($groupcodefather).'"){ $(".'.$htmlname.'_'.dol_escape_htmltag($fatherid).'_child_'.$levelid.'").show() console.log("We show childs tickets of '.$groupcodefather.' group ticket") }else{ @@ -756,23 +760,31 @@ class FormTicket dol_print_error($this->db); } $stringtoprint .=''; + //$stringtoprint .= ajax_combobox($htmlname.'_child_'.$levelid); $stringtoprint .=''; } + + $stringtoprint .= ajax_combobox($htmlname); + return $stringtoprint; } } diff --git a/htdocs/core/db/mysqli.class.php b/htdocs/core/db/mysqli.class.php index 343f4c8cc3e..36974d29218 100644 --- a/htdocs/core/db/mysqli.class.php +++ b/htdocs/core/db/mysqli.class.php @@ -266,7 +266,7 @@ class DoliDBMysqli extends DoliDB */ public function query($query, $usesavepoint = 0, $type = 'auto') { - global $conf; + global $conf, $dolibarr_main_db_readonly; $query = trim($query); @@ -278,6 +278,15 @@ class DoliDBMysqli extends DoliDB return false; // Return false = error if empty request } + if (!empty($dolibarr_main_db_readonly)) { + if (preg_match('/^(INSERT|UPDATE|REPLACE|DELETE|CREATE|ALTER|TRUNCATE|DROP)/i', $query)) { + $this->lasterror = 'Application in read-only mode'; + $this->lasterrno = 'APPREADONLY'; + $this->lastquery = $query; + return false; + } + } + if (!$this->database_name) { // Ordre SQL ne necessitant pas de connexion a une base (exemple: CREATE DATABASE) $ret = $this->db->query($query); diff --git a/htdocs/core/db/pgsql.class.php b/htdocs/core/db/pgsql.class.php index 5a9d47dc40c..0513226ac31 100644 --- a/htdocs/core/db/pgsql.class.php +++ b/htdocs/core/db/pgsql.class.php @@ -498,7 +498,7 @@ class DoliDBPgsql extends DoliDB */ public function query($query, $usesavepoint = 0, $type = 'auto') { - global $conf; + global $conf, $dolibarr_main_db_readonly; $query = trim($query); @@ -527,6 +527,18 @@ class DoliDBPgsql extends DoliDB $SYSLOG_SQL_LIMIT = 10000; // limit log to 10kb per line to limit DOS attacks dol_syslog('sql='.substr($query, 0, $SYSLOG_SQL_LIMIT), LOG_DEBUG); } + if (empty($query)) { + return false; // Return false = error if empty request + } + + if (!empty($dolibarr_main_db_readonly)) { + if (preg_match('/^(INSERT|UPDATE|REPLACE|DELETE|CREATE|ALTER|TRUNCATE|DROP)/i', $query)) { + $this->lasterror = 'Application in read-only mode'; + $this->lasterrno = 'APPREADONLY'; + $this->lastquery = $query; + return false; + } + } $ret = @pg_query($this->db, $query); diff --git a/htdocs/core/db/sqlite3.class.php b/htdocs/core/db/sqlite3.class.php index 563ccb19aac..395155973be 100644 --- a/htdocs/core/db/sqlite3.class.php +++ b/htdocs/core/db/sqlite3.class.php @@ -397,7 +397,7 @@ class DoliDBSqlite3 extends DoliDB */ public function query($query, $usesavepoint = 0, $type = 'auto') { - global $conf; + global $conf, $dolibarr_main_db_readonly; $ret = null; @@ -455,6 +455,15 @@ class DoliDBSqlite3 extends DoliDB return false; // Return false = error if empty request } + if (!empty($dolibarr_main_db_readonly)) { + if (preg_match('/^(INSERT|UPDATE|REPLACE|DELETE|CREATE|ALTER|TRUNCATE|DROP)/i', $query)) { + $this->lasterror = 'Application in read-only mode'; + $this->lasterrno = 'APPREADONLY'; + $this->lastquery = $query; + return false; + } + } + // Ordre SQL ne necessitant pas de connexion a une base (exemple: CREATE DATABASE) try { //$ret = $this->db->exec($query); diff --git a/htdocs/core/js/lib_foot.js.php b/htdocs/core/js/lib_foot.js.php index dce74d93653..beb2788ca24 100644 --- a/htdocs/core/js/lib_foot.js.php +++ b/htdocs/core/js/lib_foot.js.php @@ -47,6 +47,11 @@ session_cache_limiter('public'); require_once '../../main.inc.php'; + +/* + * View + */ + // Define javascript type top_httphead('text/javascript; charset=UTF-8'); // Important: Following code is to avoid page request by browser and PHP CPU at each Dolibarr page access. @@ -245,3 +250,59 @@ print 'jQuery(\'.clipboardCPButton, .clipboardCPValueToPrint\').click(function() lastchild.innerHTML = \''.dol_escape_js($langs->trans('CopiedToClipboard')).'\'; setTimeout(() => { lastchild.innerHTML = tmp; }, 1000); })'."\n"; + + +print "\n/* JS CODE TO ENABLE DIALOG CONFIRM POPUP ON ACTION BUTTON */\n"; +print '$( document ).ready(function() { + $(document).on("click", \'.butActionConfirm\', function(event) { + event.preventDefault(); + + // I don\'t use jquery $(this).data(\'confirm-url\'); to get $(this).attr(\'data-confirm-url\'); because .data() can doesn\'t work with ajax + var confirmUrl = $(this).attr(\'data-confirm-url\'); + var confirmTitle = $(this).attr(\'data-confirm-title\'); + var confirmContent = $(this).attr(\'data-confirm-content\'); + var confirmActionBtnLabel = $(this).attr(\'data-confirm-action-btn-label\'); + var confirmCancelBtnLabel = $(this).attr(\'data-confirm-cancel-btn-label\'); + + var confirmId = \'confirm-dialog-box\'; + if($(this).attr(\'id\') != undefined){ var confirmId = confirmId + "-" + $(this).attr(\'id\'); } + if($("#" + confirmId) != undefined) { $(\'#\' + confirmId).remove(); } + + // Create modal box + + var $confirmBox = $(\'
\', { + id: confirmId, + title: confirmTitle + }).appendTo(\'body\'); + + $confirmBox.dialog({ + autoOpen: true, + modal: false, + //width: Math.min($( window ).width() - 50, 1700), + dialogClass: \'confirm-dialog-box\', + buttons: [ + { + text: confirmActionBtnLabel, + "class": \'ui-state-information\', + click: function () { + window.location.replace(confirmUrl); + } + }, + { + text: confirmCancelBtnLabel, + "class": \'ui-state-information\', + click: function () { + $(this).dialog("close"); + } + } + ], + close: function( event, ui ) { + $(\'#\'+confirmBox).remove(); +}, + open: function( event, ui ) { + $confirmBox.html(confirmContent); +} + }); + }); +}); +'."\n"; diff --git a/htdocs/core/js/lib_head.js.php b/htdocs/core/js/lib_head.js.php index a56084d0f32..db63b1a75d4 100644 --- a/htdocs/core/js/lib_head.js.php +++ b/htdocs/core/js/lib_head.js.php @@ -50,6 +50,11 @@ session_cache_limiter('public'); require_once '../../main.inc.php'; + +/* + * View + */ + // Define javascript type top_httphead('text/javascript; charset=UTF-8'); // Important: Following code is to avoid page request by browser and PHP CPU at each Dolibarr page access. diff --git a/htdocs/core/js/lib_notification.js.php b/htdocs/core/js/lib_notification.js.php index dc46a5e2072..616463b944d 100644 --- a/htdocs/core/js/lib_notification.js.php +++ b/htdocs/core/js/lib_notification.js.php @@ -41,132 +41,147 @@ if (!defined('NOREQUIREHTML')) { define('NOREQUIREHTML', 1); } +session_cache_limiter('public'); + require_once '../../main.inc.php'; -if (!($_SERVER['HTTP_REFERER'] === $dolibarr_main_url_root.'/' || $_SERVER['HTTP_REFERER'] === $dolibarr_main_url_root.'/index.php' - || preg_match('/getmenu_div\.php/', $_SERVER['HTTP_REFERER']))) { - global $langs, $conf; - top_httphead('text/javascript; charset=UTF-8'); +/* + * View + */ - print 'var login = \''.$_SESSION['dol_login'].'\';'."\n"; - print 'var nowtime = Date.now();'; - print 'var time_auto_update = '.$conf->global->MAIN_BROWSER_NOTIFICATION_FREQUENCY.';'."\n"; // Always defined - print 'var time_js_next_test;'."\n"; - ?> - - /* Check if permission ok */ - if (Notification.permission !== "granted") { - console.log("Ask Notification.permission"); - Notification.requestPermission() - } - - /* Launch timer */ - // We set a delay before launching first test so next check will arrive after the time_auto_update compared to previous one. - //var time_first_execution = (time_auto_update + (time_js_next_test - nowtime)) * 1000; //need milliseconds - var time_first_execution = global->MAIN_BROWSER_NOTIFICATION_CHECK_FIRST_EXECUTION) ? 0 : $conf->global->MAIN_BROWSER_NOTIFICATION_CHECK_FIRST_EXECUTION); ?>; - if (login != '') { - setTimeout(first_execution, time_first_execution * 1000); - time_js_next_test = nowtime + time_first_execution; - console.log("Launch browser notif check: setTimeout is set to launch 'first_execution' function after a wait of time_first_execution="+time_first_execution+". nowtime (time php page generation) = "+nowtime+" time_js_next_check = "+time_js_next_test); - } //first run auto check +top_httphead('text/javascript; charset=UTF-8'); +// Important: Following code is to avoid page request by browser and PHP CPU at each Dolibarr page access. +if (empty($dolibarr_nocache)) { + header('Cache-Control: max-age=10800, public, must-revalidate'); +} else { + header('Cache-Control: no-cache'); +} - function first_execution() { - console.log("Call first_execution then set repeat time to time_auto_update = MAIN_BROWSER_NOTIFICATION_FREQUENCY = "+time_auto_update); - check_events(); //one check before setting the new time for other checks - setInterval(check_events, time_auto_update * 1000); // Set new time to run next check events - } +print "jQuery(document).ready(function () {\n"; - function check_events() { - if (Notification.permission === "granted") - { - time_js_next_test += time_auto_update; - console.log("Call ajax to check_events with time_js_next_test = "+time_js_next_test); +//print " console.log('referrer=".dol_escape_js($_SERVER['HTTP_REFERER'])."');\n"; - $.ajax("", { - type: "post", // Usually post or get - async: true, - data: { time_js_next_test: time_js_next_test, forcechecknow: 1, token: 'notrequired' }, - dataType: "json", - success: function (result) { - //console.log(result); - var arrayofpastreminders = Object.values(result.pastreminders); - if (arrayofpastreminders && arrayofpastreminders.length > 0) { - console.log("Retrieved "+arrayofpastreminders.length+" reminders to do."); - var audio = null; - global->AGENDA_REMINDER_BROWSER_SOUND)) { - print 'audio = new Audio(\''.DOL_URL_ROOT.'/theme/common/sound/notification_agenda.wav\');'; +print ' var nowtime = Date.now();'; +print ' var time_auto_update = '.$conf->global->MAIN_BROWSER_NOTIFICATION_FREQUENCY.';'."\n"; // Always defined +print ' var time_js_next_test;'."\n"; +?> + +/* Check if permission ok */ +if (Notification.permission !== "granted") { + console.log("Ask Notification.permission"); + Notification.requestPermission() +} + +/* Launch timer */ + +// We set a delay before launching first test so next check will arrive after the time_auto_update compared to previous one. +//var time_first_execution = (time_auto_update + (time_js_next_test - nowtime)) * 1000; //need milliseconds +var time_first_execution = global->MAIN_BROWSER_NOTIFICATION_CHECK_FIRST_EXECUTION) ? 0 : $conf->global->MAIN_BROWSER_NOTIFICATION_CHECK_FIRST_EXECUTION); ?>; + +setTimeout(first_execution, time_first_execution * 1000); +time_js_next_test = nowtime + time_first_execution; +console.log("Launch browser notif check: setTimeout is set to launch 'first_execution' function after a wait of time_first_execution="+time_first_execution+". nowtime (time php page generation) = "+nowtime+" time_js_next_check = "+time_js_next_test); + + +function first_execution() { + console.log("Call first_execution then set repeat time to time_auto_update = MAIN_BROWSER_NOTIFICATION_FREQUENCY = "+time_auto_update); + check_events(); //one check before setting the new time for other checks + setInterval(check_events, time_auto_update * 1000); // Set new time to run next check events +} + +function check_events() { + if (Notification.permission === "granted") + { + time_js_next_test += time_auto_update; + console.log("Call ajax to check_events with time_js_next_test = "+time_js_next_test); + + $.ajax("", { + type: "post", // Usually post or get + async: true, + data: { time_js_next_test: time_js_next_test, forcechecknow: 1, token: 'notrequired' }, + dataType: "json", + success: function (result) { + //console.log(result); + var arrayofpastreminders = Object.values(result.pastreminders); + if (arrayofpastreminders && arrayofpastreminders.length > 0) { + console.log("Retrieved "+arrayofpastreminders.length+" reminders to do."); + var audio = null; + global->AGENDA_REMINDER_BROWSER_SOUND)) { + print 'audio = new Audio(\''.DOL_URL_ROOT.'/theme/common/sound/notification_agenda.wav\');'; + } + ?> + var listofreminderids = ''; + var noti = [] + + $.each(arrayofpastreminders, function (index, value) { + console.log(value); + var url = "notdefined"; + var title = "Not defined"; + var body = value.label; + if (value.type == 'agenda' && value.location != null && value.location != '') { + body += '\n' + value.location; } - ?> - var listofreminderids = ''; - var noti = [] - $.each(arrayofpastreminders, function (index, value) { - console.log(value); - var url = "notdefined"; - var title = "Not defined"; - var body = value.label; - if (value.type == 'agenda' && value.location != null && value.location != '') { - body += '\n' + value.location; - } + if (value.type == 'agenda' && (value.event_date_start_formated != null || value.event_date_start_formated['event_date_start'] != '')) { + body += '\n' + value.event_date_start_formated; + } - if (value.type == 'agenda' && (value.event_date_start_formated != null || value.event_date_start_formated['event_date_start'] != '')) { - body += '\n' + value.event_date_start_formated; - } + if (value.type == 'agenda') + { + url = '' + value.id_agenda; + title = 'trans('EventReminder')) ?>'; + } + var extra = { + icon: '', + //image: '', + body: body, + tag: value.id_agenda, + requireInteraction: true + }; - if (value.type == 'agenda') - { - url = '' + value.id_agenda; - title = 'trans('EventReminder')) ?>'; - } - var extra = { - icon: '', - //image: '', - body: body, - tag: value.id_agenda, - requireInteraction: true + // We release the notify + console.log("Send notification on browser"); + noti[index] = new Notification(title, extra); + if (index==0 && audio) + { + audio.play(); + } + + if (noti[index]) { + noti[index].onclick = function (event) { + console.log("A click on notification on browser has been done"); + event.preventDefault(); // prevent the browser from focusing the Notification's tab + window.focus(); + window.open(url, '_blank'); + noti[index].close(); }; - // We release the notify - console.log("Send notification on browser"); - noti[index] = new Notification(title, extra); - if (index==0 && audio) - { - audio.play(); - } + listofreminderids = (listofreminderids == '' ? '' : listofreminderids + ',') + value.id_reminder + } + }); - if (noti[index]) { - noti[index].onclick = function (event) { - console.log("A click on notification on browser has been done"); - event.preventDefault(); // prevent the browser from focusing the Notification's tab - window.focus(); - window.open(url, '_blank'); - noti[index].close(); - }; - - listofreminderids = (listofreminderids == '' ? '' : listofreminderids + ',') + value.id_reminder - } - }); - - // Update status of all notifications we sent on browser (listofreminderids) - console.log("Flag notification as done for listofreminderids="+listofreminderids); - $.ajax(""+listofreminderids, { - type: "POST", // Usually post or get - async: true, - data: { time_js_next_test: time_js_next_test, token: 'notrequired' } - }); - } else { - console.log("No reminder to do found, next search at "+time_js_next_test); - } + // Update status of all notifications we sent on browser (listofreminderids) + console.log("Flag notification as done for listofreminderids="+listofreminderids); + $.ajax(""+listofreminderids, { + type: "POST", // Usually post or get + async: true, + data: { time_js_next_test: time_js_next_test, token: 'notrequired' } + }); + } else { + console.log("No reminder to do found, next search at "+time_js_next_test); } - }); - } - else - { - console.log("Cancel check_events. Useless because javascript Notification.permission is "+Notification.permission+" (blocked manualy or web site is not https)."); - } + } + }); + } + else + { + console.log("Cancel check_events. Useless because javascript Notification.permission is "+Notification.permission+" (blocked manualy or web site is not https)."); } - id > 0) { $ecmfile->src_object_id = $object->id; - $ecmfile->src_object_type = $object->table_element; + if (isset($object->table_element)) { + $ecmfile->src_object_type = $object->table_element; + } else { + dol_syslog('Error: object ' . get_class($object) . ' has no table_element attribute.'); + return -1; + } + if (isset($object->src_object_description)) $ecmfile->description = $object->src_object_description; + if (isset($object->src_object_keywords)) $ecmfile->keywords = $object->src_object_keywords; } if ($setsharekey) { diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 28c553d747c..6b57ea2b63d 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -775,22 +775,48 @@ function checkVal($out = '', $check = 'alphanohtml', $filter = null, $options = } break; case 'restricthtml': // Recommended for most html textarea + case 'restricthtmlallowunvalid': do { $oldstringtoclean = $out; + if (!empty($out) && !empty($conf->global->MAIN_RESTRICTHTML_ONLY_VALID_HTML) && $check != 'restricthtmlallowunvalid') { + try { + $dom = new DOMDocument; + // Add a trick to solve pb with text without parent tag + // like '

Foo

bar

' that ends up with '

Foo

bar

' + // like 'abc' that ends up with '

abc

' + $out = '
'.$out.'
'; + + $dom->loadHTML($out, LIBXML_ERR_NONE|LIBXML_HTML_NOIMPLIED|LIBXML_HTML_NODEFDTD|LIBXML_NONET|LIBXML_NOWARNING|LIBXML_NOXMLDECL); + $out = trim($dom->saveHTML()); + + // Remove the trick added to solve pb with text without parent tag + $out = preg_replace('/^
/', '', $out); + $out = preg_replace('/<\/div>$/', '', $out); + } catch (Exception $e) { + //print $e->getMessage(); + return 'InvalidHTMLString'; + } + } + + // Ckeditor use the numeric entitic for apostrophe so we force it to text entity (all other special chars are correctly + // encoded using text entities). This is a fix for CKeditor (CKeditor still encode in HTML4 instead of HTML5). + $out = preg_replace('/'/i', ''', $out); + // We replace chars from a/A to z/Z encoded with numeric HTML entities with the real char so we won't loose the chars at the next step. // No need to use a loop here, this step is not to sanitize (this is done at next step, this is to try to save chars, even if they are // using a non coventionnel way to be encoded, to not have them sanitized just after) $out = preg_replace_callback('/&#(x?[0-9][0-9a-f]+;?)/i', 'realCharForNumericEntities', $out); - // Now we remove all remaining HTML entities staring with a number. We don't want such entities. + // Now we remove all remaining HTML entities starting with a number. We don't want such entities. $out = preg_replace('/&#x?[0-9]+/i', '', $out); // For example if we have javascript with an entities without the ; to hide the 'a' of 'javascript'. $out = dol_string_onlythesehtmltags($out, 0, 1, 1); // We should also exclude non expected attributes if (!empty($conf->global->MAIN_RESTRICTHTML_REMOVE_ALSO_BAD_ATTRIBUTES)) { - $out = dol_string_onlythesehtmlattributes($out); + // Warning, the function may add a LF so we are forced to trim to compare with old $out without having always a difference and an infinit loop. + $out = trim(dol_string_onlythesehtmlattributes($out)); } } while ($oldstringtoclean != $out); break; @@ -1025,10 +1051,11 @@ function dol_size($size, $type = '') /** - * Clean a string to use it as a file name + * Clean a string to use it as a file name. + * Replace also '--' and ' -' strings, they are used for parameters separation. * * @param string $str String to clean - * @param string $newstr String to replace bad chars with + * @param string $newstr String to replace bad chars with. * @param int $unaccent 1=Remove also accent (default), 0 do not remove them * @return string String cleaned (a-zA-Z_) * @@ -1040,12 +1067,16 @@ function dol_sanitizeFileName($str, $newstr = '_', $unaccent = 1) // Char '>' '<' '|' '$' and ';' are special chars for shells. // Char '/' and '\' are file delimiters. // -- car can be used into filename to inject special paramaters like --use-compress-program to make command with file as parameter making remote execution of command - $filesystem_forbidden_chars = array('<', '>', '/', '\\', '?', '*', '|', '"', ':', '°', '$', ';', '--'); - return dol_string_nospecial($unaccent ? dol_string_unaccent($str) : $str, $newstr, $filesystem_forbidden_chars); + $filesystem_forbidden_chars = array('<', '>', '/', '\\', '?', '*', '|', '"', ':', '°', '$', ';'); + $tmp = dol_string_nospecial($unaccent ? dol_string_unaccent($str) : $str, $newstr, $filesystem_forbidden_chars); + $tmp = preg_replace('/\-\-+/', '_', $tmp); + $tmp = preg_replace('/\s+\-/', ' _', $tmp); + return $tmp; } /** - * Clean a string to use it as a path name + * Clean a string to use it as a path name. + * Replace also '--' and ' -' strings, they are used for parameters separation. * * @param string $str String to clean * @param string $newstr String to replace bad chars with @@ -1057,7 +1088,10 @@ function dol_sanitizeFileName($str, $newstr = '_', $unaccent = 1) function dol_sanitizePathName($str, $newstr = '_', $unaccent = 1) { $filesystem_forbidden_chars = array('<', '>', '?', '*', '|', '"', '°'); - return dol_string_nospecial($unaccent ? dol_string_unaccent($str) : $str, $newstr, $filesystem_forbidden_chars); + $tmp = dol_string_nospecial($unaccent ? dol_string_unaccent($str) : $str, $newstr, $filesystem_forbidden_chars); + $tmp = preg_replace('/\-\-+/', '_', $tmp); + $tmp = preg_replace('/\s+\-/', ' _', $tmp); + return $tmp; } /** @@ -1153,21 +1187,26 @@ function dol_string_unaccent($str) * Clean a string from all punctuation characters to use it as a ref or login. * This is a more complete function than dol_sanitizeFileName. * - * @param string $str String to clean - * @param string $newstr String to replace forbidden chars with - * @param array $badcharstoreplace List of forbidden characters - * @return string Cleaned string + * @param string $str String to clean + * @param string $newstr String to replace forbidden chars with + * @param array|string $badcharstoreplace List of forbidden characters to replace + * @param array|string $badcharstoremove List of forbidden characters to remove + * @return string Cleaned string * * @see dol_sanitizeFilename(), dol_string_unaccent(), dol_string_nounprintableascii() */ -function dol_string_nospecial($str, $newstr = '_', $badcharstoreplace = '') +function dol_string_nospecial($str, $newstr = '_', $badcharstoreplace = '', $badcharstoremove = '') { $forbidden_chars_to_replace = array(" ", "'", "/", "\\", ":", "*", "?", "\"", "<", ">", "|", "[", "]", ",", ";", "=", '°'); // more complete than dol_sanitizeFileName $forbidden_chars_to_remove = array(); + //$forbidden_chars_to_remove=array("(",")"); + if (is_array($badcharstoreplace)) { $forbidden_chars_to_replace = $badcharstoreplace; } - //$forbidden_chars_to_remove=array("(",")"); + if (is_array($badcharstoremove)) { + $forbidden_chars_to_remove = $badcharstoremove; + } return str_replace($forbidden_chars_to_replace, $newstr, str_replace($forbidden_chars_to_remove, "", $str)); } @@ -3521,8 +3560,8 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ 'github', 'jabber', 'skype', 'twitter', 'facebook', 'linkedin', 'instagram', 'snapchat', 'youtube', 'google-plus-g', 'whatsapp', 'chevron-left', 'chevron-right', 'chevron-down', 'chevron-top', 'commercial', 'companies', 'generic', 'home', 'hrm', 'members', 'products', 'invoicing', - 'partnership', 'payment', 'pencil-ruler', 'preview', 'project', 'projectpub', 'projecttask', 'question', 'refresh', 'salary', 'shipment', - 'supplier_invoice', 'supplier_invoicea', 'supplier_invoicer', 'supplier_invoiced', + 'partnership', 'payment', 'pencil-ruler', 'preview', 'project', 'projectpub', 'projecttask', 'question', 'refresh', 'region', + 'salary', 'shipment', 'state', 'supplier_invoice', 'supplier_invoicea', 'supplier_invoicer', 'supplier_invoiced', 'technic', 'ticket', 'error', 'warning', 'recent', 'reception', 'recruitmentcandidature', 'recruitmentjobposition', 'resource', @@ -3571,8 +3610,8 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ 'partnership'=>'handshake', 'payment'=>'money-check-alt', 'phoning'=>'phone', 'phoning_mobile'=>'mobile-alt', 'phoning_fax'=>'fax', 'previous'=>'arrow-alt-circle-left', 'printer'=>'print', 'product'=>'cube', 'service'=>'concierge-bell', 'recent' => 'question', 'reception'=>'dolly', 'recruitmentjobposition'=>'id-card-alt', 'recruitmentcandidature'=>'id-badge', 'resize'=>'crop', 'supplier_order'=>'dol-order_supplier', 'supplier_proposal'=>'file-signature', - 'refresh'=>'redo', 'resource'=>'laptop-house', - 'security'=>'key', 'salary'=>'wallet', 'shipment'=>'dolly', 'stock'=>'box-open', 'stats' => 'chart-bar', 'split'=>'code-branch', 'stripe'=>'stripe-s', + 'refresh'=>'redo', 'region'=>'map-marked', 'resource'=>'laptop-house', + 'state'=>'map-marked-alt', 'security'=>'key', 'salary'=>'wallet', 'shipment'=>'dolly', 'stock'=>'box-open', 'stats' => 'chart-bar', 'split'=>'code-branch', 'stripe'=>'stripe-s', 'supplier'=>'building', 'supplier_invoice'=>'file-invoice-dollar', 'technic'=>'cogs', 'ticket'=>'ticket-alt', 'timespent'=>'clock', 'title_setup'=>'tools', 'title_accountancy'=>'money-check-alt', 'title_bank'=>'university', 'title_hrm'=>'umbrella-beach', 'title_agenda'=>'calendar-alt', @@ -3610,13 +3649,13 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ } if (in_array($pictowithouttext, array('dollyrevert', 'member', 'members', 'contract', 'group', 'resource', 'shipment'))) { - $morecss = 'em092'; + $morecss .= ' em092'; } if (in_array($pictowithouttext, array('conferenceorbooth', 'collab', 'eventorganization', 'holiday', 'info', 'project', 'workstation'))) { - $morecss = 'em088'; + $morecss .= ' em088'; } if (in_array($pictowithouttext, array('asset', 'intervention', 'payment', 'loan', 'partnership', 'stock', 'technic'))) { - $morecss = 'em080'; + $morecss .= ' em080'; } // Define $marginleftonlyshort @@ -3673,7 +3712,7 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ 'partnership'=>'#6c6aa8', 'playdisabled'=>'#ccc', 'printer'=>'#444', 'projectpub'=>'#986c6a', 'reception'=>'#a69944', 'resize'=>'#444', 'rss'=>'#cba', //'shipment'=>'#a69944', 'security'=>'#999', 'stats'=>'#444', 'switch_off'=>'#999', 'technic'=>'#999', 'timespent'=>'#555', - 'uncheck'=>'#800', 'uparrow'=>'#555', 'user-cog'=>'#999', 'country'=>'#aaa', 'globe-americas'=>'#aaa', + 'uncheck'=>'#800', 'uparrow'=>'#555', 'user-cog'=>'#999', 'country'=>'#aaa', 'globe-americas'=>'#aaa', 'region'=>'#aaa', 'state'=>'#aaa', 'website'=>'#304', 'workstation'=>'#a69944' ); if (isset($arrayconvpictotocolor[$pictowithouttext])) { @@ -3956,7 +3995,7 @@ function img_edit($titlealt = 'default', $float = 0, $other = '') * @param string $other Add more attributes on img * @return string Return tag img */ -function img_view($titlealt = 'default', $float = 0, $other = '') +function img_view($titlealt = 'default', $float = 0, $other = 'class="valignmiddle"') { global $langs; @@ -5470,7 +5509,7 @@ function get_localtax($vatrate, $local, $thirdparty_buyer = "", $thirdparty_sell } else { $sql .= " AND t.recuperableonly = '".$db->escape($vatnpr)."'"; } - dol_syslog("get_localtax", LOG_DEBUG); + $resql = $db->query($sql); if ($resql) { @@ -6298,7 +6337,7 @@ function dol_string_onlythesehtmltags($stringtoclean, $cleanalsosomestyles = 1, $stringtoclean = preg_replace('/:|�+58|:/i', '', $stringtoclean); // refused string ':' encoded (no reason to have a : encoded like this) to disable 'javascript:...' $stringtoclean = preg_replace('/javascript\s*:/i', '', $stringtoclean); - $temp = strip_tags($stringtoclean, $allowed_tags_string); + $temp = strip_tags($stringtoclean, $allowed_tags_string); // Warning: This remove also undesired changing string obfuscated with that pass injection detection into harmfull string if ($cleanalsosomestyles) { // Clean for remaining html tags $temp = preg_replace('/position\s*:\s*(absolute|fixed)\s*!\s*important/i', '', $temp); // Note: If hacker try to introduce css comment into string to bypass this regex, the string must also be encoded by the dol_htmlentitiesbr during output so it become harmless @@ -6348,8 +6387,8 @@ function dol_string_onlythesehtmlattributes($stringtoclean, $allowed_attributes } $return = $dom->saveHTML(); - //$return = 'aaaa

bb

ssdd

'."\n

aaa

aa

bb

"; + $return = preg_replace('/^/', '', $return); $return = preg_replace('/<\/body><\/html>$/', '', $return); return $return; @@ -7435,7 +7474,7 @@ function print_date_range($date_start, $date_end, $format = '', $outputlangs = ' * @param int $date_end End date * @param string $format Output format * @param Translate $outputlangs Output language - * @param integer $withparenthesis 1=Add parenthesis, 0=non parenthesis + * @param integer $withparenthesis 1=Add parenthesis, 0=no parenthesis * @return string String */ function get_date_range($date_start, $date_end, $format = '', $outputlangs = '', $withparenthesis = 1) @@ -8087,7 +8126,7 @@ function picto_from_langcode($codelang, $moreatt = '') } if ($codelang == 'auto') { - return ''; + return ''; } $langtocountryflag = array( @@ -9734,6 +9773,8 @@ function dolGetStatus($statusLabel = '', $statusLabelShort = '', $html = '', $st */ function dolGetButtonAction($label, $html = '', $actionType = 'default', $url = '', $id = '', $userRight = 1, $params = array()) { + global $hookmanager, $action, $object, $langs; + $class = 'butAction'; if ($actionType == 'danger' || $actionType == 'delete') { $class = 'butActionDelete'; @@ -9774,12 +9815,27 @@ function dolGetButtonAction($label, $html = '', $actionType = 'default', $url = } } + // Js Confirm button + if (!empty($params['confirm'])) { + if (!is_array($params['confirm'])) { + $params['confirm'] = array( + 'url' => $url . (strpos($url, '?') > 0 ? '&' : '?') . 'confirm=yes' + ); + } + + // for js desabled compatibility set $url as call to confirm action and $params['confirm']['url'] to confirmed action + $attr['data-confirm-url'] = $params['confirm']['url']; + $attr['data-confirm-title'] = !empty($params['confirm']['title']) ? $params['confirm']['title'] : $langs->trans('ConfirmBtnCommonTitle', $label); + $attr['data-confirm-content'] = !empty($params['confirm']['content']) ? $params['confirm']['content'] : $langs->trans('ConfirmBtnCommonContent', $label); + $attr['data-confirm-action-btn-label'] = !empty($params['confirm']['action-btn-label']) ? $params['confirm']['action-btn-label'] : $langs->trans('Confirm'); + $attr['data-confirm-cancel-btn-label'] = !empty($params['confirm']['cancel-btn-label']) ? $params['confirm']['cancel-btn-label'] : $langs->trans('CloseDialog'); + $attr['class'].= ' butActionConfirm'; + } + if (isset($attr['href']) && empty($attr['href'])) { unset($attr['href']); } - // TODO : add a hook - // escape all attribute $attr = array_map('dol_escape_htmltag', $attr); @@ -9792,7 +9848,29 @@ function dolGetButtonAction($label, $html = '', $actionType = 'default', $url = $tag = !empty($attr['href']) ? 'a' : 'span'; - return '<'.$tag.' '.$compiledAttributes.'>'.$html.''; + + $parameters = array( + 'TCompiledAttr' => $TCompiledAttr, + 'compiledAttributes' => $compiledAttributes, + 'attr' => $attr, + 'tag' => $tag, + 'label' => $label, + 'html' => $html, + 'actionType' => $actionType, + 'url' => $url, + 'id' => $id, + 'userRight' => $userRight, + 'params' => $params + ); + + $reshook = $hookmanager->executeHooks('dolGetButtonAction', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks + if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + + if (empty($reshook)) { + return '<' . $tag . ' ' . $compiledAttributes . '>' . $html . ''; + } else { + return $hookmanager->resPrint; + } } /** diff --git a/htdocs/core/lib/security2.lib.php b/htdocs/core/lib/security2.lib.php index 523b8ccf2cb..4408e2ccd52 100644 --- a/htdocs/core/lib/security2.lib.php +++ b/htdocs/core/lib/security2.lib.php @@ -476,8 +476,8 @@ function getRandomPassword($generic = false, $replaceambiguouschars = null, $len } $generated_password = str_shuffle($randomCode); - } else // Old platform, non cryptographic random - { + } else { + // Old platform, non cryptographic random $max = strlen($lowercase) - 1; for ($x = 0; $x < $nbofchar; $x++) { $tmp = mt_rand(0, $max); diff --git a/htdocs/core/lib/usergroups.lib.php b/htdocs/core/lib/usergroups.lib.php index cd9ae5ad297..29f208e5254 100644 --- a/htdocs/core/lib/usergroups.lib.php +++ b/htdocs/core/lib/usergroups.lib.php @@ -906,7 +906,7 @@ function showSkins($fuser, $edit = 0, $foruserprofile = false) } // Use MAIN_OPTIMIZEFORTEXTBROWSER - if ($foruserprofile) { + if ($foruserprofile && !empty($fuser->conf->MAIN_OPTIMIZEFORTEXTBROWSER)) { //$default=yn($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER); $default = $langs->trans('No'); print '
- +
'; $coldisplay++; if (($line->info_bits & 2) == 2 || !empty($disableedit)) { @@ -365,7 +373,7 @@ if ($this->statut == 0 && ($object_rights->creer) && $action != 'selectlines') { print ''; $coldisplay++; - if (($line->fk_prev_id == null) && empty($disableremove)) { //La suppression n'est autorisée que si il n'y a pas de ligne dans une précédente situation + if (!$situationinvoicelinewithparent && empty($disableremove)) { // For situation invoice, deletion is not possible if there is a parent company. print 'id.'">'; print img_delete(); print ''; diff --git a/htdocs/core/tpl/passwordforgotten.tpl.php b/htdocs/core/tpl/passwordforgotten.tpl.php index 9e0a222725b..8964145b430 100644 --- a/htdocs/core/tpl/passwordforgotten.tpl.php +++ b/htdocs/core/tpl/passwordforgotten.tpl.php @@ -216,7 +216,7 @@ if (!empty($morelogincontent)) { -
'; - print '
'; + print ''; + print '
'; - print ''; + '; - print ''; + print ''; - print dol_get_fiche_end(); + print dol_get_fiche_end(); } } else { dol_print_error($db); @@ -2511,9 +2511,11 @@ if ($action == 'create') { exit(1); } + /* * Action bar */ + print '
'; if ($action != 'create' && $action != 'edit') { diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 9592f9548af..b3601c00deb 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -2119,7 +2119,7 @@ class ExpenseReport extends CommonObject $this->line->fk_ecm_files = $fk_ecm_files; - $this->line->id = $rowid; + $this->line->id = ((int) $rowid); // Select des infos sur le type fees $sql = "SELECT c.code as code_type_fees, c.label as libelle_type_fees"; @@ -2703,10 +2703,10 @@ class ExpenseReportLine $sql .= " '".$this->db->escape(empty($this->vat_src_code) ? '' : $this->vat_src_code)."',"; $sql .= " '".$this->db->escape($this->comments)."',"; $sql .= " ".((float) $this->qty).","; - $sql .= " ".((int) $this->value_unit).","; - $sql .= " ".price2num($this->total_ht).","; - $sql .= " ".price2num($this->total_tva).","; - $sql .= " ".price2num($this->total_ttc).","; + $sql .= " ".((float) $this->value_unit).","; + $sql .= " ".((float) price2num($this->total_ht)).","; + $sql .= " ".((float) price2num($this->total_tva)).","; + $sql .= " ".((float) price2num($this->total_ttc)).","; $sql .= " '".$this->db->idate($this->date)."',"; $sql .= " ".(empty($this->rule_warning_message) ? 'null' : "'".$this->db->escape($this->rule_warning_message)."'").","; $sql .= " ".((int) $this->fk_c_exp_tax_cat).","; @@ -2811,26 +2811,26 @@ class ExpenseReportLine // Update line in database $sql = "UPDATE ".MAIN_DB_PREFIX."expensereport_det SET"; $sql .= " comments='".$this->db->escape($this->comments)."'"; - $sql .= ",value_unit = ".((float) $this->value_unit); - $sql .= ",qty=".((float) $this->qty); - $sql .= ",date='".$this->db->idate($this->date)."'"; - $sql .= ",total_ht=".((float) price2num($this->total_ht, 'MT')).""; - $sql .= ",total_tva=".((float) price2num($this->total_tva, 'MT')).""; - $sql .= ",total_ttc=".((float) price2num($this->total_ttc, 'MT')).""; - $sql .= ",tva_tx=".((float) $this->vatrate); - $sql .= ",vat_src_code='".$this->db->escape($this->vat_src_code)."'"; - $sql .= ",rule_warning_message='".$this->db->escape($this->rule_warning_message)."'"; - $sql .= ",fk_c_exp_tax_cat=".$this->db->escape($this->fk_c_exp_tax_cat); - $sql .= ",fk_ecm_files=".($this->fk_ecm_files > 0 ? ((int) $this->fk_ecm_files) : 'null'); + $sql .= ", value_unit = ".((float) $this->value_unit); + $sql .= ", qty=".((float) $this->qty); + $sql .= ", date='".$this->db->idate($this->date)."'"; + $sql .= ", total_ht=".((float) price2num($this->total_ht, 'MT')).""; + $sql .= ", total_tva=".((float) price2num($this->total_tva, 'MT')).""; + $sql .= ", total_ttc=".((float) price2num($this->total_ttc, 'MT')).""; + $sql .= ", tva_tx=".((float) $this->vatrate); + $sql .= ", vat_src_code='".$this->db->escape($this->vat_src_code)."'"; + $sql .= ", rule_warning_message='".$this->db->escape($this->rule_warning_message)."'"; + $sql .= ", fk_c_exp_tax_cat=".$this->db->escape($this->fk_c_exp_tax_cat); + $sql .= ", fk_ecm_files=".($this->fk_ecm_files > 0 ? ((int) $this->fk_ecm_files) : 'null'); if ($this->fk_c_type_fees) { - $sql .= ",fk_c_type_fees = ".((int) $this->fk_c_type_fees); + $sql .= ", fk_c_type_fees = ".((int) $this->fk_c_type_fees); } else { - $sql .= ",fk_c_type_fees=null"; + $sql .= ", fk_c_type_fees=null"; } if ($this->fk_project > 0) { - $sql .= ",fk_projet=".((int) $this->fk_project); + $sql .= ", fk_projet=".((int) $this->fk_project); } else { - $sql .= ",fk_projet=null"; + $sql .= ", fk_projet=null"; } $sql .= " WHERE rowid = ".((int) ($this->rowid ? $this->rowid : $this->id)); diff --git a/htdocs/expensereport/index.php b/htdocs/expensereport/index.php index 8198883e58f..c87cc08fb40 100644 --- a/htdocs/expensereport/index.php +++ b/htdocs/expensereport/index.php @@ -1,6 +1,6 @@ - * Copyright (C) 2004-2015 Laurent Destailleur + * Copyright (C) 2004-2021 Laurent Destailleur * Copyright (C) 2004 Eric Seigne * Copyright (C) 2005-2011 Regis Houssin * Copyright (C) 2015 Alexandre Spangaro @@ -132,6 +132,30 @@ foreach ($listoftype as $code => $label) { $dataseries[] = array($label, (isset($somme[$code]) ? (int) $somme[$code] : 0)); } +// Sort array with most important first +$dataseries = dol_sort_array($dataseries, 1, 'desc'); + +// Merge all entrie after the $KEEPNFIRST one into one entry called "Other..." (to avoid to have too much entries in graphic). +$KEEPNFIRST = 7; // Keep first $KEEPNFIRST one + 1 with the remain +$i = 0; +if (count($dataseries) > ($KEEPNFIRST + 1)) { + foreach ($dataseries as $key => $val) { + if ($i < $KEEPNFIRST) { + $i++; + continue; + } + // Here $key = $KEEPNFIRST + $dataseries[$KEEPNFIRST][0] = $langs->trans("Others").'...'; + if ($key == $KEEPNFIRST) { + $i++; + continue; + } + $dataseries[$KEEPNFIRST][1] += $dataseries[$key][1]; + unset($dataseries[$key]); + $i++; + } +} + if ($conf->use_javascript_ajax) { print ''; @@ -221,10 +245,10 @@ if ($result) { $userstatic->photo = $obj->photo; print ''; - print ''.$expensereportstatic->getNomUrl(1).''; - print ''.$userstatic->getNomUrl(-1).''; - print ''.price($obj->total_ht).''; - print ''.price($obj->total_ttc).''; + print ''.$expensereportstatic->getNomUrl(1).''; + print ''.$userstatic->getNomUrl(-1).''; + print ''.price($obj->total_ht).''; + print ''.price($obj->total_ttc).''; print ''.dol_print_date($db->jdate($obj->dm), 'day').''; print ''; print $expensereportstatic->getLibStatut(3); diff --git a/htdocs/expensereport/note.php b/htdocs/expensereport/note.php index b0156c6a475..5649f2144e4 100644 --- a/htdocs/expensereport/note.php +++ b/htdocs/expensereport/note.php @@ -44,6 +44,8 @@ $socid = 0; if ($user->socid) { $socid = $user->socid; } +$hookmanager->initHooks(array('expensereportnote')); + $result = restrictedArea($user, 'expensereport', $id, 'expensereport'); @@ -68,12 +70,17 @@ if ($object->id > 0) { } } - /* * Actions */ -include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once +$reshook = $hookmanager->executeHooks('doActions', array(), $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) { + setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); +} +if (empty($reshook)) { + include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once +} /* diff --git a/htdocs/expensereport/tpl/expensereport_linktofile.tpl.php b/htdocs/expensereport/tpl/expensereport_linktofile.tpl.php index 42be03263a8..9264400a71f 100644 --- a/htdocs/expensereport/tpl/expensereport_linktofile.tpl.php +++ b/htdocs/expensereport/tpl/expensereport_linktofile.tpl.php @@ -72,7 +72,7 @@ if (empty($conf->global->EXPENSEREPORT_DISABLE_ATTACHMENT_ON_LINES)) { } // If the preview file is found if (file_exists($fileimage)) { - $thumbshown = ''; + $thumbshown = ''; } } } diff --git a/htdocs/fichinter/note.php b/htdocs/fichinter/note.php index fcc790bf8c2..01a8d82cf5a 100644 --- a/htdocs/fichinter/note.php +++ b/htdocs/fichinter/note.php @@ -42,6 +42,7 @@ $action = GETPOST('action', 'aZ09'); if ($user->socid) { $socid = $user->socid; } +$hookmanager->initHooks(array('fichinternote')); $result = restrictedArea($user, 'ficheinter', $id, 'fichinter'); $object = new Fichinter($db); @@ -53,7 +54,13 @@ $permissionnote = $user->rights->ficheinter->creer; // Used by the include of ac * Actions */ -include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not includ_once +$reshook = $hookmanager->executeHooks('doActions', array(), $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) { + setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); +} +if (empty($reshook)) { + include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once +} /* diff --git a/htdocs/fourn/ajax/getSupplierPrices.php b/htdocs/fourn/ajax/getSupplierPrices.php index e0cd9beff0c..889484cec44 100644 --- a/htdocs/fourn/ajax/getSupplierPrices.php +++ b/htdocs/fourn/ajax/getSupplierPrices.php @@ -43,7 +43,7 @@ $idprod = GETPOST('idprod', 'int'); $prices = array(); // Load translation files required by the page -$langs->loadLangs(array("stocks", "margins")); +$langs->loadLangs(array("stocks", "margins", "products")); /* diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index daa943ffee9..f315661b90c 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -3017,13 +3017,13 @@ class CommandeFournisseur extends CommonOrder $response->warning_delay = $conf->commande->fournisseur->warning_delay / 60 / 60 / 24; $response->label = $langs->trans("SuppliersOrdersToProcess"); $response->labelShort = $langs->trans("Opened"); - $response->url = DOL_URL_ROOT.'/fourn/commande/list.php?statut=1,2&mainmenu=commercial&leftmenu=orders_suppliers'; + $response->url = DOL_URL_ROOT.'/fourn/commande/list.php?search_status=1,2&mainmenu=commercial&leftmenu=orders_suppliers'; $response->img = img_object('', "order"); if ($mode === 'awaiting') { $response->label = $langs->trans("SuppliersOrdersAwaitingReception"); $response->labelShort = $langs->trans("AwaitingReception"); - $response->url = DOL_URL_ROOT.'/fourn/commande/list.php?statut=3,4&mainmenu=commercial&leftmenu=orders_suppliers'; + $response->url = DOL_URL_ROOT.'/fourn/commande/list.php?search_status=3,4&mainmenu=commercial&leftmenu=orders_suppliers'; } while ($obj = $this->db->fetch_object($resql)) { diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php index 3c6151ef349..7b5bbbc50c5 100644 --- a/htdocs/fourn/class/fournisseur.facture.class.php +++ b/htdocs/fourn/class/fournisseur.facture.class.php @@ -3550,7 +3550,7 @@ class SupplierInvoiceLine extends CommonObjectLine $this->error = 'ErrorProductTypeMustBe0orMore'; return -1; } - if (!empty($this->fk_product)) { + if (!empty($this->fk_product) && $this->fk_product > 0) { // Check product exists $result = Product::isExistingObject('product', $this->fk_product); if ($result <= 0) { @@ -3583,7 +3583,7 @@ class SupplierInvoiceLine extends CommonObjectLine $sql .= " ".price2num($this->localtax2_tx).","; $sql .= " '".$this->db->escape($this->localtax1_type)."',"; $sql .= " '".$this->db->escape($this->localtax2_type)."',"; - $sql .= ' '.(!empty($this->fk_product) ? $this->fk_product : "null").','; + $sql .= ' '.((!empty($this->fk_product) && $this->fk_product > 0) ? $this->fk_product : "null").','; $sql .= " ".((int) $this->product_type).","; $sql .= " ".price2num($this->remise_percent).","; $sql .= ' '.(! empty($this->fk_remise_except) ? ((int) $this->fk_remise_except) : "null").','; diff --git a/htdocs/fourn/commande/card.php b/htdocs/fourn/commande/card.php index 6e89abbf953..cc0f67e4b4e 100644 --- a/htdocs/fourn/commande/card.php +++ b/htdocs/fourn/commande/card.php @@ -2303,10 +2303,11 @@ if ($action == 'create') { //$result = $object->getLinesArray(); - print '
+ print ' + '; diff --git a/htdocs/fourn/commande/list.php b/htdocs/fourn/commande/list.php index bf8e53e8b82..d1946cc9b4c 100644 --- a/htdocs/fourn/commande/list.php +++ b/htdocs/fourn/commande/list.php @@ -1407,7 +1407,7 @@ if ($resql) { // Type ent if (!empty($arrayfields['typent.code']['checked'])) { print ''; - if (count($typenArray) == 0) { + if (empty($typenArray)) { $typenArray = $formcompany->typent_array(1); } print $typenArray[$obj->typent_code]; diff --git a/htdocs/fourn/commande/note.php b/htdocs/fourn/commande/note.php index d9b0904c7ef..b3e7d33e5d9 100644 --- a/htdocs/fourn/commande/note.php +++ b/htdocs/fourn/commande/note.php @@ -43,13 +43,13 @@ $action = GETPOST('action', 'aZ09'); if ($user->socid) { $socid = $user->socid; } + +$hookmanager->initHooks(array('ordersuppliercardnote')); $result = restrictedArea($user, 'fournisseur', $id, 'commande_fournisseur', 'commande'); $object = new CommandeFournisseur($db); $object->fetch($id, $ref); -$hookmanager->initHooks(array('ordersuppliercardnote')); - $permissionnote = ($user->rights->fournisseur->commande->creer || $user->rights->supplier_order->creer); // Used by the include of actions_setnotes.inc.php @@ -57,7 +57,13 @@ $permissionnote = ($user->rights->fournisseur->commande->creer || $user->rights- * Actions */ -include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not includ_once +$reshook = $hookmanager->executeHooks('doActions', array(), $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) { + setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); +} +if (empty($reshook)) { + include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once +} /* diff --git a/htdocs/fourn/facture/card.php b/htdocs/fourn/facture/card.php index a28b8c13331..6b67d0a2dcf 100644 --- a/htdocs/fourn/facture/card.php +++ b/htdocs/fourn/facture/card.php @@ -2739,14 +2739,17 @@ if ($action == 'create') { // Label print ''; - print ''.$form->editfieldkey("Label", 'label', $object->label, $object, ($usercancreate)).''; - print ''.$form->editfieldval("Label", 'label', $object->label, $object, ($usercancreate)).''; + print ''.$form->editfieldkey("Label", 'label', $object->label, $object, $usercancreate).''; + print ''.$form->editfieldval("Label", 'label', $object->label, $object, $usercancreate).''; print ''; $form_permission = ($object->statut < FactureFournisseur::STATUS_CLOSED) && $usercancreate && ($object->getSommePaiement() <= 0); + $form_permission2 = ($object->statut < FactureFournisseur::STATUS_CLOSED) && $usercancreate; // Date - print ''.$form->editfieldkey("DateInvoice", 'datef', $object->datep, $object, $form_permission, 'datepicker').''; + print ''; + print $form->editfieldkey("DateInvoice", 'datef', $object->datep, $object, $form_permission, 'datepicker'); + print ''; print $form->editfieldval("Date", 'datef', $object->datep, $object, $form_permission, 'datepicker'); print ''; @@ -2756,11 +2759,11 @@ if ($action == 'create') { print ''; } print '
'; print $langs->trans('PaymentConditions'); print ''; - if ($action != 'editconditions' && $usercancreate) { + if ($action != 'editconditions' && $form_permission) { print 'id.'">'.img_edit($langs->trans('SetConditions'), 1).'
'; - print ''; + print ''; if ($action == 'editconditions') { $form->form_conditions_reglement($_SERVER['PHP_SELF'].'?id='.$object->id, $object->cond_reglement_id, 'cond_reglement_id'); } else { @@ -2770,8 +2773,10 @@ if ($action == 'create') { print ''; // Due date - print ''.$form->editfieldkey("DateMaxPayment", 'date_lim_reglement', $object->date_echeance, $object, $form_permission, 'datepicker').''; - print $form->editfieldval("DateMaxPayment", 'date_lim_reglement', $object->date_echeance, $object, $form_permission, 'datepicker'); + print ''; + print $form->editfieldkey("DateMaxPayment", 'date_lim_reglement', $object->date_echeance, $object, $form_permission2, 'datepicker'); + print ''; + print $form->editfieldval("DateMaxPayment", 'date_lim_reglement', $object->date_echeance, $object, $form_permission2, 'datepicker'); if ($action != 'editdate_lim_reglement' && $object->hasDelay()) { print img_warning($langs->trans('Late')); } @@ -2783,11 +2788,11 @@ if ($action == 'create') { print ''; - if ($action != 'editmode' && $usercancreate) { + if ($action != 'editmode' && $form_permission2) { print ''; } print '
'; print $langs->trans('PaymentMode'); print 'id.'">'.img_edit($langs->trans('SetMode'), 1).'
'; - print ''; + print ''; if ($action == 'editmode') { $form->form_modes_reglement($_SERVER['PHP_SELF'].'?id='.$object->id, $object->mode_reglement_id, 'mode_reglement_id', 'DBIT', 1, 1); } else { @@ -2807,7 +2812,7 @@ if ($action == 'create') { print 'id.'">'.img_edit($langs->transnoentitiesnoconv('SetMultiCurrencyCode'), 1).''; } print ''; - print ''; + print ''; if ($action == 'editmulticurrencycode') { $form->form_multicurrency_code($_SERVER['PHP_SELF'].'?id='.$object->id, $object->multicurrency_code, 'multicurrency_code'); } else { @@ -2819,14 +2824,14 @@ if ($action == 'create') { if ($object->multicurrency_code != $conf->currency || $object->multicurrency_tx != 1) { print ''; print ''; - print ''; } print '
'; + print ''; if ($action != 'editmulticurrencyrate' && $object->statut == $object::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) { print ''; } print '
'; print $form->editfieldkey('CurrencyRate', 'multicurrency_tx', '', $object, 0); print 'id.'">'.img_edit($langs->transnoentitiesnoconv('SetMultiCurrencyCode'), 1).'
'; - print '
'; + print ''; if ($action == 'editmulticurrencyrate' || $action == 'actualizemulticurrencyrate') { if ($action == 'actualizemulticurrencyrate') { list($object->fk_multicurrency, $object->multicurrency_tx) = MultiCurrency::getIdAndTxFromCode($object->db, $object->multicurrency_code); @@ -2854,7 +2859,7 @@ if ($action == 'create') { print 'id.'">'.img_edit($langs->trans('SetBankAccount'), 1).'
'; - print ''; + print ''; if ($action == 'editbankaccount') { $form->formSelectAccount($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_account, 'fk_account', 1); } else { @@ -2877,7 +2882,7 @@ if ($action == 'create') { } print ''; print ''; - print ''; + print ''; if ($action != 'editincoterm') { print $form->textwithpicto($object->display_incoterms(), $object->label_incoterms, 1); } else { @@ -2898,7 +2903,6 @@ if ($action == 'create') { } print ''; print ''; - print ''; if ($action == 'editmode') { $form->formSelectTransportMode($_SERVER['PHP_SELF'].'?id='.$object->id, $object->transport_mode_id, 'transport_mode_id', 1, 1); @@ -2913,8 +2917,8 @@ if ($action == 'create') { include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php'; print ''; - print '
'; + print '
'; print '
'; print '
'; @@ -2933,7 +2937,7 @@ if ($action == 'create') { print ''; // Multicurrency Amount TTC - print ''.$form->editfieldkey('MulticurrencyAmountTTC', 'multicurrency_total_ttc', '', $object, 0).''; + print ''.$form->editfieldkey('MulticurrencyAmountTTC', 'multicurrency_total_ttc', '', $object, 0).''; print ''.price($object->multicurrency_total_ttc, '', $langs, 0, - 1, - 1, (!empty($object->multicurrency_code) ? $object->multicurrency_code : $conf->currency)).''; print ''; } @@ -2977,9 +2981,8 @@ if ($action == 'create') { print ''; - /* - * List of payments - */ + + // List of payments $totalpaye = 0; @@ -3292,10 +3295,11 @@ if ($action == 'create') { /* * Lines */ - print ''; + print ''; print ''; print ''; print ''; + print ''; print ''; print ''; diff --git a/htdocs/fourn/facture/list.php b/htdocs/fourn/facture/list.php index 9d5343c47c4..5e4cc3fc05e 100644 --- a/htdocs/fourn/facture/list.php +++ b/htdocs/fourn/facture/list.php @@ -45,10 +45,6 @@ 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 (!$user->rights->fournisseur->facture->lire) { - accessforbidden(); -} - // Load translation files required by the page $langs->loadLangs(array('products', 'bills', 'companies', 'projects')); @@ -214,6 +210,16 @@ include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_array_fields.tpl.php'; $object->fields = dol_sort_array($object->fields, 'position'); $arrayfields = dol_sort_array($arrayfields, 'position'); +if ((empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)) + || (empty($conf->supplier_invoice->enabled) && !empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD))) { + accessforbidden(); +} +if ((empty($user->rights->fournisseur->facture->lire) && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)) + || (empty($user->rights->supplier_invoice->lire) && !empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD))) { + accessforbidden(); +} + + /* * Actions diff --git a/htdocs/fourn/facture/note.php b/htdocs/fourn/facture/note.php index 5bbf1fdcba6..c5ea5feac68 100644 --- a/htdocs/fourn/facture/note.php +++ b/htdocs/fourn/facture/note.php @@ -44,6 +44,9 @@ $action = GETPOST('action', 'aZ09'); if ($user->socid) { $socid = $user->socid; } +// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context +$hookmanager->initHooks(array('invoicesuppliernote')); + $result = restrictedArea($user, 'fournisseur', $id, 'facture_fourn', 'facture'); $object = new FactureFournisseur($db); @@ -56,7 +59,13 @@ $permissionnote = ($user->rights->fournisseur->facture->creer || $user->rights-> * Actions */ -include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not includ_once +$reshook = $hookmanager->executeHooks('doActions', array(), $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) { + setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); +} +if (empty($reshook)) { + include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once +} // Set label if ($action == 'setlabel' && ($user->rights->fournisseur->facture->creer || $user->rights->supplier_invoice->creer)) { diff --git a/htdocs/fourn/paiement/list.php b/htdocs/fourn/paiement/list.php index 80654e9a4ae..f02c872fb0e 100644 --- a/htdocs/fourn/paiement/list.php +++ b/htdocs/fourn/paiement/list.php @@ -118,10 +118,12 @@ if ($user->socid) { // require_once DOL_DOCUMENT_ROOT.'/fourn/class/paiementfourn.class.php'; // $object = new PaiementFourn($db); // restrictedArea($user, $object->element); -if ((empty($conf->fournisseur->enabled) && !empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)) || empty($conf->supplier_invoice->enabled)) { +if ((empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)) + || (empty($conf->supplier_invoice->enabled) && !empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD))) { accessforbidden(); } -if (!$user->rights->fournisseur->facture->lire || !$user->rights->supplier_invoice->lire) { +if ((empty($user->rights->fournisseur->facture->lire) && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)) + || (empty($user->rights->supplier_invoice->lire) && !empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD))) { accessforbidden(); } diff --git a/htdocs/holiday/class/holiday.class.php b/htdocs/holiday/class/holiday.class.php index e1a9d9d905b..2b0641ff9ae 100644 --- a/htdocs/holiday/class/holiday.class.php +++ b/htdocs/holiday/class/holiday.class.php @@ -2261,7 +2261,7 @@ class Holiday extends CommonObject $response->warning_delay = $conf->holiday->approve->warning_delay / 60 / 60 / 24; $response->label = $langs->trans("HolidaysToApprove"); $response->labelShort = $langs->trans("ToApprove"); - $response->url = DOL_URL_ROOT.'/holiday/list.php?search_statut=2&mainmenu=hrm&leftmenu=holiday'; + $response->url = DOL_URL_ROOT.'/holiday/list.php?search_status=2&mainmenu=hrm&leftmenu=holiday'; $response->img = img_object('', "holiday"); while ($obj = $this->db->fetch_object($resql)) { diff --git a/htdocs/holiday/list.php b/htdocs/holiday/list.php index c62185d5f2a..ece1f9c9ec7 100644 --- a/htdocs/holiday/list.php +++ b/htdocs/holiday/list.php @@ -117,7 +117,7 @@ $search_month_end = GETPOST('search_month_end', 'int'); $search_year_end = GETPOST('search_year_end', 'int'); $search_employee = GETPOST('search_employee', 'int'); $search_valideur = GETPOST('search_valideur', 'int'); -$search_status = GETPOST('search_status', 'int'); +$search_status = GETPOSTISSET('search_status') ? GETPOST('search_status', 'int') : GETPOST('search_statut', 'int'); $search_type = GETPOST('search_type', 'int'); // Initialize technical objects diff --git a/htdocs/hrm/index.php b/htdocs/hrm/index.php index 23d0899cc18..fe2c42b0d1b 100644 --- a/htdocs/hrm/index.php +++ b/htdocs/hrm/index.php @@ -310,11 +310,11 @@ if (!empty($conf->expensereport->enabled) && $user->rights->expensereport->lire) $userstatic->photo = $obj->photo; print ''; - print ''.$expensereportstatic->getNomUrl(1).''; + print ''.$expensereportstatic->getNomUrl(1).''; print ''.$userstatic->getNomUrl(-1).''; - print ''.price($obj->total_ttc).''; + print ''.price($obj->total_ttc).''; print ''.dol_print_date($db->jdate($obj->dm), 'day').''; - print ''.$expensereportstatic->LibStatut($obj->status, 3).''; + print ''.$expensereportstatic->LibStatut($obj->status, 3).''; print ''; $i++; diff --git a/htdocs/includes/.htaccess b/htdocs/includes/.htaccess new file mode 100644 index 00000000000..c15ce44a5e1 --- /dev/null +++ b/htdocs/includes/.htaccess @@ -0,0 +1,16 @@ +# htaccess file to clock +# The virtual host must have AllowOverride FileInfo to have this file used. +# You can achieve the same effect by adding a definition to +# +# +#RewriteRule \.php$ - [F,L] +# + + +#RewriteRule \.php$ - [F,L] + +# If there is no directory with AllowOveride FileInfo, you will get error 500. But +# we got what we want, php file into external libraries can't be executed directly. + + SetHandler ! + diff --git a/htdocs/includes/odtphp/odf.php b/htdocs/includes/odtphp/odf.php index 91fec8d998e..a66e337aa98 100644 --- a/htdocs/includes/odtphp/odf.php +++ b/htdocs/includes/odtphp/odf.php @@ -2,6 +2,9 @@ require 'Segment.php'; +/** + * Class of ODT Exception + */ class OdfException extends Exception { } @@ -65,12 +68,12 @@ class Odf } $md5uniqid = md5(uniqid()); - if ($this->config['PATH_TO_TMP']) $this->tmpdir = preg_replace('|[\/]$|','',$this->config['PATH_TO_TMP']); // Remove last \ or / + if ($this->config['PATH_TO_TMP']) $this->tmpdir = preg_replace('|[\/]$|', '', $this->config['PATH_TO_TMP']); // Remove last \ or / $this->tmpdir .= ($this->tmpdir?'/':'').$md5uniqid; $this->tmpfile = $this->tmpdir.'/'.$md5uniqid.'.odt'; // We keep .odt extension to allow OpenOffice usage during debug. // A working directory is required for some zip proxy like PclZipProxy - if (in_array($this->config['ZIP_PROXY'],array('PclZipProxy')) && ! is_dir($this->config['PATH_TO_TMP'])) { + if (in_array($this->config['ZIP_PROXY'], array('PclZipProxy')) && ! is_dir($this->config['PATH_TO_TMP'])) { throw new OdfException('Temporary directory '.$this->config['PATH_TO_TMP'].' must exists'); } @@ -81,8 +84,8 @@ class Odf // Load zip proxy $zipHandler = $this->config['ZIP_PROXY']; - if (!defined('PCLZIP_TEMPORARY_DIR')) define('PCLZIP_TEMPORARY_DIR',$this->tmpdir); - include_once('zip/'.$zipHandler.'.php'); + if (!defined('PCLZIP_TEMPORARY_DIR')) define('PCLZIP_TEMPORARY_DIR', $this->tmpdir); + include_once 'zip/'.$zipHandler.'.php'; if (! class_exists($this->config['ZIP_PROXY'])) { throw new OdfException($this->config['ZIP_PROXY'] . ' class not found - check your php settings'); } @@ -147,13 +150,13 @@ class Odf } /** - * Replaces html tags in odt tags and returns a compatible string - * @param string $key Name of the variable within the template + * Replaces html tags in odt tags and returns a compatible string + * * @param string $value Replacement value * @param bool $encode If true, special XML characters are encoded * @param string $charset Charset - * @return string - */ + * @return string + */ public function convertVarToOdf($value, $encode = true, $charset = 'ISO-8859') { $value = $encode ? htmlspecialchars($value) : $value; @@ -195,207 +198,207 @@ class Odf } } $this->contentXml = str_replace('', $fonts . '', $this->contentXml); - } - else $convertedValue = preg_replace('/(\r\n|\r|\n)/i', "", $value); + } else $convertedValue = preg_replace('/(\r\n|\r|\n)/i', "", $value); return $convertedValue; } /** - * Replaces html tags in with odt tags and returns an odt string - * @param array $tags An array with html tags generated by the getDataFromHtml() function - * @param array $customStyles An array of style defenitions that should be included inside the odt file - * @param array $fontDeclarations An array of font declarations that should be included inside the odt file - * @return string - */ - private function _replaceHtmlWithOdtTag($tags, &$customStyles, &$fontDeclarations) + * Replaces html tags in with odt tags and returns an odt string + * @param array $tags An array with html tags generated by the getDataFromHtml() function + * @param array $customStyles An array of style defenitions that should be included inside the odt file + * @param array $fontDeclarations An array of font declarations that should be included inside the odt file + * @return string + */ + private function _replaceHtmlWithOdtTag($tags, &$customStyles, &$fontDeclarations) { - if ($customStyles == null) $customStyles = array(); - if ($fontDeclarations == null) $fontDeclarations = array(); + if ($customStyles == null) $customStyles = array(); + if ($fontDeclarations == null) $fontDeclarations = array(); - $odtResult = ''; + $odtResult = ''; - foreach ((array) $tags as $tag) { - // Check if the current item is a tag or just plain text - if (isset($tag['text'])) { - $odtResult .= $tag['text']; - } elseif (isset($tag['name'])) { - switch ($tag['name']) { - case 'br': - $odtResult .= ''; - break; - case 'strong': - case 'b': - $odtResult .= '' . ($tag['children'] != null ? $this->_replaceHtmlWithOdtTag($tag['children'], $customStyles, $fontDeclarations) : $tag['innerText']) . ''; - break; - case 'i': - case 'em': - $odtResult .= '' . ($tag['children'] != null ? $this->_replaceHtmlWithOdtTag($tag['children'], $customStyles, $fontDeclarations) : $tag['innerText']) . ''; - break; - case 'u': - $odtResult .= '' . ($tag['children'] != null ? $this->_replaceHtmlWithOdtTag($tag['children'], $customStyles, $fontDeclarations) : $tag['innerText']) . ''; - break; - case 's': - $odtResult .= '' . ($tag['children'] != null ? $this->_replaceHtmlWithOdtTag($tag['children'], $customStyles, $fontDeclarations) : $tag['innerText']) . ''; - break; - case 'sub': - $odtResult .= '' . ($tag['children'] != null ? $this->_replaceHtmlWithOdtTag($tag['children'], $customStyles, $fontDeclarations) : $tag['innerText']) . ''; - break; - case 'sup': - $odtResult .= '' . ($tag['children'] != null ? $this->_replaceHtmlWithOdtTag($tag['children'], $customStyles, $fontDeclarations) : $tag['innerText']) . ''; - break; - case 'span': - if (isset($tag['attributes']['style'])) { - $odtStyles = ''; - foreach ($tag['attributes']['style'] as $styleName => $styleValue) { - switch ($styleName) { - case 'font-family': - $fontName = $styleValue; - if (strpos($fontName, ',') !== false) { - $fontName = explode(',', $fontName)[0]; - } - if (!in_array($fontName, $fontDeclarations)) { - array_push($fontDeclarations, $fontName); - } - $odtStyles .= ''; - break; - case 'font-size': - if (preg_match('/([0-9]+)\s?(px|pt)/', $styleValue, $matches)) { - $fontSize = intval($matches[1]); - if ($matches[2] == 'px') { - $fontSize = round($fontSize * 0.75); - } - $odtStyles .= ''; - } - break; - case 'color': - if (preg_match('/#[0-9A-Fa-f]{3}(?:[0-9A-Fa-f]{3})?/', $styleValue)) { - $odtStyles .= ''; - } - break; - } - } - if (strlen($odtStyles) > 0) { + foreach ((array) $tags as $tag) { + // Check if the current item is a tag or just plain text + if (isset($tag['text'])) { + $odtResult .= $tag['text']; + } elseif (isset($tag['name'])) { + switch ($tag['name']) { + case 'br': + $odtResult .= ''; + break; + case 'strong': + case 'b': + $odtResult .= '' . ($tag['children'] != null ? $this->_replaceHtmlWithOdtTag($tag['children'], $customStyles, $fontDeclarations) : $tag['innerText']) . ''; + break; + case 'i': + case 'em': + $odtResult .= '' . ($tag['children'] != null ? $this->_replaceHtmlWithOdtTag($tag['children'], $customStyles, $fontDeclarations) : $tag['innerText']) . ''; + break; + case 'u': + $odtResult .= '' . ($tag['children'] != null ? $this->_replaceHtmlWithOdtTag($tag['children'], $customStyles, $fontDeclarations) : $tag['innerText']) . ''; + break; + case 's': + $odtResult .= '' . ($tag['children'] != null ? $this->_replaceHtmlWithOdtTag($tag['children'], $customStyles, $fontDeclarations) : $tag['innerText']) . ''; + break; + case 'sub': + $odtResult .= '' . ($tag['children'] != null ? $this->_replaceHtmlWithOdtTag($tag['children'], $customStyles, $fontDeclarations) : $tag['innerText']) . ''; + break; + case 'sup': + $odtResult .= '' . ($tag['children'] != null ? $this->_replaceHtmlWithOdtTag($tag['children'], $customStyles, $fontDeclarations) : $tag['innerText']) . ''; + break; + case 'span': + if (isset($tag['attributes']['style'])) { + $odtStyles = ''; + foreach ($tag['attributes']['style'] as $styleName => $styleValue) { + switch ($styleName) { + case 'font-family': + $fontName = $styleValue; + if (strpos($fontName, ',') !== false) { + $fontName = explode(',', $fontName)[0]; + } + if (!in_array($fontName, $fontDeclarations)) { + array_push($fontDeclarations, $fontName); + } + $odtStyles .= ''; + break; + case 'font-size': + if (preg_match('/([0-9]+)\s?(px|pt)/', $styleValue, $matches)) { + $fontSize = intval($matches[1]); + if ($matches[2] == 'px') { + $fontSize = round($fontSize * 0.75); + } + $odtStyles .= ''; + } + break; + case 'color': + if (preg_match('/#[0-9A-Fa-f]{3}(?:[0-9A-Fa-f]{3})?/', $styleValue)) { + $odtStyles .= ''; + } + break; + } + } + if (strlen($odtStyles) > 0) { // Generate a unique id for the style (using microtime and random because some CPUs are really fast...) - $key = floatval(str_replace('.', '', microtime(true)))+rand(0, 10); - $customStyles[$key] = $odtStyles; - $odtResult .= '' . ($tag['children'] != null ? $this->_replaceHtmlWithOdtTag($tag['children'], $customStyles, $fontDeclarations) : $tag['innerText']) . ''; - } - } - break; - default: - $odtResult .= $this->_replaceHtmlWithOdtTag($tag['children'], $customStyles, $fontDeclarations); - break; - } - } - } - return $odtResult; - } + $key = floatval(str_replace('.', '', microtime(true)))+rand(0, 10); + $customStyles[$key] = $odtStyles; + $odtResult .= '' . ($tag['children'] != null ? $this->_replaceHtmlWithOdtTag($tag['children'], $customStyles, $fontDeclarations) : $tag['innerText']) . ''; + } + } + break; + default: + $odtResult .= $this->_replaceHtmlWithOdtTag($tag['children'], $customStyles, $fontDeclarations); + break; + } + } + } + return $odtResult; + } - /** - * Checks if the given text is a html string - * @param string $text The text to check - * @return bool - */ - private function _isHtmlTag($text) + /** + * Checks if the given text is a html string + * @param string $text The text to check + * @return bool + */ + private function _isHtmlTag($text) { - return preg_match('/<([A-Za-z]+)(?:\s([A-Za-z]+(?:\-[A-Za-z]+)?(?:=(?:".*?")|(?:[0-9]+))))*(?:(?:\s\/>)|(?:>(.*)<\/\1>))/', $text); - } + return preg_match('/<([A-Za-z]+)(?:\s([A-Za-z]+(?:\-[A-Za-z]+)?(?:=(?:".*?")|(?:[0-9]+))))*(?:(?:\s\/>)|(?:>(.*)<\/\1>))/', $text); + } - /** - * Checks if the given text includes a html string - * @param string $text The text to check - * @return bool - */ - private function _hasHtmlTag($text) + /** + * Checks if the given text includes a html string + * @param string $text The text to check + * @return bool + */ + private function _hasHtmlTag($text) { - $result = preg_match_all('/<([A-Za-z]+)(?:\s([A-Za-z]+(?:\-[A-Za-z]+)?(?:=(?:".*?")|(?:[0-9]+))))*(?:(?:\s\/>)|(?:>(.*)<\/\1>))/', $text); - return is_numeric($result) && $result > 0; - } + $result = preg_match_all('/<([A-Za-z]+)(?:\s([A-Za-z]+(?:\-[A-Za-z]+)?(?:=(?:".*?")|(?:[0-9]+))))*(?:(?:\s\/>)|(?:>(.*)<\/\1>))/', $text); + return is_numeric($result) && $result > 0; + } - /** - * Returns an array of html elements - * @param string $html A string with html tags - * @return array - */ - private function _getDataFromHtml($html) + /** + * Returns an array of html elements + * @param string $html A string with html tags + * @return array + */ + private function _getDataFromHtml($html) { - $tags = array(); - $tempHtml = $html; + $tags = array(); + $tempHtml = $html; - while (strlen($tempHtml) > 0) { - // Check if the string includes a html tag - if (preg_match_all('/<([A-Za-z]+)(?:\s([A-Za-z]+(?:\-[A-Za-z]+)?(?:=(?:".*?")|(?:[0-9]+))))*(?:(?:\s\/>)|(?:>(.*)<\/\1>))/', $tempHtml, $matches)) { - $tagOffset = strpos($tempHtml, $matches[0][0]); - // Check if the string starts with the html tag - if ($tagOffset > 0) { - // Push the text infront of the html tag to the result array - array_push($tags, array( - 'text' => substr($tempHtml, 0, $tagOffset) - )); - // Remove the text from the string - $tempHtml = substr($tempHtml, $tagOffset); - } - // Extract the attribute data from the html tag - preg_match_all('/([0-9A-Za-z]+(?:="[0-9A-Za-z\:\-\s\,\;\#]*")?)+/', $matches[2][0], $explodedAttributes); - $explodedAttributes = array_filter($explodedAttributes[0]); - $attributes = array(); - // Store each attribute with its name in the $attributes array - $explodedAttributesCount = count($explodedAttributes); - for ($i=0; $i<$explodedAttributesCount; $i++) { - $attribute = trim($explodedAttributes[$i]); - // Check if the attribute has a value (like style="") or has no value (like required) - if (strpos($attribute, '=') !== false) { - $splitAttribute = explode('=', $attribute); - $attrName = trim($splitAttribute[0]); - $attrValue = trim(str_replace('"', '', $splitAttribute[1])); - // check if the current attribute is a style attribute - if (strtolower($attrName) == 'style') { - $attributes[$attrName] = array(); - if (strpos($attrValue, ';') !== false) { - // Split the style properties and store them in an array - $explodedStyles = explode(';', $attrValue); - $explodedStylesCount = count($explodedStyles); - for ($n=0; $n<$explodedStylesCount; $n++) { - $splitStyle = explode(':', $explodedStyles[$n]); - $attributes[$attrName][trim($splitStyle[0])] = trim($splitStyle[1]); - } - } else { - $splitStyle = explode(':', $attrValue); - $attributes[$attrName][trim($splitStyle[0])] = trim($splitStyle[1]); - } - } else { - // Store the value directly in the $attributes array if this is not the style attribute - $attributes[$attrName] = $attrValue; - } - } else { - $attributes[trim($attribute)] = true; - } - } - // Push the html tag data to the result array - array_push($tags, array( - 'name' => $matches[1][0], - 'attributes' => $attributes, - 'innerText' => strip_tags($matches[3][0]), - 'children' => $this->_hasHtmlTag($matches[3][0]) ? $this->_getDataFromHtml($matches[3][0]) : null - )); - // Remove the processed html tag from the html string - $tempHtml = substr($tempHtml, strlen($matches[0][0])); - } else { - array_push($tags, array( - 'text' => $tempHtml - )); - $tempHtml = ''; - } - } - return $tags; - } + while (strlen($tempHtml) > 0) { + // Check if the string includes a html tag + if (preg_match_all('/<([A-Za-z]+)(?:\s([A-Za-z]+(?:\-[A-Za-z]+)?(?:=(?:".*?")|(?:[0-9]+))))*(?:(?:\s\/>)|(?:>(.*)<\/\1>))/', $tempHtml, $matches)) { + $tagOffset = strpos($tempHtml, $matches[0][0]); + // Check if the string starts with the html tag + if ($tagOffset > 0) { + // Push the text infront of the html tag to the result array + array_push($tags, array( + 'text' => substr($tempHtml, 0, $tagOffset) + )); + // Remove the text from the string + $tempHtml = substr($tempHtml, $tagOffset); + } + // Extract the attribute data from the html tag + preg_match_all('/([0-9A-Za-z]+(?:="[0-9A-Za-z\:\-\s\,\;\#]*")?)+/', $matches[2][0], $explodedAttributes); + $explodedAttributes = array_filter($explodedAttributes[0]); + $attributes = array(); + // Store each attribute with its name in the $attributes array + $explodedAttributesCount = count($explodedAttributes); + for ($i=0; $i<$explodedAttributesCount; $i++) { + $attribute = trim($explodedAttributes[$i]); + // Check if the attribute has a value (like style="") or has no value (like required) + if (strpos($attribute, '=') !== false) { + $splitAttribute = explode('=', $attribute); + $attrName = trim($splitAttribute[0]); + $attrValue = trim(str_replace('"', '', $splitAttribute[1])); + // check if the current attribute is a style attribute + if (strtolower($attrName) == 'style') { + $attributes[$attrName] = array(); + if (strpos($attrValue, ';') !== false) { + // Split the style properties and store them in an array + $explodedStyles = explode(';', $attrValue); + $explodedStylesCount = count($explodedStyles); + for ($n=0; $n<$explodedStylesCount; $n++) { + $splitStyle = explode(':', $explodedStyles[$n]); + $attributes[$attrName][trim($splitStyle[0])] = trim($splitStyle[1]); + } + } else { + $splitStyle = explode(':', $attrValue); + $attributes[$attrName][trim($splitStyle[0])] = trim($splitStyle[1]); + } + } else { + // Store the value directly in the $attributes array if this is not the style attribute + $attributes[$attrName] = $attrValue; + } + } else { + $attributes[trim($attribute)] = true; + } + } + // Push the html tag data to the result array + array_push($tags, array( + 'name' => $matches[1][0], + 'attributes' => $attributes, + 'innerText' => strip_tags($matches[3][0]), + 'children' => $this->_hasHtmlTag($matches[3][0]) ? $this->_getDataFromHtml($matches[3][0]) : null + )); + // Remove the processed html tag from the html string + $tempHtml = substr($tempHtml, strlen($matches[0][0])); + } else { + array_push($tags, array( + 'text' => $tempHtml + )); + $tempHtml = ''; + } + } + return $tags; + } /** * Function to convert a HTML string into an ODT string * * @param string $value String to convert + * @return string String converted */ public function htmlToUTFAndPreOdf($value) { @@ -404,16 +407,15 @@ class Odf // We convert html tags $ishtml=dol_textishtml($value); - if ($ishtml) - { - // If string is "MYPODUCT - Desc bold with é accent
\n
\nUn texto en español ?" - // Result after clean must be "MYPODUCT - Desc bold with é accent\n\nUn texto en español ?" + if ($ishtml) { + // If string is "MYPODUCT - Desc bold with é accent
\n
\nUn texto en español ?" + // Result after clean must be "MYPODUCT - Desc bold with é accent\n\nUn texto en español ?" // We want to ignore \n and we want all
to be \n - $value=preg_replace('/(\r\n|\r|\n)/i','',$value); - $value=preg_replace('/
/i',"\n",$value); - $value=preg_replace('/\/]*>/i',"\n",$value); - $value=preg_replace('/\/]*\/>/i',"\n",$value); + $value=preg_replace('/(\r\n|\r|\n)/i', '', $value); + $value=preg_replace('/
/i', "\n", $value); + $value=preg_replace('/\/]*>/i', "\n", $value); + $value=preg_replace('/\/]*\/>/i', "\n", $value); //$value=preg_replace('//','__lt__text:p text:style-name=__quot__bold__quot____gt__',$value); //$value=preg_replace('/<\/strong>/','__lt__/text:p__gt__',$value); @@ -429,6 +431,7 @@ class Odf * Function to convert a HTML string into an ODT string * * @param string $value String to convert + * @return string String converted */ public function preOdfToOdf($value) { @@ -448,15 +451,14 @@ class Odf */ public function phpEval() { - preg_match_all('/[\{\<]\?(php)?\s+(?P.+)\?[\}\>]/iU',$this->contentXml, $matches); // detecting all {?php code ?} or + preg_match_all('/[\{\<]\?(php)?\s+(?P.+)\?[\}\>]/iU', $this->contentXml, $matches); // detecting all {?php code ?} or $nbfound=count($matches['content']); - for ($i=0; $i < $nbfound; $i++) - { + for ($i=0; $i < $nbfound; $i++) { try { $ob_output = ''; // flush the output for each code. This var will be filled in by the eval($code) and output buffering : any print or echo or output will be redirected into this variable $code = $matches['content'][$i]; ob_start(); - eval ($code); + eval($code); $ob_output = ob_get_contents(); // send the content of the buffer into $ob_output $this->contentXml = str_replace($matches[0][$i], $ob_output, $this->contentXml); ob_end_clean(); @@ -503,12 +505,12 @@ IMG; */ private function _moveRowSegments() { - // Replace BEGINxxx into BEGIN xxx - $this->contentXml = preg_replace('/\[!--\sBEGIN]>(row.[\S]*)\s--\]/sm', '[!-- BEGIN \\1 --]', $this->contentXml); - // Replace ENDxxx into END xxx - $this->contentXml = preg_replace('/\[!--\sEND]>(row.[\S]*)\s--\]/sm', '[!-- END \\1 --]', $this->contentXml); + // Replace BEGINxxx into BEGIN xxx + $this->contentXml = preg_replace('/\[!--\sBEGIN]>(row.[\S]*)\s--\]/sm', '[!-- BEGIN \\1 --]', $this->contentXml); + // Replace ENDxxx into END xxx + $this->contentXml = preg_replace('/\[!--\sEND]>(row.[\S]*)\s--\]/sm', '[!-- END \\1 --]', $this->contentXml); - // Search all possible rows in the document + // Search all possible rows in the document $reg1 = "#]*>(.*)#smU"; preg_match_all($reg1, $this->contentXml, $matches); for ($i = 0, $size = count($matches[0]); $i < $size; $i++) { @@ -536,31 +538,27 @@ IMG; * @param string $type 'content', 'styles' or 'meta' * @return void */ - private function _parse($type='content') + private function _parse($type = 'content') { - // Search all tags fou into condition to complete $this->vars, so we will proceed all tests even if not defined - $reg='@\[!--\sIF\s([{}a-zA-Z0-9\.\,_]+)\s--\]@smU'; - preg_match_all($reg, $this->contentXml, $matches, PREG_SET_ORDER); + // Search all tags fou into condition to complete $this->vars, so we will proceed all tests even if not defined + $reg='@\[!--\sIF\s([{}a-zA-Z0-9\.\,_]+)\s--\]@smU'; + preg_match_all($reg, $this->contentXml, $matches, PREG_SET_ORDER); - //var_dump($this->vars);exit; - foreach($matches as $match) // For each match, if there is no entry into this->vars, we add it - { - if (! empty($match[1]) && ! isset($this->vars[$match[1]])) - { - $this->vars[$match[1]] = ''; // Not defined, so we set it to '', we just need entry into this->vars for next loop + //var_dump($this->vars);exit; + foreach ($matches as $match) { // For each match, if there is no entry into this->vars, we add it + if (! empty($match[1]) && ! isset($this->vars[$match[1]])) { + $this->vars[$match[1]] = ''; // Not defined, so we set it to '', we just need entry into this->vars for next loop } - } - //var_dump($this->vars);exit; + } + //var_dump($this->vars);exit; // Conditionals substitution // Note: must be done before static substitution, else the variable will be replaced by its value and the conditional won't work anymore - foreach($this->vars as $key => $value) - { + foreach ($this->vars as $key => $value) { // If value is true (not 0 nor false nor null nor empty string) - if ($value) - { - //dol_syslog("Var ".$key." is defined, we remove the IF, ELSE and ENDIF "); - //$sav=$this->contentXml; + if ($value) { + //dol_syslog("Var ".$key." is defined, we remove the IF, ELSE and ENDIF "); + //$sav=$this->contentXml; // Remove the IF tag $this->contentXml = str_replace('[!-- IF '.$key.' --]', '', $this->contentXml); // Remove everything between the ELSE tag (if it exists) and the ENDIF tag @@ -568,27 +566,26 @@ IMG; $this->contentXml = preg_replace($reg, '', $this->contentXml); /*if ($sav != $this->contentXml) { - dol_syslog("We found a IF and it was processed"); - //var_dump($sav);exit; + dol_syslog("We found a IF and it was processed"); + //var_dump($sav);exit; }*/ - } - // Else the value is false, then two cases: no ELSE and we're done, or there is at least one place where there is an ELSE clause, then we replace it - else - { - //dol_syslog("Var ".$key." is not defined, we remove the IF, ELSE and ENDIF "); - //$sav=$this->contentXml; + } else { + // Else the value is false, then two cases: no ELSE and we're done, or there is at least one place where there is an ELSE clause, then we replace it + + //dol_syslog("Var ".$key." is not defined, we remove the IF, ELSE and ENDIF "); + //$sav=$this->contentXml; // Find all conditional blocks for this variable: from IF to ELSE and to ENDIF $reg = '@\[!--\sIF\s' . $key . '\s--\](.*)(\[!--\sELSE\s' . $key . '\s--\](.*))?\[!--\sENDIF\s' . $key . '\s--\]@smU'; // U modifier = all quantifiers are non-greedy preg_match_all($reg, $this->contentXml, $matches, PREG_SET_ORDER); - foreach($matches as $match) { // For each match, if there is an ELSE clause, we replace the whole block by the value in the ELSE clause + foreach ($matches as $match) { // For each match, if there is an ELSE clause, we replace the whole block by the value in the ELSE clause if (!empty($match[3])) $this->contentXml = str_replace($match[0], $match[3], $this->contentXml); } // Cleanup the other conditional blocks (all the others where there were no ELSE clause, we can just remove them altogether) $this->contentXml = preg_replace($reg, '', $this->contentXml); /*if ($sav != $this->contentXml) { - dol_syslog("We found a IF and it was processed"); - //var_dump($sav);exit; + dol_syslog("We found a IF and it was processed"); + //var_dump($sav);exit; }*/ } } @@ -597,7 +594,6 @@ IMG; if ($type == 'content') $this->contentXml = str_replace(array_keys($this->vars), array_values($this->vars), $this->contentXml); if ($type == 'styles') $this->stylesXml = str_replace(array_keys($this->vars), array_values($this->vars), $this->stylesXml); if ($type == 'meta') $this->metaXml = str_replace(array_keys($this->vars), array_values($this->vars), $this->metaXml); - } /** @@ -737,21 +733,19 @@ IMG; */ public function setMetaData() { - if (empty($this->creator)) $this->creator=''; + if (empty($this->creator)) $this->creator=''; $this->metaXml = preg_replace('/.*<\/dc:date>/', ''.gmdate("Y-m-d\TH:i:s").'', $this->metaXml); $this->metaXml = preg_replace('/.*<\/dc:creator>/', ''.htmlspecialchars($this->creator).'', $this->metaXml); $this->metaXml = preg_replace('/.*<\/dc:title>/', ''.htmlspecialchars($this->title).'', $this->metaXml); $this->metaXml = preg_replace('/.*<\/dc:subject>/', ''.htmlspecialchars($this->subject).'', $this->metaXml); - if (count($this->userdefined)) - { - foreach($this->userdefined as $key => $val) - { - $this->metaXml = preg_replace('', '', $this->metaXml); - $this->metaXml = preg_replace('/.*<\/meta:user-defined>/', '', $this->metaXml); - $this->metaXml = str_replace('', ''.htmlspecialchars($val).'', $this->metaXml); - } + if (count($this->userdefined)) { + foreach ($this->userdefined as $key => $val) { + $this->metaXml = preg_replace('', '', $this->metaXml); + $this->metaXml = preg_replace('/.*<\/meta:user-defined>/', '', $this->metaXml); + $this->metaXml = str_replace('', ''.htmlspecialchars($val).'', $this->metaXml); + } } } @@ -785,8 +779,7 @@ IMG; throw new OdfException("headers already sent ($filename at $linenum)"); } - if( $name == "" ) - { + if ( $name == "" ) { $name = md5(uniqid()) . ".odt"; } @@ -804,11 +797,11 @@ IMG; * @throws OdfException * @return void */ - public function exportAsAttachedPDF($name="") + public function exportAsAttachedPDF($name = "") { global $conf; - if( $name == "" ) $name = "temp".md5(uniqid()); + if ( $name == "" ) $name = "temp".md5(uniqid()); dol_syslog(get_class($this).'::exportAsAttachedPDF $name='.$name, LOG_DEBUG); $this->saveToDisk($name); @@ -818,8 +811,7 @@ IMG; // Export to PDF using LibreOffice - if ($conf->global->MAIN_ODT_AS_PDF == 'libreoffice') - { + if ($conf->global->MAIN_ODT_AS_PDF == 'libreoffice') { dol_mkdir($conf->user->dir_temp); // We must be sure the directory exists and is writable // We delete and recreate a subdir because the soffice may have change pemrissions on it @@ -831,9 +823,7 @@ IMG; // using linux/mac libreoffice that must be in path // Note PHP Config "fastcgi.impersonate=0" must set to 0 - Default is 1 $command ='soffice --headless -env:UserInstallation=file:\''.$conf->user->dir_temp.'/odtaspdf\' --convert-to pdf --outdir '. escapeshellarg(dirname($name)). " ".escapeshellarg($name); - } - elseif (preg_match('/unoconv/', $conf->global->MAIN_ODT_AS_PDF)) - { + } elseif (preg_match('/unoconv/', $conf->global->MAIN_ODT_AS_PDF)) { // If issue with unoconv, see https://github.com/dagwieers/unoconv/issues/87 // MAIN_ODT_AS_PDF should be "sudo -u unoconv /usr/bin/unoconv" and userunoconv must have sudo to be root by adding file /etc/sudoers.d/unoconv with content www-data ALL=(unoconv) NOPASSWD: /usr/bin/unoconv . @@ -860,19 +850,14 @@ IMG; $command = $conf->global->MAIN_ODT_AS_PDF.' '.escapeshellcmd($name); //$command = '/usr/bin/unoconv -vvv '.escapeshellcmd($name); - } - else - { + } else { // deprecated old method using odt2pdf.sh (native, jodconverter, ...) $tmpname=preg_replace('/\.odt/i', '', $name); - if (!empty($conf->global->MAIN_DOL_SCRIPTS_ROOT)) - { + if (!empty($conf->global->MAIN_DOL_SCRIPTS_ROOT)) { $command = $conf->global->MAIN_DOL_SCRIPTS_ROOT.'/scripts/odt2pdf/odt2pdf.sh '.escapeshellcmd($tmpname).' '.(is_numeric($conf->global->MAIN_ODT_AS_PDF)?'jodconverter':$conf->global->MAIN_ODT_AS_PDF); - } - else - { - dol_syslog(get_class($this).'::exportAsAttachedPDF is used but the constant MAIN_DOL_SCRIPTS_ROOT with path to script directory was not defined.', LOG_WARNING); + } else { + dol_syslog(get_class($this).'::exportAsAttachedPDF is used but the constant MAIN_DOL_SCRIPTS_ROOT with path to script directory was not defined.', LOG_WARNING); $command = '../../scripts/odt2pdf/odt2pdf.sh '.escapeshellcmd($tmpname).' '.(is_numeric($conf->global->MAIN_ODT_AS_PDF)?'jodconverter':$conf->global->MAIN_ODT_AS_PDF); } } @@ -880,25 +865,26 @@ IMG; //$dirname=dirname($name); //$command = DOL_DOCUMENT_ROOT.'/includes/odtphp/odt2pdf.sh '.$name.' '.$dirname; - dol_syslog(get_class($this).'::exportAsAttachedPDF $execmethod='.$execmethod.' Run command='.$command,LOG_DEBUG); + dol_syslog(get_class($this).'::exportAsAttachedPDF $execmethod='.$execmethod.' Run command='.$command, LOG_DEBUG); + // TODO Use: + // $outputfile = DOL_DATA_ROOT.'/odt2pdf.log'; + // $result = $utils->executeCLI($command, $outputfile); and replace test on $execmethod. + // $retval will be $result['result'] + // $errorstring will be $result['output'] $retval=0; $output_arr=array(); - if ($execmethod == 1) - { + if ($execmethod == 1) { exec($command, $output_arr, $retval); } - if ($execmethod == 2) - { + if ($execmethod == 2) { $outputfile = DOL_DATA_ROOT.'/odt2pdf.log'; $ok=0; $handle = fopen($outputfile, 'w'); - if ($handle) - { - dol_syslog(get_class($this)."Run command ".$command,LOG_DEBUG); + if ($handle) { + dol_syslog(get_class($this)."Run command ".$command, LOG_DEBUG); fwrite($handle, $command."\n"); $handlein = popen($command, 'r'); - while (!feof($handlein)) - { + while (!feof($handlein)) { $read = fgets($handlein); fwrite($handle, $read); $output_arr[]=$read; @@ -909,8 +895,7 @@ IMG; if (! empty($conf->global->MAIN_UMASK)) @chmod($outputfile, octdec($conf->global->MAIN_UMASK)); } - if ($retval == 0) - { + if ($retval == 0) { dol_syslog(get_class($this).'::exportAsAttachedPDF $ret_val='.$retval, LOG_DEBUG); $filename=''; $linenum=0; @@ -927,8 +912,7 @@ IMG; } } - if (!empty($conf->global->MAIN_ODT_AS_PDF_DEL_SOURCE)) - { + if (!empty($conf->global->MAIN_ODT_AS_PDF_DEL_SOURCE)) { unlink($name); } } else { @@ -937,11 +921,10 @@ IMG; if ($retval == 126) { throw new OdfException('Permission execute convert script : ' . $command); - } - else { - $errorstring=''; - foreach($output_arr as $line) { - $errorstring.= $line."
"; + } else { + $errorstring=''; + foreach ($output_arr as $line) { + $errorstring.= $line."
"; } throw new OdfException('ODT to PDF convert fail (option MAIN_ODT_AS_PDF is '.$conf->global->MAIN_ODT_AS_PDF.', command was '.$command.', retval='.$retval.') : ' . $errorstring); } diff --git a/htdocs/install/default.css b/htdocs/install/default.css index fe85649844d..731ac4131b4 100644 --- a/htdocs/install/default.css +++ b/htdocs/install/default.css @@ -80,6 +80,10 @@ div.soustitre { text-align: right; } +.wordbreak { + word-break: break-word; +} + .minwidth100 { min-width: 100px; } .minwidth200 { min-width: 200px; } .minwidth300 { min-width: 300px; } diff --git a/htdocs/install/mysql/data/llx_c_currencies.sql b/htdocs/install/mysql/data/llx_c_currencies.sql index 478c263af4c..df887d68be7 100644 --- a/htdocs/install/mysql/data/llx_c_currencies.sql +++ b/htdocs/install/mysql/data/llx_c_currencies.sql @@ -7,6 +7,7 @@ -- Copyright (C) 2007 Patrick Raguin -- Copyright (C) 2011 Juanjo Menent -- Copyright (C) 2020 Udo Tamm +-- Copyright (C) 2021 Lenin Rivas -- -- 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,7 +51,7 @@ INSERT INTO llx_c_currencies ( code_iso, unicode, active, label ) VALUES ( 'BDT' INSERT INTO llx_c_currencies ( code_iso, unicode, active, label ) VALUES ( 'BYR', '[112,46]', 1, 'Belarus Ruble'); INSERT INTO llx_c_currencies ( code_iso, unicode, active, label ) VALUES ( 'BZD', '[66,90,36]', 1, 'Belize Dollar'); INSERT INTO llx_c_currencies ( code_iso, unicode, active, label ) VALUES ( 'BMD', '[36]', 1, 'Bermuda Dollar'); -INSERT INTO llx_c_currencies ( code_iso, unicode, active, label ) VALUES ( 'BOB', '[36,98]', 1, 'Bolivia Boliviano'); +INSERT INTO llx_c_currencies ( code_iso, unicode, active, label ) VALUES ( 'BOB', '[66,115]', 1, 'Bolivia Boliviano'); INSERT INTO llx_c_currencies ( code_iso, unicode, active, label ) VALUES ( 'BAM', '[75,77]', 1, 'Bosnia and Herzegovina Convertible Marka'); INSERT INTO llx_c_currencies ( code_iso, unicode, active, label ) VALUES ( 'BWP', '[80]', 1, 'Botswana Pula'); INSERT INTO llx_c_currencies ( code_iso, unicode, active, label ) VALUES ( 'BGN', '[1083,1074]', 1, 'Bulgaria Lev'); @@ -70,6 +71,7 @@ INSERT INTO llx_c_currencies ( code_iso, unicode, active, label ) VALUES ( 'CZK' INSERT INTO llx_c_currencies ( code_iso, unicode, active, label ) VALUES ( 'DKK', '[107,114]', 1, 'Denmark Krone'); INSERT INTO llx_c_currencies ( code_iso, unicode, active, label ) VALUES ( 'DOP', '[82,68,36]', 1, 'Dominican Republic Peso'); INSERT INTO llx_c_currencies ( code_iso, unicode, active, label ) VALUES ( 'XCD', '[36]', 1, 'East Caribbean Dollar'); +INSERT INTO llx_c_currencies ( code_iso, unicode, active, label ) VALUES ( 'ECS', '[83,47,46]', 1, 'Ecuador Sucre'); INSERT INTO llx_c_currencies ( code_iso, unicode, active, label ) VALUES ( 'EGP', '[163]', 1, 'Egypt Pound'); INSERT INTO llx_c_currencies ( code_iso, unicode, active, label ) VALUES ( 'SVC', '[36]', 1, 'El Salvador Colon'); INSERT INTO llx_c_currencies ( code_iso, unicode, active, label ) VALUES ( 'EEK', '[107,114]', 1, 'Estonia Kroon'); @@ -126,7 +128,7 @@ INSERT INTO llx_c_currencies ( code_iso, unicode, active, label ) VALUES ( 'OMR' INSERT INTO llx_c_currencies ( code_iso, unicode, active, label ) VALUES ( 'PKR', '[8360]', 1, 'Pakistan Rupee'); INSERT INTO llx_c_currencies ( code_iso, unicode, active, label ) VALUES ( 'PAB', '[66,47,46]', 1, 'Panama Balboa'); INSERT INTO llx_c_currencies ( code_iso, unicode, active, label ) VALUES ( 'PYG', '[71,115]', 1, 'Paraguay Guarani'); -INSERT INTO llx_c_currencies ( code_iso, unicode, active, label ) VALUES ( 'PEN', '[83,47,46]', 1, 'Peru Nuevo Sol'); +INSERT INTO llx_c_currencies ( code_iso, unicode, active, label ) VALUES ( 'PEN', '[83,47]', 1, 'Perú Sol'); INSERT INTO llx_c_currencies ( code_iso, unicode, active, label ) VALUES ( 'PHP', '[8369]', 1, 'Philippines Peso'); INSERT INTO llx_c_currencies ( code_iso, unicode, active, label ) VALUES ( 'PLN', '[122,322]', 1, 'Poland Zloty'); INSERT INTO llx_c_currencies ( code_iso, unicode, active, label ) VALUES ( 'QAR', '[65020]', 1, 'Qatar Riyal'); diff --git a/htdocs/install/mysql/data/llx_c_email_templates.sql b/htdocs/install/mysql/data/llx_c_email_templates.sql index acc09bad008..e2b1cd65077 100644 --- a/htdocs/install/mysql/data/llx_c_email_templates.sql +++ b/htdocs/install/mysql/data/llx_c_email_templates.sql @@ -35,9 +35,9 @@ INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0,'recruitment','recruitmentcandidature_send','',0,null,null,'(AnswerCandidature)' ,100,'$conf->recruitment->enabled',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourCandidature)__', '__(Hello)__ __CANDIDATE_FULLNAME__,

\n\n__(YourCandidatureAnswerMessage)__
__ONLINE_INTERVIEW_SCHEDULER_TEXT_AND_URL__\n

\n__(Sincerely)__
__USER_SIGNATURE__',null, 0); -- Event organization -INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'eventorganization_send', '', 0, null, null, 'EventOrganizationEmailAskConf', 10, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationEmailAskConf)__', '__(Hello)__ __THIRDPARTY_NAME__,

__(ThisIsContentOfYourOrganizationEventConfRequestWasReceived)__

__ONLINE_PAYMENT_TEXT_AND_URL__


__(Sincerely)__
__USER_SIGNATURE__', null, '1', null); -INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'eventorganization_send', '', 0, null, null, 'EventOrganizationEmailAskBooth', 20, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationEmailAskBooth)__', '__(Hello)__ __THIRDPARTY_NAME__,

__(ThisIsContentOfYourOrganizationEventBoothRequestWasReceived)__

__ONLINE_PAYMENT_TEXT_AND_URL__


__(Sincerely)__
__USER_SIGNATURE__', null, '1', null); -INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'eventorganization_send', '', 0, null, null, 'EventOrganizationEmailSubsBooth', 30, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationEmailSubsBooth)__', '__(Hello)__ __THIRDPARTY_NAME__,

__(ThisIsContentOfYourOrganizationEventBoothSubscriptionWasReceived)__

__ONLINE_PAYMENT_TEXT_AND_URL__


__(Sincerely)__
__USER_SIGNATURE__', null, '1', null); -INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'eventorganization_send', '', 0, null, null, 'EventOrganizationEmailSubsEvent', 40, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationEmailSubsEvent)__', '__(Hello)__ __THIRDPARTY_NAME__,

__(ThisIsContentOfYourOrganizationEventEventSubscriptionWasReceived)__

__(Sincerely)__

__MYCOMPANY_NAME__
__USER_SIGNATURE__', null, '1', null); -INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'eventorganization_send', '', 0, null, null, 'EventOrganizationMassEmailAttendees', 50, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationMassEmailAttendees)__', '__(Hello)__ __THIRDPARTY_NAME__,

__(ThisIsContentOfYourOrganizationEventBulkMailToAttendees)__

__(Sincerely)__
__USER_SIGNATURE__', null, '1', null); -INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'eventorganization_send', '', 0, null, null, 'EventOrganizationMassEmailSpeakers', 60, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationMassEmailSpeakers)__', '__(Hello)__ __THIRDPARTY_NAME__,

__(ThisIsContentOfYourOrganizationEventBulkMailToSpeakers)__

__(Sincerely)__
__USER_SIGNATURE__', null, '1', null); +INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'conferenceorbooth', '', 0, null, null, 'EventOrganizationEmailAskConf', 10, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationEmailAskConf)__', '__(Hello)__ __THIRDPARTY_NAME__,

__(ThisIsContentOfYourOrganizationEventConfRequestWasReceived)__

__ONLINE_PAYMENT_TEXT_AND_URL__


__(Sincerely)__
__USER_SIGNATURE__', null, '1', null); +INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'conferenceorbooth', '', 0, null, null, 'EventOrganizationEmailAskBooth', 20, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationEmailAskBooth)__', '__(Hello)__ __THIRDPARTY_NAME__,

__(ThisIsContentOfYourOrganizationEventBoothRequestWasReceived)__

__ONLINE_PAYMENT_TEXT_AND_URL__


__(Sincerely)__
__USER_SIGNATURE__', null, '1', null); +INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'conferenceorbooth', '', 0, null, null, 'EventOrganizationEmailSubsBooth', 30, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationEmailSubsBooth)__', '__(Hello)__ __THIRDPARTY_NAME__,

__(ThisIsContentOfYourOrganizationEventBoothSubscriptionWasReceived)__

__ONLINE_PAYMENT_TEXT_AND_URL__


__(Sincerely)__
__USER_SIGNATURE__', null, '1', null); +INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'conferenceorbooth', '', 0, null, null, 'EventOrganizationEmailSubsEvent', 40, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationEmailSubsEvent)__', '__(Hello)__ __THIRDPARTY_NAME__,

__(ThisIsContentOfYourOrganizationEventEventSubscriptionWasReceived)__

__(Sincerely)__

__MYCOMPANY_NAME__
__USER_SIGNATURE__', null, '1', null); +INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'conferenceorbooth', '', 0, null, null, 'EventOrganizationMassEmailAttendees', 50, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationMassEmailAttendees)__', '__(Hello)__ __THIRDPARTY_NAME__,

__(ThisIsContentOfYourOrganizationEventBulkMailToAttendees)__

__(Sincerely)__
__USER_SIGNATURE__', null, '1', null); +INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'conferenceorbooth', '', 0, null, null, 'EventOrganizationMassEmailSpeakers', 60, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationMassEmailSpeakers)__', '__(Hello)__ __THIRDPARTY_NAME__,

__(ThisIsContentOfYourOrganizationEventBulkMailToSpeakers)__

__(Sincerely)__
__USER_SIGNATURE__', null, '1', null); diff --git a/htdocs/install/mysql/migration/13.0.0-14.0.0.sql b/htdocs/install/mysql/migration/13.0.0-14.0.0.sql index a01f589aa20..c10e4aa5282 100644 --- a/htdocs/install/mysql/migration/13.0.0-14.0.0.sql +++ b/htdocs/install/mysql/migration/13.0.0-14.0.0.sql @@ -428,6 +428,10 @@ create table llx_eventorganization_conferenceorboothattendee_extrafields ALTER TABLE llx_eventorganization_conferenceorboothattendee_extrafields ADD INDEX idx_conferenceorboothattendee_fk_object(fk_object); ALTER TABLE llx_c_ticket_category ADD COLUMN public integer DEFAULT 0; + +-- VPGSQL8.2 ALTER TABLE llx_c_ticket_category ALTER COLUMN pos TYPE INTEGER USING pos::INTEGER; +-- VPGSQL8.2 ALTER TABLE llx_c_ticket_category ALTER COLUMN pos SET NOT NULL; +-- VPGSQL8.2 ALTER TABLE llx_c_ticket_category ALTER COLUMN pos SET DEFAULT 0; ALTER TABLE llx_c_ticket_category MODIFY COLUMN pos integer DEFAULT 0 NOT NULL; diff --git a/htdocs/install/mysql/tables/llx_actioncomm.sql b/htdocs/install/mysql/tables/llx_actioncomm.sql index 9012f6b3a66..2f3f7660698 100644 --- a/htdocs/install/mysql/tables/llx_actioncomm.sql +++ b/htdocs/install/mysql/tables/llx_actioncomm.sql @@ -55,7 +55,7 @@ create table llx_actioncomm durationp real, -- planed duration label varchar(255) NOT NULL, -- label/title of event or topic of email - note text, -- note of event or content of email + note text, -- private note of event or content of email calling_duration integer, -- when event is a phone call, duration of phone call diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php index d0d1ae256b4..a11de7c447e 100644 --- a/htdocs/install/upgrade2.php +++ b/htdocs/install/upgrade2.php @@ -448,8 +448,17 @@ if (!GETPOST('action', 'aZ09') || preg_match('/upgrade/i', GETPOST('action', 'aZ migrate_contacts_socialnetworks(); migrate_thirdparties_socialnetworks(); } + + // Scripts for 14.0 + $afterversionarray = explode('.', '13.0.9'); + $beforeversionarray = explode('.', '14.0.9'); + if (versioncompare($versiontoarray, $afterversionarray) >= 0 && versioncompare($versiontoarray, $beforeversionarray) <= 0) { + migrate_export_import_profiles('export'); + migrate_export_import_profiles('import'); + } } + // Code executed only if migration is LAST ONE. Must always be done. if (versioncompare($versiontoarray, $versionranarray) >= 0 || versioncompare($versiontoarray, $versionranarray) <= -3) { // Reload modules (this must be always done and only into last targeted version, because code to reload module may need table structure of last version) @@ -3430,19 +3439,6 @@ function migrate_categorie_association($db, $langs, $conf) } if (!$error) { - // TODO DROP table in the next release - /* - $sqlDrop = "DROP TABLE ".MAIN_DB_PREFIX."categorie_association"; - if ($db->query($sqlDrop)) - { - $db->commit(); - } - else - { - $db->rollback(); - } - */ - $db->commit(); } else { $db->rollback(); @@ -4904,3 +4900,74 @@ function migrate_thirdparties_socialnetworks() print ''.$langs->trans('MigrationFieldsSocialNetworks', 'Thirdparties')."
\n"; print ''; } + + +/** + * Migrate export and import profiles to fix field name that was renamed + * + * @param string $mode 'export' or 'import' + * @return void + */ +function migrate_export_import_profiles($mode = 'export') +{ + global $db, $langs; + + $error = 0; + $resultstring = ''; + + $db->begin(); + + print ''; + $sql = 'SELECT rowid, field'; + if ($mode == 'export') { + $sql .= ', filter'; + } + $sql .= ' FROM '.MAIN_DB_PREFIX.$mode.'_model WHERE'; + $sql .= " type LIKE 'propale_%' OR type LIKE 'commande_%' OR type LIKE 'facture_%'"; + //print $sql; + $resql = $db->query($sql); + if ($resql) { + while ($obj = $db->fetch_object($resql)) { + $oldfield = $obj->field; + $newfield = str_replace(array(',f.facnumber', 'f.facnumber,', 'f.total,', 'f.tva,'), array(',f.ref', 'f.ref,', 'f.total_ht,', 'f.total_tva,'), $oldfield); + + if ($mode == 'export') { + $oldfilter = $obj->filter; + $newfilter = str_replace(array('f.facnumber=', 'f.total=', 'f.tva='), array('f.ref=', 'f.total_ht=', 'f.total_tva='), $oldfilter); + } else { + $oldfilter = ''; + $newfilter = ''; + } + + if ($oldfield != $newfield || $oldfilter != $newfilter) { + $sqlupd = 'UPDATE '.MAIN_DB_PREFIX.$mode."_model SET field = '".$db->escape($newfield)."'"; + if ($mode == 'export') { + $sqlupd .= ", filter = '".$db->escape($newfilter)."'"; + } + $sqlupd .= ' WHERE rowid='.$obj->rowid; + $resultstring .= ''.$sqlupd."\n"; + $resqlupd = $db->query($sqlupd); + if (!$resqlupd) { + dol_print_error($db); + $error++; + } + } + } + } else { + $error++; + } + if (!$error) { + $db->commit(); + } else { + dol_print_error($db); + $db->rollback(); + } + print ''.$langs->trans('MigrationImportOrExportProfiles', $mode)."
\n"; + print ''; + + if ($resultstring) { + print $resultstring; + } else { + print ''.$langs->trans("NothingToDo")."\n"; + } +} diff --git a/htdocs/knowledgemanagement/knowledgerecord_list.php b/htdocs/knowledgemanagement/knowledgerecord_list.php index 173ec749e2a..f54959024a2 100644 --- a/htdocs/knowledgemanagement/knowledgerecord_list.php +++ b/htdocs/knowledgemanagement/knowledgerecord_list.php @@ -115,7 +115,7 @@ foreach ($object->fields as $key => $val) { 'checked'=>(($visible < 0) ? 0 : 1), 'enabled'=>($visible != 3 && dol_eval($val['enabled'], 1)), 'position'=>$val['position'], - 'help'=>$val['help'] + 'help'=> isset($val['help']) ? $val['help'] : '' ); } } diff --git a/htdocs/knowledgemanagement/knowledgerecord_note.php b/htdocs/knowledgemanagement/knowledgerecord_note.php index a6a9974a9c8..87d9eed9bdb 100644 --- a/htdocs/knowledgemanagement/knowledgerecord_note.php +++ b/htdocs/knowledgemanagement/knowledgerecord_note.php @@ -66,7 +66,13 @@ $permissiontoadd = $user->rights->knowledgemanagement->knowledgerecord->write; / * Actions */ -include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once +$reshook = $hookmanager->executeHooks('doActions', array(), $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) { + setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); +} +if (empty($reshook)) { + include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once +} /* diff --git a/htdocs/langs/am_ET/deliveries.lang b/htdocs/langs/am_ET/deliveries.lang index 1f48c01de75..cd8a36e6c70 100644 --- a/htdocs/langs/am_ET/deliveries.lang +++ b/htdocs/langs/am_ET/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Recipient ErrorStockIsNotEnough=There's not enough stock Shippable=Shippable NonShippable=Not Shippable +ShowShippableStatus=Show shippable status ShowReceiving=Show delivery receipt NonExistentOrder=Nonexistent order +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/am_ET/exports.lang b/htdocs/langs/am_ET/exports.lang index a0eb7161ef2..cb652229825 100644 --- a/htdocs/langs/am_ET/exports.lang +++ b/htdocs/langs/am_ET/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Type of line (0=product, 1=service) FileWithDataToImport=File with data to import FileToImport=Source file to import FileMustHaveOneOfFollowingFormat=File to import must have one of following formats -DownloadEmptyExample=Download template file with field content information (* are mandatory fields) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... SourceFileFormat=Source file format diff --git a/htdocs/langs/ar_EG/website.lang b/htdocs/langs/ar_EG/website.lang index 4f2ff392475..5bc16ab4864 100644 --- a/htdocs/langs/ar_EG/website.lang +++ b/htdocs/langs/ar_EG/website.lang @@ -9,3 +9,4 @@ WEBSITE_ALIASALT=أسماء الصفحات / الأسماء المستعارة WEBSITE_ALIASALTDesc=استخدم هنا قائمة بأسماء / أسماء مستعارة أخرى بحيث يمكن الوصول إلى الصفحة أيضًا باستخدام هذه الأسماء / الأسماء المستعارة الأخرى (على سبيل المثال ، الاسم القديم بعد إعادة تسمية الاسم المستعار للحفاظ على الرابط الخلفي في عمل الرابط / الاسم القديم). النحو هو:
Alternativename1 ، و Alternativename2 ، ... WEBSITE_CSS_URL=عنوان URL لملف CSS الخارجي WEBSITE_CSS_INLINE=محتوى ملف CSS (مشترك لجميع الصفحات) +PreviewOfSiteNotYetAvailable=Preview of your website %s not yet available. You must first 'Import a full website template' or just 'Add a page/container'. diff --git a/htdocs/langs/ar_IQ/deliveries.lang b/htdocs/langs/ar_IQ/deliveries.lang index fdfd6404a8a..cd8a36e6c70 100644 --- a/htdocs/langs/ar_IQ/deliveries.lang +++ b/htdocs/langs/ar_IQ/deliveries.lang @@ -30,3 +30,4 @@ NonShippable=Not Shippable ShowShippableStatus=Show shippable status ShowReceiving=Show delivery receipt NonExistentOrder=Nonexistent order +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/ar_IQ/exports.lang b/htdocs/langs/ar_IQ/exports.lang index a0eb7161ef2..cb652229825 100644 --- a/htdocs/langs/ar_IQ/exports.lang +++ b/htdocs/langs/ar_IQ/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Type of line (0=product, 1=service) FileWithDataToImport=File with data to import FileToImport=Source file to import FileMustHaveOneOfFollowingFormat=File to import must have one of following formats -DownloadEmptyExample=Download template file with field content information (* are mandatory fields) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... SourceFileFormat=Source file format diff --git a/htdocs/langs/ar_SA/exports.lang b/htdocs/langs/ar_SA/exports.lang index 53ce1753324..41308469daa 100644 --- a/htdocs/langs/ar_SA/exports.lang +++ b/htdocs/langs/ar_SA/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Type of line (0=product, 1=نوع الخط (0= منت FileWithDataToImport=ملف استيراد البيانات FileToImport=مصدر لاستيراد ملف FileMustHaveOneOfFollowingFormat=File to import must have one of following formats -DownloadEmptyExample=Download template file with field content information (* are mandatory fields) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... SourceFileFormat=مصدر تنسيق ملف diff --git a/htdocs/langs/az_AZ/deliveries.lang b/htdocs/langs/az_AZ/deliveries.lang index 1f48c01de75..cd8a36e6c70 100644 --- a/htdocs/langs/az_AZ/deliveries.lang +++ b/htdocs/langs/az_AZ/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Recipient ErrorStockIsNotEnough=There's not enough stock Shippable=Shippable NonShippable=Not Shippable +ShowShippableStatus=Show shippable status ShowReceiving=Show delivery receipt NonExistentOrder=Nonexistent order +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/az_AZ/exports.lang b/htdocs/langs/az_AZ/exports.lang index a0eb7161ef2..cb652229825 100644 --- a/htdocs/langs/az_AZ/exports.lang +++ b/htdocs/langs/az_AZ/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Type of line (0=product, 1=service) FileWithDataToImport=File with data to import FileToImport=Source file to import FileMustHaveOneOfFollowingFormat=File to import must have one of following formats -DownloadEmptyExample=Download template file with field content information (* are mandatory fields) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... SourceFileFormat=Source file format diff --git a/htdocs/langs/bg_BG/deliveries.lang b/htdocs/langs/bg_BG/deliveries.lang index b3ce159a9d2..f6ad8076ae9 100644 --- a/htdocs/langs/bg_BG/deliveries.lang +++ b/htdocs/langs/bg_BG/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Получател ErrorStockIsNotEnough=Няма достатъчна наличност Shippable=Годно за изпращане NonShippable=Негодно за изпращане +ShowShippableStatus=Show shippable status ShowReceiving=Показване на разписка за доставка NonExistentOrder=Несъществуваща поръчка +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/bg_BG/exports.lang b/htdocs/langs/bg_BG/exports.lang index f371671587f..8abaa3d6bf5 100644 --- a/htdocs/langs/bg_BG/exports.lang +++ b/htdocs/langs/bg_BG/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Тип ред (0 = продукт, 1 = услуга) FileWithDataToImport=Файл с данни за импортиране FileToImport=Входен файл за импортиране FileMustHaveOneOfFollowingFormat=Файлът за импортиране трябва да бъде в един от следните формати -DownloadEmptyExample=Изтегляне на шаблонния файл с информация за съдържанието на полето (* са задължителни полета) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Изберете формата на файла, който да използвате като формат за импортиране, като кликнете върху иконата на %s, за да го изберете... ChooseFileToImport=Прикачете файл, след това кликнете върху иконата %s, за да изберете файла като източник при импортиране... SourceFileFormat=Формат на входния файл diff --git a/htdocs/langs/bn_BD/deliveries.lang b/htdocs/langs/bn_BD/deliveries.lang index 1f48c01de75..cd8a36e6c70 100644 --- a/htdocs/langs/bn_BD/deliveries.lang +++ b/htdocs/langs/bn_BD/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Recipient ErrorStockIsNotEnough=There's not enough stock Shippable=Shippable NonShippable=Not Shippable +ShowShippableStatus=Show shippable status ShowReceiving=Show delivery receipt NonExistentOrder=Nonexistent order +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/bn_BD/exports.lang b/htdocs/langs/bn_BD/exports.lang index a0eb7161ef2..cb652229825 100644 --- a/htdocs/langs/bn_BD/exports.lang +++ b/htdocs/langs/bn_BD/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Type of line (0=product, 1=service) FileWithDataToImport=File with data to import FileToImport=Source file to import FileMustHaveOneOfFollowingFormat=File to import must have one of following formats -DownloadEmptyExample=Download template file with field content information (* are mandatory fields) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... SourceFileFormat=Source file format diff --git a/htdocs/langs/bn_IN/deliveries.lang b/htdocs/langs/bn_IN/deliveries.lang index 1f48c01de75..cd8a36e6c70 100644 --- a/htdocs/langs/bn_IN/deliveries.lang +++ b/htdocs/langs/bn_IN/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Recipient ErrorStockIsNotEnough=There's not enough stock Shippable=Shippable NonShippable=Not Shippable +ShowShippableStatus=Show shippable status ShowReceiving=Show delivery receipt NonExistentOrder=Nonexistent order +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/bn_IN/exports.lang b/htdocs/langs/bn_IN/exports.lang index a0eb7161ef2..cb652229825 100644 --- a/htdocs/langs/bn_IN/exports.lang +++ b/htdocs/langs/bn_IN/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Type of line (0=product, 1=service) FileWithDataToImport=File with data to import FileToImport=Source file to import FileMustHaveOneOfFollowingFormat=File to import must have one of following formats -DownloadEmptyExample=Download template file with field content information (* are mandatory fields) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... SourceFileFormat=Source file format diff --git a/htdocs/langs/bs_BA/deliveries.lang b/htdocs/langs/bs_BA/deliveries.lang index 1d1cc2fba9b..4ccb70f6a24 100644 --- a/htdocs/langs/bs_BA/deliveries.lang +++ b/htdocs/langs/bs_BA/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Primalac ErrorStockIsNotEnough=There's not enough stock Shippable=Shippable NonShippable=Not Shippable +ShowShippableStatus=Show shippable status ShowReceiving=Show delivery receipt NonExistentOrder=Nonexistent order +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/bs_BA/exports.lang b/htdocs/langs/bs_BA/exports.lang index 30e7e97e5a5..c030d48d370 100644 --- a/htdocs/langs/bs_BA/exports.lang +++ b/htdocs/langs/bs_BA/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Type of line (0=product, 1=service) FileWithDataToImport=File with data to import FileToImport=Source file to import FileMustHaveOneOfFollowingFormat=File to import must have one of following formats -DownloadEmptyExample=Download template file with field content information (* are mandatory fields) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... SourceFileFormat=Source file format diff --git a/htdocs/langs/ca_ES/deliveries.lang b/htdocs/langs/ca_ES/deliveries.lang index f1dd899fea4..b6d8fbf55f8 100644 --- a/htdocs/langs/ca_ES/deliveries.lang +++ b/htdocs/langs/ca_ES/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Destinatari ErrorStockIsNotEnough=No hi ha estoc suficient Shippable=Es pot enviar NonShippable=No es pot enviar +ShowShippableStatus=Mostra l'estat d'enviament ShowReceiving=Mostra el rebut d'entrega NonExistentOrder=Comanda inexistent +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/ca_ES/exports.lang b/htdocs/langs/ca_ES/exports.lang index f66769a30f7..f0ebbe4d451 100644 --- a/htdocs/langs/ca_ES/exports.lang +++ b/htdocs/langs/ca_ES/exports.lang @@ -33,7 +33,7 @@ FormatedImport=Assistent d'importació FormatedImportDesc1=Aquest mòdul us permet actualitzar les dades existents o afegir nous objectes a la base de dades d'un fitxer sense coneixements tècnics, utilitzant un assistent. FormatedImportDesc2=El primer pas és triar el tipus de dades que voleu importar, a continuació, el format del fitxer font, a continuació, els camps que voleu importar. FormatedExport=Assistent d'exportació -FormatedExportDesc1=Aquestes eines permeten l'exportació de dades personalitzades mitjançant un assistent, per ajudar-vos en el procés sense necessitat de coneixements tècnics. +FormatedExportDesc1=Aquestes eines permeten exportar dades personalitzades mitjançant un assistent per a ajudar-vos en el procés sense necessitat de coneixements tècnics. FormatedExportDesc2=El primer pas és triar un conjunt de dades predefinit, després els camps que voleu exportar i en quin ordre. FormatedExportDesc3=Quan se seleccionen les dades per a exportar, podeu triar el format del fitxer de sortida. Sheet=Fulla @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Tipus de línia (0=producte, 1=servei) FileWithDataToImport=Arxiu que conté les dades a importar FileToImport=Arxiu origen a importar FileMustHaveOneOfFollowingFormat=El fitxer a importar ha de tenir un dels següents formats -DownloadEmptyExample=Baixeu un fitxer de plantilla amb informació de contingut de camp (* són camps obligatoris) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Trieu el format del fitxer que voleu utilitzar com a format de fitxer d'importació fent clic a la icona %s per seleccionar-lo ... ChooseFileToImport=Pengeu un fitxer i feu clic a la icona %s per seleccionar el fitxer com a fitxer d'importació d'origen ... SourceFileFormat=Format de l'arxiu origen @@ -80,7 +81,7 @@ SelectAtLeastOneField=Bascular com a mínim un camp origen a la columna de camps SelectFormat=Seleccioneu aquest format de fitxer d'importació RunImportFile=Importa dades NowClickToRunTheImport=Comproveu els resultats de la simulació d'importació. Corregiu els errors i torneu a provar.
Quan la simulació no informa d'errors, pot procedir a importar les dades a la base de dades. -DataLoadedWithId=Les dades importades tindran un camp addicional a cada taula de base de dades amb aquest identificador d'importació: %s , per permetre que es pugui cercar en el cas d'investigar un problema relacionat amb aquesta importació. +DataLoadedWithId=Les dades importades tindran un camp addicional a cada taula de base de dades amb aquest identificador d'importació: %s , per a permetre que es pugui cercar en el cas d'investigar un problema relacionat amb aquesta importació. ErrorMissingMandatoryValue=Les dades obligatòries estan buides al fitxer de codi font %s . TooMuchErrors=Encara hi ha 0xaek83365837f %s altres línies d'origen amb errors, però la producció ha estat limitada. TooMuchWarnings=Encara hi ha %s altres línies d'origen amb advertències, però la producció ha estat limitada. diff --git a/htdocs/langs/cs_CZ/deliveries.lang b/htdocs/langs/cs_CZ/deliveries.lang index e38b668da7f..5941d685f1b 100644 --- a/htdocs/langs/cs_CZ/deliveries.lang +++ b/htdocs/langs/cs_CZ/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Příjemce ErrorStockIsNotEnough=Dostatečné množství není skladem Shippable=Doručitelné NonShippable=Nedoručitelné +ShowShippableStatus=Show shippable status ShowReceiving=Zobrazit potvrzení o doručení NonExistentOrder=Neexistující objednávka +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/cs_CZ/exports.lang b/htdocs/langs/cs_CZ/exports.lang index 34c0d9b41d6..f185c884609 100644 --- a/htdocs/langs/cs_CZ/exports.lang +++ b/htdocs/langs/cs_CZ/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Použitý typ řádku (0 = produkt, 1 = služba) FileWithDataToImport=Soubor s daty pro import FileToImport=Zdrojový soubor k importu FileMustHaveOneOfFollowingFormat=Importovaný soubor musí mít jeden z následujících formátů -DownloadEmptyExample=Stáhnout soubor šablony s informacemi o obsahu pole (* jsou povinná pole) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Vyberte formát souboru, který chcete použít jako formát souboru importu klepnutím na ikonu %s pro jeho výběr ... ChooseFileToImport=Pro nahrání souboru klepněte na ikonku %s pro výběr souboru jako zdrojový soubor importu ... SourceFileFormat=Zdrojový soubor diff --git a/htdocs/langs/da_DK/accountancy.lang b/htdocs/langs/da_DK/accountancy.lang index 374c373fffe..4153f9133a9 100644 --- a/htdocs/langs/da_DK/accountancy.lang +++ b/htdocs/langs/da_DK/accountancy.lang @@ -48,7 +48,8 @@ CountriesNotInEEC=Lande ikke i EU CountriesInEECExceptMe=Lande i EU undtagen %s CountriesExceptMe=Alle lande undtagen %s AccountantFiles=Eksporter kildedokumenter -ExportAccountingSourceDocHelp=Med dette værktøj kan du eksportere de kildehændelser (liste og PDF-filer), der blev brugt til at generere din regnskab. For at eksportere dine tidsskrifter skal du bruge menuindgangen %s - %s. +ExportAccountingSourceDocHelp=Med dette værktøj kan du eksportere de kildehændelser (liste i CSV og PDF-filer), der blev brugt til at generere din regnskab. +ExportAccountingSourceDocHelp2=For at eksportere dine tidsskrifter skal du bruge menuindgangen %s - %s. VueByAccountAccounting=Vis efter regnskabskonto VueBySubAccountAccounting=Vis efter regnskabsmæssig underkonto diff --git a/htdocs/langs/da_DK/admin.lang b/htdocs/langs/da_DK/admin.lang index 060f9b2a504..25c27871bd5 100644 --- a/htdocs/langs/da_DK/admin.lang +++ b/htdocs/langs/da_DK/admin.lang @@ -2144,3 +2144,4 @@ YouEnableDeprecatedWSAPIsUseRESTAPIsInstead=Du aktiverede forældet WS API. Du s RandomlySelectedIfSeveral=Valgt tilfældigt, hvis der er flere billeder tilgængelige DatabasePasswordObfuscated=Databaseadgangskode er tilsløret i conf-fil DatabasePasswordNotObfuscated=Databaseadgangskode er IKKE tilsløret i conf-fil +APIsAreNotEnabled=API-moduler er ikke aktiveret diff --git a/htdocs/langs/da_DK/deliveries.lang b/htdocs/langs/da_DK/deliveries.lang index d4ea903643c..f5bb5bc9ae1 100644 --- a/htdocs/langs/da_DK/deliveries.lang +++ b/htdocs/langs/da_DK/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Modtager ErrorStockIsNotEnough=Der er ikke nok lager Shippable=Fragtvarer NonShippable=Kan ikke sendes +ShowShippableStatus=Vis status, der kan sendes ShowReceiving=Vis leverings kvittering NonExistentOrder=ikke-eksisterende ordre +StockQuantitiesAlreadyAllocatedOnPreviousLines = Lagermængder, der allerede er tildelt på tidligere linjer diff --git a/htdocs/langs/da_DK/exports.lang b/htdocs/langs/da_DK/exports.lang index 3b1b4072def..374aad967a5 100644 --- a/htdocs/langs/da_DK/exports.lang +++ b/htdocs/langs/da_DK/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Strækningstype (0= produkt, 1= tjeneste) FileWithDataToImport=Fil med data til at importere FileToImport=Kildefilen til at importere FileMustHaveOneOfFollowingFormat=Fil, der skal importeres, skal have et af følgende formater -DownloadEmptyExample=Download skabelonfil med feltindholdsinformation (* er obligatoriske felter) +DownloadEmptyExample=Download skabelonfil med feltindholdsoplysninger +StarAreMandatory=* er obligatoriske felter ChooseFormatOfFileToImport=Vælg det filformat, der skal bruges som importfilformat, ved at klikke på ikonet %s for at vælge det ... ChooseFileToImport=Upload fil og klik derefter på ikonet %s for at vælge fil som kilde importfil ... SourceFileFormat=Kilde filformat diff --git a/htdocs/langs/da_DK/knowledgemanagement.lang b/htdocs/langs/da_DK/knowledgemanagement.lang index fbd9de8b1ee..b3035583a95 100644 --- a/htdocs/langs/da_DK/knowledgemanagement.lang +++ b/htdocs/langs/da_DK/knowledgemanagement.lang @@ -37,15 +37,7 @@ About = Om KnowledgeManagementAbout = Om Knowledge Management KnowledgeManagementAboutPage = Videnstyring om side -# -# Sample page -# KnowledgeManagementArea = Videnshåndtering - - -# -# Menu -# MenuKnowledgeRecord = Videnbase ListKnowledgeRecord = Liste over artikler NewKnowledgeRecord = Ny artikel @@ -53,3 +45,5 @@ ValidateReply = Valider løsning KnowledgeRecords = Artikler KnowledgeRecord = Artikel KnowledgeRecordExtraFields = Ekstra felter til artikel +GroupOfTicket=Gruppe af billetter +YouCanLinkArticleToATicketCategory=Du kan linke en artikel til en billetgruppe (så artiklen vil blive foreslået under kvalificeringen af nye billetter) diff --git a/htdocs/langs/da_DK/languages.lang b/htdocs/langs/da_DK/languages.lang index bf7456b4cfd..1ca08b5f366 100644 --- a/htdocs/langs/da_DK/languages.lang +++ b/htdocs/langs/da_DK/languages.lang @@ -4,6 +4,7 @@ Language_ar_AR=Arabisk Language_ar_EG=Arabisk (Egypten) Language_ar_SA=Arabisk Language_ar_TN=Arabisk (Tunesien) +Language_ar_IQ=Arabisk (Irak) Language_az_AZ=Aserbajdsjansk Language_bn_BD=Bengali Language_bn_IN=Bengali (Indien) @@ -83,6 +84,7 @@ Language_ne_NP=nepalesisk Language_nl_BE=Hollandsk (Belgien) Language_nl_NL=Hollandske Language_pl_PL=Polsk +Language_pt_AO=Portugisisk (Angola) Language_pt_BR=Portugisisk (Brasilien) Language_pt_PT=Portugisisk Language_ro_MD=Rumænsk (Moldavien) diff --git a/htdocs/langs/da_DK/products.lang b/htdocs/langs/da_DK/products.lang index 0daacebcd03..8c90dd9aa44 100644 --- a/htdocs/langs/da_DK/products.lang +++ b/htdocs/langs/da_DK/products.lang @@ -277,7 +277,7 @@ PriceByCustomer=Forskellige priser for hver kunde PriceCatalogue=En enkelt salgspris pr. Produkt / service PricingRule=Regler for salgspriser AddCustomerPrice=Tilføj pris ved kunde -ForceUpdateChildPriceSoc=Indstil samme pris på kundernes datterselskaber +ForceUpdateChildPriceSoc=Angiv samme pris på kundens datterselskaber PriceByCustomerLog=Log af tidligere kundepriser MinimumPriceLimit=Minimumsprisen kan ikke være lavere end %s MinimumRecommendedPrice=Minimum anbefalet pris er: %s @@ -296,6 +296,7 @@ ComposedProductIncDecStock=Forøg / sænk lagerbeholdning ved forældreændring ComposedProduct=Børneprodukter MinSupplierPrice=Min købskurs MinCustomerPrice=Mindste salgspris +NoDynamicPrice=Ingen dynamisk pris DynamicPriceConfiguration=Dynamisk priskonfiguration DynamicPriceDesc=Du kan definere matematiske formler til beregning af kunde- eller leverandørpriser. Sådanne formler kan bruge alle matematiske operatorer, nogle konstanter og variabler. Du kan her definere de variabler, du vil bruge. Hvis variablen har brug for en automatisk opdatering, kan du definere den eksterne URL, så Dolibarr kan opdatere værdien automatisk. AddVariable=Tilføj variabel diff --git a/htdocs/langs/da_DK/stocks.lang b/htdocs/langs/da_DK/stocks.lang index 5cfede398e2..05a8fbbf978 100644 --- a/htdocs/langs/da_DK/stocks.lang +++ b/htdocs/langs/da_DK/stocks.lang @@ -60,7 +60,7 @@ EnhancedValueOfWarehouses=Lager værdi UserWarehouseAutoCreate=Opret et brugerlager automatisk, når du opretter en bruger AllowAddLimitStockByWarehouse=Administrer også værdi for minimum og ønsket lager pr. Parring (produktlager) ud over værdien for minimum og ønsket lager pr. Produkt RuleForWarehouse=Regel for lagre -WarehouseAskWarehouseOnThirparty=Indstil et lager på tredjepart +WarehouseAskWarehouseOnThirparty=Indstil et lager på tredjeparter WarehouseAskWarehouseDuringPropal=Sæt et lager på kommercielle forslag WarehouseAskWarehouseDuringOrder=Indstil et lager med salgsordrer UserDefaultWarehouse=Indstil et lager til brugere @@ -167,8 +167,8 @@ MovementTransferStock=Lageroverførsel af produkt %s til et andet lager InventoryCodeShort=Inv./Mov. kode NoPendingReceptionOnSupplierOrder=Ingen afventende modtagelse på grund af åben indkøbsordre ThisSerialAlreadyExistWithDifferentDate=Dette parti / serienummer ( %s ) eksisterer allerede, men med forskellige eatby eller sellby dato (fundet %s men du skrev %s ) -OpenAll=Åbn for alle handlinger -OpenInternal=Åben kun for interne handlinger +OpenAnyMovement=Åben (alle bevægelser) +OpenInternal=Åben (kun intern bevægelse) UseDispatchStatus=Brug en forsendelsesstatus (godkend / afvis) til produktlinjer ved modtagelse af indkøbsordrer OptionMULTIPRICESIsOn=Mulighed for "flere priser pr. Segment" er på. Det betyder, at et produkt har flere salgspriser, så værdien til salg ikke kan beregnes ProductStockWarehouseCreated=Lagergrænse for alarm og ønsket optimal lager korrekt oprettet diff --git a/htdocs/langs/da_DK/ticket.lang b/htdocs/langs/da_DK/ticket.lang index d668d4dabb9..ef63445750d 100644 --- a/htdocs/langs/da_DK/ticket.lang +++ b/htdocs/langs/da_DK/ticket.lang @@ -34,7 +34,8 @@ TicketDictResolution=Opgave - Afsluttet TicketTypeShortCOM=Kommercielt spørgsmål TicketTypeShortHELP=Anmodning om hjælp -TicketTypeShortISSUE=Problem, fejl eller problemer +TicketTypeShortISSUE=Problem eller fejl +TicketTypeShortPROBLEM=Problem TicketTypeShortREQUEST=Skift eller anmodning om forbedring TicketTypeShortPROJET=Projekt TicketTypeShortOTHER=Andre @@ -54,14 +55,15 @@ TypeContact_ticket_internal_SUPPORTTEC=Tildelt bruger TypeContact_ticket_external_SUPPORTCLI=Kundekontakt / hændelsesporing TypeContact_ticket_external_CONTRIBUTOR=Ekstern bidragyder -OriginEmail=Email kilde +OriginEmail=E-mail reporter Notify_TICKET_SENTBYMAIL=Send opgaver besked via Email # Status Read=Læs Assigned=Tildelt InProgress=I gang -NeedMoreInformation=Venter på information +NeedMoreInformation=Venter på reporterfeedback +NeedMoreInformationShort=Venter på feedback Answered=Besvaret Waiting=Venter Closed=Lukket @@ -160,7 +162,7 @@ CreatedBy=Lavet af NewTicket=Ny opgave SubjectAnswerToTicket=Opgave svar TicketTypeRequest=Anmodningstype -TicketCategory=Gruppe +TicketCategory=Billetkategorisering SeeTicket=Se opgave TicketMarkedAsRead=Opgaven er blevet markeret som læst TicketReadOn=Læs videre @@ -211,6 +213,7 @@ TicketMessageHelp=Kun denne tekst gemmes i meddelelseslisten på billetkort. TicketMessageSubstitutionReplacedByGenericValues=Substitutionsvariabler erstattes af generiske værdier. TimeElapsedSince=Tid forløbet siden TicketTimeToRead=Tid forløbet før læst +TicketTimeElapsedBeforeSince=Forløbet tid før / siden TicketContacts=Kontakter billet TicketDocumentsLinked=Dokumenter knyttet til opgaven ConfirmReOpenTicket=Bekræft genåbne denne opgave? diff --git a/htdocs/langs/de_AT/admin.lang b/htdocs/langs/de_AT/admin.lang index 34368689cf1..084f4086695 100644 --- a/htdocs/langs/de_AT/admin.lang +++ b/htdocs/langs/de_AT/admin.lang @@ -148,6 +148,7 @@ LDAPSynchronization=LDAP Synchronisierung LDAPFunctionsNotAvailableOnPHP=LDAP Funktionen nicht verfügbar in Deinem PHP LDAPFieldFullname=vollständiger Name ClickToDialSetup=Click-to-Dial-Moduleinstellungen +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field. MailToSendShipment=Sendungen MailToSendIntervention=Eingriffe OperationParamDesc=Define the values to use for the object of the action, or how to extract values. For example:
objproperty1=SET:the value to set
objproperty2=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:value used if objproperty3 is not already defined
objproperty4=EXTRACT:HEADER:X-Myheaderkey:\\s*([^\\s]*)
options_myextrafield1=EXTRACT:SUBJECT:([^\n]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. diff --git a/htdocs/langs/de_AT/salaries.lang b/htdocs/langs/de_AT/salaries.lang new file mode 100644 index 00000000000..c9bd3bec17b --- /dev/null +++ b/htdocs/langs/de_AT/salaries.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - salaries +LastSalaries=Latest %s salary payments +AllSalaries=All salary payments diff --git a/htdocs/langs/de_AT/users.lang b/htdocs/langs/de_AT/users.lang index 271a945e1f3..80a15bddaf3 100644 --- a/htdocs/langs/de_AT/users.lang +++ b/htdocs/langs/de_AT/users.lang @@ -5,3 +5,5 @@ PasswordChangedAndSentTo=Passwort geändert und an %s gesandt. PasswordChangeRequestSent=Antrag auf eine Änderung das Passworts für %s an %s gesandt. LinkedToDolibarrUser=Mit Systembenutzer verknüpfen LinkedToDolibarrThirdParty=Mit Partner verknüpfen +NbOfUsers=No. of users +NbOfPermissions=No. of permissions diff --git a/htdocs/langs/de_AT/website.lang b/htdocs/langs/de_AT/website.lang new file mode 100644 index 00000000000..910cff6b702 --- /dev/null +++ b/htdocs/langs/de_AT/website.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - website +PreviewOfSiteNotYetAvailable=Preview of your website %s not yet available. You must first 'Import a full website template' or just 'Add a page/container'. diff --git a/htdocs/langs/de_CH/website.lang b/htdocs/langs/de_CH/website.lang index 8504c7c5535..687f5a43d7d 100644 --- a/htdocs/langs/de_CH/website.lang +++ b/htdocs/langs/de_CH/website.lang @@ -5,6 +5,7 @@ WEBSITE_TYPE_CONTAINER=Seiten - / Containertyp WEBSITE_PAGE_EXAMPLE=Webseite als Vorlage benutzen WEBSITE_ALIASALT=Zusätzliche Seitennamen / Aliase WEBSITE_CSS_URL=URL zu externer CSS Datei +PreviewOfSiteNotYetAvailable=Preview of your website %s not yet available. You must first 'Import a full website template' or just 'Add a page/container'. ViewSiteInNewTab=Webauftritt in neuem Tab anzeigen SetAsHomePage=Als Startseite definieren WebsiteAccounts=Webseitenkonten diff --git a/htdocs/langs/de_DE/deliveries.lang b/htdocs/langs/de_DE/deliveries.lang index c3c906b07e4..e2b3395ea88 100644 --- a/htdocs/langs/de_DE/deliveries.lang +++ b/htdocs/langs/de_DE/deliveries.lang @@ -30,3 +30,4 @@ NonShippable=Nicht versandfertig ShowShippableStatus=Versandstatus anzeigen ShowReceiving=Zustellbestätigung anzeigen NonExistentOrder=Auftrag existiert nicht +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/de_DE/exports.lang b/htdocs/langs/de_DE/exports.lang index 911f2646c68..4afed3a9e25 100644 --- a/htdocs/langs/de_DE/exports.lang +++ b/htdocs/langs/de_DE/exports.lang @@ -30,10 +30,10 @@ ExportCsvSeparator=CSV-Trennzeichen ImportCsvSeparator=CSV-Trennzeichen Step=Schritt FormatedImport=Import-Assistent -FormatedImportDesc1=Mit diesem Modul können Sie vorhandene Daten aktualisieren oder mithilfe eines Assistenten neue Objekte aus einer Datei in die Datenbank einfügen, ohne über technische Kenntnisse zu verfügen. +FormatedImportDesc1=Dieses Modul ermöglicht den Import personalisierter Daten mithilfe eines Assistenten.\nTechnische Kenntnisse sind hierbei nicht erforderlich. FormatedImportDesc2=Zunächst müssen Sie die Art der zu importierenden Daten, dann das Format der Quelldatei und dann die zu importierenden Felder auswählen. FormatedExport=Export-Assistent -FormatedExportDesc1=Diese Tools ermöglichen den Export personalisierter Daten mithilfe eines Assistenten, um Sie dabei zu unterstützen, ohne dass technische Kenntnisse erforderlich sind. +FormatedExportDesc1=Dieses Modul ermöglicht den Export personalisierter Daten mithilfe eines Assistenten.\nTechnische Kenntnisse sind hierbei nicht erforderlich. FormatedExportDesc2=Der erste Schritt besteht darin, einen vordefinierten Datensatz auszuwählen und dann anzugeben, welche Felder in welcher Reihenfolge exportiert werden sollen. FormatedExportDesc3=Wenn zu exportierende Daten ausgewählt sind, können Sie das Format der Ausgabedatei auswählen. Sheet=Blatt @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Art der Zeile (0=Produkt, 1=Leistung) FileWithDataToImport=Datei mit zu importierenden Daten FileToImport=Quelldatei für Import FileMustHaveOneOfFollowingFormat=Die zu importierende Datei muss eines der folgenden Formate haben -DownloadEmptyExample=Vorlagendatei mit Feldinhaltsinformationen herunterladen (* sind Pflichtfelder) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Wählen Sie das Dateiformat aus, das als Importdateiformat verwendet werden soll, indem Sie auf das Symbol %s klicken, um es auszuwählen ... ChooseFileToImport=Datei hochladen und dann auf das Symbol %s klicken, um die Datei als Quell-Importdatei auszuwählen ... SourceFileFormat=Quelldateiformat diff --git a/htdocs/langs/el_CY/admin.lang b/htdocs/langs/el_CY/admin.lang index 74ee870f906..e2d4c78a52e 100644 --- a/htdocs/langs/el_CY/admin.lang +++ b/htdocs/langs/el_CY/admin.lang @@ -1,2 +1,3 @@ # Dolibarr language file - Source file is en_US - admin +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field. EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it. In the parameter field you can use for example 'EXTRACT:BODY:Name:\\s([^\\s]*)' if you want to extract the name of the thirdparty from a string 'Name: name to find' found into the body. diff --git a/htdocs/langs/el_CY/users.lang b/htdocs/langs/el_CY/users.lang new file mode 100644 index 00000000000..4a412122b08 --- /dev/null +++ b/htdocs/langs/el_CY/users.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - users +NbOfUsers=No. of users +NbOfPermissions=No. of permissions diff --git a/htdocs/langs/el_CY/website.lang b/htdocs/langs/el_CY/website.lang new file mode 100644 index 00000000000..910cff6b702 --- /dev/null +++ b/htdocs/langs/el_CY/website.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - website +PreviewOfSiteNotYetAvailable=Preview of your website %s not yet available. You must first 'Import a full website template' or just 'Add a page/container'. diff --git a/htdocs/langs/el_GR/deliveries.lang b/htdocs/langs/el_GR/deliveries.lang index cdb0fc9be46..5ec67327cf4 100644 --- a/htdocs/langs/el_GR/deliveries.lang +++ b/htdocs/langs/el_GR/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Παραλήπτης ErrorStockIsNotEnough=Δεν υπάρχει αρκετό απόθεμα Shippable=Για Αποστολή NonShippable=Δεν αποστέλλονται +ShowShippableStatus=Show shippable status ShowReceiving=Show delivery receipt NonExistentOrder=Ανύπαρκτη σειρά +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/el_GR/exports.lang b/htdocs/langs/el_GR/exports.lang index 28459f2238d..d61a2aa3779 100644 --- a/htdocs/langs/el_GR/exports.lang +++ b/htdocs/langs/el_GR/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Type of line (0=product, 1=service) FileWithDataToImport=File with data to import FileToImport=Source file to import FileMustHaveOneOfFollowingFormat=Το αρχείο για εισαγωγή πρέπει να έχει μία από τις ακόλουθες μορφές -DownloadEmptyExample=Λήψη αρχείου προτύπου με πληροφορίες περιεχομένου πεδίου (* είναι υποχρεωτικά πεδία) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Επιλέξτε τη μορφή αρχείου που θα χρησιμοποιηθεί ως μορφή αρχείου εισαγωγής κάνοντας κλικ στο εικονίδιο %s για να το επιλέξετε ... ChooseFileToImport=Μεταφορτώστε το αρχείο και κάντε κλικ στο εικονίδιο %s για να επιλέξετε αρχείο ως αρχείο εισαγωγής πηγής ... SourceFileFormat=Source file format diff --git a/htdocs/langs/en_AU/admin.lang b/htdocs/langs/en_AU/admin.lang index 0980facb414..7cac2619318 100644 --- a/htdocs/langs/en_AU/admin.lang +++ b/htdocs/langs/en_AU/admin.lang @@ -3,6 +3,7 @@ OldVATRates=Old GST rate NewVATRates=New GST rate DictionaryVAT=GST Rates or Sales Tax Rates OptionVatMode=GST due +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field. LinkColor=Colour of links OperationParamDesc=Define the values to use for the object of the action, or how to extract values. For example:
objproperty1=SET:the value to set
objproperty2=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:value used if objproperty3 is not already defined
objproperty4=EXTRACT:HEADER:X-Myheaderkey:\\s*([^\\s]*)
options_myextrafield1=EXTRACT:SUBJECT:([^\n]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it. In the parameter field you can use for example 'EXTRACT:BODY:Name:\\s([^\\s]*)' if you want to extract the name of the thirdparty from a string 'Name: name to find' found into the body. diff --git a/htdocs/langs/en_AU/salaries.lang b/htdocs/langs/en_AU/salaries.lang new file mode 100644 index 00000000000..c9bd3bec17b --- /dev/null +++ b/htdocs/langs/en_AU/salaries.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - salaries +LastSalaries=Latest %s salary payments +AllSalaries=All salary payments diff --git a/htdocs/langs/en_AU/users.lang b/htdocs/langs/en_AU/users.lang new file mode 100644 index 00000000000..4a412122b08 --- /dev/null +++ b/htdocs/langs/en_AU/users.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - users +NbOfUsers=No. of users +NbOfPermissions=No. of permissions diff --git a/htdocs/langs/en_AU/website.lang b/htdocs/langs/en_AU/website.lang new file mode 100644 index 00000000000..910cff6b702 --- /dev/null +++ b/htdocs/langs/en_AU/website.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - website +PreviewOfSiteNotYetAvailable=Preview of your website %s not yet available. You must first 'Import a full website template' or just 'Add a page/container'. diff --git a/htdocs/langs/en_CA/admin.lang b/htdocs/langs/en_CA/admin.lang index 62dd510c5e0..4f26613c7ae 100644 --- a/htdocs/langs/en_CA/admin.lang +++ b/htdocs/langs/en_CA/admin.lang @@ -2,6 +2,7 @@ LocalTax1Management=PST Management CompanyZip=Postal code LDAPFieldZip=Postal code +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field. FormatZip=Postal code OperationParamDesc=Define the values to use for the object of the action, or how to extract values. For example:
objproperty1=SET:the value to set
objproperty2=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:value used if objproperty3 is not already defined
objproperty4=EXTRACT:HEADER:X-Myheaderkey:\\s*([^\\s]*)
options_myextrafield1=EXTRACT:SUBJECT:([^\n]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it. In the parameter field you can use for example 'EXTRACT:BODY:Name:\\s([^\\s]*)' if you want to extract the name of the thirdparty from a string 'Name: name to find' found into the body. diff --git a/htdocs/langs/en_CA/salaries.lang b/htdocs/langs/en_CA/salaries.lang new file mode 100644 index 00000000000..c9bd3bec17b --- /dev/null +++ b/htdocs/langs/en_CA/salaries.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - salaries +LastSalaries=Latest %s salary payments +AllSalaries=All salary payments diff --git a/htdocs/langs/en_CA/users.lang b/htdocs/langs/en_CA/users.lang new file mode 100644 index 00000000000..4a412122b08 --- /dev/null +++ b/htdocs/langs/en_CA/users.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - users +NbOfUsers=No. of users +NbOfPermissions=No. of permissions diff --git a/htdocs/langs/en_CA/website.lang b/htdocs/langs/en_CA/website.lang new file mode 100644 index 00000000000..910cff6b702 --- /dev/null +++ b/htdocs/langs/en_CA/website.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - website +PreviewOfSiteNotYetAvailable=Preview of your website %s not yet available. You must first 'Import a full website template' or just 'Add a page/container'. diff --git a/htdocs/langs/en_GB/admin.lang b/htdocs/langs/en_GB/admin.lang index 0ed13e41f0f..fd5b1c3f7df 100644 --- a/htdocs/langs/en_GB/admin.lang +++ b/htdocs/langs/en_GB/admin.lang @@ -44,6 +44,7 @@ DictionaryAccountancyJournal=Finance journals CompanyZip=Postcode LDAPFieldZip=Postcode GenbarcodeLocation=Barcode generation command line tool (used by internal engine for some bar code types). Must be compatible with "genbarcode".
For example: /usr/local/bin/genbarcode +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field. FormatZip=Postcode OperationParamDesc=Define the values to use for the object of the action, or how to extract values. For example:
objproperty1=SET:the value to set
objproperty2=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:value used if objproperty3 is not already defined
objproperty4=EXTRACT:HEADER:X-Myheaderkey:\\s*([^\\s]*)
options_myextrafield1=EXTRACT:SUBJECT:([^\n]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it. In the parameter field you can use for example 'EXTRACT:BODY:Name:\\s([^\\s]*)' if you want to extract the name of the thirdparty from a string 'Name: name to find' found into the body. diff --git a/htdocs/langs/en_IN/admin.lang b/htdocs/langs/en_IN/admin.lang index 4b3c42b80b1..dd7034100a9 100644 --- a/htdocs/langs/en_IN/admin.lang +++ b/htdocs/langs/en_IN/admin.lang @@ -13,6 +13,7 @@ ProposalsNumberingModules=Quotation numbering models ProposalsPDFModules=Quotation documents models FreeLegalTextOnProposal=Free text on quotations WatermarkOnDraftProposal=Watermark on draft quotations (none if empty) +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field. MailToSendProposal=Customer quotations OperationParamDesc=Define the values to use for the object of the action, or how to extract values. For example:
objproperty1=SET:the value to set
objproperty2=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:value used if objproperty3 is not already defined
objproperty4=EXTRACT:HEADER:X-Myheaderkey:\\s*([^\\s]*)
options_myextrafield1=EXTRACT:SUBJECT:([^\n]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it. In the parameter field you can use for example 'EXTRACT:BODY:Name:\\s([^\\s]*)' if you want to extract the name of the thirdparty from a string 'Name: name to find' found into the body. diff --git a/htdocs/langs/en_IN/salaries.lang b/htdocs/langs/en_IN/salaries.lang new file mode 100644 index 00000000000..c9bd3bec17b --- /dev/null +++ b/htdocs/langs/en_IN/salaries.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - salaries +LastSalaries=Latest %s salary payments +AllSalaries=All salary payments diff --git a/htdocs/langs/en_IN/users.lang b/htdocs/langs/en_IN/users.lang new file mode 100644 index 00000000000..4a412122b08 --- /dev/null +++ b/htdocs/langs/en_IN/users.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - users +NbOfUsers=No. of users +NbOfPermissions=No. of permissions diff --git a/htdocs/langs/en_IN/website.lang b/htdocs/langs/en_IN/website.lang new file mode 100644 index 00000000000..910cff6b702 --- /dev/null +++ b/htdocs/langs/en_IN/website.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - website +PreviewOfSiteNotYetAvailable=Preview of your website %s not yet available. You must first 'Import a full website template' or just 'Add a page/container'. diff --git a/htdocs/langs/en_SG/admin.lang b/htdocs/langs/en_SG/admin.lang index c1d306ec390..25265594de5 100644 --- a/htdocs/langs/en_SG/admin.lang +++ b/htdocs/langs/en_SG/admin.lang @@ -1,3 +1,4 @@ # Dolibarr language file - Source file is en_US - admin +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field. OperationParamDesc=Define the values to use for the object of the action, or how to extract values. For example:
objproperty1=SET:the value to set
objproperty2=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:value used if objproperty3 is not already defined
objproperty4=EXTRACT:HEADER:X-Myheaderkey:\\s*([^\\s]*)
options_myextrafield1=EXTRACT:SUBJECT:([^\n]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it. In the parameter field you can use for example 'EXTRACT:BODY:Name:\\s([^\\s]*)' if you want to extract the name of the thirdparty from a string 'Name: name to find' found into the body. diff --git a/htdocs/langs/en_SG/salaries.lang b/htdocs/langs/en_SG/salaries.lang new file mode 100644 index 00000000000..c9bd3bec17b --- /dev/null +++ b/htdocs/langs/en_SG/salaries.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - salaries +LastSalaries=Latest %s salary payments +AllSalaries=All salary payments diff --git a/htdocs/langs/en_SG/users.lang b/htdocs/langs/en_SG/users.lang new file mode 100644 index 00000000000..4a412122b08 --- /dev/null +++ b/htdocs/langs/en_SG/users.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - users +NbOfUsers=No. of users +NbOfPermissions=No. of permissions diff --git a/htdocs/langs/en_SG/website.lang b/htdocs/langs/en_SG/website.lang new file mode 100644 index 00000000000..910cff6b702 --- /dev/null +++ b/htdocs/langs/en_SG/website.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - website +PreviewOfSiteNotYetAvailable=Preview of your website %s not yet available. You must first 'Import a full website template' or just 'Add a page/container'. diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index cc7e207ad4c..cd75af67b6d 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -53,6 +53,7 @@ InternalUser=Internal user ExternalUser=External user InternalUsers=Internal users ExternalUsers=External users +UserInterface=User interface GUISetup=Display SetupArea=Setup UploadNewTemplate=Upload new template(s) @@ -117,6 +118,7 @@ MultiCurrencySetup=Multi-currency setup MenuLimits=Limits and accuracy MenuIdParent=Parent menu ID DetailMenuIdParent=ID of parent menu (empty for a top menu) +ParentID=Parent ID DetailPosition=Sort number to define menu position AllMenus=All NotConfigured=Module/Application not configured @@ -1261,8 +1263,8 @@ YourPHPDoesNotHaveSSLSupport=SSL functions not available in your PHP DownloadMoreSkins=More skins to download SimpleNumRefModelDesc=Returns the reference number in the format %syymm-nnnn where yy is the year, mm is the month and nnnn is a sequential auto-incrementing number with no reset SimpleNumRefNoDateModelDesc=Returns the reference number in the format %s-nnnn where nnnn is a sequential auto-incrementing number with no reset -ShowProfIdInAddress=Show professional id with addresses -ShowVATIntaInAddress=Hide intra-Community VAT number with addresses +ShowProfIdInAddress=Show professional ID with addresses +ShowVATIntaInAddress=Hide intra-Community VAT number TranslationUncomplete=Partial translation MAIN_DISABLE_METEO=Disable meteorological view MeteoStdMod=Standard mode @@ -1779,7 +1781,7 @@ ClickToDialSetup=Click To Dial module setup ClickToDialUrlDesc=Url called when a click on phone picto is done. In URL, you can use tags
__PHONETO__ that will be replaced with the phone number of person to call
__PHONEFROM__ that will be replaced with phone number of calling person (yours)
__LOGIN__ that will be replaced with clicktodial login (defined on user card)
__PASS__ that will be replaced with clicktodial password (defined on user card). ClickToDialDesc=This module change phone numbers, when using a desktop computer, into clickable links. A click will call the number. This can be used to start the phone call when using a soft phone on your desktop or when using a CTI system based on SIP protocol for example. Note: When using a smartphone, phone numbers are always clickable. ClickToDialUseTelLink=Use just a link "tel:" on phone numbers -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field. +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface, installed on the same computer as the browser, and called when you click on a link starting with "tel:" in your browser. If you need link that start with "sip:" or a full server solution (no need of local software installation), you must set this to "No" and fill next field. ##### Point Of Sale (CashDesk) ##### CashDesk=Point of Sale CashDeskSetup=Point of Sales module setup @@ -2134,7 +2136,8 @@ IfCLINotRequiredYouShouldDisablePHPFunctions=Except if you need to run system co PHPFunctionsRequiredForCLI=For shell purpose (like scheduled job backup or running an anitivurs program), you must keep PHP functions NoWritableFilesFoundIntoRootDir=No writable files or directories of the common programs were found into your root directory (Good) RecommendedValueIs=Recommended: %s -NotRecommended=Not recommanded +Recommended=Recommended +NotRecommended=Not recommended ARestrictedPath=A restricted path CheckForModuleUpdate=Check for external modules updates CheckForModuleUpdateHelp=This action will connect to editors of external modules to check if a new version is available. diff --git a/htdocs/langs/en_US/banks.lang b/htdocs/langs/en_US/banks.lang index df7192bee25..a0b7942d446 100644 --- a/htdocs/langs/en_US/banks.lang +++ b/htdocs/langs/en_US/banks.lang @@ -115,7 +115,7 @@ TransferTo=To TransferFromToDone=A transfer from %s to %s of %s %s has been recorded. CheckTransmitter=Sender ValidateCheckReceipt=Validate this check receipt? -ConfirmValidateCheckReceipt=Are you sure that you want to submit this check receipt for validation? No changes are possible it's done. +ConfirmValidateCheckReceipt=Are you sure that you want to submit this check receipt for validation? No changes will be possible once validated. DeleteCheckReceipt=Delete this check receipt? ConfirmDeleteCheckReceipt=Are you sure you want to delete this check receipt? BankChecks=Bank checks diff --git a/htdocs/langs/en_US/boxes.lang b/htdocs/langs/en_US/boxes.lang index 0c9ea302fb8..710d49bfab6 100644 --- a/htdocs/langs/en_US/boxes.lang +++ b/htdocs/langs/en_US/boxes.lang @@ -91,8 +91,8 @@ BoxTitleLatestModifiedSupplierOrders=Vendor Orders: last %s modified BoxTitleLastModifiedCustomerBills=Customer Invoices: last %s modified BoxTitleLastModifiedCustomerOrders=Sales Orders: last %s modified BoxTitleLastModifiedPropals=Latest %s modified proposals -BoxTitleLatestModifiedJobPositions=Latest %s modified jobs -BoxTitleLatestModifiedCandidatures=Latest %s modified candidatures +BoxTitleLatestModifiedJobPositions=Latest %s modified job positions +BoxTitleLatestModifiedCandidatures=Latest %s modified job applications ForCustomersInvoices=Customers invoices ForCustomersOrders=Customers orders ForProposals=Proposals diff --git a/htdocs/langs/en_US/cashdesk.lang b/htdocs/langs/en_US/cashdesk.lang index aba05d67fc8..86fdfd753a5 100644 --- a/htdocs/langs/en_US/cashdesk.lang +++ b/htdocs/langs/en_US/cashdesk.lang @@ -127,4 +127,4 @@ AllowDelayedPayment=Allow delayed payment PrintPaymentMethodOnReceipts=Print payment method on tickets|receipts WeighingScale=Weighing scale ShowPriceHT = Display the column with the price excluding tax (on screen) -ShowPriceHTOnReceipt = Display the column with the price excluding tax (on receipt) +ShowPriceHTOnReceipt = Display the column with the price excluding tax (on the receipt) diff --git a/htdocs/langs/en_US/eventorganization.lang b/htdocs/langs/en_US/eventorganization.lang index 335c257b224..f361e6bc192 100644 --- a/htdocs/langs/en_US/eventorganization.lang +++ b/htdocs/langs/en_US/eventorganization.lang @@ -86,6 +86,7 @@ DownloadICSLink = Download ICS link EVENTORGANIZATION_SECUREKEY = Secure Key of the public registration link to a conference SERVICE_BOOTH_LOCATION = Service used for the invoice row about a booth location SERVICE_CONFERENCE_ATTENDEE_SUBSCRIPTION = Service used for the invoice row about an attendee subscription to a conference +NbVotes=Number of votes # # Status # @@ -115,6 +116,9 @@ EvntOrgDuration = This conference starts on %s and ends on %s. ConferenceAttendeeFee = Conference attendee fee for the event : '%s' occurring from %s to %s. BoothLocationFee = Booth location for the event : '%s' occurring from %s to %s EventType = Event type +LabelOfBooth=Booth label +LabelOfconference=Conference label +ConferenceIsNotConfirmed=Subcription not available, conference is not confirmed yet # # Vote page diff --git a/htdocs/langs/en_US/install.lang b/htdocs/langs/en_US/install.lang index 63947dad154..c1ffee936d7 100644 --- a/htdocs/langs/en_US/install.lang +++ b/htdocs/langs/en_US/install.lang @@ -206,6 +206,7 @@ MigrationUserPhotoPath=Migration of photo paths for users MigrationFieldsSocialNetworks=Migration of users fields social networks (%s) MigrationReloadModule=Reload module %s MigrationResetBlockedLog=Reset module BlockedLog for v7 algorithm +MigrationImportOrExportProfiles=Migration of import or export profiles (%s) ShowNotAvailableOptions=Show unavailable options HideNotAvailableOptions=Hide unavailable options ErrorFoundDuringMigration=Error(s) were reported during the migration process so next step is not available. To ignore errors, you can click here, but the application or some features may not work correctly until the errors are resolved. diff --git a/htdocs/langs/en_US/other.lang b/htdocs/langs/en_US/other.lang index bb35099ab82..ea280968ef4 100644 --- a/htdocs/langs/en_US/other.lang +++ b/htdocs/langs/en_US/other.lang @@ -291,3 +291,7 @@ PopuCom=Products/Services by popularity in Orders ProductStatistics=Products/Services Statistics NbOfQtyInOrders=Qty in orders SelectTheTypeOfObjectToAnalyze=Select an object to view its statistics... + +ConfirmBtnCommonContent = Are you sure you want to "%s" ? +ConfirmBtnCommonTitle = Confirm your action +CloseDialog = Close diff --git a/htdocs/langs/en_US/products.lang b/htdocs/langs/en_US/products.lang index fecbe7450c2..bf34efe3f79 100644 --- a/htdocs/langs/en_US/products.lang +++ b/htdocs/langs/en_US/products.lang @@ -341,7 +341,7 @@ ProductSheet=Product sheet ServiceSheet=Service sheet PossibleValues=Possible values GoOnMenuToCreateVairants=Go on menu %s - %s to prepare attribute variants (like colors, size, ...) -UseProductFournDesc=Add a feature to define the descriptions of products defined by the vendors in addition to descriptions for customers +UseProductFournDesc=Add a feature to define the product description defined by the vendors (for each vendor reference) in addition to the description for customers ProductSupplierDescription=Vendor description for the product UseProductSupplierPackaging=Use packaging on supplier prices (recalculate quantities according to packaging set on supplier price when adding/updating line in supplier documents) PackagingForThisProduct=Packaging diff --git a/htdocs/langs/en_US/salaries.lang b/htdocs/langs/en_US/salaries.lang index 6b4fdc94163..504f0fbcc16 100644 --- a/htdocs/langs/en_US/salaries.lang +++ b/htdocs/langs/en_US/salaries.lang @@ -17,8 +17,8 @@ TJM=Average daily rate CurrentSalary=Current salary THMDescription=This value may be used to calculate the cost of time consumed on a project entered by users if module project is used TJMDescription=This value is currently for information only and is not used for any calculation -LastSalaries=Latest %s salary payments -AllSalaries=All salary payments +LastSalaries=Latest %s salaries +AllSalaries=All salaries SalariesStatistics=Salary statistics -# Export SalariesAndPayments=Salaries and payments +ConfirmDeleteSalaryPayment=Do you want to delete this salary payment ? \ No newline at end of file diff --git a/htdocs/langs/en_US/ticket.lang b/htdocs/langs/en_US/ticket.lang index eea045bdc89..3c074688b8e 100644 --- a/htdocs/langs/en_US/ticket.lang +++ b/htdocs/langs/en_US/ticket.lang @@ -55,7 +55,7 @@ TypeContact_ticket_internal_SUPPORTTEC=Assigned user TypeContact_ticket_external_SUPPORTCLI=Customer contact / incident tracking TypeContact_ticket_external_CONTRIBUTOR=External contributor -OriginEmail=Email reporter +OriginEmail=Reporter Email Notify_TICKET_SENTBYMAIL=Send ticket message by email # Status diff --git a/htdocs/langs/en_US/users.lang b/htdocs/langs/en_US/users.lang index a14db3882b0..841ee0f3daf 100644 --- a/htdocs/langs/en_US/users.lang +++ b/htdocs/langs/en_US/users.lang @@ -97,8 +97,8 @@ LoginToCreate=Login to create NameToCreate=Name of third party to create YourRole=Your roles YourQuotaOfUsersIsReached=Your quota of active users is reached ! -NbOfUsers=No. of users -NbOfPermissions=No. of permissions +NbOfUsers=Number of users +NbOfPermissions=Number of permissions DontDowngradeSuperAdmin=Only a superadmin can downgrade a superadmin HierarchicalResponsible=Supervisor HierarchicView=Hierarchical view diff --git a/htdocs/langs/es_AR/admin.lang b/htdocs/langs/es_AR/admin.lang index 831d264dea4..2c3e48b8ff6 100644 --- a/htdocs/langs/es_AR/admin.lang +++ b/htdocs/langs/es_AR/admin.lang @@ -523,6 +523,7 @@ LDAPFieldCompany=Compañía ViewProductDescInFormAbility=Mostrar descripción de productos en formularios (de otro forma es mostrado en una venta emergente tooltip popup) Target=Destino Sell=Vender +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field. PositionIntoComboList=Posición de la línea en las listas de combo SellTaxRate=Tasa de impuesto de venta RecuperableOnly=Sí, para el IVA "No percibido pero recuperable" dedicado a algún estado de Francia. Mantenga el valor en "No" en todos los demás casos. diff --git a/htdocs/langs/es_BO/admin.lang b/htdocs/langs/es_BO/admin.lang index c1d306ec390..25265594de5 100644 --- a/htdocs/langs/es_BO/admin.lang +++ b/htdocs/langs/es_BO/admin.lang @@ -1,3 +1,4 @@ # Dolibarr language file - Source file is en_US - admin +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field. OperationParamDesc=Define the values to use for the object of the action, or how to extract values. For example:
objproperty1=SET:the value to set
objproperty2=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:value used if objproperty3 is not already defined
objproperty4=EXTRACT:HEADER:X-Myheaderkey:\\s*([^\\s]*)
options_myextrafield1=EXTRACT:SUBJECT:([^\n]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it. In the parameter field you can use for example 'EXTRACT:BODY:Name:\\s([^\\s]*)' if you want to extract the name of the thirdparty from a string 'Name: name to find' found into the body. diff --git a/htdocs/langs/es_BO/salaries.lang b/htdocs/langs/es_BO/salaries.lang new file mode 100644 index 00000000000..c9bd3bec17b --- /dev/null +++ b/htdocs/langs/es_BO/salaries.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - salaries +LastSalaries=Latest %s salary payments +AllSalaries=All salary payments diff --git a/htdocs/langs/es_BO/users.lang b/htdocs/langs/es_BO/users.lang new file mode 100644 index 00000000000..4a412122b08 --- /dev/null +++ b/htdocs/langs/es_BO/users.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - users +NbOfUsers=No. of users +NbOfPermissions=No. of permissions diff --git a/htdocs/langs/es_BO/website.lang b/htdocs/langs/es_BO/website.lang new file mode 100644 index 00000000000..910cff6b702 --- /dev/null +++ b/htdocs/langs/es_BO/website.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - website +PreviewOfSiteNotYetAvailable=Preview of your website %s not yet available. You must first 'Import a full website template' or just 'Add a page/container'. diff --git a/htdocs/langs/es_CL/exports.lang b/htdocs/langs/es_CL/exports.lang index d30d032606e..a419b15a966 100644 --- a/htdocs/langs/es_CL/exports.lang +++ b/htdocs/langs/es_CL/exports.lang @@ -36,7 +36,6 @@ TypeOfLineServiceOrProduct=Tipo de línea (0 = producto, 1 = servicio) FileWithDataToImport=Archivo con datos para importar FileToImport=Archivo fuente para importar FileMustHaveOneOfFollowingFormat=El archivo a importar debe tener uno de los siguientes formatos. -DownloadEmptyExample=Descargar archivo de plantilla con información de contenido de campo (* son campos obligatorios) ChooseFormatOfFileToImport=Elija el formato de archivo que se usará como formato de archivo de importación haciendo clic en el icono %s para seleccionarlo ... SourceFileFormat=Formato de archivo fuente FieldsInSourceFile=Campos en el archivo fuente diff --git a/htdocs/langs/es_CL/main.lang b/htdocs/langs/es_CL/main.lang index f67ea6b4eee..80f355253ea 100644 --- a/htdocs/langs/es_CL/main.lang +++ b/htdocs/langs/es_CL/main.lang @@ -269,6 +269,7 @@ ResultKo=Fracaso Reporting=Informes Drafts=Borrador Opened=Abierto +OpenAll=Abrir todo) ClosedAll=Cerrado (todos) Size=tamaño Topic=Tema diff --git a/htdocs/langs/es_CL/products.lang b/htdocs/langs/es_CL/products.lang index 7795586ce04..f09d02e994c 100644 --- a/htdocs/langs/es_CL/products.lang +++ b/htdocs/langs/es_CL/products.lang @@ -127,7 +127,6 @@ PriceByCustomer=Diferentes precios para cada cliente PriceCatalogue=Un único precio de venta por producto / servicio PricingRule=Reglas para los precios de venta. AddCustomerPrice=Agregar precio por cliente -ForceUpdateChildPriceSoc=Establezca el mismo precio en las subsidiarias de los clientes PriceByCustomerLog=Registro de precios anteriores de los clientes MinimumPriceLimit=El precio mínimo no puede ser inferior a %s PriceExpressionSelected=Expresión de precio seleccionado diff --git a/htdocs/langs/es_CO/main.lang b/htdocs/langs/es_CO/main.lang index 26b4e7b349c..0a9505ada84 100644 --- a/htdocs/langs/es_CO/main.lang +++ b/htdocs/langs/es_CO/main.lang @@ -155,6 +155,7 @@ NoOpenedElementToProcess=Ningún elemento abierto para procesar Categories=Etiquetas / categorías Category=Etiqueta / categoría ValidatedToProduce=Validado (Para producir) +OpenAll=Abrir (todo) ClosedAll=Cerrado (todo) Topic=Tema LateDesc=Un elemento se define como Retrasado según la configuración del sistema en el menú Inicio - Configuración - Alertas. diff --git a/htdocs/langs/es_CO/ticket.lang b/htdocs/langs/es_CO/ticket.lang index 8d0457e7d49..e194d4fa18f 100644 --- a/htdocs/langs/es_CO/ticket.lang +++ b/htdocs/langs/es_CO/ticket.lang @@ -6,17 +6,14 @@ Permission56005=Ver tickets de todos los terceros (no efectivo para usuarios ext TicketDictType=Ticket - Tipos TicketDictCategory=Entrada - Groupes TicketDictSeverity=Ticket - Severidades -TicketTypeShortISSUE=Problema, error o problema MenuTicketMyAssign=Mis entradas MenuTicketMyAssignNonClosed=Mis entradas abiertas MenuListNonClosed=Entradas abiertas TypeContact_ticket_internal_CONTRIBUTOR=Contribuyente TypeContact_ticket_external_SUPPORTCLI=Contacto con el cliente / seguimiento de incidentes TypeContact_ticket_external_CONTRIBUTOR=Colaborador externo -OriginEmail=Fuente de correo electrónico Notify_TICKET_SENTBYMAIL=Enviar mensaje de ticket por correo electrónico Read=Leer -NeedMoreInformation=Esperando información Waiting=Esperando Type=Tipo MailToSendTicketMessage=Para enviar correo electrónico desde el mensaje del ticket diff --git a/htdocs/langs/es_CO/users.lang b/htdocs/langs/es_CO/users.lang index b6c1a01ffe9..f0ab77f3da1 100644 --- a/htdocs/langs/es_CO/users.lang +++ b/htdocs/langs/es_CO/users.lang @@ -1,2 +1,4 @@ # Dolibarr language file - Source file is en_US - users MenuUsersAndGroups=Usuarios y Grupos +NbOfUsers=No. of users +NbOfPermissions=No. of permissions diff --git a/htdocs/langs/es_CO/website.lang b/htdocs/langs/es_CO/website.lang new file mode 100644 index 00000000000..910cff6b702 --- /dev/null +++ b/htdocs/langs/es_CO/website.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - website +PreviewOfSiteNotYetAvailable=Preview of your website %s not yet available. You must first 'Import a full website template' or just 'Add a page/container'. diff --git a/htdocs/langs/es_DO/admin.lang b/htdocs/langs/es_DO/admin.lang index 6dbaf311a2a..81c0cd3e1a0 100644 --- a/htdocs/langs/es_DO/admin.lang +++ b/htdocs/langs/es_DO/admin.lang @@ -7,5 +7,6 @@ Permission93=Eliminar impuestos e ITBIS DictionaryVAT=Tasa de ITBIS (Impuesto sobre ventas en EEUU) UnitPriceOfProduct=Precio unitario sin ITBIS de un producto OptionVatMode=Opción de carga de ITBIS +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field. OperationParamDesc=Define the values to use for the object of the action, or how to extract values. For example:
objproperty1=SET:the value to set
objproperty2=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:value used if objproperty3 is not already defined
objproperty4=EXTRACT:HEADER:X-Myheaderkey:\\s*([^\\s]*)
options_myextrafield1=EXTRACT:SUBJECT:([^\n]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it. In the parameter field you can use for example 'EXTRACT:BODY:Name:\\s([^\\s]*)' if you want to extract the name of the thirdparty from a string 'Name: name to find' found into the body. diff --git a/htdocs/langs/es_DO/salaries.lang b/htdocs/langs/es_DO/salaries.lang new file mode 100644 index 00000000000..c9bd3bec17b --- /dev/null +++ b/htdocs/langs/es_DO/salaries.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - salaries +LastSalaries=Latest %s salary payments +AllSalaries=All salary payments diff --git a/htdocs/langs/es_DO/users.lang b/htdocs/langs/es_DO/users.lang new file mode 100644 index 00000000000..4a412122b08 --- /dev/null +++ b/htdocs/langs/es_DO/users.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - users +NbOfUsers=No. of users +NbOfPermissions=No. of permissions diff --git a/htdocs/langs/es_DO/website.lang b/htdocs/langs/es_DO/website.lang new file mode 100644 index 00000000000..910cff6b702 --- /dev/null +++ b/htdocs/langs/es_DO/website.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - website +PreviewOfSiteNotYetAvailable=Preview of your website %s not yet available. You must first 'Import a full website template' or just 'Add a page/container'. diff --git a/htdocs/langs/es_EC/exports.lang b/htdocs/langs/es_EC/exports.lang index b1f9927f4d1..87bb1574d61 100644 --- a/htdocs/langs/es_EC/exports.lang +++ b/htdocs/langs/es_EC/exports.lang @@ -36,7 +36,6 @@ TypeOfLineServiceOrProduct=Tipo de línea (0 = producto, 1 = servicio) FileWithDataToImport=Archivo con datos para importar FileToImport=Archivo de origen para importar FileMustHaveOneOfFollowingFormat=El archivo a importar debe tener uno de los siguientes formatos. -DownloadEmptyExample=Descargar archivo de plantilla con información de contenido de campo (* son campos obligatorios) ChooseFormatOfFileToImport=Elija el formato de archivo para usar como formato de archivo de importación haciendo clic en el icono %s para seleccionarlo ... SourceFileFormat=Formato del archivo fuente FieldsInSourceFile=Campos del archivo de origen diff --git a/htdocs/langs/es_EC/main.lang b/htdocs/langs/es_EC/main.lang index bf25355ae9c..66619747638 100644 --- a/htdocs/langs/es_EC/main.lang +++ b/htdocs/langs/es_EC/main.lang @@ -276,6 +276,7 @@ ResultKo=Fallo Reporting=Informes Validated=validado Opened=Abierto +OpenAll=Abrir (todo) ClosedAll=Cerrado (todos) Topic=Tema ByCompanies=Por cliente diff --git a/htdocs/langs/es_EC/ticket.lang b/htdocs/langs/es_EC/ticket.lang index de9e0c92141..4e80f1e8378 100644 --- a/htdocs/langs/es_EC/ticket.lang +++ b/htdocs/langs/es_EC/ticket.lang @@ -4,15 +4,12 @@ Permission56005=Vea los tickets de todos los cliente/proveedor (no es efectivo p TicketDictType=Tipos - Tickets TicketDictCategory=Ticket - Grupos TicketDictSeverity=Ticket - Prioridades -TicketTypeShortISSUE=Problema o Error ErrorBadEmailAddress=Campo '%s' incorrecto MenuListNonClosed=Tikests abiertos TypeContact_ticket_internal_CONTRIBUTOR=Contribuyente TypeContact_ticket_external_SUPPORTCLI=Contacto con el cliente / seguimiento de incidentes -OriginEmail=Origen del correo electrónico Notify_TICKET_SENTBYMAIL=Enviar mensaje del ticket por correo electrónico Read=Leer -NeedMoreInformation=Esperando información Waiting=Esperando Type=Tipo MailToSendTicketMessage=Para enviar un correo electrónico desde un ticket diff --git a/htdocs/langs/es_ES/accountancy.lang b/htdocs/langs/es_ES/accountancy.lang index 67422fcdc78..dfdb3fd42b7 100644 --- a/htdocs/langs/es_ES/accountancy.lang +++ b/htdocs/langs/es_ES/accountancy.lang @@ -48,7 +48,8 @@ CountriesNotInEEC=Países no incluidos en la CEE CountriesInEECExceptMe=Países en la CEE excepto %s CountriesExceptMe=Todos los países excepto %s AccountantFiles=Exportar documentos de origen -ExportAccountingSourceDocHelp=Con esta herramienta, puede exportar los eventos de origen (lista y PDF) que se utilizaron para generar su contabilidad. Para exportar sus diarios, use la entrada de menú %s - %s. +ExportAccountingSourceDocHelp=Con esta herramienta, puede exportar los eventos de origen (lista en CSV y PDF) que se utilizaron para generar su contabilidad. +ExportAccountingSourceDocHelp2=Para exportar sus diarios, use la entrada de menú %s - %s. VueByAccountAccounting=Ver por cuenta contable VueBySubAccountAccounting=Ver por subcuenta contable @@ -328,9 +329,9 @@ ACCOUNTING_DISABLE_BINDING_ON_PURCHASES=Deshabilitar la vinculación y transfere ACCOUNTING_DISABLE_BINDING_ON_EXPENSEREPORTS=Desactive la vinculación y transferencia en contabilidad en informes de gastos (los informes de gastos no se tendrán en cuenta en la contabilidad) ## Export -NotifiedExportDate=Notified export date (modification of the entries will not be possible) -NotifiedValidationDate=Validation of the entries (modification or deletion of the entries will not be possible) -ConfirmExportFile=Confirmation of the generation of the accounting export file ? +NotifiedExportDate=Fecha de exportación notificada (no será posible modificar las entradas) +NotifiedValidationDate=Validación de las entradas (no será posible modificar o eliminar las entradas) +ConfirmExportFile=¿Confirmación de la generación del archivo de exportación contable? ExportDraftJournal=Exportar libro borrador Modelcsv=Modelo de exportación Selectmodelcsv=Seleccione un modelo de exportación diff --git a/htdocs/langs/es_ES/admin.lang b/htdocs/langs/es_ES/admin.lang index 6071cf40a9c..9dcd8620ca1 100644 --- a/htdocs/langs/es_ES/admin.lang +++ b/htdocs/langs/es_ES/admin.lang @@ -562,7 +562,7 @@ Module53Desc=Gestión de servicios Module54Name=Contratos/Suscripciones Module54Desc=Gestión de contratos (servicios o suscripciones recurrentes) Module55Name=Códigos de barras -Module55Desc=Barcode or QR code management +Module55Desc=Gestión de códigos de barras o códigos QR Module56Name=Pago por transferencia bancaria Module56Desc=Gestión de pagos a proveedores mediante órdenes de transferencia bancaria. Incluye la generación de archivos SEPA para países europeos. Module57Name=Pagos por domiciliación bancaria @@ -849,10 +849,10 @@ Permission402=Crear/modificar haberes Permission403=Validar haberes Permission404=Eliminar haberes Permission430=Usa barra de debug -Permission511=Read salaries and payments (yours and subordinates) -Permission512=Create/modify salaries and payments -Permission514=Delete salaries and payments -Permission517=Read salaries and payments everybody +Permission511=Leer salarios y pagos (suyos y subordinados) +Permission512=Crear / modificar salarios y pagos +Permission514=Eliminar salarios y pagos +Permission517=Leer sueldos y pagos de todos Permission519=Exportar salarios Permission520=Consultar Créditos Permission522=Crear/modificar Créditos @@ -2144,3 +2144,4 @@ YouEnableDeprecatedWSAPIsUseRESTAPIsInstead=Habilitó la API WS obsoleta. En su RandomlySelectedIfSeveral=Seleccionado aleatoriamente si hay varias imágenes disponibles DatabasePasswordObfuscated=La contraseña de la base de datos está oculta en el archivo conf DatabasePasswordNotObfuscated=La contraseña de la base de datos NO está oculta en el archivo conf +APIsAreNotEnabled=Los módulos de API no están habilitados diff --git a/htdocs/langs/es_ES/deliveries.lang b/htdocs/langs/es_ES/deliveries.lang index f766e2d6734..e7778831157 100644 --- a/htdocs/langs/es_ES/deliveries.lang +++ b/htdocs/langs/es_ES/deliveries.lang @@ -30,3 +30,4 @@ NonShippable=No enviable ShowShippableStatus=Mostrar estado del envío ShowReceiving=Mostrar nota de recepción NonExistentOrder=Pedido inexistente +StockQuantitiesAlreadyAllocatedOnPreviousLines = Cantidades de stock ya asignadas en líneas anteriores diff --git a/htdocs/langs/es_ES/errors.lang b/htdocs/langs/es_ES/errors.lang index 3528cd3411d..2f59947aba4 100644 --- a/htdocs/langs/es_ES/errors.lang +++ b/htdocs/langs/es_ES/errors.lang @@ -11,7 +11,7 @@ ErrorBadValueForParamNotAString=Valor incorrecto para su parámetro. Generalment ErrorRefAlreadyExists=La referencia %s ya existe. ErrorLoginAlreadyExists=El login %s ya existe. ErrorGroupAlreadyExists=El grupo %s ya existe. -ErrorEmailAlreadyExists=Email %s already exists. +ErrorEmailAlreadyExists=El correo electrónico %s ya existe. ErrorRecordNotFound=Registro no encontrado ErrorFailToCopyFile=Error al copiar el archivo '%s' en '%s'. ErrorFailToCopyDir=Error al copiar el directorio '%s' en '%s'. diff --git a/htdocs/langs/es_ES/exports.lang b/htdocs/langs/es_ES/exports.lang index 9a0e7decd49..9efcdbaae44 100644 --- a/htdocs/langs/es_ES/exports.lang +++ b/htdocs/langs/es_ES/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Tipo de línea (0=producto, 1=servicio) FileWithDataToImport=Archivo que contiene los datos a importar FileToImport=Archivo origen a importar FileMustHaveOneOfFollowingFormat=El archivo de importación debe tener uno de los siguientes formatos -DownloadEmptyExample=Descargar una plantilla con la información de los contenidos de los campos (los marcados con * son obligatorios) +DownloadEmptyExample=Descargar archivo de plantilla con información de contenido de campo +StarAreMandatory=* son campos obligatorios ChooseFormatOfFileToImport=Elija el formato de archivo que desea importar haciendo en la imagen %s para seleccionarlo... ChooseFileToImport=Cargue el archivo y luego haga clic en el icono %s para seleccionar el archivo como archivo de importación de origen ... SourceFileFormat=Formato del archivo origen diff --git a/htdocs/langs/es_ES/knowledgemanagement.lang b/htdocs/langs/es_ES/knowledgemanagement.lang index 3c760eaac50..9a7f688b94b 100644 --- a/htdocs/langs/es_ES/knowledgemanagement.lang +++ b/htdocs/langs/es_ES/knowledgemanagement.lang @@ -37,15 +37,7 @@ About = Acerca de KnowledgeManagementAbout = Acerca de la Gestión del Conocimiento KnowledgeManagementAboutPage = Gestión del Conocimiento sobre la página -# -# Sample page -# KnowledgeManagementArea = Gestión del Conocimiento - - -# -# Menu -# MenuKnowledgeRecord = Base de Conocimientos ListKnowledgeRecord = Lista de articulos NewKnowledgeRecord = Articulo nuevo @@ -53,3 +45,5 @@ ValidateReply = Validar solución KnowledgeRecords = Artículos KnowledgeRecord = Artículo KnowledgeRecordExtraFields = Campos adicionales para el artículo +GroupOfTicket=Grupo de tickets +YouCanLinkArticleToATicketCategory=Puede vincular un artículo a un grupo de tickets (por lo que el artículo se sugerirá durante la calificación de nuevos tickets) diff --git a/htdocs/langs/es_ES/languages.lang b/htdocs/langs/es_ES/languages.lang index 1a3480bec23..88bd2e399a0 100644 --- a/htdocs/langs/es_ES/languages.lang +++ b/htdocs/langs/es_ES/languages.lang @@ -4,6 +4,7 @@ Language_ar_AR=Árabe Language_ar_EG=Árabe (Egipto) Language_ar_SA=Árabe Language_ar_TN=Árabe (Túnez) +Language_ar_IQ=Árabe (Irak) Language_az_AZ=Azerbaiyano Language_bn_BD=Bengalí Language_bn_IN=Bengalí (India) @@ -83,6 +84,7 @@ Language_ne_NP=Nepalí Language_nl_BE=Neerlandés (Bélgica) Language_nl_NL=Holandés Language_pl_PL=Polaco +Language_pt_AO=Portugués (Angola) Language_pt_BR=Portugués (Brasil) Language_pt_PT=Portugués Language_ro_MD=Rumano (Moldavia) diff --git a/htdocs/langs/es_ES/main.lang b/htdocs/langs/es_ES/main.lang index 151b6de8f7d..9fd6092f046 100644 --- a/htdocs/langs/es_ES/main.lang +++ b/htdocs/langs/es_ES/main.lang @@ -730,7 +730,7 @@ MenuMembers=Miembros MenuAgendaGoogle=Agenda Google MenuTaxesAndSpecialExpenses=Impuestos | Gastos especiales ThisLimitIsDefinedInSetup=Límite Dolibarr (Menú inicio-configuración-seguridad): %s Kb, PHP limit: %s Kb -ThisLimitIsDefinedInSetupAt=Dolibarr limit (Menu %s): %s Kb, PHP limit (Param %s): %s Kb +ThisLimitIsDefinedInSetupAt=Límite Dolibarr (Menú %s): %s Kb, Límite PHP (Param %s): %s Kb NoFileFound=No se cargaron documentos CurrentUserLanguage=Idioma actual CurrentTheme=Tema actual @@ -1136,4 +1136,4 @@ CategTypeNotFound=No se encontró ningún tipo de etiqueta para el tipo de regis CopiedToClipboard=Copiado al portapapeles InformationOnLinkToContract=Esta cantidad es solo el total de todas las líneas del contrato. No se toma en consideración ninguna noción de tiempo. ConfirmCancel=Estas seguro que quieres cancelar -EmailMsgID=Email MsgID +EmailMsgID=MsgID de correo electrónico diff --git a/htdocs/langs/es_ES/products.lang b/htdocs/langs/es_ES/products.lang index 521840692ad..06c1af87189 100644 --- a/htdocs/langs/es_ES/products.lang +++ b/htdocs/langs/es_ES/products.lang @@ -277,7 +277,7 @@ PriceByCustomer=Cambiar precios para cada cliente PriceCatalogue=Un precio único de venta por producto/servicio PricingRule=Reglas para precios de venta AddCustomerPrice=Añadir precio a cliente -ForceUpdateChildPriceSoc=Establecer el mismo precio en las filiales de los clientes +ForceUpdateChildPriceSoc=Establecer el mismo precio en las subsidiarias del cliente PriceByCustomerLog=Historial de precios a clientes MinimumPriceLimit=El precio mínimo no puede ser menor que %s MinimumRecommendedPrice=El precio mínimo recomendado es: %s @@ -296,6 +296,7 @@ ComposedProductIncDecStock=Incrementar/Decrementar stock al cambiar su padre ComposedProduct=Sub-producto MinSupplierPrice=Precio mínimo de compra MinCustomerPrice=Precio de venta mínimo +NoDynamicPrice=Sin precio dinámico DynamicPriceConfiguration=Configuración de precio dinámico DynamicPriceDesc=Puede establecer funciones matemáticas para calcular los precios de cliente o proveedor. Esta función puede utilizar todos los operadores matemáticos, algunas constantes y variables. Puede definir aquí las variables que desea utilizar y si la variable necesita una actualización automática, la URL externa que debe utilizarse para pedirle a Dolibarr que actualice automáticamente el valor. AddVariable=Añadir variable diff --git a/htdocs/langs/es_ES/stocks.lang b/htdocs/langs/es_ES/stocks.lang index 51c70a2409b..fa6354bcf4f 100644 --- a/htdocs/langs/es_ES/stocks.lang +++ b/htdocs/langs/es_ES/stocks.lang @@ -60,7 +60,7 @@ EnhancedValueOfWarehouses=Valor de stocks UserWarehouseAutoCreate=Crear automáticamente existencias/almacén propio del usuario en la creación del usuario AllowAddLimitStockByWarehouse=Administrar también el valor del stock mínimo y deseado de la cupla (producto-almacén) además del valor del stock mínimo y deseado por producto RuleForWarehouse=Regla para almacenes -WarehouseAskWarehouseOnThirparty=Establecer un almacén en un tercero +WarehouseAskWarehouseOnThirparty=Establecer un almacén en terceros WarehouseAskWarehouseDuringPropal=Establecer un almacén en presupuestos comerciales WarehouseAskWarehouseDuringOrder=Indicar un almacén en pedidos de clientes UserDefaultWarehouse=Indicar un almacén en usuarios @@ -167,8 +167,8 @@ MovementTransferStock=Transferencia de stock del producto %s a otro almacén InventoryCodeShort=Código Inv./Mov. NoPendingReceptionOnSupplierOrder=No existen recepciones pendientes ya que el pedido está abierto ThisSerialAlreadyExistWithDifferentDate=Este número de lote/serie (%s) ya existe, pero con una fecha de caducidad o venta diferente (encontrada %s pero ha introducido %s). -OpenAll=Abierto para todas las acciones -OpenInternal=Abierto para acciones internas +OpenAnyMovement=Abierto (todo movimiento) +OpenInternal=Abierto (solo movimiento interno) UseDispatchStatus=Utilice un estado (aprobar/rechazar) para las líneas de las recepciones de los pedidos a proveedor OptionMULTIPRICESIsOn=La opción "varios precios por segmento" está activada. Esto significa que un producto tiene varios precio de venta, por lo que el valor de venta no puede calcularse ProductStockWarehouseCreated=Límite stock para alertas y stock óptimo deseado creado correctamente diff --git a/htdocs/langs/es_ES/ticket.lang b/htdocs/langs/es_ES/ticket.lang index c022e7d79a9..9385e5cf360 100644 --- a/htdocs/langs/es_ES/ticket.lang +++ b/htdocs/langs/es_ES/ticket.lang @@ -34,7 +34,8 @@ TicketDictResolution=Ticket - Resolución TicketTypeShortCOM=Pregunta comercial TicketTypeShortHELP=Solicitud de ayuda funcional -TicketTypeShortISSUE=Asunto, error o problema +TicketTypeShortISSUE=Problema o error +TicketTypeShortPROBLEM=Problema TicketTypeShortREQUEST=Solicitud de cambio o mejora TicketTypeShortPROJET=Proyecto TicketTypeShortOTHER=Otro @@ -54,14 +55,15 @@ TypeContact_ticket_internal_SUPPORTTEC=Usuario asignado TypeContact_ticket_external_SUPPORTCLI=Contacto cliente / seguimiento de incidentes TypeContact_ticket_external_CONTRIBUTOR=Contribuidor externo -OriginEmail=Origen E-Mail +OriginEmail=Remitente de correo electrónico Notify_TICKET_SENTBYMAIL=Enviar mensaje de ticket por e-mail # Status Read=Leido Assigned=Asignado InProgress=En progreso -NeedMoreInformation=En espera de información +NeedMoreInformation=Esperando comentarios del remitente +NeedMoreInformationShort=Esperando comentarios Answered=Contestado Waiting=En espera Closed=Cerrado @@ -160,7 +162,7 @@ CreatedBy=Creado por NewTicket=Nuevo ticket SubjectAnswerToTicket=Respuesta TicketTypeRequest=Tipo de solicitud -TicketCategory=Grupo +TicketCategory=Categorización de tickets SeeTicket=Ver ticket TicketMarkedAsRead=El ticket ha sido marcado como leído TicketReadOn=Leído el @@ -211,6 +213,7 @@ TicketMessageHelp=Solo este texto se guardará en la lista de mensajes en la fic TicketMessageSubstitutionReplacedByGenericValues=Las variables de sustitución se reemplazan por valores genéricos. TimeElapsedSince=Tiempo transcurrido desde TicketTimeToRead=Tiempo transcurrido antes de leer el ticket +TicketTimeElapsedBeforeSince=Tiempo transcurrido antes / desde TicketContacts=Contactos del ticket TicketDocumentsLinked=Documentos relacionados con el ticket ConfirmReOpenTicket=¿Está seguro de querer reabrir este ticket? diff --git a/htdocs/langs/es_GT/admin.lang b/htdocs/langs/es_GT/admin.lang index c1d306ec390..25265594de5 100644 --- a/htdocs/langs/es_GT/admin.lang +++ b/htdocs/langs/es_GT/admin.lang @@ -1,3 +1,4 @@ # Dolibarr language file - Source file is en_US - admin +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field. OperationParamDesc=Define the values to use for the object of the action, or how to extract values. For example:
objproperty1=SET:the value to set
objproperty2=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:value used if objproperty3 is not already defined
objproperty4=EXTRACT:HEADER:X-Myheaderkey:\\s*([^\\s]*)
options_myextrafield1=EXTRACT:SUBJECT:([^\n]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it. In the parameter field you can use for example 'EXTRACT:BODY:Name:\\s([^\\s]*)' if you want to extract the name of the thirdparty from a string 'Name: name to find' found into the body. diff --git a/htdocs/langs/es_GT/salaries.lang b/htdocs/langs/es_GT/salaries.lang new file mode 100644 index 00000000000..c9bd3bec17b --- /dev/null +++ b/htdocs/langs/es_GT/salaries.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - salaries +LastSalaries=Latest %s salary payments +AllSalaries=All salary payments diff --git a/htdocs/langs/es_GT/users.lang b/htdocs/langs/es_GT/users.lang new file mode 100644 index 00000000000..4a412122b08 --- /dev/null +++ b/htdocs/langs/es_GT/users.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - users +NbOfUsers=No. of users +NbOfPermissions=No. of permissions diff --git a/htdocs/langs/es_GT/website.lang b/htdocs/langs/es_GT/website.lang new file mode 100644 index 00000000000..910cff6b702 --- /dev/null +++ b/htdocs/langs/es_GT/website.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - website +PreviewOfSiteNotYetAvailable=Preview of your website %s not yet available. You must first 'Import a full website template' or just 'Add a page/container'. diff --git a/htdocs/langs/es_HN/admin.lang b/htdocs/langs/es_HN/admin.lang index c1d306ec390..25265594de5 100644 --- a/htdocs/langs/es_HN/admin.lang +++ b/htdocs/langs/es_HN/admin.lang @@ -1,3 +1,4 @@ # Dolibarr language file - Source file is en_US - admin +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field. OperationParamDesc=Define the values to use for the object of the action, or how to extract values. For example:
objproperty1=SET:the value to set
objproperty2=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:value used if objproperty3 is not already defined
objproperty4=EXTRACT:HEADER:X-Myheaderkey:\\s*([^\\s]*)
options_myextrafield1=EXTRACT:SUBJECT:([^\n]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it. In the parameter field you can use for example 'EXTRACT:BODY:Name:\\s([^\\s]*)' if you want to extract the name of the thirdparty from a string 'Name: name to find' found into the body. diff --git a/htdocs/langs/es_HN/salaries.lang b/htdocs/langs/es_HN/salaries.lang new file mode 100644 index 00000000000..c9bd3bec17b --- /dev/null +++ b/htdocs/langs/es_HN/salaries.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - salaries +LastSalaries=Latest %s salary payments +AllSalaries=All salary payments diff --git a/htdocs/langs/es_HN/users.lang b/htdocs/langs/es_HN/users.lang new file mode 100644 index 00000000000..4a412122b08 --- /dev/null +++ b/htdocs/langs/es_HN/users.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - users +NbOfUsers=No. of users +NbOfPermissions=No. of permissions diff --git a/htdocs/langs/es_HN/website.lang b/htdocs/langs/es_HN/website.lang new file mode 100644 index 00000000000..910cff6b702 --- /dev/null +++ b/htdocs/langs/es_HN/website.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - website +PreviewOfSiteNotYetAvailable=Preview of your website %s not yet available. You must first 'Import a full website template' or just 'Add a page/container'. diff --git a/htdocs/langs/es_MX/users.lang b/htdocs/langs/es_MX/users.lang index ddd9b610db2..217c37db5fe 100644 --- a/htdocs/langs/es_MX/users.lang +++ b/htdocs/langs/es_MX/users.lang @@ -11,3 +11,5 @@ DisableAUser=Deshabilitar un usuario EnableAUser=Habilitar un usuario LastName=Apellido FirstName=Nombre(s) +NbOfUsers=No. of users +NbOfPermissions=No. of permissions diff --git a/htdocs/langs/es_PA/admin.lang b/htdocs/langs/es_PA/admin.lang index f0c05a924c9..01d1912f886 100644 --- a/htdocs/langs/es_PA/admin.lang +++ b/htdocs/langs/es_PA/admin.lang @@ -1,4 +1,5 @@ # Dolibarr language file - Source file is en_US - admin VersionUnknown=Desconocido +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field. OperationParamDesc=Define the values to use for the object of the action, or how to extract values. For example:
objproperty1=SET:the value to set
objproperty2=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:value used if objproperty3 is not already defined
objproperty4=EXTRACT:HEADER:X-Myheaderkey:\\s*([^\\s]*)
options_myextrafield1=EXTRACT:SUBJECT:([^\n]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it. In the parameter field you can use for example 'EXTRACT:BODY:Name:\\s([^\\s]*)' if you want to extract the name of the thirdparty from a string 'Name: name to find' found into the body. diff --git a/htdocs/langs/es_PA/salaries.lang b/htdocs/langs/es_PA/salaries.lang new file mode 100644 index 00000000000..c9bd3bec17b --- /dev/null +++ b/htdocs/langs/es_PA/salaries.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - salaries +LastSalaries=Latest %s salary payments +AllSalaries=All salary payments diff --git a/htdocs/langs/es_PA/users.lang b/htdocs/langs/es_PA/users.lang new file mode 100644 index 00000000000..4a412122b08 --- /dev/null +++ b/htdocs/langs/es_PA/users.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - users +NbOfUsers=No. of users +NbOfPermissions=No. of permissions diff --git a/htdocs/langs/es_PA/website.lang b/htdocs/langs/es_PA/website.lang new file mode 100644 index 00000000000..910cff6b702 --- /dev/null +++ b/htdocs/langs/es_PA/website.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - website +PreviewOfSiteNotYetAvailable=Preview of your website %s not yet available. You must first 'Import a full website template' or just 'Add a page/container'. diff --git a/htdocs/langs/es_PE/admin.lang b/htdocs/langs/es_PE/admin.lang index 6ab8ad59b97..80e43a5bb33 100644 --- a/htdocs/langs/es_PE/admin.lang +++ b/htdocs/langs/es_PE/admin.lang @@ -8,6 +8,7 @@ Permission93=Eliminar impuestos e IGV DictionaryVAT=Tasa de IGV o tasa de impuesto a las ventas UnitPriceOfProduct=Precio unitario sin IGV de un producto OptionVatMode=IGV adeudado +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field. MailToSendInvoice=Facturas de Clientes OperationParamDesc=Define the values to use for the object of the action, or how to extract values. For example:
objproperty1=SET:the value to set
objproperty2=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:value used if objproperty3 is not already defined
objproperty4=EXTRACT:HEADER:X-Myheaderkey:\\s*([^\\s]*)
options_myextrafield1=EXTRACT:SUBJECT:([^\n]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it. In the parameter field you can use for example 'EXTRACT:BODY:Name:\\s([^\\s]*)' if you want to extract the name of the thirdparty from a string 'Name: name to find' found into the body. diff --git a/htdocs/langs/es_PE/users.lang b/htdocs/langs/es_PE/users.lang index 185c0f9f101..c25a9be3f4e 100644 --- a/htdocs/langs/es_PE/users.lang +++ b/htdocs/langs/es_PE/users.lang @@ -2,3 +2,5 @@ DisableUser=Inhabilitar DeleteUser=Borrar DeleteGroup=Borrar +NbOfUsers=No. of users +NbOfPermissions=No. of permissions diff --git a/htdocs/langs/es_PY/admin.lang b/htdocs/langs/es_PY/admin.lang index c1d306ec390..25265594de5 100644 --- a/htdocs/langs/es_PY/admin.lang +++ b/htdocs/langs/es_PY/admin.lang @@ -1,3 +1,4 @@ # Dolibarr language file - Source file is en_US - admin +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field. OperationParamDesc=Define the values to use for the object of the action, or how to extract values. For example:
objproperty1=SET:the value to set
objproperty2=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:value used if objproperty3 is not already defined
objproperty4=EXTRACT:HEADER:X-Myheaderkey:\\s*([^\\s]*)
options_myextrafield1=EXTRACT:SUBJECT:([^\n]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it. In the parameter field you can use for example 'EXTRACT:BODY:Name:\\s([^\\s]*)' if you want to extract the name of the thirdparty from a string 'Name: name to find' found into the body. diff --git a/htdocs/langs/es_PY/salaries.lang b/htdocs/langs/es_PY/salaries.lang new file mode 100644 index 00000000000..c9bd3bec17b --- /dev/null +++ b/htdocs/langs/es_PY/salaries.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - salaries +LastSalaries=Latest %s salary payments +AllSalaries=All salary payments diff --git a/htdocs/langs/es_PY/users.lang b/htdocs/langs/es_PY/users.lang new file mode 100644 index 00000000000..4a412122b08 --- /dev/null +++ b/htdocs/langs/es_PY/users.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - users +NbOfUsers=No. of users +NbOfPermissions=No. of permissions diff --git a/htdocs/langs/es_PY/website.lang b/htdocs/langs/es_PY/website.lang new file mode 100644 index 00000000000..910cff6b702 --- /dev/null +++ b/htdocs/langs/es_PY/website.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - website +PreviewOfSiteNotYetAvailable=Preview of your website %s not yet available. You must first 'Import a full website template' or just 'Add a page/container'. diff --git a/htdocs/langs/es_US/admin.lang b/htdocs/langs/es_US/admin.lang index c1d306ec390..25265594de5 100644 --- a/htdocs/langs/es_US/admin.lang +++ b/htdocs/langs/es_US/admin.lang @@ -1,3 +1,4 @@ # Dolibarr language file - Source file is en_US - admin +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field. OperationParamDesc=Define the values to use for the object of the action, or how to extract values. For example:
objproperty1=SET:the value to set
objproperty2=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:value used if objproperty3 is not already defined
objproperty4=EXTRACT:HEADER:X-Myheaderkey:\\s*([^\\s]*)
options_myextrafield1=EXTRACT:SUBJECT:([^\n]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it. In the parameter field you can use for example 'EXTRACT:BODY:Name:\\s([^\\s]*)' if you want to extract the name of the thirdparty from a string 'Name: name to find' found into the body. diff --git a/htdocs/langs/es_US/salaries.lang b/htdocs/langs/es_US/salaries.lang new file mode 100644 index 00000000000..c9bd3bec17b --- /dev/null +++ b/htdocs/langs/es_US/salaries.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - salaries +LastSalaries=Latest %s salary payments +AllSalaries=All salary payments diff --git a/htdocs/langs/es_US/users.lang b/htdocs/langs/es_US/users.lang new file mode 100644 index 00000000000..4a412122b08 --- /dev/null +++ b/htdocs/langs/es_US/users.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - users +NbOfUsers=No. of users +NbOfPermissions=No. of permissions diff --git a/htdocs/langs/es_US/website.lang b/htdocs/langs/es_US/website.lang new file mode 100644 index 00000000000..910cff6b702 --- /dev/null +++ b/htdocs/langs/es_US/website.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - website +PreviewOfSiteNotYetAvailable=Preview of your website %s not yet available. You must first 'Import a full website template' or just 'Add a page/container'. diff --git a/htdocs/langs/es_UY/admin.lang b/htdocs/langs/es_UY/admin.lang index c1d306ec390..25265594de5 100644 --- a/htdocs/langs/es_UY/admin.lang +++ b/htdocs/langs/es_UY/admin.lang @@ -1,3 +1,4 @@ # Dolibarr language file - Source file is en_US - admin +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field. OperationParamDesc=Define the values to use for the object of the action, or how to extract values. For example:
objproperty1=SET:the value to set
objproperty2=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:value used if objproperty3 is not already defined
objproperty4=EXTRACT:HEADER:X-Myheaderkey:\\s*([^\\s]*)
options_myextrafield1=EXTRACT:SUBJECT:([^\n]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it. In the parameter field you can use for example 'EXTRACT:BODY:Name:\\s([^\\s]*)' if you want to extract the name of the thirdparty from a string 'Name: name to find' found into the body. diff --git a/htdocs/langs/es_UY/salaries.lang b/htdocs/langs/es_UY/salaries.lang new file mode 100644 index 00000000000..c9bd3bec17b --- /dev/null +++ b/htdocs/langs/es_UY/salaries.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - salaries +LastSalaries=Latest %s salary payments +AllSalaries=All salary payments diff --git a/htdocs/langs/es_UY/users.lang b/htdocs/langs/es_UY/users.lang new file mode 100644 index 00000000000..4a412122b08 --- /dev/null +++ b/htdocs/langs/es_UY/users.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - users +NbOfUsers=No. of users +NbOfPermissions=No. of permissions diff --git a/htdocs/langs/es_UY/website.lang b/htdocs/langs/es_UY/website.lang new file mode 100644 index 00000000000..910cff6b702 --- /dev/null +++ b/htdocs/langs/es_UY/website.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - website +PreviewOfSiteNotYetAvailable=Preview of your website %s not yet available. You must first 'Import a full website template' or just 'Add a page/container'. diff --git a/htdocs/langs/es_VE/admin.lang b/htdocs/langs/es_VE/admin.lang index 271cb2be3a5..3eaf5ae876c 100644 --- a/htdocs/langs/es_VE/admin.lang +++ b/htdocs/langs/es_VE/admin.lang @@ -30,5 +30,6 @@ WatermarkOnDraftSupplierProposal=Marca de agua en solicitudes de precios a prove LDAPMemberObjectClassListExample=Lista de ObjectClass que definen los atributos de un registro (ej: top,inetOrgPerson o top,user for active directory) LDAPUserObjectClassListExample=Lista de ObjectClass que definen los atributos de un registro (ej: top,inetOrgPerson o top,user for active directory) LDAPContactObjectClassListExample=Lista de objectClass que definen los atributos de un registro (ej: top,inetOrgPerson o top,user for active directory) +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field. OperationParamDesc=Define the values to use for the object of the action, or how to extract values. For example:
objproperty1=SET:the value to set
objproperty2=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:value used if objproperty3 is not already defined
objproperty4=EXTRACT:HEADER:X-Myheaderkey:\\s*([^\\s]*)
options_myextrafield1=EXTRACT:SUBJECT:([^\n]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it. In the parameter field you can use for example 'EXTRACT:BODY:Name:\\s([^\\s]*)' if you want to extract the name of the thirdparty from a string 'Name: name to find' found into the body. diff --git a/htdocs/langs/es_VE/users.lang b/htdocs/langs/es_VE/users.lang new file mode 100644 index 00000000000..4a412122b08 --- /dev/null +++ b/htdocs/langs/es_VE/users.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - users +NbOfUsers=No. of users +NbOfPermissions=No. of permissions diff --git a/htdocs/langs/es_VE/website.lang b/htdocs/langs/es_VE/website.lang new file mode 100644 index 00000000000..910cff6b702 --- /dev/null +++ b/htdocs/langs/es_VE/website.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - website +PreviewOfSiteNotYetAvailable=Preview of your website %s not yet available. You must first 'Import a full website template' or just 'Add a page/container'. diff --git a/htdocs/langs/et_EE/deliveries.lang b/htdocs/langs/et_EE/deliveries.lang index c08d77986b4..69449b457ca 100644 --- a/htdocs/langs/et_EE/deliveries.lang +++ b/htdocs/langs/et_EE/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Vastuvõtja ErrorStockIsNotEnough=There's not enough stock Shippable=Shippable NonShippable=Not Shippable +ShowShippableStatus=Show shippable status ShowReceiving=Show delivery receipt NonExistentOrder=Nonexistent order +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/et_EE/exports.lang b/htdocs/langs/et_EE/exports.lang index ed1048c18f3..d3524c6c436 100644 --- a/htdocs/langs/et_EE/exports.lang +++ b/htdocs/langs/et_EE/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Rea liik (0=toode, 1=teenus) FileWithDataToImport=Imporditavate andmetega fai FileToImport=Imporditav lähtefai FileMustHaveOneOfFollowingFormat=File to import must have one of following formats -DownloadEmptyExample=Download template file with field content information (* are mandatory fields) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... SourceFileFormat=Lähtefaili formaat diff --git a/htdocs/langs/eu_ES/deliveries.lang b/htdocs/langs/eu_ES/deliveries.lang index 1f48c01de75..cd8a36e6c70 100644 --- a/htdocs/langs/eu_ES/deliveries.lang +++ b/htdocs/langs/eu_ES/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Recipient ErrorStockIsNotEnough=There's not enough stock Shippable=Shippable NonShippable=Not Shippable +ShowShippableStatus=Show shippable status ShowReceiving=Show delivery receipt NonExistentOrder=Nonexistent order +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/eu_ES/exports.lang b/htdocs/langs/eu_ES/exports.lang index bcb14df4934..15648132025 100644 --- a/htdocs/langs/eu_ES/exports.lang +++ b/htdocs/langs/eu_ES/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Type of line (0=product, 1=service) FileWithDataToImport=File with data to import FileToImport=Source file to import FileMustHaveOneOfFollowingFormat=File to import must have one of following formats -DownloadEmptyExample=Download template file with field content information (* are mandatory fields) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... SourceFileFormat=Source file format diff --git a/htdocs/langs/fa_IR/deliveries.lang b/htdocs/langs/fa_IR/deliveries.lang index 9874e159bd4..212ff06390f 100644 --- a/htdocs/langs/fa_IR/deliveries.lang +++ b/htdocs/langs/fa_IR/deliveries.lang @@ -27,5 +27,7 @@ Recipient=دریافت کننده ErrorStockIsNotEnough=این سهام به اندازه کافی وجود ندارد Shippable=حمل و نقلی NonShippable=حمل و نقلی نیست +ShowShippableStatus=Show shippable status ShowReceiving=نمایش رسید تحویل NonExistentOrder=سفارش ناقص +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/fa_IR/exports.lang b/htdocs/langs/fa_IR/exports.lang index c514c0638f1..d7f97893e3d 100644 --- a/htdocs/langs/fa_IR/exports.lang +++ b/htdocs/langs/fa_IR/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=نوع سطر (0 = محصول، 1 = خدمات) FileWithDataToImport=فایل حاوی داده برای وارد کردن FileToImport=فایل منبع برای واردکردن FileMustHaveOneOfFollowingFormat=فایلی که وارد می‌شود باید یکی از انواع زیر باشد -DownloadEmptyExample=دریافت فایل قالب با اطلاعات محتوای بخش‌ها ( * بخش‌های الزامی است) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=انتخاب نوع فایل برای استفاده به‌عنوان فایل واردات با کلیک بر روی نمادک %s برای انتخاب آن ... ChooseFileToImport=فایل را بالاگذاری کرده و سپس روی نشانک %s کلیک کرده تا به‌عنوان فایل منبع واردات استفاده شود. SourceFileFormat=نوع فایل منبع diff --git a/htdocs/langs/fi_FI/deliveries.lang b/htdocs/langs/fi_FI/deliveries.lang index abae1108dc9..57f53382a71 100644 --- a/htdocs/langs/fi_FI/deliveries.lang +++ b/htdocs/langs/fi_FI/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Vastaanottaja ErrorStockIsNotEnough=Varaston saldo ei riitä Shippable=Toimitettavissa NonShippable=Ei toimitettavissa +ShowShippableStatus=Show shippable status ShowReceiving=Näytä lähetyslista NonExistentOrder=Tilausta ei ole järjestelmässä +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/fi_FI/exports.lang b/htdocs/langs/fi_FI/exports.lang index 446bb468010..c97b7b37722 100644 --- a/htdocs/langs/fi_FI/exports.lang +++ b/htdocs/langs/fi_FI/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Type of line (0= tuotteen, 1= palvelu) FileWithDataToImport=Tiedoston tiedot tuoda FileToImport=Lähdetiedostoa tuoda FileMustHaveOneOfFollowingFormat=File to import must have one of following formats -DownloadEmptyExample=Download template file with field content information (* are mandatory fields) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... SourceFileFormat=Lähde tiedostomuoto diff --git a/htdocs/langs/fr_BE/admin.lang b/htdocs/langs/fr_BE/admin.lang index 5d24a311ccd..96140bd1362 100644 --- a/htdocs/langs/fr_BE/admin.lang +++ b/htdocs/langs/fr_BE/admin.lang @@ -17,5 +17,6 @@ IfModuleEnabled=Note: oui ne fonctionne que si le module %s est activé Module20Name=Propales Module30Name=Factures Target=Objectif +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field. OperationParamDesc=Define the values to use for the object of the action, or how to extract values. For example:
objproperty1=SET:the value to set
objproperty2=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:value used if objproperty3 is not already defined
objproperty4=EXTRACT:HEADER:X-Myheaderkey:\\s*([^\\s]*)
options_myextrafield1=EXTRACT:SUBJECT:([^\n]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it. In the parameter field you can use for example 'EXTRACT:BODY:Name:\\s([^\\s]*)' if you want to extract the name of the thirdparty from a string 'Name: name to find' found into the body. diff --git a/htdocs/langs/fr_BE/salaries.lang b/htdocs/langs/fr_BE/salaries.lang new file mode 100644 index 00000000000..c9bd3bec17b --- /dev/null +++ b/htdocs/langs/fr_BE/salaries.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - salaries +LastSalaries=Latest %s salary payments +AllSalaries=All salary payments diff --git a/htdocs/langs/fr_BE/users.lang b/htdocs/langs/fr_BE/users.lang new file mode 100644 index 00000000000..4a412122b08 --- /dev/null +++ b/htdocs/langs/fr_BE/users.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - users +NbOfUsers=No. of users +NbOfPermissions=No. of permissions diff --git a/htdocs/langs/fr_BE/website.lang b/htdocs/langs/fr_BE/website.lang new file mode 100644 index 00000000000..910cff6b702 --- /dev/null +++ b/htdocs/langs/fr_BE/website.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - website +PreviewOfSiteNotYetAvailable=Preview of your website %s not yet available. You must first 'Import a full website template' or just 'Add a page/container'. diff --git a/htdocs/langs/fr_CA/admin.lang b/htdocs/langs/fr_CA/admin.lang index 61a863bf5a2..98e4baf170d 100644 --- a/htdocs/langs/fr_CA/admin.lang +++ b/htdocs/langs/fr_CA/admin.lang @@ -177,6 +177,7 @@ OptionVatMode=TPS/TVH due AGENDA_SHOW_LINKED_OBJECT=Afficher l'objet lié dans la vue d'agenda ClickToDialUrlDesc=Url appelle quand un clic sur le picto du téléphone est terminé. Dans l'URL, vous pouvez utiliser des tags sur __ PHONETO __ qui sera remplacé par le numéro de téléphone de la personne à appeler __ PHONEFROM __ qui sera remplacé par le numéro de téléphone de l'appel Personne (votre)
__ LOGIN __ qui sera remplacé par login clicktodial (défini sur la carte utilisateur)
__ PASS __ qui sera remplacé par le mot de passe clicktodial (défini sur l'utilisateur carte). ClickToDialUseTelLink=Utilisez juste un lien "tel: " sur les numéros de téléphone +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field. EndPointIs=Les clients SOAP doivent envoyer leurs demandes au point d'extrémité Dolibarr disponible à l'URL ApiSetup=Configuration du module API ApiDesc=En activant ce module , Dolibarr devenir un serveur REST pour fournir des services Web divers . diff --git a/htdocs/langs/fr_CA/products.lang b/htdocs/langs/fr_CA/products.lang index 947742b3356..6e3f9b4042e 100644 --- a/htdocs/langs/fr_CA/products.lang +++ b/htdocs/langs/fr_CA/products.lang @@ -120,7 +120,6 @@ ResetBarcodeForAllRecords=Définissez la valeur du code-barres pour tous les enr PriceByCustomer=Différents prix pour chaque client PriceCatalogue=Un prix de vente unique par produit / service AddCustomerPrice=Ajouter un prix par client -ForceUpdateChildPriceSoc=Définir le même prix sur les filiales clientes PriceByCustomerLog=Enregistrement des prix clients précédents MinimumPriceLimit=Le prix minimum ne peut pas être inférieur à %s PriceExpressionSelected=Expression de prix choisie diff --git a/htdocs/langs/fr_CA/users.lang b/htdocs/langs/fr_CA/users.lang index 81db7ef3370..e38af3483dc 100644 --- a/htdocs/langs/fr_CA/users.lang +++ b/htdocs/langs/fr_CA/users.lang @@ -10,3 +10,5 @@ LastUsersCreated=Derniers %s utilisateurs créés ConfirmCreateContact=Êtes-vous sûr de vouloir créer un compte Dolibarr pour ce contact? ConfirmCreateLogin=Êtes-vous sûr de vouloir créer un compte Dolibarr pour ce membre? ConfirmCreateThirdParty=Êtes-vous sûr de vouloir créer un tiers pour ce membre? +NbOfUsers=No. of users +NbOfPermissions=No. of permissions diff --git a/htdocs/langs/fr_CA/website.lang b/htdocs/langs/fr_CA/website.lang index 5255b2f9da5..f37354f9d32 100644 --- a/htdocs/langs/fr_CA/website.lang +++ b/htdocs/langs/fr_CA/website.lang @@ -4,6 +4,7 @@ WEBSITE_PAGENAME=Nom / alias de la page WEBSITE_CSS_URL=URL du fichier CSS externe MediaFiles=Médiathèque EditMenu=Menu Edition +PreviewOfSiteNotYetAvailable=Preview of your website %s not yet available. You must first 'Import a full website template' or just 'Add a page/container'. ViewSiteInNewTab=Afficher le site dans un nouvel onglet ViewPageInNewTab=Afficher la page dans un nouvel onglet ViewWebsiteInProduction=Afficher le site Web à l'aide d'URL d'accueil diff --git a/htdocs/langs/fr_CH/admin.lang b/htdocs/langs/fr_CH/admin.lang index c1d306ec390..25265594de5 100644 --- a/htdocs/langs/fr_CH/admin.lang +++ b/htdocs/langs/fr_CH/admin.lang @@ -1,3 +1,4 @@ # Dolibarr language file - Source file is en_US - admin +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field. OperationParamDesc=Define the values to use for the object of the action, or how to extract values. For example:
objproperty1=SET:the value to set
objproperty2=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:value used if objproperty3 is not already defined
objproperty4=EXTRACT:HEADER:X-Myheaderkey:\\s*([^\\s]*)
options_myextrafield1=EXTRACT:SUBJECT:([^\n]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it. In the parameter field you can use for example 'EXTRACT:BODY:Name:\\s([^\\s]*)' if you want to extract the name of the thirdparty from a string 'Name: name to find' found into the body. diff --git a/htdocs/langs/fr_CH/salaries.lang b/htdocs/langs/fr_CH/salaries.lang new file mode 100644 index 00000000000..c9bd3bec17b --- /dev/null +++ b/htdocs/langs/fr_CH/salaries.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - salaries +LastSalaries=Latest %s salary payments +AllSalaries=All salary payments diff --git a/htdocs/langs/fr_CH/users.lang b/htdocs/langs/fr_CH/users.lang new file mode 100644 index 00000000000..4a412122b08 --- /dev/null +++ b/htdocs/langs/fr_CH/users.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - users +NbOfUsers=No. of users +NbOfPermissions=No. of permissions diff --git a/htdocs/langs/fr_CH/website.lang b/htdocs/langs/fr_CH/website.lang new file mode 100644 index 00000000000..910cff6b702 --- /dev/null +++ b/htdocs/langs/fr_CH/website.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - website +PreviewOfSiteNotYetAvailable=Preview of your website %s not yet available. You must first 'Import a full website template' or just 'Add a page/container'. diff --git a/htdocs/langs/fr_CI/admin.lang b/htdocs/langs/fr_CI/admin.lang index c1d306ec390..25265594de5 100644 --- a/htdocs/langs/fr_CI/admin.lang +++ b/htdocs/langs/fr_CI/admin.lang @@ -1,3 +1,4 @@ # Dolibarr language file - Source file is en_US - admin +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field. OperationParamDesc=Define the values to use for the object of the action, or how to extract values. For example:
objproperty1=SET:the value to set
objproperty2=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:value used if objproperty3 is not already defined
objproperty4=EXTRACT:HEADER:X-Myheaderkey:\\s*([^\\s]*)
options_myextrafield1=EXTRACT:SUBJECT:([^\n]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it. In the parameter field you can use for example 'EXTRACT:BODY:Name:\\s([^\\s]*)' if you want to extract the name of the thirdparty from a string 'Name: name to find' found into the body. diff --git a/htdocs/langs/fr_CI/salaries.lang b/htdocs/langs/fr_CI/salaries.lang new file mode 100644 index 00000000000..c9bd3bec17b --- /dev/null +++ b/htdocs/langs/fr_CI/salaries.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - salaries +LastSalaries=Latest %s salary payments +AllSalaries=All salary payments diff --git a/htdocs/langs/fr_CI/users.lang b/htdocs/langs/fr_CI/users.lang new file mode 100644 index 00000000000..4a412122b08 --- /dev/null +++ b/htdocs/langs/fr_CI/users.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - users +NbOfUsers=No. of users +NbOfPermissions=No. of permissions diff --git a/htdocs/langs/fr_CI/website.lang b/htdocs/langs/fr_CI/website.lang new file mode 100644 index 00000000000..910cff6b702 --- /dev/null +++ b/htdocs/langs/fr_CI/website.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - website +PreviewOfSiteNotYetAvailable=Preview of your website %s not yet available. You must first 'Import a full website template' or just 'Add a page/container'. diff --git a/htdocs/langs/fr_CM/admin.lang b/htdocs/langs/fr_CM/admin.lang index c1d306ec390..25265594de5 100644 --- a/htdocs/langs/fr_CM/admin.lang +++ b/htdocs/langs/fr_CM/admin.lang @@ -1,3 +1,4 @@ # Dolibarr language file - Source file is en_US - admin +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field. OperationParamDesc=Define the values to use for the object of the action, or how to extract values. For example:
objproperty1=SET:the value to set
objproperty2=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:value used if objproperty3 is not already defined
objproperty4=EXTRACT:HEADER:X-Myheaderkey:\\s*([^\\s]*)
options_myextrafield1=EXTRACT:SUBJECT:([^\n]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it. In the parameter field you can use for example 'EXTRACT:BODY:Name:\\s([^\\s]*)' if you want to extract the name of the thirdparty from a string 'Name: name to find' found into the body. diff --git a/htdocs/langs/fr_CM/salaries.lang b/htdocs/langs/fr_CM/salaries.lang new file mode 100644 index 00000000000..c9bd3bec17b --- /dev/null +++ b/htdocs/langs/fr_CM/salaries.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - salaries +LastSalaries=Latest %s salary payments +AllSalaries=All salary payments diff --git a/htdocs/langs/fr_CM/users.lang b/htdocs/langs/fr_CM/users.lang new file mode 100644 index 00000000000..4a412122b08 --- /dev/null +++ b/htdocs/langs/fr_CM/users.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - users +NbOfUsers=No. of users +NbOfPermissions=No. of permissions diff --git a/htdocs/langs/fr_CM/website.lang b/htdocs/langs/fr_CM/website.lang new file mode 100644 index 00000000000..910cff6b702 --- /dev/null +++ b/htdocs/langs/fr_CM/website.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - website +PreviewOfSiteNotYetAvailable=Preview of your website %s not yet available. You must first 'Import a full website template' or just 'Add a page/container'. diff --git a/htdocs/langs/fr_FR/compta.lang b/htdocs/langs/fr_FR/compta.lang index 6ee3e204b0a..4628673fd9e 100644 --- a/htdocs/langs/fr_FR/compta.lang +++ b/htdocs/langs/fr_FR/compta.lang @@ -286,9 +286,9 @@ ReportPurchaseTurnover=Chiffre d'affaires d'achat facturé ReportPurchaseTurnoverCollected=Chiffre d'affaires d'achat encaissé IncludeVarpaysInResults = Inclure les paiements divers dans les rapports IncludeLoansInResults = Inclure les prêts dans les rapports -InvoiceLate30Days = Factures impayés à échéance dépassé de plus de 30 jours -InvoiceLate15Days = Factures impayés à échéance dépassé de plus de 15 jours +InvoiceLate30Days = Factures en retard > 30 jours +InvoiceLate15Days = Factures en retard > 15 jours InvoiceLateMinus15Days = Factures en retard -InvoiceNotLate = Règlements à recevoir dans moins de 15 jours -InvoiceNotLate15Days = Règlements à recevoir dans 15 jours -InvoiceNotLate30Days = Règlements à recevoir dans les 30 jours +InvoiceNotLate = A recevoir < 15 jours +InvoiceNotLate15Days = A recevoir dans 15 jours +InvoiceNotLate30Days = A recevoir dans 30 jours diff --git a/htdocs/langs/fr_FR/exports.lang b/htdocs/langs/fr_FR/exports.lang index c3c426daf4e..8f9c38a45dd 100644 --- a/htdocs/langs/fr_FR/exports.lang +++ b/htdocs/langs/fr_FR/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Type de ligne (0=produit, 1=service) FileWithDataToImport=Fichier contenant les données à importer FileToImport=Fichier source à importer FileMustHaveOneOfFollowingFormat=Le fichier à importer doit avoir un des formats suivants -DownloadEmptyExample=Télécharger fichier vierge exemple (* sont les champs obligatoires) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Choisissez le format de fichier à importer en cliquant sur le pictogramme %s pour le sélectionner… ChooseFileToImport=Ajoutez le fichier à importer puis cliquez sur le pictogramme %s pour le sélectionner comme fichier source d'import… SourceFileFormat=Format du fichier source diff --git a/htdocs/langs/fr_FR/other.lang b/htdocs/langs/fr_FR/other.lang index 05af1498cb6..32aee9c92a6 100644 --- a/htdocs/langs/fr_FR/other.lang +++ b/htdocs/langs/fr_FR/other.lang @@ -291,3 +291,7 @@ PopuCom=Produits/services par popularité dans les commandes ProductStatistics=Statistiques sur les produits / services NbOfQtyInOrders=Qté en commandes SelectTheTypeOfObjectToAnalyze=Sélectionner un objet pour en voir les statistiques + +ConfirmBtnCommonContent = Êtes-vous sûr de vouloir : "%s" ? +ConfirmBtnCommonTitle = Confirmez votre action +CloseDialog = Fermer diff --git a/htdocs/langs/fr_GA/admin.lang b/htdocs/langs/fr_GA/admin.lang index 8c6135dc874..6455856627f 100644 --- a/htdocs/langs/fr_GA/admin.lang +++ b/htdocs/langs/fr_GA/admin.lang @@ -1,5 +1,6 @@ # Dolibarr language file - Source file is en_US - admin Module20Name=Devis Module30Name=Factures +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field. OperationParamDesc=Define the values to use for the object of the action, or how to extract values. For example:
objproperty1=SET:the value to set
objproperty2=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:value used if objproperty3 is not already defined
objproperty4=EXTRACT:HEADER:X-Myheaderkey:\\s*([^\\s]*)
options_myextrafield1=EXTRACT:SUBJECT:([^\n]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it. In the parameter field you can use for example 'EXTRACT:BODY:Name:\\s([^\\s]*)' if you want to extract the name of the thirdparty from a string 'Name: name to find' found into the body. diff --git a/htdocs/langs/fr_GA/salaries.lang b/htdocs/langs/fr_GA/salaries.lang new file mode 100644 index 00000000000..c9bd3bec17b --- /dev/null +++ b/htdocs/langs/fr_GA/salaries.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - salaries +LastSalaries=Latest %s salary payments +AllSalaries=All salary payments diff --git a/htdocs/langs/fr_GA/users.lang b/htdocs/langs/fr_GA/users.lang new file mode 100644 index 00000000000..4a412122b08 --- /dev/null +++ b/htdocs/langs/fr_GA/users.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - users +NbOfUsers=No. of users +NbOfPermissions=No. of permissions diff --git a/htdocs/langs/fr_GA/website.lang b/htdocs/langs/fr_GA/website.lang new file mode 100644 index 00000000000..910cff6b702 --- /dev/null +++ b/htdocs/langs/fr_GA/website.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - website +PreviewOfSiteNotYetAvailable=Preview of your website %s not yet available. You must first 'Import a full website template' or just 'Add a page/container'. diff --git a/htdocs/langs/gl_ES/deliveries.lang b/htdocs/langs/gl_ES/deliveries.lang index 49996ef672a..60e8ca17833 100644 --- a/htdocs/langs/gl_ES/deliveries.lang +++ b/htdocs/langs/gl_ES/deliveries.lang @@ -30,3 +30,4 @@ NonShippable=Non enviable ShowShippableStatus=Amosar estado de envío ShowReceiving=Mostrar nota de recepción NonExistentOrder=Pedimento inexistente +StockQuantitiesAlreadyAllocatedOnPreviousLines = Cantidades de stock xa asignadas en liñas anteriores diff --git a/htdocs/langs/gl_ES/exports.lang b/htdocs/langs/gl_ES/exports.lang index aeb080ad0b7..49bed28e022 100644 --- a/htdocs/langs/gl_ES/exports.lang +++ b/htdocs/langs/gl_ES/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Tipo de liña (0=producto, 1=servizo) FileWithDataToImport=Ficheiro cos datos a importar FileToImport=Ficheiro orixe a importar FileMustHaveOneOfFollowingFormat=O ficheiro de importación debe conter un dos seguintes formatos -DownloadEmptyExample=Descargar ficheiro de exemplo baleiro +DownloadEmptyExample=Descargue un ficheiro de modelo con información de contido do campo +StarAreMandatory=* son campos obrigatorios ChooseFormatOfFileToImport=Escolla o formato de ficheiro que desexa importar e prema na imaxe %s para seleccionalo... ChooseFileToImport=Escolla o ficheiro de importación e faga clic na imaxe %s para seleccionalo como ficheiro orixe de importación... SourceFileFormat=Formato do ficheiro orixe diff --git a/htdocs/langs/he_IL/deliveries.lang b/htdocs/langs/he_IL/deliveries.lang index 1f48c01de75..cd8a36e6c70 100644 --- a/htdocs/langs/he_IL/deliveries.lang +++ b/htdocs/langs/he_IL/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Recipient ErrorStockIsNotEnough=There's not enough stock Shippable=Shippable NonShippable=Not Shippable +ShowShippableStatus=Show shippable status ShowReceiving=Show delivery receipt NonExistentOrder=Nonexistent order +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/he_IL/exports.lang b/htdocs/langs/he_IL/exports.lang index a0eb7161ef2..cb652229825 100644 --- a/htdocs/langs/he_IL/exports.lang +++ b/htdocs/langs/he_IL/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Type of line (0=product, 1=service) FileWithDataToImport=File with data to import FileToImport=Source file to import FileMustHaveOneOfFollowingFormat=File to import must have one of following formats -DownloadEmptyExample=Download template file with field content information (* are mandatory fields) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... SourceFileFormat=Source file format diff --git a/htdocs/langs/hi_IN/deliveries.lang b/htdocs/langs/hi_IN/deliveries.lang index 1f48c01de75..cd8a36e6c70 100644 --- a/htdocs/langs/hi_IN/deliveries.lang +++ b/htdocs/langs/hi_IN/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Recipient ErrorStockIsNotEnough=There's not enough stock Shippable=Shippable NonShippable=Not Shippable +ShowShippableStatus=Show shippable status ShowReceiving=Show delivery receipt NonExistentOrder=Nonexistent order +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/hi_IN/exports.lang b/htdocs/langs/hi_IN/exports.lang index a0eb7161ef2..cb652229825 100644 --- a/htdocs/langs/hi_IN/exports.lang +++ b/htdocs/langs/hi_IN/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Type of line (0=product, 1=service) FileWithDataToImport=File with data to import FileToImport=Source file to import FileMustHaveOneOfFollowingFormat=File to import must have one of following formats -DownloadEmptyExample=Download template file with field content information (* are mandatory fields) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... SourceFileFormat=Source file format diff --git a/htdocs/langs/hr_HR/deliveries.lang b/htdocs/langs/hr_HR/deliveries.lang index b74558fbdd7..56123a13cd5 100644 --- a/htdocs/langs/hr_HR/deliveries.lang +++ b/htdocs/langs/hr_HR/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Primatelj ErrorStockIsNotEnough=Nema dovoljno robe na skladištu Shippable=Isporuka moguća NonShippable=Isporuka nije moguća +ShowShippableStatus=Show shippable status ShowReceiving=Prikaži dostavnu primku NonExistentOrder=Nonexistent order +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/hr_HR/exports.lang b/htdocs/langs/hr_HR/exports.lang index f214e7f85dd..c9238c0cdcf 100644 --- a/htdocs/langs/hr_HR/exports.lang +++ b/htdocs/langs/hr_HR/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Type of line (0=product, 1=service) FileWithDataToImport=File with data to import FileToImport=Source file to import FileMustHaveOneOfFollowingFormat=File to import must have one of following formats -DownloadEmptyExample=Download template file with field content information (* are mandatory fields) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... SourceFileFormat=Source file format diff --git a/htdocs/langs/hu_HU/deliveries.lang b/htdocs/langs/hu_HU/deliveries.lang index f7656297b0f..c907a121477 100644 --- a/htdocs/langs/hu_HU/deliveries.lang +++ b/htdocs/langs/hu_HU/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Címzett ErrorStockIsNotEnough=Nincs elég raktáron Shippable=Szállítható NonShippable=Nem szállítható +ShowShippableStatus=Show shippable status ShowReceiving=Mutassa az átvételi elismervényt NonExistentOrder=Nem létező megrendelés +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/hu_HU/exports.lang b/htdocs/langs/hu_HU/exports.lang index 207e255a0f7..c8945321c10 100644 --- a/htdocs/langs/hu_HU/exports.lang +++ b/htdocs/langs/hu_HU/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Vonal típusa (0 = a termék, 1 = szolgáltatás) FileWithDataToImport=File adatokat importálni FileToImport=Forrás fájlt importálni FileMustHaveOneOfFollowingFormat=File to import must have one of following formats -DownloadEmptyExample=Download template file with field content information (* are mandatory fields) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... SourceFileFormat=Forrás fájlformátum diff --git a/htdocs/langs/id_ID/deliveries.lang b/htdocs/langs/id_ID/deliveries.lang index e04f7ef16e6..ef3921e9540 100644 --- a/htdocs/langs/id_ID/deliveries.lang +++ b/htdocs/langs/id_ID/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Penerima ErrorStockIsNotEnough=Tidak ada stok yang cukup Shippable=Dapat dikirim NonShippable=Tidak Dapat Dikirim +ShowShippableStatus=Show shippable status ShowReceiving=Tampilkan tanda terima pengiriman NonExistentOrder=Pesanan tidak ada +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/id_ID/exports.lang b/htdocs/langs/id_ID/exports.lang index 39cc5685c18..85901957857 100644 --- a/htdocs/langs/id_ID/exports.lang +++ b/htdocs/langs/id_ID/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Jenis garis (0 = produk, 1 = layanan) FileWithDataToImport=File dengan data untuk diimpor FileToImport=Sumber file untuk diimpor FileMustHaveOneOfFollowingFormat=File yang akan diimpor harus memiliki salah satu format berikut -DownloadEmptyExample=Unduh file template dengan informasi konten bidang (* adalah bidang wajib) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Pilih format file untuk digunakan sebagai format file impor dengan mengklik ikon %s untuk memilihnya ... ChooseFileToImport=Unggah file kemudian klik ikon %s untuk memilih file sebagai file impor sumber ... SourceFileFormat=Format file sumber diff --git a/htdocs/langs/is_IS/deliveries.lang b/htdocs/langs/is_IS/deliveries.lang index 74a29497802..3d037b8919e 100644 --- a/htdocs/langs/is_IS/deliveries.lang +++ b/htdocs/langs/is_IS/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Viðtakandi ErrorStockIsNotEnough=There's not enough stock Shippable=Shippable NonShippable=Not Shippable +ShowShippableStatus=Show shippable status ShowReceiving=Show delivery receipt NonExistentOrder=Nonexistent order +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/is_IS/exports.lang b/htdocs/langs/is_IS/exports.lang index a9f6a31bddf..05defcccffc 100644 --- a/htdocs/langs/is_IS/exports.lang +++ b/htdocs/langs/is_IS/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Tegund línu (0 = vara, 1 = þjónustu) FileWithDataToImport=Skrá með upplýsingum til að flytja inn FileToImport=Frumskrár að flytja inn FileMustHaveOneOfFollowingFormat=File to import must have one of following formats -DownloadEmptyExample=Download template file with field content information (* are mandatory fields) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... SourceFileFormat=Heimild skráarsnið diff --git a/htdocs/langs/it_CH/salaries.lang b/htdocs/langs/it_CH/salaries.lang new file mode 100644 index 00000000000..c9bd3bec17b --- /dev/null +++ b/htdocs/langs/it_CH/salaries.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - salaries +LastSalaries=Latest %s salary payments +AllSalaries=All salary payments diff --git a/htdocs/langs/it_CH/users.lang b/htdocs/langs/it_CH/users.lang new file mode 100644 index 00000000000..4a412122b08 --- /dev/null +++ b/htdocs/langs/it_CH/users.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - users +NbOfUsers=No. of users +NbOfPermissions=No. of permissions diff --git a/htdocs/langs/it_IT/deliveries.lang b/htdocs/langs/it_IT/deliveries.lang index a24bb962dac..723f46c4c0f 100644 --- a/htdocs/langs/it_IT/deliveries.lang +++ b/htdocs/langs/it_IT/deliveries.lang @@ -30,3 +30,4 @@ NonShippable=Non disponibile per spedizione ShowShippableStatus=Mostra lo stato di spedizione ShowReceiving=Mostra ricevuta di consegna NonExistentOrder=Ordine inesistente +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/it_IT/exports.lang b/htdocs/langs/it_IT/exports.lang index 5b616c68eaf..5a5e6dd1820 100644 --- a/htdocs/langs/it_IT/exports.lang +++ b/htdocs/langs/it_IT/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Linea tipo (0 = prodotto, servizio = 1) FileWithDataToImport=File con i dati da importare FileToImport=File da importare FileMustHaveOneOfFollowingFormat=File da importare deve avere uno dei seguenti formati -DownloadEmptyExample=Download esempio di fonte file vuoto +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Scegliete il formato di file da utilizzare per l'importazione cliccando sull'icona %s ChooseFileToImport=Scegli il file da importare e poi clicca sull'icona %s SourceFileFormat=Fonte formato di file diff --git a/htdocs/langs/ja_JP/accountancy.lang b/htdocs/langs/ja_JP/accountancy.lang index f398117d37c..bf9dc355840 100644 --- a/htdocs/langs/ja_JP/accountancy.lang +++ b/htdocs/langs/ja_JP/accountancy.lang @@ -48,7 +48,8 @@ CountriesNotInEEC=EECにない国 CountriesInEECExceptMe=%sを除くEECの国 CountriesExceptMe=%sを除くすべての国 AccountantFiles=ソースドキュメントのエクスポート -ExportAccountingSourceDocHelp=このツールを使用すると、会計処理の生成に使用されたソースイベント(リストとPDF)をエクスポートできる。仕訳をエクスポートするには、メニューエントリ%s-%sを使用する。 +ExportAccountingSourceDocHelp=このツールを使用すると、会計の生成に使用されたソースイベント(CSVおよびPDFのリスト)をエクスポートできる。 +ExportAccountingSourceDocHelp2=ジャーナルをエクスポートするには、メニューエントリ%s --%sを使用。 VueByAccountAccounting=会計科目順に表示 VueBySubAccountAccounting=アカウンティングサブアカウントで表示 diff --git a/htdocs/langs/ja_JP/admin.lang b/htdocs/langs/ja_JP/admin.lang index a21a12947f7..09c80dc7550 100644 --- a/htdocs/langs/ja_JP/admin.lang +++ b/htdocs/langs/ja_JP/admin.lang @@ -2144,3 +2144,4 @@ YouEnableDeprecatedWSAPIsUseRESTAPIsInstead=非推奨のWS APIが有効化され RandomlySelectedIfSeveral=画像が複数ある場合はランダムに選択 DatabasePasswordObfuscated=データベースのパスワードは conf ファイルで難読化されている DatabasePasswordNotObfuscated=データベースのパスワードは conf ファイルで難読化されていない +APIsAreNotEnabled=APIモジュールが有効になっていない diff --git a/htdocs/langs/ja_JP/deliveries.lang b/htdocs/langs/ja_JP/deliveries.lang index fd9cbcae01d..950d219d9cb 100644 --- a/htdocs/langs/ja_JP/deliveries.lang +++ b/htdocs/langs/ja_JP/deliveries.lang @@ -9,7 +9,7 @@ DeliveryStateSaved=保存された配送状態 SetDeliveryDate=出荷の日付を設定する ValidateDeliveryReceipt=配送の領収書を検証する ValidateDeliveryReceiptConfirm=この配送領収書を検証してもよいか? -DeleteDeliveryReceipt=配送済みメッセージを削除する +DeleteDeliveryReceipt=配送済メッセージを削除する DeleteDeliveryReceiptConfirm=領収書%s を削除してもよいか? DeliveryMethod=配送方法 TrackingNumber=追跡番号 @@ -27,5 +27,7 @@ Recipient=受領者 ErrorStockIsNotEnough=在庫が不足 Shippable=発送可能 NonShippable=発送不可 +ShowShippableStatus=出荷可能なステータスを表示する ShowReceiving=配送領収書を表示する NonExistentOrder=存在しない注文 +StockQuantitiesAlreadyAllocatedOnPreviousLines = 前の行にすでに割り当てられている在庫数量 diff --git a/htdocs/langs/ja_JP/exports.lang b/htdocs/langs/ja_JP/exports.lang index 326ea5ad052..ae3f4eaff99 100644 --- a/htdocs/langs/ja_JP/exports.lang +++ b/htdocs/langs/ja_JP/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=回線の種類(0 =製品、1 =サービス) FileWithDataToImport=インポートするデータを持つファイル FileToImport=インポートするソースファイル FileMustHaveOneOfFollowingFormat=インポートするファイルは、次のいずれかの形式である必要がある -DownloadEmptyExample=フィールドコンテンツ情報を含むテンプレートファイルをダウンロードする(*は必須フィールド ) +DownloadEmptyExample=フィールドコンテンツ情報を含むテンプレートファイルをダウンロードする +StarAreMandatory=*は必須フィールド ChooseFormatOfFileToImport=%sアイコンをクリックして選択し、インポートファイル形式として使用するファイル形式を選択する... ChooseFileToImport=ファイルをアップロードし、%sアイコンをクリックして、ソースインポートファイルとしてファイルを選択する。 SourceFileFormat=ソースファイルの形式 diff --git a/htdocs/langs/ja_JP/knowledgemanagement.lang b/htdocs/langs/ja_JP/knowledgemanagement.lang index cb54cb27245..db45e5e7daa 100644 --- a/htdocs/langs/ja_JP/knowledgemanagement.lang +++ b/htdocs/langs/ja_JP/knowledgemanagement.lang @@ -37,15 +37,7 @@ About = 約 KnowledgeManagementAbout = 知識管理について KnowledgeManagementAboutPage = 知識管理に関するページ -# -# Sample page -# KnowledgeManagementArea = 知識管理 - - -# -# Menu -# MenuKnowledgeRecord = 知識ベース ListKnowledgeRecord = 記事一覧 NewKnowledgeRecord = 新しい記事 @@ -53,3 +45,5 @@ ValidateReply = ソリューションを検証する KnowledgeRecords = 記事 KnowledgeRecord = 記事 KnowledgeRecordExtraFields = 記事のエクストラフィールド +GroupOfTicket=チケットのグループ +YouCanLinkArticleToATicketCategory=記事をチケットグループにリンクできる(新規チケット認定時に記事が提案されるようになる) diff --git a/htdocs/langs/ja_JP/languages.lang b/htdocs/langs/ja_JP/languages.lang index 65ea4f02be5..06b8e61f2c4 100644 --- a/htdocs/langs/ja_JP/languages.lang +++ b/htdocs/langs/ja_JP/languages.lang @@ -4,6 +4,7 @@ Language_ar_AR=アラビア語 Language_ar_EG=アラビア語(エジプト) Language_ar_SA=アラビア語 Language_ar_TN=アラビア語 (チュニジア) +Language_ar_IQ=アラビア語(イラク) Language_az_AZ=アゼルバイジャン語 Language_bn_BD=ベンガル語 Language_bn_IN=ベンガル語(インド) @@ -83,6 +84,7 @@ Language_ne_NP=ネパール語 Language_nl_BE=オランダ語 (ベルギー) Language_nl_NL=オランダ語 Language_pl_PL=ポーランド語 +Language_pt_AO=ポルトガル語(アンゴラ) Language_pt_BR=ポルトガル語 (ブラジル) Language_pt_PT=ポルトガル語 Language_ro_MD=ルーマニア語 (モルダビア) diff --git a/htdocs/langs/ja_JP/products.lang b/htdocs/langs/ja_JP/products.lang index 86f4f8816f2..486cd6736c5 100644 --- a/htdocs/langs/ja_JP/products.lang +++ b/htdocs/langs/ja_JP/products.lang @@ -277,7 +277,7 @@ PriceByCustomer=顧客ごとに異なる価格 PriceCatalogue=製品/サービスごとの単一の販売価格 PricingRule=販売価格のルール AddCustomerPrice=顧客ごとに価格を追加 -ForceUpdateChildPriceSoc=顧客子会社に同じ価格を設定する +ForceUpdateChildPriceSoc=顧客の子会社に同じ価格を設定する PriceByCustomerLog=以前の顧客価格のログ MinimumPriceLimit=最低価格は%sより低くすることはできない MinimumRecommendedPrice=最小推奨価格は次のとおり:%s @@ -296,6 +296,7 @@ ComposedProductIncDecStock=親の変更時に在庫を増減する ComposedProduct=子供向け製品 MinSupplierPrice=最小購入価格 MinCustomerPrice=最低販売価格 +NoDynamicPrice=動的価格でない DynamicPriceConfiguration=動的な価格構成 DynamicPriceDesc=数式を定義して、顧客または仕入先の価格を計算できる。このような数式では、すべての数学演算子、一部の定数および変数を使用できる。ここで、使用する変数を定義できる。変数に自動更新が必要な場合は、外部URLを定義して、Dolibarrが値を自動的に更新できるようにすることができる。 AddVariable=変数を追加 diff --git a/htdocs/langs/ja_JP/stocks.lang b/htdocs/langs/ja_JP/stocks.lang index 96bb184fe6f..7c6c6baa8c2 100644 --- a/htdocs/langs/ja_JP/stocks.lang +++ b/htdocs/langs/ja_JP/stocks.lang @@ -60,7 +60,7 @@ EnhancedValueOfWarehouses=倉庫の値 UserWarehouseAutoCreate=ユーザーの作成時にユーザー倉庫を自動的に作成する AllowAddLimitStockByWarehouse=製品ごとの最小在庫と希望在庫の値に加えて、ペアリングごとの最小在庫と希望在庫の値(製品倉庫)も管理する。 RuleForWarehouse=倉庫のルール -WarehouseAskWarehouseOnThirparty=取引先に倉庫を設定する +WarehouseAskWarehouseOnThirparty=取引先に倉庫を設置する WarehouseAskWarehouseDuringPropal=商業提案に倉庫を設定する WarehouseAskWarehouseDuringOrder=販売注文に倉庫を設定する UserDefaultWarehouse=ユーザーに倉庫を設定する @@ -167,8 +167,8 @@ MovementTransferStock=製品%sの別の倉庫への在庫移転 InventoryCodeShort=Inv./Mov。コード NoPendingReceptionOnSupplierOrder=注文書が開いているため、保留中の受付はない ThisSerialAlreadyExistWithDifferentDate=ロット/シリアル 番号 (%s) は異なる賞味期限または販売期限で ( %s が見つかったが、入力したのは %s). -OpenAll=すべてのアクションに対して開く -OpenInternal=内部アクションのためにのみ開く +OpenAnyMovement=開く(全移動) +OpenInternal=オープン(内部移動のみ) UseDispatchStatus=発注書受付の製品ラインにディスパッチステータス(承認/拒否)を使用する OptionMULTIPRICESIsOn=オプション「セグメントごとのいくつかの価格」がオンになっている。これは、製品に複数の販売価格があるため、販売価値を計算できないことを意味する ProductStockWarehouseCreated=アラートの在庫制限と希望する最適在庫が正しく作成された diff --git a/htdocs/langs/ja_JP/ticket.lang b/htdocs/langs/ja_JP/ticket.lang index ac4a6290b3f..d128c8c37bc 100644 --- a/htdocs/langs/ja_JP/ticket.lang +++ b/htdocs/langs/ja_JP/ticket.lang @@ -34,7 +34,8 @@ TicketDictResolution=チケット-解決策 TicketTypeShortCOM=商業的な質問 TicketTypeShortHELP=機能的なヘルプのリクエスト -TicketTypeShortISSUE=問題、バグまたは問題 +TicketTypeShortISSUE=問題またはバグ +TicketTypeShortPROBLEM=問題 TicketTypeShortREQUEST=変更または拡張リクエスト TicketTypeShortPROJET=プロジェクト TicketTypeShortOTHER=その他 @@ -54,14 +55,15 @@ TypeContact_ticket_internal_SUPPORTTEC=割り当てられたユーザー TypeContact_ticket_external_SUPPORTCLI=顧客連絡/インシデント追跡 TypeContact_ticket_external_CONTRIBUTOR=外部寄稿者 -OriginEmail=メールソース +OriginEmail=メールレポーター Notify_TICKET_SENTBYMAIL=メールでチケットメッセージを送信する # Status Read=読む Assigned=割り当て済 InProgress=進行中 -NeedMoreInformation=情報を待っている +NeedMoreInformation=記者のフィードバック待機中 +NeedMoreInformationShort=フィードバック待機中 Answered=答えた Waiting=待っている Closed=閉じた @@ -160,7 +162,7 @@ CreatedBy=によって作成された NewTicket=新規チケット SubjectAnswerToTicket=チケットの回答 TicketTypeRequest=リクエストの種類 -TicketCategory=グループ +TicketCategory=チケット分類 SeeTicket=チケットを見る TicketMarkedAsRead=チケットは既読としてマークされている TicketReadOn=読む @@ -211,6 +213,7 @@ TicketMessageHelp=このテキストのみがチケットカードのメッセ TicketMessageSubstitutionReplacedByGenericValues=置換変数は一般的な値に置き換えられます。 TimeElapsedSince=からの経過時間 TicketTimeToRead=読み取るまでの経過時間 +TicketTimeElapsedBeforeSince=前後の経過時間 TicketContacts=連絡先チケット TicketDocumentsLinked=チケットにリンクされているドキュメント ConfirmReOpenTicket=このチケットを再度開くことを確認するか? diff --git a/htdocs/langs/ka_GE/deliveries.lang b/htdocs/langs/ka_GE/deliveries.lang index 1f48c01de75..cd8a36e6c70 100644 --- a/htdocs/langs/ka_GE/deliveries.lang +++ b/htdocs/langs/ka_GE/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Recipient ErrorStockIsNotEnough=There's not enough stock Shippable=Shippable NonShippable=Not Shippable +ShowShippableStatus=Show shippable status ShowReceiving=Show delivery receipt NonExistentOrder=Nonexistent order +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/ka_GE/exports.lang b/htdocs/langs/ka_GE/exports.lang index a0eb7161ef2..cb652229825 100644 --- a/htdocs/langs/ka_GE/exports.lang +++ b/htdocs/langs/ka_GE/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Type of line (0=product, 1=service) FileWithDataToImport=File with data to import FileToImport=Source file to import FileMustHaveOneOfFollowingFormat=File to import must have one of following formats -DownloadEmptyExample=Download template file with field content information (* are mandatory fields) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... SourceFileFormat=Source file format diff --git a/htdocs/langs/km_KH/deliveries.lang b/htdocs/langs/km_KH/deliveries.lang index 1f48c01de75..cd8a36e6c70 100644 --- a/htdocs/langs/km_KH/deliveries.lang +++ b/htdocs/langs/km_KH/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Recipient ErrorStockIsNotEnough=There's not enough stock Shippable=Shippable NonShippable=Not Shippable +ShowShippableStatus=Show shippable status ShowReceiving=Show delivery receipt NonExistentOrder=Nonexistent order +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/km_KH/exports.lang b/htdocs/langs/km_KH/exports.lang index a0eb7161ef2..cb652229825 100644 --- a/htdocs/langs/km_KH/exports.lang +++ b/htdocs/langs/km_KH/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Type of line (0=product, 1=service) FileWithDataToImport=File with data to import FileToImport=Source file to import FileMustHaveOneOfFollowingFormat=File to import must have one of following formats -DownloadEmptyExample=Download template file with field content information (* are mandatory fields) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... SourceFileFormat=Source file format diff --git a/htdocs/langs/kn_IN/deliveries.lang b/htdocs/langs/kn_IN/deliveries.lang index 1f48c01de75..cd8a36e6c70 100644 --- a/htdocs/langs/kn_IN/deliveries.lang +++ b/htdocs/langs/kn_IN/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Recipient ErrorStockIsNotEnough=There's not enough stock Shippable=Shippable NonShippable=Not Shippable +ShowShippableStatus=Show shippable status ShowReceiving=Show delivery receipt NonExistentOrder=Nonexistent order +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/kn_IN/exports.lang b/htdocs/langs/kn_IN/exports.lang index a0eb7161ef2..cb652229825 100644 --- a/htdocs/langs/kn_IN/exports.lang +++ b/htdocs/langs/kn_IN/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Type of line (0=product, 1=service) FileWithDataToImport=File with data to import FileToImport=Source file to import FileMustHaveOneOfFollowingFormat=File to import must have one of following formats -DownloadEmptyExample=Download template file with field content information (* are mandatory fields) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... SourceFileFormat=Source file format diff --git a/htdocs/langs/ko_KR/deliveries.lang b/htdocs/langs/ko_KR/deliveries.lang index 19a2ebe4d02..b3a63cc4e78 100644 --- a/htdocs/langs/ko_KR/deliveries.lang +++ b/htdocs/langs/ko_KR/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Recipient ErrorStockIsNotEnough=There's not enough stock Shippable=Shippable NonShippable=Not Shippable +ShowShippableStatus=Show shippable status ShowReceiving=Show delivery receipt NonExistentOrder=Nonexistent order +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/ko_KR/exports.lang b/htdocs/langs/ko_KR/exports.lang index fda64411c9f..445f09b42a4 100644 --- a/htdocs/langs/ko_KR/exports.lang +++ b/htdocs/langs/ko_KR/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Type of line (0=product, 1=service) FileWithDataToImport=File with data to import FileToImport=Source file to import FileMustHaveOneOfFollowingFormat=File to import must have one of following formats -DownloadEmptyExample=Download template file with field content information (* are mandatory fields) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... SourceFileFormat=Source file format diff --git a/htdocs/langs/lo_LA/deliveries.lang b/htdocs/langs/lo_LA/deliveries.lang index 1f48c01de75..cd8a36e6c70 100644 --- a/htdocs/langs/lo_LA/deliveries.lang +++ b/htdocs/langs/lo_LA/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Recipient ErrorStockIsNotEnough=There's not enough stock Shippable=Shippable NonShippable=Not Shippable +ShowShippableStatus=Show shippable status ShowReceiving=Show delivery receipt NonExistentOrder=Nonexistent order +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/lo_LA/exports.lang b/htdocs/langs/lo_LA/exports.lang index a0eb7161ef2..cb652229825 100644 --- a/htdocs/langs/lo_LA/exports.lang +++ b/htdocs/langs/lo_LA/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Type of line (0=product, 1=service) FileWithDataToImport=File with data to import FileToImport=Source file to import FileMustHaveOneOfFollowingFormat=File to import must have one of following formats -DownloadEmptyExample=Download template file with field content information (* are mandatory fields) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... SourceFileFormat=Source file format diff --git a/htdocs/langs/lt_LT/deliveries.lang b/htdocs/langs/lt_LT/deliveries.lang index ea5c1f3265a..0c394aef77d 100644 --- a/htdocs/langs/lt_LT/deliveries.lang +++ b/htdocs/langs/lt_LT/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Gavėjas ErrorStockIsNotEnough=Nėra pakankamai atsargų Shippable=Pristatomas NonShippable=Nepristatomas +ShowShippableStatus=Show shippable status ShowReceiving=Show delivery receipt NonExistentOrder=Nonexistent order +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/lt_LT/exports.lang b/htdocs/langs/lt_LT/exports.lang index b42cd43974d..6e8e3929002 100644 --- a/htdocs/langs/lt_LT/exports.lang +++ b/htdocs/langs/lt_LT/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Eilutės tipas (0 = produktas, 1 = paslaugos) FileWithDataToImport=Failas su duomenimis importui FileToImport=Šaltinio failas importui FileMustHaveOneOfFollowingFormat=File to import must have one of following formats -DownloadEmptyExample=Download template file with field content information (* are mandatory fields) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... SourceFileFormat=Šaltinio failo formatas diff --git a/htdocs/langs/lv_LV/accountancy.lang b/htdocs/langs/lv_LV/accountancy.lang index e0eeea0b8a2..ce348d56481 100644 --- a/htdocs/langs/lv_LV/accountancy.lang +++ b/htdocs/langs/lv_LV/accountancy.lang @@ -48,7 +48,8 @@ CountriesNotInEEC=Valstis, kas nav EEK valstīs CountriesInEECExceptMe=Valstis EEK, izņemot %s CountriesExceptMe=Visas valstis, izņemot %s AccountantFiles=Eksportēt pirmdokumentus -ExportAccountingSourceDocHelp=Izmantojot šo rīku, varat eksportēt avota notikumus (sarakstu un PDF failus), kas tika izmantoti grāmatvedības ģenerēšanai. Lai eksportētu žurnālus, izmantojiet izvēlnes ierakstu %s - %s. +ExportAccountingSourceDocHelp=Izmantojot šo rīku, varat eksportēt avota notikumus (sarakstu CSV un PDF formātā), kas tika izmantoti grāmatvedības ģenerēšanai. +ExportAccountingSourceDocHelp2=Lai eksportētu žurnālus, izmantojiet izvēlnes ierakstu %s - %s. VueByAccountAccounting=Skatīt pēc grāmatvedības konta VueBySubAccountAccounting=Skatīt pēc grāmatvedības apakškonta @@ -131,7 +132,7 @@ InvoiceLinesDone=Iesaistīto rēķinu līnijas ExpenseReportLines=Izdevumu atskaites līnijas, kas saistītas ExpenseReportLinesDone=Saistītās izdevumu pārskatu līnijas IntoAccount=Bind line ar grāmatvedības kontu -TotalForAccount=Total accounting account +TotalForAccount=Kopējais grāmatvedības konts Ventilate=Saistīt @@ -158,7 +159,7 @@ ACCOUNTING_LENGTH_AACCOUNT=Trešo pušu grāmatvedības kontu garums (ja iestat ACCOUNTING_MANAGE_ZERO=Atļaujiet pārvaldīt atšķirīgu skaitu nulles grāmatvedības konta beigās. Nepieciešamas dažas valstis (piemēram, Šveice). Ja iestatījums ir izslēgts (noklusējums), varat iestatīt šādus divus parametrus, lai pieprasītu lietojumprogrammai pievienot virtuālās nulles. BANK_DISABLE_DIRECT_INPUT=Atspējot tiešu darījumu reģistrāciju bankas kontā ACCOUNTING_ENABLE_EXPORT_DRAFT_JOURNAL=Iespējot eksporta projektu žurnālā -ACCOUNTANCY_COMBO_FOR_AUX=Enable combo list for subsidiary account (may be slow if you have a lot of third parties, break ability to search on a part of value) +ACCOUNTANCY_COMBO_FOR_AUX=Iespējot kombinēto sarakstu meitas kontam (tas var būt lēns, ja jums ir daudz trešo pušu, pārtraukt iespēju meklēt daļu vērtības) ACCOUNTING_DATE_START_BINDING=Definējiet datumu, lai sāktu iesiešanu un pārskaitīšanu grāmatvedībā. Zem šī datuma darījumi netiks pārnesti uz grāmatvedību. ACCOUNTING_DEFAULT_PERIOD_ON_TRANSFER=Pārsūtot grāmatvedību, pēc noklusējuma atlasiet periodu @@ -202,14 +203,14 @@ Docref=Atsauce LabelAccount=Konta nosaukums LabelOperation=Etiķetes darbība Sens=Virziens -AccountingDirectionHelp=For an accounting account of a customer, use Credit to record a payment you have received
For an accounting account of a supplier, use Debit to record a payment you made +AccountingDirectionHelp=Klienta grāmatvedības kontā izmantojiet kredītu, lai reģistrētu saņemto maksājumu
Piegādātāja grāmatvedības kontā izmantojiet Debets, lai reģistrētu veikto maksājumu LetteringCode=Burtu kods Lettering=Burti Codejournal=Žurnāls JournalLabel=Žurnāla etiķete NumPiece=Gabala numurs TransactionNumShort=Num. darījums -AccountingCategory=Custom group +AccountingCategory=Pielāgota grupa GroupByAccountAccounting=Grupēt pēc galvenās grāmatas konta GroupBySubAccountAccounting=Grupēt pēc apakšzinēja konta AccountingAccountGroupsDesc=Šeit jūs varat definēt dažas grāmatvedības kontu grupas. Tie tiks izmantoti personificētiem grāmatvedības pārskatiem. @@ -297,7 +298,7 @@ NoNewRecordSaved=Neviens ieraksts žurnālistikai nav ListOfProductsWithoutAccountingAccount=Produktu saraksts, uz kuriem nav saistīta kāds grāmatvedības konts ChangeBinding=Mainiet saites Accounted=Uzskaitīts virsgrāmatā -NotYetAccounted=Not yet accounted in the ledger +NotYetAccounted=Vēl nav uzskaitīti virsgrāmatā ShowTutorial=Rādīt apmācību NotReconciled=Nesaskaņots WarningRecordWithoutSubledgerAreExcluded=Brīdinājums: visas darbības, kurās nav definēts apakškārtas konts, tiek filtrētas un izslēgtas no šī skata @@ -328,9 +329,9 @@ ACCOUNTING_DISABLE_BINDING_ON_PURCHASES=Atspējot saistīšanu un pārsūtīšan ACCOUNTING_DISABLE_BINDING_ON_EXPENSEREPORTS=Atspējojiet grāmatvedībā iesiešanu un pārskaitīšanu izdevumu pārskatos (grāmatvedībā netiks ņemti vērā izdevumu pārskati) ## Export -NotifiedExportDate=Notified export date (modification of the entries will not be possible) -NotifiedValidationDate=Validation of the entries (modification or deletion of the entries will not be possible) -ConfirmExportFile=Confirmation of the generation of the accounting export file ? +NotifiedExportDate=Paziņots eksporta datums (ierakstus nevarēs modificēt) +NotifiedValidationDate=Ierakstu validācija (modificēt vai dzēst ierakstus nebūs iespējams) +ConfirmExportFile=Apstiprinājums par grāmatvedības eksporta faila ģenerēšanu? ExportDraftJournal=Eksporta žurnāla projekts Modelcsv=Eksporta modulis Selectmodelcsv=Atlasiet eksporta modeli @@ -405,29 +406,29 @@ UseMenuToSetBindindManualy=Līnijas, kas vēl nav saistītas, izmantojiet izvēl ## Import ImportAccountingEntries=Grāmatvedības ieraksti -ImportAccountingEntriesFECFormat=Accounting entries - FEC format -FECFormatJournalCode=Code journal (JournalCode) -FECFormatJournalLabel=Label journal (JournalLib) -FECFormatEntryNum=Piece number (EcritureNum) -FECFormatEntryDate=Piece date (EcritureDate) -FECFormatGeneralAccountNumber=General account number (CompteNum) -FECFormatGeneralAccountLabel=General account label (CompteLib) -FECFormatSubledgerAccountNumber=Subledger account number (CompAuxNum) -FECFormatSubledgerAccountLabel=Subledger account number (CompAuxLib) +ImportAccountingEntriesFECFormat=Grāmatvedības ieraksti - FEC formāts +FECFormatJournalCode=Kodu žurnāls (JournalCode) +FECFormatJournalLabel=Iezīmju žurnāls (JournalLib) +FECFormatEntryNum=Gabala numurs (EcritureNum) +FECFormatEntryDate=Gabala datums (EcritureDate) +FECFormatGeneralAccountNumber=Vispārējais konta numurs (CompteNum) +FECFormatGeneralAccountLabel=Vispārīga konta iezīme (CompteLib) +FECFormatSubledgerAccountNumber=Zemesgrāmatas konta numurs (CompAuxNum) +FECFormatSubledgerAccountLabel=Zemesgrāmatas konta numurs (CompAuxLib) FECFormatPieceRef=Piece ref (PieceRef) -FECFormatPieceDate=Piece date creation (PieceDate) -FECFormatLabelOperation=Label operation (EcritureLib) -FECFormatDebit=Debit (Debit) -FECFormatCredit=Credit (Credit) -FECFormatReconcilableCode=Reconcilable code (EcritureLet) -FECFormatReconcilableDate=Reconcilable date (DateLet) -FECFormatValidateDate=Piece date validated (ValidDate) -FECFormatMulticurrencyAmount=Multicurrency amount (Montantdevise) -FECFormatMulticurrencyCode=Multicurrency code (Idevise) +FECFormatPieceDate=Gabala datuma izveide (PieceDate) +FECFormatLabelOperation=Etiķetes darbība (EcritureLib) +FECFormatDebit=Debets (debets) +FECFormatCredit=Kredīts (kredīts) +FECFormatReconcilableCode=Saskaņojams kods (EcritureLet) +FECFormatReconcilableDate=Samierināms datums (DateLet) +FECFormatValidateDate=Gabala datums ir validēts (ValidDate) +FECFormatMulticurrencyAmount=Daudzvalūtu summa (Montantdevise) +FECFormatMulticurrencyCode=Daudzvalūtu kods (Idevise) DateExport=Eksporta datums WarningReportNotReliable=Brīdinājums. Šis pārskats nav balstīts uz grāmatvedi, tādēļ tajā nav darījumu, kas Manuāli ir manuāli modificēts. Ja žurnāls ir atjaunināts, grāmatvedības skats ir precīzāks. ExpenseReportJournal=Izdevumu atskaites žurnāls InventoryJournal=Inventāra žurnāls -NAccounts=%s accounts +NAccounts=%s konti diff --git a/htdocs/langs/lv_LV/admin.lang b/htdocs/langs/lv_LV/admin.lang index 05a605ecedf..ae71ef1b18c 100644 --- a/htdocs/langs/lv_LV/admin.lang +++ b/htdocs/langs/lv_LV/admin.lang @@ -37,7 +37,7 @@ UnlockNewSessions=Noņemt savienojuma bloķēšanu YourSession=Jūsu sesija Sessions=Lietotāju sesijas WebUserGroup=Web servera lietotājs/grupa -PermissionsOnFiles=Permissions on files +PermissionsOnFiles=Atļaujas failiem PermissionsOnFilesInWebRoot=Atļaujas failiem tīmekļa saknes direktorijā PermissionsOnFile=Atļaujas failā %s NoSessionFound=Šķiet, ka jūsu PHP konfigurācija neļauj iekļaut aktīvās sesijas. Direktorija, kuru izmanto sesiju saglabāšanai (%s), var būt aizsargāta (piemēram, ar OS atļaujām vai PHP direktīvu open_basedir). @@ -63,8 +63,8 @@ IfModuleEnabled=Piezīme: jā, ir efektīva tikai tad, ja modulis %s ir i RemoveLock=Ja ir, noņemiet/pārdēvējiet failu %s, lai varētu izmantot atjaunināšanas/instalēšanas rīku. RestoreLock=Atjaunojiet failu %s tikai ar lasīšanas atļauju, lai atspējotu jebkādu turpmāku atjaunināšanas/instalēšanas rīka izmantošanu. SecuritySetup=Drošības iestatījumi -PHPSetup=PHP setup -OSSetup=OS setup +PHPSetup=PHP iestatīšana +OSSetup=OS iestatīšana SecurityFilesDesc=Šeit definējiet ar drošību saistītās iespējas failu augšupielādei. ErrorModuleRequirePHPVersion=Kļūda, šim modulim ir nepieciešama PHP versija %s vai augstāka ErrorModuleRequireDolibarrVersion=Kļūda, šim modulim nepieciešama Dolibarr versija %s vai augstāka @@ -157,7 +157,7 @@ SystemToolsAreaDesc=Šī sadaļa nodrošina administrēšanas funkcijas. Izmanto Purge=Tīrīt PurgeAreaDesc=Šī lapa ļauj izdzēst visus Dolibarr ģenerētos vai glabātos failus (pagaidu faili vai visi faili %s direktorijā). Šīs funkcijas izmantošana parasti nav nepieciešama. Tas tiek nodrošināts kā risinājums lietotājiem, kuru Dolibarr uztur pakalpojumu sniedzējs, kas nepiedāvā atļaujas, lai dzēstu tīmekļa servera ģenerētos failus. PurgeDeleteLogFile=Dzēsiet žurnāla failus, tostarp %s, kas definēti Syslog modulim (nav datu pazaudēšanas riska). -PurgeDeleteTemporaryFiles=Delete all log and temporary files (no risk of losing data). Parameter can be 'tempfilesold', 'logfiles' or both 'tempfilesold+logfiles'. Note: Deletion of temporary files is done only if the temp directory was created more than 24 hours ago. +PurgeDeleteTemporaryFiles=Izdzēsiet visus žurnāla un pagaidu failus (nav datu zaudēšanas riska). Parametrs var būt “tempfilesold”, “logfiles” vai abi “tempfilesold + logfiles”. Piezīme. Pagaidu failu dzēšana tiek veikta tikai tad, ja temp direktorija tika izveidota vairāk nekā pirms 24 stundām. PurgeDeleteTemporaryFilesShort=Dzēst žurnālu un pagaidu failus PurgeDeleteAllFilesInDocumentsDir=Dzēsiet visus failus direktorijā: %s .
Tas izdzēsīs visus radītos dokumentus, kas saistīti ar elementiem (trešajām personām, rēķiniem utt.), ECM modulī augšupielādētiem failiem, datu bāzes rezerves izgāztuvēm un pagaidu failus. PurgeRunNow=Tīrīt tagad @@ -221,7 +221,7 @@ NotCompatible=Šis modulis, šķiet, nav savietojams ar jūsu Dolibarr %s (Min % CompatibleAfterUpdate=Šis modulis prasa atjaunināt Dolibarr %s (Min %s - Maks %s). SeeInMarkerPlace=Skatiet Marketplace SeeSetupOfModule=See setup of module %s -SetOptionTo=Set option %s to %s +SetOptionTo=Iestatiet opciju %s uz %s Updated=Atjaunots AchatTelechargement=Pirkt / lejupielādēt GoModuleSetupArea=Lai izvietotu / instalētu jaunu moduli, dodieties uz moduļa iestatīšanas apgabalu: %s . @@ -235,7 +235,7 @@ BoxesAvailable=Pieejamie logrīki BoxesActivated=Logrīki aktivizēti ActivateOn=Aktivizēt ActiveOn=Aktivizēts -ActivatableOn=Activatable on +ActivatableOn=Aktivizējams SourceFile=Avota fails AvailableOnlyIfJavascriptAndAjaxNotDisabled=Pieejams tikai tad, ja JavaScript nav atslēgts Required=Nepieciešams @@ -351,10 +351,10 @@ LastActivationAuthor=Jaunākais aktivizētāja autors LastActivationIP=Jaunākā aktivizācijas IP adrese UpdateServerOffline=Atjaunināšanas serveris bezsaistē WithCounter=Pārvaldīt skaitītāju -GenericMaskCodes=You may enter any numbering mask. In this mask, the following tags can be used:
{000000} corresponds to a number which will be incremented on each %s. Enter as many zeros as the desired length of the counter. The counter will be completed by zeros from the left in order to have as many zeros as the mask.
{000000+000} same as the previous one but an offset corresponding to the number to the right of the + sign is applied starting on the first %s.
{000000@x} same as the previous one but the counter is reset to zero when month x is reached (x between 1 and 12, or 0 to use the early months of fiscal year defined in your configuration, or 99 to reset to zero every month). If this option is used and x is 2 or higher, then the sequence {yy}{mm} or {yyyy}{mm} is also required.
{dd} day (01 to 31).
{mm} month (01 to 12).
{yy}, {yyyy} or {y} year over 2, 4 or 1 numbers.
-GenericMaskCodes2={cccc} the client code on n characters
{cccc000} the client code on n characters is followed by a counter dedicated to the customer. This counter dedicated to customer is reset at same time as the global counter.
{tttt} The code of third party type on n characters (see menu Home - Setup - Dictionary - Types of third parties). If you add this tag, the counter will be different for each type of third party.
+GenericMaskCodes=Jūs varat ievadīt jebkuru numerācijas masku. Šajā maskā var izmantot šādus tagus:
{000000} atbilst skaitlim, kas tiks palielināts katrā %s. Ievadiet tik daudz nulles, cik vēlamais skaitītāja garums. Skaitītāju aizpildīs ar nulli no kreisās puses, lai tajā būtu tikpat daudz nulles kā maskā.
{000000 + 000} tāds pats kā iepriekšējais, bet nobīde, kas atbilst skaitlim pa labi no zīmes +, tiek piemērota, sākot ar pirmo %s.
{000000 @ x} tāds pats kā iepriekšējais, bet skaitītājs tiek atiestatīts uz nulli, kad ir sasniegts mēnesis x (x no 1 līdz 12, vai 0, lai izmantotu jūsu konfigurācijā definētos fiskālā gada sākuma mēnešus, vai no 99 līdz katru mēnesi atiestatīt uz nulli). Ja tiek izmantota šī opcija un x ir 2 vai lielāks, ir nepieciešama arī secība {yy} {mm} vai {gggg} {mm}.
{dd} diena (no 01 līdz 31).
{mm} mēnesis (no 01 līdz 12).
{yy} , {yyyy} vai {y} a09a4b
+GenericMaskCodes2= {cccc} klienta kods uz n rakstzīmēm
{cccc000} a09a4b739f17fz Šis klientam veltītais skaitītājs tiek atiestatīts vienlaikus ar globālo skaitītāju.
{tttt} Trešās puses tipa kods uz n rakstzīmēm (skatiet izvēlni Sākums - Iestatīšana - Vārdnīca - Trešo personu veidi). Ja pievienosit šo tagu, katram trešās puses tipam skaitītājs būs atšķirīgs.
GenericMaskCodes3=Visas citas rakstzīmes masku paliks neskartas.
Atstarpes nav atļautas.
-GenericMaskCodes3EAN=All other characters in the mask will remain intact (except * or ? in 13th position in EAN13).
Spaces are not allowed.
In EAN13, the last character after the last } in 13th position should be * or ? . It will be replaced by the calculated key.
+GenericMaskCodes3EAN=Visas pārējās maskas rakstzīmes paliks neskartas (izņemot * vai? EAN13 13. pozīcijā).
Atstarpes nav atļautas.
EAN13, pēdējam rakstzīmei pēc pēdējā} 13. pozīcijā jābūt * vai? . To aizstās aprēķinātā atslēga.
GenericMaskCodes4a=Piemērs 99. %s no trešās personas TheCompany, ar datumu 2007-01-31:
GenericMaskCodes4b=Piemērs trešā persona veidota 2007-03-01:
GenericMaskCodes4c=Piemērs produkts veidots 2007-03-01:
@@ -399,7 +399,7 @@ SecurityToken=Atslēga uz drošu saiti NoSmsEngine=Nav pieejams neviens SMS sūtītāja pārvaldnieks. SMS sūtītāja pārvaldnieks nav instalēts ar noklusējuma izplatīšanu, jo tie ir atkarīgi no ārēja piegādātāja, bet jūs varat atrast kādu no %s PDF=PDF PDFDesc=Globālās iespējas PDF ģenerēšanai -PDFOtherDesc=PDF Option specific to some modules +PDFOtherDesc=PDF opcija, kas raksturīga dažiem moduļiem PDFAddressForging=Noteikumi par adreses sadaļu HideAnyVATInformationOnPDF=Slēpt visu informāciju, kas saistīta ar pārdošanas nodokli / PVN PDFRulesForSalesTax=Pārdošanas nodokļa / PVN noteikumi @@ -450,8 +450,8 @@ ExtrafieldParamHelpPassword=Atstājot šo lauku tukšu, tas nozīmē, ka šī v ExtrafieldParamHelpselect=Vērtību sarakstam jābūt rindām ar formāta atslēgu, vērtība (kur atslēga nevar būt '0')

, piemēram,: 1, vērtība1
2, vērtība2
kods3, vērtība3 < br> ...

Lai saraksts būtu atkarīgs no cita papildinošā atribūtu saraksta:
1, vērtība1 | opcijas_ vecāku_līmeņa kods : vecāku_skava
2, vērtība2 | opcijas_ vecāku saraksts_code : parent_key

Lai saraksts būtu atkarīgs no cita saraksta:
1, vērtība1 | vecāku saraksts_code : vecāku_skava
2, vērtība2 | vecāku saraksts_code : vecāku_poga ExtrafieldParamHelpcheckbox=Vērtību sarakstam jābūt rindām ar formāta atslēgu, vērtība (kur atslēga nevar būt '0')

, piemēram,: 1, vērtība1
2, vērtība2
3, vērtība3 < br> ... ExtrafieldParamHelpradio=Vērtību sarakstam jābūt rindām ar formāta atslēgu, vērtība (kur atslēga nevar būt '0')

, piemēram,: 1, vērtība1
2, vērtība2
3, vērtība3 < br> ... -ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filtersql
Example: c_typent:libelle:id::filtersql

- id_field is necessarly a primary int key
- filtersql is a SQL condition. It can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter which is the current id of current object
To use a SELECT into the filter use the keyword $SEL$ to bypass anti-injection protection.
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter -ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filtersql
Example: c_typent:libelle:id::filtersql

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter +ExtrafieldParamHelpsellist=Vērtību saraksts tiek iegūts no tabulas
Sintakse: table_name: label_field: id_field :: filtersql
Piemērs: c_typent: libelle: id :: filtersql

- id_f0 af2 ir a2_fails ir obligāts. Tas var būt vienkāršs tests (piemēram, aktīvs = 1), lai parādītu tikai aktīvo vērtību
. Filtrā var izmantot arī $ ID $, kas ir pašreizējā objekta
ID. Lai filtrā izmantotu SELECT, izmantojiet atslēgvārdu $ SEL $ apiet pretinjekcijas aizsardzību.
, ja vēlaties filtrēt ekstrefieldos, izmantojiet sintaksi extra.fieldcode = ... (kur lauka kods ir extrafield kods)

Lai saraksts būtu atkarīgs no cita papildu atribūtu saraksta:
:
parent_list_code | parent_column: filter

Lai saraksts būtu atkarīgs no cita saraksta:
c_typent: libelle: ID: a04927 +ExtrafieldParamHelpchkbxlst=Vērtību saraksts nāk no tabulas
Sintakse: table_name: label_field: id_field :: filtersql
Piemērs: c_typent: libelle: id :: filtersql

tikai aktīvs displejs var izmantot arī $ ID $ filtrā. ragana ir pašreizējā objekta
ID. Lai atlasītu filtru, izmantojiet $ SEL $
, ja vēlaties filtrēt ekstra laukos, izmantojiet sintaksi extra.fieldcode = ... (kur lauka kods ir kods extrafield)

lai būtu sarakstu atkarībā citā papildu atribūtu saraksta:
c_typent: Libelle: id: options_ parent_list_code | parent_column: filtrs

lai iegūtu sarakstu, atkarībā no citu sarakstā:
c_typent: libelle: id: parent_list_code | parent_column: filtrs ExtrafieldParamHelplink=Parametriem jābūt ObjectName: Classpath
Sintakse: ObjectName: Classpath ExtrafieldParamHelpSeparator=Vienkārša atdalītāja atstāšana tukša
Iestatiet to uz 1 sabrūkošajam atdalītājam (pēc noklusējuma atveriet jaunu sesiju, pēc tam katras lietotāja sesijai tiek saglabāts statuss)
Iestatiet to uz 2 sabrukušajam atdalītājam (jaunajai sesijai pēc noklusējuma sabrūk, pēc tam katras lietotāja sesijas laikā tiek saglabāts statuss) LibraryToBuildPDF=Bibliotēka, ko izmanto PDF veidošanai @@ -548,7 +548,7 @@ Module40Desc=Pārdevēju un pirkumu vadība (pirkumu pasūtījumi un rēķini pa Module42Name=Atkļūdošanas žurnāli Module42Desc=Žurnalēšana (fails, syslog, ...). Šādi žurnāli ir paredzēti tehniskiem / atkļūdošanas nolūkiem. Module43Name=Atkļūdošanas josla -Module43Desc=A tool for developper adding a debug bar in your browser. +Module43Desc=Izstrādātāja rīks, kas pārlūkprogrammā pievieno atkļūdošanas joslu. Module49Name=Redaktors Module49Desc=Redaktora vadība Module50Name=Produkti @@ -562,7 +562,7 @@ Module53Desc=Pakalpojumu pārvaldība Module54Name=Līgumi / Abonementi Module54Desc=Līgumu (pakalpojumu vai regulāru abonēšanas) vadība Module55Name=Svītrkodi -Module55Desc=Barcode or QR code management +Module55Desc=Svītrkodu vai QR kodu pārvaldība Module56Name=Maksājums ar pārskaitījumu Module56Desc=Piegādātāju norēķinu vadīšana ar kredīta pārveduma rīkojumiem. Tas ietver SEPA faila ģenerēšanu Eiropas valstīm. Module57Name=Maksājumi ar tiešo debetu @@ -648,13 +648,13 @@ Module2900Desc=GeoIP MaxMind pārveidošanu iespējas Module3200Name=Nemainīgi arhīvi Module3200Desc=Iespējojiet nemainīgu biznesa notikumu žurnālu. Notikumi tiek arhivēti reāllaikā. Žurnāls ir tikai lasāmu tabulu ķēdes notikumus, kurus var eksportēt. Šis modulis dažās valstīs var būt obligāts. Module3400Name=Sociālie tīkli -Module3400Desc=Enable Social Networks fields into third parties and addresses (skype, twitter, facebook, ...). +Module3400Desc=Iespējojiet sociālo tīklu laukus trešajām pusēm un adresēm (skype, twitter, facebook, ...). Module4000Name=HRM Module4000Desc=Cilvēkresursu vadība (departamenta vadība, darbinieku līgumi un jūtas) Module5000Name=Multi-kompānija Module5000Desc=Ļauj jums pārvaldīt vairākus uzņēmumus -Module6000Name=Inter-modules Workflow -Module6000Desc=Workflow management between different modules (automatic creation of object and/or automatic status change) +Module6000Name=Starpmoduļu darbplūsma +Module6000Desc=Darbplūsmas pārvaldība starp dažādiem moduļiem (automātiska objekta izveidošana un / vai automātiska statusa maiņa) Module10000Name=Mājas lapas Module10000Desc=Izveidojiet vietnes (publiskas) ar WYSIWYG redaktoru. Šī ir tīmekļa pārziņa vai izstrādātāja orientēta CMS (labāk ir zināt HTML un CSS valodu). Vienkārši iestatiet savu tīmekļa serveri (Apache, Nginx, ...), lai norādītu uz atvēlēto Dolibarr direktoriju, lai tas būtu tiešsaistē internetā ar savu domēna vārdu. Module20000Name=Atvaļinājumu pieprasījumu pārvaldība @@ -815,8 +815,8 @@ PermissionAdvanced253=Izveidot/mainīt iekšējoss/ārējos lietotājus un atļa Permission254=Izveidot/mainīt ārējos lietotājus tikai Permission255=Mainīt citu lietotāju paroli Permission256=Izdzēst vai bloķēt citus lietotājus -Permission262=Extend access to all third parties AND their objects (not only third parties for which the user is a sale representative).
Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).
Not effective for projects (only rules on project permissions, visibility and assignment matters). -Permission263=Extend access to all third parties WITHOUT their objects (not only third parties for which the user is a sale representative).
Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).
Not effective for projects (only rules on project permissions, visibility and assignment matters). +Permission262=Paplašiniet piekļuvi visām trešajām personām UN viņu objektiem (ne tikai trešajām pusēm, kuru lietotājs ir pārdošanas pārstāvis).
Nav efektīvs ārējiem lietotājiem (vienmēr tikai un vienīgi attiecībā uz priekšlikumiem, pasūtījumiem, rēķiniem, līgumiem utt.)
Nav spēkā projektiem (tikai noteikumi par projekta atļaujām, redzamību un piešķiršanas jautājumiem). +Permission263=Paplašiniet piekļuvi visām trešajām pusēm BEZ viņu objektiem (ne tikai trešajām personām, kuru lietotājs ir pārdošanas pārstāvis).
Nav efektīvs ārējiem lietotājiem (vienmēr tikai un vienīgi attiecībā uz priekšlikumiem, pasūtījumiem, rēķiniem, līgumiem utt.)
Nav spēkā projektiem (tikai noteikumi par projekta atļaujām, redzamību un piešķiršanas jautājumiem). Permission271=Lasīt CA Permission272=Lasīt rēķinus Permission273=Izrakstīt rēķinus @@ -849,10 +849,10 @@ Permission402=Izveidot/mainīt atlaides Permission403=Apstiprināt atlaides Permission404=Dzēst atlaides Permission430=Izmantot Debug Bar -Permission511=Read salaries and payments (yours and subordinates) -Permission512=Create/modify salaries and payments -Permission514=Delete salaries and payments -Permission517=Read salaries and payments everybody +Permission511=Lasiet algas un maksājumus (jūsu un padoto) +Permission512=Izveidojiet / modificējiet algas un maksājumus +Permission514=Dzēst algas un maksājumus +Permission517=Lasiet algas un maksājumus visiem Permission519=Eksportēt algas Permission520=Lasīt aizdevumus Permission522=Izveidot / labot aizdevumus @@ -966,8 +966,8 @@ Permission23003=Dzēst ieplānoto uzdevumu Permission23004=Izpildīt ieplānoto uzdevumu Permission50101=Izmantot tirdzniecības vietu (SimplePOS) Permission50151=Izmantot tirdzniecības vietu (TakePOS) -Permission50152=Edit sales lines -Permission50153=Edit ordered sales lines +Permission50152=Rediģēt pārdošanas rindas +Permission50153=Rediģēt pasūtītās pārdošanas līnijas Permission50201=Lasīt darījumus Permission50202=Importēt darījumus Permission50330=Lasīt Zapier objektus @@ -1042,12 +1042,12 @@ DictionaryMeasuringUnits=Mērvienības DictionarySocialNetworks=Sociālie tīkli DictionaryProspectStatus=Prospekta statuss uzņēmumiem DictionaryProspectContactStatus=Prospekta statuss kontaktiem -DictionaryHolidayTypes=Leave - Types of leave +DictionaryHolidayTypes=Atvaļinājums - atvaļinājuma veidi DictionaryOpportunityStatus=Vadošais statuss projektu / vadībai DictionaryExpenseTaxCat=Izdevumu pārskats - transporta kategorijas DictionaryExpenseTaxRange=Izdevumu pārskats - diapazons pēc transporta kategorijas DictionaryTransportMode=Intracomm pārskats - transporta veids -DictionaryBatchStatus=Product lot/serial Quality Control status +DictionaryBatchStatus=Produkta partijas / sērijas kvalitātes kontroles statuss TypeOfUnit=Vienības veids SetupSaved=Iestatījumi saglabāti SetupNotSaved=Iestatīšana nav saglabāta @@ -1164,7 +1164,7 @@ DoNotSuggestPaymentMode=Neieteikt NoActiveBankAccountDefined=Nav definēts aktīvs bankas konts OwnerOfBankAccount=Bankas konta īpašnieks %s BankModuleNotActive=Bankas kontu modulis nav ieslēgts -ShowBugTrackLink=Define the link "%s" (empty to not display this link, 'github' for the link to the Dolibarr project or define directly an url 'https://...') +ShowBugTrackLink=Definējiet saiti " %s " (tukša, lai nerādītu šo saiti, 'github' saitei uz Dolibarr projektu vai tieši definējiet URL 'https: // ...') Alerts=Brīdinājumi DelaysOfToleranceBeforeWarning=Kavēšanās, pirms tiek parādīts brīdinājuma brīdinājums par: DelaysOfToleranceDesc=Iestatiet aizkavi pirms brīdinājuma ikonas %s parādīšanas ekrānā par novēloto elementu. @@ -1189,9 +1189,9 @@ SetupDescription2=Šīs divas sadaļas ir obligātas (divi pirmie ieraksti iesta SetupDescription3=  %s -> %s

Pamata parametri, ko izmanto, lai pielāgotu ar jūsu lietojumprogrammu saistīto noklusējuma uzvedību (piemēram, valstij). SetupDescription4=  %s -> %s

Šī programmatūra ir daudzu moduļu / lietojumprogrammu komplekts. Ar jūsu vajadzībām saistītajiem moduļiem jābūt iespējotiem un konfigurētiem. Parādīsies izvēlnes ieraksti, aktivizējot šos moduļus. SetupDescription5=Citi iestatījumu izvēlnes ieraksti pārvalda izvēles parametrus. -AuditedSecurityEvents=Security events that are audited -NoSecurityEventsAreAduited=No security events are audited. You can enable them from menu %s -Audit=Security events +AuditedSecurityEvents=Drošības pasākumi, kas tiek pārbaudīti +NoSecurityEventsAreAduited=Netiek pārbaudīti nekādi drošības notikumi. Tos var iespējot no izvēlnes %s +Audit=Drošības notikumi InfoDolibarr=Par Dolibarr InfoBrowser=Pārlūkprogrammas info InfoOS=Par OS @@ -1258,8 +1258,8 @@ RunningUpdateProcessMayBeRequired=Šķiet, ka nepieciešams veikt atjaunināšan YouMustRunCommandFromCommandLineAfterLoginToUser=Jums ir palaist šo komandu no komandrindas pēc pieteikšanās uz apvalks ar lietotāju %s, vai jums ir pievienot-W iespēju beigās komandrindas, lai sniegtu %s paroli. YourPHPDoesNotHaveSSLSupport=SSL funkcijas, kas nav pieejama jūsu PHP DownloadMoreSkins=Vairāki izskati lejupielādei -SimpleNumRefModelDesc=Returns the reference number in the format %syymm-nnnn where yy is the year, mm is the month and nnnn is a sequential auto-incrementing number with no reset -SimpleNumRefNoDateModelDesc=Returns the reference number in the format %s-nnnn where nnnn is a sequential auto-incrementing number with no reset +SimpleNumRefModelDesc=Atgriež atsauces numuru formātā %syymm-nnnn, kur yy ir gads, mm ir mēnesis un nnnn ir secīgs automātiski palielināms skaitlis bez atiestatīšanas +SimpleNumRefNoDateModelDesc=Atgriež atsauces numuru formātā %s-nnnn, kur nnnn ir secīgs automātiski pieaugošs skaitlis bez atiestatīšanas ShowProfIdInAddress=Rādīt profesionālo ID ar adresēm ShowVATIntaInAddress=Slēpt Kopienas iekšējo PVN numuru ar adresēm TranslationUncomplete=Daļējs tulkojums @@ -1277,7 +1277,7 @@ MAIN_PROXY_HOST=Starpniekserveris: nosaukums/adrese MAIN_PROXY_PORT=Starpniekserveris: ports MAIN_PROXY_USER=Starpniekserveris: pieteikšanās/lietotājs MAIN_PROXY_PASS=Starpniekserveris: parole -DefineHereComplementaryAttributes=Define any additional / custom attributes that must be added to: %s +DefineHereComplementaryAttributes=Definējiet visus papildu / pielāgotos atribūtus, kas jāpievieno: %s ExtraFields=Papildus atribūti ExtraFieldsLines=Papildinošas atribūti (līnijas) ExtraFieldsLinesRec=Papildu atribūti (veidņu rēķinu līnijas) @@ -1323,12 +1323,12 @@ ConditionIsCurrently=Stāvoklis šobrīd ir %s YouUseBestDriver=Jūs izmantojat draiveri %s, kas ir labākais šobrīd pieejams draiveris. YouDoNotUseBestDriver=Jūs izmantojat draiveri %s, bet ieteicams ir %s. NbOfObjectIsLowerThanNoPb=Jums datu bāzē ir tikai %s %s. Tam nav nepieciešama īpaša optimizācija. -ComboListOptim=Combo list loading optimization +ComboListOptim=Kombinētā saraksta ielādes optimizācija SearchOptim=Meklēšanas optimizācija -YouHaveXObjectUseComboOptim=You have %s %s in the database. You can go into setup of module to enable loading of combo list on key pressed event. -YouHaveXObjectUseSearchOptim=You have %s %s in the database. You can add the constant %s to 1 in Home-Setup-Other. -YouHaveXObjectUseSearchOptimDesc=This limits the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response. -YouHaveXObjectAndSearchOptimOn=You have %s %s in the database and constant %s is set to %s in Home-Setup-Other. +YouHaveXObjectUseComboOptim=Jums datu bāzē ir %s %s. Jūs varat pāriet uz moduļa iestatīšanu, lai iespējotu kombinēto sarakstu ielādēšanu uz taustiņa nospiešanas notikuma. +YouHaveXObjectUseSearchOptim=Jums datu bāzē ir %s %s. Pastāvīgo %s var pievienot vienumam 1 sadaļā Mājas iestatīšana - Cits. +YouHaveXObjectUseSearchOptimDesc=Tas ierobežo meklēšanu tikai virkņu sākumā, kas ļauj datu bāzei izmantot indeksus, un jums nekavējoties jāsaņem atbilde. +YouHaveXObjectAndSearchOptimOn=Jums datu bāzē ir %s %s, un konstante %s ir iestatīta uz %s sadaļā Home-Setup-Other. BrowserIsOK=Jūs izmantojat tīmekļa pārlūku %s. Šī pārlūkprogramma ir droša un ātrdarbīgs. BrowserIsKO=Jūs izmantojat tīmekļa pārlūku %s. Šī pārlūka informācija ir slikta izvēle drošībai, veiktspējai un uzticamībai. Mēs iesakām izmantot Firefox, Chrome, Opera vai Safari. PHPModuleLoaded=Tiek ielādēts PHP komponents %s @@ -1440,7 +1440,7 @@ MemberMainOptions=Galvenās iespējas AdherentLoginRequired= Pārvaldīt Pieteikšanos katram dalībniekam AdherentMailRequired=Lai izveidotu jaunu dalībnieku, nepieciešams e-pasts MemberSendInformationByMailByDefault=Rūtiņu, lai nosūtītu pasta apstiprinājums locekļiem (validāciju vai jauns abonements) ir ieslēgts pēc noklusējuma -MemberCreateAnExternalUserForSubscriptionValidated=Create an external user login for each new member subscription validated +MemberCreateAnExternalUserForSubscriptionValidated=Katram apstiprinātam jaunam dalībnieka abonementam izveidojiet ārēju lietotāja pieteikuminformāciju VisitorCanChooseItsPaymentMode=Apmeklētājs var izvēlēties no pieejamiem maksājumu veidiem MEMBER_REMINDER_EMAIL=Iespējot automātisku atgādinājumu pa e-pastu par beidzies abonementi. Piezīme. Modulim %s jābūt iespējotai un pareizi iestatītai, lai nosūtītu atgādinājumus. MembersDocModules=Dokumentu veidnes dokumentiem, kas ģenerēti no dalībnieku ieraksta @@ -1525,7 +1525,7 @@ LDAPFieldLoginUnix=Lietotājs (Unix) LDAPFieldLoginExample=Piemērs: uid LDAPFilterConnection=Meklēšanas filtrs LDAPFilterConnectionExample=Piemērs: & (objectClass = inetOrgPerson) -LDAPGroupFilterExample=Example: &(objectClass=groupOfUsers) +LDAPGroupFilterExample=Piemērs: & (objectClass = groupOfUsers) LDAPFieldLoginSamba=Lietotāja vārds (samba, Aktīvā direktorija) LDAPFieldLoginSambaExample=Piemērs: kāds konta nosaukums LDAPFieldFullname=Vārds un uzvārds @@ -1757,11 +1757,11 @@ YourCompanyDoesNotUseVAT=Jūsu uzņēmumam ir noteikts, ka PVN netiek izmantots AccountancyCode=Grāmatvedības kods AccountancyCodeSell=Tirdzniecība kontu. kods AccountancyCodeBuy=Iegādes konta. kods -CREATE_NEW_VAT_WITHOUT_AUTO_PAYMENT=Keep the checkbox “Automatically create the payment” empty by default when creating a new tax +CREATE_NEW_VAT_WITHOUT_AUTO_PAYMENT=Veidojot jaunu nodokli, pēc noklusējuma turiet izvēles rūtiņu “Automātiski izveidot maksājumu” tukšu ##### Agenda ##### AgendaSetup=Notikumi un kārtības modulis uzstādīšana PasswordTogetVCalExport=Galvenais atļaut eksporta saiti -SecurityKey = Security Key +SecurityKey = Drošības atslēga PastDelayVCalExport=Neeksportē notikums, kuri vecāki par AGENDA_USE_EVENT_TYPE=Izmantojiet notikumu tipus (tiek pārvaldīti izvēlnē Iestatīšana -> Vārdnīcas -> Darba kārtības notikumu veids). AGENDA_USE_EVENT_TYPE_DEFAULT=Veidojot notikuma veidlapu, automātiski iestatiet šo noklusējuma vērtību @@ -1771,7 +1771,7 @@ AGENDA_DEFAULT_VIEW=Kuru skatu vēlaties atvērt pēc noklusējuma, izvēloties AGENDA_REMINDER_BROWSER=Iespējojiet notikuma atgādinājumu lietotāja pārlūkprogrammā (Kad ir atgādinājuma datums, pārlūkprogramma parāda uznirstošo logu. Katrs lietotājs var atspējot šādus paziņojumus pārlūka paziņojumu iestatījumos). AGENDA_REMINDER_BROWSER_SOUND=Iespējot skaņas paziņojumu AGENDA_REMINDER_EMAIL=Iespējojiet notikuma atgādinājumu , nosūtot e-pastus (katram notikumam var noteikt atgādinājuma opciju / aizkavi). -AGENDA_REMINDER_EMAIL_NOTE=Note: The frequency of the scheduled job %s must be enough to be sure that the remind are sent at the correct moment. +AGENDA_REMINDER_EMAIL_NOTE=Piezīme: Plānotā darba %s biežumam jābūt pietiekamam, lai pārliecinātos, ka atgādinājums tiek nosūtīts pareizajā brīdī. AGENDA_SHOW_LINKED_OBJECT=Parādīt saistīto objektu darba kārtībā ##### Clicktodial ##### ClickToDialSetup=Klikšķiniet lai Dial moduļa uzstādīšanas @@ -1902,7 +1902,7 @@ BackgroundTableLineOddColor=Background color for odd table lines BackgroundTableLineEvenColor=Background color for even table lines MinimumNoticePeriod=Minimum notice period (Your leave request must be done before this delay) NbAddedAutomatically=Number of days added to counters of users (automatically) each month -EnterAnyCode=This field contains a reference to identify the line. Enter any value of your choice, but without special characters. +EnterAnyCode=Šajā laukā ir norāde, lai identificētu līniju. Ievadiet jebkuru izvēlēto vērtību, bet bez īpašām rakstzīmēm. Enter0or1=Ievadiet 0 vai 1 UnicodeCurrency=Ievadiet šeit starp aplikācijām, baitu skaitļu sarakstu, kas attēlo valūtas simbolu. Piemēram: attiecībā uz $ ievadiet [36] - Brazīlijas reālajam R $ [82,36] - par € ievadiet [8364] ColorFormat=RGB krāsa ir HEX formātā, piemēram: FF0000 @@ -1987,11 +1987,11 @@ MAIN_PDF_MARGIN_RIGHT=Labā puse PDF failā MAIN_PDF_MARGIN_TOP=Galvene PDF failā MAIN_PDF_MARGIN_BOTTOM=Kājene PDF failā MAIN_DOCUMENTS_LOGO_HEIGHT=Logotipa augstums PDF formātā -MAIN_GENERATE_PROPOSALS_WITH_PICTURE=Add picture on proposal line -MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING=Add electronic sign in PDF +MAIN_GENERATE_PROPOSALS_WITH_PICTURE=Pievienojiet attēlu uz piedāvājuma līnijas +MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING=Pievienojiet elektronisko pierakstu PDF formātā NothingToSetup=Šim modulim nav nepieciešama īpaša iestatīšana. SetToYesIfGroupIsComputationOfOtherGroups=Iestatiet to uz "jā", ja šī grupa ir citu grupu aprēķins -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes.
For example:
CODEGRP1+CODEGRP2 +EnterCalculationRuleIfPreviousFieldIsYes=Ievadiet aprēķina kārtulu, ja iepriekšējais lauks bija iestatīts uz Jā.
Piemēram:
CODEGRP1 + CODEGRP2 SeveralLangugeVariatFound=Atrasti vairāki valodu varianti RemoveSpecialChars=Noņemt īpašās rakstzīmes COMPANY_AQUARIUM_CLEAN_REGEX=Regex filtrs tīrajai vērtībai (COMPANY_AQUARIUM_CLEAN_REGEX) @@ -2007,7 +2007,7 @@ SocialNetworkSetup=Moduļa Sociālo tīklu iestatīšana EnableFeatureFor=Iespējot funkcijas %s VATIsUsedIsOff=Piezīme. Izvēlnē %s - %s izvēlētā pārdošanas nodokļa vai PVN izmantošana ir iestatīta uz Izslēgts , tāpēc pārdošanas nodoklis vai izmantotais PVN vienmēr būs 0 pārdošanai. SwapSenderAndRecipientOnPDF=Pārsūtīt sūtītāja un adresāta adreses pozīciju PDF dokumentos -FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields and combo lists only. Also an URL parameter action=create or action=edit must be set OR page name must end with 'new.php' to trigger this feature. +FeatureSupportedOnTextFieldsOnly=Brīdinājums, funkcija tiek atbalstīta tikai teksta laukos un kombinētajos sarakstos. Lai aktivizētu šo funkciju, ir jāiestata arī URL parametrs action = create vai action = edit. VAI lapas nosaukumam jābeidzas ar “new.php”. EmailCollector=E-pasta savācējs EmailCollectorDescription=Pievienojiet ieplānoto darbu un iestatīšanas lapu, lai regulāri skenētu e-pasta kastes (izmantojot IMAP protokolu) un ierakstītu savā pieteikumā saņemtos e-pasta ziņojumus pareizajā vietā un / vai automātiski izveidotu ierakstus (piemēram, vadus). NewEmailCollector=Jauns e-pasta savācējs @@ -2074,11 +2074,11 @@ UseDebugBar=Izmantojiet atkļūdošanas joslu DEBUGBAR_LOGS_LINES_NUMBER=Pēdējo žurnālu rindu skaits, kas jāsaglabā konsolē WarningValueHigherSlowsDramaticalyOutput=Brīdinājums, augstākas vērtības palēnina dramatisko izeju ModuleActivated=Modulis %s ir aktivizēts un palēnina saskarni -ModuleActivatedWithTooHighLogLevel=Module %s is activated with a too high logging level (try to use a lower level for better performances and security) -ModuleSyslogActivatedButLevelNotTooVerbose=Module %s is activated and log level (%s) is correct (not too verbose) +ModuleActivatedWithTooHighLogLevel=Modulis %s tiek aktivizēts ar pārāk augstu mežizstrādes līmeni (labākai veiktspējai un drošībai mēģiniet izmantot zemāku līmeni) +ModuleSyslogActivatedButLevelNotTooVerbose=Modulis %s ir aktivizēts un žurnāla līmenis (%s) ir pareizs (ne pārāk daudzbalsīgs) IfYouAreOnAProductionSetThis=Ja izmantojat ražošanas vidi, šim rekvizītam ir jāiestata kā %s. AntivirusEnabledOnUpload=Augšupielādētajos failos ir iespējota antivīruss -SomeFilesOrDirInRootAreWritable=Some files or directories are not in a read-only mode +SomeFilesOrDirInRootAreWritable=Daži faili vai direktoriji nav tikai lasīšanas režīmā EXPORTS_SHARE_MODELS=Eksporta modeļi ir kopīgi ar visiem ExportSetup=Moduļa Eksportēšana iestatīšana ImportSetup=Moduļa importēšanas iestatīšana @@ -2102,8 +2102,8 @@ MakeAnonymousPing=Izveidojiet anonīmu Ping '+1' Dolibarr pamata serverim (to ve FeatureNotAvailableWithReceptionModule=Funkcija nav pieejama, ja ir iespējota moduļa uztveršana EmailTemplate=E-pasta veidne EMailsWillHaveMessageID=E-pastam būs tags “Atsauces”, kas atbilst šai sintaksei -PDF_SHOW_PROJECT=Show project on document -ShowProjectLabel=Project Label +PDF_SHOW_PROJECT=Parādīt projektu dokumentā +ShowProjectLabel=Projekta etiķete PDF_USE_ALSO_LANGUAGE_CODE=Ja vēlaties, lai daži PDF faili tiktu dublēti 2 dažādās valodās tajā pašā ģenerētajā PDF failā, jums šeit ir jāiestata šī otrā valoda, lai ģenerētais PDF saturētu vienā un tajā pašā lappusē 2 dažādas valodas, vienu izvēloties, ģenerējot PDF, un šo ( tikai dažas PDF veidnes to atbalsta). Vienā PDF formātā atstājiet tukšumu 1 valodā. FafaIconSocialNetworksDesc=Šeit ievadiet FontAwesome ikonas kodu. Ja jūs nezināt, kas ir FontAwesome, varat izmantot vispārīgo vērtību fa-adrešu grāmata. RssNote=Piezīme. Katra RSS plūsmas definīcija nodrošina logrīku, kas jums jāiespējo, lai tas būtu pieejams informācijas panelī @@ -2118,29 +2118,30 @@ SwitchThisForABetterSecurity=Lai nodrošinātu lielāku drošību, ieteicams šo DictionaryProductNature= Produkta veids CountryIfSpecificToOneCountry=Valsts (ja tā ir konkrēta valsts) YouMayFindSecurityAdviceHere=Šeit varat atrast drošības konsultācijas -ModuleActivatedMayExposeInformation=This PHP extension may expose sensitive data. If you don't need it, disable it. +ModuleActivatedMayExposeInformation=Šis PHP paplašinājums var atklāt konfidenciālus datus. Ja jums tas nav nepieciešams, atspējojiet to. ModuleActivatedDoNotUseInProduction=Izstrādei paredzētais modulis ir iespējots. Neiespējojiet to ražošanas vidē. CombinationsSeparator=Atdalītāja raksturs produktu kombinācijām SeeLinkToOnlineDocumentation=Piemēru skatiet saiti uz tiešsaistes dokumentēšanu augšējā izvēlnē SHOW_SUBPRODUCT_REF_IN_PDF=Ja tiek izmantots moduļa %s līdzeklis "%s", parādiet sīkāku informāciju par komplekta apakšproduktiem PDF formātā. AskThisIDToYourBank=Lai iegūtu šo ID, sazinieties ar savu banku -AdvancedModeOnly=Permision available in Advanced permission mode only -ConfFileIsReadableOrWritableByAnyUsers=The conf file is readable or writable by any users. Give permission to web server user and group only. -MailToSendEventOrganization=Event Organization -AGENDA_EVENT_DEFAULT_STATUS=Default event status when creating a event from the form -YouShouldDisablePHPFunctions=You should disable PHP functions -IfCLINotRequiredYouShouldDisablePHPFunctions=Except if you need to run system commands in custom code, you shoud disable PHP functions -PHPFunctionsRequiredForCLI=For shell purpose (like scheduled job backup or running an anitivurs program), you must keep PHP functions -NoWritableFilesFoundIntoRootDir=No writable files or directories of the common programs were found into your root directory (Good) -RecommendedValueIs=Recommended: %s -NotRecommended=Not recommanded -ARestrictedPath=A restricted path -CheckForModuleUpdate=Check for external modules updates -CheckForModuleUpdateHelp=This action will connect to editors of external modules to check if a new version is available. -ModuleUpdateAvailable=An update is available -NoExternalModuleWithUpdate=No updates found for external modules -SwaggerDescriptionFile=Swagger API description file (for use with redoc for example) -YouEnableDeprecatedWSAPIsUseRESTAPIsInstead=You enabled deprecated WS API. You should use REST API instead. -RandomlySelectedIfSeveral=Randomly selected if several pictures are available -DatabasePasswordObfuscated=Database password is obfuscated in conf file -DatabasePasswordNotObfuscated=Database password is NOT obfuscated in conf file +AdvancedModeOnly=Atļauja ir pieejama tikai papildu atļauju režīmā +ConfFileIsReadableOrWritableByAnyUsers=Conf fails ir lasāms vai rakstāms visiem lietotājiem. Piešķirt atļauju tikai tīmekļa servera lietotājam un grupai. +MailToSendEventOrganization=Pasākuma organizēšana +AGENDA_EVENT_DEFAULT_STATUS=Noklusējuma notikuma statuss, veidojot notikumu no formas +YouShouldDisablePHPFunctions=Jums vajadzētu atspējot PHP funkcijas +IfCLINotRequiredYouShouldDisablePHPFunctions=PHP funkcijas ir jāatspējo, izņemot gadījumus, kad sistēmas komandas ir jāpalaiž pielāgotā kodā +PHPFunctionsRequiredForCLI=Apvalka vajadzībām (piemēram, ieplānota darba dublēšana vai anitivurs programmas palaišana) jums ir jāsaglabā PHP funkcijas +NoWritableFilesFoundIntoRootDir=Jūsu saknes direktorijā netika atrasti ierasto failu vai direktoriju kopējās programmas (labi) +RecommendedValueIs=Ieteicams: %s +NotRecommended=Nav ieteikts +ARestrictedPath=Ierobežots ceļš +CheckForModuleUpdate=Pārbaudiet, vai nav atjaunināti ārējie moduļi +CheckForModuleUpdateHelp=Šī darbība izveidos savienojumu ar ārējo moduļu redaktoriem, lai pārbaudītu, vai ir pieejama jauna versija. +ModuleUpdateAvailable=Ir pieejams atjauninājums +NoExternalModuleWithUpdate=Ārējiem moduļiem nav atrasti atjauninājumi +SwaggerDescriptionFile=Swagger API apraksta fails (piemēram, lietošanai ar pārorientēšanu) +YouEnableDeprecatedWSAPIsUseRESTAPIsInstead=Jūs iespējojāt novecojušu WS API. Tā vietā jums vajadzētu izmantot REST API. +RandomlySelectedIfSeveral=Nejauši izvēlēts, ja ir pieejami vairāki attēli +DatabasePasswordObfuscated=Datu bāzes parole ir neskaidra konf failā +DatabasePasswordNotObfuscated=Datu bāzes parole NAV apmulsināta conf failā +APIsAreNotEnabled=API moduļi nav iespējoti diff --git a/htdocs/langs/lv_LV/agenda.lang b/htdocs/langs/lv_LV/agenda.lang index f985c7f994e..d2525186222 100644 --- a/htdocs/langs/lv_LV/agenda.lang +++ b/htdocs/langs/lv_LV/agenda.lang @@ -4,7 +4,7 @@ Actions=Notikumi Agenda=Darba kārtība TMenuAgenda=Darba kārtība Agendas=Darba kārtības -LocalAgenda=Default calendar +LocalAgenda=Noklusējuma kalendārs ActionsOwnedBy=Notikums pieder ActionsOwnedByShort=Īpašnieks AffectedTo=Piešķirts @@ -20,7 +20,7 @@ MenuToDoActions=Visi nepabeigtie pasākumi MenuDoneActions=Visi izbeigtie notikumi MenuToDoMyActions=Mani nepabeigtie notikumi MenuDoneMyActions=Mani izbeigtie notikumi -ListOfEvents=List of events (default calendar) +ListOfEvents=Notikumu saraksts (noklusējuma kalendārs) ActionsAskedBy=Notikumu ziņoja ActionsToDoBy=Pasākums piešķirts ActionsDoneBy=Pasākumi, ko veikuši @@ -38,7 +38,7 @@ ActionsEvents=Pasākumi, par kuriem Dolibarr radīs prasību kārtībā automāt EventRemindersByEmailNotEnabled=Pasākumu atgādinājumi pa e-pastu netika iespējoti %s moduļa iestatījumos. ##### Agenda event labels ##### NewCompanyToDolibarr=Trešā puse izveidota %s -COMPANY_MODIFYInDolibarr=Third party %s modified +COMPANY_MODIFYInDolibarr=Trešā puse %s modificēta COMPANY_DELETEInDolibarr=Izdzēsta trešā persona %s ContractValidatedInDolibarr=Līgumi %s apstiprināti CONTRACT_DELETEInDolibarr=Līgums %s svītrots @@ -88,7 +88,7 @@ OrderDeleted=Pasūtījums dzēsts InvoiceDeleted=Rēķins dzēsts DraftInvoiceDeleted=Rēķina melnraksts ir izdzēsts CONTACT_CREATEInDolibarr=Kontaktpersona %s ir izveidota -CONTACT_MODIFYInDolibarr=Contact %s modified +CONTACT_MODIFYInDolibarr=Saziņa %s ir modificēta CONTACT_DELETEInDolibarr=Kontaktpersona %s ir izdzēsta PRODUCT_CREATEInDolibarr=Produkts %s ir izveidots PRODUCT_MODIFYInDolibarr=Produkts %s ir labots @@ -121,7 +121,7 @@ MRP_MO_UNVALIDATEInDolibarr=MO iestatīts uz melnraksta statusu MRP_MO_PRODUCEDInDolibarr=MO ražots MRP_MO_DELETEInDolibarr=MO ir izdzēsts MRP_MO_CANCELInDolibarr=MO atcelts -PAIDInDolibarr=%s paid +PAIDInDolibarr=%s samaksāts ##### End agenda events ##### AgendaModelModule=Dokumentu veidnes notikumam DateActionStart=Sākuma datums @@ -133,7 +133,7 @@ AgendaUrlOptions4=logint=%s to restrict output to actions assigned to use AgendaUrlOptionsProject= project = __ PROJECT_ID __ , lai ierobežotu izlaidi darbībām, kas saistītas ar projektu __ PROJECT_ID __ . AgendaUrlOptionsNotAutoEvent= notactiontype = systemauto , lai izslēgtu automātiskus notikumus. AgendaUrlOptionsIncludeHolidays=  includeholidays = 1 , lai iekļautu svētku pasākumus. -AgendaShowBirthdayEvents=Birthdays of contacts +AgendaShowBirthdayEvents=Kontaktu dzimšanas dienas AgendaHideBirthdayEvents=Slēpt kontaktu dzimšanas dienas Busy=Aizņemts ExportDataset_event1=Notikumu saraksts diff --git a/htdocs/langs/lv_LV/assets.lang b/htdocs/langs/lv_LV/assets.lang index 7779c6b5ec0..29583351333 100644 --- a/htdocs/langs/lv_LV/assets.lang +++ b/htdocs/langs/lv_LV/assets.lang @@ -22,7 +22,7 @@ AccountancyCodeAsset = Grāmatvedības kods (aktīvs) AccountancyCodeDepreciationAsset = Grāmatvedības kods (nolietojuma aktīvu konts) AccountancyCodeDepreciationExpense = Grāmatvedības kods (nolietojuma izmaksu konts) NewAssetType=Jauns aktīvu veids -AssetsTypeSetup=Aktīvu veidu iestatīšana +AssetsTypeSetup=Aktīvu veida iestatīšana AssetTypeModified=Pamatlīdzekļu veids pārveidots AssetType=Aktīva veids AssetsLines=Aktīvi @@ -42,7 +42,7 @@ ModuleAssetsDesc = Aktīvu apraksts AssetsSetup = Aktīvu uzstādīšana Settings = Iestatījumi AssetsSetupPage = Aktīvu iestatīšanas lapa -ExtraFieldsAssetsType = Papildu atribūti (Assets type) +ExtraFieldsAssetsType = Papildu atribūti (aktīvu veids) AssetsType=Aktīva veids AssetsTypeId=Aktīva veida id AssetsTypeLabel=Aktīva veida nosaukums @@ -55,5 +55,13 @@ MenuAssets = Aktīvi MenuNewAsset = Jauns aktīvs MenuTypeAssets = Ierakstiet aktīvus MenuListAssets = Saraksts -MenuNewTypeAssets = Jauns veids +MenuNewTypeAssets = Jauns MenuListTypeAssets = Saraksts + +# +# Module +# +Asset=Aktīvs +NewAssetType=Jauns aktīvu veids +NewAsset=Jauns aktīvs +ConfirmDeleteAsset=Vai tiešām vēlaties dzēst šo īpašumu? diff --git a/htdocs/langs/lv_LV/banks.lang b/htdocs/langs/lv_LV/banks.lang index 7fefb3ed206..ca4bcbbb463 100644 --- a/htdocs/langs/lv_LV/banks.lang +++ b/htdocs/langs/lv_LV/banks.lang @@ -109,13 +109,13 @@ SocialContributionPayment=Sociālā/fiskālā nodokļa samaksa BankTransfer=Kredīta pārvedums BankTransfers=Kredīta pārvedumi MenuBankInternalTransfer=Iekšējā pārsūtīšana -TransferDesc=Use internal transfer to transfer from one account to another, the application will write two records: a debit in the source account and a credit in the target account. The same amount, label and date will be used for this transaction. +TransferDesc=Izmantojiet iekšējo pārskaitījumu, lai pārsūtītu no viena konta uz citu, lietojumprogramma ierakstīs divus ierakstus: debets avota kontā un kredīts mērķa kontā. Šim darījumam tiks izmantota tā pati summa, etiķete un datums. TransferFrom=No TransferTo=Kam TransferFromToDone=No %s nodošana %s par %s %s ir ierakstīta. CheckTransmitter=Nosūtītājs ValidateCheckReceipt=Vai apstiprināt šo čeku? -ConfirmValidateCheckReceipt=Are you sure that you want to submit this check receipt for validation? No changes are possible it's done. +ConfirmValidateCheckReceipt=Vai tiešām vēlaties iesniegt šo čeku apstiprināšanai? Tas nav izdarīts. DeleteCheckReceipt=Dzēst šo čeku? ConfirmDeleteCheckReceipt=Vai tiešām vēlaties dzēst šo čeka kvīti? BankChecks=Bankas čeki @@ -128,7 +128,7 @@ ConfirmDeleteTransaction=Vai tiešām vēlaties dzēst šo ierakstu? ThisWillAlsoDeleteBankRecord=Tas arī izdzēš izveidotos bankas darījumus BankMovements=Kustība PlannedTransactions=Plānotie darījumi -Graph=Graphs +Graph=Grafiki ExportDataset_banque_1=Banku darījumi un konta izraksts ExportDataset_banque_2=Depozīta kvīts TransactionOnTheOtherAccount=Pārskaitījums uz otru kontu @@ -142,7 +142,7 @@ AllAccounts=Visi bankas un naudas konti BackToAccount=Atpakaļ uz kontu ShowAllAccounts=Parādīt visiem kontiem FutureTransaction=Nākotnes darījums. Nevar saskaņot. -SelectChequeTransactionAndGenerate=Select/filter the checks which are to be included in the check deposit receipt. Then, click on "Create". +SelectChequeTransactionAndGenerate=Atlasiet / filtrējiet čekus, kas jāiekļauj čeku depozīta kvītī. Pēc tam noklikšķiniet uz "Izveidot". InputReceiptNumber=Choose the bank statement related with the conciliation. Use a sortable numeric value: YYYYMM or YYYYMMDD EventualyAddCategory=Galu galā, norādiet kategoriju, kurā klasificēt ierakstus ToConciliate=Saskaņot? @@ -174,11 +174,11 @@ YourSEPAMandate=Jūsu SEPA mandāts FindYourSEPAMandate=Tas ir jūsu SEPA mandāts, lai pilnvarotu mūsu uzņēmumu veikt tiešā debeta pasūtījumu savai bankai. Atgriezt to parakstu (skenēt parakstīto dokumentu) vai nosūtīt pa pastu uz AutoReportLastAccountStatement=Veicot saskaņošanu, automātiski aizpildiet lauka “bankas izraksta numurs” ar pēdējo izraksta numuru CashControl=POS kases kontrole -NewCashFence=New cash desk opening or closing +NewCashFence=Jaunas kases atvēršana vai aizvēršana BankColorizeMovement=Krāsojiet kustības BankColorizeMovementDesc=Ja šī funkcija ir iespējota, jūs varat izvēlēties īpašu fona krāsu debeta vai kredīta pārvietošanai BankColorizeMovementName1=Debeta kustības fona krāsa BankColorizeMovementName2=Kredīta aprites fona krāsa IfYouDontReconcileDisableProperty=Ja dažos bankas kontos neveicat bankas saskaņošanu, atspējojiet rekvizītu "%s", lai noņemtu šo brīdinājumu. NoBankAccountDefined=Nav noteikts bankas konts -NoRecordFoundIBankcAccount=No record found in bank account. Commonly, this occurs when a record has been deleted manually from the list of transaction in the bank account (for example during a reconciliation of the bank account). Another reason is that the payment was recorded when the module "%s" was disabled. +NoRecordFoundIBankcAccount=Bankas kontā nav atrasts neviens ieraksts. Parasti tas notiek, ja ieraksts ir manuāli izdzēsts no bankas konta darījumu saraksta (piemēram, bankas konta saskaņošanas laikā). Vēl viens iemesls ir tas, ka maksājums tika reģistrēts, kad tika atspējots modulis "%s". diff --git a/htdocs/langs/lv_LV/bills.lang b/htdocs/langs/lv_LV/bills.lang index 90ad7a9ad47..e5220e44b61 100644 --- a/htdocs/langs/lv_LV/bills.lang +++ b/htdocs/langs/lv_LV/bills.lang @@ -55,7 +55,7 @@ CustomerInvoice=Klienta rēķins CustomersInvoices=Klienta rēķini SupplierInvoice=Piegādātāja rēķins SuppliersInvoices=Piegādātāja rēķini -SupplierInvoiceLines=Vendor invoice lines +SupplierInvoiceLines=Pārdevēja rēķina rindas SupplierBill=Piegādātāja rēķins SupplierBills=Piegādātāja rēķini Payment=Maksājums @@ -82,8 +82,8 @@ PaymentsAlreadyDone=Jau samaksāts PaymentsBackAlreadyDone=Jau veiktas atmaksas PaymentRule=Maksājuma noteikums PaymentMode=Maksājuma veids -DefaultPaymentMode=Default Payment Type -DefaultBankAccount=Default Bank Account +DefaultPaymentMode=Noklusējuma maksājuma veids +DefaultBankAccount=Noklusējuma bankas konts PaymentTypeDC=Debet karte/ kredīt karte PaymentTypePP=PayPal IdPaymentMode=Maksājuma veids (id) @@ -120,7 +120,7 @@ ConvertExcessPaidToReduc=Konvertēt pārsniegto summu par atlaidi EnterPaymentReceivedFromCustomer=Ievadiet no klienta saņemto naudas summu EnterPaymentDueToCustomer=Veikt maksājumu dēļ klientam DisabledBecauseRemainderToPayIsZero=Disabled because remaining unpaid is zero -PriceBase=Base price +PriceBase=Bāzes cena BillStatus=Rēķina statuss StatusOfGeneratedInvoices=Izveidoto rēķinu statuss BillStatusDraft=Melnraksts (jāapstiprina) @@ -259,7 +259,7 @@ DateMaxPayment=Jāapmaksā līdz DateInvoice=Rēķina datums DatePointOfTax=Nodokļu punkts NoInvoice=Nav rēķinu -NoOpenInvoice=No open invoice +NoOpenInvoice=Nav atvērta rēķina ClassifyBill=Klasificēt rēķinu SupplierBillsToPay=Neapmaksāti pārdevēja rēķini CustomerBillsUnpaid=Neapmaksātie klienta rēķini @@ -377,7 +377,7 @@ DateLastGeneration=Jaunākais veidošanas datums DateLastGenerationShort=Datuma pēdējais gen. MaxPeriodNumber=Maks. rēķinu veidošanas skaits NbOfGenerationDone=Rēķina paaudzes skaits jau ir pabeigts -NbOfGenerationOfRecordDone=Number of record generation already done +NbOfGenerationOfRecordDone=Jau veikto ierakstu ģenerēšanas skaits NbOfGenerationDoneShort=Veicamās paaudzes skaits MaxGenerationReached=Maksimālais sasniegto paaudžu skaits InvoiceAutoValidate=Rēķinus automātiski apstiprināt @@ -418,7 +418,7 @@ PaymentCondition14DENDMONTH=14 dienu laikā pēc mēneša beigām FixAmount=Fiksēta summa - 1 rinda ar etiķeti '%s' VarAmount=Mainīgais apjoms (%% kop.) VarAmountOneLine=Mainīgā summa (%% kopā) - 1 rinda ar etiķeti '%s' -VarAmountAllLines=Variable amount (%% tot.) - all lines from origin +VarAmountAllLines=Mainīga summa (%% tot.) - visas līnijas no sākuma # PaymentType PaymentTypeVIR=Bankas pārskaitījums PaymentTypeShortVIR=Bankas pārskaitījums @@ -455,7 +455,7 @@ RegulatedOn=Regulēta uz ChequeNumber=Pārbaudiet N ° ChequeOrTransferNumber=Pārbaudiet / Transfer N ° ChequeBordereau=Pārbaudīt grafiku -ChequeMaker=Check/Transfer sender +ChequeMaker=Pārbaudīt / pārsūtīt sūtītāju ChequeBank=Čeka izsniegšanas banka CheckBank=Čeks NetToBePaid=Neto jāmaksā @@ -499,16 +499,16 @@ Cash=Skaidra nauda Reported=Kavējas DisabledBecausePayments=Nav iespējams, kopš šeit ir daži no maksājumiem CantRemovePaymentWithOneInvoicePaid=Nevar dzēst maksājumu, jo eksistē kaut viens rēķins, kas klasificēts kā samaksāts -CantRemovePaymentVATPaid=Can't remove payment since VAT declaration is classified paid -CantRemovePaymentSalaryPaid=Can't remove payment since salary is classified paid +CantRemovePaymentVATPaid=Nevar noņemt maksājumu, jo PVN deklarācija ir klasificēta kā apmaksāta +CantRemovePaymentSalaryPaid=Nevar noņemt maksājumu, jo alga ir klasificēta kā samaksāta ExpectedToPay=Gaidāmais maksājums CantRemoveConciliatedPayment=Nevar noņemt saskaņoto maksājumu PayedByThisPayment=Samaksāts ar šo maksājumu ClosePaidInvoicesAutomatically=Automātiski klasificējiet visus standarta, priekšapmaksas vai rezerves rēķinus kā “Apmaksāts”, ja maksājums ir pilnībā veikts. ClosePaidCreditNotesAutomatically=Automātiski klasificējiet visas kredītzīmes kā "Apmaksātu", kad atmaksa tiek veikta pilnībā. ClosePaidContributionsAutomatically=Automātiski klasificējiet visas sociālās vai fiskālās iemaksas kā "Apmaksātās", ja maksājums tiek veikts pilnībā. -ClosePaidVATAutomatically=Classify automatically VAT declaration as "Paid" when payment is done entirely. -ClosePaidSalaryAutomatically=Classify automatically salary as "Paid" when payment is done entirely. +ClosePaidVATAutomatically=Ja maksājums tiek veikts pilnībā, automātiski klasificējiet PVN deklarāciju kā “Apmaksāts”. +ClosePaidSalaryAutomatically=Ja maksājums tiek veikts pilnībā, klasificējiet algu automātiski kā “Maksātu”. AllCompletelyPayedInvoiceWillBeClosed=Visi rēķini, kuriem nav jāmaksā, tiks automātiski aizvērti ar statusu "Paid". ToMakePayment=Maksāt ToMakePaymentBack=Atmaksāt @@ -521,10 +521,10 @@ YouMustCreateStandardInvoiceFirstDesc=Vispirms vispirms jāizveido standarta rē PDFCrabeDescription=Rēķina PDF veidne Krabis. Pilna rēķina veidne (vecā Sponge veidnes ieviešana) PDFSpongeDescription=Rēķina PDF veidne Sponge. Pilnīga rēķina veidne PDFCrevetteDescription=Rēķina PDF veidne Crevette. Pabeigta rēķina veidne situāciju rēķiniem -TerreNumRefModelDesc1=Return number in the format %syymm-nnnn for standard invoices and %syymm-nnnn for credit notes where yy is year, mm is month and nnnn is a sequencial auto-incrementing number with no break and no return to 0 -MarsNumRefModelDesc1=Return number in the format %syymm-nnnn for standard invoices, %syymm-nnnn for replacement invoices, %syymm-nnnn for down payment invoices and %syymm-nnnn for credit notes where yy is year, mm is month and nnnn is a sequencial auto-incrementing number with no break and no return to 0 +TerreNumRefModelDesc1=Atgriešanās numurs formātā %syymm-nnnn standarta rēķiniem un %syymm-nnnn kredītzīmēm, kur yy ir gads, mm ir mēnesis, un nnnn ir secīgs automātiski palielināms skaitlis bez pārtraukuma un bez atgriešanās pie 0 +MarsNumRefModelDesc1=Atgriešanas numurs formātā %syymm-nnnn standarta rēķiniem, %syymm-nnnn aizstājējrēķiniem, %syymm-nnnn priekšapmaksas rēķiniem un %syymn-nnnn ir bez pārtraukuma un bez atgriešanās pie 0 TerreNumRefModelError=Rēķinu sākot ar syymm $ jau pastāv un nav saderīgs ar šo modeli secību. Noņemt to vai pārdēvēt to aktivizētu šo moduli. -CactusNumRefModelDesc1=Return number in the format %syymm-nnnn for standard invoices, %syymm-nnnn for credit notes and %syymm-nnnn for down payment invoices where yy is year, mm is month and nnnn is a sequencial auto-incrementing number with no break and no return to 0 +CactusNumRefModelDesc1=Atgriešanās numurs formātā %syymm-nnnn standarta rēķiniem, %syymm-nnnn kredītzīmēm un %syymm-nnnn priekšapmaksas rēķiniem, kur yy ir gads, mm ir mēnesis, un nnnn nav secīgs automātiskais pārtraukums. 0 EarlyClosingReason=Priekšlaicīgas slēgšanas iemesls EarlyClosingComment=Priekšlaicīgās slēgšanas piezīme ##### Types de contacts ##### @@ -590,4 +590,4 @@ FacParentLine=Rēķinu rindas vecāks SituationTotalRayToRest=Atlikušais maksājums bez nodokļa PDFSituationTitle=Situācija Nr. %d SituationTotalProgress=Kopējais progress %d %% -SearchUnpaidInvoicesWithDueDate=Search unpaid invoices with a due date = %s +SearchUnpaidInvoicesWithDueDate=Meklēt neapmaksātos rēķinos ar termiņu = %s diff --git a/htdocs/langs/lv_LV/blockedlog.lang b/htdocs/langs/lv_LV/blockedlog.lang index 3318d1d334c..79ac073bbad 100644 --- a/htdocs/langs/lv_LV/blockedlog.lang +++ b/htdocs/langs/lv_LV/blockedlog.lang @@ -8,7 +8,7 @@ BrowseBlockedLog=Nepārveidojami žurnāli ShowAllFingerPrintsMightBeTooLong=Rādīt visus arhivētos žurnālus (var būt daudz) ShowAllFingerPrintsErrorsMightBeTooLong=Rādīt visus nederīgos arhīva žurnālus (var būt garš) DownloadBlockChain=Lejupielādējiet pirkstu nospiedumus -KoCheckFingerprintValidity=Arhivēts žurnāla ieraksts nav derīgs. Tas nozīmē, ka kāds (hakeris?) Ir mainījis dažus šī ieraksta datus pēc tā ierakstīšanas vai ir izdzēsis iepriekšējo arhivēto ierakstu (pārbaudiet, vai pastāv līnija ar iepriekšējo #). +KoCheckFingerprintValidity=Arhivētais žurnāla ieraksts nav derīgs. Tas nozīmē, ka kāds (hakeris?) Ir pārveidojis dažus šī ieraksta datus pēc to ierakstīšanas, vai ir izdzēsis iepriekšējo arhivēto ierakstu (pārbaudiet, vai pastāv rinda ar iepriekšējo #) vai ir mainījusi iepriekšējā ieraksta kontrolsummu. OkCheckFingerprintValidity=Arhivēts žurnāla ieraksts ir derīgs. Dati par šo līniju netika mainīti un ieraksts seko iepriekšējam. OkCheckFingerprintValidityButChainIsKo=Arhivētais žurnāls šķiet derīgs salīdzinājumā ar iepriekšējo, bet ķēde agrāk tika bojāta. AddedByAuthority=Uzglabāti tālvadības iestādē @@ -35,7 +35,7 @@ logDON_DELETE=Ziedojuma loģiska dzēšana logMEMBER_SUBSCRIPTION_CREATE=Dalībnieka abonements izveidots logMEMBER_SUBSCRIPTION_MODIFY=Dalībnieku abonēšana ir labota logMEMBER_SUBSCRIPTION_DELETE=Locekļu abonēšanas loģiskā dzēšana -logCASHCONTROL_VALIDATE=Cash desk closing recording +logCASHCONTROL_VALIDATE=Kases slēgšanas ieraksts BlockedLogBillDownload=Klientu rēķinu lejupielāde BlockedLogBillPreview=Klienta rēķina priekšskatījums BlockedlogInfoDialog=Žurnāla detaļas diff --git a/htdocs/langs/lv_LV/boxes.lang b/htdocs/langs/lv_LV/boxes.lang index e861854a92e..bc76a9b79d3 100644 --- a/htdocs/langs/lv_LV/boxes.lang +++ b/htdocs/langs/lv_LV/boxes.lang @@ -18,13 +18,13 @@ BoxLastActions=Jaunākās darbības BoxLastContracts=Jaunākie līgumi BoxLastContacts=Jaunākie kontakti/adreses BoxLastMembers=Jaunākie dalībnieki -BoxLastModifiedMembers=Latest modified members -BoxLastMembersSubscriptions=Latest member subscriptions +BoxLastModifiedMembers=Jaunākie modificētie dalībnieki +BoxLastMembersSubscriptions=Jaunākie dalībnieku abonementi BoxFicheInter=Jaunākās intervences BoxCurrentAccounts=Atvērto kontu atlikums BoxTitleMemberNextBirthdays=Šī mēneša dzimšanas dienas (dalībnieki) -BoxTitleMembersByType=Members by type -BoxTitleMembersSubscriptionsByYear=Members Subscriptions by year +BoxTitleMembersByType=Locekļi pēc veida +BoxTitleMembersSubscriptionsByYear=Dalībnieku abonēšana pēc gada BoxTitleLastRssInfos=Jaunākās %s ziņas no %s BoxTitleLastProducts=Produkti / Pakalpojumi: pēdējais %s modificēts BoxTitleProductsAlertStock=Produkti: krājumu brīdinājums @@ -46,11 +46,11 @@ BoxMyLastBookmarks=Grāmatzīmes: jaunākās %s BoxOldestExpiredServices=Vecākais aktīvais beidzies pakalpojums BoxLastExpiredServices=Jaunākie %s vecākie kontakti ar aktīviem derīguma termiņa beigām BoxTitleLastActionsToDo=Jaunākās %s darbības, ko darīt -BoxTitleLastContracts=Latest %s contracts which were modified -BoxTitleLastModifiedDonations=Latest %s donations which were modified -BoxTitleLastModifiedExpenses=Latest %s expense reports which were modified -BoxTitleLatestModifiedBoms=Latest %s BOMs which were modified -BoxTitleLatestModifiedMos=Latest %s Manufacturing Orders which were modified +BoxTitleLastContracts=Jaunākie %s līgumi, kas tika mainīti +BoxTitleLastModifiedDonations=Jaunākie %s ziedojumi, kas tika mainīti +BoxTitleLastModifiedExpenses=Jaunākie %s izdevumu pārskati, kas tika mainīti +BoxTitleLatestModifiedBoms=Jaunākās %s moduļi +BoxTitleLatestModifiedMos=Jaunākie %s ražošanas pasūtījumi, kas tika mainīti BoxTitleLastOutstandingBillReached=Pārsniegti klienti ar maksimālo nesamaksāto summu BoxGlobalActivity=Global darbība (pavadzīmes, priekšlikumi, rīkojumi) BoxGoodCustomers=Labi klienti @@ -112,9 +112,9 @@ BoxTitleLastCustomerShipments=Jaunākie %s klientu sūtījumi NoRecordedShipments=Nav reģistrēts klienta sūtījums BoxCustomersOutstandingBillReached=Ir sasniegti klienti ar ierobežojumu # Pages -UsersHome=Home users and groups -MembersHome=Home Membership -ThirdpartiesHome=Home Thirdparties -TicketsHome=Home Tickets -AccountancyHome=Home Accountancy +UsersHome=Mājas lietotāji un grupas +MembersHome=Dalība mājās +ThirdpartiesHome=Mājas trešās puses +TicketsHome=Mājas biļetes +AccountancyHome=Mājas grāmatvedība ValidatedProjects=Apstiprināti projekti diff --git a/htdocs/langs/lv_LV/cashdesk.lang b/htdocs/langs/lv_LV/cashdesk.lang index bedf85060f9..fa44b524a1d 100644 --- a/htdocs/langs/lv_LV/cashdesk.lang +++ b/htdocs/langs/lv_LV/cashdesk.lang @@ -41,8 +41,8 @@ Floor=Stāvs AddTable=Pievienot tabulu Place=Vieta TakeposConnectorNecesary=Ir nepieciešams "TakePOS Connector" -OrderPrinters=Add a button to send the order to some given printers, without payment (for example to send an order to a kitchen) -NotAvailableWithBrowserPrinter=Not available when printer for receipt is set to browser: +OrderPrinters=Pievienojiet pogu, lai pasūtījumu nosūtītu dažiem norādītajiem printeriem bez maksas (piemēram, lai nosūtītu pasūtījumu uz virtuvi) +NotAvailableWithBrowserPrinter=Nav pieejams, ja printeris saņemšanai ir iestatīts uz pārlūku: SearchProduct=Meklēt produktu Receipt=Saņemšana Header=Galvene @@ -57,9 +57,9 @@ Paymentnumpad=Padeves veids maksājuma ievadīšanai Numberspad=Numbers Pad BillsCoinsPad=Monētas un banknotes DolistorePosCategory=TakePOS moduļi un citi POS risinājumi Dolibarr -TakeposNeedsCategories=TakePOS needs at least one product categorie to work -TakeposNeedsAtLeastOnSubCategoryIntoParentCategory=TakePOS needs at least 1 product category under the category %s to work -OrderNotes=Can add some notes to each ordered items +TakeposNeedsCategories=Lai darbotos, TakePOS ir nepieciešama vismaz viena produktu kategorija +TakeposNeedsAtLeastOnSubCategoryIntoParentCategory=Lai darbotos, TakePOS nepieciešama vismaz viena produktu kategorija kategorijā %s +OrderNotes=Var pievienot dažas piezīmes katram pasūtītajam priekšmetam CashDeskBankAccountFor=Noklusējuma konts, ko izmantot maksājumiem NoPaimementModesDefined=TakePOS konfigurācijā nav definēts paiment režīms TicketVatGrouped=Grupējiet PVN pēc likmes biļetēs | kvītis @@ -84,7 +84,7 @@ InvoiceIsAlreadyValidated=Rēķins jau ir apstiprināts NoLinesToBill=Nav rēķinu CustomReceipt=Pielāgota kvīts ReceiptName=Kvīts nosaukums -ProductSupplements=Manage supplements of products +ProductSupplements=Pārvaldiet produktu papildinājumus SupplementCategory=Papildinājuma kategorija ColorTheme=Krāsu tēma Colorful=Krāsains @@ -94,7 +94,7 @@ Browser=Pārlūkprogramma BrowserMethodDescription=Vienkārša un ērta kvīts drukāšana. Tikai daži parametri, lai konfigurētu kvīti. Drukājiet, izmantojot pārlūku. TakeposConnectorMethodDescription=Ārējs modulis ar papildu funkcijām. Iespēja drukāt no mākoņa. PrintMethod=Drukas metode -ReceiptPrinterMethodDescription=Powerful method with a lot of parameters. Full customizable with templates. The server hosting the application can't be in the Cloud (must be able to reach the printers in your network). +ReceiptPrinterMethodDescription=Jaudīga metode ar daudziem parametriem. Pilnībā pielāgojams ar veidnēm. Serveris, kurā mitinās lietojumprogramma, nevar atrasties mākonī (tam jāspēj sasniegt jūsu tīkla printerus). ByTerminal=Ar termināli TakeposNumpadUsePaymentIcon=Izmantojiet ikonu, nevis tekstu uz numpad numura maksāšanas pogām CashDeskRefNumberingModules=Numerācijas modulis tirdzniecības vietu tirdzniecībai @@ -102,7 +102,7 @@ CashDeskGenericMaskCodes6 =  
{TN} tagu izmanto, lai pievienotu te TakeposGroupSameProduct=Grupējiet tās pašas produktu līnijas StartAParallelSale=Sāciet jaunu paralēlu izpārdošanu SaleStartedAt=Pārdošana sākās vietnē %s -ControlCashOpening=Open the "Control cash" popup when opening the POS +ControlCashOpening=Atverot POS, atveriet uznirstošo logu “Kontrolēt skaidru naudu” CloseCashFence=Aizveriet kases kontroli CashReport=Skaidras naudas pārskats MainPrinterToUse=Galvenais izmantojamais printeris @@ -126,5 +126,5 @@ ModuleReceiptPrinterMustBeEnabled=Vispirms jābūt iespējotam moduļa saņemša AllowDelayedPayment=Atļaut kavētu maksājumu PrintPaymentMethodOnReceipts=Izdrukājiet maksājuma veidu uz biļetēm | WeighingScale=Svari -ShowPriceHT = Display the column with the price excluding tax (on screen) -ShowPriceHTOnReceipt = Display the column with the price excluding tax (on receipt) +ShowPriceHT = Parādīt kolonnu ar cenu bez nodokļiem (ekrānā) +ShowPriceHTOnReceipt = Parādīt kolonnu ar cenu bez nodokļiem (saņemot) diff --git a/htdocs/langs/lv_LV/categories.lang b/htdocs/langs/lv_LV/categories.lang index 9be0e84b700..17b9a57000f 100644 --- a/htdocs/langs/lv_LV/categories.lang +++ b/htdocs/langs/lv_LV/categories.lang @@ -3,20 +3,20 @@ Rubrique=Etiķete/Sadaļa Rubriques=Etiķetes/Sadaļas RubriquesTransactions=Tags/Categories of transactions categories=etiķetes/sadaļas -NoCategoryYet=No tag/category of this type has been created +NoCategoryYet=Šāda veida tags / kategorija nav izveidota In=Uz AddIn=Pievienot modify=modificēt Classify=Klasificēt CategoriesArea=Etiķešu/Sadaļu sadaļa -ProductsCategoriesArea=Product/Service tags/categories area -SuppliersCategoriesArea=Vendor tags/categories area -CustomersCategoriesArea=Customer tags/categories area -MembersCategoriesArea=Member tags/categories area -ContactsCategoriesArea=Contact tags/categories area -AccountsCategoriesArea=Bank account tags/categories area -ProjectsCategoriesArea=Project tags/categories area -UsersCategoriesArea=User tags/categories area +ProductsCategoriesArea=Produktu / pakalpojumu tagu / kategoriju apgabals +SuppliersCategoriesArea=Pārdevēja tagu / kategoriju apgabals +CustomersCategoriesArea=Klientu tagu / kategoriju apgabals +MembersCategoriesArea=Dalībnieku tagu / kategoriju apgabals +ContactsCategoriesArea=Kontaktu tagu / kategoriju apgabals +AccountsCategoriesArea=Bankas kontu tagi / kategoriju apgabals +ProjectsCategoriesArea=Projekta tagu / kategoriju apgabals +UsersCategoriesArea=Lietotāju tagu / kategoriju apgabals SubCats=Apakšsadaļas CatList=Atslēgvārdu/sadaļu saraksts CatListAll=Tagu / kategoriju saraksts (visi veidi) @@ -93,7 +93,7 @@ AddSupplierIntoCategory=Piešķirt kategoriju piegādātājam ShowCategory=Show tag/category ByDefaultInList=By default in list ChooseCategory=Izvēlies sadaļu -StocksCategoriesArea=Warehouse Categories -ActionCommCategoriesArea=Event Categories +StocksCategoriesArea=Noliktavas kategorijas +ActionCommCategoriesArea=Pasākumu kategorijas WebsitePagesCategoriesArea=Lapu konteineru kategorijas -UseOrOperatorForCategories=Use 'OR' operator for categories +UseOrOperatorForCategories=Kategorijām izmantojiet operatoru “OR” diff --git a/htdocs/langs/lv_LV/commercial.lang b/htdocs/langs/lv_LV/commercial.lang index 294d6b7c321..2a5b51abed4 100644 --- a/htdocs/langs/lv_LV/commercial.lang +++ b/htdocs/langs/lv_LV/commercial.lang @@ -64,10 +64,11 @@ ActionAC_SHIP=Nosūtīt piegādi pa pastu ActionAC_SUP_ORD=Nosūtiet pirkumu pa pastu ActionAC_SUP_INV=Nosūtiet pārdevēju rēķinu pa pastu ActionAC_OTH=Cits -ActionAC_OTH_AUTO=Automātiski ievietoti notikumi +ActionAC_OTH_AUTO=Cits auto ActionAC_MANUAL=Manuāli ievietoti notikumi ActionAC_AUTO=Automātiski ievietoti notikumi -ActionAC_OTH_AUTOShort=Auto +ActionAC_OTH_AUTOShort=Cits +ActionAC_EVENTORGANIZATION=Pasākumu organizēšanas pasākumi Stats=Tirdzniecības statistika StatusProsp=Prospekta statuss DraftPropals=Izstrādā komerciālos priekšlikumus diff --git a/htdocs/langs/lv_LV/companies.lang b/htdocs/langs/lv_LV/companies.lang index f9471964586..046527ed90e 100644 --- a/htdocs/langs/lv_LV/companies.lang +++ b/htdocs/langs/lv_LV/companies.lang @@ -2,9 +2,9 @@ ErrorCompanyNameAlreadyExists=Uzņēmuma nosaukums %s jau pastāv. Izvēlieties citu. ErrorSetACountryFirst=Izvēlieties vispirms valsti SelectThirdParty=Izvēlieties trešo pusi -ConfirmDeleteCompany=Are you sure you want to delete this company and all related information? +ConfirmDeleteCompany=Vai tiešām vēlaties dzēst šo uzņēmumu un visu saistīto informāciju? DeleteContact=Izdzēst kontaktu / adresi -ConfirmDeleteContact=Are you sure you want to delete this contact and all related information? +ConfirmDeleteContact=Vai tiešām vēlaties dzēst šo kontaktpersonu un visu saistīto informāciju? MenuNewThirdParty=Jauna trešā persona MenuNewCustomer=Jauns klients MenuNewProspect=Jauns prospekts @@ -43,10 +43,10 @@ Individual=Privātpersona ToCreateContactWithSameName=Automātiski izveidos kontaktu / adresi ar tādu pašu informāciju kā trešā persona trešās puses ietvaros. Vairumā gadījumu pat tad, ja jūsu trešā persona ir fiziska persona, pietiek ar trešās personas izveidošanu vien. ParentCompany=Mātes uzņēmums Subsidiaries=Filiāles -ReportByMonth=Report per month -ReportByCustomers=Report per customer -ReportByThirdparties=Report per thirdparty -ReportByQuarter=Report per rate +ReportByMonth=Pārskats mēnesī +ReportByCustomers=Pārskats par katru klientu +ReportByThirdparties=Ziņojums par katru trešo personu +ReportByQuarter=Ziņot par likmi CivilityCode=Pieklājība kods RegisteredOffice=Juridiskā adrese Lastname=Uzvārds @@ -69,7 +69,7 @@ PhoneShort=Telefons Skype=Skype Call=Zvanīt Chat=Čats -PhonePro=Bus. phone +PhonePro=Autobuss. tālruni PhonePerso=Pers. telefons PhoneMobile=Mobilais No_Email=Atteikties no lielapjoma pasta sūtījumiem @@ -173,17 +173,17 @@ ProfId1ES=Prof ID 1 (CIF / NIF) ProfId2ES=Prof Id 2 (Sociālās apdrošināšanas numurs) ProfId3ES=Prof Id 3 (CNAE) ProfId4ES=Prof Id 4 (Collegiate numurs) -ProfId5ES=Prof Id 5 (EORI number) +ProfId5ES=Prof Id 5 (EORI numurs) ProfId6ES=- ProfId1FR=Prof ID 1 (Sirēnas) ProfId2FR=Prof Id 2 (SIRET) ProfId3FR=Prof Id 3 (NBS, vecais APE) ProfId4FR=Prof Id 4 (RCS / RM) -ProfId5FR=Prof Id 5 (numéro EORI) +ProfId5FR=Prof Id 5 (numoro EORI) ProfId6FR=- ProfId1ShortFR=SIREN ProfId2ShortFR=SIRET -ProfId3ShortFR=NAF +ProfId3ShortFR=NBS ProfId4ShortFR=RCS ProfId5ShortFR=EORI ProfId6ShortFR=- @@ -239,7 +239,7 @@ ProfId1PT=Prof ID 1 (NIPC) ProfId2PT=Prof Id 2 (Sociālās apdrošināšanas numurs) ProfId3PT=Prof Id 3 (Tirdzniecības Ieraksta numurs) ProfId4PT=Prof Id 4 (konservatorija) -ProfId5PT=Prof Id 5 (EORI number) +ProfId5PT=Prof Id 5 (EORI numurs) ProfId6PT=- ProfId1SN=RC ProfId2SN=NINEA @@ -263,7 +263,7 @@ ProfId1RO=1. prof. ID (CUI) ProfId2RO=Prof Id 2 (Nr. Manmatriculare) ProfId3RO=3. profils (CAEN) ProfId4RO=Prof Id 5 (EUID) -ProfId5RO=Prof Id 5 (EORI number) +ProfId5RO=Prof Id 5 (EORI numurs) ProfId6RO=- ProfId1RU=Prof ID 1 (BIN) ProfId2RU=Prof Id 2 (INN) @@ -331,7 +331,7 @@ CustomerCodeDesc=Klienta kods, unikāls visiem klientiem SupplierCodeDesc=Pārdevēja kods, unikāls visiem pārdevējiem RequiredIfCustomer=Nepieciešams, ja trešā puse ir klients vai perspektīva RequiredIfSupplier=Nepieciešams, ja trešā puse ir pārdevējs -ValidityControledByModule=Validity controlled by the module +ValidityControledByModule=Derīgumu kontrolē modulis ThisIsModuleRules=Noteikumi šim modulim ProspectToContact=Perspektīva ar ko sazināties CompanyDeleted=Kompānija "%s" dzēsta no datubāzes. @@ -439,22 +439,22 @@ ListSuppliersShort=Pārdevēju saraksts ListProspectsShort=Perspektīvu saraksts ListCustomersShort=Klientu saraksts ThirdPartiesArea=Trešās puses/Kontakti -LastModifiedThirdParties=Latest %s Third Parties which were modified -UniqueThirdParties=Total number of Third Parties +LastModifiedThirdParties=Jaunākās %s Trešās puses, kas tika modificētas +UniqueThirdParties=Kopējais trešo personu skaits InActivity=Atvērts ActivityCeased=Slēgts ThirdPartyIsClosed=Trešā persona ir slēgta -ProductsIntoElements=List of products/services mapped to %s +ProductsIntoElements=Produktu / pakalpojumu saraksts, kas kartēti ar %s CurrentOutstandingBill=Current outstanding bill OutstandingBill=Maks. par izcilu rēķinu OutstandingBillReached=Maks. par izcilu rēķinu OrderMinAmount=Minimālā pasūtījuma summa -MonkeyNumRefModelDesc=Return a number in the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequencial auto-incrementing number with no break and no return to 0. +MonkeyNumRefModelDesc=Klienta kodam atgrieziet skaitli formātā %syymm-nnnn un pārdevēja kodam %syymm-nnnn, kur yy ir gads, mm ir mēnesis, un nnnn ir secīgs automātiskās pieauguma skaitlis bez pārtraukuma un bez atgriešanās uz 0. LeopardNumRefModelDesc=Kods ir bez maksas. Šo kodu var mainīt jebkurā laikā. ManagingDirectors=Menedžera(u) vārds (CEO, direktors, prezidents...) MergeOriginThirdparty=Duplicate third party (third party you want to delete) MergeThirdparties=Apvienot trešās puses -ConfirmMergeThirdparties=Are you sure you want to merge the chosen third party with the current one? All linked objects (invoices, orders, ...) will be moved to the current third party, after which the chosen third party will be deleted. +ConfirmMergeThirdparties=Vai tiešām vēlaties apvienot izvēlēto trešo pusi ar pašreizējo? Visi saistītie objekti (rēķini, pasūtījumi, ...) tiks pārvietoti uz pašreizējo trešo pusi, pēc tam izvēlētā trešā puse tiks izdzēsta. ThirdpartiesMergeSuccess=Trešās puses ir apvienotas SaleRepresentativeLogin=Tirdzniecības pārstāvja pieteikšanās SaleRepresentativeFirstname=Tirdzniecības pārstāvja vārds diff --git a/htdocs/langs/lv_LV/compta.lang b/htdocs/langs/lv_LV/compta.lang index 9e153347a87..28483b81d2f 100644 --- a/htdocs/langs/lv_LV/compta.lang +++ b/htdocs/langs/lv_LV/compta.lang @@ -65,7 +65,7 @@ LT2SupplierIN=SGST pirkumi VATCollected=Iekasētais PVN StatusToPay=Jāsamaksā SpecialExpensesArea=Sadaļa visiem īpašajiem maksājumiem -VATExpensesArea=Area for all TVA payments +VATExpensesArea=Platība visiem TVA maksājumiem SocialContribution=Sociālais vai fiskālais nodoklis SocialContributions=Sociālie vai fiskālie nodokļi SocialContributionsDeductibles=Atskaitāmi sociālie vai fiskālie nodokļi @@ -86,7 +86,7 @@ PaymentCustomerInvoice=Klienta rēķina apmaksa PaymentSupplierInvoice=pārdevēja rēķina apmaksa PaymentSocialContribution=Social/fiscal tax payment PaymentVat=PVN maksājumi -AutomaticCreationPayment=Automatically record the payment +AutomaticCreationPayment=Automātiski reģistrēt maksājumu ListPayment=Maksājumu saraksts ListOfCustomerPayments=Klientu maksājumu saraksts ListOfSupplierPayments=Pārdevēja maksājumu saraksts @@ -106,8 +106,8 @@ LT2PaymentES=IRPF Maksājumu LT2PaymentsES=IRPF Maksājumi VATPayment=Tirdzniecības nodokļa samaksa VATPayments=Tirdzniecības nodokļa maksājumi -VATDeclarations=VAT declarations -VATDeclaration=VAT declaration +VATDeclarations=PVN deklarācijas +VATDeclaration=PVN deklarācija VATRefund=PVN atmaksa NewVATPayment=Jauns apgrozījuma nodokļa maksājums NewLocalTaxPayment=Jauns nodokļa %s maksājums @@ -135,20 +135,20 @@ NewCheckReceipt=Jauna atlaide NewCheckDeposit=Jauns pārbaude depozīts NewCheckDepositOn=Izveidot kvīti par depozīta kontā: %s NoWaitingChecks=No checks awaiting deposit. -DateChequeReceived=Check receiving date +DateChequeReceived=Pārbaudiet saņemšanas datumu NbOfCheques=Pārbaužu skaits PaySocialContribution=Maksāt sociālo/fiskālo nodokli -PayVAT=Pay a VAT declaration -PaySalary=Pay a salary card -ConfirmPaySocialContribution=Are you sure you want to classify this social or fiscal tax as paid ? -ConfirmPayVAT=Are you sure you want to classify this VAT declaration as paid ? -ConfirmPaySalary=Are you sure you want to classify this salary card as paid? +PayVAT=Samaksājiet PVN deklarāciju +PaySalary=Samaksājiet algas karti +ConfirmPaySocialContribution=Vai tiešām vēlaties klasificēt šo sociālo vai fiskālo nodokli kā samaksātu? +ConfirmPayVAT=Vai tiešām vēlaties klasificēt šo PVN deklarāciju kā apmaksātu? +ConfirmPaySalary=Vai tiešām vēlaties klasificēt šo algas karti kā apmaksātu? DeleteSocialContribution=Dzēst sociālo vai fiskālo nodokļu maksājumu -DeleteVAT=Delete a VAT declaration -DeleteSalary=Delete a salary card -ConfirmDeleteSocialContribution=Are you sure you want to delete this social/fiscal tax payment ? -ConfirmDeleteVAT=Are you sure you want to delete this VAT declaration ? -ConfirmDeleteSalary=Are you sure you want to delete this salary? +DeleteVAT=Dzēst PVN deklarāciju +DeleteSalary=Dzēst algas karti +ConfirmDeleteSocialContribution=Vai tiešām vēlaties dzēst šo sociālā / fiskālā nodokļa maksājumu? +ConfirmDeleteVAT=Vai tiešām vēlaties dzēst šo PVN deklarāciju? +ConfirmDeleteSalary=Vai tiešām vēlaties dzēst šo algu? ExportDataset_tax_1=Sociālie un fiskālie nodokļi un maksājumi CalcModeVATDebt=Mode %sVAT par saistību accounting%s. CalcModeVATEngagement=Mode %sVAT par ienākumu-expense%sS. @@ -175,7 +175,7 @@ RulesResultInOut=- It includes the real payments made on invoices, expenses, VAT RulesCADue=- Tajā ir iekļauti klienta rēķini, par kuriem ir samaksāts.
- tas ir balstīts uz šo rēķinu apmaksas datumu.
RulesCAIn=- Tas ietver visus no klientiem saņemto rēķinu faktiskos maksājumus.
- Tas ir balstīts uz šo rēķinu apmaksas datumu RulesCATotalSaleJournal=Tas ietver visas kredītlīnijas no pārdošanas žurnāla. -RulesSalesTurnoverOfIncomeAccounts=It includes (credit - debit) of lines for product accounts in group INCOME +RulesSalesTurnoverOfIncomeAccounts=Tas ietver (kredīts - debets) rindas produktu kontiem IENĀKUMS RulesAmountOnInOutBookkeepingRecord=Tas ietver jūsu Ledger ierakstu ar grāmatvedības kontiem, kuriem ir grupa "IZDEVUMS" vai "IENĀKUMS" RulesResultBookkeepingPredefined=Tas ietver jūsu Ledger ierakstu ar grāmatvedības kontiem, kuriem ir grupa "IZDEVUMS" vai "IENĀKUMS" RulesResultBookkeepingPersonalized=Tas rāda jūsu grāmatvedībā ierakstu ar grāmatvedības kontiem grupējot pēc personalizētām grupām @@ -196,7 +196,7 @@ VATReportByThirdParties=Trešo personu pārdošanas nodokļa pārskats VATReportByCustomers=Pārdošanas nodokļa pārskats pēc klienta VATReportByCustomersInInputOutputMode=Ziņojums klientu PVN iekasē un izmaksā VATReportByQuartersInInputOutputMode=Ienākuma nodokļa likmes aprēķins par iekasēto un samaksāto nodokli -VATReportShowByRateDetails=Show details of this rate +VATReportShowByRateDetails=Parādīt detalizētu informāciju par šo likmi LT1ReportByQuarters=Ziņot par nodokli 2 pēc likmes LT2ReportByQuarters=Ziņojiet par nodokli 3 pēc likmes LT1ReportByQuartersES=Report by RE rate @@ -231,7 +231,7 @@ Pcg_subtype=PCG apakštipu InvoiceLinesToDispatch=Rēķina līnijas nosūtīšanas ByProductsAndServices=Pēc produkta un pakalpojuma RefExt=Ārējā ref -ToCreateAPredefinedInvoice=To create a template invoice, create a standard invoice, then, without validating it, click on button "%s". +ToCreateAPredefinedInvoice=Lai izveidotu rēķina veidni, izveidojiet standarta rēķinu, pēc tam, to neapstiprinot, noklikšķiniet uz pogas "%s". LinkedOrder=Saite uz pasūtījumu Mode1=Metode 1 Mode2=Metode 2 @@ -249,8 +249,8 @@ ACCOUNTING_ACCOUNT_CUSTOMER_Desc=Īpašais grāmatvedības konts, kas noteikts t ACCOUNTING_ACCOUNT_SUPPLIER=Pārdevēja trešo personu grāmatvedības konts ACCOUNTING_ACCOUNT_SUPPLIER_Desc=Trešās puses kartē noteiktais īpašais grāmatvedības konts tiks izmantots tikai Subledger grāmatvedībai. Tas tiks izmantots galvenajai grāmatai un Subledger grāmatvedības noklusējuma vērtība, ja nav definēts īpašs pārdevēja grāmatvedības konts trešajā pusē. ConfirmCloneTax=Apstipriniet sociālā / fiskālā nodokļa klonu -ConfirmCloneVAT=Confirm the clone of a VAT declaration -ConfirmCloneSalary=Confirm the clone of a salary +ConfirmCloneVAT=Apstipriniet PVN deklarācijas klonu +ConfirmCloneSalary=Apstipriniet algas klonu CloneTaxForNextMonth=Klonēt nākošam mēnesim SimpleReport=Vienkāršs pārskats AddExtraReport=Papildu pārskati (pievienojiet ārvalstu un valsts klientu pārskatu) @@ -269,8 +269,8 @@ AccountingAffectation=Grāmatvedības uzskaite LastDayTaxIsRelatedTo=Nodokļa pēdējā diena ir saistīta ar VATDue=Pieprasītais pārdošanas nodoklis ClaimedForThisPeriod=Pretendē uz periodu -PaidDuringThisPeriod=Paid for this period -PaidDuringThisPeriodDesc=This is the sum of all payments linked to VAT declarations which have an end-of-period date in the selected date range +PaidDuringThisPeriod=Samaksāts par šo periodu +PaidDuringThisPeriodDesc=Šī ir visu to maksājumu summa, kas saistīti ar PVN deklarācijām un kuru izvēlētajā datumu diapazonā ir perioda beigu datums ByVatRate=Ar pārdošanas nodokļa likmi TurnoverbyVatrate=Apgrozījums, par kuru tiek aprēķināta pārdošanas nodokļa likme TurnoverCollectedbyVatrate=Apgrozījums, kas iegūts, pārdodot nodokli @@ -281,14 +281,14 @@ PurchaseTurnoverCollected=Apkopots pirkumu apgrozījums RulesPurchaseTurnoverDue=- Tajā ir iekļauti piegādātāja rēķini par samaksu neatkarīgi no tā, vai tie ir samaksāti.
- tas ir balstīts uz šo rēķinu izrakstīšanas datumu.
RulesPurchaseTurnoverIn=- Tas ietver visus faktiskos rēķinu maksājumus, kas veikti piegādātājiem.
- tas ir balstīts uz šo rēķinu apmaksas datumu
RulesPurchaseTurnoverTotalPurchaseJournal=Tas ietver visas pirkuma žurnāla debeta līnijas. -RulesPurchaseTurnoverOfExpenseAccounts=It includes (debit - credit) of lines for product accounts in group EXPENSE +RulesPurchaseTurnoverOfExpenseAccounts=Tas ietver (debets - kredīts) līnijas produktu kontiem grupā EXPENSE ReportPurchaseTurnover=Par pirkuma apgrozījumu izrakstīts rēķins ReportPurchaseTurnoverCollected=Apkopots pirkumu apgrozījums IncludeVarpaysInResults = Pārskatos iekļaujiet dažādus maksājumus IncludeLoansInResults = Iekļaujiet pārskatos aizdevumus -InvoiceLate30Days = Invoices late > 30 days -InvoiceLate15Days = Invoices late > 15 days -InvoiceLateMinus15Days = Invoices late -InvoiceNotLate = To be collected < 15 days -InvoiceNotLate15Days = To be collected in 15 days -InvoiceNotLate30Days = To be collected in 30 days +InvoiceLate30Days = Rēķini nokavēti> 30 dienas +InvoiceLate15Days = Rēķini nokavēti> 15 dienas +InvoiceLateMinus15Days = Kavēti rēķini +InvoiceNotLate = Jāsavāc <15 dienas +InvoiceNotLate15Days = Tiek savākts 15 dienu laikā +InvoiceNotLate30Days = Tiek savākts 30 dienu laikā diff --git a/htdocs/langs/lv_LV/cron.lang b/htdocs/langs/lv_LV/cron.lang index 12595393d64..062d5230372 100644 --- a/htdocs/langs/lv_LV/cron.lang +++ b/htdocs/langs/lv_LV/cron.lang @@ -60,7 +60,7 @@ CronErrEndDateStartDt=Beigu datums nevar būt pirms sākuma datuma StatusAtInstall=Statuss moduļa instalācijā CronStatusActiveBtn=Grafiks CronStatusInactiveBtn=Izslēgt -CronTaskInactive=This job is disabled (not scheduled) +CronTaskInactive=Šis darbs ir atspējots (nav ieplānots) CronId=Id CronClassFile=Faila nosaukums ar klasi CronModuleHelp=Dolibarr moduļu direktorijas nosaukums (arī darbojas ar ārēju Dolibarr moduli).
Piemēram, lai izsauktu Dolibarr produkta objektu /htdocs/product/class/product.class.php iegūšanas metodi, moduļa vērtība ir
produkts diff --git a/htdocs/langs/lv_LV/deliveries.lang b/htdocs/langs/lv_LV/deliveries.lang index fa28f02fb09..cfe026979d6 100644 --- a/htdocs/langs/lv_LV/deliveries.lang +++ b/htdocs/langs/lv_LV/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Saņēmējs ErrorStockIsNotEnough=Nav pietiekami daudz krājumu Shippable=Shippable NonShippable=Nav nosūtāms +ShowShippableStatus=Rādīt pārsūtāmo statusu ShowReceiving=Rādīt piegādes kvīti NonExistentOrder=Neeksistējošs pasūtījums +StockQuantitiesAlreadyAllocatedOnPreviousLines = Krājumu daudzumi, kas jau piešķirti iepriekšējās rindās diff --git a/htdocs/langs/lv_LV/dict.lang b/htdocs/langs/lv_LV/dict.lang index a56b6837c4a..1b232c953ca 100644 --- a/htdocs/langs/lv_LV/dict.lang +++ b/htdocs/langs/lv_LV/dict.lang @@ -290,7 +290,7 @@ CurrencyXOF=CFA franki BCEAO CurrencySingXOF=CFA Franc BCEAO CurrencyXPF=KZP franki CurrencySingXPF=CFP Franc -CurrencyCentEUR=centiem +CurrencyCentEUR=centi CurrencyCentSingEUR=cents CurrencyCentINR=paisa CurrencyCentSingINR=paise diff --git a/htdocs/langs/lv_LV/donations.lang b/htdocs/langs/lv_LV/donations.lang index e9ae4ae5464..26019bfad78 100644 --- a/htdocs/langs/lv_LV/donations.lang +++ b/htdocs/langs/lv_LV/donations.lang @@ -7,7 +7,6 @@ AddDonation=Izveidot ziedojumu NewDonation=Jauns ziedojums DeleteADonation=Dzēst ziedojumu ConfirmDeleteADonation=Vai tiešām vēlaties dzēst šo ziedojumu? -ShowDonation=Rādīt ziedojumu PublicDonation=Sabiedrības ziedojums DonationsArea=Ziedojumu sadaļa DonationStatusPromiseNotValidated=Sagataves solījums @@ -33,3 +32,4 @@ DONATION_ART238=Show article 238 from CGI if you are concerned DONATION_ART885=Show article 885 from CGI if you are concerned DonationPayment=Ziedojuma maksājums DonationValidated=Ziedojums %s apstiprināts +DonationUseThirdparties=Izmantojiet esošo donoru kā donoru koordinātas diff --git a/htdocs/langs/lv_LV/ecm.lang b/htdocs/langs/lv_LV/ecm.lang index 459119bffcd..d3549d4d369 100644 --- a/htdocs/langs/lv_LV/ecm.lang +++ b/htdocs/langs/lv_LV/ecm.lang @@ -41,7 +41,7 @@ FileNotYetIndexedInDatabase=Fails vēl nav indeksēts datu bāzē (mēģiniet to ExtraFieldsEcmFiles=Extrafields Ecm failus ExtraFieldsEcmDirectories=Extrafields Ecm direktoriji ECMSetup=ECM iestatīšana -GenerateImgWebp=Duplicate all images with another version with .webp format -ConfirmGenerateImgWebp=If you confirm, you will generate an image in .webp format for all images currently into this folder (subfolders are not included)... -ConfirmImgWebpCreation=Confirm all images duplication -SucessConvertImgWebp=Images successfully duplicated +GenerateImgWebp=Dublējiet visus attēlus ar citu versiju ar .webp formātu +ConfirmGenerateImgWebp=Ja apstiprināsit, visiem šajā mapē esošajiem attēliem tiks ģenerēts attēls .webp formātā (apakšmapes nav iekļautas) ... +ConfirmImgWebpCreation=Apstipriniet visu attēlu dublēšanos +SucessConvertImgWebp=Attēli ir veiksmīgi dublēti diff --git a/htdocs/langs/lv_LV/errors.lang b/htdocs/langs/lv_LV/errors.lang index 5df40e192b9..d90bd6c508b 100644 --- a/htdocs/langs/lv_LV/errors.lang +++ b/htdocs/langs/lv_LV/errors.lang @@ -4,14 +4,14 @@ NoErrorCommitIsDone=Nav kļūda, mēs apstiprinam # Errors ErrorButCommitIsDone=Kļūdas atrasta, bet mēs apstiprinājām neskatoties uz to -ErrorBadEMail=Email %s is incorrect -ErrorBadMXDomain=Email %s seems incorrect (domain has no valid MX record) -ErrorBadUrl=Url %s is incorrect +ErrorBadEMail=E-pasts %s nav pareizs +ErrorBadMXDomain=E-pasts %s šķiet nepareizs (domēnam nav derīga MX ieraksta) +ErrorBadUrl=URL %s nav pareizs ErrorBadValueForParamNotAString=Jūsu parametra nepareiza vērtība. Tas parasti parādās, ja trūkst tulkojuma. ErrorRefAlreadyExists=Atsauce %s jau pastāv. ErrorLoginAlreadyExists=Lietotājs %s jau pastāv. ErrorGroupAlreadyExists=Grupa %s jau pastāv. -ErrorEmailAlreadyExists=Email %s already exists. +ErrorEmailAlreadyExists=E-pasts %s jau pastāv. ErrorRecordNotFound=Ierakstīt nav atrasts. ErrorFailToCopyFile=Neizdevās nokopēt failu '%s' uz '%s'. ErrorFailToCopyDir=Neizdevās kopēt direktoriju '%s' uz ' %s'. @@ -47,8 +47,8 @@ ErrorWrongDate=Datums nav pareizs ErrorFailedToWriteInDir=Neizdevās ierakstīt direktorijā %s ErrorFoundBadEmailInFile=Atrasts nepareiza e-pasta sintakse %s līnijām failā (piemērs line %s ar e-pasta = %s) ErrorUserCannotBeDelete=Lietotāju nevar izdzēst. Varbūt tas ir saistīts ar Dolibarr vienībām. -ErrorFieldsRequired=Some required fields have been left blank. -ErrorSubjectIsRequired=The email subject is required +ErrorFieldsRequired=Daži obligāti aizpildāmie lauki ir atstāti tukši. +ErrorSubjectIsRequired=Nepieciešama e-pasta tēma ErrorFailedToCreateDir=Neizdevās izveidot direktoriju. Pārbaudiet, vai Web servera lietotājam ir tiesības rakstīt uz Dolibarr dokumentus direktorijā. Ja parametrs safe_mode ir iespējots uz šo PHP, pārbaudiet, Dolibarr php faili pieder web servera lietotājam (vai grupa). ErrorNoMailDefinedForThisUser=Nav definēts e-pasts šim lietotājam ErrorSetupOfEmailsNotComplete=E-pastu iestatīšana nav pabeigta @@ -60,7 +60,7 @@ ErrorDirNotFound=Directory %s nav atrasts (Bad ceļš, aplamas tiesības ErrorFunctionNotAvailableInPHP=Funkcija %s ir nepieciešama šī funkcija, bet nav pieejams šajā versijā / uzstādīšanas PHP. ErrorDirAlreadyExists=Direrktorija ar šādu nosaukumu jau pastāv. ErrorFileAlreadyExists=Fails ar šādu nosaukumu jau eksistē. -ErrorDestinationAlreadyExists=Another file with the name %s already exists. +ErrorDestinationAlreadyExists=Jau pastāv cits fails ar nosaukumu %s . ErrorPartialFile=Serveris failu nav saņemis pilnīgi. ErrorNoTmpDir=Pagaidu direktorija %s neeksistē. ErrorUploadBlockedByAddon=Augšupielāde bloķēja ar PHP/Apache spraudni. @@ -118,7 +118,7 @@ ErrorCantReadFile=Neizdevās nolasīt failu '%s' ErrorCantReadDir=Neizdevās nolasīt katalogu '%s' ErrorBadLoginPassword=Nepareiza vērtība lietotājvārdam vai parolei ErrorLoginDisabled=Jūsu konts ir bloķēts -ErrorFailedToRunExternalCommand=Failed to run external command. Check it is available and runnable by your PHP server user. Check also the command is not protected on shell level by a security layer like apparmor. +ErrorFailedToRunExternalCommand=Neizdevās palaist ārējo komandu. Pārbaudiet, vai tas ir pieejams un darbojas jūsu PHP servera lietotājam. Pārbaudiet arī, vai komandu čaulas līmenī neaizsargā tāds drošības slānis kā apparmor. ErrorFailedToChangePassword=Neizdevās nomainīt paroli ErrorLoginDoesNotExists=Lietotāju ar pieteikšanos %s nevar atrast. ErrorLoginHasNoEmail=Šim lietotājam nav e-pasta adrese. Process atcelts. @@ -227,9 +227,9 @@ ErrorAPageWithThisNameOrAliasAlreadyExists=Lapā / konteinerā %s %s
ir ieslēgta. WarningCreateSubAccounts=Brīdinājums: jūs nevarat izveidot tieši apakškontu, jums ir jāizveido trešā puse vai lietotājs un jāpiešķir viņiem grāmatvedības kods, lai tos atrastu šajā sarakstā WarningAvailableOnlyForHTTPSServers=Pieejams tikai tad, ja tiek izmantots HTTPS drošais savienojums. -WarningModuleXDisabledSoYouMayMissEventHere=Module %s has not been enabled. So you may miss a lot of event here. -ErrorActionCommPropertyUserowneridNotDefined=User's owner is required -ErrorActionCommBadType=Selected event type (id: %n, code: %s) do not exist in Event Type dictionary -CheckVersionFail=Version check fail -ErrorWrongFileName=Name of the file cannot have __SOMETHING__ in it +WarningModuleXDisabledSoYouMayMissEventHere=Modulis %s nav iespējots. Tāpēc jūs varat izlaist daudz notikumu šeit. +ErrorActionCommPropertyUserowneridNotDefined=Nepieciešams lietotāja īpašnieks +ErrorActionCommBadType=Atlasītais notikuma veids (id: %n, kods: %s) nepastāv notikuma veida vārdnīcā +CheckVersionFail=Versijas pārbaude neizdevās +ErrorWrongFileName=Faila nosaukumā nedrīkst būt __SOMETHING__ diff --git a/htdocs/langs/lv_LV/eventorganization.lang b/htdocs/langs/lv_LV/eventorganization.lang index 70a2a0146c2..d28955ce942 100644 --- a/htdocs/langs/lv_LV/eventorganization.lang +++ b/htdocs/langs/lv_LV/eventorganization.lang @@ -17,127 +17,127 @@ # # Generic # -ModuleEventOrganizationName = Event Organization -EventOrganizationDescription = Event Organization through Module Project -EventOrganizationDescriptionLong= Manage Event organization for conference, attendees, speaker, and attendees, with public subcription page +ModuleEventOrganizationName = Pasākuma organizēšana +EventOrganizationDescription = Pasākuma organizēšana, izmantojot moduļu projektu +EventOrganizationDescriptionLong= Pārvaldiet konferences, dalībnieku, runātāju un dalībnieku pasākuma organizēšanu ar publisku abonēšanas lapu # # Menu # -EventOrganizationMenuLeft = Organized events -EventOrganizationConferenceOrBoothMenuLeft = Conference Or Booth +EventOrganizationMenuLeft = Organizēja pasākumus +EventOrganizationConferenceOrBoothMenuLeft = Konference vai stends # # Admin page # -EventOrganizationSetup = Event Organization setup +EventOrganizationSetup = Pasākuma organizācijas iestatīšana Settings = Iestatījumi -EventOrganizationSetupPage = Event Organization setup page -EVENTORGANIZATION_TASK_LABEL = Label of tasks to create automatically when project is validated -EVENTORGANIZATION_TASK_LABELTooltip = When you validate an organized event, some tasks can be automatically created in the project

For example:
Send Call for Conference
Send Call for Booth
Receive call for conferences
Receive call for Booth
Open subscriptions to events for attendees
Send remind of event to speakers
Send remind of event to Booth hoster
Send remind of event to attendees -EVENTORGANIZATION_CATEG_THIRDPARTY_CONF = Category to add to third-parties automatically created when someone suggests a conference -EVENTORGANIZATION_CATEG_THIRDPARTY_BOOTH = Category to add to third-parties automatically created when they suggests a booth -EVENTORGANIZATION_TEMPLATE_EMAIL_ASK_CONF = Template of email to send after receiving a suggestion of a conference. -EVENTORGANIZATION_TEMPLATE_EMAIL_ASK_BOOTH = Template of email to send after receiving a suggestion of a booth. -EVENTORGANIZATION_TEMPLATE_EMAIL_AFT_SUBS_BOOTH = Template of email to send after a subscription to a booth has been paid. -EVENTORGANIZATION_TEMPLATE_EMAIL_AFT_SUBS_EVENT = Template of email to send after a subscription to an event has been paid. -EVENTORGANIZATION_TEMPLATE_EMAIL_BULK_SPEAKER = Template of email of massaction to attendes -EVENTORGANIZATION_TEMPLATE_EMAIL_BULK_ATTENDES = Template of email of massaction to speakers -EVENTORGANIZATION_FILTERATTENDEES_CAT = Filter thirdpartie's select list in attendees creation card/form with category -EVENTORGANIZATION_FILTERATTENDEES_TYPE = Filter thirdpartie's select list in attendees creation card/form with customer type +EventOrganizationSetupPage = Pasākuma organizācijas iestatīšanas lapa +EVENTORGANIZATION_TASK_LABEL = Uzdevumu iezīme, kas jāizveido automātiski, kad projekts ir apstiprināts +EVENTORGANIZATION_TASK_LABELTooltip = Apstiprinot organizētu notikumu, dažus uzdevumus var automātiski izveidot projektā

Piemēram:
Sūtīt konferences zvanu
Sūtīt zvanu stendam
A032fccfz19bz0 A032fccfz19bz002 Saņemt konferences zvanu03 atgādināt par notikumu runātājiem
Nosūtīt atgādinājumu par notikumu Booth hoster
Nosūtīt atgādinājumu par pasākumu dalībniekiem +EVENTORGANIZATION_CATEG_THIRDPARTY_CONF = Kategorija, ko pievienot trešajām pusēm, tiek automātiski izveidota, kad kāds iesaka konferenci +EVENTORGANIZATION_CATEG_THIRDPARTY_BOOTH = Kategorija, ko pievienot trešajām pusēm, tiek automātiski izveidota, kad viņi iesaka stendu +EVENTORGANIZATION_TEMPLATE_EMAIL_ASK_CONF = E-pasta ziņojuma veidne, kas jānosūta pēc konferences ieteikuma saņemšanas. +EVENTORGANIZATION_TEMPLATE_EMAIL_ASK_BOOTH = E-pasta ziņojuma veidne, kas jānosūta pēc stenda ieteikuma saņemšanas. +EVENTORGANIZATION_TEMPLATE_EMAIL_AFT_SUBS_BOOTH = E-pasta ziņojuma veidne, kas jānosūta pēc tam, kad ir samaksāts abonēšanas stends. +EVENTORGANIZATION_TEMPLATE_EMAIL_AFT_SUBS_EVENT = E-pasta ziņojuma veidne, kas jānosūta pēc pasākuma abonēšanas apmaksas. +EVENTORGANIZATION_TEMPLATE_EMAIL_BULK_SPEAKER = Masveida dalībnieku e-pasta veidne +EVENTORGANIZATION_TEMPLATE_EMAIL_BULK_ATTENDES = Masu sarunu e-pasta ziņojuma veidne +EVENTORGANIZATION_FILTERATTENDEES_CAT = Filtrējiet trešās puses atlasīto sarakstu dalībnieku izveides kartītē / veidlapā ar kategoriju +EVENTORGANIZATION_FILTERATTENDEES_TYPE = Filtrējiet trešās puses atlasīto sarakstu dalībnieku izveidošanas kartītē / veidlapā ar klienta tipu # # Object # -EventOrganizationConfOrBooth= Conference Or Booth -ManageOrganizeEvent = Manage event organisation -ConferenceOrBooth = Conference Or Booth -ConferenceOrBoothTab = Conference Or Booth -AmountOfSubscriptionPaid = Amount of subscription paid -DateSubscription = Date of subscription -ConferenceOrBoothAttendee = Conference Or Booth Attendee +EventOrganizationConfOrBooth= Konference vai stends +ManageOrganizeEvent = Pārvaldīt pasākumu organizēšanu +ConferenceOrBooth = Konference vai stends +ConferenceOrBoothTab = Konference vai stends +AmountOfSubscriptionPaid = Apmaksātā abonēšanas summa +DateSubscription = Abonēšanas datums +ConferenceOrBoothAttendee = Konferences vai stenda apmeklētājs # # Template Mail # -YourOrganizationEventConfRequestWasReceived = Your request for conference was received -YourOrganizationEventBoothRequestWasReceived = Your request for booth was received -EventOrganizationEmailAskConf = Request for conference -EventOrganizationEmailAskBooth = Request for booth -EventOrganizationEmailSubsBooth = Subscription for booth -EventOrganizationEmailSubsEvent = Subscription for an event -EventOrganizationMassEmailAttendees = Communication to attendees -EventOrganizationMassEmailSpeakers = Communication to speakers +YourOrganizationEventConfRequestWasReceived = Jūsu konferences pieprasījums tika saņemts +YourOrganizationEventBoothRequestWasReceived = Jūsu pieprasījums pēc stenda tika saņemts +EventOrganizationEmailAskConf = Pieprasījums pēc konferences +EventOrganizationEmailAskBooth = Pieprasījums pēc stenda +EventOrganizationEmailSubsBooth = Stenda abonēšana +EventOrganizationEmailSubsEvent = Pasākuma abonēšana +EventOrganizationMassEmailAttendees = Saziņa ar apmeklētājiem +EventOrganizationMassEmailSpeakers = Saziņa ar runātājiem # # Event # -AllowUnknownPeopleSuggestConf=Allow unknown people to suggest conferences -AllowUnknownPeopleSuggestConfHelp=Allow unknown people to suggest conferences -AllowUnknownPeopleSuggestBooth=Allow unknown people to suggest booth -AllowUnknownPeopleSuggestBoothHelp=Allow unknown people to suggest booth -PriceOfRegistration=Price of registration -PriceOfRegistrationHelp=Price of registration -PriceOfBooth=Subscription price to stand a booth -PriceOfBoothHelp=Subscription price to stand a booth -EventOrganizationICSLink=Link ICS for events -ConferenceOrBoothInformation=Conference Or Booth informations -Attendees = Attendees -DownloadICSLink = Download ICS link -EVENTORGANIZATION_SECUREKEY = Secure Key of the public registration link to a conference -SERVICE_BOOTH_LOCATION = Service used for the invoice row about a booth location -SERVICE_CONFERENCE_ATTENDEE_SUBSCRIPTION = Service used for the invoice row about an attendee subscription to a conference +AllowUnknownPeopleSuggestConf=Ļaujiet nezināmiem cilvēkiem ieteikt konferences +AllowUnknownPeopleSuggestConfHelp=Ļaujiet nezināmiem cilvēkiem ieteikt konferences +AllowUnknownPeopleSuggestBooth=Ļaujiet nezināmiem cilvēkiem ieteikt kabīni +AllowUnknownPeopleSuggestBoothHelp=Ļaujiet nezināmiem cilvēkiem ieteikt kabīni +PriceOfRegistration=Reģistrācijas cena +PriceOfRegistrationHelp=Reģistrācijas cena +PriceOfBooth=Abonēšanas cena, lai stāvētu kabīnē +PriceOfBoothHelp=Abonēšanas cena, lai stāvētu kabīnē +EventOrganizationICSLink=Saistiet notikumu ICS +ConferenceOrBoothInformation=Konferences vai stenda informācija +Attendees = Dalībnieki +DownloadICSLink = Lejupielādēt ICS saiti +EVENTORGANIZATION_SECUREKEY = Konferences publiskās reģistrācijas saites drošā atslēga +SERVICE_BOOTH_LOCATION = Pakalpojums, kas izmantots rēķinu rindai par kabīnes atrašanās vietu +SERVICE_CONFERENCE_ATTENDEE_SUBSCRIPTION = Pakalpojums, kas tiek izmantots rēķina rindā par konferences dalībnieka abonementu # # Status # EvntOrgDraft = Melnraksts -EvntOrgSuggested = Suggested -EvntOrgConfirmed = Confirmed -EvntOrgNotQualified = Not Qualified +EvntOrgSuggested = Ieteikts +EvntOrgConfirmed = Apstiprināts +EvntOrgNotQualified = Nav kvalificēts EvntOrgDone = Darīts -EvntOrgCancelled = Cancelled +EvntOrgCancelled = Atcelts # # Public page # -SuggestForm = Suggestion page -RegisterPage = Page for conferences or booth -EvntOrgRegistrationHelpMessage = Here, you can vote for an event, or suggest a new conference or booth for the project -EvntOrgRegistrationConfHelpMessage = Here, you can suggest a new conference for the project -EvntOrgRegistrationBoothHelpMessage = Here, you can suggest a new booth for the project -ListOfSuggestedConferences = List of suggested conferences -ListOfSuggestedBooths = List of suggested booths -SuggestConference = Suggest a new conference -SuggestBooth = Suggest a booth -ViewAndVote = View and vote for suggested events -PublicAttendeeSubscriptionPage = Public link of registration to a conference -MissingOrBadSecureKey = The security key is invalid or missing -EvntOrgWelcomeMessage = This form allows you to register as a new participant to the conference : '%s' -EvntOrgDuration = This conference starts on %s and ends on %s. -ConferenceAttendeeFee = Conference attendee fee for the event : '%s' occurring from %s to %s. -BoothLocationFee = Booth location for the event : '%s' occurring from %s to %s +SuggestForm = Ieteikumu lapa +RegisterPage = Konferenču vai stenda lapa +EvntOrgRegistrationHelpMessage = Šeit jūs varat balsot par pasākumu vai ieteikt jaunu konferenci vai stendu projektam +EvntOrgRegistrationConfHelpMessage = Šeit jūs varat ieteikt jaunu projekta konferenci +EvntOrgRegistrationBoothHelpMessage = Šeit jūs varat ieteikt jaunu stendu projektam +ListOfSuggestedConferences = Ieteicamo konferenču saraksts +ListOfSuggestedBooths = Ieteicamo kabīņu saraksts +SuggestConference = Ieteikt jaunu konferenci +SuggestBooth = Ieteikt stendu +ViewAndVote = Skatiet ierosinātos pasākumus un balsojiet par tiem +PublicAttendeeSubscriptionPage = Publiska reģistrācijas saite ar konferenci +MissingOrBadSecureKey = Drošības atslēga nav derīga vai tās nav +EvntOrgWelcomeMessage = Šī veidlapa ļauj reģistrēties kā jaunam konferences dalībniekam: '%s' +EvntOrgDuration = Šī konference sākas ar %s un beidzas ar %s. +ConferenceAttendeeFee = Konferences dalībnieka maksa par pasākumu: '%s', kas notiek no %s līdz %s. +BoothLocationFee = Pasākuma stenda atrašanās vieta: '%s', kas notiek no %s līdz %s EventType = Pasākuma veids # # Vote page # -EvntOrgRegistrationWelcomeMessage = Welcome on the conference or booth suggestion page. -EvntOrgRegistrationConfWelcomeMessage = Welcome on the conference suggestion page. -EvntOrgRegistrationBoothWelcomeMessage = Welcome on the booth suggestion page. -EvntOrgVoteHelpMessage = Here, you can view and vote for the suggested events for the project -VoteOk = Your vote has been accepted. -AlreadyVoted = You have already voted for this event. -VoteError = An error has occurred during the vote, please try again. +EvntOrgRegistrationWelcomeMessage = Laipni lūdzam konferences vai stenda ieteikumu lapā. +EvntOrgRegistrationConfWelcomeMessage = Laipni lūdzam konferences ieteikumu lapā. +EvntOrgRegistrationBoothWelcomeMessage = Laipni lūdzam stenda ieteikumu lapā. +EvntOrgVoteHelpMessage = Šeit jūs varat apskatīt ierosinātos projekta pasākumus un balsot par tiem +VoteOk = Jūsu balsojums ir pieņemts. +AlreadyVoted = Jūs jau esat balsojis par šo notikumu. +VoteError = Balsojuma laikā radās kļūda. Lūdzu, mēģiniet vēlreiz. # # SubscriptionOk page # -SubscriptionOk = Your subscription to this conference has been validated +SubscriptionOk = Jūsu abonements šai konferencei ir apstiprināts # # Subscription validation mail # -ConfAttendeeSubscriptionConfirmation = Confirmation of your subscription to a conference +ConfAttendeeSubscriptionConfirmation = Konferences abonēšanas apstiprinājums # # Payment page # -Attendee = Attendee -PaymentConferenceAttendee = Conference attendee payment -PaymentBoothLocation = Booth location payment +Attendee = Dalībnieks +PaymentConferenceAttendee = Konferences dalībnieka samaksa +PaymentBoothLocation = Kabīnes atrašanās vietas maksājums diff --git a/htdocs/langs/lv_LV/exports.lang b/htdocs/langs/lv_LV/exports.lang index c7732d16a4b..62971ec4f46 100644 --- a/htdocs/langs/lv_LV/exports.lang +++ b/htdocs/langs/lv_LV/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Veids (0=produkts, 1=pakalpojums) FileWithDataToImport=Fails ar datiem, lai importētu FileToImport=Avota fails, kas jāimportē FileMustHaveOneOfFollowingFormat=Importa failam ir jābūt šādam formātam -DownloadEmptyExample=Lejupielādēt veidlapas failu ar lauka satura informāciju (* ir obligāti aizpildāmie lauki) +DownloadEmptyExample=Lejupielādējiet veidnes failu ar lauka satura informāciju +StarAreMandatory=* ir obligāti aizpildāmi lauki ChooseFormatOfFileToImport=Izvēlieties faila formātu, ko izmantot kā importa faila formātu, noklikšķinot uz %s ikonas, lai to atlasītu ... ChooseFileToImport=Augšupielādējiet failu, pēc tam noklikšķiniet uz %s ikonas, lai atlasītu failu kā avota importa failu ... SourceFileFormat=Avota faila formāts @@ -133,4 +134,4 @@ KeysToUseForUpdates=Atslēga (sleja), ko izmantot esošo datu atjaunināšan NbInsert=Ievietoto līniju skaits: %s NbUpdate=Atjaunināto līniju skaits: %s MultipleRecordFoundWithTheseFilters=Ar šiem filtriem tika atrasti vairāki ieraksti: %s -StocksWithBatch=Stocks and location (warehouse) of products with batch/serial number +StocksWithBatch=Produktu krājumi un atrašanās vieta (noliktava) ar partijas / sērijas numuru diff --git a/htdocs/langs/lv_LV/externalsite.lang b/htdocs/langs/lv_LV/externalsite.lang index 925c1286ec8..23725bd616a 100644 --- a/htdocs/langs/lv_LV/externalsite.lang +++ b/htdocs/langs/lv_LV/externalsite.lang @@ -1,5 +1,5 @@ # Dolibarr language file - Source file is en_US - externalsite ExternalSiteSetup=Ārējo vietņu iestatīšana -ExternalSiteURL=External Site URL of HTML iframe content +ExternalSiteURL=HTML iframe satura ārējās vietnes URL ExternalSiteModuleNotComplete=Modulis ExternalSite nav pareizi konfigurēts. ExampleMyMenuEntry=Manas izvēlnes ieraksti diff --git a/htdocs/langs/lv_LV/holiday.lang b/htdocs/langs/lv_LV/holiday.lang index 79611027bf4..013c4b1a1b9 100644 --- a/htdocs/langs/lv_LV/holiday.lang +++ b/htdocs/langs/lv_LV/holiday.lang @@ -13,7 +13,7 @@ ToReviewCP=Gaida apstiprināšanu ApprovedCP=Apstiprināts CancelCP=Atcelts RefuseCP=Atteikts -ValidatorCP=Asistents +ValidatorCP=Apstiprinātājs ListeCP=Atvaļinājuma saraksts Leave=Atstāt pieprasījumu LeaveId=Atvaļinājuma ID @@ -39,11 +39,11 @@ TitreRequestCP=Atstāt pieprasījumu TypeOfLeaveId=Atvaļinājuma ID veids TypeOfLeaveCode=Atvaļinājuma kods TypeOfLeaveLabel=Atvaļinājuma veids -NbUseDaysCP=Patērēto atvaļinājuma dienu skaits -NbUseDaysCPHelp=Aprēķinā tiek ņemtas vērā vārdnīcā noteiktās brīvās dienas un brīvdienas. -NbUseDaysCPShort=Patērētās dienas -NbUseDaysCPShortInMonth=Mēneša laikā patērētās dienas -DayIsANonWorkingDay=%s nav darba diena +NbUseDaysCP=Izmantoto atvaļinājumu dienu skaits +NbUseDaysCPHelp=Aprēķinā tiek ņemtas vērā vārdnīcā noteiktās brīvdienas un brīvdienas. +NbUseDaysCPShort=Atvaļinājuma dienas +NbUseDaysCPShortInMonth=Atvaļinājuma dienas mēnesī +DayIsANonWorkingDay=%s ir darba diena DateStartInMonth=Sākuma datums mēnesī DateEndInMonth=Mēneša beigu datums EditCP=Rediģēt @@ -55,7 +55,7 @@ TitleDeleteCP=Dzēst atvaļinājuma pieprasījumu ConfirmDeleteCP=Apstiprināt šī atvaļinājuma pieprasījuma dzēšanu? ErrorCantDeleteCP=Kļūda, Jums nav tiesību izdzēst šo atvaļinājuma pieprasījumu. CantCreateCP=Jums nav tiesību veikt atvaļinājumu pieprasījumus. -InvalidValidatorCP=Jūsu atvaļinājuma pieprasījumam jāizvēlas apstiprinātājs. +InvalidValidatorCP=Atvaļinājuma pieprasījumam jums jāizvēlas apstiprinātājs. NoDateDebut=Jums ir jāizvēlas sākuma datums. NoDateFin=Jums ir jāizvēlas beigu datums. ErrorDureeCP=Jūsu atvaļinājuma pieprasījumā nav darba dienas. @@ -80,14 +80,14 @@ UserCP=Lietotājs ErrorAddEventToUserCP=Pievienojot ārpuskārtas atvaļinājumu, radās kļūda. AddEventToUserOkCP=Par ārkārtas atvaļinājumu papildinājums ir pabeigta. MenuLogCP=Skatīt izmaiņu žurnālus -LogCP=Pieejamo atvaļinājumu dienu atjauninājumu žurnāls -ActionByCP=Veic -UserUpdateCP=Lietotājam +LogCP=Visu atjauninājumu žurnāls “Atvaļinājuma atlikums” +ActionByCP=Atjaunināja +UserUpdateCP=Atjaunināts PrevSoldeCP=Iepriekšējā bilance NewSoldeCP=Jana Bilance alreadyCPexist=Šajā periodā atvaļinājuma pieprasījums jau ir veikts. -FirstDayOfHoliday=Pirmā atvaļinājuma diena -LastDayOfHoliday=Pēdēja atvaļinājuma diena +FirstDayOfHoliday=Atvaļinājuma sākuma diena +LastDayOfHoliday=Atvaļinājuma beigu diena BoxTitleLastLeaveRequests=Jaunākie %s labotie atvaļinājumu pieprasījumi HolidaysMonthlyUpdate=Ikmēneša atjauninājums ManualUpdate=Manuāla aktualizēšana @@ -104,8 +104,8 @@ LEAVE_SICK=Slimības lapa LEAVE_OTHER=Cits atvaļinājums LEAVE_PAID_FR=Apmaksāts atvaļinājums ## Configuration du Module ## -LastUpdateCP=Jaunākais atvaļinājumu piešķiršanas atjauninājums -MonthOfLastMonthlyUpdate=Pēdējā automātiskā atvaļinājuma piešķiršanas mēneša pēdējā mēneša laikā +LastUpdateCP=Pēdējā automātiskā atvaļinājumu piešķiršanas atjaunināšana +MonthOfLastMonthlyUpdate=Atvaļinājumu sadalījuma pēdējās automātiskās atjaunināšanas mēnesis UpdateConfCPOK=Veiksmīgi atjaunināta. Module27130Name= Atvaļinājuma pieprasījumu pārvaldība Module27130Desc= Atvaļinājumu pieprasījumu vadīšana @@ -125,8 +125,8 @@ HolidaysCanceledBody=Jūsu atvaļinājuma pieprasījums no %s līdz %s ir atcelt FollowedByACounter=1: Šāda veida atvaļinājumam jāievēro skaitītājs. Skaitījtājs tiek palielināts manuāli vai automātiski, un, ja atvaļinājuma pieprasījums ir apstiprināts, skaitītājs tiek samazināts.
0: neseko skaitītājs. NoLeaveWithCounterDefined=There is no leave types defined that need to be followed by a counter GoIntoDictionaryHolidayTypes=Iet uz Sākums - Iestatīšana - Vārdnīcas - Atvaļinājuma veids , lai iestatītu dažādu veidu lapas. -HolidaySetup=Moduļa brīvdienas uzstādīšana -HolidaysNumberingModules=Atvaļinājuma pieprasījumu numerācijas modeļi +HolidaySetup=Moduļa atvaļinājums iestatīšana +HolidaysNumberingModules=Numerācijas modeļi atvaļinājumu pieprasījumiem TemplatePDFHolidays=PDF veidne atvaļinājumu pieprasīšanai FreeLegalTextOnHolidays=Brīvs teksts PDF WatermarkOnDraftHolidayCards=Ūdenszīmes uz atvaļinājuma pieprasījumiem diff --git a/htdocs/langs/lv_LV/hrm.lang b/htdocs/langs/lv_LV/hrm.lang index fb12bb86555..4a22ad40b4e 100644 --- a/htdocs/langs/lv_LV/hrm.lang +++ b/htdocs/langs/lv_LV/hrm.lang @@ -9,7 +9,7 @@ ConfirmDeleteEstablishment=Vai tiešām vēlaties dzēst šo uzņēmumu? OpenEtablishment=Atvērts uzņēmums CloseEtablishment=Aizvērt uzņēmumu # Dictionary -DictionaryPublicHolidays=Leave - Public holidays +DictionaryPublicHolidays=Atvaļinājums - svētku dienas DictionaryDepartment=HRM - Department list DictionaryFunction=HRM - darba vietas # Module diff --git a/htdocs/langs/lv_LV/knowledgemanagement.lang b/htdocs/langs/lv_LV/knowledgemanagement.lang index 92b3a320067..bb146a13017 100644 --- a/htdocs/langs/lv_LV/knowledgemanagement.lang +++ b/htdocs/langs/lv_LV/knowledgemanagement.lang @@ -18,38 +18,32 @@ # # Module label 'ModuleKnowledgeManagementName' -ModuleKnowledgeManagementName = Knowledge Management System +ModuleKnowledgeManagementName = Zināšanu pārvaldības sistēma # Module description 'ModuleKnowledgeManagementDesc' -ModuleKnowledgeManagementDesc=Manage a Knowledge Management (KM) or Help-Desk base +ModuleKnowledgeManagementDesc=Pārvaldiet zināšanu pārvaldības (KM) vai palīdzības dienesta bāzi # # Admin page # -KnowledgeManagementSetup = Knowledge Management System setup +KnowledgeManagementSetup = Zināšanu pārvaldības sistēmas iestatīšana Settings = Iestatījumi -KnowledgeManagementSetupPage = Knowledge Management System setup page +KnowledgeManagementSetupPage = Zināšanu pārvaldības sistēmas iestatīšanas lapa # # About page # About = Par -KnowledgeManagementAbout = About Knowledge Management -KnowledgeManagementAboutPage = Knowledge Management about page +KnowledgeManagementAbout = Par zināšanu pārvaldību +KnowledgeManagementAboutPage = Zināšanu pārvaldība par lapu -# -# Sample page -# -KnowledgeManagementArea = Knowledge Management - - -# -# Menu -# -MenuKnowledgeRecord = Knowledge base -ListKnowledgeRecord = List of articles -NewKnowledgeRecord = New article -ValidateReply = Validate solution -KnowledgeRecords = Articles +KnowledgeManagementArea = Zināšanu pārvaldība +MenuKnowledgeRecord = Zināšanu bāze +ListKnowledgeRecord = Rakstu saraksts +NewKnowledgeRecord = Jauns raksts +ValidateReply = Apstipriniet šķīdumu +KnowledgeRecords = Raksti KnowledgeRecord = Raksts -KnowledgeRecordExtraFields = Extrafields for Article +KnowledgeRecordExtraFields = Raksta paplašinājumi +GroupOfTicket=Biļešu grupa +YouCanLinkArticleToATicketCategory=Rakstu var saistīt ar biļešu grupu (tāpēc raksts tiks ieteikts jauno biļešu kvalifikācijas iegūšanas laikā) diff --git a/htdocs/langs/lv_LV/languages.lang b/htdocs/langs/lv_LV/languages.lang index 248390f73a0..7dee3237fc3 100644 --- a/htdocs/langs/lv_LV/languages.lang +++ b/htdocs/langs/lv_LV/languages.lang @@ -3,7 +3,8 @@ Language_am_ET=Etiopietis Language_ar_AR=Arābu Language_ar_EG=Arābu (Ēģipte) Language_ar_SA=Arābu -Language_ar_TN=Arabic (Tunisia) +Language_ar_TN=Arābu (Tunisija) +Language_ar_IQ=Arābu (Irāka) Language_az_AZ=Azerbaidžāņi Language_bn_BD=Bengali Language_bn_IN=Bengāļu (Indija) @@ -83,9 +84,10 @@ Language_ne_NP=Nepālietis Language_nl_BE=Holandiešu (Beļģijas) Language_nl_NL=Holandiešu Language_pl_PL=Poļu +Language_pt_AO=Portugāļu (Angola) Language_pt_BR=Portugāļu (Brazīlija) Language_pt_PT=Portugāļu -Language_ro_MD=Romanian (Moldavia) +Language_ro_MD=Rumāņu (Moldāvija) Language_ro_RO=Rumāņu Language_ru_RU=Krievu Language_ru_UA=Krievu (Ukraina) diff --git a/htdocs/langs/lv_LV/mails.lang b/htdocs/langs/lv_LV/mails.lang index a959d345f2b..e6768ebf724 100644 --- a/htdocs/langs/lv_LV/mails.lang +++ b/htdocs/langs/lv_LV/mails.lang @@ -15,7 +15,7 @@ MailToUsers=Lietotājam (-iem) MailCC=Kopēt MailToCCUsers=Kopēt lietotājiem (-iem) MailCCC=Kešatmiņas kopija -MailTopic=Email subject +MailTopic=E-pasta tēma MailText=Ziņa MailFile=Pievienotie faili MailMessage=E-pasta saturs @@ -131,8 +131,8 @@ NoNotificationsWillBeSent=Šim notikuma veidam un uzņēmumam nav plānoti autom ANotificationsWillBeSent=1 automātisks paziņojums tiks nosūtīts pa e-pastu SomeNotificationsWillBeSent=%s automātiskie paziņojumi tiks nosūtīti pa e-pastu AddNewNotification=Abonējiet jaunu automātisku e-pasta paziņojumu (mērķis / notikums) -ListOfActiveNotifications=List of all active subscriptions (targets/events) for automatic email notification -ListOfNotificationsDone=List of all automatic email notifications sent +ListOfActiveNotifications=Visu aktīvo abonementu (mērķu / notikumu) saraksts automātiskai e-pasta paziņošanai +ListOfNotificationsDone=Visu nosūtīto automātisko e-pasta paziņojumu saraksts MailSendSetupIs=Configuration of email sending has been setup to '%s'. This mode can't be used to send mass emailing. MailSendSetupIs2=You must first go, with an admin account, into menu %sHome - Setup - EMails%s to change parameter '%s' to use mode '%s'. With this mode, you can enter setup of the SMTP server provided by your Internet Service Provider and use Mass emailing feature. MailSendSetupIs3=If you have any questions on how to setup your SMTP server, you can ask to %s. diff --git a/htdocs/langs/lv_LV/main.lang b/htdocs/langs/lv_LV/main.lang index 0b76b3bbb10..0343778b95e 100644 --- a/htdocs/langs/lv_LV/main.lang +++ b/htdocs/langs/lv_LV/main.lang @@ -180,7 +180,7 @@ SaveAndNew=Saglabāt un jaunu TestConnection=Savienojuma pārbaude ToClone=Klonēt ConfirmCloneAsk=Vai tiešām vēlaties klonēt objektu %s ? -ConfirmClone=Choose the data you want to clone: +ConfirmClone=Izvēlieties datus, kurus vēlaties klonēt: NoCloneOptionsSpecified=Nav datu klons noteikts. Of=no Go=Iet @@ -246,7 +246,7 @@ DefaultModel=Noklusējuma doc veidne Action=Notikums About=Par Number=Numurs -NumberByMonth=Total reports by month +NumberByMonth=Kopējais pārskatu skaits mēnesī AmountByMonth=Summa šķirota pēc mēneša nosaukuma Numero=Numurs Limit=Ierobežot @@ -278,7 +278,7 @@ DateModificationShort=Modif. datums IPModification=Modifikācijas IP DateLastModification=Jaunākais labošanas datums DateValidation=Apstiprināšanas datums -DateSigning=Signing date +DateSigning=Parakstīšanas datums DateClosing=Beigu datums DateDue=Izpildes datums DateValue=Valutēšanas datums @@ -341,8 +341,8 @@ KiloBytes=Kilobaiti MegaBytes=Megabaiti GigaBytes=Gigabaiti TeraBytes=Terabaiti -UserAuthor=Ceated by -UserModif=Updated by +UserAuthor=Apkrāpts ar +UserModif=Atjaunināja b=b. Kb=Kb Mb=Mb @@ -362,7 +362,7 @@ UnitPriceHTCurrency=Vienības cena (izņemot) (valūta) UnitPriceTTC=Vienības cena PriceU=UP PriceUHT=UP (neto) -PriceUHTCurrency=U.P (net) (currency) +PriceUHTCurrency=ASV (neto) (valūta) PriceUTTC=U.P. (inc. tax) Amount=Summa AmountInvoice=Rēķina summa @@ -390,8 +390,8 @@ AmountTotal=Kopējā summa AmountAverage=Vidējā summa PriceQtyMinHT=Cenu daudzums min. (bez nodokļiem) PriceQtyMinHTCurrency=Cenu daudzums min. (bez nodokļa) (valūta) -PercentOfOriginalObject=Percent of original object -AmountOrPercent=Amount or percent +PercentOfOriginalObject=Oriģinālā objekta procenti +AmountOrPercent=Summa vai procenti Percentage=Procentuālā attiecība Total=Kopsumma SubTotal=Starpsumma @@ -430,7 +430,7 @@ LT1IN=CGST LT2IN=SGST LT1GC=Papildu centi VATRate=Nodokļa likme -RateOfTaxN=Rate of tax %s +RateOfTaxN=Nodokļa likme %s VATCode=Nodokļu likmes kods VATNPR=Nodokļa likme NPR DefaultTaxRate=Noklusētā nodokļa likme @@ -730,8 +730,8 @@ MenuMembers=Dalībnieki MenuAgendaGoogle=Google darba kārtība MenuTaxesAndSpecialExpenses=Nodokļi | Īpašie izdevumi ThisLimitIsDefinedInSetup=Dolibarr robeža (Menu mājas uzstādīšana-drošība): %s Kb, PHP robeža: %s Kb -ThisLimitIsDefinedInSetupAt=Dolibarr limit (Menu %s): %s Kb, PHP limit (Param %s): %s Kb -NoFileFound=No documents uploaded +ThisLimitIsDefinedInSetupAt=Dolibarr limits (izvēlne %s): %s Kb, PHP ierobežojums (Param %s): %s Kb +NoFileFound=Nav augšupielādēts neviens dokuments CurrentUserLanguage=Pašreizējā valoda CurrentTheme=Pašreizējā tēma CurrentMenuManager=Pašreizējais izvēlnes pārvaldnieks @@ -847,7 +847,7 @@ XMoreLines=%s līnija(as) slēptas ShowMoreLines=Parādīt vairāk / mazāk rindas PublicUrl=Publiskā saite AddBox=Pievienot info logu -SelectElementAndClick=Select an element and click on %s +SelectElementAndClick=Atlasiet elementu un noklikšķiniet uz %s PrintFile=Drukāt failu %s ShowTransaction=Rādīt ierakstu bankas kontā ShowIntervention=Rādīt iejaukšanās @@ -858,8 +858,8 @@ Denied=Aizliegts ListOf=%s saraksts ListOfTemplates=Saraksts ar veidnēm Gender=Dzimums -Genderman=Male -Genderwoman=Female +Genderman=Vīrietis +Genderwoman=Sieviete Genderother=Cits ViewList=Saraksta skats ViewGantt=Ganta skats @@ -906,10 +906,10 @@ ViewAccountList=Skatīt virsgrāmatu ViewSubAccountList=Skatīt apakškonta virsgrāmatu RemoveString=Noņemt virkni '%s' SomeTranslationAreUncomplete=Dažas piedāvātās valodas var būt tikai daļēji tulkotas vai var saturēt kļūdas. Lūdzu, palīdziet labot savu valodu, reģistrējoties https://transifex.com/projects/p/dolibarr/ , lai pievienotu savus uzlabojumus. -DirectDownloadLink=Public download link -PublicDownloadLinkDesc=Only the link is required to download the file -DirectDownloadInternalLink=Private download link -PrivateDownloadLinkDesc=You need to be logged and you need permissions to view or download the file +DirectDownloadLink=Publiska lejupielādes saite +PublicDownloadLinkDesc=Lai lejupielādētu failu, nepieciešama tikai saite +DirectDownloadInternalLink=Privāta lejupielādes saite +PrivateDownloadLinkDesc=Lai skatītu vai lejupielādētu failu, jums ir jāpiesakās un jums ir vajadzīgas atļaujas Download=Lejupielādēt DownloadDocument=Lejupielādēt dokumentu ActualizeCurrency=Atjaunināt valūtas kursu @@ -1022,7 +1022,7 @@ SearchIntoContacts=Kontakti SearchIntoMembers=Dalībnieki SearchIntoUsers=Lietotāji SearchIntoProductsOrServices=Preces un pakalpojumi -SearchIntoBatch=Lots / Serials +SearchIntoBatch=Daudz / sērijas SearchIntoProjects=Projekti SearchIntoMO=Ražošanas pasūtījumi SearchIntoTasks=Uzdevumi @@ -1059,13 +1059,13 @@ KeyboardShortcut=Tastatūras saīsne AssignedTo=Piešķirts Deletedraft=Dzēst melnrakstu ConfirmMassDraftDeletion=Projekta masveida dzēšanas apstiprinājums -FileSharedViaALink=File shared with a public link +FileSharedViaALink=Fails ir kopīgots ar publisku saiti SelectAThirdPartyFirst=Vispirms izvēlieties trešo pusi ... YouAreCurrentlyInSandboxMode=Pašlaik esat %s "smilšu kastes" režīmā Inventory=Inventārs AnalyticCode=Analītiskais kods TMenuMRP=MRP -ShowCompanyInfos=Show company infos +ShowCompanyInfos=Rādīt uzņēmuma informāciju ShowMoreInfos=Rādīt vairāk informācijas NoFilesUploadedYet=Lūdzu, vispirms augšupielādējiet dokumentu SeePrivateNote=Skatīt privāto piezīmi @@ -1074,7 +1074,7 @@ ValidFrom=Derīgs no ValidUntil=Derīgs līdz NoRecordedUsers=Nav lietotāju ToClose=Aizvērt -ToRefuse=To refuse +ToRefuse=Atteikties ToProcess=Jāapstrādā ToApprove=Apstiprināt GlobalOpenedElemView=Globālais izskats @@ -1129,11 +1129,11 @@ UpdateForAllLines=Atjauninājums visām līnijām OnHold=On hold Civility=Laipnība AffectTag=Ietekmēt tagu -CreateExternalUser=Create external user +CreateExternalUser=Izveidot ārēju lietotāju ConfirmAffectTag=Masveida tagu ietekme ConfirmAffectTagQuestion=Vai tiešām vēlaties ietekmēt atlasītā (-o) ieraksta (-u) %s tagus? CategTypeNotFound=Ierakstu veidam nav atrasts neviens tagu tips -CopiedToClipboard=Copied to clipboard -InformationOnLinkToContract=This amount is only the total of all the lines of the contract. No notion of time is taken into consideration. -ConfirmCancel=Are you sure you want to cancel -EmailMsgID=Email MsgID +CopiedToClipboard=Kopēts starpliktuvē +InformationOnLinkToContract=Šī summa ir tikai visu līguma rindu kopsumma. Laika jēdziens netiek ņemts vērā. +ConfirmCancel=Vai tiešām vēlaties atcelt +EmailMsgID=Nosūtīt e-pastu MsgID diff --git a/htdocs/langs/lv_LV/margins.lang b/htdocs/langs/lv_LV/margins.lang index 92c24a82dc9..6a5520e8680 100644 --- a/htdocs/langs/lv_LV/margins.lang +++ b/htdocs/langs/lv_LV/margins.lang @@ -22,7 +22,7 @@ ProductService=Produkts vai pakalpojums AllProducts=Visi produkti un pakalpojumi ChooseProduct/Service=Izvēlies preci vai pakalpojumu ForceBuyingPriceIfNull=Force buying/cost price to selling price if not defined -ForceBuyingPriceIfNullDetails=If buying/cost price not provided when we add a new line, and this option is "ON", the margin will be 0 on the new line (buying/cost price = selling price). If this option is "OFF" (recommended), margin will be equal to the value suggested by default (and may be 100% if no default value can be found). +ForceBuyingPriceIfNullDetails=Ja pirkšanas / pašizmaksa nav norādīta, kad pievienojam jaunu rindu, un šī opcija ir “IESLĒGTS”, jaunajā rindā starpība būs 0 (pirkšanas / pašizmaksa = pārdošanas cena). Ja šī opcija ir "OFF" (ieteicams), starpība būs vienāda ar noklusējuma ieteikto vērtību (un, ja noklusējuma vērtību nevar atrast, tā var būt 100%). MARGIN_METHODE_FOR_DISCOUNT=Maržinālā metode pasaules atlaides UseDiscountAsProduct=Kā produktu UseDiscountAsService=Kā pakalpojums diff --git a/htdocs/langs/lv_LV/members.lang b/htdocs/langs/lv_LV/members.lang index 37bfdb2018b..966a410adef 100644 --- a/htdocs/langs/lv_LV/members.lang +++ b/htdocs/langs/lv_LV/members.lang @@ -15,24 +15,24 @@ ErrorMemberIsAlreadyLinkedToThisThirdParty=Vēl viens dalībnieks (nosaukums: globāla-> MYMODULE_MYOPTION) VisibleDesc=Vai lauks ir redzams? (Piemēri: 0 = nekad nav redzams, 1 = redzams sarakstā un izveidojiet / atjauniniet / skatiet veidlapas, 2 = ir redzams tikai sarakstā, 3 = ir redzams tikai izveides / atjaunināšanas / skata formā (nav sarakstā), 4 = ir redzams sarakstā un tikai atjaunināt / skatīt formu (neveidot), 5 = redzama tikai saraksta beigu skata formā (neveidot, ne atjaunināt).

Negatīvas vērtības līdzekļu izmantošana lauka pēc noklusējuma netiek parādīta, bet to var atlasīt apskatei).

Tas var būt izteiciens, piemēram:
preg_match ('/ public /', $ _SERVER ['PHP_SELF'])? 0: 1
($ user-> rights-> rights- -DisplayOnPdfDesc=Display this field on compatible PDF documents, you can manage position with "Position" field.
Currently, known compatibles PDF models are : eratosthene (order), espadon (ship), sponge (invoices), cyan (propal/quotation), cornas (supplier order)

For document :
0 = not displayed
1 = display
2 = display only if not empty

For document lines :
0 = not displayed
1 = displayed in a column
3 = display in line description column after the description
4 = display in description column after the description only if not empty +DisplayOnPdfDesc=Parādiet šo lauku saderīgos PDF dokumentos, pozīciju var pārvaldīt, izmantojot lauku “Pozīcija”.
Pašlaik zināmie saderīgie PDF modeļi ir: eratosthene (pasūtījums), espadon (kuģis), sūklis (rēķini), ciāns (propāls / citāts), radzenes (piegādātāja pasūtījums) = displejs
2 = parādīt tikai tad, ja nav iztukšot

dokumentu līnijas:
0 = nav redzama
1 = parādīti kolonnā
3 = displeja līnija apraksta slejā pēc apraksta
4 = displeja apraksta ailē pēc tam, kad apraksts tikai tad, ja tas nav tukšs DisplayOnPdf=Displejs PDF formātā IsAMeasureDesc=Vai lauka vērtību var uzkrāties, lai kopsumma tiktu iekļauta sarakstā? (Piemēri: 1 vai 0) SearchAllDesc=Vai laukums tiek izmantots, lai veiktu meklēšanu no ātrās meklēšanas rīka? (Piemēri: 1 vai 0) @@ -133,9 +133,9 @@ IncludeDocGeneration=Es gribu no objekta ģenerēt dažus dokumentus IncludeDocGenerationHelp=Ja to atzīmēsit, tiks izveidots kāds kods, lai ierakstam pievienotu rūtiņu “Ģenerēt dokumentu”. ShowOnCombobox=Rādīt vērtību kombinētajā lodziņā KeyForTooltip=Rīka padoma atslēga -CSSClass=CSS for edit/create form -CSSViewClass=CSS for read form -CSSListClass=CSS for list +CSSClass=CSS rediģēšanas / izveides veidlapai +CSSViewClass=CSS lasāmai formai +CSSListClass=CSS sarakstam NotEditable=Nav rediģējams ForeignKey=Sveša atslēga TypeOfFieldsHelp=Lauku tips:
varchar (99), double (24,8), real, text, html, datetime, timestamp, integer, integer: ClassName: reliapath / to / classfile.class.php [: 1 [: filter]] ('1' nozīmē mēs pievienojam pogu + pēc kombināta, lai izveidotu ierakstu; “filtrs” var būt “status = 1 UN fk_user = __USER_ID UN entītija (piemēram, __SHARED_ENTITIES__)”. @@ -143,4 +143,4 @@ AsciiToHtmlConverter=Ascii uz HTML pārveidotāju AsciiToPdfConverter=Ascii uz PDF pārveidotāju TableNotEmptyDropCanceled=Tabula nav tukša. Dzēšana tika atcelta. ModuleBuilderNotAllowed=Moduļu veidotājs ir pieejams, bet nav atļauts jūsu lietotājam. -ImportExportProfiles=Import and export profiles +ImportExportProfiles=Importēt un eksportēt profilus diff --git a/htdocs/langs/lv_LV/mrp.lang b/htdocs/langs/lv_LV/mrp.lang index 0ac6b6843af..25d867bbd20 100644 --- a/htdocs/langs/lv_LV/mrp.lang +++ b/htdocs/langs/lv_LV/mrp.lang @@ -13,7 +13,7 @@ BOMsSetup=Moduļa BOM iestatīšana ListOfBOMs=Materiālu rēķinu saraksts - BOM ListOfManufacturingOrders=Ražošanas pasūtījumu saraksts NewBOM=Jauns materiālu saraksts -ProductBOMHelp=Product to create (or disassemble) with this BOM.
Note: Products with the property 'Nature of product' = 'Raw material' are not visible into this list. +ProductBOMHelp=Produkts, kuru izveidot (vai izjaukt) ar šo BOM.
Piezīme: Produkti ar īpašību 'Produkta veids' = 'Izejvielas' šajā sarakstā nav redzami. BOMsNumberingModules=BOM numerācijas veidnes BOMsModelModule=BOM dokumentu veidnes MOsNumberingModules=MO numerācijas veidnes @@ -39,7 +39,7 @@ DateStartPlannedMo=Plānots sākuma datums DateEndPlannedMo=Plānots datuma beigas KeepEmptyForAsap=Tukša nozīmē “cik drīz vien iespējams” EstimatedDuration=Paredzamais ilgums -EstimatedDurationDesc=Estimated duration to manufacture (or disassemble) this product using this BOM +EstimatedDurationDesc=Paredzamais šī produkta izgatavošanas (vai demontāžas) ilgums, izmantojot šo BOM ConfirmValidateBom=Vai tiešām vēlaties apstiprināt BOM ar atsauci %s (jūs to varēsit izmantot, lai izveidotu jaunus ražošanas pasūtījumus) ConfirmCloseBom=Vai tiešām vēlaties atcelt šo BOM (jūs to vairs nevarēsit izmantot, lai izveidotu jaunus ražošanas pasūtījumus)? ConfirmReopenBom=Vai tiešām vēlaties atkārtoti atvērt šo BOM (jūs to varēsit izmantot, lai izveidotu jaunus ražošanas pasūtījumus) @@ -63,14 +63,14 @@ ConsumeAndProduceAll=Patērēt un ražot visu Manufactured=Izgatavots TheProductXIsAlreadyTheProductToProduce=Pievienojamais produkts jau ir produkts, ko ražot. ForAQuantityOf=Par saražoto daudzumu %s -ForAQuantityToConsumeOf=For a quantity to disassemble of %s +ForAQuantityToConsumeOf=Lai izjauktu daudzumu %s ConfirmValidateMo=Vai tiešām vēlaties apstiprināt šo ražošanas pasūtījumu? ConfirmProductionDesc=Noklikšķinot uz “%s”, jūs apstiprināsit noteikto daudzumu patēriņu un / vai ražošanu. Tas arī atjauninās krājumus un reģistrēs krājumu kustību. ProductionForRef=%s ražošana AutoCloseMO=Automātiski aizveriet ražošanas pasūtījumu, ja ir sasniegti patērējamie un saražotie daudzumi NoStockChangeOnServices=Pakalpojumu krājumi nemainās ProductQtyToConsumeByMO=Produkta daudzums, ko vēl vajadzētu patērēt atvērtā MO -ProductQtyToProduceByMO=Product quantity still to produce by open MO +ProductQtyToProduceByMO=Produkta daudzums, kas vēl jāražo ar atvērtu MO AddNewConsumeLines=Pievienojiet jaunu rindu patērēšanai ProductsToConsume=Produkti, kurus patērēt ProductsToProduce=Izgatavojamie produkti diff --git a/htdocs/langs/lv_LV/orders.lang b/htdocs/langs/lv_LV/orders.lang index 1dc27b5f27c..1f8d5768509 100644 --- a/htdocs/langs/lv_LV/orders.lang +++ b/htdocs/langs/lv_LV/orders.lang @@ -17,8 +17,8 @@ ToOrder=Veicot pasūtījumu MakeOrder=Veicot pasūtījumu SupplierOrder=Pirkuma pasūtījums SuppliersOrders=Pirkuma pasūtījumi -SaleOrderLines=Sale order lines -PurchaseOrderLines=Puchase order lines +SaleOrderLines=Izpārdošanas pasūtījumu līnijas +PurchaseOrderLines=Puchase pasūtījuma līnijas SuppliersOrdersRunning=Pašreizējie pirkumu pasūtījumi CustomerOrder=Pārdošanas pasūtījums CustomersOrders=Pārdošanas pasūtījumi diff --git a/htdocs/langs/lv_LV/other.lang b/htdocs/langs/lv_LV/other.lang index 04863c42be0..64cae5e5bc6 100644 --- a/htdocs/langs/lv_LV/other.lang +++ b/htdocs/langs/lv_LV/other.lang @@ -114,7 +114,7 @@ DemoCompanyAll=Uzņēmums ar vairākām darbībām (visi galvenie moduļi) CreatedBy=Izveidoja %s ModifiedBy=Laboja %s ValidatedBy=Apstiprināja %s -SignedBy=Signed by %s +SignedBy=Parakstījis %s ClosedBy=Slēdza %s CreatedById=Lietotāja id kurš izveidojis ModifiedById=Lietotāja id kurš veica pēdējās izmaiņas @@ -129,7 +129,7 @@ ClosedByLogin=Lietotājs, kurš slēdzis FileWasRemoved=Fails %s tika dzēsts DirWasRemoved=Katalogs %s tika dzēsts FeatureNotYetAvailable=Funkcija pašreizējā versijā vēl nav pieejama -FeatureNotAvailableOnDevicesWithoutMouse=Feature not available on devices without mouse +FeatureNotAvailableOnDevicesWithoutMouse=Funkcija nav pieejama ierīcēs bez peles FeaturesSupported=Atbalstītās funkcijas Width=Platums Height=Augstums @@ -184,7 +184,7 @@ EnableGDLibraryDesc=Instalējiet vai iespējojiet GD bibliotēku savā PHP insta ProfIdShortDesc=Prof ID %s ir informācija, atkarībā no trešās puses valstīm.
Piemēram, attiecībā uz valstu %s, tas ir kods %s. DolibarrDemo=Dolibarr ERP/CRM demo StatsByNumberOfUnits=Statistics for sum of qty of products/services -StatsByNumberOfEntities=Statistics for number of referring entities (no. of invoices, or orders...) +StatsByNumberOfEntities=Statistika par nosūtītāju skaitu (rēķinu vai pasūtījumu skaits ...) NumberOfProposals=Priekšlikumu skaits NumberOfCustomerOrders=Pārdošanas pasūtījumu skaits NumberOfCustomerInvoices=Klientu rēķinu skaits @@ -246,7 +246,7 @@ NewKeyIs=Tas ir jūsu jaunās atslēgas, lai pieteiktos NewKeyWillBe=Jūsu jaunais galvenais, lai pieteiktos uz programmatūru, būs ClickHereToGoTo=Klikšķiniet šeit, lai dotos uz %s YouMustClickToChange=Jums ir Taču vispirms noklikšķiniet uz šīs saites, lai apstiprinātu šo paroles maiņa -ConfirmPasswordChange=Confirm password change +ConfirmPasswordChange=Apstipriniet paroles maiņu ForgetIfNothing=Ja Jums nav lūgt šīs izmaiņas, vienkārši aizmirst šo e-pastu. Jūsu akreditācijas dati tiek glabāti drošībā. IfAmountHigherThan=Ja summa pārsniedz %s SourcesRepository=Repository for sources @@ -264,7 +264,7 @@ ContactCreatedByEmailCollector=Kontaktpersona / adrese, ko izveidojis e-pasta ko ProjectCreatedByEmailCollector=Projekts, ko izveidojis e-pasta savācējs no e-pasta MSGID %s TicketCreatedByEmailCollector=Biļete, ko izveidojis e-pasta kolekcionārs no e-pasta MSGID %s OpeningHoursFormatDesc=Izmantojiet taustiņu -, lai nodalītu darba un aizvēršanas stundas.
Izmantojiet atstarpi, lai ievadītu dažādus diapazonus.
Piemērs: 8.-12 -SuffixSessionName=Suffix for session name +SuffixSessionName=Sesijas nosaukuma sufikss ##### Export ##### ExportsArea=Eksportēšanas sadaļa @@ -290,4 +290,4 @@ PopuProp=Produkti / pakalpojumi pēc popularitātes priekšlikumos PopuCom=Produkti / pakalpojumi pēc popularitātes pasūtījumos ProductStatistics=Produktu/pakalpojumu statistika NbOfQtyInOrders=Daudzums pasūtījumos -SelectTheTypeOfObjectToAnalyze=Select an object to view its statistics... +SelectTheTypeOfObjectToAnalyze=Atlasiet objektu, lai skatītu tā statistiku ... diff --git a/htdocs/langs/lv_LV/partnership.lang b/htdocs/langs/lv_LV/partnership.lang index d9de28dd450..bc720b88482 100644 --- a/htdocs/langs/lv_LV/partnership.lang +++ b/htdocs/langs/lv_LV/partnership.lang @@ -16,66 +16,66 @@ # # Generic # -ModulePartnershipName=Partnership management -PartnershipDescription=Module Partnership management -PartnershipDescriptionLong= Module Partnership management +ModulePartnershipName=Partnerības vadība +PartnershipDescription=Partnerības vadības modulis +PartnershipDescriptionLong= Partnerības vadības modulis -AddPartnership=Add partnership -CancelPartnershipForExpiredMembers=Partnership: Cancel partnership of members with expired subscriptions -PartnershipCheckBacklink=Partnership: Check referring backlink +AddPartnership=Pievienojiet partnerību +CancelPartnershipForExpiredMembers=Partnerība: atceļ partnerību ar abonementiem, kuriem beidzies derīguma termiņš +PartnershipCheckBacklink=Partnerība: pārbaudiet atsauces saiti # # Menu # -NewPartnership=New Partnership -ListOfPartnerships=List of partnership +NewPartnership=Jauna partnerība +ListOfPartnerships=Partnerības saraksts # # Admin page # -PartnershipSetup=Partnership setup -PartnershipAbout=About Partnership -PartnershipAboutPage=Partnership about page -partnershipforthirdpartyormember=Partner status must be set on a 'thirdparty' or a 'member' -PARTNERSHIP_IS_MANAGED_FOR=Partnership managed for -PARTNERSHIP_BACKLINKS_TO_CHECK=Backlinks to check -PARTNERSHIP_NBDAYS_AFTER_MEMBER_EXPIRATION_BEFORE_CANCEL=Nb of days before cancelling status of a partnership when a subscription has expired -ReferingWebsiteCheck=Check of website referring -ReferingWebsiteCheckDesc=You can enable a feature to check that your partners has added a backlink to your website domains on their own website. +PartnershipSetup=Partnerības iestatīšana +PartnershipAbout=Par partnerību +PartnershipAboutPage=Partnerība par lapu +partnershipforthirdpartyormember=Partnera statusam jābūt iestatītam “trešajai pusei” vai “dalībniekam” +PARTNERSHIP_IS_MANAGED_FOR=Partnerattiecības pārvaldītas +PARTNERSHIP_BACKLINKS_TO_CHECK=Atpakaļsaites, lai pārbaudītu +PARTNERSHIP_NBDAYS_AFTER_MEMBER_EXPIRATION_BEFORE_CANCEL=Nb dienas pirms partnerības statusa atcelšanas, kad abonements ir beidzies +ReferingWebsiteCheck=Vietnes atsauces pārbaude +ReferingWebsiteCheckDesc=Varat iespējot funkciju, lai pārbaudītu, vai jūsu partneri ir pievienojuši atpakaļsaišu jūsu vietnes domēniem savā vietnē. # # Object # -DeletePartnership=Delete a partnership -PartnershipDedicatedToThisThirdParty=Partnership dedicated to this third party -PartnershipDedicatedToThisMember=Partnership dedicated to this member +DeletePartnership=Dzēst partnerību +PartnershipDedicatedToThisThirdParty=Partnerība, kas veltīta šai trešajai pusei +PartnershipDedicatedToThisMember=Šim dalībniekam veltīta partnerība DatePartnershipStart=Sākuma datums DatePartnershipEnd=Beigu datums -ReasonDecline=Decline reason -ReasonDeclineOrCancel=Decline reason -PartnershipAlreadyExist=Partnership already exist -ManagePartnership=Manage partnership -BacklinkNotFoundOnPartnerWebsite=Backlink not found on partner website -ConfirmClosePartnershipAsk=Are you sure you want to cancel this partnership? -PartnershipType=Partnership type +ReasonDecline=Noraidīt iemeslu +ReasonDeclineOrCancel=Noraidīt iemeslu +PartnershipAlreadyExist=Partnerattiecības jau pastāv +ManagePartnership=Pārvaldiet partnerību +BacklinkNotFoundOnPartnerWebsite=Atpakaļsaite nav atrasta partnera vietnē +ConfirmClosePartnershipAsk=Vai tiešām vēlaties atcelt šo partnerību? +PartnershipType=Partnerības veids # # Template Mail # -SendingEmailOnPartnershipWillSoonBeCanceled=Partnership will soon be canceled -SendingEmailOnPartnershipRefused=Partnership refused -SendingEmailOnPartnershipAccepted=Partnership accepted -SendingEmailOnPartnershipCanceled=Partnership canceled +SendingEmailOnPartnershipWillSoonBeCanceled=Partnerība drīz tiks atcelta +SendingEmailOnPartnershipRefused=Partnerība atteikta +SendingEmailOnPartnershipAccepted=Partnerība pieņemta +SendingEmailOnPartnershipCanceled=Partnerattiecības atceltas -YourPartnershipWillSoonBeCanceledTopic=Partnership will soon be canceled -YourPartnershipRefusedTopic=Partnership refused -YourPartnershipAcceptedTopic=Partnership accepted -YourPartnershipCanceledTopic=Partnership canceled +YourPartnershipWillSoonBeCanceledTopic=Partnerība drīz tiks atcelta +YourPartnershipRefusedTopic=Partnerība atteikta +YourPartnershipAcceptedTopic=Partnerība pieņemta +YourPartnershipCanceledTopic=Partnerattiecības atceltas -YourPartnershipWillSoonBeCanceledContent=We inform you that your partnership will soon be canceled (Backlink not found) -YourPartnershipRefusedContent=We inform you that your partnership request has been refused. -YourPartnershipAcceptedContent=We inform you that your partnership request has been accepted. -YourPartnershipCanceledContent=We inform you that your partnership has been canceled. +YourPartnershipWillSoonBeCanceledContent=Mēs jūs informējam, ka jūsu partnerība drīz tiks atcelta (atpakaļsaite nav atrasta) +YourPartnershipRefusedContent=Mēs jūs informējam, ka jūsu partnerības pieprasījums ir noraidīts. +YourPartnershipAcceptedContent=Mēs jūs informējam, ka jūsu partnerības pieprasījums ir pieņemts. +YourPartnershipCanceledContent=Mēs jūs informējam, ka jūsu partnerattiecības ir atceltas. # # Status @@ -84,4 +84,4 @@ PartnershipDraft=Melnraksts PartnershipAccepted=Pieņemts PartnershipRefused=Atteikts PartnershipCanceled=Atcelts -PartnershipManagedFor=Partners are +PartnershipManagedFor=Partneri ir diff --git a/htdocs/langs/lv_LV/productbatch.lang b/htdocs/langs/lv_LV/productbatch.lang index 2f03a347eee..7e54bf7debd 100644 --- a/htdocs/langs/lv_LV/productbatch.lang +++ b/htdocs/langs/lv_LV/productbatch.lang @@ -1,10 +1,10 @@ # ProductBATCH language file - Source file is en_US - ProductBATCH ManageLotSerial=Izmantot partijas / sērijas numuru -ProductStatusOnBatch=Yes (lot required) -ProductStatusOnSerial=Yes (unique serial number required) +ProductStatusOnBatch=Jā (nepieciešama partija) +ProductStatusOnSerial=Jā (nepieciešams unikāls sērijas numurs) ProductStatusNotOnBatch=Nav (partija / sērijas numurs netiek izmantots) -ProductStatusOnBatchShort=Lot -ProductStatusOnSerialShort=Serial +ProductStatusOnBatchShort=Daudz +ProductStatusOnSerialShort=Seriāls ProductStatusNotOnBatchShort=Nē Batch=Lot/seriāls atleast1batchfield=Eat-by date or Sell-by date or Lot/Serial number @@ -24,22 +24,22 @@ ProductLotSetup=Moduļu partijas / sērijas uzstādīšana ShowCurrentStockOfLot=Parādīt pašreizējo krājumu par pāris produktu / partiju ShowLogOfMovementIfLot=Rādīt žurnālu par kustību pāriem produktam / partijai StockDetailPerBatch=Krājumu dati par partiju -SerialNumberAlreadyInUse=Serial number %s is already used for product %s -TooManyQtyForSerialNumber=You can only have one product %s for serial number %s -BatchLotNumberingModules=Options for automatic generation of batch products managed by lots -BatchSerialNumberingModules=Options for automatic generation of batch products managed by serial numbers -ManageLotMask=Custom mask -CustomMasks=Adds an option to define mask in the product card -LotProductTooltip=Adds an option in the product card to define a dedicated batch number mask -SNProductTooltip=Adds an option in the product card to define a dedicated serial number mask -QtyToAddAfterBarcodeScan=Qty to add for each barcode/lot/serial scanned -LifeTime=Life span (in days) -EndOfLife=End of life -ManufacturingDate=Manufacturing date -DestructionDate=Destruction date -FirstUseDate=First use date -QCFrequency=Quality control frequency (in days) +SerialNumberAlreadyInUse=Sērijas numurs %s jau tiek izmantots produktam %s +TooManyQtyForSerialNumber=Jums var būt tikai viens produkts %s sērijas numuram %s +BatchLotNumberingModules=Iespējas automātiskai sērijveida produktu ģenerēšanai, ko pārvalda partijas +BatchSerialNumberingModules=Iespējas automātiskai sērijveida produktu ģenerēšanai, kurus pārvalda sērijas numuri +ManageLotMask=Pielāgota maska +CustomMasks=Produkta kartē tiek pievienota iespēja definēt masku +LotProductTooltip=Produkta kartē tiek pievienota opcija, lai noteiktu īpašu partijas numura masku +SNProductTooltip=Produkta kartē tiek pievienota opcija, lai noteiktu īpašu sērijas numura masku +QtyToAddAfterBarcodeScan=Katram skenētajam svītrkodam / partijai / sērijai jāpievieno daudzums +LifeTime=Mūža ilgums (dienās) +EndOfLife=Dzīves beigas +ManufacturingDate=Ražošanas datums +DestructionDate=Iznīcināšanas datums +FirstUseDate=Pirmās lietošanas datums +QCFrequency=Kvalitātes kontroles biežums (dienās) #Traceability - qc status -OutOfOrder=Out of order -InWorkingOrder=In working order +OutOfOrder=Nedarbojas +InWorkingOrder=Darba kārtībā diff --git a/htdocs/langs/lv_LV/products.lang b/htdocs/langs/lv_LV/products.lang index b3ca5f5434a..e5a50f0a6ca 100644 --- a/htdocs/langs/lv_LV/products.lang +++ b/htdocs/langs/lv_LV/products.lang @@ -43,7 +43,7 @@ ServicesOnSaleOnly=Pakalpojumi pārdošanai ServicesOnPurchaseOnly=Pakalpojumi tikai pirkšanai ServicesNotOnSell=Pakalpojumi, kas nav paredzēti pārdošanai un nav paredzēti pirkšanai ServicesOnSellAndOnBuy=Services for sale and for purchase -LastModifiedProductsAndServices=Latest %s products/services which were modified +LastModifiedProductsAndServices=Jaunākie %s produkti / pakalpojumi, kas tika modificēti LastRecordedProducts=Jaunākie ieraksti %s LastRecordedServices=Jaunākie %s reģistrētie pakalpojumi CardProduct0=Produkts @@ -73,12 +73,12 @@ SellingPrice=Pārdošanas cena SellingPriceHT=Pārdošanas cena (bez nodokļa) SellingPriceTTC=Pārdošanas cena (ar PVN) SellingMinPriceTTC=Minimālā pārdošanas cena (ieskaitot nodokli) -CostPriceDescription=This price field (excl. tax) can be used to capture the average amount this product costs to your company. It may be any price you calculate yourself, for example, from the average buying price plus average production and distribution cost. +CostPriceDescription=Šo cenu lauku (bez nodokļiem) var izmantot, lai attēlotu vidējo summu, ko šis produkts izmaksā jūsu uzņēmumam. Tā var būt jebkura cena, kuru pats aprēķināt, piemēram, no vidējās pirkšanas cenas plus vidējās ražošanas un izplatīšanas izmaksas. CostPriceUsage=Šo vērtību var izmantot, lai aprēķinātu peļņu. SoldAmount=Pārdošanas apjoms PurchasedAmount=Iegādātā summa NewPrice=Jaunā cena -MinPrice=Min. selling price +MinPrice=Min. pārdošanas cena EditSellingPriceLabel=Labot pārdošanas cenas nosaukumu CantBeLessThanMinPrice=Pārdošanas cena nevar būt zemāka par minimālo pieļaujamo šī produkta (%s bez PVN). Šis ziņojums var būt arī parādās, ja esat ievadījis pārāk lielu atlaidi. ContractStatusClosed=Slēgts @@ -141,7 +141,7 @@ VATRateForSupplierProduct=PVN likme (šim pārdevējam / produktam) DiscountQtyMin=Atlaide šim daudzumam. NoPriceDefinedForThisSupplier=Šim pārdevējam / produktam nav noteikta cena / daudzums NoSupplierPriceDefinedForThisProduct=Šim produktam nav noteikta pārdevēja cena / daudzums -PredefinedItem=Predefined item +PredefinedItem=Iepriekš definēts vienums PredefinedProductsToSell=Iepriekš definēts produkts PredefinedServicesToSell=Iepriekš definēts pakalpojums PredefinedProductsAndServicesToSell=Iepriekš definēti produkti/pakalpojumi, kurus pārdot @@ -157,11 +157,11 @@ ListServiceByPopularity=Pakalpojumu saraksts pēc pārdošanas popularitātes Finished=Ražota prece RowMaterial=Izejviela ConfirmCloneProduct=Vai jūs tiešām vēlaties klonēt šo produktu vai pakalpojumu %s? -CloneContentProduct=Clone all main information of the product/service +CloneContentProduct=Klonējiet visu galveno informāciju par produktu / pakalpojumu ClonePricesProduct=Klonēt cenas -CloneCategoriesProduct=Clone linked tags/categories -CloneCompositionProduct=Clone virtual products/services -CloneCombinationsProduct=Clone the product variants +CloneCategoriesProduct=Klonējiet saistītos tagus / kategorijas +CloneCompositionProduct=Klonējiet virtuālos produktus / pakalpojumus +CloneCombinationsProduct=Klonējiet produktu variantus ProductIsUsed=Šis produkts tiek izmantots NewRefForClone=Ref. jaunu produktu / pakalpojumu SellingPrices=Pārdošanas cenas @@ -170,12 +170,12 @@ CustomerPrices=Klienta cenas SuppliersPrices=Pārdevēja cenas SuppliersPricesOfProductsOrServices=Pārdevēja cenas (produktiem vai pakalpojumiem) CustomCode=Muita | prece | HS kods -CountryOrigin=Country of origin -RegionStateOrigin=Region of origin -StateOrigin=State|Province of origin -Nature=Nature of product (raw/manufactured) +CountryOrigin=Izcelsmes valsts +RegionStateOrigin=Izcelsmes reģions +StateOrigin=Valsts | Izcelsmes province +Nature=Produkta veids (neapstrādāts / ražots) NatureOfProductShort=Produkta veids -NatureOfProductDesc=Raw material or manufactured product +NatureOfProductDesc=Izejviela vai ražots produkts ShortLabel=Īsais nosaukums Unit=Vienība p=u. @@ -277,7 +277,7 @@ PriceByCustomer=Dažādas cenas katram klientam PriceCatalogue=Viena produkta/pakalpojuma pārdošanas cena PricingRule=Noteikumi par pārdošanas cenām AddCustomerPrice=Pievienot cenu katram klientam -ForceUpdateChildPriceSoc=Iestatiet to pašu cenu klientu meitasuzņēmumiem +ForceUpdateChildPriceSoc=Nosakiet to pašu cenu klienta meitasuzņēmumiem PriceByCustomerLog=Log of previous customer prices MinimumPriceLimit=Minimum price can't be lower then %s MinimumRecommendedPrice=Minimālā ieteicamā cena ir: %s @@ -296,6 +296,7 @@ ComposedProductIncDecStock=Increase/Decrease stock on parent change ComposedProduct=Apakš produkti MinSupplierPrice=Minimālā iepirkuma cena MinCustomerPrice=Minimālā pārdošanas cena +NoDynamicPrice=Nav dinamiskas cenas DynamicPriceConfiguration=Dynamic price configuration DynamicPriceDesc=Jūs varat noteikt matemātiskās formulas, lai aprēķinātu Klienta vai pārdevēja cenas. Šādas formulas var izmantot visus matemātiskos operatorus, dažas konstantes un mainīgos. Šeit varat definēt mainīgos, kurus vēlaties izmantot. Ja mainīgajam nepieciešams automātisks atjauninājums, varat definēt ārējo URL, lai Dolibarr varētu automātiski atjaunināt vērtību. AddVariable=Pievienot mainīgo @@ -314,7 +315,7 @@ LastUpdated=Pēdējo reizi atjaunots CorrectlyUpdated=Pareizi atjaunināts PropalMergePdfProductActualFile=Files use to add into PDF Azur are/is PropalMergePdfProductChooseFile=Izvēlieties PDF failus -IncludingProductWithTag=Include products/services with tag +IncludingProductWithTag=Iekļaujiet produktus / pakalpojumus ar tagu DefaultPriceRealPriceMayDependOnCustomer=Noklusējuma cena, reālā cena var būt atkarīga no klienta WarningSelectOneDocument=Please select at least one document DefaultUnitToShow=Vienība diff --git a/htdocs/langs/lv_LV/projects.lang b/htdocs/langs/lv_LV/projects.lang index 19f959ab524..0391b4e8434 100644 --- a/htdocs/langs/lv_LV/projects.lang +++ b/htdocs/langs/lv_LV/projects.lang @@ -10,19 +10,19 @@ PrivateProject=Projekta kontakti ProjectsImContactFor=Projekti, par kuriem tieši esmu kontaktpersona AllAllowedProjects=All project I can read (mine + public) AllProjects=Visi projekti -MyProjectsDesc=This view is limited to the projects that you are a contact for +MyProjectsDesc=Šis skats attiecas tikai uz projektiem, ar kuriem esat kontaktpersona ProjectsPublicDesc=Šo viedokli iepazīstina visus projektus jums ir atļauts lasīt. TasksOnProjectsPublicDesc=This view presents all tasks on projects you are allowed to read. ProjectsPublicTaskDesc=This view presents all projects and tasks you are allowed to read. ProjectsDesc=Šo viedokli iepazīstina visus projektus (jūsu lietotāja atļaujas piešķirt jums atļauju skatīt visu). TasksOnProjectsDesc=Šis skats atspoguļo visus uzdevumus visos projektos (jūsu lietotāja atļaujas piešķir jums atļauju apskatī visu). -MyTasksDesc=This view is limited to the projects or tasks that you are a contact for +MyTasksDesc=Šis skats attiecas tikai uz projektiem vai uzdevumiem, ar kuriem esat kontaktpersona OnlyOpenedProject=Only open projects are visible (projects in draft or closed status are not visible). ClosedProjectsAreHidden=Slēgtie projekti nav redzami. TasksPublicDesc=Šo viedokli iepazīstina visus projektus un uzdevumus, jums ir atļauts lasīt. TasksDesc=Šo viedokli iepazīstina visus projektus un uzdevumus (jūsu lietotāja atļaujas piešķirt jums atļauju skatīt visu). AllTaskVisibleButEditIfYouAreAssigned=Visi uzdevumi kvalificētiem projektiem ir redzami, taču jūs varat ievadīt laiku tikai tam uzdevumam, kas piešķirts izvēlētajam lietotājam. Piešķirt uzdevumu, ja uz to ir jāievada laiks. -OnlyYourTaskAreVisible=Only tasks assigned to you are visible. If you need to enter time on a task and if the task is not visible here, then you need to assign the task to yourself. +OnlyYourTaskAreVisible=Ir redzami tikai jums piešķirtie uzdevumi. Ja jums jāievada uzdevuma izpildes laiks un ja uzdevums šeit nav redzams, jums tas jāpiešķir sev. ImportDatasetTasks=Projektu uzdevumi ProjectCategories=Projekta tagi / sadaļas NewProject=Jauns projekts @@ -89,7 +89,7 @@ TimeConsumed=Patērēts ListOfTasks=Uzdevumu saraksts GoToListOfTimeConsumed=Pāriet uz patērētā laika sarakstu GanttView=Ganta skats -ListWarehouseAssociatedProject=List of warehouses associated to the project +ListWarehouseAssociatedProject=Ar projektu saistīto noliktavu saraksts ListProposalsAssociatedProject=Ar projektu saistīto komerciālo priekšlikumu saraksts ListOrdersAssociatedProject=Ar projektu saistīto pārdošanas pasūtījumu saraksts ListInvoicesAssociatedProject=Saraksts ar klienta rēķiniem, kas saistīti ar projektu @@ -202,7 +202,7 @@ ResourceNotAssignedToTheTask=Uzdevumam nav piešķirts NoUserAssignedToTheProject=Neviens lietotājs nav piešķirts šim projektam TimeSpentBy=Pavadītais laiks TasksAssignedTo=Uzdevumi, kas piešķirti -AssignTaskToMe=Assign task to myself +AssignTaskToMe=Piešķiriet sev uzdevumu AssignTaskToUser=Piešķirt uzdevumu %s SelectTaskToAssign=Atlasiet uzdevumu, lai piešķirtu ... AssignTask=Piešķirt @@ -267,11 +267,11 @@ InvoiceToUse=Izmantojamais rēķina projekts NewInvoice=Jauns rēķins OneLinePerTask=Viena rinda katram uzdevumam OneLinePerPeriod=Viena rindiņa vienam periodam -OneLinePerTimeSpentLine=One line for each time spent declaration +OneLinePerTimeSpentLine=Viena rinda par katru pavadīto deklarāciju RefTaskParent=Ref. Vecāku uzdevums ProfitIsCalculatedWith=Peļņa tiek aprēķināta, izmantojot -AddPersonToTask=Add also to tasks -UsageOrganizeEvent=Usage: Event Organization -PROJECT_CLASSIFY_CLOSED_WHEN_ALL_TASKS_DONE=Classify project as closed when all its tasks are completed (100%% progress) -PROJECT_CLASSIFY_CLOSED_WHEN_ALL_TASKS_DONE_help=Note: existing projects with all tasks at 100 %% progress won't be affected: you will have to close them manually. This option only affects open projects. -SelectLinesOfTimeSpentToInvoice=Select lines of time spent that are unbilled, then bulk action "Generate Invoice" to bill them +AddPersonToTask=Pievienojiet arī uzdevumiem +UsageOrganizeEvent=Lietošana: Pasākumu organizēšana +PROJECT_CLASSIFY_CLOSED_WHEN_ALL_TASKS_DONE=Klasificējiet projektu kā slēgtu, kad visi tā uzdevumi ir izpildīti (progress 100%%) +PROJECT_CLASSIFY_CLOSED_WHEN_ALL_TASKS_DONE_help=Piezīme: esošie projekti ar visiem 100%% uzdevumiem netiks ietekmēti: tie būs jāaizver manuāli. Šī opcija ietekmē tikai atvērtos projektus. +SelectLinesOfTimeSpentToInvoice=Atlasiet pavadītās laika rindas, kas nav izrakstītas, un pēc tam veiciet lielapjoma darbību “Ģenerēt rēķinu”, lai par tām izrakstītu rēķinus diff --git a/htdocs/langs/lv_LV/propal.lang b/htdocs/langs/lv_LV/propal.lang index 868562cdf15..ae0c9ace708 100644 --- a/htdocs/langs/lv_LV/propal.lang +++ b/htdocs/langs/lv_LV/propal.lang @@ -59,7 +59,7 @@ ConfirmClonePropal=Vai tiešām vēlaties klonēt komerciālo priekšlikumu ConfirmReOpenProp=Are you sure you want to open back the commercial proposal %s? ProposalsAndProposalsLines=Commercial priekšlikumu un līnijas ProposalLine=Priekšlikuma līnija -ProposalLines=Proposal lines +ProposalLines=Priekšlikuma rindas AvailabilityPeriod=Pieejamība kavēšanās SetAvailability=Uzstādīt pieejamību kavēšanos AfterOrder=pēc pasūtījuma diff --git a/htdocs/langs/lv_LV/receptions.lang b/htdocs/langs/lv_LV/receptions.lang index 8c62d5199b5..42d3e64e35a 100644 --- a/htdocs/langs/lv_LV/receptions.lang +++ b/htdocs/langs/lv_LV/receptions.lang @@ -44,4 +44,4 @@ ValidateOrderFirstBeforeReception=Vispirms jums ir jāapstiprina pasūtījums, l ReceptionsNumberingModules=Pieņemšanas numurēšanas modulis ReceptionsReceiptModel=Pieņemšanas dokumentu veidnes NoMorePredefinedProductToDispatch=Vairs nav iepriekš nosūtītu produktu -ReceptionExist=A reception exists +ReceptionExist=Reģistratūra pastāv diff --git a/htdocs/langs/lv_LV/recruitment.lang b/htdocs/langs/lv_LV/recruitment.lang index 40957c1b2df..d85ea93e206 100644 --- a/htdocs/langs/lv_LV/recruitment.lang +++ b/htdocs/langs/lv_LV/recruitment.lang @@ -72,5 +72,5 @@ YourCandidatureAnswerMessage=Paldies par jūsu pieteikumu.
... JobClosedTextCandidateFound=Darba vieta ir slēgta. Amats ir aizpildīts. JobClosedTextCanceled=Darba vieta ir slēgta. ExtrafieldsJobPosition=Papildu atribūti (amata vietas) -ExtrafieldsApplication=Complementary attributes (job applications) +ExtrafieldsApplication=Papildu atribūti (darba pieteikumi) MakeOffer=Uztaisīt piedāvājumu diff --git a/htdocs/langs/lv_LV/salaries.lang b/htdocs/langs/lv_LV/salaries.lang index 816227ad4cb..711751a30b5 100644 --- a/htdocs/langs/lv_LV/salaries.lang +++ b/htdocs/langs/lv_LV/salaries.lang @@ -2,12 +2,15 @@ SALARIES_ACCOUNTING_ACCOUNT_PAYMENT=Grāmatvedības konts, ko izmanto trešām pusēm SALARIES_ACCOUNTING_ACCOUNT_PAYMENT_Desc=Lietotāja kartē norādītais grāmatvedības konts tiks izmantots tikai pakārtotajam grāmatvedim. Šis viens tiks izmantots General Ledger un noklusējuma vērtība Subledged grāmatvedībai, ja lietotāja definēts lietotāju grāmatvedības konts nav definēts. SALARIES_ACCOUNTING_ACCOUNT_CHARGE=Grāmatvedības konts pēc noklusējuma algu maksājumiem +CREATE_NEW_SALARY_WITHOUT_AUTO_PAYMENT=Pēc noklusējuma, veidojot algu, atstājiet tukšu opciju "Automātiski izveidot kopējo maksājumu" Salary=Alga Salaries=Algas -NewSalaryPayment=Jauna algas izmaksa +NewSalary=Jauna alga +NewSalaryPayment=Jauna algas karte AddSalaryPayment=Pievienot algas maksājumu SalaryPayment=Algas maksājums SalariesPayments=Algu maksājumi +SalariesPaymentsOf=Algas maksājumi %s ShowSalaryPayment=Rādīt algu maksājumus THM=Vidējā stundas cena TJM=Vidējā dienas likme diff --git a/htdocs/langs/lv_LV/sendings.lang b/htdocs/langs/lv_LV/sendings.lang index ae1c4042f5d..af79dcd83ee 100644 --- a/htdocs/langs/lv_LV/sendings.lang +++ b/htdocs/langs/lv_LV/sendings.lang @@ -43,7 +43,7 @@ ConfirmValidateSending=Vai jūs tiešām vēlaties apstiprināt šo sūtījumu a ConfirmCancelSending=Vai esat pārliecināts, ka vēlaties atcelt šo sūtījumu? DocumentModelMerou=Merou A5 modelis WarningNoQtyLeftToSend=Uzmanību, nav produktu kuri gaida nosūtīšanu. -StatsOnShipmentsOnlyValidated=Statistics are only for validated shipments. Date used is the date of validation of shipment (planned delivery date is not always known) +StatsOnShipmentsOnlyValidated=Statistika attiecas tikai uz apstiprinātiem sūtījumiem. Izmantotais datums ir sūtījuma apstiprināšanas datums (plānotais piegādes datums ne vienmēr ir zināms) DateDeliveryPlanned=Plānotais piegādes datums RefDeliveryReceipt=Ref piegādes kvīts StatusReceipt=Piegādes kvīts statuss diff --git a/htdocs/langs/lv_LV/stocks.lang b/htdocs/langs/lv_LV/stocks.lang index f6c3d4166fe..e3a3f3764a0 100644 --- a/htdocs/langs/lv_LV/stocks.lang +++ b/htdocs/langs/lv_LV/stocks.lang @@ -19,8 +19,8 @@ Stock=Krājums Stocks=Krājumi MissingStocks=Trūkst krājumu StockAtDate=Krājumi datumā -StockAtDateInPast=Date in the past -StockAtDateInFuture=Date in the future +StockAtDateInPast=Datums pagātnē +StockAtDateInFuture=Datums nākotnē StocksByLotSerial=Krājumi pēc partijas/sērijas LotSerial=Daudz / sērijas nr LotSerialList=Partijas saraksts / sērijas nr @@ -37,8 +37,8 @@ AllWarehouses=Visas noliktavas IncludeEmptyDesiredStock=Iekļaujiet arī negatīvo krājumu ar nenoteiktu vēlamo krājumu IncludeAlsoDraftOrders=Iekļaujiet arī pasūtījumu projektus Location=Vieta -LocationSummary=Short name of location -NumberOfDifferentProducts=Number of unique products +LocationSummary=Īss atrašanās vietas nosaukums +NumberOfDifferentProducts=Unikālo produktu skaits NumberOfProducts=Kopējais produktu skaits LastMovement=Pēdējā pārvietošana LastMovements=Pēdējās pārvietošanas @@ -60,8 +60,8 @@ EnhancedValueOfWarehouses=Noliktavas vērtība UserWarehouseAutoCreate=Lietotāja noliktavas izveide, izveidojot lietotāju AllowAddLimitStockByWarehouse=Pārvaldiet arī minimālā un vēlamā krājuma vērtību pārī (produkta noliktava), papildus minimālā un vēlamā krājuma vērtībai vienam produktam RuleForWarehouse=Noteikumi noliktavām -WarehouseAskWarehouseOnThirparty=Set a warehouse on third-party -WarehouseAskWarehouseDuringPropal=Set a warehouse on Commercial proposals +WarehouseAskWarehouseOnThirparty=Iestatiet noliktavu trešajām pusēm +WarehouseAskWarehouseDuringPropal=Iestatiet komerciālu priekšlikumu noliktavu WarehouseAskWarehouseDuringOrder=Iestatiet noliktavu pārdošanas pasūtījumiem UserDefaultWarehouse=Iestatiet noliktavu lietotājiem MainDefaultWarehouse=Noklusētā noliktava @@ -89,23 +89,23 @@ NoPredefinedProductToDispatch=Nav iepriekš produktu šo objektu. Līdz ar to na DispatchVerb=Nosūtīšana StockLimitShort=Brīdinājuma limits StockLimit=Krājumu brīdinājuma limits -StockLimitDesc=(empty) means no warning.
0 can be used to trigger a warning as soon as the stock is empty. +StockLimitDesc=(tukšs) nozīmē, ka nav brīdinājuma.
0 var izmantot, lai aktivizētu brīdinājumu, tiklīdz krājums ir tukšs. PhysicalStock=Fiziskais krājums RealStock=Rālie krājumi RealStockDesc=Fiziskā / reālā krājumi ir krājumi, kas pašlaik atrodas noliktavās. RealStockWillAutomaticallyWhen=Reālais krājums tiks mainīts saskaņā ar šo noteikumu (kā noteikts Stock modulī): VirtualStock=Virtuālie krājumi VirtualStockAtDate=Virtuālais krājums datumā -VirtualStockAtDateDesc=Virtual stock once all the pending orders that are planned to be processed before the chosen date will be finished +VirtualStockAtDateDesc=Virtuālais krājums, kad tiks pabeigti visi neapstiprinātie pasūtījumi, kurus plānots apstrādāt pirms izvēlētā datuma VirtualStockDesc=Virtuālais krājums ir aprēķinātais krājums, kas pieejams, kad visas atvērtās / neapstiprinātās darbības (kas ietekmē krājumus) ir aizvērtas (saņemti pirkumu pasūtījumi, nosūtīti pārdošanas pasūtījumi, saražoti ražošanas pasūtījumi utt.) -AtDate=At date +AtDate=Datumā IdWarehouse=Id noliktava DescWareHouse=Apraksts noliktava LieuWareHouse=Lokālā noliktava WarehousesAndProducts=Noliktavas un produkti WarehousesAndProductsBatchDetail=Noliktavas un produkti (ar informāciju par partiju/sēriju) AverageUnitPricePMPShort=Vidējā svērtā cena -AverageUnitPricePMPDesc=The input average unit price we had to expense to get 1 unit of product into our stock. +AverageUnitPricePMPDesc=Ievadītā vidējā vienības cena, kas mums bija jātērē, lai iegūtu 1 produkta vienību mūsu krājumos. SellPriceMin=Pārdošanas Vienības cena EstimatedStockValueSellShort=Pārdošanas cena EstimatedStockValueSell=Pārdošanas cena @@ -145,7 +145,7 @@ Replenishments=Papildinājumus NbOfProductBeforePeriod=Produktu daudzums %s noliktavā pirms izvēlētā perioda (< %s) NbOfProductAfterPeriod=Produktu daudzums %s krājumā pēc izvēlētā perioda (>%s) MassMovement=Masveida pārvietošana -SelectProductInAndOutWareHouse=Select a source warehouse and a target warehouse, a product and a quantity then click "%s". Once this is done for all required movements, click on "%s". +SelectProductInAndOutWareHouse=Atlasiet avota noliktavu un mērķa noliktavu, produktu un daudzumu, pēc tam noklikšķiniet uz "%s". Kad tas ir izdarīts visām nepieciešamajām kustībām, noklikšķiniet uz "%s". RecordMovement=Ierakstīt pārvietošanu ReceivingForSameOrder=Receipts for this order StockMovementRecorded=Krājumu pārvietošana saglabāta @@ -154,7 +154,7 @@ StockMustBeEnoughForInvoice=Krājumu līmenim ir jābūt pietiekamam, lai produk StockMustBeEnoughForOrder=Krājuma līmenim ir jābūt pietiekamam, lai produktu / pakalpojumu pasūtītam pēc pasūtījuma (pārbaudiet, vai pašreizējā reālā krājumā tiek pievienota rinda, lai kāds būtu noteikums automātiskai krājumu maiņai). StockMustBeEnoughForShipment= Krājumu līmenim ir jābūt pietiekamam, lai produktu / pakalpojumu nosūtītu sūtījumam (pārbaudiet pašreizējo reālo krājumu, pievienojot līniju sūtījumā neatkarīgi no automātiskās krājumu maiņas) MovementLabel=Kustības marķējums -TypeMovement=Direction of movement +TypeMovement=Kustības virziens DateMovement=Pārvietošanas datums InventoryCode=Movement or inventory code IsInPackage=Contained into package @@ -167,8 +167,8 @@ MovementTransferStock=Stock transfer of product %s into another warehouse InventoryCodeShort=Inv./Mov. code NoPendingReceptionOnSupplierOrder=Nav atvērta saņemšanas, jo atvērts pirkuma pasūtījums ThisSerialAlreadyExistWithDifferentDate=This lot/serial number (%s) already exists but with different eatby or sellby date (found %s but you enter %s). -OpenAll=Atvērt visām darbībām -OpenInternal=Atveras tikai iekšējām darbībām +OpenAnyMovement=Atvērt (visas kustības) +OpenInternal=Atvērta (tikai iekšēja kustība) UseDispatchStatus=Izmantojiet nosūtīšanas statusu (apstipriniet / noraidiet) produktu līnijām pirkuma pasūtījuma saņemšanā OptionMULTIPRICESIsOn=Ir ieslēgta opcija "vairākas cenas par segmentu". Tas nozīmē, ka produktam ir vairākas pārdošanas cenas, tāpēc pārdošanas vērtību nevar aprēķināt ProductStockWarehouseCreated=Brīdinājuma krājuma limits un pareizi izveidots vēlamais optimālais krājums @@ -183,7 +183,7 @@ inventoryCreatePermission=Izveidot jaunu inventāru inventoryReadPermission=Skatīt krājumus inventoryWritePermission=Atjaunināt krājumus inventoryValidatePermission=Pārbaudīt inventāru -inventoryDeletePermission=Delete inventory +inventoryDeletePermission=Dzēst krājumus inventoryTitle=Inventārs inventoryListTitle=Inventāri inventoryListEmpty=Netiek veikta neviena inventarizācija @@ -236,23 +236,23 @@ StockIsRequiredToChooseWhichLotToUse=Lai izvēlētos izmantojamo partiju, ir nep ForceTo=Piespiest līdz AlwaysShowFullArbo=Parādiet pilnu noliktavas koku uznirstošajās noliktavu saitēs (Brīdinājums: tas var dramatiski samazināt veiktspēju) StockAtDatePastDesc=Šeit varat apskatīt krājumus (reālos krājumus) noteiktā datumā pagātnē -StockAtDateFutureDesc=You can view here the stock (virtual stock) at a given date in the future +StockAtDateFutureDesc=Šeit varat apskatīt akcijas (virtuālās akcijas) noteiktā datumā nākotnē CurrentStock=Pašreizējais krājums InventoryRealQtyHelp=Iestatiet vērtību 0, lai atiestatītu daudzumu
. Saglabājiet lauku tukšu vai noņemiet līniju, lai paliktu nemainīgs -UpdateByScaning=Fill real qty by scaning +UpdateByScaning=Aizpildiet reālo daudzumu, skenējot UpdateByScaningProductBarcode=Atjaunināšana, skenējot (produkta svītrkods) UpdateByScaningLot=Atjaunināt, skenējot (partija | sērijas svītrkods) DisableStockChangeOfSubProduct=Deaktivizējiet krājumu maiņu visiem šī komplekta apakšproduktiem šīs kustības laikā. -ImportFromCSV=Import CSV list of movement -ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... -SelectAStockMovementFileToImport=select a stock movement file to import -InfoTemplateImport=Uploaded file needs to have this format (* are mandatory fields):
Source Warehouse* | Target Warehouse* | Product* | Quantity* | Lot/serial number
CSV character separator must be "%s" -LabelOfInventoryMovemement=Inventory %s +ImportFromCSV=Importēt CSV kustību sarakstu +ChooseFileToImport=Augšupielādējiet failu, pēc tam noklikšķiniet uz ikonas %s, lai atlasītu failu kā avota importēšanas failu ... +SelectAStockMovementFileToImport=atlasiet importējamo krājumu kustības failu +InfoTemplateImport=Augšupielādētajam failam ir jābūt šādam formātam (* ir obligāti aizpildāmi lauki):
Avota noliktava * | Mērķa noliktava * | Produkts * | Daudzums * | Partijas / sērijas numuram
CSV rakstzīmju atdalītājam jābūt " %s " +LabelOfInventoryMovemement=Inventārs %s ReOpen=Atvērt pa jaunu -ConfirmFinish=Do you confirm the closing of the inventory ? This will generate all stock movements to update your stock to the real qty you entered into the inventory. -ObjectNotFound=%s not found -MakeMovementsAndClose=Generate movements and close -AutofillWithExpected=Fill real quantity with expected quantity -ShowAllBatchByDefault=By default, show batch details on product "stock" tab -CollapseBatchDetailHelp=You can set batch detail default display in stocks module configuration -FieldCannotBeNegative=Field "%s" cannot be negative +ConfirmFinish=Vai jūs apstiprināt inventāra slēgšanu? Tas ģenerēs visas krājumu kustības, lai atjauninātu krājumus līdz reālajam daudzumam, kuru ievadījāt krājumā. +ObjectNotFound=%s nav atrasts +MakeMovementsAndClose=Ģenerējiet kustības un aizveriet +AutofillWithExpected=Aizpildiet reālo daudzumu ar paredzamo daudzumu +ShowAllBatchByDefault=Pēc noklusējuma parādīt partijas informāciju cilnē “Akciju” +CollapseBatchDetailHelp=Krājumu moduļa konfigurācijā varat iestatīt partijas detaļu noklusējuma attēlojumu +FieldCannotBeNegative=Lauks "%s" nevar būt negatīvs diff --git a/htdocs/langs/lv_LV/supplier_proposal.lang b/htdocs/langs/lv_LV/supplier_proposal.lang index a092448a3fc..cffb1a4b837 100644 --- a/htdocs/langs/lv_LV/supplier_proposal.lang +++ b/htdocs/langs/lv_LV/supplier_proposal.lang @@ -13,6 +13,7 @@ SupplierProposalArea=Pārdevēju piedāvājumu apgabals SupplierProposalShort=Pārdevēja piedāvājums SupplierProposals=Pārdevēja priekšlikumi SupplierProposalsShort=Pārdevēja priekšlikumi +AskPrice=Cenas pieprasījums NewAskPrice=Jauns cenas pieprasījums ShowSupplierProposal=Rādīt cenas pieprasījumu AddSupplierProposal=Izveidot cenas pieprasījumu @@ -52,3 +53,6 @@ SupplierProposalsToClose=Pārdevēja priekšlikumi slēgt SupplierProposalsToProcess=Pārdevēja priekšlikumi apstrādāt LastSupplierProposals=Jaunākie %s cenu pieprasījumi AllPriceRequests=Visi pieprasījumi +TypeContact_supplier_proposal_external_SHIPPING=Piegādes gadījumā sazinieties ar pārdevēja kontaktu +TypeContact_supplier_proposal_external_BILLING=Pārdevēja kontaktpersona norēķinu veikšanai +TypeContact_supplier_proposal_external_SERVICE=Pārstāvis turpinot darboties priekšlikums diff --git a/htdocs/langs/lv_LV/ticket.lang b/htdocs/langs/lv_LV/ticket.lang index 9d71f3f79b6..72e4141fcde 100644 --- a/htdocs/langs/lv_LV/ticket.lang +++ b/htdocs/langs/lv_LV/ticket.lang @@ -34,7 +34,8 @@ TicketDictResolution=Biļete - izšķirtspēja TicketTypeShortCOM=Tirdzniecības jautājums TicketTypeShortHELP=Funkcionālās palīdzības pieprasījums -TicketTypeShortISSUE=Izdošana, kļūda vai problēma +TicketTypeShortISSUE=Izdevums vai kļūda +TicketTypeShortPROBLEM=Problēma TicketTypeShortREQUEST=Mainīt vai uzlabot pieprasījumu TicketTypeShortPROJET=Projekts TicketTypeShortOTHER=Cits @@ -54,14 +55,15 @@ TypeContact_ticket_internal_SUPPORTTEC=Piešķirtais lietotājs TypeContact_ticket_external_SUPPORTCLI=Klientu kontaktu / incidentu izsekošana TypeContact_ticket_external_CONTRIBUTOR=Ārējais ieguldītājs -OriginEmail=E-pasta avots +OriginEmail=E-pasta reportieris Notify_TICKET_SENTBYMAIL=Sūtīt biļeti pa e-pastu # Status Read=Lasīt Assigned=Piešķirts InProgress=Procesā -NeedMoreInformation=Gaida informāciju +NeedMoreInformation=Gaida reportiera atsauksmes +NeedMoreInformationShort=Gaida atsauksmes Answered=Atbildēts Waiting=Gaida Closed=Slēgts @@ -70,8 +72,8 @@ Deleted=Dzēsts # Dict Type=Veids Severity=Smagums -TicketGroupIsPublic=Group is public -TicketGroupIsPublicDesc=If a ticket group is public, it will be visible in the form when creating a ticket from the public interface +TicketGroupIsPublic=Grupa ir publiska +TicketGroupIsPublicDesc=Ja biļešu grupa ir publiska, tā būs redzama formā, veidojot biļeti no publiskās saskarnes # Email templates MailToSendTicketMessage=Lai nosūtītu e-pastu no pieteikuma @@ -116,8 +118,8 @@ TicketsShowModuleLogo=Parādiet moduļa logotipi publiskajā saskarnē TicketsShowModuleLogoHelp=Iespējojiet šo opciju, lai slēptu logotipa moduli publiskās saskarnes lapās TicketsShowCompanyLogo=Parādīt uzņēmuma logotipi publiskā saskarnē TicketsShowCompanyLogoHelp=Iespējojiet šo opciju, lai slēptu galvenā uzņēmuma logotipi publiskās saskarnes lapās -TicketsEmailAlsoSendToMainAddress=Also send a notification to the main email address -TicketsEmailAlsoSendToMainAddressHelp=Enable this option to also send an email to the address defined into setup "%s" (see tab "%s") +TicketsEmailAlsoSendToMainAddress=Nosūtiet arī paziņojumu uz galveno e-pasta adresi +TicketsEmailAlsoSendToMainAddressHelp=Iespējojiet šo opciju, lai nosūtītu e-pastu arī uz adresi, kas definēta iestatījumā "%s" (skatiet cilni "%s"). TicketsLimitViewAssignedOnly=Ierobežot displeju līdz pašreizējam lietotājam piešķirtajām biļetēm (nav efektīvs ārējiem lietotājiem, vienmēr ierobežojiet to ar trešo personu, kurai tie ir atkarīgi) TicketsLimitViewAssignedOnlyHelp=Tiks redzamas tikai pašreizējam lietotājam piešķirtās biļetes. Neattiecas uz lietotāju ar biļešu pārvaldīšanas tiesībām. TicketsActivatePublicInterface=Aktivizēt publisko saskarni @@ -128,10 +130,10 @@ TicketNumberingModules=Čeku numerācijas modulis TicketsModelModule=Biļešu dokumentu veidnes TicketNotifyTiersAtCreation=Paziņot trešajai pusei radīšanas laikā TicketsDisableCustomerEmail=Vienmēr atspējojiet e-pasta ziņojumus, ja biļete tiek veidota no publiskās saskarnes -TicketsPublicNotificationNewMessage=Send email(s) when a new message/comment is added to a ticket +TicketsPublicNotificationNewMessage=Sūtīt e-pastu (-us), kad biļetei tiek pievienots jauns ziņojums / komentārs TicketsPublicNotificationNewMessageHelp=Sūtiet e-pastu (s), kad no publiskās saskarnes tiek pievienots jauns ziņojums (piešķirtajam lietotājam vai paziņojumu e-pastu uz (atjaunināt) un / vai paziņojumu e-pastu uz) TicketPublicNotificationNewMessageDefaultEmail=Paziņojumu e-pasts adresātam (atjaunināt) -TicketPublicNotificationNewMessageDefaultEmailHelp=Send an email to this address for each new message notifications if the ticket doesn't have a user assigned to it or if the user doesn't have any known email. +TicketPublicNotificationNewMessageDefaultEmailHelp=Nosūtiet e-pastu uz šo adresi par katru jaunu ziņojumu paziņojumu, ja biļetei nav piešķirts lietotājs vai ja lietotājam nav zināms e-pasts. # # Index & list page # @@ -160,7 +162,7 @@ CreatedBy=Izveidojis NewTicket=Jauns notikums SubjectAnswerToTicket=Pieteikuma atbilde TicketTypeRequest=Pieprasījuma veids -TicketCategory=Grupa +TicketCategory=Biļešu kategorizēšana SeeTicket=Apskatīt pieteikumu TicketMarkedAsRead=Pieteikums ir atzīmēts kā lasīts TicketReadOn=Izlasīts @@ -211,6 +213,7 @@ TicketMessageHelp=Tikai šis teksts tiks saglabāts ziņojumu sarakstā uz biļe TicketMessageSubstitutionReplacedByGenericValues=Mainīšanas mainīgos aizstāj ar vispārējām vērtībām. TimeElapsedSince=Laiks pagājis kopš TicketTimeToRead=Laiks, kas pagājis pirms izlasīšanas +TicketTimeElapsedBeforeSince=Laiks, kas pagājis pirms / kopš TicketContacts=Kontakti biļete TicketDocumentsLinked=Ar biļeti saistītie dokumenti ConfirmReOpenTicket=Vai apstiprināt atkārtotu pieteikuma atvēršanu ? @@ -304,13 +307,13 @@ BoxLastModifiedTicket=Jaunākie labotie pieteikumi BoxLastModifiedTicketDescription=Jaunākās %s lanbotās biļetes BoxLastModifiedTicketContent= BoxLastModifiedTicketNoRecordedTickets=Nav nesen labotu pieteikumu -BoxTicketType=Distribution of open tickets by type -BoxTicketSeverity=Number of open tickets by severity -BoxNoTicketSeverity=No tickets opened -BoxTicketLastXDays=Number of new tickets by days the last %s days -BoxTicketLastXDayswidget = Number of new tickets by days the last X days -BoxNoTicketLastXDays=No new tickets the last %s days -BoxNumberOfTicketByDay=Number of new tickets by day -BoxNewTicketVSClose=Number of today's new tickets versus today's closed tickets -TicketCreatedToday=Ticket created today -TicketClosedToday=Ticket closed today +BoxTicketType=Atvērto biļešu sadalījums pa veidiem +BoxTicketSeverity=Atvērto biļešu skaits pēc smaguma pakāpes +BoxNoTicketSeverity=Netika atvērta neviena biļete +BoxTicketLastXDays=Jauno biļešu skaits pa dienām pēdējās %s dienās +BoxTicketLastXDayswidget = Jauno biļešu skaits pa dienām pēdējās X dienās +BoxNoTicketLastXDays=Pēdējās %s dienās nav jaunu biļešu +BoxNumberOfTicketByDay=Jauno biļešu skaits dienā +BoxNewTicketVSClose=Šodienas jauno biļešu skaits pret šodienas slēgtajām biļetēm +TicketCreatedToday=Biļete izveidota šodien +TicketClosedToday=Biļete šodien ir slēgta diff --git a/htdocs/langs/lv_LV/trips.lang b/htdocs/langs/lv_LV/trips.lang index 39090aec17a..b6825952b39 100644 --- a/htdocs/langs/lv_LV/trips.lang +++ b/htdocs/langs/lv_LV/trips.lang @@ -33,7 +33,7 @@ ExpenseReportCanceledMessage=Izdevumu pārskats %s tika atcelts.
- Lietotā ExpenseReportPaid=Izdevumu pārskats tika samaksāts ExpenseReportPaidMessage=Izmaksu pārskats %s tika samaksāts.
- Lietotājs: %s
- Maksā: %s
Uzklikšķināt šeit, lai parādītu izdevumu pārskatu: %s TripId=Id expense report -AnyOtherInThisListCanValidate=Person to inform for validation. +AnyOtherInThisListCanValidate=Persona, kas jāinformē par pieprasījuma apstiprināšanu. TripSociete=Uzņēmuma informācija TripNDF=Informācijas izdevumu pārskats PDFStandardExpenseReports=Standard template to generate a PDF document for expense report @@ -106,11 +106,11 @@ ConfirmBrouillonnerTrip=Vai tiešām vēlaties pārvietot šo izdevumu pārskatu SaveTrip=Validate expense report ConfirmSaveTrip=Vai tiešām vēlaties apstiprināt šo izdevumu pārskatu? NoTripsToExportCSV=No expense report to export for this period. -ExpenseReportPayment=Expense report payment +ExpenseReportPayment=Izdevumu pārskata maksājums ExpenseReportsToApprove=Izdevumu ziņojumi jāapstiprina ExpenseReportsToPay=Izdevumu pārskati kas jāsamaksā ConfirmCloneExpenseReport=Vai tiešām vēlaties klonēt šo izdevumu pārskatu? -ExpenseReportsIk=Izdevumu pārskats, kurā ir indekss +ExpenseReportsIk=Nobraukuma maksu konfigurēšana ExpenseReportsRules=Izdevumu pārskatu noteikumi ExpenseReportIkDesc=Varat mainīt kilometru izdevumu aprēķinu pa kategorijām un diapazoniem, kurus tie iepriekš ir definējuši. d ir attālums kilometros ExpenseReportRulesDesc=Jūs varat izveidot vai atjaunināt visus aprēķina noteikumus. Šī daļa tiks izmantota, ja lietotājs izveidos jaunu izdevumu pārskatu @@ -145,7 +145,7 @@ nolimitbyEX_DAY=pēc dienas (bez ierobežojuma) nolimitbyEX_MON=pa mēnešiem (bez ierobežojumiem) nolimitbyEX_YEA=pa gadiem (bez ierobežojumiem) nolimitbyEX_EXP=pēc rindas (bez ierobežojuma) -CarCategory=Automašīnu sadaļa +CarCategory=Transportlīdzekļa kategorija ExpenseRangeOffset=Kompensācijas summa: %s RangeIk=Nobraukums AttachTheNewLineToTheDocument=Pievienojiet rindu augšupielādētajam dokumentam diff --git a/htdocs/langs/lv_LV/users.lang b/htdocs/langs/lv_LV/users.lang index 9a902874c9c..8f0731e79c4 100644 --- a/htdocs/langs/lv_LV/users.lang +++ b/htdocs/langs/lv_LV/users.lang @@ -12,7 +12,7 @@ PasswordChangedTo=Parole mainīts: %s SubjectNewPassword=Jūsu jaunā parole %s GroupRights=Grupas atļaujas UserRights=Lietotāja atļaujas -Credentials=Credentials +Credentials=Akreditācijas dati UserGUISetup=Lietotāja displeja iestatīšana DisableUser=Bloķēt DisableAUser=Bloķēt lietotāju @@ -73,7 +73,7 @@ ExportDataset_user_1=Lietotāji un to īpašības DomainUser=Domēna lietotājs %s Reactivate=Aktivizēt CreateInternalUserDesc=Šī veidlapa ļauj izveidot iekšējo lietotāju savā uzņēmumā/organizācijā. Lai izveidotu ārēju lietotāju (klientu, pārdevēju utt.), Izmantojiet trešās puses kontakta kartītes pogu “Izveidot Dolibarr lietotāju”. -InternalExternalDesc=An internal user is a user that is part of your company/organization, or is a partner user outside of your organization that may need to see more data than data related to his company (the permission system will define what he can or can't see or do).
An external user is a customer, vendor or other that must view ONLY data related to himself (Creating an external user for a third-party can be done from the contact record of the third-party).

In both cases, you must grant permissions on the features that the user need. +InternalExternalDesc=Iekšējais lietotājs ir lietotājs, kas ir jūsu uzņēmuma / organizācijas daļa vai ir partnera lietotājs ārpus jūsu organizācijas un kuram, iespējams, būs jāredz vairāk datu nekā ar viņa uzņēmumu saistīto datu (atļauju sistēma noteiks, ko viņš var vai var neredzu un neredzu).
Ārējs lietotājs ir klients, pārdevējs vai cits lietotājs, kuram ir jāskata TIKAI ar sevi saistītie dati (Ārēja lietotāja izveidošanu trešajai pusei var veikt no trešās puses kontaktu ieraksta).

Abos gadījumos jums jāpiešķir atļaujas lietotājam nepieciešamajām funkcijām. PermissionInheritedFromAGroup=Atļauja piešķirta, jo mantojis no viena lietotāja grupai. Inherited=Iedzimta UserWillBe=Izveidotais lietotājs būs @@ -106,7 +106,7 @@ UseTypeFieldToChange=Izmantojiet lauka veids, lai mainītu OpenIDURL=OpenID URL LoginUsingOpenID=Izmantojiet OpenID, lai pieteiktos WeeklyHours=Nostrādātais laiks (nedēļā) -ExpectedWorkedHours=Expected hours worked per week +ExpectedWorkedHours=Paredzamās nostrādātās stundas nedēļā ColorUser=Lietotāja krāsa DisabledInMonoUserMode=Atspējots uzturēšanas režīmā UserAccountancyCode=Lietotāja grāmatvedības kods @@ -116,7 +116,7 @@ DateOfEmployment=Nodarbināšanas datums DateEmployment=Nodarbinātība DateEmploymentstart=Nodarbinātības sākuma datums DateEmploymentEnd=Nodarbinātības beigu datums -RangeOfLoginValidity=Access validity date range +RangeOfLoginValidity=Piekļuves derīguma datumu diapazons CantDisableYourself=Jūs nevarat atspējot savu lietotāja ierakstu ForceUserExpenseValidator=Spēka izdevumu pārskata apstiprinātājs ForceUserHolidayValidator=Piespiedu atvaļinājuma pieprasījuma validētājs diff --git a/htdocs/langs/lv_LV/website.lang b/htdocs/langs/lv_LV/website.lang index 6fe5bbf285a..e70ddb84bac 100644 --- a/htdocs/langs/lv_LV/website.lang +++ b/htdocs/langs/lv_LV/website.lang @@ -51,7 +51,7 @@ ReadPerm=Lasīt WritePerm=Rakstīt TestDeployOnWeb=Pārbaudiet / izvietojiet tīmeklī PreviewSiteServedByWebServer=Preview %s in a new tab.

The %s will be served by an external web server (like Apache, Nginx, IIS). You must install and setup this server before to point to directory:
%s
URL served by external server:
%s -PreviewSiteServedByDolibarr=Preview %s in a new tab.

The %s will be served by Dolibarr server so it does not need any extra web server (like Apache, Nginx, IIS) to be installed.
The inconvenient is that the URLs of pages are not user friendly and start with the path of your Dolibarr.
URL served by Dolibarr:
%s

To use your own external web server to serve this web site, create a virtual host on your web server that points on directory
%s
then enter the name of this virtual server in the properties of this website and click on the link "Test/Deploy on the web". +PreviewSiteServedByDolibarr= Priekšskatīt %s jaunā cilnē.

%s apkalpos Dolibarr serveris, tāpēc tam nav nepieciešams instalēt papildu tīmekļa serveri (piemēram, Apache, Nginx, IIS).
Neērti ir tas, ka lapu vietrāži URL nav lietotājam draudzīgi un sākas ar jūsu Dolibarr ceļu.
URL apkalpo Dolibarr:
%s

Lai izmantotu savu ārējo web serveri, lai kalpotu šo tīmekļa vietni, izveidot virtuālo uzņēmējas jūsu tīmekļa serverī, kas norāda uz direktoriju
%s
tad ievadiet nosaukumu šī virtuālā servera šīs vietnes rekvizītos un noklikšķiniet uz saites "Pārbaudīt / izvietot tīmeklī". VirtualHostUrlNotDefined=Virtuālā resursdatora adrese, kuru apkalpo ārējs tīmekļa serveris, nav definēts NoPageYet=Vēl nav nevienas lapas YouCanCreatePageOrImportTemplate=Jūs varat izveidot jaunu lapu vai importēt pilnu vietnes veidni @@ -137,11 +137,11 @@ PagesRegenerated=reģenerēta %s lapa (s) / konteiners (-i) RegenerateWebsiteContent=Atjaunojiet tīmekļa vietnes kešatmiņas failus AllowedInFrames=Atļauts rāmjos DefineListOfAltLanguagesInWebsiteProperties=Vietņu rekvizītos definējiet visu pieejamo valodu sarakstu. -GenerateSitemaps=Generate website sitemap file -ConfirmGenerateSitemaps=If you confirm, you will erase the existing sitemap file... -ConfirmSitemapsCreation=Confirm sitemap generation -SitemapGenerated=Sitemap file %s generated +GenerateSitemaps=Ģenerēt vietnes vietnes kartes failu +ConfirmGenerateSitemaps=Ja apstiprināsit, jūs izdzēsīsit esošo vietnes kartes failu ... +ConfirmSitemapsCreation=Apstipriniet vietnes kartes ģenerēšanu +SitemapGenerated=Vietnes kartes fails %s ģenerēts ImportFavicon=Favicon -ErrorFaviconType=Favicon must be png -ErrorFaviconSize=Favicon must be sized 16x16, 32x32 or 64x64 -FaviconTooltip=Upload an image which needs to be a png (16x16, 32x32 or 64x64) +ErrorFaviconType=Favicon jābūt png +ErrorFaviconSize=Favicon izmēram jābūt 16x16, 32x32 vai 64x64 +FaviconTooltip=Augšupielādējiet attēlu, kuram jābūt png (16x16, 32x32 vai 64x64) diff --git a/htdocs/langs/lv_LV/withdrawals.lang b/htdocs/langs/lv_LV/withdrawals.lang index f547e315cce..1e31473dc70 100644 --- a/htdocs/langs/lv_LV/withdrawals.lang +++ b/htdocs/langs/lv_LV/withdrawals.lang @@ -42,9 +42,10 @@ LastWithdrawalReceipt=Jaunākie %s tiešā debeta ieņēmumi MakeWithdrawRequest=Izveidojiet tiešā debeta maksājumu pieprasījumu MakeBankTransferOrder=Veiciet kredīta pārveduma pieprasījumu WithdrawRequestsDone=%s reģistrēti tiešā debeta maksājumu pieprasījumi -BankTransferRequestsDone=%s credit transfer requests recorded +BankTransferRequestsDone=%s reģistrēti kredīta pārveduma pieprasījumi ThirdPartyBankCode=Trešās puses bankas kods NoInvoiceCouldBeWithdrawed=Netika veiksmīgi norakstīts rēķins. Pārbaudiet, vai rēķini ir norādīti uzĦēmumiem ar derīgu IBAN un IBAN ir UMR (unikālas pilnvaras atsauce) ar režīmu %s . +WithdrawalCantBeCreditedTwice=Šī izņemšanas kvīts jau ir atzīmēta kā ieskaitīta; to nevar izdarīt divreiz, jo tas potenciāli radītu maksājumu un bankas ierakstu dublikātus. ClassCredited=Klasificēt kreditēts ClassCreditedConfirm=Vai tiešām vēlaties klasificēt šo atsaukuma kvīti kā kredītu jūsu bankas kontā? TransData=Darījuma datums @@ -132,8 +133,8 @@ SEPARCUR=SEPA CUR SEPAFRST=SEPA vispirms ExecutionDate=Izpildes datums CreateForSepa=Izveidojiet tiešā debeta failu -ICS=Creditor Identifier CI for direct debit -ICSTransfer=Creditor Identifier CI for bank transfer +ICS=Kreditora identifikators CI tiešajam debetam +ICSTransfer=Kreditora identifikators CI bankas pārskaitījumam END_TO_END="EndToEndId" SEPA XML tag - katram darījumam piešķirts unikāls ID USTRD="Nestrukturēts" SEPA XML tag ADDDAYS=Pievienojiet dienas izpildes datumam @@ -148,5 +149,5 @@ InfoRejectSubject=Tiešais debeta maksājuma uzdevums ir noraidīts InfoRejectMessage=Labdien,

banka noraidījusi rēķina %s tiešā debeta maksājuma uzdevumu saistībā ar uzņēmumu %s ar summu %s.

-
%s ModeWarning=Iespēja reālā režīmā nav noteikts, mēs pārtraucam pēc šīs simulācijas ErrorCompanyHasDuplicateDefaultBAN=Uzņēmumam ar ID %s ir vairāk nekā viens noklusējuma bankas konts. Nevar uzzināt, kuru izmantot. -ErrorICSmissing=Missing ICS in Bank account %s -TotalAmountOfdirectDebitOrderDiffersFromSumOfLines=Total amount of direct debit order differs from sum of lines +ErrorICSmissing=Bankas kontā %s trūkst ICS +TotalAmountOfdirectDebitOrderDiffersFromSumOfLines=Tiešā debeta rīkojuma kopējā summa atšķiras no rindu summas diff --git a/htdocs/langs/lv_LV/zapier.lang b/htdocs/langs/lv_LV/zapier.lang index c524a9afb6f..48a4287c4ee 100644 --- a/htdocs/langs/lv_LV/zapier.lang +++ b/htdocs/langs/lv_LV/zapier.lang @@ -17,5 +17,5 @@ ModuleZapierForDolibarrName = Zapier priekš Dolibarr ModuleZapierForDolibarrDesc = Par zapier Dolibarr moduli ZapierForDolibarrSetup=Zapier iestatīšana Dolibarr ZapierDescription=Saskarne ar Zapier -ZapierAbout=About the module Zapier -ZapierSetupPage=There is no need for a setup on Dolibarr side to use Zapier. However, you must generate and publish a package on zapier to be able to use Zapier with Dolibarr. See documentation on this wiki page. +ZapierAbout=Par moduli Zapier +ZapierSetupPage=Lai izmantotu Zapier, Dolibarr pusē nav nepieciešama iestatīšana. Tomēr, lai varētu izmantot Zapier ar Dolibarr, jums ir jāizveido un jāpublicē pakete zapier. Skatiet šīs wiki lapas dokumentāciju . diff --git a/htdocs/langs/mk_MK/deliveries.lang b/htdocs/langs/mk_MK/deliveries.lang index 1f48c01de75..cd8a36e6c70 100644 --- a/htdocs/langs/mk_MK/deliveries.lang +++ b/htdocs/langs/mk_MK/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Recipient ErrorStockIsNotEnough=There's not enough stock Shippable=Shippable NonShippable=Not Shippable +ShowShippableStatus=Show shippable status ShowReceiving=Show delivery receipt NonExistentOrder=Nonexistent order +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/mk_MK/exports.lang b/htdocs/langs/mk_MK/exports.lang index a0eb7161ef2..cb652229825 100644 --- a/htdocs/langs/mk_MK/exports.lang +++ b/htdocs/langs/mk_MK/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Type of line (0=product, 1=service) FileWithDataToImport=File with data to import FileToImport=Source file to import FileMustHaveOneOfFollowingFormat=File to import must have one of following formats -DownloadEmptyExample=Download template file with field content information (* are mandatory fields) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... SourceFileFormat=Source file format diff --git a/htdocs/langs/mn_MN/deliveries.lang b/htdocs/langs/mn_MN/deliveries.lang index 1f48c01de75..cd8a36e6c70 100644 --- a/htdocs/langs/mn_MN/deliveries.lang +++ b/htdocs/langs/mn_MN/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Recipient ErrorStockIsNotEnough=There's not enough stock Shippable=Shippable NonShippable=Not Shippable +ShowShippableStatus=Show shippable status ShowReceiving=Show delivery receipt NonExistentOrder=Nonexistent order +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/mn_MN/exports.lang b/htdocs/langs/mn_MN/exports.lang index a0eb7161ef2..cb652229825 100644 --- a/htdocs/langs/mn_MN/exports.lang +++ b/htdocs/langs/mn_MN/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Type of line (0=product, 1=service) FileWithDataToImport=File with data to import FileToImport=Source file to import FileMustHaveOneOfFollowingFormat=File to import must have one of following formats -DownloadEmptyExample=Download template file with field content information (* are mandatory fields) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... SourceFileFormat=Source file format diff --git a/htdocs/langs/nb_NO/deliveries.lang b/htdocs/langs/nb_NO/deliveries.lang index 97f8ad9cdac..31485f7bafa 100644 --- a/htdocs/langs/nb_NO/deliveries.lang +++ b/htdocs/langs/nb_NO/deliveries.lang @@ -30,3 +30,4 @@ NonShippable=Kan ikke sendes ShowShippableStatus=Vis status sendingsklar ShowReceiving=Vis leveringskvittering NonExistentOrder=Ikkeeksisterende ordre +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/nb_NO/exports.lang b/htdocs/langs/nb_NO/exports.lang index e4e5740d9ee..666dc723afa 100644 --- a/htdocs/langs/nb_NO/exports.lang +++ b/htdocs/langs/nb_NO/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Linjetype (0=vare, 1=tjeneste) FileWithDataToImport=Fil med data som skal importeres FileToImport=Kildefilen du vil importere FileMustHaveOneOfFollowingFormat=Fil som skal importeres må ha ett av følgende formater -DownloadEmptyExample=Last ned malfil med feltinnholdsinformasjon (* er obligatoriske felt) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Velg filformatet som skal brukes som importfilformat ved å klikke på %s-ikonet for å velge det ... ChooseFileToImport=Last opp fil og klikk deretter på %s ikonet for å velge fil som kilde-importfil ... SourceFileFormat=Kildefil-format diff --git a/htdocs/langs/ne_NP/deliveries.lang b/htdocs/langs/ne_NP/deliveries.lang index 1f48c01de75..cd8a36e6c70 100644 --- a/htdocs/langs/ne_NP/deliveries.lang +++ b/htdocs/langs/ne_NP/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Recipient ErrorStockIsNotEnough=There's not enough stock Shippable=Shippable NonShippable=Not Shippable +ShowShippableStatus=Show shippable status ShowReceiving=Show delivery receipt NonExistentOrder=Nonexistent order +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/ne_NP/exports.lang b/htdocs/langs/ne_NP/exports.lang index a0eb7161ef2..cb652229825 100644 --- a/htdocs/langs/ne_NP/exports.lang +++ b/htdocs/langs/ne_NP/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Type of line (0=product, 1=service) FileWithDataToImport=File with data to import FileToImport=Source file to import FileMustHaveOneOfFollowingFormat=File to import must have one of following formats -DownloadEmptyExample=Download template file with field content information (* are mandatory fields) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... SourceFileFormat=Source file format diff --git a/htdocs/langs/nl_BE/admin.lang b/htdocs/langs/nl_BE/admin.lang index d13852849fd..3755e870c31 100644 --- a/htdocs/langs/nl_BE/admin.lang +++ b/htdocs/langs/nl_BE/admin.lang @@ -234,6 +234,7 @@ YouMustEnableOneModule=Je moet minstens 1 module aktiveren BillsPDFModules=Factuur documentsjablonen LDAPGlobalParameters=Globale instellingen LDAPPassword=Beheerderswachtwoord +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field. SalariesSetup=Setup van module salarissen MailToSendProposal=Klant voorstellen MailToSendInvoice=Klantfacturen diff --git a/htdocs/langs/nl_BE/ticket.lang b/htdocs/langs/nl_BE/ticket.lang index f1e3f473db3..25cd0e0dc63 100644 --- a/htdocs/langs/nl_BE/ticket.lang +++ b/htdocs/langs/nl_BE/ticket.lang @@ -5,7 +5,6 @@ Permission56003=Tickets verwijderen Permission56005=Bekijk tickets van alle externe partijen (niet effectief voor externe gebruikers, altijd beperkt tot de derde partij waarvan ze afhankelijk zijn) TicketDictCategory=Ticket - Groepen TicketDictSeverity=Ticket - Gradaties -TicketTypeShortISSUE=Probleem, bug of probleem TicketTypeShortREQUEST=Verander- of verbeteringsverzoek TicketTypeShortOTHER=Ander ErrorBadEmailAddress=Veld '%s' onjuist diff --git a/htdocs/langs/nl_BE/website.lang b/htdocs/langs/nl_BE/website.lang index e8f0a2d4af0..96584adea66 100644 --- a/htdocs/langs/nl_BE/website.lang +++ b/htdocs/langs/nl_BE/website.lang @@ -3,6 +3,7 @@ DeleteWebsite=Verwijder website WEBSITE_CSS_URL=URL van extern CSS bestand MediaFiles=Mediabibliotheek EditMenu=Bewerk menu +PreviewOfSiteNotYetAvailable=Preview of your website %s not yet available. You must first 'Import a full website template' or just 'Add a page/container'. ViewSiteInNewTab=Bekijk de site in een nieuwe tab ViewPageInNewTab=Bekijk de pagina in een nieuwe tab SetAsHomePage=Zet als Homepagina diff --git a/htdocs/langs/nl_NL/deliveries.lang b/htdocs/langs/nl_NL/deliveries.lang index 329c2b74ad0..99c87f7f7af 100644 --- a/htdocs/langs/nl_NL/deliveries.lang +++ b/htdocs/langs/nl_NL/deliveries.lang @@ -30,3 +30,4 @@ NonShippable=Niet verzendbaar ShowShippableStatus=Toon verzendstatus ShowReceiving=Toon afleverbon NonExistentOrder=Niet bestaande order +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/nl_NL/exports.lang b/htdocs/langs/nl_NL/exports.lang index 5ea7b305541..65e9a9ed814 100644 --- a/htdocs/langs/nl_NL/exports.lang +++ b/htdocs/langs/nl_NL/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Type van de regel (0=product, 1=dienst) FileWithDataToImport=Bestand met te importeren gegevens FileToImport=Te importeren bronbestand FileMustHaveOneOfFollowingFormat=Het te importeren bestand moet een van de volgende indelingen hebben -DownloadEmptyExample=Sjabloonbestand downloaden met veldinhoudsinformatie (* zijn verplichte velden) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Kies de bestandsindeling die u als importbestandsindeling wilt gebruiken door op het pictogram %s te klikken om deze te selecteren ... ChooseFileToImport=Upload het bestand en klik vervolgens op het pictogram %s om het bestand te selecteren als bronimportbestand ... SourceFileFormat=Bestandsformaat van het bronbestand diff --git a/htdocs/langs/pl_PL/deliveries.lang b/htdocs/langs/pl_PL/deliveries.lang index 336a696e731..8d0ea676b8d 100644 --- a/htdocs/langs/pl_PL/deliveries.lang +++ b/htdocs/langs/pl_PL/deliveries.lang @@ -2,7 +2,7 @@ Delivery=Dostawa DeliveryRef=Numer referencyjny dostawy DeliveryCard=Karta przyjęcia -DeliveryOrder=Delivery receipt +DeliveryOrder=Kwit dostawy DeliveryDate=Data dostawy CreateDeliveryOrder=Generuj przyjęcie dostawy DeliveryStateSaved=Stan dostawy zapisany @@ -18,14 +18,16 @@ StatusDeliveryCanceled=Anulowano StatusDeliveryDraft=Projekt StatusDeliveryValidated=Przyjęto # merou PDF model -NameAndSignature=Name and Signature: +NameAndSignature=Imię i nazwisko oraz podpis: ToAndDate=To___________________________________ na ____ / _____ / __________ GoodStatusDeclaration=Otrzymano towary w dobrym stanie, -Deliverer=Deliverer: +Deliverer=Dostawca: Sender=Nadawca Recipient=Odbiorca ErrorStockIsNotEnough=Brak wystarczającego zapasu w magazynie Shippable=Możliwa wysyłka NonShippable=Nie do wysyłki +ShowShippableStatus=Pokaż status do wysyłki ShowReceiving=Pokaż przyjęte dostawy -NonExistentOrder=Nonexistent order +NonExistentOrder=Nieistniejący porządek +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/pl_PL/exports.lang b/htdocs/langs/pl_PL/exports.lang index 4a291b908d4..d30ec56438b 100644 --- a/htdocs/langs/pl_PL/exports.lang +++ b/htdocs/langs/pl_PL/exports.lang @@ -1,61 +1,62 @@ # Dolibarr language file - Source file is en_US - exports ExportsArea=Eksporty ImportArea=Import -NewExport=New Export -NewImport=New Import +NewExport=Nowy eksport +NewImport=Nowy import ExportableDatas=Eksportowalny zbiór danych ImportableDatas=Importowalny zbiór danych SelectExportDataSet=Wybierz zbiór danych, który chcesz wyeksportować... SelectImportDataSet=Wybierz zbiór danych, który chcesz zaimportować... -SelectExportFields=Choose the fields you want to export, or select a predefined export profile -SelectImportFields=Choose the source file fields you want to import and their target field in database by moving them up and down with anchor %s, or select a predefined import profile: +SelectExportFields=Wybierz pola, które chcesz wyeksportować, lub wybierz predefiniowany profil eksportu +SelectImportFields=Wybierz pola pliku źródłowego, które chcesz zaimportować, i ich pole docelowe w bazie danych, przesuwając je w górę iw dół za pomocą kotwicy %s lub wybierz wstępnie zdefiniowany profil importu: NotImportedFields=Obszary plik przywożonych źródła nie -SaveExportModel=Save your selections as an export profile/template (for reuse). -SaveImportModel=Save this import profile (for reuse) ... +SaveExportModel=Zapisz swoje wybory jako profil / szablon eksportu (do ponownego wykorzystania). +SaveImportModel=Zapisz ten profil importu (do ponownego wykorzystania) ... ExportModelName=Nazwa profilu eksportowego -ExportModelSaved=Export profile saved as %s. +ExportModelSaved=Profil eksportu zapisany jako %s . ExportableFields=Wywóz pola ExportedFields=Eksportowane pola ImportModelName=Importuj nazwę profilu -ImportModelSaved=Import profile saved as %s. +ImportModelSaved=Importuj profil zapisany jako %s . DatasetToExport=Zbiór danych do eksportu DatasetToImport=Dataset importować ChooseFieldsOrdersAndTitle=Wybierz kolejność pól... FieldsTitle=Obszary tytuł FieldTitle=pole tytuł -NowClickToGenerateToBuildExportFile=Now, select the file format in the combo box and click on "Generate" to build the export file... -AvailableFormats=Available Formats +NowClickToGenerateToBuildExportFile=Teraz wybierz format pliku w polu kombi i kliknij „Generuj”, aby zbudować plik eksportu ... +AvailableFormats=Dostępne formaty LibraryShort=Biblioteka -ExportCsvSeparator=Csv caracter separator -ImportCsvSeparator=Csv caracter separator +ExportCsvSeparator=Separator znaków CSV +ImportCsvSeparator=Separator znaków CSV Step=Krok -FormatedImport=Import Assistant -FormatedImportDesc1=This module allows you to update existing data or add new objects into the database from a file without technical knowledge, using an assistant. -FormatedImportDesc2=First step is to choose the kind of data you want to import, then the format of the source file, then the fields you want to import. -FormatedExport=Export Assistant -FormatedExportDesc1=These tools allow the export of personalized data using an assistant, to help you in the process without requiring technical knowledge. -FormatedExportDesc2=First step is to choose a predefined dataset, then which fields you want to export, and in which order. -FormatedExportDesc3=When data to export are selected, you can choose the format of the output file. +FormatedImport=Asystent importu +FormatedImportDesc1=Moduł ten umożliwia aktualizację istniejących danych lub dodawanie nowych obiektów do bazy danych z pliku bez wiedzy technicznej, przy pomocy asystenta. +FormatedImportDesc2=Pierwszym krokiem jest wybór rodzaju danych, które chcesz zaimportować, następnie format pliku źródłowego, a następnie pola, które chcesz zaimportować. +FormatedExport=Asystent Eksportu +FormatedExportDesc1=Narzędzia te pozwalają na eksport spersonalizowanych danych za pomocą asystenta, aby pomóc Ci w procesie bez konieczności posiadania wiedzy technicznej. +FormatedExportDesc2=Pierwszym krokiem jest wybranie predefiniowanego zbioru danych, a następnie pól, które chcesz wyeksportować, oraz w jakiej kolejności. +FormatedExportDesc3=Po wybraniu danych do wyeksportowania można wybrać format pliku wyjściowego. Sheet=Arkusz NoImportableData=Nr przywozowe danych (bez modułu z definicji pozwalają na import danych) FileSuccessfullyBuilt=Wygenerowano plik -SQLUsedForExport=SQL Request used to extract data +SQLUsedForExport=Żądanie SQL używane do wyodrębniania danych LineId=Identyfikator linii LineLabel=Etykieta linii LineDescription=Opis pozycji LineUnitPrice=Cena jednostkowa pozycji LineVATRate=Stawka VAT pozycji LineQty=Ilość dla pozycji -LineTotalHT=Amount excl. tax for line +LineTotalHT=Kwota bez podatek za linię LineTotalTTC=Kwota z podatkiem dla pozycji LineTotalVAT=Kwota podatku VAT dla pozycji TypeOfLineServiceOrProduct=Rodzaj pozycji (0=produkt, 1=usługa) FileWithDataToImport=Plik z danymi do importu FileToImport=Plik źródłowy do zaimportowania -FileMustHaveOneOfFollowingFormat=File to import must have one of following formats -DownloadEmptyExample=Download template file with field content information (* are mandatory fields) -ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... -ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... +FileMustHaveOneOfFollowingFormat=Plik do zaimportowania musi mieć jeden z następujących formatów +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields +ChooseFormatOfFileToImport=Wybierz format pliku, który ma być używany jako format pliku importu, klikając ikonę %s, aby go wybrać ... +ChooseFileToImport=Prześlij plik, a następnie kliknij ikonę %s, aby wybrać plik jako źródłowy plik importu ... SourceFileFormat=Format pliku źródłowego FieldsInSourceFile=Pola w pliku źródłowym FieldsInTargetDatabase=Pola docelowe w bazie danych Dolibarr (wytłuszczenie = obowiązkowe) @@ -70,57 +71,57 @@ FieldsTarget=Pola docelowe FieldTarget=Pole docelowe FieldSource=Pole źródłowe NbOfSourceLines=Liczba linii w pliku źródłowym -NowClickToTestTheImport=Check that the file format (field and string delimiters) of your file matches the options shown and that you have omitted the header line, or these will be flagged as errors in the following simulation.
Click on the "%s" button to run a check of the file structure/contents and simulate the import process.
No data will be changed in your database. -RunSimulateImportFile=Run Import Simulation +NowClickToTestTheImport=Sprawdź, czy format pliku (ograniczniki pól i ciągów znaków) w Twoim pliku jest zgodny z przedstawionymi opcjami i czy pominięto wiersz nagłówka, w przeciwnym razie zostaną one oflagowane jako błędy w następnej symulacji.
Kliknij przycisk „ %s ”, aby sprawdzić strukturę / zawartość pliku i zasymulować proces importu.
Żadne dane w Twojej bazie danych nie zostaną zmienione . +RunSimulateImportFile=Uruchom symulację importu FieldNeedSource=To pole wymaga danych z pliku źródłowego SomeMandatoryFieldHaveNoSource=Niektóre z pól obowiązkowych nie ma źródła danych z pliku InformationOnSourceFile=Informacje o pliku źródłowego InformationOnTargetTables=Informacji na temat docelowego pola SelectAtLeastOneField=Switch co najmniej jednego źródła pola w kolumnie pól do wywozu SelectFormat=Wybierz ten format pliku importu -RunImportFile=Import Data -NowClickToRunTheImport=Check the results of the import simulation. Correct any errors and re-test.
When the simulation reports no errors you may proceed to import the data into the database. -DataLoadedWithId=The imported data will have an additional field in each database table with this import id: %s, to allow it to be searchable in the case of investigating a problem related to this import. -ErrorMissingMandatoryValue=Mandatory data is empty in the source file for field %s. -TooMuchErrors=There are still %s other source lines with errors but output has been limited. -TooMuchWarnings=There are still %s other source lines with warnings but output has been limited. +RunImportFile=Zaimportować dane +NowClickToRunTheImport=Sprawdź wyniki symulacji importu. Popraw wszystkie błędy i przeprowadź ponownie test.
Gdy symulacja nie wykaże żadnych błędów, możesz przystąpić do importu danych do bazy danych. +DataLoadedWithId=Zaimportowane dane będą miały dodatkowe pole w każdej tabeli bazy danych o tym identyfikatorze importu: %s , aby umożliwić ich przeszukiwanie w przypadku badania problemu związanego z tym importem. +ErrorMissingMandatoryValue=Obowiązkowe dane są puste w pliku źródłowym dla pola %s . +TooMuchErrors=Nadal istnieją %s innych wierszy źródłowych z błędami, ale dane wyjściowe są ograniczone. +TooMuchWarnings=Nadal istnieją %s inne wiersze źródłowe z ostrzeżeniami, ale dane wyjściowe są ograniczone. EmptyLine=Pusty wiersz (zostanie odrzucona) -CorrectErrorBeforeRunningImport=You must correct all errors before running the definitive import. +CorrectErrorBeforeRunningImport=Musisz poprawić wszystkie błędy przed uruchomieniem ostatecznego importu. FileWasImported=Plik został przywieziony z %s numerycznych. -YouCanUseImportIdToFindRecord=You can find all the imported records in your database by filtering on field import_key='%s'. +YouCanUseImportIdToFindRecord=Możesz znaleźć wszystkie zaimportowane rekordy w swojej bazie danych, filtrując według pola import_key = '%s' . NbOfLinesOK=Liczba linii bez błędów i żadnych ostrzeżeń: %s. NbOfLinesImported=Liczba linii zaimportowany: %s. DataComeFromNoWhere=Wartości, aby dodać pochodzi z nigdzie w pliku źródłowym. DataComeFromFileFieldNb=Wartość do dodania pochodzi z pola numer %s w pliku źródłowym. -DataComeFromIdFoundFromRef=Value that comes from field number %s of source file will be used to find the id of the parent object to use (so the object %s that has the ref. from source file must exist in the database). -DataComeFromIdFoundFromCodeId=Code that comes from field number %s of source file will be used to find the id of the parent object to use (so the code from source file must exist in the dictionary %s). Note that if you know the id, you can also use it in the source file instead of the code. Import should work in both cases. +DataComeFromIdFoundFromRef=Wartość pochodząca z pola o numerze %s pliku źródłowego zostanie użyta do znalezienia identyfikatora obiektu nadrzędnego do użycia (więc obiekt %s a09a4b739f17f8 musi istnieć w pliku źródłowym. +DataComeFromIdFoundFromCodeId=Kod pochodzący z pola o numerze %s pliku źródłowego zostanie użyty do znalezienia identyfikatora obiektu nadrzędnego do użycia (więc kod z pliku źródłowego musi istnieć w słowniku %s39f17f). Zauważ, że jeśli znasz identyfikator, możesz go również użyć w pliku źródłowym zamiast w kodzie. Import powinien działać w obu przypadkach. DataIsInsertedInto=Dane pochodzące z pliku źródłowego zostaną wstawione w następujące pola: -DataIDSourceIsInsertedInto=The id of parent object was found using the data in the source file, will be inserted into the following field: +DataIDSourceIsInsertedInto=Identyfikator obiektu nadrzędnego został znaleziony przy użyciu danych w pliku źródłowym, zostanie wstawiony w następujące pole: DataCodeIDSourceIsInsertedInto=Id linii macierzystej znaleźć z kodem, zostaną włączone do następnego pola: SourceRequired=Wartość danych jest obowiązkowe SourceExample=Przykład możliwych wartości danych ExampleAnyRefFoundIntoElement=Wszelkie ref dla %s elementów ExampleAnyCodeOrIdFoundIntoDictionary=Każdy kod (lub identyfikator) znajduje się w słowniku% s -CSVFormatDesc=Comma Separated Value file format (.csv).
This is a text file format where fields are separated by a separator [ %s ]. If separator is found inside a field content, field is rounded by round character [ %s ]. Escape character to escape round character is [ %s ]. -Excel95FormatDesc=Excel file format (.xls)
This is the native Excel 95 format (BIFF5). -Excel2007FormatDesc=Excel file format (.xlsx)
This is the native Excel 2007 format (SpreadsheetML). +CSVFormatDesc= Wartość oddzielona przecinkami Format pliku (.csv).
Jest to format pliku tekstowego, w którym pola są oddzielone separatorem [%s]. Jeśli separator znajduje się w treści pola, pole jest zaokrąglane okrągłym znakiem [%s]. Znak ucieczki do rundy ucieczki to [%s]. +Excel95FormatDesc= Format pliku programu Excel (.xls)
Jest to natywny format programu Excel 95 (BIFF5). +Excel2007FormatDesc= Format pliku programu Excel (.xlsx)
Jest to natywny format programu Excel 2007 (SpreadsheetML). TsvFormatDesc=Tab separacji format Wartość (.tsv)
Jest to format pliku tekstowego, gdzie pola są oddzielone tabulator [TAB]. -ExportFieldAutomaticallyAdded=Field %s was automatically added. It will avoid you to have similar lines to be treated as duplicate record (with this field added, all lines will own their own id and will differ). -CsvOptions=CSV format options -Separator=Field Separator -Enclosure=String Delimiter +ExportFieldAutomaticallyAdded=Pole %s zostało dodane automatycznie. Pozwoli to uniknąć sytuacji, w których podobne wiersze będą traktowane jako zduplikowany rekord (po dodaniu tego pola wszystkie wiersze będą miały własny identyfikator i będą się różnić). +CsvOptions=Opcje formatu CSV +Separator=Separator pól +Enclosure=Separator ciągów SpecialCode=Specjalny kod ExportStringFilter=%% Umożliwia zastąpienie jednego lub więcej znaków w tekście -ExportDateFilter=YYYY, YYYYMM, YYYYMMDD: filters by one year/month/day
YYYY+YYYY, YYYYMM+YYYYMM, YYYYMMDD+YYYYMMDD: filters over a range of years/months/days
> YYYY, > YYYYMM, > YYYYMMDD: filters on all following years/months/days
< YYYY, < YYYYMM, < YYYYMMDD: filters on all previous years/months/days -ExportNumericFilter=NNNNN filters by one value
NNNNN+NNNNN filters over a range of values
< NNNNN filters by lower values
> NNNNN filters by higher values +ExportDateFilter=RRRR, RRRRMM, RRRRMMDD: filtry według jednego roku / miesiąca / dnia
RRRR + RRRR, RRRRMM + RRRRMM, RRRRMMDD + RRRRMMDD: filtry w zakresie lat / miesięcy / dni / dni: RRRR / m / dni kolejne lata / miesiące / dni
NNNNN + NNNNN filtruje w zakresie wartości

> NNNNN filtruje według wyższych wartości ImportFromLine=Import rozpocznij od linii numer EndAtLineNb=Zakończ na linii numer -ImportFromToLine=Limit range (From - To). Eg. to omit header line(s). -SetThisValueTo2ToExcludeFirstLine=For example, set this value to 3 to exclude the 2 first lines.
If the header lines are NOT omitted, this will result in multiple errors in the Import Simulation. -KeepEmptyToGoToEndOfFile=Keep this field empty to process all lines to the end of the file. -SelectPrimaryColumnsForUpdateAttempt=Select column(s) to use as primary key for an UPDATE import -UpdateNotYetSupportedForThisImport=Update is not supported for this type of import (only insert) -NoUpdateAttempt=No update attempt was performed, only insert +ImportFromToLine=Zakres graniczny (od - do). Na przykład. pominąć linię (y) nagłówka. +SetThisValueTo2ToExcludeFirstLine=Na przykład ustaw tę wartość na 3, aby wykluczyć 2 pierwsze wiersze.
Jeśli wiersze nagłówka NIE zostaną pominięte, spowoduje to wiele błędów w symulacji importu. +KeepEmptyToGoToEndOfFile=Pozostaw to pole puste, aby przetworzyć wszystkie wiersze do końca pliku. +SelectPrimaryColumnsForUpdateAttempt=Wybierz kolumny, które będą używane jako klucz podstawowy do importu UPDATE +UpdateNotYetSupportedForThisImport=Aktualizacja nie jest obsługiwana dla tego typu importu (tylko wstaw) +NoUpdateAttempt=Nie podjęto próby aktualizacji, tylko włóż ImportDataset_user_1=Użytkownicy (pracownicy lub nie) i ustawienia ComputedField=Obliczone pole ## filters @@ -129,8 +130,8 @@ FilteredFields=Filtrowane pola FilteredFieldsValues=Wartość dla filtra FormatControlRule=Zasada kontroli formatu ## imports updates -KeysToUseForUpdates=Key (column) to use for updating existing data +KeysToUseForUpdates=Klucz (kolumna) do użycia dla aktualizacji istniejących danych NbInsert=ilość wprowadzonych linii: %s NbUpdate=Ilość zaktualizowanych linii: %s -MultipleRecordFoundWithTheseFilters=Multiple records have been found with these filters: %s -StocksWithBatch=Stocks and location (warehouse) of products with batch/serial number +MultipleRecordFoundWithTheseFilters=Znaleziono wiele rekordów z tymi filtrami: %s +StocksWithBatch=Stany i lokalizacja (magazyn) produktów z numerem partii / serii diff --git a/htdocs/langs/pt_AO/admin.lang b/htdocs/langs/pt_AO/admin.lang new file mode 100644 index 00000000000..4b09f74acdb --- /dev/null +++ b/htdocs/langs/pt_AO/admin.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - admin +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field. diff --git a/htdocs/langs/pt_AO/salaries.lang b/htdocs/langs/pt_AO/salaries.lang new file mode 100644 index 00000000000..c9bd3bec17b --- /dev/null +++ b/htdocs/langs/pt_AO/salaries.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - salaries +LastSalaries=Latest %s salary payments +AllSalaries=All salary payments diff --git a/htdocs/langs/pt_AO/website.lang b/htdocs/langs/pt_AO/website.lang new file mode 100644 index 00000000000..910cff6b702 --- /dev/null +++ b/htdocs/langs/pt_AO/website.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - website +PreviewOfSiteNotYetAvailable=Preview of your website %s not yet available. You must first 'Import a full website template' or just 'Add a page/container'. diff --git a/htdocs/langs/pt_BR/deliveries.lang b/htdocs/langs/pt_BR/deliveries.lang index 7c5fec6ed99..ad1c983b4a0 100644 --- a/htdocs/langs/pt_BR/deliveries.lang +++ b/htdocs/langs/pt_BR/deliveries.lang @@ -19,5 +19,6 @@ Sender=Remetente ErrorStockIsNotEnough=Não existe estoque suficiente Shippable=Disponivel para envio NonShippable=Não disponivel para envio +ShowShippableStatus=Mostrar status entregável ShowReceiving=Mostrar recibo de entrega NonExistentOrder=Pedido inexistente diff --git a/htdocs/langs/pt_BR/exports.lang b/htdocs/langs/pt_BR/exports.lang index 4475adb3a39..2e11c55f5aa 100644 --- a/htdocs/langs/pt_BR/exports.lang +++ b/htdocs/langs/pt_BR/exports.lang @@ -68,3 +68,4 @@ ComputedField=Campo computado SelectFilterFields=Se você deseja filtrar alguns valores, apenas os valores de entrada aqui. FilteredFieldsValues=Valor para o filtro MultipleRecordFoundWithTheseFilters=Múltiplos registros foram encontrados com esses filtros: %s +StocksWithBatch=Estoques e localização (armazém) de produtos com lote / número de série diff --git a/htdocs/langs/pt_BR/products.lang b/htdocs/langs/pt_BR/products.lang index ae31027f0ab..a4293c94ace 100644 --- a/htdocs/langs/pt_BR/products.lang +++ b/htdocs/langs/pt_BR/products.lang @@ -133,7 +133,6 @@ ResetBarcodeForAllRecords=Definir o valor do código de barras para todos os reg PriceByCustomer=Preços diferenteas para cada cliente PriceCatalogue=Um único preço de venda por produto/serviço AddCustomerPrice=Adicionar preço por cliente -ForceUpdateChildPriceSoc=Situado mesmo preço em outros pedidos dos clientes PriceByCustomerLog=Registros de preços de cliente anteriores MinimumPriceLimit=Preço mínimo não pode ser inferior, em seguida %s MinimumRecommendedPrice=Preço minimo recomendado é : %s diff --git a/htdocs/langs/pt_BR/ticket.lang b/htdocs/langs/pt_BR/ticket.lang index b88555bee7f..6c7827f0c15 100644 --- a/htdocs/langs/pt_BR/ticket.lang +++ b/htdocs/langs/pt_BR/ticket.lang @@ -8,7 +8,6 @@ TicketDictCategory=Tickets - Grupos TicketDictSeverity=Tickets - Gravidades TicketDictResolution=Ticket - Resolução TicketTypeShortHELP=Pedido de ajuda funcional -TicketTypeShortISSUE=Questão, bug ou problema TicketTypeShortREQUEST=Solicitação de alteração ou aprimoramento TicketTypeShortOTHER=Outros TicketSeverityShortLOW=Baixa @@ -18,7 +17,6 @@ MenuTicketMyAssignNonClosed=Meus tickets abertos MenuListNonClosed=Tickets abertos TypeContact_ticket_external_CONTRIBUTOR=Contribuidor externo Notify_TICKET_SENTBYMAIL=Envio do ticket por e-mail -NeedMoreInformation=Aguardando informação Waiting=Aguardando Severity=Gravidade MailToSendTicketMessage=Para enviar e-mail da mensagem do ticket diff --git a/htdocs/langs/pt_PT/deliveries.lang b/htdocs/langs/pt_PT/deliveries.lang index 35cad55eb41..c8777e9fdf1 100644 --- a/htdocs/langs/pt_PT/deliveries.lang +++ b/htdocs/langs/pt_PT/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Destinatário ErrorStockIsNotEnough=Não existe stock suficiente Shippable= Transportável NonShippable=Não Transportável +ShowShippableStatus=Show shippable status ShowReceiving=Mostrar recibo da entrega NonExistentOrder=Nonexistent order +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/pt_PT/exports.lang b/htdocs/langs/pt_PT/exports.lang index 083e48f5527..49f2eee70c0 100644 --- a/htdocs/langs/pt_PT/exports.lang +++ b/htdocs/langs/pt_PT/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Tipo de linha (0= produto, serviço de 1=) FileWithDataToImport=Arquivo com os dados de importação FileToImport=Fonte ficheiro a importar FileMustHaveOneOfFollowingFormat=O arquivo a ser importado deve ter um dos seguintes formatos -DownloadEmptyExample=Faça o download do arquivo de modelo com informações sobre o conteúdo do campo (* são campos obrigatórios) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Escolha o formato de arquivo para usar como formato de arquivo de importação clicando no ícone %s para selecioná-lo ... ChooseFileToImport=Carregar arquivo, em seguida, clique no ícone %s para selecionar o arquivo como arquivo de importação de origem ... SourceFileFormat=Formato de arquivo de origem diff --git a/htdocs/langs/ro_RO/deliveries.lang b/htdocs/langs/ro_RO/deliveries.lang index 53e4e7d825b..7537953cb21 100644 --- a/htdocs/langs/ro_RO/deliveries.lang +++ b/htdocs/langs/ro_RO/deliveries.lang @@ -1,31 +1,33 @@ # Dolibarr language file - Source file is en_US - deliveries Delivery=Livrare DeliveryRef=Ref Livrare -DeliveryCard=Chitanta card +DeliveryCard=Notă de livrare DeliveryOrder=Bon de livrare -DeliveryDate=Data de livrare -CreateDeliveryOrder=Generați chitanța de livrare -DeliveryStateSaved=Stare livrare salvata +DeliveryDate=Dată de livrare +CreateDeliveryOrder=Generați nota de livrare +DeliveryStateSaved=Stare livrare salvată SetDeliveryDate=Setaţi data de expediere -ValidateDeliveryReceipt=Validare recepţie livrare -ValidateDeliveryReceiptConfirm=Sigur doriți să validați această chitanță de livrare? -DeleteDeliveryReceipt=Ştergeţi recepţie livrare -DeleteDeliveryReceiptConfirm=Sigur doriți să ștergeți chitanța de livrare %s ? -DeliveryMethod=Metoda de livrare -TrackingNumber=Număr de urmărire -DeliveryNotValidated=Livrare nevalidată -StatusDeliveryCanceled=Anulata -StatusDeliveryDraft=Draft +ValidateDeliveryReceipt=Validare notă de livrare +ValidateDeliveryReceiptConfirm=Sigur doriți să validați această notă de livrare? +DeleteDeliveryReceipt=Ştergere notă de livrare +DeleteDeliveryReceiptConfirm=Sigur doriți să ștergeți nota de livrare %s? +DeliveryMethod=Metodă de livrare +TrackingNumber=Număr de urmărire AWB +DeliveryNotValidated=Livrare nevalidată +StatusDeliveryCanceled=Anulată +StatusDeliveryDraft=Schiţă StatusDeliveryValidated=Primit # merou PDF model NameAndSignature=Numele și semnătura: -ToAndDate=To___________________________________ pe ____ / _____ / __________ -GoodStatusDeclaration=Au primit bunurile în bună stare de mai sus, -Deliverer=Expeditor: +ToAndDate=Către___________________________________ pe data de ____ / _____ / __________ +GoodStatusDeclaration=Au primit bunurile de mai sus, în stare bună, +Deliverer=Livrator: Sender=Expeditor -Recipient=Recipient +Recipient=Destinatar ErrorStockIsNotEnough=Nu există stoc suficient Shippable=Livrabil NonShippable=Nelivrabil +ShowShippableStatus=Afișare status de expediere ShowReceiving= Afișare notă de recepție -NonExistentOrder=Ordin inexistent +NonExistentOrder=Comandă inexistentă +StockQuantitiesAlreadyAllocatedOnPreviousLines = Cantități de stoc deja alocate pe liniile anterioare diff --git a/htdocs/langs/ro_RO/exports.lang b/htdocs/langs/ro_RO/exports.lang index 08f9a64d27e..28c2266d9f6 100644 --- a/htdocs/langs/ro_RO/exports.lang +++ b/htdocs/langs/ro_RO/exports.lang @@ -1,136 +1,137 @@ # Dolibarr language file - Source file is en_US - exports ExportsArea=Exporturi ImportArea=Import -NewExport=Exportul nou -NewImport=Importul nou -ExportableDatas=Exportabil de date -ImportableDatas=Importable de date -SelectExportDataSet=Alegeţi de date pe care doriţi să le export ... -SelectImportDataSet=Alegeţi de date pe care doriţi să o import ... +NewExport=Export nou +NewImport=Import nou +ExportableDatas=Set de date exportabil +ImportableDatas=Set de date importabil +SelectExportDataSet=Alege setul de date pe care doreşti să-l exporţi... +SelectImportDataSet=Alege setul de date pe care doreşti să-l imporţi... SelectExportFields=Alegeți câmpurile pe care doriți să le exportați sau selectați un profil de export predefinit -SelectImportFields=Alegeți câmpurile sursă de fișier pe care doriți să le importați și câmpul țintă în baza de date deplasându-le în sus și în jos cu ancora %s sau selectând un profil predefinit de import: -NotImportedFields=Câmpurile fişierului sursă nu importate +SelectImportFields=Alege câmpurile din fișierul sursă pe care doreşti să le imporți și câmpurile țintă din baza de date deplasându-te în sus și în jos cu ancora %s sau selectând un profil predefinit de import: +NotImportedFields=Câmpurile fişierului sursă nu au fost importate SaveExportModel=Salvați selecțiile ca profil de export/șablon (pentru reutilizare). SaveImportModel=Salvați acest profil de import (pentru reutilizare) ... -ExportModelName=Export profil nume -ExportModelSaved=Exportați profilul salvat ca %s . +ExportModelName=Nume profil export date +ExportModelSaved=Exportați profilul salvat ca %s. ExportableFields=Câmpuri exportabile ExportedFields=Câmpuri exportate -ImportModelName=Import profil nume -ImportModelSaved=Profilul de import a fost salvat ca %s . -DatasetToExport=De date la export -DatasetToImport=De date pentru a importa -ChooseFieldsOrdersAndTitle=Alegeţi câmpurile pentru ... -FieldsTitle=Câmpuri titlu -FieldTitle=Domeniul titlu +ImportModelName=Nume profil import date +ImportModelSaved=Profilul de import a fost salvat ca %s. +DatasetToExport=Set de date de exportat +DatasetToImport=Import fişier în set de date +ChooseFieldsOrdersAndTitle=Alegeţi ordinea câmpurilor... +FieldsTitle=Câmpuri titlu +FieldTitle=Titlu câmp NowClickToGenerateToBuildExportFile=Acum, selectați formatul de fișier în caseta combo și faceți clic pe "Generare" pentru a construi fișierul de export ... AvailableFormats=Formate disponibile -LibraryShort=Biblioteca +LibraryShort=Bibliotecă ExportCsvSeparator=Separator caractere CSV ImportCsvSeparator=Separator caractere CSV -Step=Pasul +Step=Pas FormatedImport=Asistent import FormatedImportDesc1=Acest modul vă permite să actualizați datele existente sau să adăugați obiecte noi în baza de date dintr-un fișier fără cunoștințe tehnice, utilizând un asistent. -FormatedImportDesc2=Primul pas este să alegeți tipul de date pe care doriți să îl importați, apoi formatul fișierului sursă, apoi câmpurile pe care doriți să le importați. +FormatedImportDesc2=Primul pas este să alegi tipul de date pe care doreşti să-l imporți, apoi formatul fișierului sursă, apoi câmpurile pe care vrei să le imporți. FormatedExport=Asistent export -FormatedExportDesc1=Aceste instrumente permit exportul de date personalizate folosind un asistent, pentru a vă ajuta în acest proces fără a necesita cunoștințe tehnice. +FormatedExportDesc1=Aceste instrumente permit exportul de date personalizate folosind un asistent, pentru a te ajuta în acest proces fără a necesita cunoștințe tehnice. FormatedExportDesc2=Primul pas este să alegeți un set de date predefinit, apoi câmpurile pe care doriți să le exportați și în ce ordine. FormatedExportDesc3=Când sunt selectate datele de export, puteți alege formatul fișierului de ieșire. Sheet=Foaie -NoImportableData=Nu importable de date (nu cu modul de definiţii, pentru a permite importul de date) +NoImportableData=Date neimportabile (niciun modul cu definiţii care să permită importul) FileSuccessfullyBuilt=Fișierul generat SQLUsedForExport=Interogare SQL utilizată pentru extragerea datelor -LineId=Id-ul de linie -LineLabel=Eticheta linie -LineDescription=Descriere de linie -LineUnitPrice=Preţul unitar de linie -LineVATRate=TVA de linie -LineQty=Cantitate de linie -LineTotalHT=Cantitate excl. taxa pentru linie -LineTotalTTC=Suma cu taxa de linie -LineTotalVAT=Suma TVA pentru linia +LineId=Id linie +LineLabel=Etichetă linie +LineDescription=Descriere linie +LineUnitPrice=Preţul unitar pentru linie +LineVATRate=Cota TVA pentru linie +LineQty=Cantitate pentru linie +LineTotalHT=Valoarea fără taxe pentru linie +LineTotalTTC=Valoarea cu taxe pentru linie +LineTotalVAT=Valoare TVA pentru linie TypeOfLineServiceOrProduct=Tip de linie (0= produs, 1= serviciu) FileWithDataToImport=Fişiere cu date de import FileToImport=Fişierul sursă de import FileMustHaveOneOfFollowingFormat=Fișierul de import trebuie să aibă unul din următoarele formate -DownloadEmptyExample=Descărcați fișierul șablon cu informații despre conținutul câmpului (* sunt câmpuri obligatorii) -ChooseFormatOfFileToImport=Alegeți formatul de fișier pentru a fi utilizat ca format de fișier de import făcând clic pe pictograma %s pentru a o selecta ... -ChooseFileToImport=Încărcați fișierul, apoi dați clic pe pictograma %s pentru a selecta fișierul ca fișier de import al sursei ... -SourceFileFormat=Sursa Format fişier -FieldsInSourceFile=Câmpuri in fişierul sursă -FieldsInTargetDatabase=Câmpuri-țintă în baza de date Dolibarr (bold = obligatoriu) +DownloadEmptyExample=Descărcare fișier șablon cu informații despre conținutul câmpului +StarAreMandatory=* sunt câmpuri obligatorii +ChooseFormatOfFileToImport=Alegeți formatul de fișier care va fi utilizat ca format de fișier de import făcând clic pe pictograma %s pentru selecţie... +ChooseFileToImport=Încărcați fișierul, apoi dați clic pe pictograma %s pentru a selecta fișierul ca sursă de import... +SourceFileFormat=Format fişier sursă +FieldsInSourceFile=Câmpuri în fişierul sursă +FieldsInTargetDatabase=Câmpuri-țintă în baza de date a sistemului (bold = obligatoriu) Field=Câmp NoFields=Niciun câmp -MoveField=Mutare coloana %s domeniul număr +MoveField=Mută câmpul coloană cu numărul %s ExampleOfImportFile=Example_of_import_file -SaveImportProfile=Salvaţi acest profil de import -ErrorImportDuplicateProfil=Nu am putut salva acest profil de import cu acest nume. Un profil existent deja cu acest nume. +SaveImportProfile=Salvează acest profil de import +ErrorImportDuplicateProfil=Nu am putut salva profilul de import cu acest nume. Un profil există deja cu acest nume. TablesTarget=Tabelele vizate FieldsTarget=Câmpuri vizate FieldTarget=Câmp vizat -FieldSource=Sursa de câmp +FieldSource=Câmp sursă NbOfSourceLines=Numărul de linii în fişierul sursă -NowClickToTestTheImport=Verificați dacă formatul fișierului (câmpurile și delimitatorii de șir) al fișierului dvs. corespunde opțiunilor afișate și că ați omis linia antetului sau acestea vor fi semnalate ca erori în următoarea simulare.
Faceți clic pe butonul " %s " pentru a rula o verificare a structurii / conținutului fișierelor și a simula procesul de importare.
Nu se vor schimba date în baza dumneavoastră de date . +NowClickToTestTheImport=Verifică dacă formatul fișierului (câmpurile și delimitatorii de șir) din fișierul tău corespunde opțiunilor afișate și că ai omis linia antetului; acestea vor fi semnalate ca erori în următoarea simulare.
Faceți clic pe butonul " %s " pentru a rula o verificare a structurii/conținutului fișierelor și a simula procesul de importare.
Nu se vor modifica informaţii din baza de date . RunSimulateImportFile=Rulați simularea de import FieldNeedSource=Acest câmp cere date din fişierul sursă -SomeMandatoryFieldHaveNoSource=Unele câmpuri obligatorii nu au nicio sursă de date de la dosar -InformationOnSourceFile=Informaţii privind fişier sursă +SomeMandatoryFieldHaveNoSource=Unele câmpuri obligatorii nu au nicio sursă de date din fişier +InformationOnSourceFile=Informaţii privind fişierul sursă InformationOnTargetTables=Informaţii privind câmpurile ţintă SelectAtLeastOneField=Comută cel puțin un câmp sursă în coloana de câmpuri de exportat -SelectFormat=Alegeţi acest fişier format de import -RunImportFile=Importați date -NowClickToRunTheImport=Verificați rezultatele simulării de import. Corectați orice eroare și retestați.
Când simularea nu raportează erori, puteți continua să importați datele în baza de date. +SelectFormat=Alege acest format de fişier de import +RunImportFile=Import date +NowClickToRunTheImport=Verifică rezultatele simulării de import. Corectează orice eroare și re-testează.
Când simularea nu mai raportează erori, poţi importa datele în baza de date. DataLoadedWithId=Datele importate vor avea un câmp suplimentar în fiecare tabelă de bază de date cu acest id de import: %s , pentru a permite ca acesta să poată fi căutat în cazul investigării unei probleme legate de acest import. -ErrorMissingMandatoryValue=Datele obligatorii sunt goale în fișierul sursă pentru câmpul %s . -TooMuchErrors=Există încă %s alte linii sursă cu erori, dar ieșirea a fost limitată. -TooMuchWarnings=Există încă %s alte linii sursă cu avertismente, dar ieșirea a fost limitată. -EmptyLine=linie goală (vor fi aruncate) -CorrectErrorBeforeRunningImport=Trebuie să trebuie să corectaţi toate erorile înainte ca să ruleze importul definitiv. -FileWasImported=Dosarul a fost importat cu %s număr. -YouCanUseImportIdToFindRecord=Puteți găsi toate înregistrările importate în baza dvs. de date prin filtrarea pe câmpul import_key = '%s' . -NbOfLinesOK=Numărul de linii fără erori şi fără avertismente: %s. -NbOfLinesImported=Numărul de linii cu succes importate: %s. -DataComeFromNoWhere=Valoare pentru a introduce vine de nicăieri în fişierul sursă. -DataComeFromFileFieldNb=Valoare pentru a introduce %s vine de la numărul de câmp în fişierul sursă. -DataComeFromIdFoundFromRef=Valoarea care vine de la numărul câmpului %s din fișierul sursă va fi utilizată pentru a găsi id-ul obiectului parental de folosit (astfel încât obiectul %s care are ref. din fișierul sursă trebuie să existe în baza de date). -DataComeFromIdFoundFromCodeId=Codul care vine de la numărul de câmp %s din fișierul sursă va fi folosit pentru a găsi id-ul obiectului parental de folosit (astfel încât codul din fișierul sursă trebuie să existe în dicționar %s ). Rețineți că, dacă cunoașteți idul, îl puteți utiliza și în fișierul sursă în locul codului. Importul ar trebui să funcționeze în ambele cazuri. -DataIsInsertedInto=Datele provin din fişierul sursă va fi inserat în câmpul de următoarele: -DataIDSourceIsInsertedInto=ID-ul obiectului părinte a fost găsit utilizând datele din fișierul sursă, va fi introdus în câmpul următor: -DataCodeIDSourceIsInsertedInto=ID-ul de linie de la mamă găsit codul, va fi introdus în câmpul următorul text: -SourceRequired=valoarea datelor este obligatorie -SourceExample=Exemplu de valoare posibilă de date -ExampleAnyRefFoundIntoElement=Orice Ref gasit pentru %s element +ErrorMissingMandatoryValue=Date obligatorii sunt necompletate în fișierul sursă pentru câmpul %s. +TooMuchErrors=Există încă %s alte linii sursă cu erori, dar afişarea a fost limitată. +TooMuchWarnings=Există încă %s alte linii sursă cu avertismente, dar afişarea a fost limitată. +EmptyLine=Linie goală (va fi ignorată) +CorrectErrorBeforeRunningImport=Trebuie să corectezi toate erorile înainte de a rula importul definitiv. +FileWasImported=Fişierul a fost importat cu numărul %s. +YouCanUseImportIdToFindRecord=Găsiţi toate înregistrările importate în baza de date filtrând pe câmpul import_key = '%s'. +NbOfLinesOK=Număr de linii fără erori şi fără avertismente: %s. +NbOfLinesImported=Număr de linii importate cu succes: %s. +DataComeFromNoWhere=Valoarea de inserare necunoscută în fişierul sursă. +DataComeFromFileFieldNb=Valoarea de introdus vine din câmpul cu numărul %s din fişierul sursă. +DataComeFromIdFoundFromRef=Valoarea care provine din câmpul cu numărul %s din fișierul sursă va fi utilizată pentru a găsi id-ul obiectului părinte care se va folosi (astfel încât obiectul %s care are referinţa din fișierul sursă trebuie să existe în baza de date). +DataComeFromIdFoundFromCodeId=Codul care provine din câmpul cu numărul %s din fișierul sursă va fi folosit pentru a găsi id-ul obiectului părinte utilizat (deci codul din fișierul sursă trebuie să existe în dicționarul %s). Reține că, dacă cunoști id-ul, îl poți utiliza și în fișierul sursă în locul codului. Importul ar trebui să funcționeze în ambele cazuri. +DataIsInsertedInto=Datele care provin din fişierul sursă vor fi inserate în următorul câmp: +DataIDSourceIsInsertedInto=ID-ul obiectului părinte a fost găsit utilizând datele din fișierul sursă, va fi introdus în următorul câmp: +DataCodeIDSourceIsInsertedInto=ID-ul liniei părinte găsit în cod, va fi introdus în următorul câmp: +SourceRequired=Valoarea de tip dată este obligatorie +SourceExample=Exemplu de valoare posibilă +ExampleAnyRefFoundIntoElement=Orice referinţă gasită pentru elementul %s ExampleAnyCodeOrIdFoundIntoDictionary=Orice cod (sau id) găsit în dicţionarul %s -CSVFormatDesc= Valoarea separată prin virgulă formatul de fișier (.csv).
Acesta este un format de fișier text în care câmpurile sunt separate printr-un separator [%s]. Dacă separatorul se găsește într-un conținut de câmp, câmpul este rotunjit de caracterul rotund [%s]. Caracterul ESC pentru a scăpa de caracterul rotund este [%s]. -Excel95FormatDesc= Excel format (.xls)
Acesta este formatul nativ Excel 95 (BIFF5). -Excel2007FormatDesc= Excel format fișier (.xlsx)
Acesta este formatul nativ Excel 2007 (SpreadsheetML). -TsvFormatDesc= Tab Separat Valoare format de fișier (.tsv)
Acesta este un format de fișier text în care câmpurile sunt separate printr-un tabulator [tab]. -ExportFieldAutomaticallyAdded=Câmpul %s a fost adăugat automat. Va evita să aveți linii similare pentru a fi tratate ca înregistrări duplicate (cu acest câmp adăugat, toate liniile vor avea propriul id și vor diferi). -CsvOptions=Optiuni de format CSV +CSVFormatDesc=Formatul de fişier (.csv) Valoare separată prin virgulă .
Acesta este un format de fișier text în care câmpurile sunt separate printr-un separator [%s]. Dacă separatorul se găsește într-un câmp de conţinut, câmpul este trunchiat de caracterul [%s]. Caracterul de evadare este [%s]. +Excel95FormatDesc=Formatul de fişier Excel (.xls)
Acesta este formatul nativ Excel 95 (BIFF5). +Excel2007FormatDesc=Formatul de fişier Excel (.xlsx)
Acesta este formatul nativ Excel 2007 (SpreadsheetML). +TsvFormatDesc=Formatul de fişier (.tsv) Valori separate prin Tab
Acesta este un format de fișier text în care câmpurile sunt separate printr-un tabulator [tab]. +ExportFieldAutomaticallyAdded=Câmpul %s a fost adăugat automat. Se va evita introducerea de linii similare considerate ca înregistrări duplicate (cu acest câmp adăugat, toate liniile vor avea propriul id și vor diferi). +CsvOptions=Opţiuni format CSV Separator=Separator de câmp Enclosure=Delimitator de şir SpecialCode=Cod special -ExportStringFilter=%% permite înlocuirea unuia sau mai multor caractere in text -ExportDateFilter=AAAA, AAAALL, AAAALLZZ: filtre pe un an / lună / zi
AAAA + AAAA, AAAALL + AAAALL, AAAALLZZ + AAAALLZZ: filtre pe o perioadă de ani / luni / zile
> AAAA, > AAAALL, > AAAALLZZ: filtre pentru toți anii / lunile / zilele urmatori
NNNNN + NNNNN filtrează peste un interval de valori
Filtre NNNNN prin valori mai mici
> Filtre NNNNN prin valori mai mari -ImportFromLine=Importul pornind de la linia numărul +ExportStringFilter=%% permite înlocuirea unuia sau mai multor caractere în text +ExportDateFilter=YYYY, YYYYMM, YYYYMMDD: filtre după an/lună/zi
YYYY+YYYY, YYYYMM+YYYYMM, YYYYMMDD+YYYYMMDD: filtre pe o perioadă de ani/luni/zile
> YYYY, > YYYYMM, > YYYYMMDD: filtre pentru toţi anii/lunile/zilele următoare
< YYYY, < YYYYMM, < YYYYMMDD: filtre pentru toți anii/lunile/zilele anterioare +ExportNumericFilter=NNNNN filtrează după o valoare
NNNNN + NNNNN filtrează după un interval de valori
< NNNNN filtrează după valori mai mici
> NNNNN după valori mai mari +ImportFromLine=Importă începând cu linia numărul EndAtLineNb=Sfârșit la linia numărul ImportFromToLine=Interval limită (De la - Până la). Ex. pentru a omite linia(ile) de cap de tabel. -SetThisValueTo2ToExcludeFirstLine=De exemplu, setați această valoare la 3 pentru a exclude primele 2 linii.
Dacă liniile de antet NU sunt omise, aceasta va duce la mai multe erori în simularea importului. +SetThisValueTo2ToExcludeFirstLine=De exemplu, setează această valoare la 3 pentru a exclude primele 2 linii.
Dacă liniile de antet NU sunt omise, aceasta va duce la mai multe erori în simularea importului. KeepEmptyToGoToEndOfFile=Păstrați acest câmp gol pentru a procesa toate liniile până la sfârșitul fișierului. -SelectPrimaryColumnsForUpdateAttempt=Selectați coloana (coloanele) de utilizat ca cheie primară pentru o importare UPDATE -UpdateNotYetSupportedForThisImport=Actualizarea nu este acceptată pentru acest tip de import (inserați numai) -NoUpdateAttempt=Nu a fost efectuată nicio încercare de actualizare, se introduce numai +SelectPrimaryColumnsForUpdateAttempt=Selectează coloana(coloanele) de utilizat ca cheie primară pentru un import cu actualizare UPDATE +UpdateNotYetSupportedForThisImport=Actualizarea nu este acceptată pentru acest tip de import (doar inserare) +NoUpdateAttempt=Nu a fost efectuată nicio încercare de actualizare, doar se inserează ImportDataset_user_1=Utilizatori (angajați sau nu) și proprietăți -ComputedField=Câmpul calculat +ComputedField=Câmp calculat ## filters SelectFilterFields=Dacă doriți să filtrați pe anumite valori, doar introduceţi valorile aici. FilteredFields=Câmpuri filtrate FilteredFieldsValues=Valoare pentru filtru FormatControlRule=Regula de control a formatelor ## imports updates -KeysToUseForUpdates=Tastă (coloană) de utilizat pentru actualizarea datelor -NbInsert=Numărul liniilor inserate: %s -NbUpdate=Numărul liniilor actualizate: %s +KeysToUseForUpdates=Cheie (coloană) de utilizat pentru actualizarea datelor existente +NbInsert=Număr linii inserate: %s +NbUpdate=Număr linii actualizate: %s MultipleRecordFoundWithTheseFilters=Au fost găsite mai multe înregistrări cu ajutorul acestor filtre: %s StocksWithBatch=Stocuri și locație (depozit) a produselor cu număr de lot/serie diff --git a/htdocs/langs/ru_UA/salaries.lang b/htdocs/langs/ru_UA/salaries.lang new file mode 100644 index 00000000000..c9bd3bec17b --- /dev/null +++ b/htdocs/langs/ru_UA/salaries.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - salaries +LastSalaries=Latest %s salary payments +AllSalaries=All salary payments diff --git a/htdocs/langs/ru_UA/users.lang b/htdocs/langs/ru_UA/users.lang new file mode 100644 index 00000000000..4a412122b08 --- /dev/null +++ b/htdocs/langs/ru_UA/users.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - users +NbOfUsers=No. of users +NbOfPermissions=No. of permissions diff --git a/htdocs/langs/ru_UA/website.lang b/htdocs/langs/ru_UA/website.lang new file mode 100644 index 00000000000..910cff6b702 --- /dev/null +++ b/htdocs/langs/ru_UA/website.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - website +PreviewOfSiteNotYetAvailable=Preview of your website %s not yet available. You must first 'Import a full website template' or just 'Add a page/container'. diff --git a/htdocs/langs/sk_SK/deliveries.lang b/htdocs/langs/sk_SK/deliveries.lang index bbbd23eb949..a9399816f13 100644 --- a/htdocs/langs/sk_SK/deliveries.lang +++ b/htdocs/langs/sk_SK/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Príjemca ErrorStockIsNotEnough=There's not enough stock Shippable=Shippable NonShippable=Not Shippable +ShowShippableStatus=Show shippable status ShowReceiving=Show delivery receipt NonExistentOrder=Nonexistent order +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/sk_SK/exports.lang b/htdocs/langs/sk_SK/exports.lang index a9991f8c0fd..27c4c0f4a2d 100644 --- a/htdocs/langs/sk_SK/exports.lang +++ b/htdocs/langs/sk_SK/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Použitý typ linky (0 = produkt, 1 = služba) FileWithDataToImport=Súbor s dátami pre import FileToImport=Zdrojový súbor na import FileMustHaveOneOfFollowingFormat=File to import must have one of following formats -DownloadEmptyExample=Download template file with field content information (* are mandatory fields) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... SourceFileFormat=Zdrojový súbor diff --git a/htdocs/langs/sl_SI/deliveries.lang b/htdocs/langs/sl_SI/deliveries.lang index 6c10f871fba..a2045ed2786 100644 --- a/htdocs/langs/sl_SI/deliveries.lang +++ b/htdocs/langs/sl_SI/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Prejemnik ErrorStockIsNotEnough=Zaloga je premajhna Shippable=Možna odprema NonShippable=Ni možna odprema +ShowShippableStatus=Show shippable status ShowReceiving=Show delivery receipt NonExistentOrder=Nonexistent order +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/sl_SI/exports.lang b/htdocs/langs/sl_SI/exports.lang index e48218574d6..9b77df1cc21 100644 --- a/htdocs/langs/sl_SI/exports.lang +++ b/htdocs/langs/sl_SI/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Tip vrstice (0=proizvod, 1=storitev) FileWithDataToImport=Datoteka s podatki za uvoz FileToImport=Izvorna datoteka za uvoz FileMustHaveOneOfFollowingFormat=File to import must have one of following formats -DownloadEmptyExample=Download template file with field content information (* are mandatory fields) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... SourceFileFormat=Format izvorne datoteke diff --git a/htdocs/langs/sq_AL/deliveries.lang b/htdocs/langs/sq_AL/deliveries.lang index 903710c110d..05b090f1123 100644 --- a/htdocs/langs/sq_AL/deliveries.lang +++ b/htdocs/langs/sq_AL/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Recipient ErrorStockIsNotEnough=There's not enough stock Shippable=Shippable NonShippable=Not Shippable +ShowShippableStatus=Show shippable status ShowReceiving=Show delivery receipt NonExistentOrder=Nonexistent order +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/sq_AL/exports.lang b/htdocs/langs/sq_AL/exports.lang index a0eb7161ef2..cb652229825 100644 --- a/htdocs/langs/sq_AL/exports.lang +++ b/htdocs/langs/sq_AL/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Type of line (0=product, 1=service) FileWithDataToImport=File with data to import FileToImport=Source file to import FileMustHaveOneOfFollowingFormat=File to import must have one of following formats -DownloadEmptyExample=Download template file with field content information (* are mandatory fields) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... SourceFileFormat=Source file format diff --git a/htdocs/langs/sr_RS/deliveries.lang b/htdocs/langs/sr_RS/deliveries.lang index 0ab45d43795..6590466b478 100644 --- a/htdocs/langs/sr_RS/deliveries.lang +++ b/htdocs/langs/sr_RS/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Primalac ErrorStockIsNotEnough=Nema dovoljno zaliha Shippable=Isporučivo NonShippable=Nije isporučivo +ShowShippableStatus=Show shippable status ShowReceiving=Show delivery receipt NonExistentOrder=Nonexistent order +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/sr_RS/exports.lang b/htdocs/langs/sr_RS/exports.lang index 41f2f5ed861..6ad60fe9e52 100644 --- a/htdocs/langs/sr_RS/exports.lang +++ b/htdocs/langs/sr_RS/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Tip linije (0=proizvod, 1=usluga) FileWithDataToImport=Fajl sa podacima za import FileToImport=Izvorni fajl za import FileMustHaveOneOfFollowingFormat=File to import must have one of following formats -DownloadEmptyExample=Download template file with field content information (* are mandatory fields) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... SourceFileFormat=Format izvornog fajla diff --git a/htdocs/langs/sw_SW/deliveries.lang b/htdocs/langs/sw_SW/deliveries.lang index 1f48c01de75..cd8a36e6c70 100644 --- a/htdocs/langs/sw_SW/deliveries.lang +++ b/htdocs/langs/sw_SW/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Recipient ErrorStockIsNotEnough=There's not enough stock Shippable=Shippable NonShippable=Not Shippable +ShowShippableStatus=Show shippable status ShowReceiving=Show delivery receipt NonExistentOrder=Nonexistent order +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/sw_SW/exports.lang b/htdocs/langs/sw_SW/exports.lang index a0eb7161ef2..cb652229825 100644 --- a/htdocs/langs/sw_SW/exports.lang +++ b/htdocs/langs/sw_SW/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Type of line (0=product, 1=service) FileWithDataToImport=File with data to import FileToImport=Source file to import FileMustHaveOneOfFollowingFormat=File to import must have one of following formats -DownloadEmptyExample=Download template file with field content information (* are mandatory fields) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... SourceFileFormat=Source file format diff --git a/htdocs/langs/th_TH/deliveries.lang b/htdocs/langs/th_TH/deliveries.lang index cac9f569166..84b94f406b3 100644 --- a/htdocs/langs/th_TH/deliveries.lang +++ b/htdocs/langs/th_TH/deliveries.lang @@ -27,5 +27,7 @@ Recipient=ผู้รับ ErrorStockIsNotEnough=มีไม่มากพอที่หุ้น Shippable=shippable NonShippable=ไม่ shippable +ShowShippableStatus=Show shippable status ShowReceiving=Show delivery receipt NonExistentOrder=Nonexistent order +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/th_TH/exports.lang b/htdocs/langs/th_TH/exports.lang index 4ec434b49a1..c378db35d2c 100644 --- a/htdocs/langs/th_TH/exports.lang +++ b/htdocs/langs/th_TH/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=ประเภทของสาย (0 = ผลิ FileWithDataToImport=ไฟล์ที่มีข้อมูลที่จะนำเข้า FileToImport=แหล่งที่มาของไฟล์ที่จะนำเข้า FileMustHaveOneOfFollowingFormat=File to import must have one of following formats -DownloadEmptyExample=Download template file with field content information (* are mandatory fields) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... SourceFileFormat=แหล่งที่มาของรูปแบบไฟล์ diff --git a/htdocs/langs/tr_TR/deliveries.lang b/htdocs/langs/tr_TR/deliveries.lang index 9e7fe45cb1e..0bb2ba24e55 100644 --- a/htdocs/langs/tr_TR/deliveries.lang +++ b/htdocs/langs/tr_TR/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Alıcı ErrorStockIsNotEnough=Yeterli stok yok Shippable=Sevkedilebilir NonShippable=Sevkedilemez +ShowShippableStatus=Show shippable status ShowReceiving=Teslimat Fişini göster NonExistentOrder=Mevcut olmayan sipariş +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/tr_TR/exports.lang b/htdocs/langs/tr_TR/exports.lang index a909d78355e..b57587b63a8 100644 --- a/htdocs/langs/tr_TR/exports.lang +++ b/htdocs/langs/tr_TR/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Satır türü (0 = ürün, 1 = hizmet) FileWithDataToImport=İçe aktarılacak verileri içeren dosya FileToImport=İçe aktarılacak kaynak dosya FileMustHaveOneOfFollowingFormat=İçe aktarılacak dosya aşağıdaki formatlardan biri olmalıdır -DownloadEmptyExample=Şablon dosyasını alan içeriği bilgisiyle indir (* olanlar zorunlu alanlardır) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Kullanmak istediğiniz içe aktarma dosya biçimini, %s simgesine tıklayarak seçin... ChooseFileToImport=Dosyayı yükleyin ve daha sonra bu dosyayı kaynak içe aktarma dosyası olarak seçmek için %s simgesine tıklayın... SourceFileFormat=Kaynak dosya biçimi diff --git a/htdocs/langs/uk_UA/deliveries.lang b/htdocs/langs/uk_UA/deliveries.lang index e285559f004..590ee2a0dfe 100644 --- a/htdocs/langs/uk_UA/deliveries.lang +++ b/htdocs/langs/uk_UA/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Recipient ErrorStockIsNotEnough=There's not enough stock Shippable=Shippable NonShippable=Not Shippable +ShowShippableStatus=Show shippable status ShowReceiving=Show delivery receipt NonExistentOrder=Nonexistent order +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/uk_UA/exports.lang b/htdocs/langs/uk_UA/exports.lang index e075edfbcbe..317badfbf30 100644 --- a/htdocs/langs/uk_UA/exports.lang +++ b/htdocs/langs/uk_UA/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Type of line (0=product, 1=service) FileWithDataToImport=File with data to import FileToImport=Source file to import FileMustHaveOneOfFollowingFormat=File to import must have one of following formats -DownloadEmptyExample=Download template file with field content information (* are mandatory fields) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... SourceFileFormat=Source file format diff --git a/htdocs/langs/vi_VN/deliveries.lang b/htdocs/langs/vi_VN/deliveries.lang index 5156d289e9c..46fd7d5197d 100644 --- a/htdocs/langs/vi_VN/deliveries.lang +++ b/htdocs/langs/vi_VN/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Người nhận ErrorStockIsNotEnough=Không có đủ tồn kho Shippable=Vận chuyển được NonShippable=Không vận chuyển được +ShowShippableStatus=Show shippable status ShowReceiving=Hiển thị biên nhận giao hàng NonExistentOrder=Đơn hàng không tồn tại +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/vi_VN/exports.lang b/htdocs/langs/vi_VN/exports.lang index f15be790dc6..2cdb1136e64 100644 --- a/htdocs/langs/vi_VN/exports.lang +++ b/htdocs/langs/vi_VN/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Loại dòng (0 = sản phẩm, dịch vụ = 1) FileWithDataToImport=Tập tin với dữ liệu để nhập FileToImport=Tập tin nguồn để nhập dữ liệu FileMustHaveOneOfFollowingFormat=Tệp để nhập phải có một trong các định dạng sau -DownloadEmptyExample=Tải xuống tệp mẫu với thông tin nội dung trường (* là các trường bắt buộc) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Chọn định dạng tệp để sử dụng làm định dạng tệp nhập bằng cách nhấp vào biểu tượng %s để chọn ... ChooseFileToImport=Tải lên tệp sau đó nhấp vào biểu tượng %s để lựa chọn tệp là tệp nguồn nhập SourceFileFormat=Định dạng tệp nguồn diff --git a/htdocs/langs/zh_CN/deliveries.lang b/htdocs/langs/zh_CN/deliveries.lang index 38c9b4fc09e..af63b1c926c 100644 --- a/htdocs/langs/zh_CN/deliveries.lang +++ b/htdocs/langs/zh_CN/deliveries.lang @@ -27,5 +27,7 @@ Recipient=接收方 ErrorStockIsNotEnough=库存不足 Shippable=可运输 NonShippable=不可运输 +ShowShippableStatus=Show shippable status ShowReceiving=显示送达回执 NonExistentOrder=Nonexistent order +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/zh_CN/exports.lang b/htdocs/langs/zh_CN/exports.lang index 11cfd2fcb7e..3836e3d001e 100644 --- a/htdocs/langs/zh_CN/exports.lang +++ b/htdocs/langs/zh_CN/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=型号明细(0 =表示产品,1 =表示服务) FileWithDataToImport=与数据文件导入 FileToImport=源文件导入 FileMustHaveOneOfFollowingFormat=File to import must have one of following formats -DownloadEmptyExample=Download template file with field content information (* are mandatory fields) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... SourceFileFormat=源文件格式 diff --git a/htdocs/langs/zh_HK/deliveries.lang b/htdocs/langs/zh_HK/deliveries.lang index 1f48c01de75..cd8a36e6c70 100644 --- a/htdocs/langs/zh_HK/deliveries.lang +++ b/htdocs/langs/zh_HK/deliveries.lang @@ -27,5 +27,7 @@ Recipient=Recipient ErrorStockIsNotEnough=There's not enough stock Shippable=Shippable NonShippable=Not Shippable +ShowShippableStatus=Show shippable status ShowReceiving=Show delivery receipt NonExistentOrder=Nonexistent order +StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines diff --git a/htdocs/langs/zh_HK/exports.lang b/htdocs/langs/zh_HK/exports.lang index a0eb7161ef2..cb652229825 100644 --- a/htdocs/langs/zh_HK/exports.lang +++ b/htdocs/langs/zh_HK/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=Type of line (0=product, 1=service) FileWithDataToImport=File with data to import FileToImport=Source file to import FileMustHaveOneOfFollowingFormat=File to import must have one of following formats -DownloadEmptyExample=Download template file with field content information (* are mandatory fields) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... SourceFileFormat=Source file format diff --git a/htdocs/langs/zh_TW/admin.lang b/htdocs/langs/zh_TW/admin.lang index d7d1e9d7cf5..365ca72b6e7 100644 --- a/htdocs/langs/zh_TW/admin.lang +++ b/htdocs/langs/zh_TW/admin.lang @@ -37,7 +37,7 @@ UnlockNewSessions=移除連線鎖定 YourSession=您的程序 Sessions=用戶程序 WebUserGroup=網頁伺服器用戶/組別 -PermissionsOnFiles=Permissions on files +PermissionsOnFiles=檔案權限 PermissionsOnFilesInWebRoot=網站根目錄中檔案的權限 PermissionsOnFile=檔案%s的權限 NoSessionFound=您的PHP設定似乎不允許列出活動程序。用於保存程序的資料夾( %s )可能受到保護(例如,通過OS權限或PHP指令open_basedir)。 @@ -221,7 +221,7 @@ NotCompatible=此模組似乎不相容您 Dolibarr %s (適用最低版本 %s - CompatibleAfterUpdate=此模組需要升級您的 Dolibarr %s (最低版本%s -最高版本 %s)。 SeeInMarkerPlace=在市場可以看到 SeeSetupOfModule=請參閱模組%s的設定 -SetOptionTo=Set option %s to %s +SetOptionTo=將選項%s設定為%s Updated=升級 AchatTelechargement=購買 / 下載 GoModuleSetupArea=要部署/安裝新模組,請前往模組設定區域: %s 。 @@ -399,7 +399,7 @@ SecurityToken=安全的網址的金鑰 NoSmsEngine=沒有可用的簡訊發送管理器.由於依賴於外部供應商,所以預設發布版本未安裝簡訊發送管理器,但是您可以在%s上找到它們。 PDF=PDF格式 PDFDesc=生成PDF 的全域選項 -PDFOtherDesc=PDF Option specific to some modules +PDFOtherDesc=某些模組的特別PDF 選項 PDFAddressForging=規則給地址的部分 HideAnyVATInformationOnPDF=隱藏與銷售稅/營業稅相關的所有訊息 PDFRulesForSalesTax=銷售稅 / 營業稅規則 @@ -648,13 +648,13 @@ Module2900Desc=GeoIP Maxmind轉換功能 Module3200Name=不可改變的檔案 Module3200Desc=啟用不可更改的商業事件日誌。事件是即時存檔的。日誌是可以匯出的鍊式事件的唯讀表格。在某些國家/地區,此模組可能是必需的。 Module3400Name=社群網路 -Module3400Desc=Enable Social Networks fields into third parties and addresses (skype, twitter, facebook, ...). +Module3400Desc=啟用合作方與地址的社群網路欄位 (skype, twitter, facebook, ...). Module4000Name=人資 Module4000Desc=人力資源管理(部門、員工合約及感受的管理) Module5000Name=多重公司 Module5000Desc=允許您管理多重公司 -Module6000Name=Inter-modules Workflow -Module6000Desc=Workflow management between different modules (automatic creation of object and/or automatic status change) +Module6000Name=內部模組工作流程 +Module6000Desc=模組工作流管理(自動建立項目和/或自動更改狀態) Module10000Name=網站 Module10000Desc=使用所見即所得編輯器建立網站(公共)。這是一個面向網站管理員或面向開發人員的CMS(最好了解HTML和CSS語言)。只需將您的Web伺服器(Apache,Nginx等)設定為指向專用的Dolibarr資料夾,即可使用您自己的網域名稱在Internet上連線。 Module20000Name=休假申請管理 @@ -2102,8 +2102,8 @@ MakeAnonymousPing=對Dolibarr基金會服務器進行匿名Ping'+1'(僅在安 FeatureNotAvailableWithReceptionModule=啟用接收模組後,此功能不可用 EmailTemplate=電子郵件模板 EMailsWillHaveMessageID=電子郵件將具有與此語法匹配的標籤“參考” -PDF_SHOW_PROJECT=Show project on document -ShowProjectLabel=Project Label +PDF_SHOW_PROJECT=在文件中顯示專案 +ShowProjectLabel=專案標籤 PDF_USE_ALSO_LANGUAGE_CODE=如果您要在生成同一的PDF中以兩種不同的語言複製一些文字,則必須在此處設置第二種語言讓生成的PDF在同一頁中包含兩種不同的語言,選擇的可以用來生成PDF跟另一種語言(只有少數PDF模板支援此功能)。PDF只有一種語言則留空。 FafaIconSocialNetworksDesc=在此處輸入FontAwesome圖示的代碼。如果您不知道什麼是FontAwesome,則可以使用通用值fa-address-book。 RssNote=注意:每個RSS feed定義都提供一個小部件,您必須啟用該小部件才能使其在儀表板中看到 @@ -2118,29 +2118,30 @@ SwitchThisForABetterSecurity=建議將此值變更為%s以提高安全性 DictionaryProductNature= 產品性質 CountryIfSpecificToOneCountry=國家(如果特定於給定國家) YouMayFindSecurityAdviceHere=您可以在這裡找到安全建議 -ModuleActivatedMayExposeInformation=This PHP extension may expose sensitive data. If you don't need it, disable it. -ModuleActivatedDoNotUseInProduction=A module designed for the development has been enabled. Do not enable it on a production environment. +ModuleActivatedMayExposeInformation=這個 PHP外掛可能會暴露敏感資料。如果您不需要它,請關閉它。 +ModuleActivatedDoNotUseInProduction=為研發所設計的一個模組已經啟用。請不要在正式生產環境中使用。 CombinationsSeparator=產品組合的分隔符號 SeeLinkToOnlineDocumentation=有關範例,請參見選單上的線上文件連結。 SHOW_SUBPRODUCT_REF_IN_PDF=If the feature "%s" of module %s is used, show details of subproducts of a kit on PDF. AskThisIDToYourBank=請聯絡您的銀行以獲取此ID AdvancedModeOnly=Permision available in Advanced permission mode only ConfFileIsReadableOrWritableByAnyUsers=The conf file is readable or writable by any users. Give permission to web server user and group only. -MailToSendEventOrganization=Event Organization +MailToSendEventOrganization=事件組織 AGENDA_EVENT_DEFAULT_STATUS=Default event status when creating a event from the form -YouShouldDisablePHPFunctions=You should disable PHP functions +YouShouldDisablePHPFunctions=您應該停用 PHP 功能 IfCLINotRequiredYouShouldDisablePHPFunctions=Except if you need to run system commands in custom code, you shoud disable PHP functions PHPFunctionsRequiredForCLI=For shell purpose (like scheduled job backup or running an anitivurs program), you must keep PHP functions -NoWritableFilesFoundIntoRootDir=No writable files or directories of the common programs were found into your root directory (Good) -RecommendedValueIs=Recommended: %s -NotRecommended=Not recommanded -ARestrictedPath=A restricted path -CheckForModuleUpdate=Check for external modules updates +NoWritableFilesFoundIntoRootDir=在您的根目錄中找不到一般程式可寫入的檔案或目錄(好) +RecommendedValueIs=建議:%s +NotRecommended=不建議 +ARestrictedPath=受限路徑 +CheckForModuleUpdate=檢查外部模組更新 CheckForModuleUpdateHelp=This action will connect to editors of external modules to check if a new version is available. -ModuleUpdateAvailable=An update is available -NoExternalModuleWithUpdate=No updates found for external modules +ModuleUpdateAvailable=有可用的更新 +NoExternalModuleWithUpdate=未找到外部模組的更新 SwaggerDescriptionFile=Swagger API description file (for use with redoc for example) YouEnableDeprecatedWSAPIsUseRESTAPIsInstead=You enabled deprecated WS API. You should use REST API instead. -RandomlySelectedIfSeveral=Randomly selected if several pictures are available -DatabasePasswordObfuscated=Database password is obfuscated in conf file -DatabasePasswordNotObfuscated=Database password is NOT obfuscated in conf file +RandomlySelectedIfSeveral=有多張圖片時隨機選擇 +DatabasePasswordObfuscated=資料庫密碼在conf檔案中為加密 +DatabasePasswordNotObfuscated=資料庫密碼在conf檔案中不是加密 +APIsAreNotEnabled=未啟用 API 模組 diff --git a/htdocs/langs/zh_TW/agenda.lang b/htdocs/langs/zh_TW/agenda.lang index 9b4f589916b..0995ebd2ab4 100644 --- a/htdocs/langs/zh_TW/agenda.lang +++ b/htdocs/langs/zh_TW/agenda.lang @@ -4,7 +4,7 @@ Actions=事件 Agenda=應辦事項 TMenuAgenda=應辦事項 Agendas=應辦事項 -LocalAgenda=Default calendar +LocalAgenda=預設行事曆 ActionsOwnedBy=事件承辦人 ActionsOwnedByShort=承辦人 AffectedTo=指定給 @@ -20,7 +20,7 @@ MenuToDoActions=全部未完成事件 MenuDoneActions=全部已停止事件 MenuToDoMyActions=我的未完成事件 MenuDoneMyActions=我的已停止事件 -ListOfEvents=List of events (default calendar) +ListOfEvents=事件清單(預設行事曆) ActionsAskedBy=誰的事件報表 ActionsToDoBy=事件指定給 ActionsDoneBy=由誰完成事件 @@ -38,7 +38,7 @@ ActionsEvents=Dolibarr 會在待辦事項中自動建立行動事件 EventRemindersByEmailNotEnabled=電子郵件事件提醒未在%s模組設定中啟用。 ##### Agenda event labels ##### NewCompanyToDolibarr=合作方 %s 已建立 -COMPANY_MODIFYInDolibarr=Third party %s modified +COMPANY_MODIFYInDolibarr= 合作方%s已變更 COMPANY_DELETEInDolibarr=合作方%s已刪除 ContractValidatedInDolibarr=合約 %s 已驗證 CONTRACT_DELETEInDolibarr=合約%s已刪除 @@ -88,7 +88,7 @@ OrderDeleted=訂單已刪除 InvoiceDeleted=發票已刪除 DraftInvoiceDeleted=發票草稿已刪除 CONTACT_CREATEInDolibarr=聯絡人%s已建立 -CONTACT_MODIFYInDolibarr=Contact %s modified +CONTACT_MODIFYInDolibarr=聯絡人%s已變更 CONTACT_DELETEInDolibarr=聯絡人%s已刪除 PRODUCT_CREATEInDolibarr=產品 %s 已建立 PRODUCT_MODIFYInDolibarr=產品 %s 已修改 @@ -121,7 +121,7 @@ MRP_MO_UNVALIDATEInDolibarr=MO已設定為草稿狀態 MRP_MO_PRODUCEDInDolibarr=MO已生產 MRP_MO_DELETEInDolibarr=MO已刪除 MRP_MO_CANCELInDolibarr=MO已取消 -PAIDInDolibarr=%s paid +PAIDInDolibarr=%s已付款 ##### End agenda events ##### AgendaModelModule=事件的文件範本 DateActionStart=開始日期 @@ -133,7 +133,7 @@ AgendaUrlOptions4=logint = %s將限制輸出分配給用戶%s ( AgendaUrlOptionsProject=project=PROJECT_ID 將限制輸出為已連結專案操作 PROJECT_ID. AgendaUrlOptionsNotAutoEvent=notactiontype = systemauto排除自動事件。 AgendaUrlOptionsIncludeHolidays=設定includeholidays=1以包括假期活動。 -AgendaShowBirthdayEvents=Birthdays of contacts +AgendaShowBirthdayEvents=聯絡人生日 AgendaHideBirthdayEvents=隱藏連絡人生日 Busy=忙錄 ExportDataset_event1=待辦行程事件清單 diff --git a/htdocs/langs/zh_TW/boxes.lang b/htdocs/langs/zh_TW/boxes.lang index d093fea93e2..2d7399e21f9 100644 --- a/htdocs/langs/zh_TW/boxes.lang +++ b/htdocs/langs/zh_TW/boxes.lang @@ -18,13 +18,13 @@ BoxLastActions=最新活動 BoxLastContracts=最新合約 BoxLastContacts=最新通訊錄/地址 BoxLastMembers=最新會員 -BoxLastModifiedMembers=Latest modified members -BoxLastMembersSubscriptions=Latest member subscriptions +BoxLastModifiedMembers=最新已修改會員 +BoxLastMembersSubscriptions=最新會員訂閱 BoxFicheInter=最新干預 BoxCurrentAccounts=開啟帳戶餘額 BoxTitleMemberNextBirthdays=本月生日(會員) -BoxTitleMembersByType=Members by type -BoxTitleMembersSubscriptionsByYear=Members Subscriptions by year +BoxTitleMembersByType=依類型會員 +BoxTitleMembersSubscriptionsByYear=依年份會員訂閱 BoxTitleLastRssInfos=來自%s的最新%s筆消息 BoxTitleLastProducts=產品/服務:最新%s筆已修改 BoxTitleProductsAlertStock=產品:庫存警報 @@ -32,8 +32,8 @@ BoxTitleLastSuppliers=最新%s位已記錄供應商 BoxTitleLastModifiedSuppliers=供應商:最新的%s位已修改 BoxTitleLastModifiedCustomers=客戶:最新%s位已修改 BoxTitleLastCustomersOrProspects=最新%s位客戶或潛在方 -BoxTitleLastCustomerBills=最近%s修改的客戶發票 -BoxTitleLastSupplierBills=最近%s修改的供應商發票 +BoxTitleLastCustomerBills=最新%s張已修改客戶發票 +BoxTitleLastSupplierBills=最新%s張已修改的供應商發票 BoxTitleLastModifiedProspects=潛在方:最新%s位已修改 BoxTitleLastModifiedMembers=最新%s位會員 BoxTitleLastFicheInter=最新%s筆已修改干預措施 @@ -46,11 +46,11 @@ BoxMyLastBookmarks=書籤:最新%s筆 BoxOldestExpiredServices=最舊的活動已過期服務 BoxLastExpiredServices=具有活動已過期服務的最新%s位最早聯絡人 BoxTitleLastActionsToDo=最新%s次動作 -BoxTitleLastContracts=Latest %s contracts which were modified -BoxTitleLastModifiedDonations=Latest %s donations which were modified -BoxTitleLastModifiedExpenses=Latest %s expense reports which were modified -BoxTitleLatestModifiedBoms=Latest %s BOMs which were modified -BoxTitleLatestModifiedMos=Latest %s Manufacturing Orders which were modified +BoxTitleLastContracts=最新%s位聯絡人已修改 +BoxTitleLastModifiedDonations=最新%s筆捐款已修改 +BoxTitleLastModifiedExpenses=最新%s筆費用報表已修改 +BoxTitleLatestModifiedBoms=最新%s筆BOM已修改 +BoxTitleLatestModifiedMos=最新%s筆生產訂單已修改 BoxTitleLastOutstandingBillReached=超過最大未償還額的客戶 BoxGlobalActivity=全球活動(發票、提案/建議書、訂單) BoxGoodCustomers=好客戶 @@ -112,9 +112,9 @@ BoxTitleLastCustomerShipments=最新%s筆客戶發貨 NoRecordedShipments=沒有已記錄的客戶發貨 BoxCustomersOutstandingBillReached=達到最大客戶數 # Pages -UsersHome=Home users and groups -MembersHome=Home Membership -ThirdpartiesHome=Home Thirdparties -TicketsHome=Home Tickets -AccountancyHome=Home Accountancy +UsersHome=使用者與群組首頁 +MembersHome=會員首頁 +ThirdpartiesHome=合作方首頁 +TicketsHome=服務單首頁 +AccountancyHome=會計首頁 ValidatedProjects=已驗證的專案 diff --git a/htdocs/langs/zh_TW/cashdesk.lang b/htdocs/langs/zh_TW/cashdesk.lang index 76a92cdbec5..62c009bf199 100644 --- a/htdocs/langs/zh_TW/cashdesk.lang +++ b/htdocs/langs/zh_TW/cashdesk.lang @@ -41,8 +41,8 @@ Floor=樓 AddTable=新增表格 Place=地點 TakeposConnectorNecesary=需要“ TakePOS連接器” -OrderPrinters=Add a button to send the order to some given printers, without payment (for example to send an order to a kitchen) -NotAvailableWithBrowserPrinter=Not available when printer for receipt is set to browser: +OrderPrinters=增加一個按鈕將訂單傳送到某些特定的印表機,無需付款(例如將訂單傳送到廚房) +NotAvailableWithBrowserPrinter=當收據印表機設定為瀏覽器時不可用: SearchProduct=搜尋商品 Receipt=收據 Header=頁首 @@ -57,9 +57,9 @@ Paymentnumpad=輸入付款的便籤類型 Numberspad=號碼便籤 BillsCoinsPad=硬幣和紙幣便籤 DolistorePosCategory=用於Dolibarr的TakePOS模組與其他POS解決方案 -TakeposNeedsCategories=TakePOS needs at least one product categorie to work -TakeposNeedsAtLeastOnSubCategoryIntoParentCategory=TakePOS needs at least 1 product category under the category %s to work -OrderNotes=Can add some notes to each ordered items +TakeposNeedsCategories=TakePOS 需要至少一個產品類別才能正常使用 +TakeposNeedsAtLeastOnSubCategoryIntoParentCategory=TakePOS 需要在類別 %s 下至少有 1 個產品類別才能正常使用 +OrderNotes=可以為每個訂購的項目增加一些註解 CashDeskBankAccountFor=用於付款的預設帳戶 NoPaimementModesDefined=在 TakePOS 設定中未定義付款方式 TicketVatGrouped=按銷售單中的費率合計營業稅 @@ -84,7 +84,7 @@ InvoiceIsAlreadyValidated=發票已通過驗證 NoLinesToBill=無計費項目 CustomReceipt=自訂收據 ReceiptName=收據名稱 -ProductSupplements=Manage supplements of products +ProductSupplements=管理產品的補充 SupplementCategory=補充品類別 ColorTheme=顏色主題 Colorful=彩色 @@ -94,7 +94,7 @@ Browser=瀏覽器 BrowserMethodDescription=簡易列印收據。僅需幾個參數即可設定收據。通過瀏覽器列印。 TakeposConnectorMethodDescription=具有附加功能的外部模組。可以從雲端列印。 PrintMethod=列印方式 -ReceiptPrinterMethodDescription=Powerful method with a lot of parameters. Full customizable with templates. The server hosting the application can't be in the Cloud (must be able to reach the printers in your network). +ReceiptPrinterMethodDescription=具有大量參數的強大方法。完全可定制的模板。程式的伺服器不能位於雲端當中(必須能夠使用您網路中的印表機)。 ByTerminal=依照站台 TakeposNumpadUsePaymentIcon=在小鍵盤的付款按鈕上使用圖示而不是文字 CashDeskRefNumberingModules=POS銷售編號模組 @@ -102,7 +102,7 @@ CashDeskGenericMaskCodes6 =
{TN} 標籤用於增加站台 TakeposGroupSameProduct=群組相同產品線 StartAParallelSale=開啟新的平行銷售 SaleStartedAt=銷售開始於%s -ControlCashOpening=Open the "Control cash" popup when opening the POS +ControlCashOpening=開啟POS時跳出"控制收銀" CloseCashFence=關閉收銀台控制 CashReport=現金報告 MainPrinterToUse=要使用的主印表機 @@ -126,5 +126,5 @@ ModuleReceiptPrinterMustBeEnabled=必須先啟用收據印表機模組 AllowDelayedPayment=允許延遲付款 PrintPaymentMethodOnReceipts=在收據上列印付款方式 WeighingScale=秤重 -ShowPriceHT = Display the column with the price excluding tax (on screen) -ShowPriceHTOnReceipt = Display the column with the price excluding tax (on receipt) +ShowPriceHT = 顯示不包含稅金的欄位(在畫面中) +ShowPriceHTOnReceipt = 顯示不包含稅金的欄位(在發票/收據中) diff --git a/htdocs/langs/zh_TW/companies.lang b/htdocs/langs/zh_TW/companies.lang index 53a11b64ace..4fa44fbc166 100644 --- a/htdocs/langs/zh_TW/companies.lang +++ b/htdocs/langs/zh_TW/companies.lang @@ -179,7 +179,7 @@ ProfId1FR=Prof Id 1 (SIREN) ProfId2FR=Prof Id 2 (SIRET) ProfId3FR=Prof Id 3 (NAF, old APE) ProfId4FR=Prof Id 4 (RCS/RM) -ProfId5FR=Prof Id 5 (numéro EORI) +ProfId5FR=專業ID5(歐盟增值稅號EORI) ProfId6FR=- ProfId1ShortFR=SIREN ProfId2ShortFR=SIRET @@ -331,7 +331,7 @@ CustomerCodeDesc=客戶代碼,每個客戶都有一個號碼 SupplierCodeDesc=供應商代碼,每個供應商都有一個號碼 RequiredIfCustomer=若合作方屬於客戶或潛在方,則必需填入 RequiredIfSupplier=若合作方是供應商,則必需填入 -ValidityControledByModule=Validity controlled by the module +ValidityControledByModule=已確定由模組控制 ThisIsModuleRules=此模組的規則 ProspectToContact=需聯絡的潛在方 CompanyDeleted=已從資料庫中刪除“%s”公司。 @@ -439,7 +439,7 @@ ListSuppliersShort=供應商清單 ListProspectsShort=潛在方清單 ListCustomersShort=客戶清單 ThirdPartiesArea=合作方/通訊錄 -LastModifiedThirdParties=Latest %s Third Parties which were modified +LastModifiedThirdParties=最新已修改合作方%s UniqueThirdParties=Total number of Third Parties InActivity=開放 ActivityCeased=關閉 diff --git a/htdocs/langs/zh_TW/compta.lang b/htdocs/langs/zh_TW/compta.lang index 7182e21ce6d..cde0f870a95 100644 --- a/htdocs/langs/zh_TW/compta.lang +++ b/htdocs/langs/zh_TW/compta.lang @@ -65,7 +65,7 @@ LT2SupplierIN=SGST購買品 VATCollected=已收取營業稅 StatusToPay=付款 SpecialExpensesArea=所有特殊付款區域 -VATExpensesArea=Area for all TVA payments +VATExpensesArea=TVA 付款區域 SocialContribution=社會稅或財政稅 SocialContributions=社會稅或財政稅 SocialContributionsDeductibles=可抵扣的社會稅或財政稅 @@ -86,7 +86,7 @@ PaymentCustomerInvoice=客戶發票付款 PaymentSupplierInvoice=供應商發票付款 PaymentSocialContribution=社會/財政稅款付款 PaymentVat=營業稅付款 -AutomaticCreationPayment=Automatically record the payment +AutomaticCreationPayment=自動記錄付款 ListPayment=付款清單 ListOfCustomerPayments=客戶付款清單 ListOfSupplierPayments=供應商付款清單 @@ -135,7 +135,7 @@ NewCheckReceipt=新折扣 NewCheckDeposit=新的支票存款 NewCheckDepositOn=建立帳戶存款收據:%s NoWaitingChecks=沒有支票等待存入。 -DateChequeReceived=Check receiving date +DateChequeReceived=確認收到日期 NbOfCheques=支票數量 PaySocialContribution=支付社會/財政稅 PayVAT=支付稅金申報 @@ -146,9 +146,9 @@ ConfirmPaySalary=您確定要將此薪資卡分類為已付款嗎? DeleteSocialContribution=刪除社會或財政稅金 DeleteVAT=刪除稅金申報 DeleteSalary=刪除薪資卡 -ConfirmDeleteSocialContribution=Are you sure you want to delete this social/fiscal tax payment ? -ConfirmDeleteVAT=Are you sure you want to delete this VAT declaration ? -ConfirmDeleteSalary=Are you sure you want to delete this salary? +ConfirmDeleteSocialContribution=您確定要刪除此社會/財政稅款嗎? +ConfirmDeleteVAT=您確定要刪除此增值稅申報單嗎? +ConfirmDeleteSalary=您確定要刪除此薪資嗎? ExportDataset_tax_1=社會和財政稅金及繳稅 CalcModeVATDebt=%s承諾會計營業稅%s模式. CalcModeVATEngagement=%s收入-支出營業稅%s模式. @@ -250,7 +250,7 @@ ACCOUNTING_ACCOUNT_SUPPLIER=供應商合作方使用的會計科目 ACCOUNTING_ACCOUNT_SUPPLIER_Desc=合作方卡上定義的專用會計科目將僅用於子帳會計。如果未定義第三方的專用供應商會計科目,則此科目將用於“總帳”,並作為“子帳”會計的預設值。 ConfirmCloneTax=確認複製社會/財政稅 ConfirmCloneVAT=確認複製稅金申報 -ConfirmCloneSalary=Confirm the clone of a salary +ConfirmCloneSalary=確認複製薪資 CloneTaxForNextMonth=為下個月複製此稅 SimpleReport=簡易報告 AddExtraReport=其他報告(增加外國和國家客戶報告) @@ -269,7 +269,7 @@ AccountingAffectation=會計分配 LastDayTaxIsRelatedTo=稅期的最後一天 VATDue=要求營業稅 ClaimedForThisPeriod=要求的期間 -PaidDuringThisPeriod=Paid for this period +PaidDuringThisPeriod=本期支付 PaidDuringThisPeriodDesc=This is the sum of all payments linked to VAT declarations which have an end-of-period date in the selected date range ByVatRate=依營業稅率 TurnoverbyVatrate=依營業稅率開票的營業額 @@ -286,9 +286,9 @@ ReportPurchaseTurnover=已開票營業額 ReportPurchaseTurnoverCollected=採購營業額 IncludeVarpaysInResults = 在報告中包括各種付款 IncludeLoansInResults = 在報告中包括貸款 -InvoiceLate30Days = Invoices late > 30 days -InvoiceLate15Days = Invoices late > 15 days -InvoiceLateMinus15Days = Invoices late +InvoiceLate30Days = 發票延遲 > 30 天 +InvoiceLate15Days = 發票延遲 > 15 天 +InvoiceLateMinus15Days = 發票延遲 InvoiceNotLate = To be collected < 15 days InvoiceNotLate15Days = To be collected in 15 days InvoiceNotLate30Days = To be collected in 30 days diff --git a/htdocs/langs/zh_TW/deliveries.lang b/htdocs/langs/zh_TW/deliveries.lang index 489be238c4e..6d6c7d15554 100644 --- a/htdocs/langs/zh_TW/deliveries.lang +++ b/htdocs/langs/zh_TW/deliveries.lang @@ -30,3 +30,4 @@ NonShippable=無法運送 ShowShippableStatus=顯示可運送狀態 ShowReceiving=顯示交貨單 NonExistentOrder=不存在的訂單 +StockQuantitiesAlreadyAllocatedOnPreviousLines = 已在先前的行上分配庫存數量 diff --git a/htdocs/langs/zh_TW/errors.lang b/htdocs/langs/zh_TW/errors.lang index 2b1162b14e3..2448ae31222 100644 --- a/htdocs/langs/zh_TW/errors.lang +++ b/htdocs/langs/zh_TW/errors.lang @@ -4,14 +4,14 @@ NoErrorCommitIsDone=我們保證沒有錯誤 # Errors ErrorButCommitIsDone=發現錯誤,但儘管如此我們仍進行驗證 -ErrorBadEMail=Email %s is incorrect -ErrorBadMXDomain=Email %s seems incorrect (domain has no valid MX record) -ErrorBadUrl=Url %s is incorrect +ErrorBadEMail=電子郵件 %s 不正確 +ErrorBadMXDomain=電子郵件 %s 似乎不正確(網域沒有有效的 MX 記錄) +ErrorBadUrl=網址 %s 不正確 ErrorBadValueForParamNotAString=您的參數值錯誤。一般在轉譯遺失時產生。 -ErrorRefAlreadyExists=Reference %s already exists. +ErrorRefAlreadyExists=參考%s已經存在。 ErrorLoginAlreadyExists=登入者%s已經存在。 ErrorGroupAlreadyExists=群組%s已經存在。 -ErrorEmailAlreadyExists=Email %s already exists. +ErrorEmailAlreadyExists=電子郵件 %s 已存在。 ErrorRecordNotFound=記錄沒有找到。 ErrorFailToCopyFile=無法將檔案'%s'複製到'%s' ErrorFailToCopyDir=無法將資料夾'%s' 複製到'%s'. @@ -39,7 +39,7 @@ ErrorBadSupplierCodeSyntax=供應商代碼語法錯誤 ErrorSupplierCodeRequired=需要供應商代碼 ErrorSupplierCodeAlreadyUsed=供應商代碼已使用 ErrorBadParameters=錯誤的參數 -ErrorWrongParameters=Wrong or missing parameters +ErrorWrongParameters=錯誤或缺少參數 ErrorBadValueForParameter=參數"%s"中的錯誤值 "%s'" ErrorBadImageFormat=圖片檔案格式不支援(您的PHP不支援轉換此格式圖片) ErrorBadDateFormat="%s"日期格式錯誤 @@ -47,11 +47,11 @@ ErrorWrongDate=日期不正確! ErrorFailedToWriteInDir=無法寫入資料夾%s ErrorFoundBadEmailInFile=找到電子郵件文件中的%s行語法不正確(例如電子郵件%s行 =%s) ErrorUserCannotBeDelete=無法刪除用戶。也許它與Dolibarr實體相關。 -ErrorFieldsRequired=Some required fields have been left blank. -ErrorSubjectIsRequired=The email subject is required +ErrorFieldsRequired=一些必填欄位已留空。 +ErrorSubjectIsRequired=電子郵件主題為必填 ErrorFailedToCreateDir=無法建立資料夾。檢查網頁伺服器中的用戶有權限寫入Dolibarr檔案資料夾。如果PHP使用了參數safe_mode,檢查網頁伺服器的用戶(或群組)擁有Dolibarr php檔案。 ErrorNoMailDefinedForThisUser=沒有此用戶的定義郵件 -ErrorSetupOfEmailsNotComplete=Setup of emails is not complete +ErrorSetupOfEmailsNotComplete=電子郵件設定未完成 ErrorFeatureNeedJavascript=此功能需要啟動Javascript。需要變更請前往設定 - 顯示。 ErrorTopMenuMustHaveAParentWithId0=一個類型'頂部'選單不能有一個母選單。在母選單填入0或選擇一個類型為'左'的選單。 ErrorLeftMenuMustHaveAParentId=一個類型為'左'的選單必須有一個母選單的ID。 @@ -60,7 +60,7 @@ ErrorDirNotFound=未找到資料夾%s(錯誤的路徑,錯誤的權限 ErrorFunctionNotAvailableInPHP=此功能需要函數%s,但是無法在此PHP版本中使用。 ErrorDirAlreadyExists=具有此名稱的資料夾已經存在。 ErrorFileAlreadyExists=具有此名稱的檔案已經存在。 -ErrorDestinationAlreadyExists=Another file with the name %s already exists. +ErrorDestinationAlreadyExists=檔案名稱%s已存在 ErrorPartialFile=伺服器未完整的收到檔案。 ErrorNoTmpDir=臨時指示%s不存在。 ErrorUploadBlockedByAddon=PHP / Apache的插件已阻擋上傳。 @@ -80,7 +80,7 @@ ErrorExportDuplicateProfil=此匯出設定已存在此設定檔案名稱。 ErrorLDAPSetupNotComplete=Dolibarr與LDAP的匹配不完整。 ErrorLDAPMakeManualTest=.ldif檔案已在資料夾%s中.請以命令行手動讀取以得到更多的錯誤信息。 ErrorCantSaveADoneUserWithZeroPercentage=如果填寫了“完成者”欄位,則無法使用“狀態未開始”保存操作。 -ErrorRefAlreadyExists=Reference %s already exists. +ErrorRefAlreadyExists=參考%s已經存在。 ErrorPleaseTypeBankTransactionReportName=請輸入必須在報告條目中的銀行對帳單名稱(格式YYYYMM或YYYYMMDD) ErrorRecordHasChildren=因為有子記錄所以刪除失敗。 ErrorRecordHasAtLeastOneChildOfType=項目至少有一個子類別%s @@ -118,7 +118,7 @@ ErrorCantReadFile=無法讀取檔案'%s' ErrorCantReadDir=無法讀取資料夾'%s' ErrorBadLoginPassword=錯誤的帳號或密碼 ErrorLoginDisabled=您的帳戶已被停用 -ErrorFailedToRunExternalCommand=Failed to run external command. Check it is available and runnable by your PHP server user. Check also the command is not protected on shell level by a security layer like apparmor. +ErrorFailedToRunExternalCommand=無法執行外部命令。檢查它是可用並且可執行在PHP的伺服器上。同樣地請確認此命令在Shell層級中不被如apparmor的安全層級保護。 ErrorFailedToChangePassword=無法更改密碼 ErrorLoginDoesNotExists=找不到登入名稱%s的用戶。 ErrorLoginHasNoEmail=這位用戶沒有電子郵件地址。程序中止。 @@ -141,8 +141,8 @@ ErrorNewValueCantMatchOldValue=新值不能等於舊值 ErrorFailedToValidatePasswordReset=重置密碼失敗。可能是重新初始化已經完成(此連結只能使用一次)。如果不是,請嘗試再重置密碼一次。 ErrorToConnectToMysqlCheckInstance=連結資料庫失敗。檢查資料庫伺服器是否正在執行(例如mysql / mariadb,您可以使用“ sudo service mysql start”命令行啟動它)。 ErrorFailedToAddContact=新增聯絡人失敗 -ErrorDateMustBeBeforeToday=The date must be lower than today -ErrorDateMustBeInFuture=The date must be greater than today +ErrorDateMustBeBeforeToday=日期必須早於今天 +ErrorDateMustBeInFuture=日期必須晚於今天 ErrorPaymentModeDefinedToWithoutSetup=付款方式已設定為%s類型,但模組“發票”尚未完整定義要為此付款方式顯示的資訊設定。 ErrorPHPNeedModule=錯誤,您的PHP必須安裝模組%s才能使用此功能。 ErrorOpenIDSetupNotComplete=您設定了Dolibarr設定檔案以允許OpenID身份驗證,但未將OpenID的服務網址定義為常數%s @@ -221,15 +221,15 @@ ErrorChooseBetweenFreeEntryOrPredefinedProduct=您必須選擇商品是否為預 ErrorDiscountLargerThanRemainToPaySplitItBefore=您嘗試使用的折扣大於剩餘的折扣。將之前的折扣分成2個較小的折扣。 ErrorFileNotFoundWithSharedLink=找不到檔案。可能是共享金鑰最近被修改或檔案被刪除了。 ErrorProductBarCodeAlreadyExists=產品條碼%s已存在於另一個產品參考上。 -ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using kits to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number. +ErrorNoteAlsoThatSubProductCantBeFollowedByLot=請注意使用Kit時,如果一個子產品(或子產品的子產品)需要序號/批號時,無法自動增加/減少子產品。 ErrorDescRequiredForFreeProductLines=對於帶有免費產品的行,必須進行描述說明 ErrorAPageWithThisNameOrAliasAlreadyExists=此頁面/容器%s與您嘗試使用的名稱/別名相同 ErrorDuringChartLoad=載入會計科目表時出錯。如果幾個帳戶沒有被載入,您仍然可以手動輸入。 ErrorBadSyntaxForParamKeyForContent=參數keyforcontent的語法錯誤。必須具有以%s或%s開頭的值 ErrorVariableKeyForContentMustBeSet=錯誤,必須設定名稱為%s(帶有文字內容)或%s(帶有外部網址)的常數。 -ErrorURLMustEndWith=URL %s must end %s +ErrorURLMustEndWith=網址 %s 必須以 %s 結尾 ErrorURLMustStartWithHttp=網址 %s 必須以 http://或https://開始 -ErrorHostMustNotStartWithHttp=Host name %s must NOT start with http:// or https:// +ErrorHostMustNotStartWithHttp=主機名稱 %s 不能以 http:// 或 https:// 開頭 ErrorNewRefIsAlreadyUsed=錯誤,新參考已被使用 ErrorDeletePaymentLinkedToAClosedInvoiceNotPossible=錯誤,無法刪除連結到已關閉發票的付款。 ErrorSearchCriteriaTooSmall=搜尋條件太小。 @@ -247,23 +247,23 @@ ErrorBatchNoFoundEnoughQuantityForProductInWarehouse=倉庫“ %s”中產品“ ErrorOnlyOneFieldForGroupByIsPossible=“群組依據”只能使用1個欄位(其他欄位則被丟棄) ErrorTooManyDifferentValueForSelectedGroupBy=為欄位“ %s ”發現了太多不同的值(多於 %s ),因此我們不能將其用作“分組依據”。 “分組依據”欄位已刪除。也許您想將其用作X軸? ErrorReplaceStringEmpty=錯誤,要替換的字串為空 -ErrorProductNeedBatchNumber=Error, product '%s' need a lot/serial number -ErrorProductDoesNotNeedBatchNumber=Error, product '%s' does not accept a lot/serial number -ErrorFailedToReadObject=Error, failed to read object of type %s -ErrorParameterMustBeEnabledToAllwoThisFeature=Error, parameter %s must be enabled into conf/conf.php to allow use of Command Line Interface by the internal job scheduler -ErrorLoginDateValidity=Error, this login is outside the validity date range -ErrorValueLength=Length of field '%s' must be higher than '%s' -ErrorReservedKeyword=The word '%s' is a reserved keyword -ErrorNotAvailableWithThisDistribution=Not available with this distribution +ErrorProductNeedBatchNumber=錯誤,產品“ %s ”需要批號/序號 +ErrorProductDoesNotNeedBatchNumber=錯誤,產品“ %s ”不接受批號/序號 +ErrorFailedToReadObject=錯誤,無法讀取 %s 類型的項目 +ErrorParameterMustBeEnabledToAllwoThisFeature=錯誤,必須在 conf/conf.php 中啟用參數%s以允許內部命令列工作排程界面使用 +ErrorLoginDateValidity=錯誤,此登錄超過有效日期範圍 +ErrorValueLength=欄位“ %s ”的長度必須大於“ %s" +ErrorReservedKeyword=單詞“ %s ”是保留關鍵字 +ErrorNotAvailableWithThisDistribution=不適用於此發行版本 ErrorPublicInterfaceNotEnabled=未啟用公共界面 -ErrorLanguageRequiredIfPageIsTranslationOfAnother=The language of new page must be defined if it is set as a translation of another page -ErrorLanguageMustNotBeSourceLanguageIfPageIsTranslationOfAnother=The language of new page must not be the source language if it is set as a translation of another page -ErrorAParameterIsRequiredForThisOperation=A parameter is mandatory for this operation -ErrorDateIsInFuture=Error, the date can't be in the future -ErrorAnAmountWithoutTaxIsRequired=Error, amount is mandatory -ErrorAPercentIsRequired=Error, please fill in the percentage correctly -ErrorYouMustFirstSetupYourChartOfAccount=You must first setup your chart of account -ErrorFailedToFindEmailTemplate=Failed to find template with code name %s +ErrorLanguageRequiredIfPageIsTranslationOfAnother=如果將新頁面設定為其他頁面的翻譯,則必須定義新頁面的語言 +ErrorLanguageMustNotBeSourceLanguageIfPageIsTranslationOfAnother=如果新頁面的語言為另一頁面的翻譯,則該語言不得為來源語言 +ErrorAParameterIsRequiredForThisOperation=此操作必須有一個參數 +ErrorDateIsInFuture=錯誤,日期不能是未來 +ErrorAnAmountWithoutTaxIsRequired=錯誤,金額為必填項目 +ErrorAPercentIsRequired=錯誤,請正確填寫百分比 +ErrorYouMustFirstSetupYourChartOfAccount=您必須先設定會計項目表 +ErrorFailedToFindEmailTemplate=無法找到代號為 %s 的模板 # Warnings WarningParamUploadMaxFileSizeHigherThanPostMaxSize=您的PHP參數upload_max_filesize(%s)高於PHP參數post_max_size(%s)。這不是相同的設定。 @@ -289,15 +289,15 @@ WarningYourLoginWasModifiedPleaseLogin=您的登入名稱已修改。為了安 WarningAnEntryAlreadyExistForTransKey=此語言的翻譯密鑰條目已存在 WarningNumberOfRecipientIsRestrictedInMassAction=警告,在清單上使用批次操作時,其他收件人的數量限制為%s WarningDateOfLineMustBeInExpenseReportRange=警告,行的日期不在費用報告的範圍內 -WarningProjectDraft=Project is still in draft mode. Don't forget to validate it if you plan to use tasks. +WarningProjectDraft=專案仍處於草案模式。如果您計劃使用任務,請不要忘記驗證它。 WarningProjectClosed=專案已關閉。您必須先重新打開它。 WarningSomeBankTransactionByChequeWereRemovedAfter=在產生包括它們的收據之後,一些銀行交易將被刪除。因此支票的數量和收據的數量可能與清單中的數量和總數有所不同。 -WarningFailedToAddFileIntoDatabaseIndex=Warning, failed to add file entry into ECM database index table -WarningTheHiddenOptionIsOn=Warning, the hidden option %s is on. -WarningCreateSubAccounts=Warning, you can't create directly a sub account, you must create a third party or an user and assign them an accounting code to find them in this list -WarningAvailableOnlyForHTTPSServers=Available only if using HTTPS secured connection. -WarningModuleXDisabledSoYouMayMissEventHere=Module %s has not been enabled. So you may miss a lot of event here. -ErrorActionCommPropertyUserowneridNotDefined=User's owner is required -ErrorActionCommBadType=Selected event type (id: %n, code: %s) do not exist in Event Type dictionary -CheckVersionFail=Version check fail -ErrorWrongFileName=Name of the file cannot have __SOMETHING__ in it +WarningFailedToAddFileIntoDatabaseIndex=警告,無法將檔案條目增加到 ECM 資料庫索引表中 +WarningTheHiddenOptionIsOn=警告,隱藏選項 %s 已開啟。 +WarningCreateSubAccounts=警告,您不能直接建立子帳戶,您必須建立合作方或用戶並為其分配會計代碼才能在此清單中找到它們 +WarningAvailableOnlyForHTTPSServers=僅在使用 HTTPS 安全連線時可用。 +WarningModuleXDisabledSoYouMayMissEventHere=模組 %s 尚未啟用。所以你可能會在這裡錯過很多事件。 +ErrorActionCommPropertyUserowneridNotDefined=需要用戶的擁有者 +ErrorActionCommBadType=選擇的事件類型(id:%n,代碼:%s)在事件類型分類中不存在 +CheckVersionFail=版本檢查失敗 +ErrorWrongFileName=檔案名稱中不可以有__SOMETHING__ diff --git a/htdocs/langs/zh_TW/eventorganization.lang b/htdocs/langs/zh_TW/eventorganization.lang index 7db22c3484a..603424ac9b2 100644 --- a/htdocs/langs/zh_TW/eventorganization.lang +++ b/htdocs/langs/zh_TW/eventorganization.lang @@ -17,8 +17,8 @@ # # Generic # -ModuleEventOrganizationName = Event Organization -EventOrganizationDescription = Event Organization through Module Project +ModuleEventOrganizationName = 事件組織 +EventOrganizationDescription = 使用專案模組組織事件 EventOrganizationDescriptionLong= Manage Event organization for conference, attendees, speaker, and attendees, with public subcription page # # Menu @@ -31,7 +31,7 @@ EventOrganizationConferenceOrBoothMenuLeft = Conference Or Booth # EventOrganizationSetup = Event Organization setup Settings = 設定 -EventOrganizationSetupPage = Event Organization setup page +EventOrganizationSetupPage = 事件組織設定頁面 EVENTORGANIZATION_TASK_LABEL = Label of tasks to create automatically when project is validated EVENTORGANIZATION_TASK_LABELTooltip = When you validate an organized event, some tasks can be automatically created in the project

For example:
Send Call for Conference
Send Call for Booth
Receive call for conferences
Receive call for Booth
Open subscriptions to events for attendees
Send remind of event to speakers
Send remind of event to Booth hoster
Send remind of event to attendees EVENTORGANIZATION_CATEG_THIRDPARTY_CONF = Category to add to third-parties automatically created when someone suggests a conference diff --git a/htdocs/langs/zh_TW/exports.lang b/htdocs/langs/zh_TW/exports.lang index 721e44dfde2..13c3a18d0de 100644 --- a/htdocs/langs/zh_TW/exports.lang +++ b/htdocs/langs/zh_TW/exports.lang @@ -53,7 +53,8 @@ TypeOfLineServiceOrProduct=類型(0 =產品,1 =服務) FileWithDataToImport=匯入有資料的檔案 FileToImport=欲匯入的來源檔案 FileMustHaveOneOfFollowingFormat=要匯入的檔案必須是以下格式 -DownloadEmptyExample=下載帶有欄位內容資料的範本檔案(*為必填欄位) +DownloadEmptyExample=Download template file with field content information +StarAreMandatory=* are mandatory fields ChooseFormatOfFileToImport=通過點選%s圖示選擇要匯入的檔案格式... ChooseFileToImport=上傳檔案,然後點擊%s圖示以選擇要匯入的檔案... SourceFileFormat=來源檔案格式 diff --git a/htdocs/langs/zh_TW/holiday.lang b/htdocs/langs/zh_TW/holiday.lang index 72b939ec843..2fcd554e4f3 100644 --- a/htdocs/langs/zh_TW/holiday.lang +++ b/htdocs/langs/zh_TW/holiday.lang @@ -1,5 +1,5 @@ # Dolibarr language file - Source file is en_US - holiday -HRM=人資 +HRM=人力資源 Holidays=休假 CPTitreMenu=休假 MenuReportMonth=月結單 @@ -13,7 +13,7 @@ ToReviewCP=等待批准 ApprovedCP=已批准 CancelCP=已取消 RefuseCP=已拒絕 -ValidatorCP=批准人 +ValidatorCP=Approver ListeCP=休假清單 Leave=休假申請 LeaveId=休假編號 @@ -39,11 +39,11 @@ TitreRequestCP=休假申請 TypeOfLeaveId=休假ID類型 TypeOfLeaveCode=休假代碼類型 TypeOfLeaveLabel=休假標籤類型 -NbUseDaysCP=已休假天數 -NbUseDaysCPHelp=此計算考慮了字典中定義的非工作日和假期。 -NbUseDaysCPShort=已休假天數 -NbUseDaysCPShortInMonth=已休假天數(月) -DayIsANonWorkingDay=%s是非工作日 +NbUseDaysCP=Number of days of leave used +NbUseDaysCPHelp=The calculation takes into account the non-working days and the holidays defined in the dictionary. +NbUseDaysCPShort=Days of leave +NbUseDaysCPShortInMonth=Days of leave in month +DayIsANonWorkingDay=%s is a non-working day DateStartInMonth=開始日期(月份) DateEndInMonth=結束日期(月份) EditCP=編輯 @@ -55,7 +55,7 @@ TitleDeleteCP=刪除休假申請 ConfirmDeleteCP=確認刪除此休假申請嗎? ErrorCantDeleteCP=錯誤,您無權刪除此休假申請。 CantCreateCP=您無權提出休假申請。 -InvalidValidatorCP=您必須為休假申請選擇批准人。 +InvalidValidatorCP=You must choose the approver for your leave request. NoDateDebut=您必須選擇開始日期。 NoDateFin=您必須選擇結束日期。 ErrorDureeCP=您的休假申請不包含工作日。 @@ -80,14 +80,14 @@ UserCP=用戶 ErrorAddEventToUserCP=增加特殊假期時發生錯誤。 AddEventToUserOkCP=特別假期的增加已經完成。 MenuLogCP=檢視變更日誌 -LogCP=可用假期更新日誌 -ActionByCP=執行者 -UserUpdateCP=對於用戶 +LogCP=Log of all updates made to "Balance of Leave" +ActionByCP=更新者 +UserUpdateCP=Updated for PrevSoldeCP=剩餘假期 NewSoldeCP=新剩餘假期 alreadyCPexist=在此期間之休假申請已完成。 -FirstDayOfHoliday=假期的第一天 -LastDayOfHoliday=假期的最後一天 +FirstDayOfHoliday=Beginning day of leave request +LastDayOfHoliday=Ending day of leave request BoxTitleLastLeaveRequests=最新%s筆已修改的休假申請 HolidaysMonthlyUpdate=每月更新 ManualUpdate=手動更新 @@ -99,13 +99,13 @@ LastHolidays=最新%s的休假申請 AllHolidays=所有休假申請 HalfDay=半天 NotTheAssignedApprover=您不是分配的批准人 -LEAVE_PAID=帶薪休假 +LEAVE_PAID=年假 LEAVE_SICK=病假 -LEAVE_OTHER=其他休假 -LEAVE_PAID_FR=帶薪休假 +LEAVE_OTHER=事假 +LEAVE_PAID_FR=年假 ## Configuration du Module ## -LastUpdateCP=假期分配的最新自動更新 -MonthOfLastMonthlyUpdate=假期分配的最新自動月更新 +LastUpdateCP=Last automatic update of leave allocation +MonthOfLastMonthlyUpdate=Month of last automatic update of leave allocation UpdateConfCPOK=已更新成功。 Module27130Name= 休假管理 Module27130Desc= 休假管理 @@ -125,10 +125,10 @@ HolidaysCanceledBody=您從%s到%s的休假申請已被取消。 FollowedByACounter=1:這種類型的休假需有計數器追蹤。計數器手動或自動遞增,並且當休假申請通過驗證後,計數器遞減。
0:沒有被計數器追蹤。 NoLeaveWithCounterDefined=沒有休假類型被定義成需要被計數器追蹤 GoIntoDictionaryHolidayTypes=前往首頁-設定-字典-休假類型以設定不同類型的休假。 -HolidaySetup=假期模組的設定 -HolidaysNumberingModules=休假申請編號模型 +HolidaySetup=Setup of module Leave +HolidaysNumberingModules=Numbering models for leave requests TemplatePDFHolidays=休假PDF範本 -FreeLegalTextOnHolidays=PDF上的自由正文 -WatermarkOnDraftHolidayCards=休假申請草案上的水印 +FreeLegalTextOnHolidays=PDF上的自由文字 +WatermarkOnDraftHolidayCards=休假申請草案上的浮水印 HolidaysToApprove=可批准假期 NobodyHasPermissionToValidateHolidays=沒有人有權限驗證假期 diff --git a/htdocs/langs/zh_TW/hrm.lang b/htdocs/langs/zh_TW/hrm.lang index 240980f71d7..9a981ea4d89 100644 --- a/htdocs/langs/zh_TW/hrm.lang +++ b/htdocs/langs/zh_TW/hrm.lang @@ -9,7 +9,7 @@ ConfirmDeleteEstablishment=您確定要刪除此營業所嗎? OpenEtablishment=開啟營業所 CloseEtablishment=關閉營業所 # Dictionary -DictionaryPublicHolidays=Leave - Public holidays +DictionaryPublicHolidays=休假 - 公共假期 DictionaryDepartment=HRM-部門清單 DictionaryFunction=人力資源管理-職位 # Module diff --git a/htdocs/langs/zh_TW/languages.lang b/htdocs/langs/zh_TW/languages.lang index e8199dc4fd9..bd3940ba997 100644 --- a/htdocs/langs/zh_TW/languages.lang +++ b/htdocs/langs/zh_TW/languages.lang @@ -3,7 +3,8 @@ Language_am_ET=衣索比亞 Language_ar_AR=阿拉伯語 Language_ar_EG=阿拉伯語(埃及) Language_ar_SA=阿拉伯語 -Language_ar_TN=Arabic (Tunisia) +Language_ar_TN=阿拉伯語(突尼斯) +Language_ar_IQ=阿拉伯語(伊拉克) Language_az_AZ=亞塞拜然 Language_bn_BD=孟加拉語 Language_bn_IN=孟加拉語(印度) @@ -83,9 +84,10 @@ Language_ne_NP=尼泊爾語 Language_nl_BE=荷蘭語(比利時) Language_nl_NL=荷蘭人 Language_pl_PL=波蘭語 +Language_pt_AO=葡萄牙語(安哥拉) Language_pt_BR=葡萄牙語(巴西) Language_pt_PT=葡萄牙語 -Language_ro_MD=Romanian (Moldavia) +Language_ro_MD=羅馬尼亞語(摩爾達維亞) Language_ro_RO=羅馬尼亞語 Language_ru_RU=俄語 Language_ru_UA=俄語(烏克蘭) diff --git a/htdocs/langs/zh_TW/main.lang b/htdocs/langs/zh_TW/main.lang index 911e650e96a..68196c1bc0c 100644 --- a/htdocs/langs/zh_TW/main.lang +++ b/htdocs/langs/zh_TW/main.lang @@ -180,7 +180,7 @@ SaveAndNew=儲存並新增 TestConnection=測試連線 ToClone=複製 ConfirmCloneAsk=您確定要複製物件 %s? -ConfirmClone=Choose the data you want to clone: +ConfirmClone=選擇要複製的資料: NoCloneOptionsSpecified=沒有已定義要複製的資料。 Of=的 Go=前往 @@ -246,7 +246,7 @@ DefaultModel=預設文件範本 Action=事件 About=關於 Number=數量 -NumberByMonth=Total reports by month +NumberByMonth=每月報告總數 AmountByMonth=每月金額 Numero=數量 Limit=限制 @@ -278,7 +278,7 @@ DateModificationShort=修改日 IPModification=修改IP DateLastModification=最新修改日期 DateValidation=驗證日期 -DateSigning=Signing date +DateSigning=簽名日期 DateClosing=關閉日期 DateDue=截止日期 DateValue=值的日期 @@ -341,8 +341,8 @@ KiloBytes=KB MegaBytes=MB GigaBytes=GB TeraBytes=TB -UserAuthor=Ceated by -UserModif=Updated by +UserAuthor=建立者 +UserModif=更新者 b=b. Kb=Kb Mb=Mb @@ -362,7 +362,7 @@ UnitPriceHTCurrency=單價(不含)(貨幣) UnitPriceTTC=單位價格 PriceU=單價 PriceUHT=單價(淨) -PriceUHTCurrency=U.P (net) (currency) +PriceUHTCurrency=U.P(淨值)(貨幣) PriceUTTC=單價(含稅) Amount=金額 AmountInvoice=發票金額 @@ -390,8 +390,8 @@ AmountTotal=總金額 AmountAverage=平均金額 PriceQtyMinHT=最小數量價格(不含稅) PriceQtyMinHTCurrency=最小數量價格(不含稅)(貨幣) -PercentOfOriginalObject=Percent of original object -AmountOrPercent=Amount or percent +PercentOfOriginalObject=原始項目的百分比 +AmountOrPercent=金額或百分比 Percentage=百分比 Total=總計 SubTotal=小計 @@ -430,7 +430,7 @@ LT1IN=CGST LT2IN=SGST LT1GC=附加美分 VATRate=稅率 -RateOfTaxN=Rate of tax %s +RateOfTaxN=稅率%s VATCode=稅率代碼 VATNPR=NPR 稅率 DefaultTaxRate=預設稅率 @@ -730,8 +730,8 @@ MenuMembers=會員 MenuAgendaGoogle=Google 行事曆 MenuTaxesAndSpecialExpenses=稅金|特別費用 ThisLimitIsDefinedInSetup=Dolibarr 的限制(選單 首頁 - 設定 - 安全): %s Kb, PHP的限制:%s Kb -ThisLimitIsDefinedInSetupAt=Dolibarr limit (Menu %s): %s Kb, PHP limit (Param %s): %s Kb -NoFileFound=No documents uploaded +ThisLimitIsDefinedInSetupAt=Dolibarr限制 (選單%s): %s Kb, PHP限制(參數 %s): %s Kb +NoFileFound=沒有上傳文件 CurrentUserLanguage=目前語言 CurrentTheme=目前主題 CurrentMenuManager=目前選單管理器 @@ -847,7 +847,7 @@ XMoreLines=%s 行(數)被隱藏 ShowMoreLines=顯示更多/更少行數 PublicUrl=公開網址 AddBox=增加盒子 -SelectElementAndClick=Select an element and click on %s +SelectElementAndClick=選擇一個元件並且點選%s PrintFile=列印檔案 %s ShowTransaction=在銀行帳戶中顯示交易 ShowIntervention=顯示干預 @@ -858,8 +858,8 @@ Denied=已拒絕 ListOf=%s 清單 ListOfTemplates=範本清單 Gender=性別 -Genderman=Male -Genderwoman=Female +Genderman=男性 +Genderwoman=女性 Genderother=其他 ViewList=檢視清單 ViewGantt=甘特圖 @@ -906,10 +906,10 @@ ViewAccountList=檢視總帳 ViewSubAccountList=檢視子帳戶總帳 RemoveString=移除字串‘%s’ SomeTranslationAreUncomplete=提供的某些語言可能僅被部分翻譯,或者可能包含錯誤。請通過註冊https://transifex.com/projects/p/dolibarr/來進行改進,以幫助修正您的語言。 -DirectDownloadLink=Public download link -PublicDownloadLinkDesc=Only the link is required to download the file -DirectDownloadInternalLink=Private download link -PrivateDownloadLinkDesc=You need to be logged and you need permissions to view or download the file +DirectDownloadLink=公共下載連結 +PublicDownloadLinkDesc=只需要連結即可下載檔案 +DirectDownloadInternalLink=私人下載連結 +PrivateDownloadLinkDesc=您需要登錄,並且需要有查看或下載檔案的權限 Download=下載 DownloadDocument=下載文件 ActualizeCurrency=更新匯率 @@ -1022,7 +1022,7 @@ SearchIntoContacts=通訊錄 SearchIntoMembers=會員 SearchIntoUsers=用戶 SearchIntoProductsOrServices=產品或服務 -SearchIntoBatch=Lots / Serials +SearchIntoBatch=批號/序號 SearchIntoProjects=專案 SearchIntoMO=製造訂單 SearchIntoTasks=任務 @@ -1059,13 +1059,13 @@ KeyboardShortcut=快捷鍵 AssignedTo=指定人 Deletedraft=刪除草稿 ConfirmMassDraftDeletion=草稿批次刪除確認 -FileSharedViaALink=File shared with a public link +FileSharedViaALink=通過公共連結共享的檔案 SelectAThirdPartyFirst=先選擇合作方(客戶/供應商)... YouAreCurrentlyInSandboxMode=您目前在 %s "沙盒" 模式 Inventory=庫存 AnalyticCode=分析代碼 TMenuMRP=製造資源計劃(MRP) -ShowCompanyInfos=Show company infos +ShowCompanyInfos=顯示公司資訊 ShowMoreInfos=顯示更多信息 NoFilesUploadedYet=請先上傳文件 SeePrivateNote=查看私人筆記 @@ -1074,7 +1074,7 @@ ValidFrom=有效期自 ValidUntil=有效期至 NoRecordedUsers=無使用者 ToClose=關閉 -ToRefuse=To refuse +ToRefuse=拒絕 ToProcess=處理 ToApprove=核准 GlobalOpenedElemView=全域顯示 @@ -1129,11 +1129,11 @@ UpdateForAllLines=更新所有行 OnHold=On hold Civility=稱謂或頭銜 AffectTag=影響標籤 -CreateExternalUser=Create external user +CreateExternalUser=建立外部用戶 ConfirmAffectTag=批量標籤影響 ConfirmAffectTagQuestion=您確定要影響對%s所選記錄的標籤嗎? CategTypeNotFound=找不到記錄類型的標籤類型 -CopiedToClipboard=Copied to clipboard -InformationOnLinkToContract=This amount is only the total of all the lines of the contract. No notion of time is taken into consideration. -ConfirmCancel=Are you sure you want to cancel -EmailMsgID=Email MsgID +CopiedToClipboard=複製到剪貼簿 +InformationOnLinkToContract=這個金額只是合約所有行的總和。沒有考慮時間的因素。 +ConfirmCancel=您確定要取消? +EmailMsgID=電子郵件訊息 ID diff --git a/htdocs/langs/zh_TW/margins.lang b/htdocs/langs/zh_TW/margins.lang index b3cc74b2402..dc68a99e36a 100644 --- a/htdocs/langs/zh_TW/margins.lang +++ b/htdocs/langs/zh_TW/margins.lang @@ -22,7 +22,7 @@ ProductService=產品或服務 AllProducts=所有產品和服務 ChooseProduct/Service=選擇產品或服務 ForceBuyingPriceIfNull=如果未定義,強制將買入/成本價轉換為賣價 -ForceBuyingPriceIfNullDetails=If buying/cost price not provided when we add a new line, and this option is "ON", the margin will be 0 on the new line (buying/cost price = selling price). If this option is "OFF" (recommended), margin will be equal to the value suggested by default (and may be 100% if no default value can be found). +ForceBuyingPriceIfNullDetails=如果我們增加新行時未提供買入/成本價,且此選項為“ON”,則新行的利潤將為 0(買入/成本價 = 賣價)。如果此選項為“OFF”(推薦),則利潤將預設等於建議值(如果找不到預設值,則可能為 100%)。 MARGIN_METHODE_FOR_DISCOUNT=全球折扣的利潤規則 UseDiscountAsProduct=作為產品 UseDiscountAsService=作為服務 diff --git a/htdocs/langs/zh_TW/members.lang b/htdocs/langs/zh_TW/members.lang index 68771cc7892..e6b83cbef57 100644 --- a/htdocs/langs/zh_TW/members.lang +++ b/htdocs/langs/zh_TW/members.lang @@ -15,24 +15,24 @@ ErrorMemberIsAlreadyLinkedToThisThirdParty=另一名會員(名稱:%s ErrorUserPermissionAllowsToLinksToItselfOnly=出於安全原因,必須授予您編輯所有用戶的權限,以便能夠將會員連結到其他用戶。 SetLinkToUser=連結Dolibarr用戶 SetLinkToThirdParty=連接到Dolibarr合作方 -MembersCards=Business cards for members +MembersCards=會員名片 MembersList=會員清單 MembersListToValid=草案會員清單(待確認) MembersListValid=有效會員清單 MembersListUpToDate=最新訂閱的有效會員清單 MembersListNotUpToDate=訂閱過期的有效會員清單 -MembersListExcluded=List of excluded members +MembersListExcluded=排除會員的清單 MembersListResiliated=已被終止會員清單 MembersListQualified=合格會員清單 MenuMembersToValidate=草案會員 MenuMembersValidated=已驗證會員 -MenuMembersExcluded=Excluded members +MenuMembersExcluded=排除會員 MenuMembersResiliated=已終止會員 MembersWithSubscriptionToReceive=可接收訂閱會員 MembersWithSubscriptionToReceiveShort=接收訂閱 DateSubscription=訂閱日期 DateEndSubscription=訂閱結束日期 -EndSubscription=Subscription Ends +EndSubscription=訂閱結束 SubscriptionId=訂閱編號 WithoutSubscription=沒有訂閱 MemberId=會員編號 @@ -49,12 +49,12 @@ MemberStatusActiveLate=訂閱已過期 MemberStatusActiveLateShort=已過期 MemberStatusPaid=訂閱最新 MemberStatusPaidShort=最新 -MemberStatusExcluded=Excluded member -MemberStatusExcludedShort=Excluded +MemberStatusExcluded=排除會員 +MemberStatusExcludedShort=排除 MemberStatusResiliated=已終止成員 MemberStatusResiliatedShort=已終止 MembersStatusToValid=草案會員 -MembersStatusExcluded=Excluded members +MembersStatusExcluded=排除會員 MembersStatusResiliated=已終止會員 MemberStatusNoSubscription=已驗證(無需訂閱) MemberStatusNoSubscriptionShort=已驗證 @@ -83,12 +83,12 @@ WelcomeEMail=歡迎電子郵件 SubscriptionRequired=需要訂閱 DeleteType=刪除 VoteAllowed=允許投票 -Physical=Individual -Moral=Corporation -MorAndPhy=Corporation and Individual -Reenable=Re-Enable -ExcludeMember=Exclude a member -ConfirmExcludeMember=Are you sure you want to exclude this member ? +Physical=個人 +Moral=公司 +MorAndPhy=公司和個人 +Reenable=重新啟用 +ExcludeMember=排除會員 +ConfirmExcludeMember=您確定要排除此會員嗎? ResiliateMember=終止會員 ConfirmResiliateMember=您確定要終止此會員嗎? DeleteMember=刪除會員 @@ -144,7 +144,7 @@ DescADHERENT_EMAIL_TEMPLATE_MEMBER_VALIDATION=電子郵件範本,用於會員 DescADHERENT_EMAIL_TEMPLATE_SUBSCRIPTION=電子郵件範本,用於新的訂閱記錄時向會員發送電子郵件 DescADHERENT_EMAIL_TEMPLATE_REMIND_EXPIRATION=電子郵件範本, 用於訂閱即將到期時發送電子郵件提醒 DescADHERENT_EMAIL_TEMPLATE_CANCELATION=電子郵件範本,用於在會員取消時向會員發送電子郵件 -DescADHERENT_EMAIL_TEMPLATE_EXCLUSION=Email template to use to send email to a member on member exclusion +DescADHERENT_EMAIL_TEMPLATE_EXCLUSION=用於會員排除時向會員發出電子郵件的模板 DescADHERENT_MAIL_FROM=自動發送電子郵件之發件人電子郵件 DescADHERENT_ETIQUETTE_TYPE=標籤頁格式 DescADHERENT_ETIQUETTE_TEXT=會員地址列表文字 @@ -170,31 +170,31 @@ DocForLabels=產生地址表 SubscriptionPayment=訂閱付款 LastSubscriptionDate=最新訂閱付款的日期 LastSubscriptionAmount=最新訂閱金額 -LastMemberType=Last Member type +LastMemberType=最新的會員類型 MembersStatisticsByCountries=會員統計(國家/城市) MembersStatisticsByState=會員統計(州/省) MembersStatisticsByTown=會員統計(城鎮) MembersStatisticsByRegion=會員統計(地區) -NbOfMembers=Total number of members -NbOfActiveMembers=Total number of current active members +NbOfMembers=會員總數 +NbOfActiveMembers=目前活躍會員數 NoValidatedMemberYet=無已驗證的會員 -MembersByCountryDesc=This screen shows you the statistics of members by countries. Graphs and charts depend on the availability of the Google online graph service as well as on the availability of a working internet connection. -MembersByStateDesc=This screen show you statistics of members by state/provinces/canton. -MembersByTownDesc=This screen show you statistics of members by town. -MembersByNature=This screen show you statistics of members by nature. -MembersByRegion=This screen show you statistics of members by region. +MembersByCountryDesc=此畫面顯示依國家/地區劃分的會員統計資訊。圖形取決於Google線上圖形服務,並且僅可在網路連線正常時可用。 +MembersByStateDesc=此畫面依州/省顯示有關會員的統計資訊。 +MembersByTownDesc=此畫面顯示依城市劃分的會員統計資訊。 +MembersByNature=此畫面依性質顯示有關會員的統計資訊。 +MembersByRegion=此畫面依區域顯示有關會員的統計資訊。 MembersStatisticsDesc=選擇要讀取的統計訊息... MenuMembersStats=統計 -LastMemberDate=Latest membership date +LastMemberDate=最新入會日期 LatestSubscriptionDate=最新訂閱日期 -MemberNature=Nature of the member -MembersNature=Nature of the members -Public=Information is public +MemberNature=會員性質 +MembersNature=會員性質 +Public=資訊是公開的 NewMemberbyWeb=增加了新會員。等待核准 NewMemberForm=新會員表格 -SubscriptionsStatistics=Subscriptions statistics +SubscriptionsStatistics=訂閱統計 NbOfSubscriptions=訂閱數 -AmountOfSubscriptions=Amount collected from subscriptions +AmountOfSubscriptions=訂閱金額 TurnoverOrBudget=營業額(對於公司)或預算(對於財團) DefaultAmount=預設訂閱金額 CanEditAmount=訪客可以選擇/編輯其訂閱金額 @@ -213,5 +213,5 @@ SendReminderForExpiredSubscription=當訂閱即將到期時,通過電子郵件 MembershipPaid=本期已支付的會費(直到%s) YouMayFindYourInvoiceInThisEmail=您可在此電子郵件中找到發票 XMembersClosed=%s會員已關閉 -XExternalUserCreated=%s external user(s) created -ForceMemberNature=Force member nature (Individual or Corporation) +XExternalUserCreated=已建立%s位外部用戶 +ForceMemberNature=強制會員性質(個人或公司) diff --git a/htdocs/langs/zh_TW/mrp.lang b/htdocs/langs/zh_TW/mrp.lang index 2f4bfbfa146..f257a5fc7f3 100644 --- a/htdocs/langs/zh_TW/mrp.lang +++ b/htdocs/langs/zh_TW/mrp.lang @@ -13,7 +13,7 @@ BOMsSetup=BOM模組設定 ListOfBOMs=物料清單-BOM ListOfManufacturingOrders=製造訂單清單 NewBOM=新物料清單 -ProductBOMHelp=Product to create (or disassemble) with this BOM.
Note: Products with the property 'Nature of product' = 'Raw material' are not visible into this list. +ProductBOMHelp=使用此物料清單建立(或拆解)產品。
注記:具有"產品屬性"的產品="原料"不會顯示於此清單 BOMsNumberingModules=BOM編號範本 BOMsModelModule=BOM文件範本 MOsNumberingModules=MO編號範本 @@ -39,7 +39,7 @@ DateStartPlannedMo=計劃開始日期 DateEndPlannedMo=計劃結束日期 KeepEmptyForAsap=空白表示“盡快” EstimatedDuration=預計時間 -EstimatedDurationDesc=Estimated duration to manufacture (or disassemble) this product using this BOM +EstimatedDurationDesc=使用此物料清單製造(或拆解)此產品的預計工期 ConfirmValidateBom=您確定要使用參考%s來驗證物料清單(您將能夠使用它來建立新的製造訂單) ConfirmCloseBom=您確定要取消此物料清單(您將無法再使用它來建立新的製造訂單)? ConfirmReopenBom=您確定要重新打開此物料清單嗎(您將能夠使用它來建立新的製造訂單) @@ -63,14 +63,14 @@ ConsumeAndProduceAll=消耗並生產所有產品 Manufactured=已製造 TheProductXIsAlreadyTheProductToProduce=要增加的產品已經是要生產的產品。 ForAQuantityOf=數量為%s -ForAQuantityToConsumeOf=For a quantity to disassemble of %s +ForAQuantityToConsumeOf=%s中拆解的數量 ConfirmValidateMo=您確定要驗證此製造訂單嗎? ConfirmProductionDesc=通過點擊“%s”,您將驗證數量設定的消耗量和/或生產量。這還將更新庫存並記錄庫存動向。 ProductionForRef=生產%s AutoCloseMO=如果達到消耗和生產的數量,則自動關閉製造訂單 NoStockChangeOnServices=服務無庫存變化 ProductQtyToConsumeByMO=開放MO仍要消耗的產品數量 -ProductQtyToProduceByMO=Product quantity still to produce by open MO +ProductQtyToProduceByMO=產品數量仍由開放MO生產 AddNewConsumeLines=增加新的行來使用 ProductsToConsume=消耗的產品 ProductsToProduce=生產的產品 diff --git a/htdocs/langs/zh_TW/orders.lang b/htdocs/langs/zh_TW/orders.lang index 2f23c61d0db..37fbc2d0e30 100644 --- a/htdocs/langs/zh_TW/orders.lang +++ b/htdocs/langs/zh_TW/orders.lang @@ -17,8 +17,8 @@ ToOrder=製作訂單 MakeOrder=製作訂單 SupplierOrder=採購訂單 SuppliersOrders=採購訂單 -SaleOrderLines=Sale order lines -PurchaseOrderLines=Puchase order lines +SaleOrderLines=銷售訂單行 +PurchaseOrderLines=採購訂單行 SuppliersOrdersRunning=目前的採購訂單 CustomerOrder=銷售訂單 CustomersOrders=銷售訂單 diff --git a/htdocs/langs/zh_TW/other.lang b/htdocs/langs/zh_TW/other.lang index 15b6f7aec08..ad8c0fde085 100644 --- a/htdocs/langs/zh_TW/other.lang +++ b/htdocs/langs/zh_TW/other.lang @@ -114,7 +114,7 @@ DemoCompanyAll=有多項活動的公司(所有主要模組) CreatedBy=由%s建立 ModifiedBy=由%s修改 ValidatedBy=由%s驗證 -SignedBy=Signed by %s +SignedBy=由%s簽署 ClosedBy=由%s關閉 CreatedById=建立的用戶ID ModifiedById=進行最新更改的用戶ID @@ -129,7 +129,7 @@ ClosedByLogin=已關閉的用戶登入名稱 FileWasRemoved=檔案%s已刪除 DirWasRemoved=資料夾%s已刪除 FeatureNotYetAvailable=此功能在目前版本中尚不可用 -FeatureNotAvailableOnDevicesWithoutMouse=Feature not available on devices without mouse +FeatureNotAvailableOnDevicesWithoutMouse=沒有滑鼠的設備上不可用的功能 FeaturesSupported=已支援功能 Width=寬度 Height=高度 @@ -184,7 +184,7 @@ EnableGDLibraryDesc=在PHP安裝上安裝或啟用GD程式庫以使用此選項 ProfIdShortDesc=Prof Id %s的資訊取決於合作方國家/地區。
例如,對於國家%s ,其代碼為%s 。 DolibarrDemo=Dolibarr的ERP / CRM的DEMO StatsByNumberOfUnits=產品/服務數量統計 -StatsByNumberOfEntities=Statistics for number of referring entities (no. of invoices, or orders...) +StatsByNumberOfEntities=參考實體數量的統計數據(發票數量或訂單數量...) NumberOfProposals=提案/建議書的數量 NumberOfCustomerOrders=銷售訂單數量 NumberOfCustomerInvoices=客戶發票數量 @@ -246,7 +246,7 @@ NewKeyIs=這是您的新登入密碼 NewKeyWillBe=您用於登入軟體的新密鑰將為 ClickHereToGoTo=點擊這裡前往%s YouMustClickToChange=您必須先點擊以下連結驗證此密碼更改 -ConfirmPasswordChange=Confirm password change +ConfirmPasswordChange=確認密碼變更 ForgetIfNothing=如果您沒有請求此更改,請忽略此電子郵件。您的憑證仍保持安全狀態。 IfAmountHigherThan=如果金額高於 %s SourcesRepository=資料庫 @@ -264,7 +264,7 @@ ContactCreatedByEmailCollector=電子郵件收集器從電子郵件MSGID %s建 ProjectCreatedByEmailCollector=電子郵件收集器從電子郵件MSGID %s建立的專案 TicketCreatedByEmailCollector=電子郵件收集器從電子郵件MSGID %s建立的服務單 OpeningHoursFormatDesc=使用-分隔營業開始時間和營業結束時間。
使用空格輸入不同的範圍。
範例:8-12 14-18 -SuffixSessionName=Suffix for session name +SuffixSessionName=程序名稱的後綴 ##### Export ##### ExportsArea=出口地區 @@ -290,4 +290,4 @@ PopuProp=依照在提案中受歡迎程度列出的產品/服務 PopuCom=依照在訂單中受歡迎程度列出的產品/服務 ProductStatistics=產品/服務統計 NbOfQtyInOrders=訂單數量 -SelectTheTypeOfObjectToAnalyze=Select an object to view its statistics... +SelectTheTypeOfObjectToAnalyze=選擇一個項目以查看其統計資訊... diff --git a/htdocs/langs/zh_TW/partnership.lang b/htdocs/langs/zh_TW/partnership.lang index 34be595010d..f28af8cf442 100644 --- a/htdocs/langs/zh_TW/partnership.lang +++ b/htdocs/langs/zh_TW/partnership.lang @@ -16,66 +16,66 @@ # # Generic # -ModulePartnershipName=Partnership management -PartnershipDescription=Module Partnership management -PartnershipDescriptionLong= Module Partnership management +ModulePartnershipName=合作夥伴關係管理 +PartnershipDescription=合作夥伴管理模組 +PartnershipDescriptionLong= 合作夥伴管理模組 -AddPartnership=Add partnership -CancelPartnershipForExpiredMembers=Partnership: Cancel partnership of members with expired subscriptions -PartnershipCheckBacklink=Partnership: Check referring backlink +AddPartnership=增加合作夥伴 +CancelPartnershipForExpiredMembers=合作夥伴:取消訂閱過期會員的合作關係 +PartnershipCheckBacklink=合作夥伴:檢查參考反向連結 # # Menu # -NewPartnership=New Partnership -ListOfPartnerships=List of partnership +NewPartnership=新合作夥伴 +ListOfPartnerships=合作夥伴清單 # # Admin page # -PartnershipSetup=Partnership setup -PartnershipAbout=About Partnership -PartnershipAboutPage=Partnership about page -partnershipforthirdpartyormember=Partner status must be set on a 'thirdparty' or a 'member' -PARTNERSHIP_IS_MANAGED_FOR=Partnership managed for -PARTNERSHIP_BACKLINKS_TO_CHECK=Backlinks to check -PARTNERSHIP_NBDAYS_AFTER_MEMBER_EXPIRATION_BEFORE_CANCEL=Nb of days before cancelling status of a partnership when a subscription has expired -ReferingWebsiteCheck=Check of website referring -ReferingWebsiteCheckDesc=You can enable a feature to check that your partners has added a backlink to your website domains on their own website. +PartnershipSetup=合作夥伴設定 +PartnershipAbout=關於合作夥伴 +PartnershipAboutPage=合作夥伴關於頁面 +partnershipforthirdpartyormember=合作夥伴狀態必須設定為“合作方”或“會員” +PARTNERSHIP_IS_MANAGED_FOR=夥伴關係管理 +PARTNERSHIP_BACKLINKS_TO_CHECK=要檢查的反向連結 +PARTNERSHIP_NBDAYS_AFTER_MEMBER_EXPIRATION_BEFORE_CANCEL=訂閱到期後取消合作關係狀態前的 Nb 天 +ReferingWebsiteCheck=檢查網站參考 +ReferingWebsiteCheckDesc=您可以啟用一項功能來檢查您的合作夥伴是否在他們自己的網站上增加了指向您網站網域的反向連結。 # # Object # -DeletePartnership=Delete a partnership -PartnershipDedicatedToThisThirdParty=Partnership dedicated to this third party -PartnershipDedicatedToThisMember=Partnership dedicated to this member +DeletePartnership=刪除合作夥伴 +PartnershipDedicatedToThisThirdParty=致力於此合作方的合作夥伴 +PartnershipDedicatedToThisMember=致力於此會員的合作夥伴 DatePartnershipStart=開始日期 DatePartnershipEnd=結束日期 -ReasonDecline=Decline reason -ReasonDeclineOrCancel=Decline reason -PartnershipAlreadyExist=Partnership already exist -ManagePartnership=Manage partnership -BacklinkNotFoundOnPartnerWebsite=Backlink not found on partner website -ConfirmClosePartnershipAsk=Are you sure you want to cancel this partnership? -PartnershipType=Partnership type +ReasonDecline=拒絕原因 +ReasonDeclineOrCancel=拒絕原因 +PartnershipAlreadyExist=合作夥伴已存在 +ManagePartnership=管理合作夥伴 +BacklinkNotFoundOnPartnerWebsite=在合作夥伴網站上找不到反向連結 +ConfirmClosePartnershipAsk=您確定要取消此合作關係嗎? +PartnershipType=合作夥伴類型 # # Template Mail # -SendingEmailOnPartnershipWillSoonBeCanceled=Partnership will soon be canceled -SendingEmailOnPartnershipRefused=Partnership refused -SendingEmailOnPartnershipAccepted=Partnership accepted -SendingEmailOnPartnershipCanceled=Partnership canceled +SendingEmailOnPartnershipWillSoonBeCanceled=合作關係即將取消 +SendingEmailOnPartnershipRefused=已拒絕合作 +SendingEmailOnPartnershipAccepted=已接受合作 +SendingEmailOnPartnershipCanceled=已取消合作夥伴 -YourPartnershipWillSoonBeCanceledTopic=Partnership will soon be canceled -YourPartnershipRefusedTopic=Partnership refused -YourPartnershipAcceptedTopic=Partnership accepted -YourPartnershipCanceledTopic=Partnership canceled +YourPartnershipWillSoonBeCanceledTopic=合作關係即將取消 +YourPartnershipRefusedTopic=已拒絕合作 +YourPartnershipAcceptedTopic=已接受合作 +YourPartnershipCanceledTopic=已取消合作 -YourPartnershipWillSoonBeCanceledContent=We inform you that your partnership will soon be canceled (Backlink not found) -YourPartnershipRefusedContent=We inform you that your partnership request has been refused. -YourPartnershipAcceptedContent=We inform you that your partnership request has been accepted. -YourPartnershipCanceledContent=We inform you that your partnership has been canceled. +YourPartnershipWillSoonBeCanceledContent=我們通知您,您的合作夥伴關係即將取消(未找到反向連結) +YourPartnershipRefusedContent=我們通知您,您的合作請求已被拒絕。 +YourPartnershipAcceptedContent=我們通知您,您的合作請求已被接受。 +YourPartnershipCanceledContent=我們通知您,您的合作夥伴關係已被取消。 # # Status @@ -84,4 +84,4 @@ PartnershipDraft=草稿 PartnershipAccepted=已接受 PartnershipRefused=已拒絕 PartnershipCanceled=已取消 -PartnershipManagedFor=Partners are +PartnershipManagedFor=合作夥伴是 diff --git a/htdocs/langs/zh_TW/productbatch.lang b/htdocs/langs/zh_TW/productbatch.lang index 82f4324aa0e..e97a9eb8d05 100644 --- a/htdocs/langs/zh_TW/productbatch.lang +++ b/htdocs/langs/zh_TW/productbatch.lang @@ -1,10 +1,10 @@ # ProductBATCH language file - Source file is en_US - ProductBATCH ManageLotSerial=使用批次/序號數字 -ProductStatusOnBatch=Yes (lot required) -ProductStatusOnSerial=Yes (unique serial number required) +ProductStatusOnBatch=是(需要批號/序號) +ProductStatusOnSerial=是(需要唯一的批號/序號) ProductStatusNotOnBatch=不是(不使用批次/序號) -ProductStatusOnBatchShort=Lot -ProductStatusOnSerialShort=Serial +ProductStatusOnBatchShort=批號 +ProductStatusOnSerialShort=序號 ProductStatusNotOnBatchShort=No Batch=批次/序號 atleast1batchfield=有效日期或銷售日期或批次/序號 @@ -24,22 +24,22 @@ ProductLotSetup=批次/序號模組的設定 ShowCurrentStockOfLot=顯示關聯產品/批次的目前庫存 ShowLogOfMovementIfLot=顯示產品/批次的移動記錄 StockDetailPerBatch=每批次的庫存詳細資料 -SerialNumberAlreadyInUse=Serial number %s is already used for product %s -TooManyQtyForSerialNumber=You can only have one product %s for serial number %s -BatchLotNumberingModules=Options for automatic generation of batch products managed by lots -BatchSerialNumberingModules=Options for automatic generation of batch products managed by serial numbers -ManageLotMask=Custom mask -CustomMasks=Adds an option to define mask in the product card -LotProductTooltip=Adds an option in the product card to define a dedicated batch number mask -SNProductTooltip=Adds an option in the product card to define a dedicated serial number mask -QtyToAddAfterBarcodeScan=Qty to add for each barcode/lot/serial scanned -LifeTime=Life span (in days) -EndOfLife=End of life -ManufacturingDate=Manufacturing date -DestructionDate=Destruction date -FirstUseDate=First use date -QCFrequency=Quality control frequency (in days) +SerialNumberAlreadyInUse= 序號%s已經被產品%s使用 +TooManyQtyForSerialNumber=序號%s只能使用在產品%s上 +BatchLotNumberingModules=依批號自動產生批次產品的選項 +BatchSerialNumberingModules=依序號自動產生批次產品的選項 +ManageLotMask=自定義遮罩 +CustomMasks=在產品卡中增加一個定義遮罩的選項 +LotProductTooltip=在產品卡中增加一個定義專用批號遮罩的選項 +SNProductTooltip=在產品卡中增加一個定義專用序號遮罩的選項 +QtyToAddAfterBarcodeScan=每一個已掃描的條碼/批號/序號要增加的數量 +LifeTime=有效期(天) +EndOfLife=已到期 +ManufacturingDate=生產日期 +DestructionDate=銷毀日期 +FirstUseDate=首次使用日期 +QCFrequency=品質控制頻率(天) #Traceability - qc status OutOfOrder=Out of order -InWorkingOrder=In working order +InWorkingOrder=在生產訂單中 diff --git a/htdocs/langs/zh_TW/products.lang b/htdocs/langs/zh_TW/products.lang index e34cc1f39a4..1885cb18f9d 100644 --- a/htdocs/langs/zh_TW/products.lang +++ b/htdocs/langs/zh_TW/products.lang @@ -43,7 +43,7 @@ ServicesOnSaleOnly=僅供銷售服務 ServicesOnPurchaseOnly=僅供採購服務 ServicesNotOnSell=無法銷售與採購之服務 ServicesOnSellAndOnBuy=可供銷售與購買之服務 -LastModifiedProductsAndServices=Latest %s products/services which were modified +LastModifiedProductsAndServices=最新%s筆已修改的產品/服務 LastRecordedProducts=最新 %s 紀錄的產品 LastRecordedServices=最新%s 紀錄的服務 CardProduct0=產品 @@ -73,12 +73,12 @@ SellingPrice=售價 SellingPriceHT=售價(不含稅) SellingPriceTTC=售價(含稅) SellingMinPriceTTC=最低售價(含稅) -CostPriceDescription=This price field (excl. tax) can be used to capture the average amount this product costs to your company. It may be any price you calculate yourself, for example, from the average buying price plus average production and distribution cost. +CostPriceDescription=此價格欄位(不含稅)可用於取得該產品給貴公司的平均價格。它可以是您自己計算的任何價格,例如,根據平均購買價格加上平均生產和分銷成本得出的價格。 CostPriceUsage=此值可用於利潤計算。 SoldAmount=銷售數量 PurchasedAmount=購買數量 NewPrice=新價格 -MinPrice=Min. selling price +MinPrice=最低售價 EditSellingPriceLabel=修改售價標籤 CantBeLessThanMinPrice=售價不能低於該產品的最低售價(%s 不含稅)。如果你輸入的折扣過高也會出現此訊息。 ContractStatusClosed=已關閉 @@ -141,7 +141,7 @@ VATRateForSupplierProduct=營業稅率(此供應商/產品) DiscountQtyMin=此數量的折扣。 NoPriceDefinedForThisSupplier=沒有此供應商/產品定義的價格/數量 NoSupplierPriceDefinedForThisProduct=沒有定義此產品供應商價格/數量 -PredefinedItem=Predefined item +PredefinedItem=預定義項目 PredefinedProductsToSell=預定義產品 PredefinedServicesToSell=預定義服務 PredefinedProductsAndServicesToSell=預定義的可銷售產品/服務 @@ -157,11 +157,11 @@ ListServiceByPopularity=熱門服務列表 Finished=成品 RowMaterial=原材料 ConfirmCloneProduct=您確定要複製產品或服務%s嗎? -CloneContentProduct=Clone all main information of the product/service +CloneContentProduct=複製產品/服務的所有主要資訊 ClonePricesProduct=複製價格 -CloneCategoriesProduct=Clone linked tags/categories -CloneCompositionProduct=Clone virtual products/services -CloneCombinationsProduct=Clone the product variants +CloneCategoriesProduct=複製已連結標籤/類別 +CloneCompositionProduct=複製虛擬產品/服務 +CloneCombinationsProduct=複製產品變異 ProductIsUsed=該產品是用於 NewRefForClone=新的產品/服務參考 SellingPrices=銷售價格 @@ -170,12 +170,12 @@ CustomerPrices=客戶價格 SuppliersPrices=供應商價格 SuppliersPricesOfProductsOrServices=供應商價格(產品或服務) CustomCode=海關|商品| HS碼 -CountryOrigin=Country of origin -RegionStateOrigin=Region of origin -StateOrigin=State|Province of origin -Nature=Nature of product (raw/manufactured) +CountryOrigin=原產地 +RegionStateOrigin=原產地 +StateOrigin=州|原產地 +Nature=產品性質(原料/成品) NatureOfProductShort=產品性質 -NatureOfProductDesc=Raw material or manufactured product +NatureOfProductDesc=原料或成品 ShortLabel=短標籤 Unit=單位 p=u. @@ -277,7 +277,7 @@ PriceByCustomer=每個客戶的價格不同 PriceCatalogue=每個產品/服務的單次銷售價格 PricingRule=售價規則 AddCustomerPrice=依客戶新增價格 -ForceUpdateChildPriceSoc=為客戶子公司設置相同的價格 +ForceUpdateChildPriceSoc=為客戶子公司設定相同的價格 PriceByCustomerLog=舊客戶價格的日誌 MinimumPriceLimit=最低價格不能低於%s MinimumRecommendedPrice=最低建議價格是:%s @@ -296,6 +296,7 @@ ComposedProductIncDecStock=母產品變更時增加/減少庫存 ComposedProduct=子產品 MinSupplierPrice=最低採購價格 MinCustomerPrice=最低銷售價格 +NoDynamicPrice=沒有動態價格 DynamicPriceConfiguration=動態價格設置 DynamicPriceDesc=您可以定義數學公式來計算客戶或供應商的價格。這樣的公式可以使用所有數學運算符,一些常數和變數。您可以在此處定義要使用的變數。如果變數需要自動更新,則可以定義外部URL以允許Dolibarr自動更新值。 AddVariable=增加變數 @@ -314,7 +315,7 @@ LastUpdated=最新更新 CorrectlyUpdated=更新成功 PropalMergePdfProductActualFile=用於增加到PDF Azur的文件是 PropalMergePdfProductChooseFile=選擇PDF文件 -IncludingProductWithTag=Include products/services with tag +IncludingProductWithTag=包含有標籤的產品/服務 DefaultPriceRealPriceMayDependOnCustomer=預設價格,實際價格可能取決於客戶 WarningSelectOneDocument=請至少選擇一份文件 DefaultUnitToShow=單位 diff --git a/htdocs/langs/zh_TW/projects.lang b/htdocs/langs/zh_TW/projects.lang index 7057f38a761..5137b622b09 100644 --- a/htdocs/langs/zh_TW/projects.lang +++ b/htdocs/langs/zh_TW/projects.lang @@ -10,19 +10,19 @@ PrivateProject=專案聯絡人 ProjectsImContactFor=我是聯絡人的專案 AllAllowedProjects=我可以讀取的所有專案(我的+公共項目) AllProjects=所有專案 -MyProjectsDesc=This view is limited to the projects that you are a contact for +MyProjectsDesc=此檢視僅顯示您為聯絡人之專案 ProjectsPublicDesc=此檢視顯示您被允許讀取的所有專案。 TasksOnProjectsPublicDesc=此檢視顯示您可讀取之專案的所有任務。 ProjectsPublicTaskDesc=此檢視顯示所有您可以讀取之專案與任務。 ProjectsDesc=此檢視顯示全部專案(您的用戶權限授予您檢視所有內容)。 TasksOnProjectsDesc=此檢視顯示所有專案上的所有任務(您的用戶權限授予您檢視所有內容)。 -MyTasksDesc=This view is limited to the projects or tasks that you are a contact for +MyTasksDesc=此檢視僅顯示您是聯絡人之專案或任務 OnlyOpenedProject=僅顯示開放專案(不顯示草案或是已關閉狀態之專案) ClosedProjectsAreHidden=不顯示已關閉專案 TasksPublicDesc=此檢視顯示您可讀取之所有專案及任務。 TasksDesc=此檢視顯示所有專案及任務(您的用戶權限授予您查看所有內容)。 AllTaskVisibleButEditIfYouAreAssigned=合格專案的所有任務都可見,但是您只能輸入分配給所選用戶之任務的時間。如果需要輸入時間,請分配任務。 -OnlyYourTaskAreVisible=Only tasks assigned to you are visible. If you need to enter time on a task and if the task is not visible here, then you need to assign the task to yourself. +OnlyYourTaskAreVisible=僅顯示分配給您的任務。如果您需要輸入時間並且看不見任務,則您需要將任務分配給自己。 ImportDatasetTasks=專案任務 ProjectCategories=專案標籤/類別 NewProject=新專案 @@ -89,7 +89,7 @@ TimeConsumed=已消耗 ListOfTasks=任務清單 GoToListOfTimeConsumed=前往工作時間清單 GanttView=甘特圖 -ListWarehouseAssociatedProject=List of warehouses associated to the project +ListWarehouseAssociatedProject=與專案有關的倉庫清單 ListProposalsAssociatedProject=與專案有關的商業建議書清單 ListOrdersAssociatedProject=與專案相關的銷售訂單清單 ListInvoicesAssociatedProject=與專案相關的客戶發票清單 @@ -202,7 +202,7 @@ ResourceNotAssignedToTheTask=未分配給任務 NoUserAssignedToTheProject=沒有分配給此專案的用戶 TimeSpentBy=花費時間者 TasksAssignedTo=任務分配給 -AssignTaskToMe=Assign task to myself +AssignTaskToMe=分配任務給自己 AssignTaskToUser=將任務分配給%s SelectTaskToAssign=選擇要分配的任務... AssignTask=分配 @@ -267,11 +267,11 @@ InvoiceToUse=發票草稿 NewInvoice=新發票 OneLinePerTask=每個任務一行 OneLinePerPeriod=每個週期一行 -OneLinePerTimeSpentLine=One line for each time spent declaration +OneLinePerTimeSpentLine=一行為一筆時間花費申報 RefTaskParent=參考上層任務 ProfitIsCalculatedWith=利潤計算是使用 -AddPersonToTask=Add also to tasks -UsageOrganizeEvent=Usage: Event Organization -PROJECT_CLASSIFY_CLOSED_WHEN_ALL_TASKS_DONE=Classify project as closed when all its tasks are completed (100%% progress) -PROJECT_CLASSIFY_CLOSED_WHEN_ALL_TASKS_DONE_help=Note: existing projects with all tasks at 100 %% progress won't be affected: you will have to close them manually. This option only affects open projects. -SelectLinesOfTimeSpentToInvoice=Select lines of time spent that are unbilled, then bulk action "Generate Invoice" to bill them +AddPersonToTask=也增加到任務 +UsageOrganizeEvent=用途:事件組織 +PROJECT_CLASSIFY_CLOSED_WHEN_ALL_TASKS_DONE=當所有任務完成時將專案分類為關閉(進度100%%) +PROJECT_CLASSIFY_CLOSED_WHEN_ALL_TASKS_DONE_help=注意:所有任務進度為 100%% 的現有專案不會受到影響:您必須手動關閉它們。此選項僅影響打開的專案。 +SelectLinesOfTimeSpentToInvoice=選擇未計費的時間行,然後批次操作“產生發票”來計費 diff --git a/htdocs/langs/zh_TW/propal.lang b/htdocs/langs/zh_TW/propal.lang index ba1758df186..acdb64c9cc0 100644 --- a/htdocs/langs/zh_TW/propal.lang +++ b/htdocs/langs/zh_TW/propal.lang @@ -59,7 +59,7 @@ ConfirmClonePropal=您確定您要完整複製商業提案/建議書%s? ConfirmReOpenProp=您確定要再打開商業提案/建議書%s嗎? ProposalsAndProposalsLines=商業提案/建議書和行 ProposalLine=提案/建議書行 -ProposalLines=Proposal lines +ProposalLines=提案/建議書行 AvailabilityPeriod=交貨期 SetAvailability=設定交貨期 AfterOrder=訂單後 diff --git a/htdocs/langs/zh_TW/receptions.lang b/htdocs/langs/zh_TW/receptions.lang index 07092969024..798b7f6efcb 100644 --- a/htdocs/langs/zh_TW/receptions.lang +++ b/htdocs/langs/zh_TW/receptions.lang @@ -44,4 +44,4 @@ ValidateOrderFirstBeforeReception=您必須先驗證訂單,然後才能進行 ReceptionsNumberingModules=收貨編號模組 ReceptionsReceiptModel=收貨用文件範本 NoMorePredefinedProductToDispatch=沒有更多預定義的產品要調度 -ReceptionExist=A reception exists +ReceptionExist=有櫃台 diff --git a/htdocs/langs/zh_TW/recruitment.lang b/htdocs/langs/zh_TW/recruitment.lang index f1f347585b2..beb5762cbe2 100644 --- a/htdocs/langs/zh_TW/recruitment.lang +++ b/htdocs/langs/zh_TW/recruitment.lang @@ -50,27 +50,27 @@ PositionsToBeFilled=工作職位 ListOfPositionsToBeFilled=工作職位清單 NewPositionToBeFilled=新職位 -JobOfferToBeFilled=Job position to be filled +JobOfferToBeFilled=職位空缺 ThisIsInformationOnJobPosition=工作職位空缺訊息 ContactForRecruitment=招聘連絡人 EmailRecruiter=電子郵件招聘者 ToUseAGenericEmail=使用普通電子郵件。如果未定義,將使用招聘負責人的電子郵件 -NewCandidature=New application -ListOfCandidatures=List of applications +NewCandidature=新申請 +ListOfCandidatures=申請清單 RequestedRemuneration=要求的薪資 ProposedRemuneration=擬議薪資 ContractProposed=擬議合約 ContractSigned=合約已簽訂 -ContractRefused=Contract refused -RecruitmentCandidature=Application +ContractRefused=合約被拒絕 +RecruitmentCandidature=申請 JobPositions=工作職位 -RecruitmentCandidatures=Applications +RecruitmentCandidatures=申請 InterviewToDo=面試事項 -AnswerCandidature=Application answer -YourCandidature=Your application -YourCandidatureAnswerMessage=Thanks you for your application.
... -JobClosedTextCandidateFound=The job position is closed. The position has been filled. -JobClosedTextCanceled=The job position is closed. -ExtrafieldsJobPosition=Complementary attributes (job positions) -ExtrafieldsApplication=Complementary attributes (job applications) -MakeOffer=Make an offer +AnswerCandidature=申請回覆 +YourCandidature=您的申請 +YourCandidatureAnswerMessage=感謝您的申請。
... +JobClosedTextCandidateFound=此職位已關閉。此職位已招聘完成。 +JobClosedTextCanceled=此職位已關閉。 +ExtrafieldsJobPosition=補充屬性(職位) +ExtrafieldsApplication=補充屬性(工作申請) +MakeOffer=開價 diff --git a/htdocs/langs/zh_TW/salaries.lang b/htdocs/langs/zh_TW/salaries.lang index f741a3a051c..d3fc9900a41 100644 --- a/htdocs/langs/zh_TW/salaries.lang +++ b/htdocs/langs/zh_TW/salaries.lang @@ -2,12 +2,15 @@ SALARIES_ACCOUNTING_ACCOUNT_PAYMENT=用戶合作方使用的會計帳戶 SALARIES_ACCOUNTING_ACCOUNT_PAYMENT_Desc=用戶卡上定義的專用會計帳戶將僅用於子帳會計。如果未定義用戶專用的用戶帳戶,則此帳戶將用於“總帳”,並作為“子帳”帳戶的默認值。 SALARIES_ACCOUNTING_ACCOUNT_CHARGE=默認支付薪資的會計帳戶 +CREATE_NEW_SALARY_WITHOUT_AUTO_PAYMENT=預設,當建立薪資時將"自動建立所有支付"選項留空 Salary=薪資 Salaries=薪資 -NewSalaryPayment=新支付薪資 +NewSalary=新薪資 +NewSalaryPayment=新薪資卡 AddSalaryPayment=新增支付薪資 SalaryPayment=支付薪資 SalariesPayments=支付薪資 +SalariesPaymentsOf=%s 的薪資支付 ShowSalaryPayment=顯示支付薪資 THM=平均時薪 TJM=平均日薪 diff --git a/htdocs/langs/zh_TW/sendings.lang b/htdocs/langs/zh_TW/sendings.lang index ef3e9fc3a8d..fcdd10a92c7 100644 --- a/htdocs/langs/zh_TW/sendings.lang +++ b/htdocs/langs/zh_TW/sendings.lang @@ -43,14 +43,14 @@ ConfirmValidateSending=您確定要使用參考%s驗證此出貨嗎? ConfirmCancelSending=您確定要取消此出貨嗎? DocumentModelMerou=Merou A5 範本 WarningNoQtyLeftToSend=警告,沒有等待出貨的產品。 -StatsOnShipmentsOnlyValidated=Statistics are only for validated shipments. Date used is the date of validation of shipment (planned delivery date is not always known) +StatsOnShipmentsOnlyValidated=統計數據僅適用於經過驗證的出貨。日期是使用出貨驗證日期(並不是總是知道計劃的出貨日期) DateDeliveryPlanned=預計交貨日期 RefDeliveryReceipt=參考交貨收據 -StatusReceipt=交貨收據狀態 +StatusReceipt=送貨單狀態 DateReceived=收貨日期 ClassifyReception=收貨分類 -SendShippingByEMail=通過電子郵件發送出貨 -SendShippingRef=提交出貨%s +SendShippingByEMail=通過電子郵件寄送出貨 +SendShippingRef=提交出貨%s ActionsOnShipping=出貨事件 LinkToTrackYourPackage=連結追踪您的包裹 ShipmentCreationIsDoneFromOrder=目前,新建立出貨已經由訂單卡完成。 diff --git a/htdocs/langs/zh_TW/stocks.lang b/htdocs/langs/zh_TW/stocks.lang index 39839073299..318a92ed1a9 100644 --- a/htdocs/langs/zh_TW/stocks.lang +++ b/htdocs/langs/zh_TW/stocks.lang @@ -60,7 +60,7 @@ EnhancedValueOfWarehouses=倉庫價值 UserWarehouseAutoCreate=新增用戶時自動新增用戶倉庫 AllowAddLimitStockByWarehouse=除了每個產品的最小和期望庫存值之外,還管理每個配對(產品倉庫)的最小和期望庫存值 RuleForWarehouse=倉庫規則 -WarehouseAskWarehouseOnThirparty=Set a warehouse on third-party +WarehouseAskWarehouseOnThirparty=為合作方設定倉庫 WarehouseAskWarehouseDuringPropal=為商業提案/建議書設定一個倉庫 WarehouseAskWarehouseDuringOrder=在銷售訂單上設定一個倉庫 UserDefaultWarehouse=在用戶上設定一個倉庫 @@ -89,15 +89,15 @@ NoPredefinedProductToDispatch=沒有此專案的預定義產品。因此無需 DispatchVerb=調度 StockLimitShort=警報限制 StockLimit=庫存限制的警報 -StockLimitDesc=(empty) means no warning.
0 can be used to trigger a warning as soon as the stock is empty. +StockLimitDesc=(空白)表示沒有警告。
0 可用於庫存為0時立即觸發警告。 PhysicalStock=實體庫存 RealStock=實際庫存 RealStockDesc=實體/實際庫存是目前倉庫中的庫存。 RealStockWillAutomaticallyWhen=實際庫存將根據以下規則(在“庫存”模組中定義)進行修改: VirtualStock=虛擬庫存 VirtualStockAtDate=截至日期的虛擬庫存 -VirtualStockAtDateDesc=Virtual stock once all the pending orders that are planned to be processed before the chosen date will be finished -VirtualStockDesc=Virtual stock is the calculated stock available once all open/pending actions (that affect stocks) are closed (purchase orders received, sales orders shipped, manufacturing orders produced, etc) +VirtualStockAtDateDesc=虛擬庫存將於即將執行的待辦訂單所選擇的日期前完成 +VirtualStockDesc=虛擬庫存是在所有未完成/待辦操作(影響庫存)關閉(收到採購訂單、銷售訂單發貨、生產製造訂單等)後計算出的庫存 AtDate=目前 IdWarehouse=編號倉庫 DescWareHouse=說明倉庫 @@ -105,7 +105,7 @@ LieuWareHouse=本地化倉庫 WarehousesAndProducts=倉庫和產品 WarehousesAndProductsBatchDetail=倉庫和產品(有批次/序列的詳細信息) AverageUnitPricePMPShort=加權平均價格 -AverageUnitPricePMPDesc=The input average unit price we had to expense to get 1 unit of product into our stock. +AverageUnitPricePMPDesc=我們取得一單位產品進入我們庫存所需要的花費為平均輸入單價 SellPriceMin=銷售單價 EstimatedStockValueSellShort=銷售價值 EstimatedStockValueSell=銷售價值 @@ -123,9 +123,9 @@ DesiredStockDesc=該庫存量將是用於補貨功能中補充庫存的值。 StockToBuy=訂購 Replenishment=補貨 ReplenishmentOrders=補貨單 -VirtualDiffersFromPhysical=According to increase/decrease stock options, physical stock and virtual stock (physical stock + open orders) may differ -UseRealStockByDefault=Use real stock, instead of virtual stock, for replenishment feature -ReplenishmentCalculation=Amount to order will be (desired quantity - real stock) instead of (desired quantity - virtual stock) +VirtualDiffersFromPhysical=根據新增/減少庫存選項,真實庫存與虛擬庫存(真實庫存加開放訂單)也許不同 +UseRealStockByDefault=為補貨功能使用真實庫存而不是虛擬庫存 +ReplenishmentCalculation=訂購數量將是(需求數量 - 實際庫存)而不是(需求數量 - 虛擬庫存) UseVirtualStock=使用虛擬庫存 UsePhysicalStock=使用實體庫存 CurentSelectionMode=目前選擇模式 @@ -134,7 +134,7 @@ CurentlyUsingPhysicalStock=實體庫存 RuleForStockReplenishment=補貨規則 SelectProductWithNotNullQty=選擇至少一個數量不為空的產品和一個供應商 AlertOnly= 只警告 -IncludeProductWithUndefinedAlerts = Include also negative stock for products with no desired quantity defined, to restore them to 0 +IncludeProductWithUndefinedAlerts = 也包括未定義需求數量產品的負庫存,將其恢復為 0 WarehouseForStockDecrease=倉庫%s將用於減少庫存 WarehouseForStockIncrease=倉庫%s將用於庫存增加 ForThisWarehouse=用於這個倉庫 @@ -145,7 +145,7 @@ Replenishments=補貨 NbOfProductBeforePeriod=選則期間以前產品%s庫存的數量(<%s) NbOfProductAfterPeriod=選則期間之後產品%s庫存的數量(> %s) MassMovement=全部活動 -SelectProductInAndOutWareHouse=Select a source warehouse and a target warehouse, a product and a quantity then click "%s". Once this is done for all required movements, click on "%s". +SelectProductInAndOutWareHouse=選擇一個來源倉庫,目標倉庫,產品與數量然後點選"%s"。當所有移動後完成後請點選"%s"。 RecordMovement=記錄轉移 ReceivingForSameOrder=此訂單的收據 StockMovementRecorded=庫存變動已記錄 @@ -154,7 +154,7 @@ StockMustBeEnoughForInvoice=庫存水平必須足以將產品/服務新增到發 StockMustBeEnoughForOrder=庫存水平必須足以將產品/服務新增到訂單中(將此筆加到訂單中時,無論自動庫存更改的規則如何,都要對當前實際庫存進行檢查) StockMustBeEnoughForShipment= 庫存水平必須足以將產品/服務新增到發貨中(將此筆加到發貨中時,無論自動庫存更改的規則如何,都要對當前實際庫存進行檢查) MovementLabel=產品移動標籤 -TypeMovement=Direction of movement +TypeMovement=移動方向 DateMovement=移動日期 InventoryCode=移動或庫存代碼 IsInPackage=包含在包裝中 @@ -167,8 +167,8 @@ MovementTransferStock=將產品%s庫存轉移到另一個倉庫 InventoryCodeShort=庫存/移動碼 NoPendingReceptionOnSupplierOrder=由於是未完成採購訂單,沒有待處理的接收處 ThisSerialAlreadyExistWithDifferentDate=此批號/序列號( %s )已存在,但入庫日期或出庫日期不同(找到%s,但您輸入%s )。 -OpenAll=打開所有活動 -OpenInternal=僅開啟內部活動 +OpenAnyMovement=開啟(所有移動) +OpenInternal=開啟(只有內部移動) UseDispatchStatus=產品在採購訂單接收處時,使用一個調度狀態(批准/拒絕) OptionMULTIPRICESIsOn=選項“分段價格”已啟用。這意味著一個產品有多個售價,因此無法計算出銷售價值 ProductStockWarehouseCreated=已正確產生庫存限制警報和需求最佳庫存 @@ -236,23 +236,23 @@ StockIsRequiredToChooseWhichLotToUse=庫存需要選擇要使用的批次 ForceTo=強制到 AlwaysShowFullArbo=在倉庫連結的彈出窗口上顯示完整的倉庫樹狀圖(警告:這可能會大大降低性能) StockAtDatePastDesc=您可以在此處檢視給定之過去日期的庫存(實際庫存) -StockAtDateFutureDesc=You can view here the stock (virtual stock) at a given date in the future +StockAtDateFutureDesc=您可以在此檢視未來某一天的庫存(虛擬庫存) CurrentStock=目前庫存 InventoryRealQtyHelp=將值設定為0以重置數量
保持欄位為空或刪除行以保持不變 -UpdateByScaning=Fill real qty by scaning +UpdateByScaning=使用掃描填入實際數量 UpdateByScaningProductBarcode=掃描更新(產品條碼) UpdateByScaningLot=掃描更新(批次|序列條碼) -DisableStockChangeOfSubProduct=Deactivate the stock change for all the subproducts of this Kit during this movement. +DisableStockChangeOfSubProduct=在此移動期間停止此組合所有子產品的庫存變化。 ImportFromCSV=匯入CSV移動清單 ChooseFileToImport=上傳檔案,然後點擊%s圖示以選擇要匯入的檔案... SelectAStockMovementFileToImport=選擇要匯入的庫存移動檔案 -InfoTemplateImport=Uploaded file needs to have this format (* are mandatory fields):
Source Warehouse* | Target Warehouse* | Product* | Quantity* | Lot/serial number
CSV character separator must be "%s" +InfoTemplateImport=上傳的檔案需要採用這種格式(*為必填欄位):
來源倉庫* |目標倉庫* |產品* |數量* |批號/序號
CSV 字元分隔符號必須是“ %s ” LabelOfInventoryMovemement=%s的庫存 ReOpen=重新打開 -ConfirmFinish=Do you confirm the closing of the inventory ? This will generate all stock movements to update your stock to the real qty you entered into the inventory. -ObjectNotFound=%s not found -MakeMovementsAndClose=Generate movements and close -AutofillWithExpected=Fill real quantity with expected quantity -ShowAllBatchByDefault=By default, show batch details on product "stock" tab -CollapseBatchDetailHelp=You can set batch detail default display in stocks module configuration -FieldCannotBeNegative=Field "%s" cannot be negative +ConfirmFinish=您確定要關閉此盤點嗎?這將使得產生所有庫存移動並且更新您庫存中的真實數量。 +ObjectNotFound=未發現%s +MakeMovementsAndClose=產生移動並關閉 +AutofillWithExpected=用預期數量填入實際數量 +ShowAllBatchByDefault=預設,在產品"庫存"分頁顯示批次詳細資料 +CollapseBatchDetailHelp=您可以在庫存模組設定中設定預設顯示批次詳細資料 +FieldCannotBeNegative=欄位“%s”不能為負值 diff --git a/htdocs/langs/zh_TW/supplier_proposal.lang b/htdocs/langs/zh_TW/supplier_proposal.lang index 7bb87f2607e..b029b7f1ee2 100644 --- a/htdocs/langs/zh_TW/supplier_proposal.lang +++ b/htdocs/langs/zh_TW/supplier_proposal.lang @@ -1,27 +1,28 @@ # Dolibarr language file - Source file is en_US - supplier_proposal SupplierProposal=供應商商業提案/建議書 supplier_proposalDESC=管理對供應商的價格要求 -SupplierProposalNew=新價格要求 -CommRequest=價格要求 -CommRequests=請求報價 -SearchRequest=搜尋要求 -DraftRequests=草擬要求 +SupplierProposalNew=新供應商報價 +CommRequest=供應商報價 +CommRequests=供應商報價 +SearchRequest=搜尋供應商報價 +DraftRequests=供應商報價草案 SupplierProposalsDraft=供應商提案/建議書草稿 LastModifiedRequests=最新%s的價格要求 -RequestsOpened=公開價格要求 +RequestsOpened=打開的報價 SupplierProposalArea=供應商提案/建議書區 SupplierProposalShort=供應商提案/建議書 SupplierProposals=供應商提案/建議書 SupplierProposalsShort=供應商提案/建議書 -NewAskPrice=新價格要求 -ShowSupplierProposal=顯示價格要求 -AddSupplierProposal=新增價格要求 +AskPrice=供應商報價 +NewAskPrice=新供應商報價 +ShowSupplierProposal=顯示供應商報價 +AddSupplierProposal=建立供應商價格報價 SupplierProposalRefFourn=供應商參考 SupplierProposalDate=交貨日期 SupplierProposalRefFournNotice=在關閉成為“已接受”之前,請確認供應商的參考。 -ConfirmValidateAsk=您確定要以名稱%s驗證此價格要求嗎? -DeleteAsk=刪除要求 -ValidateAsk=驗證要求 +ConfirmValidateAsk=您確定要以名稱%s驗證此供應商報價嗎? +DeleteAsk=刪除供應商報價 +ValidateAsk=驗證供應商報價 SupplierProposalStatusDraft=草案(等待驗證) SupplierProposalStatusValidated=已驗證(要求已打開) SupplierProposalStatusClosed=已關閉 @@ -32,23 +33,26 @@ SupplierProposalStatusValidatedShort=已驗證 SupplierProposalStatusClosedShort=已關閉 SupplierProposalStatusSignedShort=已接受 SupplierProposalStatusNotSignedShort=已拒絕 -CopyAskFrom=複製現有要求以建立價格要求 -CreateEmptyAsk=新增空白的要求 -ConfirmCloneAsk=您確定要複製價格請求%s嗎? -ConfirmReOpenAsk=您確定要重新打開價格請求%s嗎? -SendAskByMail=使用郵件發送價格要求 -SendAskRef=傳送價格要求%s -SupplierProposalCard=要求卡 -ConfirmDeleteAsk=您確定要刪除此價格要求%s嗎? -ActionsOnSupplierProposal=價格要求紀錄 +CopyAskFrom=複製現有報價以建立供應商報價 +CreateEmptyAsk=建立空白的供應商報價 +ConfirmCloneAsk=您確定要複製供應商報價%s嗎? +ConfirmReOpenAsk=您確定要重新打開供應商報價%s嗎? +SendAskByMail=使用郵件發送供應商報價 +SendAskRef=傳送供應商報價%s +SupplierProposalCard=供應商報價需求卡 +ConfirmDeleteAsk=您確定要刪除供應商報價%s嗎? +ActionsOnSupplierProposal=供應商報價事件 DocModelAuroreDescription=完整的需求模組(logo...) -CommercialAsk=價格要求 -DefaultModelSupplierProposalCreate=預設模型新增 -DefaultModelSupplierProposalToBill=關閉價格要求時的預設範本(已接受) -DefaultModelSupplierProposalClosed=關閉價格要求時的預設範本(已拒絕) +CommercialAsk=供應商報價 +DefaultModelSupplierProposalCreate=預設模型建立 +DefaultModelSupplierProposalToBill=關閉供應商報價時的預設範本(已接受) +DefaultModelSupplierProposalClosed=關閉供應商報價時的預設範本(已拒絕) ListOfSupplierProposals=要求供應商提案/建議書清單 ListSupplierProposalsAssociatedProject=專案中供應商提案/建議書清單 SupplierProposalsToClose=將供應商提案/建議書結案 SupplierProposalsToProcess=將處理供應商提案/建議書 -LastSupplierProposals=最新%s價格要求 -AllPriceRequests=所有要求 +LastSupplierProposals=最新%s的供應商報價 +AllPriceRequests=所有供應商報價 +TypeContact_supplier_proposal_external_SHIPPING=供應商出貨聯絡人 +TypeContact_supplier_proposal_external_BILLING=供應商發票聯絡人 +TypeContact_supplier_proposal_external_SERVICE=提案/建議書聯絡人 diff --git a/htdocs/langs/zh_TW/ticket.lang b/htdocs/langs/zh_TW/ticket.lang index ed96eadd5bc..b4dfb98e9a6 100644 --- a/htdocs/langs/zh_TW/ticket.lang +++ b/htdocs/langs/zh_TW/ticket.lang @@ -34,7 +34,8 @@ TicketDictResolution=服務單-決議 TicketTypeShortCOM=商業問題 TicketTypeShortHELP=請求有用的幫助 -TicketTypeShortISSUE=錯誤或問題 +TicketTypeShortISSUE=問題或錯誤 +TicketTypeShortPROBLEM=問題 TicketTypeShortREQUEST=變更或增強要求 TicketTypeShortPROJET=專案 TicketTypeShortOTHER=其他 @@ -54,14 +55,15 @@ TypeContact_ticket_internal_SUPPORTTEC=已分配用戶 TypeContact_ticket_external_SUPPORTCLI=客戶聯絡人/事件追踪 TypeContact_ticket_external_CONTRIBUTOR=外部合作者 -OriginEmail=電子郵件來源 +OriginEmail=電子郵件作者 Notify_TICKET_SENTBYMAIL=以電子郵件發送服務單訊息 # Status Read=已讀取 Assigned=已分配 InProgress=進行中 -NeedMoreInformation=等待訊息 +NeedMoreInformation=等待作者回覆 +NeedMoreInformationShort=等待回覆 Answered=已回覆 Waiting=等待中 Closed=已關閉 @@ -117,7 +119,7 @@ TicketsShowModuleLogoHelp=啟用此選項可在公共界面的頁面中隱藏商 TicketsShowCompanyLogo=在公共界面上顯示公司商標 TicketsShowCompanyLogoHelp=啟用此選項可在公共界面的頁面中隱藏主要公司的商標 TicketsEmailAlsoSendToMainAddress=同時向主要電子郵件地址寄送通知 -TicketsEmailAlsoSendToMainAddressHelp=Enable this option to also send an email to the address defined into setup "%s" (see tab "%s") +TicketsEmailAlsoSendToMainAddressHelp=啟用此選項會同時寄送一封Email至設定中預設的電子信箱"%s"(查看分頁"%s") TicketsLimitViewAssignedOnly=限制顯示分配給目前用戶的服務單。(對外部用戶無效,始終被限制於他們所依賴的合作方) TicketsLimitViewAssignedOnlyHelp=僅顯示分配給目前用戶的服務單。不適用於具有服務單管理權限的用戶。 TicketsActivatePublicInterface=啟用公共界面 @@ -131,7 +133,7 @@ TicketsDisableCustomerEmail=從公共界面建立服務單時,始終禁用電 TicketsPublicNotificationNewMessage=當有新的訊息/意見新增到服務單時寄送Email TicketsPublicNotificationNewMessageHelp=當公共界面有新增訊息時寄送電子郵件(給已分配用戶或寄送通知電子郵件給(更新)與/或通知電子郵件給) TicketPublicNotificationNewMessageDefaultEmail=通知電子郵件寄送到(更新) -TicketPublicNotificationNewMessageDefaultEmailHelp=Send an email to this address for each new message notifications if the ticket doesn't have a user assigned to it or if the user doesn't have any known email. +TicketPublicNotificationNewMessageDefaultEmailHelp=如果服務單未分配給用戶或是用戶沒有已知的電子郵件則為每一個新訊息提醒寄送一封電子郵件至這個信箱 # # Index & list page # @@ -160,7 +162,7 @@ CreatedBy=建立者 NewTicket=新服務單 SubjectAnswerToTicket=服務單回應 TicketTypeRequest=需求類型 -TicketCategory=群組 +TicketCategory=服務單分類 SeeTicket=查閱服務單 TicketMarkedAsRead=服務單已標記為已讀 TicketReadOn=繼續讀取 @@ -211,6 +213,7 @@ TicketMessageHelp=此段文字將會被儲存在服務單卡片的訊息清單 TicketMessageSubstitutionReplacedByGenericValues=替換變量將被替換為一般值。 TimeElapsedSince=已經過時間 TicketTimeToRead=讀取前經過的時間 +TicketTimeElapsedBeforeSince=之前/之後經過的時間 TicketContacts=聯絡人服務單 TicketDocumentsLinked=已連結到服務單的文件 ConfirmReOpenTicket=您確定要重新開啟此服務單嗎? diff --git a/htdocs/loan/note.php b/htdocs/loan/note.php index f7930b64c9a..a17445db6cf 100644 --- a/htdocs/loan/note.php +++ b/htdocs/loan/note.php @@ -41,6 +41,8 @@ $langs->loadLangs(array("loan")); // Security check $id = GETPOST('id', 'int'); + +$hookmanager->initHooks(array('loannote')); $result = restrictedArea($user, 'loan', $id, '&loan'); $object = new Loan($db); @@ -55,7 +57,14 @@ $permissionnote = $user->rights->loan->write; // Used by the include of actions_ * Actions */ -include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once + +$reshook = $hookmanager->executeHooks('doActions', array(), $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) { + setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); +} +if (empty($reshook)) { + include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once +} /* diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index bd0d77d3389..99cfe360f9f 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -448,7 +448,7 @@ if (!defined('NOTOKENRENEWAL')) { } // Save in $_SESSION['newtoken'] what will be next token. Into forms, we will add param token = $_SESSION['newtoken'] - $token = dol_hash(uniqid(mt_rand(), true)); // Generates a hash of a random number + $token = dol_hash(uniqid(mt_rand(), false), 'md5'); // Generates a hash of a random number. We don't need a secured hash, just a changing random value. $_SESSION['newtoken'] = $token; dol_syslog("NEW TOKEN generated by : " . $_SERVER['PHP_SELF'], LOG_DEBUG); } @@ -509,7 +509,7 @@ if ((!defined('NOCSRFCHECK') && empty($dolibarr_nocsrfcheck) && !empty($conf->gl //print 'Unset POST by CSRF protection in main.inc.php.'; // Do not output anything because this create problems when using the BACK button on browsers. setEventMessages('SecurityTokenHasExpiredSoActionHasBeenCanceledPleaseRetry', null, 'warnings'); //if ($conf->global->MAIN_FEATURES_LEVEL >= 1) setEventMessages('Unset POST and GET params by CSRF protection in main.inc.php (Token provided was not generated by the previous page).'."
\n".'$_SERVER[REQUEST_URI] = '.$_SERVER['REQUEST_URI'].' $_SERVER[REQUEST_METHOD] = '.$_SERVER['REQUEST_METHOD'].' GETPOST(token) = '.GETPOST('token', 'alpha').' $_SESSION[token] = '.$_SESSION['token'], null, 'warnings'); - $savid = ((int) $_POST['id']); + if (isset($_POST['id'])) $savid = ((int) $_POST['id']); unset($_POST); //unset($_POST['action']); unset($_POST['massaction']); //unset($_POST['confirm']); unset($_POST['confirmmassaction']); @@ -517,7 +517,7 @@ if ((!defined('NOCSRFCHECK') && empty($dolibarr_nocsrfcheck) && !empty($conf->gl unset($_GET['action']); unset($_GET['confirmmassaction']); unset($_GET['massaction']); - $_POST['id'] = ((int) $savid); + if (isset($savid)) $_POST['id'] = ((int) $savid); } // Note: There is another CSRF protection into the filefunc.inc.php @@ -1689,7 +1689,7 @@ function top_htmlhead($head, $title = '', $disablejs = 0, $disablehead = 0, $arr // Global js function print ''."\n"; - print ''."\n"; + print ''."\n"; // JS forced by modules (relative url starting with /) if (!empty($conf->modules_parts['js'])) { // $conf->modules_parts['js'] is array('module'=>array('file1','file2')) @@ -1698,7 +1698,7 @@ function top_htmlhead($head, $title = '', $disablejs = 0, $disablehead = 0, $arr $filesjs = (array) $filesjs; // To be sure filejs is an array foreach ($filesjs as $jsfile) { // jsfile is a relative path - print ''."\n".''."\n"; + print ''."\n".''."\n"; } } } @@ -1707,9 +1707,9 @@ function top_htmlhead($head, $title = '', $disablejs = 0, $disablehead = 0, $arr print ''."\n"; foreach ($arrayofjs as $jsfile) { if (preg_match('/^(http|\/\/)/i', $jsfile)) { - print ''."\n"; + print ''."\n"; } else { - print ''."\n"; + print ''."\n"; } } } @@ -1854,7 +1854,7 @@ function top_menu($head, $title = '', $target = '', $disablejs = 0, $disablehead if (empty($conf->global->MAIN_PRINT_DISABLELINK) && empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER) && $conf->browser->layout != 'phone') { $qs = dol_escape_htmltag($_SERVER["QUERY_STRING"]); - if (is_array($_POST)) { + if (isset($_POST) && is_array($_POST)) { foreach ($_POST as $key => $value) { if ($key !== 'action' && $key !== 'password' && !is_array($value)) { $qs .= '&'.$key.'='.urlencode($value); @@ -2063,7 +2063,7 @@ function top_menu_user($hideloginname = 0, $urllogout = '') $dropdownBody .= '
'.$langs->trans("ConnectedSince").': '.dol_print_date($user->datelastlogin, "dayhour", 'tzuser'); $dropdownBody .= '
'.$langs->trans("PreviousConnexion").': '.dol_print_date($user->datepreviouslogin, "dayhour", 'tzuser'); $dropdownBody .= '
'.$langs->trans("CurrentTheme").': '.$conf->theme; - $dropdownBody .= '
'.$langs->trans("CurrentMenuManager").': '.$menumanager->name; + $dropdownBody .= '
'.$langs->trans("CurrentMenuManager").': '.(isset($menumanager) ? $menumanager->name : 'unknown'); $langFlag = picto_from_langcode($langs->getDefaultLang()); $dropdownBody .= '
'.$langs->trans("CurrentUserLanguage").': '.($langFlag ? $langFlag.' ' : '').$langs->getDefaultLang(); @@ -3146,7 +3146,7 @@ if (!function_exists("llxFooter")) { } // Wrapper to add log when clicking on download or preview - if (!empty($conf->blockedlog->enabled) && is_object($object) && $object->id > 0 && $object->statut > 0) { + if (!empty($conf->blockedlog->enabled) && is_object($object) && !empty($object->id) && $object->id > 0 && $object->statut > 0) { if (in_array($object->element, array('facture'))) { // Restrict for the moment to element 'facture' print "\n\n"; ?> diff --git a/htdocs/margin/tabs/thirdpartyMargins.php b/htdocs/margin/tabs/thirdpartyMargins.php index 21e922a9fa7..1b3cc468e5c 100644 --- a/htdocs/margin/tabs/thirdpartyMargins.php +++ b/htdocs/margin/tabs/thirdpartyMargins.php @@ -142,7 +142,7 @@ if ($socid > 0) { // Total Margin print ''.$langs->trans("TotalMargin").''; - print ''; // set by jquery (see below) + print ''; // set by jquery (see below) print ''; // Margin Rate @@ -242,9 +242,9 @@ if ($socid > 0) { print "\n"; print ""; print dol_print_date($db->jdate($objp->datef), 'day').""; - print "".price(price2num($objp->selling_price, 'MT'))."\n"; - print "".price(price2num(($objp->type == 2 ? -1 : 1) * $objp->buying_price, 'MT'))."\n"; - print "".$sign.price(price2num($objp->marge, 'MT'))."\n"; + print "".price(price2num($objp->selling_price, 'MT'))."\n"; + print "".price(price2num(($objp->type == 2 ? -1 : 1) * $objp->buying_price, 'MT'))."\n"; + print "".$sign.price(price2num($objp->marge, 'MT'))."\n"; if (!empty($conf->global->DISPLAY_MARGIN_RATES)) { print "".(($marginRate === '') ? 'n/a' : $sign.price(price2num($marginRate, 'MT'))."%")."\n"; } diff --git a/htdocs/modulebuilder/template/class/myobject.class.php b/htdocs/modulebuilder/template/class/myobject.class.php index 41ea75ec515..65af15cffa8 100644 --- a/htdocs/modulebuilder/template/class/myobject.class.php +++ b/htdocs/modulebuilder/template/class/myobject.class.php @@ -84,7 +84,7 @@ class MyObject extends CommonObject * 'foreignkey'=>'tablename.field' if the field is a foreign key (it is recommanded to name the field fk_...). * 'searchall' is 1 if we want to search in this field when making a search from the quick search button. * 'isameasure' must be set to 1 if you want to have a total on list for this field. Field type must be summable like integer or double(24,8). - * 'css' and 'cssview' and 'csslist' is the CSS style to use on field. 'css' is used in creation and update. 'cssview' is used in view mode. 'csslist' is used for columns in lists. For example: 'maxwidth200', 'wordbreak', 'tdoverflowmax200' + * 'css' and 'cssview' and 'csslist' is the CSS style to use on field. 'css' is used in creation and update. 'cssview' is used in view mode. 'csslist' is used for columns in lists. For example: 'css'=>'minwidth300 maxwidth500 widthcentpercentminusx', 'cssview'=>'wordbreak', 'csslist'=>'tdoverflowmax200' * 'help' is a 'TranslationString' to use to show a tooltip on field. You can also use 'TranslationString:keyfortooltiponlick' for a tooltip on click. * 'showoncombobox' if value of the field must be visible into the label of the combobox that list record * 'disabled' is 1 if we want to have the field locked by a 'disabled' attribute. In most cases, this is never set into the definition of $fields into class, but is set dynamically by some part of code. diff --git a/htdocs/modulebuilder/template/myobject_card.php b/htdocs/modulebuilder/template/myobject_card.php index cac59593950..b074412b6b3 100644 --- a/htdocs/modulebuilder/template/myobject_card.php +++ b/htdocs/modulebuilder/template/myobject_card.php @@ -434,10 +434,11 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea // Show object lines $result = $object->getLinesArray(); - print ' + print ' + '; diff --git a/htdocs/modulebuilder/template/myobject_list.php b/htdocs/modulebuilder/template/myobject_list.php index abc8b879d33..4633a69e6dd 100644 --- a/htdocs/modulebuilder/template/myobject_list.php +++ b/htdocs/modulebuilder/template/myobject_list.php @@ -165,7 +165,7 @@ foreach ($object->fields as $key => $val) { 'checked'=>(($visible < 0) ? 0 : 1), 'enabled'=>($visible != 3 && dol_eval($val['enabled'], 1)), 'position'=>$val['position'], - 'help'=>$val['help'] + 'help'=> isset($val['help']) ? $val['help'] : '' ); } } @@ -328,16 +328,19 @@ $sql .= $hookmanager->resPrint; /* If a group by is required $sql.= " GROUP BY "; -foreach($object->fields as $key => $val) { +foreach($object->fields as $key => $val) +{ $sql.='t.'.$key.', '; } // Add fields from extrafields if (! empty($extrafields->attributes[$object->table_element]['label'])) { - foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) $sql.=($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? "ef.".$key.', ' : ''); + foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) { + $sql .= ($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? "ef.".$key.', ' : ''); + } } // Add where from hooks $parameters=array(); -$reshook=$hookmanager->executeHooks('printFieldListGroupBy',$parameters, $object); // Note that $action and $object may have been modified by hook +$reshook=$hookmanager->executeHooks('printFieldListGroupBy', $parameters, $object); // Note that $action and $object may have been modified by hook $sql.=$hookmanager->resPrint; $sql=preg_replace('/,\s*$/','', $sql); */ @@ -383,7 +386,7 @@ if ($num == 1 && !empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && $ // Output page // -------------------------------------------------------------------- -llxHeader('', $title, $help_url, '', 0, 0, $morejs, $morecss, '', 'classforhorizontalscrolloftabs'); +llxHeader('', $title, $help_url, '', 0, 0, $morejs, $morecss, '', ''); // Example : Adding jquery code // print ''; -print ''."\n"; + print '
' . "\n"; -// Email -print ''."\n"; -// Company -print ''."\n"; -// Address -print ''."\n"; -// Zip / Town -print ''; -// Country -print '' . "\n"; + // Company + print '' . "\n"; + // Address + print '' . "\n"; + // Zip / Town + print ''; + // Country + print ''; -// State -if (empty($conf->global->SOCIETE_DISABLE_STATE)) { - print ''; + // State + if (empty($conf->global->SOCIETE_DISABLE_STATE)) { + print ''; + } + + print "
'.$langs->trans("Email").'*
'.$langs->trans("Company"); -if (!empty(floatval($project->price_registration))) { - print '*'; -} -print '
'.$langs->trans("Address").''."\n"; -print '
'.$langs->trans('Zip').' / '.$langs->trans('Town').''; -print $formcompany->select_ziptown(GETPOST('zipcode'), 'zipcode', array('town', 'selectcountry_id', 'state_id'), 6, 1); -print ' / '; -print $formcompany->select_ziptown(GETPOST('town'), 'town', array('zipcode', 'selectcountry_id', 'state_id'), 0, 1); -print '
'.$langs->trans('Country').'*'; -$country_id = GETPOST('country_id'); -if (!$country_id && !empty($conf->global->MEMBER_NEWFORM_FORCECOUNTRYCODE)) { - $country_id = getCountry($conf->global->MEMBER_NEWFORM_FORCECOUNTRYCODE, 2, $db, $langs); -} -if (!$country_id && !empty($conf->geoipmaxmind->enabled)) { - $country_code = dol_user_country(); - //print $country_code; - if ($country_code) { - $new_country_id = getCountry($country_code, 3, $db, $langs); - //print 'xxx'.$country_code.' - '.$new_country_id; - if ($new_country_id) { - $country_id = $new_country_id; + // Email + print '
' . $langs->trans("Email") . '*
' . $langs->trans("Company"); + if (!empty(floatval($project->price_registration))) { + print '*'; + } + print '
' . $langs->trans("Address") . '' . "\n"; + print '
' . $langs->trans('Zip') . ' / ' . $langs->trans('Town') . ''; + print $formcompany->select_ziptown(GETPOST('zipcode'), 'zipcode', array('town', 'selectcountry_id', 'state_id'), 6, 1); + print ' / '; + print $formcompany->select_ziptown(GETPOST('town'), 'town', array('zipcode', 'selectcountry_id', 'state_id'), 0, 1); + print '
' . $langs->trans('Country') . '*'; + $country_id = GETPOST('country_id'); + if (!$country_id && !empty($conf->global->MEMBER_NEWFORM_FORCECOUNTRYCODE)) { + $country_id = getCountry($conf->global->MEMBER_NEWFORM_FORCECOUNTRYCODE, 2, $db, $langs); + } + if (!$country_id && !empty($conf->geoipmaxmind->enabled)) { + $country_code = dol_user_country(); + //print $country_code; + if ($country_code) { + $new_country_id = getCountry($country_code, 3, $db, $langs); + //print 'xxx'.$country_code.' - '.$new_country_id; + if ($new_country_id) { + $country_id = $new_country_id; + } } } -} -$country_code = getCountry($country_id, 2, $db, $langs); -print $form->select_country($country_id, 'country_id'); -print '
'.$langs->trans('State').''; - if ($country_code) { - print $formcompany->select_state(GETPOST("state_id"), $country_code); - } else { - print ''; - } + $country_code = getCountry($country_id, 2, $db, $langs); + print $form->select_country($country_id, 'country_id'); print '
' . $langs->trans('State') . ''; + if ($country_code) { + print $formcompany->select_state(GETPOST("state_id"), $country_code); + } else { + print ''; + } + print '
\n"; + + print dol_get_fiche_end(); + + // Save + print '
'; + print ''; + if (!empty($backtopage)) { + print '     '; + } + print '
'; + + + print "\n"; + print "
"; + print '
'; } -print "\n"; - -print dol_get_fiche_end(); - -// Save -print '
'; -print ''; -if (!empty($backtopage)) { - print '     '; -} -print '
'; - - -print "\n"; -print "
"; -print ''; - - llxFooterVierge(); $db->close(); diff --git a/htdocs/public/payment/paymentok.php b/htdocs/public/payment/paymentok.php index 1fbf420888d..2f566d4bb31 100644 --- a/htdocs/public/payment/paymentok.php +++ b/htdocs/public/payment/paymentok.php @@ -1302,6 +1302,12 @@ if ($ispaymentok) { $error++; } // End call triggers + } elseif (get_class($object) == 'stdClass') { + //In some case $object is not instanciate (for paiement on custom object) We need to deal with payment + include_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php'; + $paiement = new Paiement($db); + $result = $paiement->call_trigger('PAYMENTONLINE_PAYMENT_OK', $user); + if ($result < 0) $error++; } print $langs->trans("YourPaymentHasBeenRecorded")."
\n"; diff --git a/htdocs/public/project/suggestbooth.php b/htdocs/public/project/suggestbooth.php index 6329441778f..3ab8e165c7e 100644 --- a/htdocs/public/project/suggestbooth.php +++ b/htdocs/public/project/suggestbooth.php @@ -405,6 +405,7 @@ if (empty($reshook) && $action == 'add') { $facture->paye = 0; $facture->date = dol_now(); $facture->cond_reglement_id = $contact->cond_reglement_id; + $facture->fk_project = $project->id; if (empty($facture->cond_reglement_id)) { $paymenttermstatic = new PaymentTerm($contact->db); @@ -469,7 +470,7 @@ if (empty($reshook) && $action == 'add') { $labeltouse = $conf->global->EVENTORGANIZATION_TEMPLATE_EMAIL_ASK_BOOTH; if (!empty($labeltouse)) { - $arraydefaultmessage = $formmail->getEMailTemplate($db, 'eventorganization_send', $user, $outputlangs, $labeltouse, 1, ''); + $arraydefaultmessage = $formmail->getEMailTemplate($db, 'conferenceorbooth', $user, $outputlangs, $labeltouse, 1, ''); } if (!empty($labeltouse) && is_object($arraydefaultmessage) && $arraydefaultmessage->id > 0) { @@ -569,7 +570,7 @@ jQuery(document).ready(function () { print ''."\n"; // Name -print ''; +print ''; print ''; print ''; // Email @@ -577,21 +578,6 @@ print ''."\n"; -// Type of event -print ''."\n"; -print ''; -// Label -print ''."\n"; -print ''."\n"; -// Note -print ''."\n"; -print ''."\n"; -// Start Date -print ''."\n"; -print ''."\n"; -// End Date -print ''."\n"; -print ''."\n"; // Address print ''."\n"; @@ -603,9 +589,8 @@ print $formcompany->select_ziptown(GETPOST('town'), 'town', array('zipcode', 'se print ''; // Country print ''; } +// Type of event +print ''."\n"; +print ''; +// Label +print ''."\n"; +print ''."\n"; +// Note +print ''."\n"; +print ''."\n"; +// Start Date +print ''."\n"; +print ''."\n"; +// End Date +print ''."\n"; +print ''."\n"; + print "
lastname).'" autofocus="autofocus">
'.$langs->trans("Email").'*'.$langs->trans("Company").'*'; print '
'.$langs->trans("EventType").'*'.FORM::selectarray('eventtype', $arrayofeventtype, $eventtype).'
'.$langs->trans("Label").'*
'.$langs->trans("Note").'*
'.$langs->trans("DateStart").'*
'.$langs->trans("DateEnd").'*
'.$langs->trans("Address").''."\n"; print '
'.$langs->trans('Country'); -if (!empty(floatval($project->price_booth))) { - print '*'; -} +print '*'; + print ''; $country_id = GETPOST('country_id'); if (!$country_id && !empty($conf->global->MEMBER_NEWFORM_FORCECOUNTRYCODE)) { @@ -635,6 +620,22 @@ if (empty($conf->global->SOCIETE_DISABLE_STATE)) { } print '
'.$langs->trans("EventType").'*'.FORM::selectarray('eventtype', $arrayofeventtype, $eventtype).'
'.$langs->trans("LabelOfBooth").'*
'.$langs->trans("Description").'*
'.$langs->trans("DateStart").'*
'.$langs->trans("DateEnd").'*
\n"; diff --git a/htdocs/public/project/suggestconference.php b/htdocs/public/project/suggestconference.php index 00b093ba215..399969bc80d 100644 --- a/htdocs/public/project/suggestconference.php +++ b/htdocs/public/project/suggestconference.php @@ -409,7 +409,7 @@ if (empty($reshook) && $action == 'add') { $labeltouse = $conf->global->EVENTORGANIZATION_TEMPLATE_EMAIL_ASK_CONF; if (!empty($labeltouse)) { - $arraydefaultmessage = $formmail->getEMailTemplate($db, 'eventorganization_send', $user, $outputlangs, $labeltouse, 1, ''); + $arraydefaultmessage = $formmail->getEMailTemplate($db, 'conferenceorbooth', $user, $outputlangs, $labeltouse, 1, ''); } if (!empty($labeltouse) && is_object($arraydefaultmessage) && $arraydefaultmessage->id > 0) { @@ -508,11 +508,11 @@ jQuery(document).ready(function () { print ''."\n"; // Last Name -print ''; +print ''; print ''; print ''; // First Name -print ''; +print ''; print ''; print ''; // Email @@ -520,21 +520,6 @@ print ''."\n"; -// Type of event -print ''."\n"; -print ''; -// Label -print ''."\n"; -print ''."\n"; -// Note -print ''."\n"; -print ''."\n"; -// Start Date -print ''."\n"; -print ''."\n"; -// End Date -print ''."\n"; -print ''."\n"; // Address print ''."\n"; @@ -574,6 +559,22 @@ if (empty($conf->global->SOCIETE_DISABLE_STATE)) { } print ''; } +// Type of event +print ''."\n"; +print ''; +// Label +print ''."\n"; +print ''."\n"; +// Note +print ''."\n"; +print ''."\n"; +// Start Date +print ''."\n"; +print ''."\n"; +// End Date +print ''."\n"; +print ''."\n"; + print "
lastname).'" autofocus="autofocus">
firstname).'" autofocus="autofocus">
'.$langs->trans("Email").'*'.$langs->trans("Company").'*'; print '
'.$langs->trans("EventType").'*'.FORM::selectarray('eventtype', $arrayofeventtype, $eventtype).'
'.$langs->trans("Label").'*
'.$langs->trans("Note").'*
'.$langs->trans("DateStart").'
'.$langs->trans("DateEnd").'
'.$langs->trans("Address").''."\n"; print '
'.$langs->trans("EventType").'*'.FORM::selectarray('eventtype', $arrayofeventtype, $eventtype).'
'.$langs->trans("LabelOfconference").'*
'.$langs->trans("Description").'*
'.$langs->trans("DateStart").'
'.$langs->trans("DateEnd").'
\n"; diff --git a/htdocs/reception/note.php b/htdocs/reception/note.php index f343e56e14d..2c1eb55d7b3 100644 --- a/htdocs/reception/note.php +++ b/htdocs/reception/note.php @@ -67,6 +67,11 @@ $permissionnote = $user->rights->reception->creer; // Used by the include of act if ($user->socid > 0) { $socid = $user->socid; } + + +// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context +$hookmanager->initHooks(array('receptionnote')); + if ($origin == 'reception') { $result = restrictedArea($user, $origin, $object->id); } else { @@ -87,7 +92,13 @@ if ($origin == 'reception') { * Actions */ -include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not includ_once +$reshook = $hookmanager->executeHooks('doActions', array(), $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) { + setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); +} +if (empty($reshook)) { + include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once +} /* diff --git a/htdocs/recruitment/recruitmentcandidature_note.php b/htdocs/recruitment/recruitmentcandidature_note.php index d4c18155c5d..19808ca1b59 100644 --- a/htdocs/recruitment/recruitmentcandidature_note.php +++ b/htdocs/recruitment/recruitmentcandidature_note.php @@ -94,7 +94,13 @@ $result = restrictedArea($user, 'recruitment', $object->id, 'recruitment_recruit * Actions */ -include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once +$reshook = $hookmanager->executeHooks('doActions', array(), $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) { + setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); +} +if (empty($reshook)) { + include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once +} /* diff --git a/htdocs/recruitment/recruitmentindex.php b/htdocs/recruitment/recruitmentindex.php index d3f97e6f3d1..6e9ee616327 100644 --- a/htdocs/recruitment/recruitmentindex.php +++ b/htdocs/recruitment/recruitmentindex.php @@ -183,7 +183,7 @@ if ($conf->use_javascript_ajax) { print '
'; print ''; - print ''."\n"; + print ''."\n"; $listofstatus = array(0, 1, 3, 5, 8, 9); foreach ($listofstatus as $status) { $dataseries[] = array(dol_html_entity_decode($staticrecruitmentcandidature->LibStatut($status, 1), ENT_QUOTES | ENT_HTML5), (isset($vals[$status]) ? (int) $vals[$status] : 0)); diff --git a/htdocs/recruitment/recruitmentjobposition_note.php b/htdocs/recruitment/recruitmentjobposition_note.php index 9dbcd0e1180..dc7cdaef4ae 100644 --- a/htdocs/recruitment/recruitmentjobposition_note.php +++ b/htdocs/recruitment/recruitmentjobposition_note.php @@ -99,7 +99,13 @@ $result = restrictedArea($user, 'recruitment', $object->id, 'recruitment_recruit * Actions */ -include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once +$reshook = $hookmanager->executeHooks('doActions', array(), $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) { + setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); +} +if (empty($reshook)) { + include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once +} /* diff --git a/htdocs/resource/note.php b/htdocs/resource/note.php index 07819b1d0b4..b43c9f8cb37 100644 --- a/htdocs/resource/note.php +++ b/htdocs/resource/note.php @@ -40,6 +40,9 @@ $action = GETPOST('action', 'aZ09'); if ($user->socid) { $socid = $user->socid; } +// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context +$hookmanager->initHooks(array('resourcenote')); + $result = restrictedArea($user, 'resource', $id, 'resource'); $object = new DolResource($db); @@ -52,7 +55,13 @@ $permissionnote = $user->rights->resource->write; // Used by the include of acti * Actions */ -include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not includ_once +$reshook = $hookmanager->executeHooks('doActions', array(), $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) { + setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); +} +if (empty($reshook)) { + include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once +} /* diff --git a/htdocs/salaries/class/salary.class.php b/htdocs/salaries/class/salary.class.php index 2f87fdd99d2..35ceb8a1931 100644 --- a/htdocs/salaries/class/salary.class.php +++ b/htdocs/salaries/class/salary.class.php @@ -502,6 +502,9 @@ class Salary extends CommonObject if ($this->datesp && $this->dateep) { $label .= '
'.$langs->trans('Period').': '.dol_print_date($this->datesp, 'day').' - '.dol_print_date($this->dateep, 'day'); } + if (isset($this->amount)) { + $label .= '
'.$langs->trans('Amount').': '.price($this->amount); + } $url = DOL_URL_ROOT.'/salaries/card.php?id='.$this->id; diff --git a/htdocs/salaries/list.php b/htdocs/salaries/list.php index 690f8df4c8c..7a8b3ebca10 100644 --- a/htdocs/salaries/list.php +++ b/htdocs/salaries/list.php @@ -140,7 +140,7 @@ foreach ($object->fields as $key => $val) { 'checked'=>(($visible < 0) ? 0 : 1), 'enabled'=>($visible != 3 && dol_eval($val['enabled'], 1)), 'position'=>$val['position'], - 'help'=>$val['help'] + 'help'=> isset($val['help']) ? $val['help'] : '' ); } } diff --git a/htdocs/salaries/payments.php b/htdocs/salaries/payments.php index bfc795ebcef..f129e6304ab 100644 --- a/htdocs/salaries/payments.php +++ b/htdocs/salaries/payments.php @@ -124,6 +124,22 @@ foreach ($object->fields as $key => $val) { } } +// Definition of array of fields for columns +$arrayfields = array(); +foreach ($object->fields as $key => $val) { + // If $val['visible']==0, then we never show the field + if (!empty($val['visible'])) { + $visible = (int) dol_eval($val['visible'], 1); + $arrayfields['t.'.$key] = array( + 'label'=>$val['label'], + 'checked'=>(($visible < 0) ? 0 : 1), + 'enabled'=>($visible != 3 && dol_eval($val['enabled'], 1)), + 'position'=>$val['position'], + 'help'=> isset($val['help']) ? $val['help'] : '' + ); + } +} + $permissiontoread = $user->rights->salaries->read; $permissiontoadd = $user->rights->salaries->write; $permissiontodelete = $user->rights->salaries->delete; @@ -666,11 +682,13 @@ include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; // If no record found if ($num == 0) { - $colspan = 1; - foreach ($arrayfields as $key => $val) { if (!empty($val['checked'])) { + /*$colspan = 1; + foreach ($arrayfields as $key => $val) { + if (!empty($val['checked'])) { $colspan++; - } - } + } + }*/ + $colspan = 12; print ''; } diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index 8e1d03411cd..76ae78fdb51 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -495,10 +495,22 @@ if (empty($reshook)) { $object->webservices_key = GETPOST('webservices_key', 'san_alpha'); if (GETPOSTISSET('accountancy_code_sell')) { - $object->accountancy_code_sell = GETPOST('accountancy_code_sell', 'alpha'); + $accountancy_code_sell = GETPOST('accountancy_code_sell', 'alpha'); + + if (empty($accountancy_code_sell) || $accountancy_code_sell == '-1') { + $object->accountancy_code_sell = ''; + } else { + $object->accountancy_code_sell = $accountancy_code_sell; + } } if (GETPOSTISSET('accountancy_code_buy')) { - $object->accountancy_code_buy = GETPOST('accountancy_code_buy', 'alpha'); + $accountancy_code_buy = GETPOST('accountancy_code_buy', 'alpha'); + + if (empty($accountancy_code_buy) || $accountancy_code_buy == '-1') { + $object->accountancy_code_buy = ''; + } else { + $object->accountancy_code_buy = $accountancy_code_buy; + } } // Incoterms @@ -554,7 +566,7 @@ if (empty($reshook)) { } // We set country_id, country_code and country for the selected country - $object->country_id = GETPOST('country_id') != '' ?GETPOST('country_id') : $mysoc->country_id; + $object->country_id = GETPOST('country_id', 'int') != '' ? GETPOST('country_id', 'int') : $mysoc->country_id; if ($object->country_id) { $tmparray = getCountry($object->country_id, 'all'); $object->country_code = $tmparray['code']; @@ -1058,10 +1070,22 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { $object->default_lang = GETPOST('default_lang'); if (GETPOSTISSET('accountancy_code_sell')) { - $object->accountancy_code_sell = GETPOST('accountancy_code_sell', 'alpha'); + $accountancy_code_sell = GETPOST('accountancy_code_sell', 'alpha'); + + if (empty($accountancy_code_sell) || $accountancy_code_sell == '-1') { + $object->accountancy_code_sell = ''; + } else { + $object->accountancy_code_sell = $accountancy_code_sell; + } } if (GETPOSTISSET('accountancy_code_buy')) { - $object->accountancy_code_buy = GETPOST('accountancy_code_buy', 'alpha'); + $accountancy_code_buy = GETPOST('accountancy_code_buy', 'alpha'); + + if (empty($accountancy_code_buy) || $accountancy_code_buy == '-1') { + $object->accountancy_code_buy = ''; + } else { + $object->accountancy_code_buy = $accountancy_code_buy; + } } $object->logo = (isset($_FILES['photo']) ?dol_sanitizeFileName($_FILES['photo']['name']) : ''); @@ -1385,6 +1409,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { } if ($object->country_id) { + print img_picto('', 'state', 'class="pictofixedwidth"'); print $formcompany->select_state($object->state_id, $object->country_code); } else { print $countrynotdefined; @@ -1784,10 +1809,22 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { $object->webservices_key = GETPOST('webservices_key', 'san_alpha'); if (GETPOSTISSET('accountancy_code_sell')) { - $object->accountancy_code_sell = GETPOST('accountancy_code_sell', 'alpha'); + $accountancy_code_sell = GETPOST('accountancy_code_sell', 'alpha'); + + if (empty($accountancy_code_sell) || $accountancy_code_sell == '-1') { + $object->accountancy_code_sell = ''; + } else { + $object->accountancy_code_sell = $accountancy_code_sell; + } } if (GETPOSTISSET('accountancy_code_buy')) { - $object->accountancy_code_buy = GETPOST('accountancy_code_buy', 'alpha'); + $accountancy_code_buy = GETPOST('accountancy_code_buy', 'alpha'); + + if (empty($accountancy_code_buy) || $accountancy_code_buy == '-1') { + $object->accountancy_code_buy = ''; + } else { + $object->accountancy_code_buy = $accountancy_code_buy; + } } //Incoterms @@ -2068,6 +2105,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { print ''; } diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index a213cca5577..eff2ba39c21 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -894,7 +894,7 @@ class Societe extends CommonObject $sql .= ", ".(!empty($user->id) ? ((int) $user->id) : "null"); $sql .= ", ".(!empty($this->typent_id) ? ((int) $this->typent_id) : "null"); $sql .= ", ".(!empty($this->canvas) ? "'".$this->db->escape($this->canvas)."'" : "null"); - $sql .= ", ".$this->status; + $sql .= ", ".((int) $this->status); $sql .= ", ".(!empty($this->ref_ext) ? "'".$this->db->escape($this->ref_ext)."'" : "null"); $sql .= ", 0"; $sql .= ", ".(int) $this->fk_incoterms; @@ -1369,13 +1369,13 @@ class Societe extends CommonObject $sql .= ",zip = ".(!empty($this->zip) ? "'".$this->db->escape($this->zip)."'" : "null"); $sql .= ",town = ".(!empty($this->town) ? "'".$this->db->escape($this->town)."'" : "null"); - $sql .= ",fk_departement = '".(!empty($this->state_id) ? $this->state_id : '0')."'"; - $sql .= ",fk_pays = '".(!empty($this->country_id) ? $this->country_id : '0')."'"; + $sql .= ",fk_departement = ".((!empty($this->state_id) && $this->state_id > 0) ? ((int) $this->state_id) : 'null'); + $sql .= ",fk_pays = ".((!empty($this->country_id) && $this->country_id > 0) ? ((int) $this->country_id) : 'null'); $sql .= ",phone = ".(!empty($this->phone) ? "'".$this->db->escape($this->phone)."'" : "null"); $sql .= ",fax = ".(!empty($this->fax) ? "'".$this->db->escape($this->fax)."'" : "null"); $sql .= ",email = ".(!empty($this->email) ? "'".$this->db->escape($this->email)."'" : "null"); - $sql .= ", socialnetworks = '".$this->db->escape(json_encode($this->socialnetworks))."'"; + $sql .= ",socialnetworks = '".$this->db->escape(json_encode($this->socialnetworks))."'"; $sql .= ",url = ".(!empty($this->url) ? "'".$this->db->escape($this->url)."'" : "null"); $sql .= ",parent = ".($this->parent > 0 ? $this->parent : "null"); diff --git a/htdocs/societe/note.php b/htdocs/societe/note.php index d4396738966..c896d4df70a 100644 --- a/htdocs/societe/note.php +++ b/htdocs/societe/note.php @@ -56,8 +56,13 @@ $result = restrictedArea($user, 'societe', $object->id, '&societe'); /* * Actions */ - -include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not includ_once +$reshook = $hookmanager->executeHooks('doActions', array(), $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) { + setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); +} +if (empty($reshook)) { + include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once +} /* diff --git a/htdocs/supplier_proposal/card.php b/htdocs/supplier_proposal/card.php index 633f0785fe1..5d22ea05684 100644 --- a/htdocs/supplier_proposal/card.php +++ b/htdocs/supplier_proposal/card.php @@ -552,16 +552,16 @@ if (empty($reshook)) { } } - if ($prod_entry_mode == 'free' && empty($idprod) && GETPOST('type') < 0) { + if ($prod_entry_mode == 'free' && (empty($idprod) || $idprod < 0) && GETPOST('type') < 0) { setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Type")), null, 'errors'); $error++; } - if ($prod_entry_mode == 'free' && empty($idprod) && GETPOST('price_ht') === '' && GETPOST('price_ttc') === '' && $price_ht_devise === '') { // Unit price can be 0 but not ''. Also price can be negative for proposal. + if ($prod_entry_mode == 'free' && (empty($idprod) || $idprod < 0) && GETPOST('price_ht') === '' && GETPOST('price_ttc') === '' && $price_ht_devise === '') { // Unit price can be 0 but not ''. Also price can be negative for proposal. setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("UnitPrice")), null, 'errors'); $error++; } - if ($prod_entry_mode == 'free' && empty($idprod) && empty($product_desc)) { + if ($prod_entry_mode == 'free' && (empty($idprod) || $idprod < 0) && empty($product_desc)) { setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Description")), null, 'errors'); $error++; } diff --git a/htdocs/supplier_proposal/class/supplier_proposal.class.php b/htdocs/supplier_proposal/class/supplier_proposal.class.php index 5906db24ee7..6d43222bcf2 100644 --- a/htdocs/supplier_proposal/class/supplier_proposal.class.php +++ b/htdocs/supplier_proposal/class/supplier_proposal.class.php @@ -587,7 +587,7 @@ class SupplierProposal extends CommonObject $this->line->date_end = $date_end; // infos marge - if (!empty($fk_product) && empty($fk_fournprice) && empty($pa_ht)) { + if (!empty($fk_product) && $fk_product > 0 && empty($fk_fournprice) && empty($pa_ht)) { // When fk_fournprice is 0, we take the lowest buying price include_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.product.class.php'; $productFournisseur = new ProductFournisseur($this->db); @@ -777,7 +777,7 @@ class SupplierProposal extends CommonObject $this->line->fk_unit = $fk_unit; // infos marge - if (!empty($fk_product) && empty($fk_fournprice) && empty($pa_ht)) { + if (!empty($fk_product) && $fk_product > 0 && empty($fk_fournprice) && empty($pa_ht)) { // by external module, take lowest buying price include_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.product.class.php'; $productFournisseur = new ProductFournisseur($this->db); @@ -2216,7 +2216,7 @@ class SupplierProposal extends CommonObject $this->nbtodo = $this->nbtodolate = 0; $clause = " WHERE"; - $sql = "SELECT p.rowid, p.ref, p.datec as datec"; + $sql = "SELECT p.rowid, p.ref, p.datec as datec, p.date_cloture as datefin"; $sql .= " FROM ".MAIN_DB_PREFIX."supplier_proposal as p"; if (!$user->rights->societe->client->voir && !$user->socid) { $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON p.fk_soc = sc.fk_soc"; @@ -2239,13 +2239,13 @@ class SupplierProposal extends CommonObject $label = $labelShort = ''; $status = ''; if ($mode == 'opened') { - $delay_warning = $conf->supplier_proposal->cloture->warning_delay; + $delay_warning = !empty($conf->supplier_proposal->cloture->warning_delay) ? $conf->supplier_proposal->cloture->warning_delay : 0; $status = self::STATUS_VALIDATED; $label = $langs->trans("SupplierProposalsToClose"); $labelShort = $langs->trans("ToAcceptRefuse"); } if ($mode == 'signed') { - $delay_warning = $conf->supplier_proposal->facturation->warning_delay; + $delay_warning = !empty($conf->supplier_proposal->facturation->warning_delay) ? $conf->supplier_proposal->facturation->warning_delay : 0; $status = self::STATUS_SIGNED; $label = $langs->trans("SupplierProposalsToProcess"); // May be billed or ordered $labelShort = $langs->trans("ToClose"); diff --git a/htdocs/supplier_proposal/note.php b/htdocs/supplier_proposal/note.php index d16bc90033e..c4ab85e8e20 100644 --- a/htdocs/supplier_proposal/note.php +++ b/htdocs/supplier_proposal/note.php @@ -43,6 +43,11 @@ $action = GETPOST('action', 'aZ09'); if ($user->socid) { $socid = $user->socid; } + + +// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context +$hookmanager->initHooks(array('supplier_proposalnote')); + $result = restrictedArea($user, 'supplier_proposal', $id, 'supplier_proposal'); $object = new SupplierProposal($db); @@ -55,7 +60,13 @@ $object = new SupplierProposal($db); $permissionnote = $user->rights->supplier_proposal->creer; // Used by the include of actions_setnotes.inc.php -include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not includ_once +$reshook = $hookmanager->executeHooks('doActions', array(), $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) { + setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); +} +if (empty($reshook)) { + include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once +} /* diff --git a/htdocs/takepos/ajax/ajax.php b/htdocs/takepos/ajax/ajax.php index 0ccdeb86b9b..30635c58b8c 100644 --- a/htdocs/takepos/ajax/ajax.php +++ b/htdocs/takepos/ajax/ajax.php @@ -60,11 +60,11 @@ if (empty($user->rights->takepos->run)) { if ($action == 'getProducts') { $object = new Categorie($db); if ($category == "supplements") { - $category = $conf->global->TAKEPOS_SUPPLEMENTS_CATEGORY; + $category = getDolGlobalInt('TAKEPOS_SUPPLEMENTS_CATEGORY'); } $result = $object->fetch($category); if ($result > 0) { - $prods = $object->getObjectsInCateg("product", 0, 0, 0, $conf->global->TAKEPOS_SORTPRODUCTFIELD, 'ASC'); + $prods = $object->getObjectsInCateg("product", 0, 0, 0, getDolGlobalString('TAKEPOS_SORTPRODUCTFIELD'), 'ASC'); // Removed properties we don't need if (is_array($prods) && count($prods) > 0) { foreach ($prods as $prod) { diff --git a/htdocs/takepos/index.php b/htdocs/takepos/index.php index b182f37f787..1ddab39dcbe 100644 --- a/htdocs/takepos/index.php +++ b/htdocs/takepos/index.php @@ -72,6 +72,7 @@ if ($setterminal > 0) { if ($setcurrency != "") { $_SESSION["takeposcustomercurrency"] = $setcurrency; + // We will recalculate amount for foreign currency at next call of invoice.php when $_SESSION["takeposcustomercurrency"] differs from invoice->multicurrency_code. } $_SESSION["urlfrom"] = '/takepos/index.php'; @@ -702,12 +703,12 @@ function TakeposPrintingTemp(){ } function OpenDrawer(){ - console.log("OpenDrawer call ajax url http://global->TAKEPOS_PRINT_SERVER; ?>:8111/print"); + console.log("OpenDrawer call ajax url http://:8111/print"); $.ajax({ type: "POST", data: { token: 'notrequired' }, global->TAKEPOS_PRINT_SERVER, FILTER_VALIDATE_URL) == true) { + if (getDolGlobalString('TAKEPOS_PRINT_SERVER') && filter_var($conf->global->TAKEPOS_PRINT_SERVER, FILTER_VALIDATE_URL) == true) { echo "url: '".$conf->global->TAKEPOS_PRINT_SERVER."/printer/drawer.php',"; } else { echo "url: 'http://".$conf->global->TAKEPOS_PRINT_SERVER.":8111/print',"; @@ -780,7 +781,7 @@ function WeighingScale(){ $.ajax({ type: "POST", data: { token: 'notrequired' }, - url: 'global->TAKEPOS_PRINT_SERVER; ?>/scale/index.php', + url: '/scale/index.php', }) .done(function( editnumber ) { $("#poslines").load("invoice.php?action=updateqty&place="+place+"&idline="+selectedline+"&number="+editnumber, function() { @@ -798,7 +799,7 @@ $( document ).ready(function() { if ($_SESSION["takeposterminal"] == "") { print "ModalBox('ModalTerminal');"; } - if ($conf->global->TAKEPOS_CONTROL_CASH_OPENING) { + if (getDolGlobalString('TAKEPOS_CONTROL_CASH_OPENING')) { $sql = "SELECT rowid, status FROM ".MAIN_DB_PREFIX."pos_cash_fence WHERE"; $sql .= " entity = ".$conf->entity." AND "; $sql .= " date_creation > '".$db->idate(dol_get_first_hour(dol_now()))."'"; @@ -817,7 +818,7 @@ $( document ).ready(function() { global->{'CASHDESK_READER_KEYCODE_FOR_ENTER'.$_SESSION['takeposterminal']} > 0 ? $conf->global->{'CASHDESK_READER_KEYCODE_FOR_ENTER'.$_SESSION['takeposterminal']} : ''; +$keyCodeForEnter = getDolGlobalInt('CASHDESK_READER_KEYCODE_FOR_ENTER'.$_SESSION['takeposterminal']) > 0 ? getDolGlobalInt('CASHDESK_READER_KEYCODE_FOR_ENTER'.$_SESSION['takeposterminal']) : ''; ?>
@@ -1035,41 +1036,41 @@ $menus[$r++] = array('title'=>' $menus[$r++] = array('title'=>'
'.$langs->trans("Reduction").'
', 'action'=>'Reduction();'); $menus[$r++] = array('title'=>'
'.$langs->trans("Payment").'
', 'action'=>'CloseBill();'); -if ($conf->global->TAKEPOS_DIRECT_PAYMENT) { +if (getDolGlobalString('TAKEPOS_DIRECT_PAYMENT')) { $menus[$r++] = array('title'=>'
'.$langs->trans("DirectPayment").' ('.$langs->trans("Cash").')
', 'action'=>'DirectPayment();'); } // BAR RESTAURANT specific menu -if ($conf->global->TAKEPOS_BAR_RESTAURANT) { +if (getDolGlobalString('TAKEPOS_BAR_RESTAURANT')) { if ($conf->global->TAKEPOS_ORDER_PRINTERS) { $menus[$r++] = array('title'=>'
'.$langs->trans("Order").'', 'action'=>'TakeposPrintingOrder();'); } //Button to print receipt before payment - if ($conf->global->TAKEPOS_BAR_RESTAURANT) { - if ($conf->global->TAKEPOS_PRINT_METHOD == "takeposconnector") { - if (filter_var($conf->global->TAKEPOS_PRINT_SERVER, FILTER_VALIDATE_URL) == true) { + if (getDolGlobalString('TAKEPOS_BAR_RESTAURANT')) { + if (getDolGlobalString('TAKEPOS_PRINT_METHOD') == "takeposconnector") { + if (getDolGlobalString('TAKEPOS_PRINT_SERVER') && filter_var($conf->global->TAKEPOS_PRINT_SERVER, FILTER_VALIDATE_URL) == true) { $menus[$r++] = array('title'=>'
'.$langs->trans("Receipt").'
', 'action'=>'TakeposConnector(placeid);'); } else { $menus[$r++] = array('title'=>'
'.$langs->trans("Receipt").'
', 'action'=>'TakeposPrinting(placeid);'); } - } elseif ($conf->global->TAKEPOS_PRINT_METHOD == "receiptprinter") { + } elseif (getDolGlobalString('TAKEPOS_PRINT_METHOD') == "receiptprinter") { $menus[$r++] = array('title'=>'
'.$langs->trans("Receipt").'
', 'action'=>'DolibarrTakeposPrinting(placeid);'); } else { $menus[$r++] = array('title'=>'
'.$langs->trans("Receipt").'
', 'action'=>'Print(placeid);'); } } - if ($conf->global->TAKEPOS_PRINT_METHOD == "takeposconnector" && $conf->global->TAKEPOS_ORDER_NOTES == 1) { + if (getDolGlobalString('TAKEPOS_PRINT_METHOD') == "takeposconnector" && getDolGlobalString('TAKEPOS_ORDER_NOTES') == 1) { $menus[$r++] = array('title'=>'
'.$langs->trans("OrderNotes").'
', 'action'=>'TakeposOrderNotes();'); } - if ($conf->global->TAKEPOS_SUPPLEMENTS) { + if (getDolGlobalString('TAKEPOS_SUPPLEMENTS')) { $menus[$r++] = array('title'=>'
'.$langs->trans("ProductSupplements").'
', 'action'=>'LoadProducts(\'supplements\');'); } } -if ($conf->global->TAKEPOS_PRINT_METHOD == "takeposconnector") { +if (getDolGlobalString('TAKEPOS_PRINT_METHOD') == "takeposconnector") { $menus[$r++] = array('title'=>'
'.$langs->trans("DOL_OPEN_DRAWER").'
', 'action'=>'OpenDrawer();'); } -if ($conf->global->TAKEPOS_PRINT_METHOD == "receiptprinter") { +if (getDolGlobalString('TAKEPOS_PRINT_METHOD') == "receiptprinter") { $menus[$r++] = array( 'title' => '
'.$langs->trans("DOL_OPEN_DRAWER").'
', 'action' => 'DolibarrOpenDrawer();', @@ -1111,7 +1112,7 @@ if (!empty($conf->global->TAKEPOS_HIDE_HEAD_BAR)) { $menus[$r++] = array('title'=>'
'.$langs->trans("Logout").'
', 'action'=>'window.location.href=\''.DOL_URL_ROOT.'/user/logout.php\';'); } -if ($conf->global->TAKEPOS_WEIGHING_SCALE) { +if (!empty($conf->global->TAKEPOS_WEIGHING_SCALE)) { $menus[$r++] = array('title'=>'
'.$langs->trans("WeighingScale").'
', 'action'=>'WeighingScale();'); } @@ -1123,12 +1124,12 @@ if ($conf->global->TAKEPOS_WEIGHING_SCALE) { foreach ($menus as $menu) { $i++; if (count($menus) > 12 and $i == 12) { - echo ''; - echo ''; + echo ''; + echo ''; } elseif ($i > 12) { - echo ''; + echo ''; } else { - echo ''; + echo ''; } } @@ -1168,7 +1169,7 @@ if ($conf->global->TAKEPOS_WEIGHING_SCALE) { //echo ''; echo ''; } else { - if (!$conf->global->TAKEPOS_HIDE_CATEGORY_IMAGES) { + if (!getDolGlobalString('TAKEPOS_HIDE_CATEGORY_IMAGES')) { echo ''; } } @@ -1207,7 +1208,7 @@ if ($conf->global->TAKEPOS_WEIGHING_SCALE) { //echo ''; print ''; } else { - if ($conf->global->TAKEPOS_HIDE_PRODUCT_IMAGES) { + if (getDolGlobalString('TAKEPOS_HIDE_PRODUCT_IMAGES')) { echo ''; } else { print '
'; @@ -1215,7 +1216,7 @@ if ($conf->global->TAKEPOS_WEIGHING_SCALE) { } } ?> - global->TAKEPOS_HIDE_PRODUCT_IMAGES) { ?> +
diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index 3f7e63d84cb..8cef291c2d7 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -70,10 +70,10 @@ if (empty($user->rights->takepos->run) && !defined('INCLUDE_PHONEPAGE_FROM_PUBLI * View */ -if (($conf->global->TAKEPOS_PHONE_BASIC_LAYOUT == 1 && $conf->browser->layout == 'phone') || defined('INCLUDE_PHONEPAGE_FROM_PUBLIC_PAGE')) { +if ((getDolGlobalString('TAKEPOS_PHONE_BASIC_LAYOUT') == 1 && $conf->browser->layout == 'phone') || defined('INCLUDE_PHONEPAGE_FROM_PUBLIC_PAGE')) { // DIRECT LINK TO THIS PAGE FROM MOBILE AND NO TERMINAL SELECTED if ($_SESSION["takeposterminal"] == "") { - if ($conf->global->TAKEPOS_NUM_TERMINALS == "1") { + if (getDolGlobalString('TAKEPOS_NUM_TERMINALS') == "1") { $_SESSION["takeposterminal"] = 1; } else { header("Location: ".DOL_URL_ROOT."/takepos/index.php"); @@ -94,6 +94,8 @@ if (($conf->global->TAKEPOS_PHONE_BASIC_LAYOUT == 1 && $conf->browser->layout == '/takepos/js/jquery.colorbox-min.js' ); $arrayofjs = array('/takepos/js/jquery.colorbox-min.js'); + $disablejs = 0; + $disablehead = 0; top_htmlhead($head, $title, $disablejs, $disablehead, $arrayofjs, $arrayofcss); } @@ -132,12 +134,19 @@ if ($pay == 'cheque') { } // Retrieve paiementid -$sql = "SELECT id FROM ".MAIN_DB_PREFIX."c_paiement"; -$sql .= " WHERE entity IN (".getEntity('c_paiement').")"; -$sql .= " AND code = '".$db->escape($paycode)."'"; -$resql = $db->query($sql); -$obj = $db->fetch_object($resql); -$paiementid = $obj->id; +$paiementid = 0; +if ($paycode) { + $sql = "SELECT id FROM ".MAIN_DB_PREFIX."c_paiement"; + $sql .= " WHERE entity IN (".getEntity('c_paiement').")"; + $sql .= " AND code = '".$db->escape($paycode)."'"; + $resql = $db->query($sql); + if ($resql) { + $obj = $db->fetch_object($resql); + if ($obj) { + $paiementid = $obj->id; + } + } +} $invoice = new Facture($db); if ($invoiceid > 0) { @@ -163,6 +172,14 @@ if ($invoice->socid > 0) { * Actions */ +// Change the currency of invoice if it was modified +if (!empty($conf->multicurrency->enabled) && !empty($_SESSION["takeposcustomercurrency"])) { + if ($invoice->multicurrency_code != $_SESSION["takeposcustomercurrency"]) { + $invoice->setMulticurrencyCode($_SESSION["takeposcustomercurrency"]); + } +} + + // Action to record a payment on a TakePOS invoice if ($action == 'valid' && $user->rights->facture->creer) { $bankaccount = 0; @@ -311,7 +328,7 @@ if ($action == 'valid' && $user->rights->facture->creer) { } } -if ($action == 'creditnote') { +if ($action == 'creditnote' && $user->rights->facture->creer) { $creditnote = new Facture($db); $creditnote->socid = $invoice->socid; $creditnote->date = dol_now(); @@ -459,10 +476,6 @@ if ($action == 'history' || $action == 'creditnote') { $invoice->fetch($placeid); } -if (!empty($conf->multicurrency->enabled) && $_SESSION["takeposcustomercurrency"] != "") { - $invoice->setMulticurrencyCode($_SESSION["takeposcustomercurrency"]); -} - if (($action == "addline" || $action == "freezone") && $placeid == 0) { $invoice->socid = $conf->global->$constforcompanyid; $invoice->date = dol_now(); @@ -631,8 +644,11 @@ if ($action == "delete") { if ($action == "updateqty") { foreach ($invoice->lines as $line) { if ($line->id == $idline) { - if (!$user->rights->takepos->editlines || (!$user->rights->takepos->editorderedlines && $line->special_code == "4")) dol_htmloutput_errors($langs->trans("NotEnoughPermissions", "TakePos"), null, 1); - else $result = $invoice->updateline($line->id, $line->desc, $line->subprice, $number, $line->remise_percent, $line->date_start, $line->date_end, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, 'HT', $line->info_bits, $line->product_type, $line->fk_parent_line, 0, $line->fk_fournprice, $line->pa_ht, $line->label, $line->special_code, $line->array_options, $line->situation_percent, $line->fk_unit); + if (!$user->rights->takepos->editlines || (!$user->rights->takepos->editorderedlines && $line->special_code == "4")) { + dol_htmloutput_errors($langs->trans("NotEnoughPermissions", "TakePos"), null, 1); + } else { + $result = $invoice->updateline($line->id, $line->desc, $line->subprice, $number, $line->remise_percent, $line->date_start, $line->date_end, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, 'HT', $line->info_bits, $line->product_type, $line->fk_parent_line, 0, $line->fk_fournprice, $line->pa_ht, $line->label, $line->special_code, $line->array_options, $line->situation_percent, $line->fk_unit); + } } } @@ -640,12 +656,13 @@ if ($action == "updateqty") { } if ($action == "updateprice") { + $customer = new Societe($db); + $customer->fetch($invoice->socid); + foreach ($invoice->lines as $line) { if ($line->id == $idline) { $prod = new Product($db); $prod->fetch($line->fk_product); - $customer = new Societe($db); - $customer->fetch($invoice->socid); $datapriceofproduct = $prod->getSellPrice($mysoc, $customer, 0); $price_min = $datapriceofproduct['price_min']; $usercanproductignorepricemin = ((!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->produit->ignore_price_min_advance)) || empty($conf->global->MAIN_USE_ADVANCED_PERMS)); @@ -654,34 +671,50 @@ if ($action == "updateprice") { if ($usercanproductignorepricemin && (!empty($price_min) && (price2num($pu_ht) * (1 - price2num($line->remise_percent) / 100) < price2num($price_min)))) { echo $langs->trans("CantBeLessThanMinPrice"); } else { - if (!$user->rights->takepos->editlines || (!$user->rights->takepos->editorderedlines && $line->special_code == "4")) dol_htmloutput_errors($langs->trans("NotEnoughPermissions", "TakePos"), null, 1); - else $result = $invoice->updateline($line->id, $line->desc, $number, $line->qty, $line->remise_percent, $line->date_start, $line->date_end, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, 'TTC', $line->info_bits, $line->product_type, $line->fk_parent_line, 0, $line->fk_fournprice, $line->pa_ht, $line->label, $line->special_code, $line->array_options, $line->situation_percent, $line->fk_unit); + if (empty($user->rights->takepos->editlines) || (empty($user->rights->takepos->editorderedlines) && $line->special_code == "4")) { + dol_htmloutput_errors($langs->trans("NotEnoughPermissions", "TakePos"), null, 1); + } else { + $result = $invoice->updateline($line->id, $line->desc, $number, $line->qty, $line->remise_percent, $line->date_start, $line->date_end, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, 'TTC', $line->info_bits, $line->product_type, $line->fk_parent_line, 0, $line->fk_fournprice, $line->pa_ht, $line->label, $line->special_code, $line->array_options, $line->situation_percent, $line->fk_unit); + } } } } + + // Reload data $invoice->fetch($placeid); } if ($action == "updatereduction") { + $customer = new Societe($db); + $customer->fetch($invoice->socid); + foreach ($invoice->lines as $line) { if ($line->id == $idline) { + dol_syslog("updatereduction Process line ".$line->id.' to apply discount of '.$number.'%'); + $prod = new Product($db); $prod->fetch($line->fk_product); - $customer = new Societe($db); - $customer->fetch($invoice->socid); + $datapriceofproduct = $prod->getSellPrice($mysoc, $customer, 0); $price_min = $datapriceofproduct['price_min']; $usercanproductignorepricemin = ((!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->produit->ignore_price_min_advance)) || empty($conf->global->MAIN_USE_ADVANCED_PERMS)); - $pu_ht = price2num($line->multicurrency_subprice / (1 + ($line->tva_tx / 100)), 'MU'); - //Check min price - if ($usercanproductignorepricemin && (!empty($price_min) && (price2num($line->multicurrency_subprice) * (1 - price2num($number) / 100) < price2num($price_min)))) { + + $pu_ht = price2num($line->subprice / (1 + ($line->tva_tx / 100)), 'MU'); + + // Check min price + if ($usercanproductignorepricemin && (!empty($price_min) && (price2num($line->subprice) * (1 - price2num($number) / 100) < price2num($price_min)))) { echo $langs->trans("CantBeLessThanMinPrice"); } else { - if (!$user->rights->takepos->editlines || (!$user->rights->takepos->editorderedlines && $line->special_code == "4")) dol_htmloutput_errors($langs->trans("NotEnoughPermissions", "TakePos"), null, 1); - else $result = $invoice->updateline($line->id, $line->desc, $line->multicurrency_subprice, $line->qty, $number, $line->date_start, $line->date_end, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, 'HT', $line->info_bits, $line->product_type, $line->fk_parent_line, 0, $line->fk_fournprice, $line->pa_ht, $line->label, $line->special_code, $line->array_options, $line->situation_percent, $line->fk_unit); + if (empty($user->rights->takepos->editlines) || (empty($user->rights->takepos->editorderedlines) && $line->special_code == "4")) { + dol_htmloutput_errors($langs->trans("NotEnoughPermissions", "TakePos"), null, 1); + } else { + $result = $invoice->updateline($line->id, $line->desc, $line->subprice, $line->qty, $number, $line->date_start, $line->date_end, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, 'HT', $line->info_bits, $line->product_type, $line->fk_parent_line, 0, $line->fk_fournprice, $line->pa_ht, $line->label, $line->special_code, $line->array_options, $line->situation_percent, $line->fk_unit); + } } } } + + // Reload data $invoice->fetch($placeid); } elseif ($action == 'update_reduction_global') { foreach ($invoice->lines as $line) { @@ -709,6 +742,7 @@ if ($action == "order" and $placeid != 0) { $catsprinter1 = explode(';', $conf->global->TAKEPOS_PRINTED_CATEGORIES_1); $catsprinter2 = explode(';', $conf->global->TAKEPOS_PRINTED_CATEGORIES_2); $catsprinter3 = explode(';', $conf->global->TAKEPOS_PRINTED_CATEGORIES_3); + $linestoprint = 0; foreach ($invoice->lines as $line) { if ($line->special_code == "4") { continue; @@ -830,25 +864,25 @@ if ($action == "valid" || $action == "history" || $action == 'creditnote') { } } $sectionwithinvoicelink .= '
'; - if ($conf->global->TAKEPOS_PRINT_METHOD == "takeposconnector") { - if (filter_var($conf->global->TAKEPOS_PRINT_SERVER, FILTER_VALIDATE_URL) == true) { + if (getDolGlobalString('TAKEPOS_PRINT_METHOD') == "takeposconnector") { + if (getDolGlobalString('TAKEPOS_PRINT_SERVER') && filter_var($conf->global->TAKEPOS_PRINT_SERVER, FILTER_VALIDATE_URL) == true) { $sectionwithinvoicelink .= ' '; } else { $sectionwithinvoicelink .= ' '; } - } elseif ($conf->global->TAKEPOS_PRINT_METHOD == "receiptprinter") { + } elseif (getDolGlobalString('TAKEPOS_PRINT_METHOD') == "receiptprinter") { $sectionwithinvoicelink .= ' '; } else { $sectionwithinvoicelink .= ' '; - if ($conf->global->TAKEPOS_GIFT_RECEIPT) { + if (getDolGlobalString('TAKEPOS_GIFT_RECEIPT')) { $sectionwithinvoicelink .= ' '; } } - if ($conf->global->TAKEPOS_EMAIL_TEMPLATE_INVOICE > 0) { + if (getDolGlobalString('TAKEPOS_EMAIL_TEMPLATE_INVOICE') && $conf->global->TAKEPOS_EMAIL_TEMPLATE_INVOICE > 0) { $sectionwithinvoicelink .= ' '; } - if ($remaintopay <= 0 && $conf->global->TAKEPOS_AUTO_PRINT_TICKETS) { + if ($remaintopay <= 0 && getDolGlobalString('TAKEPOS_AUTO_PRINT_TICKETS')) { $sectionwithinvoicelink .= ''; } } @@ -866,7 +900,7 @@ var selectedline=0; var selectedtext=""; var placeid= 0 ? $placeid : 0); ?>; $(document).ready(function() { - var idoflineadded = ; + var idoflineadded = ; $('.posinvoiceline').click(function(){ console.log("Click done on "+this.id); @@ -992,7 +1026,7 @@ function TakeposPrinting(id){ receipt=data.replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, ''); $.ajax({ type: "POST", - url: 'http://global->TAKEPOS_PRINT_SERVER; ?>:8111/print', + url: 'http://:8111/print', data: receipt }); }); @@ -1003,7 +1037,7 @@ function TakeposConnector(id){ $.get("/takepos/ajax/ajax.php?action=printinvoiceticket&term=&id="+id+"&token=", function(data, status) { $.ajax({ type: "POST", - url: 'global->TAKEPOS_PRINT_SERVER; ?>/printer/index.php', + url: '/printer/index.php', data: 'invoice='+data }); }); @@ -1058,6 +1092,7 @@ $( document ).ready(function() { $sql .= $db->order('datec', 'ASC'); $resql = $db->query($sql); if ($resql) { + $max_sale = 0; while ($obj = $db->fetch_object($resql)) { echo '$("#customerandsales").append(\''; echo 'jdate($obj->datec), '%H:%M', 'tzuser'))).'" onclick="place=\\\''; @@ -1148,10 +1183,10 @@ $( document ).ready(function() { // for tooltip and other js beautifiers must be reexecuted too. if (!empty($conf->use_javascript_ajax)) { print "\n".''."\n"; - print ''."\n"; + print ''."\n"; } -print ''."\n"; +print ''."\n"; print '
'; print '
'.$langs->trans("Statistics").' - '.$langs->trans("Candidatures").'
'.$langs->trans("Statistics").' - '.$langs->trans("RecruitmentCandidatures").'
'.$langs->trans("NoRecordFound").'
'.$form->editfieldkey('State', 'state_id', '', $object, 0).''; } + print img_picto('', 'state', 'class="pictofixedwidth"'); print $formcompany->select_state($object->state_id, $object->country_code); print '
'; if ($sectionwithinvoicelink && ($mobilepage == "invoice" || $mobilepage == "")) { @@ -1164,10 +1199,10 @@ if ($sectionwithinvoicelink && ($mobilepage == "invoice" || $mobilepage == "")) print ''; print ''; -if ($_SESSION["basiclayout"] != 1) { +if (empty($_SESSION["basiclayout"]) || $_SESSION["basiclayout"] != 1) { print ''; print ''; - if ($conf->global->TAKEPOS_SHOW_HT) { + if (getDolGlobalString('TAKEPOS_SHOW_HT')) { print '\n"; -if ($_SESSION["basiclayout"] == 1) { +if (!empty($_SESSION["basiclayout"]) && $_SESSION["basiclayout"] == 1) { if ($mobilepage == "cats") { require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; $categorie = new Categorie($db); @@ -1311,13 +1346,14 @@ if ($_SESSION["basiclayout"] == 1) { if ($placeid > 0) { //In Phone basic layout hide some content depends situation - if ($_SESSION["basiclayout"] == 1 && $mobilepage != "invoice" && $action != "order") { + if (!empty($_SESSION["basiclayout"]) && $_SESSION["basiclayout"] == 1 && $mobilepage != "invoice" && $action != "order") { return; } if (is_array($invoice->lines) && count($invoice->lines)) { print ''."\n"; $tmplines = array_reverse($invoice->lines); + $htmlsupplements = array(); foreach ($tmplines as $line) { if ($line->fk_parent_line != false) { $htmlsupplements[$line->fk_parent_line] .= 'fk_parent_line] .= ''; $htmlsupplements[$line->fk_parent_line] .= ''; $htmlsupplements[$line->fk_parent_line] .= ''; @@ -1358,7 +1394,7 @@ if ($placeid > 0) { } $htmlforlines .= '" id="'.$line->id.'">'; $htmlforlines .= ''; - if ($conf->global->TAKEPOS_SHOW_HT) { + if (getDolGlobalString('TAKEPOS_SHOW_HT')) { $htmlforlines .= ''; } $htmlforlines .= ''."\n"; - $htmlforlines .= $htmlsupplements[$line->id]; + $htmlforlines .= empty($htmlsupplements[$line->id]) ? '' : empty($htmlsupplements[$line->id]); print $htmlforlines; } diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 89cb19c129b..bffc0e17e04 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -209,7 +209,7 @@ input, select { margin-bottom: 1px; margin-top: 1px; } -#mainbody input.button:not(.buttongen):not(.bordertransp) { +#mainbody input.button:not(.buttongen):not(.bordertransp), #mainbody a.button:not(.buttongen):not(.bordertransp) { background: var(--butactionbg); color: #FFF !important; border-radius: 3px; @@ -2640,7 +2640,7 @@ table.login_table_securitycode tr td { } div.backgroundsemitransparent { - background:rgba(255,255,255,0.68); + background:rgba(255, 255, 255, 0.7); padding-left: 10px; padding-right: 10px; } @@ -3922,6 +3922,11 @@ table.noborder.paymenttable { box-shadow: 1px 1px 7px #CCC !important; } +.boxshadow { + -webkit-box-shadow: 0px 0px 5px #888; + box-shadow: 0px 0px 5px #888; +} + div.tabBar .noborder { -webkit-box-shadow: 0px 0px 0px #DDD !important; box-shadow: 0px 0px 0px #DDD !important; @@ -4525,6 +4530,9 @@ div#card-errors { .ui-dialog-content { } +.ui-dialog.ui-corner-all.ui-widget.ui-widget-content.ui-front.ui-dialog-buttons.ui-draggable { + z-index: 1002 !important; /* Default 101 with jquery, top menu have a z-index of 1000 */ +} /* ============================================================================== */ /* For content of image preview */ diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 5ad564ea5c0..de04a9e08ea 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -1507,10 +1507,10 @@ table[summary="list_of_modules"] .fa-cog { div.divphotoref { padding-right: 10px !important; } - + .hideonsmartphone { display: none; } .hideonsmartphoneimp { display: none !important; } - + select.minwidth100imp, select.minwidth100, select.minwidth200, select.minwidth200imp, select.minwidth300 { width: calc(100% - 40px) !important; display: inline-block; @@ -1519,11 +1519,11 @@ table[summary="list_of_modules"] .fa-cog { width: calc(100% - 70px) !important; display: inline-block; } - + input.maxwidthinputfileonsmartphone { width: 175px; } - + .poweredbyimg { width: 48px; } @@ -1862,7 +1862,7 @@ div.login_block { div.backgroundsemitransparent { - background:rgba(255,255,255,0.6); + background:rgba(255, 255, 255, 0.7); padding-left: 10px; padding-right: 10px; } @@ -3090,11 +3090,11 @@ div.tabsElem a { } div.tabBar { color: #; - padding-top: 16px; - padding-left: 16px; - padding-right: 16px; - padding-bottom: 16px; - margin: 0px 0px 16px 0px; + padding-top: 21px; + padding-left: 24px; + padding-right: 24px; + padding-bottom: 18px; + margin: 0px 0px 18px 0px; -webkit-border-radius: 3px; border-radius: 3px; border-right: 1px solid #BBB; @@ -3439,9 +3439,9 @@ tr.liste_titre_filter td.liste_titre { } .liste_titre_create td, .liste_titre_create th, .liste_titre_create .tagtd { - /*border-top-width: 1px; + border-top-width: 1px; border-top-color: rgb(); - border-top-style: solid;*/ + border-top-style: solid; } .liste_titre_add td, .liste_titre_add th, .liste_titre_add .tagtd { @@ -3830,7 +3830,7 @@ div.liste_titre_bydiv, .liste_titre div.tagtr, tr.liste_titre, tr.liste_titre_se { background: rgb(); font-weight: ; - border-bottom: 1px solid #FDFFFF; + /* border-bottom: 1px solid #FDFFFF; */ color: rgb(); font-family: ; @@ -3943,6 +3943,11 @@ tr.liste_sub_total, tr.liste_sub_total td { box-shadow: 2px 2px 5px #CCC !important; } +.boxshadow { + -webkit-box-shadow: 0px 0px 5px #888; + box-shadow: 0px 0px 5px #888; +} + div.tabBar .noborder { -webkit-box-shadow: 0px 0px 0px #f4f4f4 !important; box-shadow: 0px 0px 0px #f4f4f4 !important; @@ -4469,6 +4474,9 @@ div#card-errors { font-size: px !important; } +.ui-dialog.ui-corner-all.ui-widget.ui-widget-content.ui-front.ui-dialog-buttons.ui-draggable { + z-index: 1002 !important; /* Default 101 with jquery, top menu have a z-index of 1000 */ +} /* ============================================================================== */ /* For content of image preview */ diff --git a/htdocs/theme/md/theme_vars.inc.php b/htdocs/theme/md/theme_vars.inc.php index 9e98a863737..fd37b6376dd 100644 --- a/htdocs/theme/md/theme_vars.inc.php +++ b/htdocs/theme/md/theme_vars.inc.php @@ -65,6 +65,9 @@ $colortext = '0,0,0'; $colortextlink = '0,0,120'; $fontsize = '14'; $fontsizesmaller = '11'; +$topMenuFontSize = '1.1em'; +$toolTipBgColor = 'rgba(255, 255, 255, 0.96)'; +$toolTipFontColor = '#333'; // text color $textSuccess = '#28a745'; @@ -83,9 +86,15 @@ $badgeInfo = '#17a2b8'; $badgeDark = '#343a40'; $badgeLight = '#f8f9fa'; +// badge color ajustement for color blind +$colorblind_deuteranopes_badgeSuccess = '#37de5d'; //! text color black +$colorblind_deuteranopes_badgeSuccess_textColor7 = '#000'; +$colorblind_deuteranopes_badgeWarning = '#e4e411'; +$colorblind_deuteranopes_badgeDanger = $badgeDanger; // currently not tested with a color blind people so use default color + /* default color for status : After a quick check, somme status can have oposite function according to objects * So this badges status uses default value according to theme eldy status img -* TODO: use color definition vars above for define badges color status X -> expemple $badgeStatusValidate, $badgeStatusClosed, $badgeStatusActive .... +* TODO: use color definition vars above for define badges color status X -> exemple $badgeStatusValidate, $badgeStatusClosed, $badgeStatusActive .... */ $badgeStatus0 = '#cbd3d3'; $badgeStatus1 = '#bc9526'; @@ -99,3 +108,9 @@ $badgeStatus8 = '#993013'; $badgeStatus9 = '#e7f0f0'; $badgeStatus10 = '#993013'; $badgeStatus11 = '#15a540'; + +// status color ajustement for color blind +$colorblind_deuteranopes_badgeStatus4 = $colorblind_deuteranopes_badgeStatus7 = $colorblind_deuteranopes_badgeSuccess; //! text color black +$colorblind_deuteranopes_badgeStatus_textColor4 = $colorblind_deuteranopes_badgeStatus_textColor7 = '#000'; +$colorblind_deuteranopes_badgeStatus1 = $colorblind_deuteranopes_badgeWarning; +$colorblind_deuteranopes_badgeStatus_textColor1 = '#000'; diff --git a/htdocs/ticket/class/ticket.class.php b/htdocs/ticket/class/ticket.class.php index 89f239db6c6..b3514f5fe0d 100644 --- a/htdocs/ticket/class/ticket.class.php +++ b/htdocs/ticket/class/ticket.class.php @@ -1177,7 +1177,7 @@ class Ticket extends CommonObject } // Cache deja charge - $sql = "SELECT rowid, code, label, use_default, pos, description, public, active"; + $sql = "SELECT rowid, code, label, use_default, pos, description, public, active, force_severity, fk_parent"; $sql .= " FROM ".MAIN_DB_PREFIX."c_ticket_category"; $sql .= " WHERE active > 0"; $sql .= " ORDER BY pos"; @@ -1196,6 +1196,8 @@ class Ticket extends CommonObject $this->cache_category_tickets[$obj->rowid]['pos'] = $obj->pos; $this->cache_category_tickets[$obj->rowid]['public'] = $obj->public; $this->cache_category_tickets[$obj->rowid]['active'] = $obj->active; + $this->cache_category_tickets[$obj->rowid]['force_severity'] = $obj->force_severity; + $this->cache_category_tickets[$obj->rowid]['fk_parent'] = $obj->fk_parent; $i++; } return $num; diff --git a/htdocs/user/agenda_extsites.php b/htdocs/user/agenda_extsites.php index b474bdfc678..928db5449d8 100644 --- a/htdocs/user/agenda_extsites.php +++ b/htdocs/user/agenda_extsites.php @@ -188,7 +188,7 @@ print '
'; // In phone version only show when it is invoice page -if ($mobilepage == "invoice" || $mobilepage == "") { +if (empty($mobilepage) || $mobilepage == "invoice") { print ''; } -if ($conf->global->TAKEPOS_BAR_RESTAURANT) { +if (getDolGlobalString('TAKEPOS_BAR_RESTAURANT')) { $sql = "SELECT floor, label FROM ".MAIN_DB_PREFIX."takepos_floor_tables where rowid=".((int) $place); $resql = $db->query($sql); $obj = $db->fetch_object($resql); @@ -1190,14 +1225,14 @@ if ($conf->global->TAKEPOS_BAR_RESTAURANT) { print $langs->trans("Products"); } print ''.$langs->trans('ReductionShort').''.$langs->trans('Qty').''; print '' . $langs->trans('TotalHTShort') . '
'; // In phone version only show when it is invoice page - if ($mobilepage == "invoice" || $mobilepage == "") { + if (empty($mobilepage) || $mobilepage == "invoice") { print '' . price($invoice->total_ht, 1, '', 1, -1, -1, $conf->currency) . ''; if (!empty($conf->multicurrency->enabled) && $_SESSION["takeposcustomercurrency"] != "" && $conf->currency != $_SESSION["takeposcustomercurrency"]) { //Only show customer currency if multicurrency module is enabled, if currency selected and if this currency selected is not the same as main currency @@ -1213,9 +1248,9 @@ if ($_SESSION["basiclayout"] != 1) { print '
'; print ''.$langs->trans('TotalTTCShort').'
'; // In phone version only show when it is invoice page - if ($mobilepage == "invoice" || $mobilepage == "") { + if (empty($mobilepage) || $mobilepage == "invoice") { print ''.price($invoice->total_ttc, 1, '', 1, -1, -1, $conf->currency).''; - if (!empty($conf->multicurrency->enabled) && $_SESSION["takeposcustomercurrency"] != "" && $conf->currency != $_SESSION["takeposcustomercurrency"]) { + if (!empty($conf->multicurrency->enabled) && !empty($_SESSION["takeposcustomercurrency"]) && $conf->currency != $_SESSION["takeposcustomercurrency"]) { //Only show customer currency if multicurrency module is enabled, if currency selected and if this currency selected is not the same as main currency include_once DOL_DOCUMENT_ROOT.'/multicurrency/class/multicurrency.class.php'; $multicurrency = new MultiCurrency($db); @@ -1231,7 +1266,7 @@ if ($_SESSION["basiclayout"] != 1) { print "
'.vatrate($line->remise_percent, true).''.$line->qty.''.price($line->total_ttc).''; - if ($_SESSION["basiclayout"] == 1) { + if (!empty($_SESSION["basiclayout"]) && $_SESSION["basiclayout"] == 1) { $htmlforlines .= ''.$line->qty." x "; } if (isset($line->product_type)) { @@ -1400,10 +1436,10 @@ if ($placeid > 0) { if (!empty($line->array_options['options_order_notes'])) { $htmlforlines .= "
(".$line->array_options['options_order_notes'].")"; } - if ($_SESSION["basiclayout"] == 1) { + if (!empty($_SESSION["basiclayout"]) && $_SESSION["basiclayout"] == 1) { $htmlforlines .= '
  '; } - if ($_SESSION["basiclayout"] != 1) { + if (empty($_SESSION["basiclayout"]) || $_SESSION["basiclayout"] != 1) { $moreinfo = ''; $moreinfo .= $langs->transcountry("TotalHT", $mysoc->country_code).': '.price($line->total_ht); if ($line->vat_src_code) { @@ -1454,10 +1490,10 @@ if ($placeid > 0) { } $htmlforlines .= ''; $htmlforlines .= price($line->total_ht, 1, '', 1, -1, -1, $conf->currency); - if (!empty($conf->multicurrency->enabled) && $_SESSION["takeposcustomercurrency"] != "" && $conf->currency != $_SESSION["takeposcustomercurrency"]) { + if (!empty($conf->multicurrency->enabled) && !empty($_SESSION["takeposcustomercurrency"]) && $conf->currency != $_SESSION["takeposcustomercurrency"]) { //Only show customer currency if multicurrency module is enabled, if currency selected and if this currency selected is not the same as main currency include_once DOL_DOCUMENT_ROOT.'/multicurrency/class/multicurrency.class.php'; $multicurrency = new MultiCurrency($db); @@ -1468,7 +1504,7 @@ if ($placeid > 0) { } $htmlforlines .= ''; $htmlforlines .= price($line->total_ttc, 1, '', 1, -1, -1, $conf->currency); - if (!empty($conf->multicurrency->enabled) && $_SESSION["takeposcustomercurrency"] != "" && $conf->currency != $_SESSION["takeposcustomercurrency"]) { + if (!empty($conf->multicurrency->enabled) && !empty($_SESSION["takeposcustomercurrency"]) && $conf->currency != $_SESSION["takeposcustomercurrency"]) { //Only show customer currency if multicurrency module is enabled, if currency selected and if this currency selected is not the same as main currency include_once DOL_DOCUMENT_ROOT.'/multicurrency/class/multicurrency.class.php'; $multicurrency = new MultiCurrency($db); @@ -1478,7 +1514,7 @@ if ($placeid > 0) { $htmlforlines .= '
'; print ""; print ""; print ""; -print "'; +print "'; print "'; print ''; print ""; diff --git a/htdocs/user/bank.php b/htdocs/user/bank.php index 0b179653487..0eaf3d533a9 100644 --- a/htdocs/user/bank.php +++ b/htdocs/user/bank.php @@ -366,12 +366,12 @@ if ($action != 'edit' && $action != 'create') { // If not bank account yet, $ac $payment_salary = new PaymentSalary($db); $salary = new Salary($db); - $sql = "SELECT s.rowid as sid, s.ref as sref, s.label, s.datesp, s.dateep, s.paye, SUM(ps.amount) as alreadypaid"; + $sql = "SELECT s.rowid as sid, s.ref as sref, s.label, s.datesp, s.dateep, s.paye, s.amount, SUM(ps.amount) as alreadypaid"; $sql .= " FROM ".MAIN_DB_PREFIX."salary as s"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."payment_salary as ps ON (s.rowid = ps.fk_salary)"; $sql .= " WHERE s.fk_user = ".$object->id; $sql .= " AND s.entity IN (".getEntity('salary').")"; - $sql .= " GROUP BY s.rowid, s.ref, s.label, s.datesp, s.dateep, s.paye"; + $sql .= " GROUP BY s.rowid, s.ref, s.label, s.datesp, s.dateep, s.paye, s.amount"; $sql .= " ORDER BY s.dateep DESC"; $resql = $db->query($sql); @@ -381,7 +381,7 @@ if ($action != 'edit' && $action != 'create') { // If not bank account yet, $ac print '
".$langs->trans("Parameter")."".$langs->trans("Name")."".$langs->trans("ExtSiteUrlAgenda").'
'." (".$langs->trans("Example").': http://yoursite/agenda/agenda.ics)
".$langs->trans("ExtSiteUrlAgenda").'
'." (".$langs->trans("Example").': https://externalcalendar/agenda/agenda.ics)
".$form->textwithpicto($langs->trans("FixTZ"), $langs->trans("FillFixTZOnlyIfRequired"), 1).''.$langs->trans("Color").'
'; print ''; - print ''; print '\n"; - print ''; + print ''; print ''; $i++; } @@ -560,7 +556,7 @@ if ($action != 'edit' && $action != 'create') { // If not bank account yet, $ac print_liste_field_titre("RIB"); print_liste_field_titre("IBAN"); print_liste_field_titre("BIC"); - print_liste_field_titre('', $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'maxwidthsearch '); + print_liste_field_titre('', $_SERVER["PHP_SELF"], "", '', '', '', '', '', 'maxwidthsearch '); print "\n"; if ($account->id > 0) { diff --git a/htdocs/user/card.php b/htdocs/user/card.php index 135e2072fdf..152c39f79ac 100644 --- a/htdocs/user/card.php +++ b/htdocs/user/card.php @@ -1040,6 +1040,7 @@ if ($action == 'create' || $action == 'adduserldap') { // State if (empty($conf->global->USER_DISABLE_STATE)) { print ''; } @@ -1420,10 +1421,12 @@ if ($action == 'create' || $action == 'adduserldap') { if ($object->socid > 0) { $type = $langs->trans("External"); } + print ''; print $type; if ($object->ldap_sid) { print ' ('.$langs->trans("DomainUser").')'; } + print ''; print ''."\n"; // Ldap sid @@ -1448,8 +1451,12 @@ if ($action == 'create' || $action == 'adduserldap') { print ''.$langs->trans("None").''; } else { $huser = new User($db); - $huser->fetch($object->fk_user); - print $huser->getNomUrl(1); + if ($object->fk_user > 0) { + $huser->fetch($object->fk_user); + print $huser->getNomUrl(1); + } else { + print ''.$langs->trans("None").''; + } } print ''; print "\n"; @@ -1533,7 +1540,7 @@ if ($action == 'create' || $action == 'adduserldap') { // Salary print ''; print ''; print "\n"; } @@ -2363,6 +2370,7 @@ if ($action == 'create' || $action == 'adduserldap') { if (empty($conf->global->USER_DISABLE_STATE)) { print ''; print '\n"; @@ -222,8 +223,11 @@ if ($resql) { print ''; } print ''; - print ''; + print ''; print ''; + print ''; print ''; print "\n"; $i++; diff --git a/htdocs/user/hierarchy.php b/htdocs/user/hierarchy.php index 6073ca4c88f..0413fda69b0 100644 --- a/htdocs/user/hierarchy.php +++ b/htdocs/user/hierarchy.php @@ -42,9 +42,11 @@ if ($user->socid > 0) { $socid = $user->socid; } -$sall = trim((GETPOST('search_all', 'alphanohtml') != '') ?GETPOST('search_all', 'alphanohtml') : GETPOST('sall', 'alphanohtml')); -$search_user = GETPOST('search_user', 'alpha'); $optioncss = GETPOST('optioncss', 'alpha'); +$contextpage = GETPOST('optioncss', 'aZ09'); +$sortfield = GETPOST('sortfield', 'aZ09comma'); +$sortorder = GETPOST('sortorder', 'aZ09comma'); +$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); // Load mode employee $mode = GETPOST("mode", 'alpha'); @@ -94,7 +96,7 @@ if (!is_array($user_arbo) && $user_arbo < 0) { $data[] = array('rowid'=>0, 'fk_menu'=>-1, 'title'=>"racine", 'mainmenu'=>'', 'leftmenu'=>'', 'fk_mainmenu'=>'', 'fk_leftmenu'=>''); foreach ($fulltree as $key => $val) { $userstatic->id = $val['id']; - $userstatic->ref = $val['label']; + $userstatic->ref = $val['id']; $userstatic->login = $val['login']; $userstatic->firstname = $val['firstname']; $userstatic->lastname = $val['lastname']; @@ -146,6 +148,8 @@ if (!is_array($user_arbo) && $user_arbo < 0) { $newcardbutton = ''; $newcardbutton .= dolGetButtonTitle($langs->trans('NewUser'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/user/card.php?action=create'.($mode == 'employee' ? '&employee=1' : '').'&leftmenu=', '', $canadduser); + $morehtmlright = ''; + $morehtmlright .= dolGetButtonTitle($langs->trans("List"), '', 'fa fa-list paddingleft imgforviewmode', DOL_URL_ROOT.'/user/list.php'.(($search_statut != '' && $search_statut >= 0) ? '?search_statut='.$search_statut : '')); $param = array('morecss'=>'marginleftonly btnTitleSelected'); $morehtmlright .= dolGetButtonTitle($langs->trans("HierarchicView"), '', 'fa fa-stream paddingleft imgforviewmode', DOL_URL_ROOT.'/user/hierarchy.php'.(($search_statut != '' && $search_statut >= 0) ? '?search_statut='.$search_statut : ''), '', 1, $param); diff --git a/htdocs/user/notify/card.php b/htdocs/user/notify/card.php index 978c2d990b7..3acad0ac0c3 100644 --- a/htdocs/user/notify/card.php +++ b/htdocs/user/notify/card.php @@ -437,7 +437,7 @@ if ($result > 0) { } print '
'; - if ($optioncss != '') { + if (isset($optioncss) && $optioncss != '') { print ''; } print ''; diff --git a/htdocs/user/param_ihm.php b/htdocs/user/param_ihm.php index b492e31177f..72f9b075be9 100644 --- a/htdocs/user/param_ihm.php +++ b/htdocs/user/param_ihm.php @@ -370,10 +370,12 @@ if ($action == 'edit') { print empty($dolibarr_main_demo) ? '' : ' disabled="disabled"'; // Disabled for demo print '> '.$langs->trans("UsePersonalValue").''; print '
'; diff --git a/htdocs/user/passwordforgotten.php b/htdocs/user/passwordforgotten.php index cb149f1e481..32fa93cb8a6 100644 --- a/htdocs/user/passwordforgotten.php +++ b/htdocs/user/passwordforgotten.php @@ -87,14 +87,14 @@ if (empty($reshook)) { // Validate new password if ($action == 'validatenewpassword' && $username && $passworduidhash) { $edituser = new User($db); - $result = $edituser->fetch('', $_GET["username"]); + $result = $edituser->fetch('', $username); if ($result < 0) { $message = '
'.dol_escape_htmltag($langs->trans("ErrorLoginDoesNotExists", $username)).'
'; } else { global $dolibarr_main_instance_unique_id; //print $edituser->pass_temp.'-'.$edituser->id.'-'.$dolibarr_main_instance_unique_id.' '.$passworduidhash; - if (dol_verifyHash($edituser->pass_temp.'-'.$edituser->id.'-'.$dolibarr_main_instance_unique_id, $passworduidhash)) { + if ($edituser->pass_temp && dol_verifyHash($edituser->pass_temp.'-'.$edituser->id.'-'.$dolibarr_main_instance_unique_id, $passworduidhash)) { // Clear session unset($_SESSION['dol_login']); $_SESSION['dol_loginmesg'] = $langs->trans('NewPasswordValidated'); // Save message for the session page @@ -128,7 +128,7 @@ if (empty($reshook)) { } if ($result <= 0 && $edituser->error == 'USERNOTFOUND') { - $message = '
'; - } elseif (is_array($permsgroupbyentity[$entity])) { + } elseif (isset($permsgroupbyentity[$entity]) && is_array($permsgroupbyentity[$entity])) { if (in_array($obj->id, $permsgroupbyentity[$entity])) { // Permission granted by group if ($caneditperms) { print '
'; + print ''; print ''; @@ -389,16 +389,17 @@ if ($action != 'edit' && $action != 'create') { // If not bank account yet, $ac while ($i < $num && $i < $MAXLIST) { $objp = $db->fetch_object($resql); - $payment_salary->id = $objp->rowid; - $payment_salary->ref = $objp->ref; - $payment_salary->datep = $db->jdate($objp->datep); - $salary->id = $objp->sid; $salary->ref = $objp->sref ? $objp->sref : $objp->sid; $salary->label = $objp->label; $salary->datesp = $db->jdate($objp->datesp); $salary->dateep = $db->jdate($objp->dateep); $salary->paye = $objp->paye; + $salary->amount = $objp->amount; + + $payment_salary->id = $objp->rowid; + $payment_salary->ref = $objp->ref; + $payment_salary->datep = $db->jdate($objp->datep); print ''; print '\n"; print '\n"; - //print ''; + print ''; print ''; print ''; @@ -416,7 +417,7 @@ if ($action != 'edit' && $action != 'create') { // If not bank account yet, $ac $db->free($resql); if ($num <= 0) { - print '
'.$langs->trans("LastSalaries", ($num <= $MAXLIST ? "" : $MAXLIST)).''.$langs->trans("AllSalaries").''.$num.''; print '
'.$langs->trans("LastSalaries", ($num <= $MAXLIST ? "" : $MAXLIST)).''.$langs->trans("AllSalaries").''.$num.'
'; @@ -407,7 +408,7 @@ if ($action != 'edit' && $action != 'create') { // If not bank account yet, $ac print ''.dol_print_date($db->jdate($objp->datesp), 'day')."'.dol_print_date($db->jdate($objp->dateep), 'day')."'.price($objp->amount).''.price($objp->amount).''.$salary->getLibStatut(5, $objp->alreadypaid).'
'.$langs->trans("None").''; + print ''.$langs->trans("None").''; } print "
"; } else { @@ -424,9 +425,7 @@ if ($action != 'edit' && $action != 'create') { // If not bank account yet, $ac } } - /* - * Last holidays - */ + // Latest leave requests if (!empty($conf->holiday->enabled) && ($user->rights->holiday->readall || ($user->rights->holiday->read && $object->id == $user->id)) ) { @@ -478,9 +477,7 @@ if ($action != 'edit' && $action != 'create') { // If not bank account yet, $ac } } - /* - * Last expense report - */ + // Latest expense report if (!empty($conf->expensereport->enabled) && ($user->rights->expensereport->readall || ($user->rights->expensereport->lire && $object->id == $user->id)) ) { @@ -509,14 +506,13 @@ if ($action != 'edit' && $action != 'create') { // If not bank account yet, $ac $exp->id = $objp->rowid; $exp->ref = $objp->ref; - $exp->fk_type = $objp->fk_type; $exp->status = $objp->status; print '
'; print $exp->getNomUrl(1); print ''.dol_print_date($db->jdate($objp->date_debut), 'day')."'.price($objp->total_ttc).''.price($objp->total_ttc).''.$exp->LibStatut($objp->status, 5).'
'.$form->editfieldkey('State', 'state_id', '', $object, 0).''; + print img_picto('', 'state', 'class="pictofixedwidth"'); print $formcompany->select_state($object->state_id, $object->country_code, 'state_id'); print '
'.$langs->trans("Salary").''; - print ($object->salary != '' ? img_picto('', 'salary', 'class="pictofixedwidth paddingright"').price($object->salary, '', $langs, 1, -1, -1, $conf->currency) : ''); + print ($object->salary != '' ? img_picto('', 'salary', 'class="pictofixedwidth paddingright"').''.price($object->salary, '', $langs, 1, -1, -1, $conf->currency) : '').''; print '
'.$form->editfieldkey('State', 'state_id', '', $object, 0).''; if ($caneditfield) { + print img_picto('', 'state', 'class="pictofixedwidth"'); print $formcompany->select_state($object->state_id, $object->country_code, 'state_id'); } else { print $object->state_label; diff --git a/htdocs/user/class/user.class.php b/htdocs/user/class/user.class.php index 37ce6544cd0..74137537e74 100644 --- a/htdocs/user/class/user.class.php +++ b/htdocs/user/class/user.class.php @@ -442,7 +442,7 @@ class User extends CommonObject if ($entity < 0) { if ((empty($conf->multicompany->enabled) || empty($conf->global->MULTICOMPANY_TRANSVERSE_MODE)) && (!empty($user->entity))) { - $sql .= " WHERE u.entity IN (0, ".$this->db->sanitize($conf->entity).")"; + $sql .= " WHERE u.entity IN (0, ".((int) $conf->entity).")"; } else { $sql .= " WHERE u.entity IS NOT NULL"; // multicompany is on in transverse mode or user making fetch is on entity 0, so user is allowed to fetch anywhere into database } @@ -451,7 +451,7 @@ class User extends CommonObject if (!empty($conf->multicompany->enabled) && !empty($conf->global->MULTICOMPANY_TRANSVERSE_MODE)) { $sql .= " WHERE u.entity IS NOT NULL"; // multicompany is on in transverse mode or user making fetch is on entity 0, so user is allowed to fetch anywhere into database } else { - $sql .= " WHERE u.entity IN (0, ".$this->db->sanitize(($entity != '' && $entity >= 0) ? $entity : $conf->entity).")"; // search in entity provided in parameter + $sql .= " WHERE u.entity IN (0, ".((int) (($entity != '' && $entity >= 0) ? $entity : $conf->entity)).")"; // search in entity provided in parameter } } @@ -2109,8 +2109,8 @@ class User extends CommonObject $outputlangs = new Translate("", $conf); if (isset($this->conf->MAIN_LANG_DEFAULT) - && $this->conf->MAIN_LANG_DEFAULT != 'auto') { // If user has defined its own language (rare because in most cases, auto is used) - $outputlangs->getDefaultLang($this->conf->MAIN_LANG_DEFAULT); + && $this->conf->MAIN_LANG_DEFAULT != 'auto') { // If user has defined its own language (rare because in most cases, auto is used) + $outputlangs->getDefaultLang($this->conf->MAIN_LANG_DEFAULT); } if ($this->conf->MAIN_LANG_DEFAULT) { @@ -2184,7 +2184,7 @@ class User extends CommonObject '', '', $trackid - ); + ); if ($mailfile->sendfile()) { return 1; @@ -3222,7 +3222,7 @@ class User extends CommonObject foreach ($this->users as $key => $val) { if (preg_match('/'.$keyfilter1.'/', $val['fullpath']) || preg_match('/'.$keyfilter2.'/', $val['fullpath']) || preg_match('/'.$keyfilter3.'/', $val['fullpath']) || preg_match('/'.$keyfilter4.'/', $val['fullpath'])) { - unset($this->users[$key]); + unset($this->users[$key]); } } } @@ -3298,7 +3298,7 @@ class User extends CommonObject $i = 0; $cursor_user = $id_user; $useridfound = array($id_user); - while (!empty($this->parentof[$cursor_user])) { + while (!empty($this->parentof[$cursor_user]) && !empty($this->users[$this->parentof[$cursor_user]])) { if (in_array($this->parentof[$cursor_user], $useridfound)) { dol_syslog("The hierarchy of user has a recursive loop", LOG_WARNING); return -1; // Should not happen. Protection against looping hierarchy diff --git a/htdocs/user/class/usergroup.class.php b/htdocs/user/class/usergroup.class.php index 083b1bcc18c..1f0bb2891c6 100644 --- a/htdocs/user/class/usergroup.class.php +++ b/htdocs/user/class/usergroup.class.php @@ -711,7 +711,7 @@ class UserGroup extends CommonObject * Use this->id,this->lastname, this->firstname * * @param int $withpicto Include picto in link (0=No picto, 1=Include picto into link, 2=Only picto, -1=Include photo into link, -2=Only picto photo, -3=Only photo very small) - * @param string $option On what the link point to ('nolink', ) + * @param string $option On what the link point to ('nolink', 'permissions') * @param integer $notooltip 1=Disable tooltip on picto and name * @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 @@ -730,12 +730,16 @@ class UserGroup extends CommonObject $result = ''; $label = ''; $label .= '
'; - $label .= ''.$langs->trans("Group").'
'; + $label .= img_picto('', 'group').' '.$langs->trans("Group").'
'; $label .= ''.$langs->trans('Name').': '.$this->name; $label .= '
'.$langs->trans("Description").': '.$this->note; $label .= '
'; - $url = DOL_URL_ROOT.'/user/group/card.php?id='.$this->id; + if ($option == 'permissions') { + $url = DOL_URL_ROOT.'/user/group/perms.php?id='.$this->id; + } else { + $url = DOL_URL_ROOT.'/user/group/card.php?id='.$this->id; + } if ($option != 'nolink') { // Add param to save lastsearch_values or not diff --git a/htdocs/user/clicktodial.php b/htdocs/user/clicktodial.php index 0a9a65a2852..79450f2d811 100644 --- a/htdocs/user/clicktodial.php +++ b/htdocs/user/clicktodial.php @@ -150,7 +150,9 @@ if ($id > 0) { if (!empty($user->admin)) { print '
ClickToDial URL'; - $url = $conf->global->CLICKTODIAL_URL; + if (!empty($conf->global->CLICKTODIAL_URL)) { + $url = $conf->global->CLICKTODIAL_URL; + } if (!empty($object->clicktodial_url)) { $url = $object->clicktodial_url; } diff --git a/htdocs/user/group/card.php b/htdocs/user/group/card.php index 0e60e70e42a..5c1e16e4a0c 100644 --- a/htdocs/user/group/card.php +++ b/htdocs/user/group/card.php @@ -428,6 +428,7 @@ if ($action == 'create') { * Group members */ + print '
'; // You can use div-table-responsive-no-min if you dont need reserved height for your table print ''; print ''; print ''; @@ -440,7 +441,7 @@ if ($action == 'create') { if (!empty($object->members)) { foreach ($object->members as $useringroup) { print ''; - print ''; } print "
'.$langs->trans("Login").'
'; + print ''; print $useringroup->getNomUrl(-1, '', 0, 0, 24, 0, 'login'); if ($useringroup->admin && !$useringroup->entity) { print img_picto($langs->trans("SuperAdministrator"), 'redstar'); @@ -465,6 +466,7 @@ if ($action == 'create') { print '
'.$langs->trans("None").'
"; + print '
'; } print "
"; diff --git a/htdocs/user/group/list.php b/htdocs/user/group/list.php index 302d697c563..04fa0035418 100644 --- a/htdocs/user/group/list.php +++ b/htdocs/user/group/list.php @@ -35,6 +35,7 @@ $sall = trim((GETPOST('search_all', 'alphanohtml') != '') ?GETPOST('search_all', $search_group = GETPOST('search_group'); $optioncss = GETPOST('optioncss', 'alpha'); $massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists) +$contextpage = GETPOST('optioncss', 'aZ09'); // Defini si peux lire/modifier utilisateurs et permisssions $caneditperms = ($user->admin || $user->rights->user->user->creer); @@ -122,7 +123,7 @@ if (empty($reshook)) { llxHeader(); -$sql = "SELECT g.rowid, g.nom as name, g.note, g.entity, g.datec, COUNT(DISTINCT ugu.fk_user) as nb, COUNT(DISTINCT ugr.fk_id) as nbpermissions"; +$sql = "SELECT g.rowid, g.nom as name, g.note, g.entity, g.datec, g.tms as datem, COUNT(DISTINCT ugu.fk_user) as nb, COUNT(DISTINCT ugr.fk_id) as nbpermissions"; $sql .= " FROM ".MAIN_DB_PREFIX."usergroup as g"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."usergroup_user as ugu ON ugu.fk_usergroup = g.rowid"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."usergroup_rights as ugr ON ugr.fk_usergroup = g.rowid"; @@ -137,7 +138,7 @@ if (!empty($search_group)) { if ($sall) { $sql .= natural_search(array("g.nom", "g.note"), $sall); } -$sql .= " GROUP BY g.rowid, g.nom, g.note, g.entity, g.datec"; +$sql .= " GROUP BY g.rowid, g.nom, g.note, g.entity, g.datec, g.tms"; $sql .= $db->order($sortfield, $sortorder); $resql = $db->query($sql); @@ -168,7 +169,6 @@ if ($resql) { print ''; print ''; print ''; - print ''; print ''; print_barre_liste($text, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, "", $num, $nbtotalofrecords, 'object_group', 0, $newcardbutton, '', $limit, 0, 0, 1); @@ -197,6 +197,7 @@ if ($resql) { print_liste_field_titre("NbOfUsers", $_SERVER["PHP_SELF"], "nb", $param, "", '', $sortfield, $sortorder, 'center '); print_liste_field_titre("NbOfPermissions", $_SERVER["PHP_SELF"], "nbpermissions", $param, "", '', $sortfield, $sortorder, 'center '); print_liste_field_titre("DateCreationShort", $_SERVER["PHP_SELF"], "g.datec", $param, "", '', $sortfield, $sortorder, 'center '); + print_liste_field_titre("DateLastModification", $_SERVER["PHP_SELF"], "g.tms", $param, "", '', $sortfield, $sortorder, 'center '); print_liste_field_titre("", $_SERVER["PHP_SELF"]); print "
'.$mc->label.''.$obj->nb.''.$obj->nbpermissions.''; + print ''.$obj->nbpermissions.''; + print ''.dol_print_date($db->jdate($obj->datec), "dayhour").''.dol_print_date($db->jdate($obj->datem), "dayhour").'
'; - if (!empty($tmparray[$object->conf->MAIN_LANDING_PAGE])) { - print $langs->trans($tmparray[$object->conf->MAIN_LANDING_PAGE]); - } else { - print $object->conf->MAIN_LANDING_PAGE; + if (!empty($object->conf->MAIN_LANDING_PAGE)) { + if (!empty($tmparray[$object->conf->MAIN_LANDING_PAGE])) { + print $langs->trans($tmparray[$object->conf->MAIN_LANDING_PAGE]); + } else { + print $object->conf->MAIN_LANDING_PAGE; + } } //print $form->selectarray('MAIN_LANDING_PAGE', $tmparray, (! empty($object->conf->MAIN_LANDING_PAGE)?$object->conf->MAIN_LANDING_PAGE:''), 0, 0, 0, '', 1); print '
'; print img_picto($langs->trans("Active"), 'tick'); print ''; diff --git a/htdocs/workstation/workstation_note.php b/htdocs/workstation/workstation_note.php index 18fa87b5ea6..7e1b765bf82 100755 --- a/htdocs/workstation/workstation_note.php +++ b/htdocs/workstation/workstation_note.php @@ -68,8 +68,13 @@ restrictedArea($user, $object->element, $object->id, $object->table_element, 'wo /* * Actions */ - -include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once +$reshook = $hookmanager->executeHooks('doActions', array(), $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) { + setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); +} +if (empty($reshook)) { + include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once +} /* diff --git a/scripts/accountancy/export-thirdpartyaccount.php b/scripts/accountancy/export-thirdpartyaccount.php index 6df1f5ca4b8..46dd481566d 100755 --- a/scripts/accountancy/export-thirdpartyaccount.php +++ b/scripts/accountancy/export-thirdpartyaccount.php @@ -96,9 +96,12 @@ if (empty($date_start) || empty($date_end)) { // We define date_start and date_e $date_start = dol_get_first_day($year_start, 10, false); $date_end = dol_get_last_day($year_start, 12, false); } -} else { } +/* + * Main + */ + llxHeader(); $form = new Form($db); @@ -186,9 +189,6 @@ if ($resql) { $i++; } - /* - * View - */ $thirdpartystatic = new Societe($db); diff --git a/scripts/company/sync_contacts_dolibarr2ldap.php b/scripts/company/sync_contacts_dolibarr2ldap.php index 53ec46ddcd8..e161a813ec7 100755 --- a/scripts/company/sync_contacts_dolibarr2ldap.php +++ b/scripts/company/sync_contacts_dolibarr2ldap.php @@ -69,6 +69,11 @@ foreach ($argv as $key => $val) { $now = $argv[1]; +if (!empty($dolibarr_main_db_readonly)) { + print "Error: instance in read-onyl mode\n"; + exit(-1); +} + print "Mails sending disabled (useless in batch mode)\n"; $conf->global->MAIN_DISABLE_ALL_MAILS = 1; // On bloque les mails print "\n"; diff --git a/scripts/cron/cron_run_jobs.php b/scripts/cron/cron_run_jobs.php index 80f586a6788..a4e015745ca 100755 --- a/scripts/cron/cron_run_jobs.php +++ b/scripts/cron/cron_run_jobs.php @@ -108,6 +108,11 @@ if ($key != $conf->global->CRON_KEY) { exit(-1); } +if (!empty($dolibarr_main_db_readonly)) { + print "Error: instance in read-only mode\n"; + exit(-1); +} + // If param userlogin is reserved word 'firstadmin' if ($userlogin == 'firstadmin') { $sql = 'SELECT login, entity from '.MAIN_DB_PREFIX.'user WHERE admin = 1 and statut = 1 ORDER BY entity LIMIT 1'; diff --git a/scripts/emailings/mailing-send.php b/scripts/emailings/mailing-send.php index 0d59a1b5db5..876895d7c87 100755 --- a/scripts/emailings/mailing-send.php +++ b/scripts/emailings/mailing-send.php @@ -86,6 +86,11 @@ if (!empty($conf->global->MAILING_DELAY)) { if ($conf->global->MAILING_LIMIT_SENDBYCLI == '-1') { } +if (!empty($dolibarr_main_db_readonly)) { + print "Error: instance in read-only mode\n"; + exit(-1); +} + $user = new User($db); // for signature, we use user send as parameter if (!empty($login)) { diff --git a/scripts/emailings/reset-invalid-emails.php b/scripts/emailings/reset-invalid-emails.php index 6eb31abe995..0e7fdb4e6bf 100755 --- a/scripts/emailings/reset-invalid-emails.php +++ b/scripts/emailings/reset-invalid-emails.php @@ -57,6 +57,7 @@ require_once DOL_DOCUMENT_ROOT."/comm/mailing/class/mailing.class.php"; $version = DOL_VERSION; $error = 0; + /* * Main */ @@ -71,6 +72,11 @@ if (!in_array($type, array('all', 'thirdparties', 'contacts', 'users', 'members' exit(-1); } +if (!empty($dolibarr_main_db_readonly)) { + print "Error: instance in read-onyl mode\n"; + exit(-1); +} + $db->begin(); diff --git a/scripts/invoices/email_unpaid_invoices_to_customers.php b/scripts/invoices/email_unpaid_invoices_to_customers.php index 41c84ee4d41..4657c16bd65 100755 --- a/scripts/invoices/email_unpaid_invoices_to_customers.php +++ b/scripts/invoices/email_unpaid_invoices_to_customers.php @@ -80,6 +80,11 @@ if ($mode != 'confirm') { $conf->global->MAIN_DISABLE_ALL_MAILS = 1; } +if (!empty($dolibarr_main_db_readonly)) { + print "Error: instance in read-onyl mode\n"; + exit(-1); +} + $sql = "SELECT f.ref, f.total_ttc, f.date_lim_reglement as due_date,"; $sql .= " s.rowid as sid, s.nom as name, s.email, s.default_lang"; if ($targettype == 'contacts') { diff --git a/scripts/invoices/email_unpaid_invoices_to_representatives.php b/scripts/invoices/email_unpaid_invoices_to_representatives.php index 3cc9ad1a0eb..606ac32ca66 100755 --- a/scripts/invoices/email_unpaid_invoices_to_representatives.php +++ b/scripts/invoices/email_unpaid_invoices_to_representatives.php @@ -76,6 +76,11 @@ if ($mode != 'confirm') { $conf->global->MAIN_DISABLE_ALL_MAILS = 1; } +if (!empty($dolibarr_main_db_readonly)) { + print "Error: instance in read-onyl mode\n"; + exit(-1); +} + $sql = "SELECT f.ref, f.total_ttc, f.date_lim_reglement as due_date, s.nom as name, s.email, s.default_lang,"; $sql .= " u.rowid as uid, u.lastname, u.firstname, u.email, u.lang"; $sql .= " FROM ".MAIN_DB_PREFIX."facture as f"; diff --git a/scripts/invoices/rebuild_merge_pdf.php b/scripts/invoices/rebuild_merge_pdf.php index 309de5fe4bd..b19398eda50 100755 --- a/scripts/invoices/rebuild_merge_pdf.php +++ b/scripts/invoices/rebuild_merge_pdf.php @@ -52,6 +52,7 @@ $langs->load("main"); $version = DOL_VERSION; $error = 0; + /* * Main */ @@ -66,6 +67,11 @@ if (!isset($argv[1])) { exit(-1); } +if (!empty($dolibarr_main_db_readonly)) { + print "Error: instance in read-onyl mode\n"; + exit(-1); +} + $diroutputpdf = $conf->facture->dir_output.'/temp'; $newlangid = 'en_EN'; // To force a new lang id $filter = array(); diff --git a/scripts/members/sync_members_dolibarr2ldap.php b/scripts/members/sync_members_dolibarr2ldap.php index 4ecbe2e9b08..66c245cf3eb 100755 --- a/scripts/members/sync_members_dolibarr2ldap.php +++ b/scripts/members/sync_members_dolibarr2ldap.php @@ -68,6 +68,11 @@ foreach ($argv as $key => $val) { } } +if (!empty($dolibarr_main_db_readonly)) { + print "Error: instance in read-onyl mode\n"; + exit(-1); +} + $now = $argv[1]; print "Mails sending disabled (useless in batch mode)\n"; diff --git a/scripts/members/sync_members_ldap2dolibarr.php b/scripts/members/sync_members_ldap2dolibarr.php index be312ec1932..b40a267d62e 100755 --- a/scripts/members/sync_members_ldap2dolibarr.php +++ b/scripts/members/sync_members_ldap2dolibarr.php @@ -146,6 +146,11 @@ if ($typeid <= 0) { exit(-2); } +if (!empty($dolibarr_main_db_readonly)) { + print "Error: instance in read-onyl mode\n"; + exit(-1); +} + if (!$confirmed) { print "Hit Enter to continue or CTRL+C to stop...\n"; $input = trim(fgets(STDIN)); diff --git a/scripts/members/sync_members_types_dolibarr2ldap.php b/scripts/members/sync_members_types_dolibarr2ldap.php index cec998abda5..3d592673296 100755 --- a/scripts/members/sync_members_types_dolibarr2ldap.php +++ b/scripts/members/sync_members_types_dolibarr2ldap.php @@ -70,6 +70,12 @@ dol_syslog($script_file." launched with arg ".join(',', $argv)); * } */ +if (!empty($dolibarr_main_db_readonly)) { + print "Error: instance in read-onyl mode\n"; + exit(-1); +} + + $sql = "SELECT rowid"; $sql .= " FROM ".MAIN_DB_PREFIX."adherent_type"; diff --git a/scripts/members/sync_members_types_ldap2dolibarr.php b/scripts/members/sync_members_types_ldap2dolibarr.php index 9aea20fb209..12a83633725 100755 --- a/scripts/members/sync_members_types_ldap2dolibarr.php +++ b/scripts/members/sync_members_types_ldap2dolibarr.php @@ -88,6 +88,11 @@ foreach ($argv as $key => $val) { } } +if (!empty($dolibarr_main_db_readonly)) { + print "Error: instance in read-onyl mode\n"; + exit(-1); +} + print "Mails sending disabled (useless in batch mode)\n"; $conf->global->MAIN_DISABLE_ALL_MAILS = 1; // On bloque les mails print "\n"; diff --git a/scripts/website/migrate-news-joomla2dolibarr.php b/scripts/website/migrate-news-joomla2dolibarr.php index 605f982bd16..bb02274a6a3 100755 --- a/scripts/website/migrate-news-joomla2dolibarr.php +++ b/scripts/website/migrate-news-joomla2dolibarr.php @@ -63,8 +63,18 @@ include_once DOL_DOCUMENT_ROOT.'/website/class/website.class.php'; include_once DOL_DOCUMENT_ROOT.'/website/class/websitepage.class.php'; include_once DOL_DOCUMENT_ROOT.'/core/lib/website2.lib.php'; + +/* + * Main + */ + $langs->load('main'); +if (!empty($dolibarr_main_db_readonly)) { + print "Error: instance in read-onyl mode\n"; + exit(-1); +} + $joomlaserverinfoarray = preg_split('/(:|@|\/)/', $joomlaserverinfo); $joomlalogin = $joomlaserverinfoarray[0]; $joomlapass = $joomlaserverinfoarray[1]; diff --git a/scripts/website/regenerate-pages.php b/scripts/website/regenerate-pages.php index 46b9283a4cf..b37e17bf78a 100755 --- a/scripts/website/regenerate-pages.php +++ b/scripts/website/regenerate-pages.php @@ -58,8 +58,18 @@ include_once DOL_DOCUMENT_ROOT.'/website/class/website.class.php'; include_once DOL_DOCUMENT_ROOT.'/website/class/websitepage.class.php'; include_once DOL_DOCUMENT_ROOT.'/core/lib/website2.lib.php'; + +/* + * Main + */ + $langs->load('main'); +if (!empty($dolibarr_main_db_readonly)) { + print "Error: instance in read-onyl mode\n"; + exit(-1); +} + $website = new Website($db); $result = $website->fetch(0, $websiteref); if ($result <= 0) { diff --git a/test/phpunit/FormAdminTest.php b/test/phpunit/FormAdminTest.php index 79019e1e7ed..7217f3b57e2 100644 --- a/test/phpunit/FormAdminTest.php +++ b/test/phpunit/FormAdminTest.php @@ -139,7 +139,7 @@ class FormAdminTest extends PHPUnit\Framework\TestCase $db=$this->savdb; $localobject=new FormAdmin($this->savdb); - $result=$localobject->select_paper_format('', 'paperformat_id', 'A4'); + $result=$localobject->select_paper_format('', 'paperformat_id', 'A4', 0, 1); $this->assertEquals($result, ''); print __METHOD__." result=".$result."\n"; diff --git a/test/phpunit/SecurityTest.php b/test/phpunit/SecurityTest.php index 08d4ec88703..44b391148f5 100644 --- a/test/phpunit/SecurityTest.php +++ b/test/phpunit/SecurityTest.php @@ -321,6 +321,10 @@ class SecurityTest extends PHPUnit\Framework\TestCase $test="XSS"; $result=testSqlAndScriptInject($test, 0); $this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on testSqlAndScriptInject lll'); + + $test="Text with ' encoded with the numeric html entity converted into text entity ' (like when submited by CKEditor)"; + $result=testSqlAndScriptInject($test, 0); // result must be 0 + $this->assertEquals(0, $result, 'Error on testSqlAndScriptInject mmm'); } /** @@ -336,6 +340,10 @@ class SecurityTest extends PHPUnit\Framework\TestCase $langs=$this->savlangs; $db=$this->savdb; + // Force default mode + $conf->global->MAIN_RESTRICTHTML_ONLY_VALID_HTML = 0; + $conf->global->MAIN_RESTRICTHTML_REMOVE_ALSO_BAD_ATTRIBUTES = 0; + $_COOKIE["id"]=111; $_GET["param1"]="222"; $_POST["param1"]="333"; @@ -358,6 +366,8 @@ class SecurityTest extends PHPUnit\Framework\TestCase $_POST["param12"]='aaa'; $_POST["param13"]='n n > < " XSS'; $_POST["param13b"]='n n > < " XSS'; + $_POST["param14"]="Text with ' encoded with the numeric html entity converted into text entity ' (like when submited by CKEditor)"; + $_POST["param15"]=" src=>0xbeefed"; //$_POST["param13"]='javascript%26colon%26%23x3B%3Balert(1)'; //$_POST["param14"]='javascripT&javascript#x3a alert(1)'; @@ -475,7 +485,7 @@ class SecurityTest extends PHPUnit\Framework\TestCase // Test with restricthtml we must remove html open/close tag and content but not htmlentities (we can decode html entities for ascii chars like n) $result=GETPOST("param6", 'restricthtml'); - print __METHOD__." result=".$result."\n"; + print __METHOD__." result param6=".$result."\n"; $this->assertEquals('">', $result); $result=GETPOST("param7", 'restricthtml'); @@ -494,6 +504,33 @@ class SecurityTest extends PHPUnit\Framework\TestCase print __METHOD__." result=".$result."\n"; $this->assertEquals('n n > < " XSS', $result, 'Test 13b that HTML entities are decoded with restricthtml, but only for common alpha chars'); + $result=GETPOST("param14", 'restricthtml'); + print __METHOD__." result=".$result."\n"; + $this->assertEquals("Text with ' encoded with the numeric html entity converted into text entity ' (like when submited by CKEditor)", $result, 'Test 14'); + + $result=GETPOST("param15", 'restricthtml'); // src=>0xbeefed + print __METHOD__." result=".$result."\n"; + $this->assertEquals("0xbeefed", $result, 'Test 15a'); // The GETPOST return a harmull string + + // Test with restricthtml + MAIN_RESTRICTHTML_REMOVE_ALSO_BAD_ATTRIBUTES to test disabling of bad atrributes + $conf->global->MAIN_RESTRICTHTML_ONLY_VALID_HTML = 1; + + $result=GETPOST("param15", 'restricthtml'); + print __METHOD__." result=".$result."\n"; + $this->assertEquals('InvalidHTMLString', $result, 'Test 15b'); + + unset($conf->global->MAIN_RESTRICTHTML_ONLY_VALID_HTML); + + // Test with restricthtml + MAIN_RESTRICTHTML_REMOVE_ALSO_BAD_ATTRIBUTES to test disabling of bad atrributes + $conf->global->MAIN_RESTRICTHTML_REMOVE_ALSO_BAD_ATTRIBUTES = 1; + + $result=GETPOST("param15", 'restricthtml'); + print __METHOD__." result=".$result."\n"; + $this->assertEquals('0xbeefed', $result, 'Test 15b'); + + unset($conf->global->MAIN_RESTRICTHTML_REMOVE_ALSO_BAD_ATTRIBUTES); + + // Special test for GETPOST of backtopage, backtolist or backtourl parameter $_POST["backtopage"]='//www.google.com'; @@ -789,8 +826,8 @@ class SecurityTest extends PHPUnit\Framework\TestCase $result=dol_sanitizeFileName('bad file | evilaction'); $this->assertEquals('bad file _ evilaction', $result); - $result=dol_sanitizeFileName('bad file --evilparam'); - $this->assertEquals('bad file _evilparam', $result); + $result=dol_sanitizeFileName('bad file -evilparam --evilparam ---evilparam ----evilparam'); + $this->assertEquals('bad file _evilparam _evilparam _evilparam _evilparam', $result); } /**