From ad485b55b6015b4502bf25277fd7a385bf4c7f39 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Sun, 10 Mar 2019 20:01:39 +0100 Subject: [PATCH 001/828] NEW: Add category to bank transaction in various payment --- .../bank/class/paymentvarious.class.php | 5 +- htdocs/compta/bank/various_payment/card.php | 89 ++++++++++++------- 2 files changed, 59 insertions(+), 35 deletions(-) diff --git a/htdocs/compta/bank/class/paymentvarious.class.php b/htdocs/compta/bank/class/paymentvarious.class.php index 5a7ac205fe5..fad76c45d1b 100644 --- a/htdocs/compta/bank/class/paymentvarious.class.php +++ b/htdocs/compta/bank/class/paymentvarious.class.php @@ -63,6 +63,7 @@ class PaymentVarious extends CommonObject public $amount; public $type_payment; public $num_payment; + public $category_transaction; /** * @var string various payments label @@ -414,13 +415,13 @@ class PaymentVarious extends CommonObject $sign=1; if ($this->sens == '0') $sign=-1; - $bank_line_id = $acc->addline( + $bank_line_id = $acc->addline( $this->datep, $this->type_payment, $this->label, $sign * abs($this->amount), $this->num_payment, - '', + ($category_transaction > 0 ? $category_transaction : 0), $user ); diff --git a/htdocs/compta/bank/various_payment/card.php b/htdocs/compta/bank/various_payment/card.php index a1c1d8ae349..176fea7e8db 100644 --- a/htdocs/compta/bank/various_payment/card.php +++ b/htdocs/compta/bank/various_payment/card.php @@ -45,14 +45,15 @@ $action = GETPOST('action', 'alpha'); $cancel = GETPOST('cancel', 'aZ09'); $backtopage = GETPOST('backtopage', 'alpha'); -$accountid=GETPOST("accountid") > 0 ? GETPOST("accountid", "int") : 0; -$label=GETPOST("label", "alpha"); -$sens=GETPOST("sens", "int"); -$amount=GETPOST("amount", "alpha"); -$paymenttype=GETPOST("paymenttype", "int"); -$accountancy_code=GETPOST("accountancy_code", "alpha"); -$subledger_account=GETPOST("subledger_account", "alpha"); -$projectid = (GETPOST('projectid', 'int') ? GETPOST('projectid', 'int') : GETPOST('fk_project', 'int')); +$accountid = GETPOST("accountid") > 0 ? GETPOST("accountid", "int") : 0; +$label = GETPOST("label", "alpha"); +$sens = GETPOST("sens", "int"); +$amount = GETPOST("amount", "alpha"); +$paymenttype = GETPOST("paymenttype", "int"); +$accountancy_code = GETPOST("accountancy_code", "alpha"); +$subledger_account = GETPOST("subledger_account", "alpha"); +$projectid = (GETPOST('projectid', 'int') ? GETPOST('projectid', 'int') : GETPOST('fk_project', 'int')); +$cat1 = GETPOST("cat1", 'alpha'); // Security check $socid = GETPOST("socid", "int"); @@ -64,8 +65,6 @@ $object = new PaymentVarious($db); // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context $hookmanager->initHooks(array('variouscard','globalcard')); - - /** * Actions */ @@ -113,6 +112,7 @@ if (empty($reshook)) $object->type_payment=GETPOST("paymenttype", 'int') > 0 ? GETPOST("paymenttype", "int") : 0; $object->num_payment=GETPOST("num_payment", 'alpha'); $object->fk_user_author=$user->id; + $object->category_transaction=GETPOST("cat1", 'alpha'); $object->accountancy_code=GETPOST("accountancy_code") > 0 ? GETPOST("accountancy_code", "alpha") : ""; $object->subledger_account=GETPOST("subledger_account") > 0 ? GETPOST("subledger_account", "alpha") : ""; @@ -240,6 +240,16 @@ if ($id) } } +$options = array(); + +// Load bank groups +require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/bankcateg.class.php'; +$bankcateg = new BankCateg($db); + +foreach ($bankcateg->fetchAll() as $bankcategory) { + $options[$bankcategory->id] = $bankcategory->label; +} + /* ************************************************************************** */ /* */ /* Create mode */ @@ -259,7 +269,7 @@ if ($action == 'create') print ''; // Date payment - print ''; @@ -314,17 +324,50 @@ if ($action == 'create') print ''."\n"; } + // Category + if (is_array($options) && count($options)) + { + print ''; + } + + // Project + if (! empty($conf->projet->enabled)) + { + $formproject=new FormProjets($db); + + // Associated project + $langs->load("projects"); + + print ''; + } + + // Other attributes + $parameters=array(); + $reshook=$hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + + print ''; + print '
'; + print '
'; print $form->editfieldkey('DatePayment', 'datep', '', $object, 0, 'string', '', 1).''; print $form->selectDate((empty($datep)?-1:$datep), "datep", '', '', '', 'add', 1, 1); print '
'.$langs->trans("Rubrique").''; + print Form::selectarray('cat1', $options, GETPOST('cat1'), 1); + print '
'.$langs->trans("Project").''; + + $numproject=$formproject->select_projects(-1, $projectid, 'fk_project', 0, 0, 1, 1); + + print '
'; + print '
'; + + print ''; // Accountancy account if (! empty($conf->accounting->enabled)) { - print ''; + print ''; print ''; } else // For external software { - print ''; + print ''; print ''; } @@ -351,26 +394,6 @@ if ($action == 'create') print ''; } - // Project - if (! empty($conf->projet->enabled)) - { - $formproject=new FormProjets($db); - - // Associated project - $langs->load("projects"); - - print ''; - } - - // Other attributes - $parameters=array(); - $reshook=$hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook - print $hookmanager->resPrint; - print '
'.$langs->trans("AccountAccounting").'
'.$langs->trans("AccountAccounting").''; print $formaccounting->select_account($accountancy_code, 'accountancy_code', 1, null, 1, 1, ''); print '
'.$langs->trans("AccountAccounting").'
'.$langs->trans("AccountAccounting").''; print '
'.$langs->trans("Project").''; - - $numproject=$formproject->select_projects(-1, $projectid, 'fk_project', 0, 0, 1, 1); - - print '
'; dol_fiche_end(); From 64e91fa25b1ccfdb8ba510293fcf0582be0dec01 Mon Sep 17 00:00:00 2001 From: Cristian Torres Date: Wed, 27 Mar 2019 17:09:59 -0600 Subject: [PATCH 002/828] [CHANGE] Making State available in .odt templates... ...making use of the same strategy when loading Country info from single attribute. Previously attempted on PR #10463 which has been closed This also relates to #7428 --- htdocs/admin/company.php | 12 +++++++++++- htdocs/societe/class/societe.class.php | 25 +++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/htdocs/admin/company.php b/htdocs/admin/company.php index 949038b4413..1a5f963a46a 100644 --- a/htdocs/admin/company.php +++ b/htdocs/admin/company.php @@ -74,11 +74,21 @@ if ( ($action == 'update' && ! GETPOST("cancel",'alpha')) activateModulesRequiredByCountry($mysoc->country_code); } + $tmparray=getState(GETPOST('state_id','int'),'all',$db,$langs,0); + if (! empty($tmparray['id'])) + { + $mysoc->state_id =$tmparray['id']; + $mysoc->state_code =$tmparray['code']; + $mysoc->state_label=$tmparray['label']; + + $s=$mysoc->state_id.':'.$mysoc->state_code.':'.$mysoc->state_label; + dolibarr_set_const($db, "MAIN_INFO_SOCIETE_STATE", $s,'chaine',0,'',$conf->entity); + } + dolibarr_set_const($db, "MAIN_INFO_SOCIETE_NOM", GETPOST("nom",'nohtml'),'chaine',0,'',$conf->entity); dolibarr_set_const($db, "MAIN_INFO_SOCIETE_ADDRESS", GETPOST("MAIN_INFO_SOCIETE_ADDRESS",'nohtml'),'chaine',0,'',$conf->entity); dolibarr_set_const($db, "MAIN_INFO_SOCIETE_TOWN", GETPOST("MAIN_INFO_SOCIETE_TOWN",'nohtml'),'chaine',0,'',$conf->entity); dolibarr_set_const($db, "MAIN_INFO_SOCIETE_ZIP", GETPOST("MAIN_INFO_SOCIETE_ZIP",'alpha'),'chaine',0,'',$conf->entity); - dolibarr_set_const($db, "MAIN_INFO_SOCIETE_STATE", GETPOST("state_id",'alpha'),'chaine',0,'',$conf->entity); dolibarr_set_const($db, "MAIN_INFO_SOCIETE_REGION", GETPOST("region_code",'alpha'),'chaine',0,'',$conf->entity); dolibarr_set_const($db, "MAIN_MONNAIE", GETPOST("currency",'aZ09'),'chaine',0,'',$conf->entity); dolibarr_set_const($db, "MAIN_INFO_SOCIETE_TEL", GETPOST("tel",'alpha'),'chaine',0,'',$conf->entity); diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index 38d07e8e4db..ba268b0b269 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -3310,6 +3310,31 @@ class Societe extends CommonObject $this->country=$country_label; if (is_object($langs)) $this->country=($langs->trans('Country'.$country_code)!='Country'.$country_code)?$langs->trans('Country'.$country_code):$country_label; + //TODO This could be replicated for region but function `getRegion` didn't exist, so I didn't added it. + // We define state_id, state_code and state + $state_id=$state_code=$state_label=''; + if (! empty($conf->global->MAIN_INFO_SOCIETE_STATE)) + { + $tmp=explode(':',$conf->global->MAIN_INFO_SOCIETE_STATE); + $state_id=$tmp[0]; + if (! empty($tmp[1])) // If $conf->global->MAIN_INFO_SOCIETE_STATE is "id:code:label" + { + $state_code=$tmp[1]; + $state_label=$tmp[2]; + } + else // For backward compatibility + { + dol_syslog("Your state setup use an old syntax. Reedit it using setup area.", LOG_ERR); + include_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; + $state_code=getState($state_id,2,$this->db); // This need a SQL request, but it's the old feature that should not be used anymore + $state_label=getState($state_id,0,$this->db); // This need a SQL request, but it's the old feature that should not be used anymore + } + } + $this->state_id=$state_id; + $this->state_code=$state_code; + $this->state=$state_label; + if (is_object($langs)) $this->state=($langs->trans('State'.$state_code)!='State'.$state_code)?$langs->trans('State'.$state_code):$state_label; + $this->phone=empty($conf->global->MAIN_INFO_SOCIETE_TEL)?'':$conf->global->MAIN_INFO_SOCIETE_TEL; $this->fax=empty($conf->global->MAIN_INFO_SOCIETE_FAX)?'':$conf->global->MAIN_INFO_SOCIETE_FAX; $this->url=empty($conf->global->MAIN_INFO_SOCIETE_WEB)?'':$conf->global->MAIN_INFO_SOCIETE_WEB; From cc5727bc7b8c5b80d5603a44c6b160fcf2d4cc24 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Mon, 15 Apr 2019 09:15:42 +0200 Subject: [PATCH 003/828] Move to Warning an alert on hook when method return a string than a int --- htdocs/core/class/hookmanager.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/hookmanager.class.php b/htdocs/core/class/hookmanager.class.php index f23aa1da5a3..8752f01b95d 100644 --- a/htdocs/core/class/hookmanager.class.php +++ b/htdocs/core/class/hookmanager.class.php @@ -275,7 +275,7 @@ class HookManager // TODO dead code to remove (do not enable this, but fix hook instead): result must not be a string but an int. you must use $actionclassinstance->resprints to return a string if (! is_array($resaction) && ! is_numeric($resaction)) { - dol_syslog('Error: Bug into hook '.$method.' of module class '.get_class($actionclassinstance).'. Method must not return a string but an int (0=OK, 1=Replace, -1=KO) and set string into ->resprints', LOG_ERR); + dol_syslog('Warning: Bug into hook '.$method.' of module class '.get_class($actionclassinstance).'. Method must not return a string but an int (0=OK, 1=Replace, -1=KO) and set string into ->resprints', LOG_WARNING); if (empty($actionclassinstance->resprints)) { $this->resPrint.=$resaction; $resaction=0; } } } From 502b1e4d31bcffb9e1542bdbd4b8b2096b1f7de3 Mon Sep 17 00:00:00 2001 From: Christophe Battarel Date: Tue, 16 Apr 2019 16:16:37 +0200 Subject: [PATCH 004/828] add lang management to freetext --- htdocs/admin/bom.php | 50 ++-------- htdocs/admin/chequereceipts.php | 52 +---------- htdocs/admin/commande.php | 50 ++-------- htdocs/admin/contract.php | 51 +++-------- htdocs/admin/expedition.php | 57 ++++-------- htdocs/admin/expensereport.php | 52 ++++------- htdocs/admin/facture.php | 51 ++--------- htdocs/admin/fichinter.php | 48 +--------- htdocs/admin/holiday.php | 52 ++++------- htdocs/admin/livraison.php | 48 +--------- htdocs/admin/propal.php | 50 ++-------- htdocs/admin/supplier_invoice.php | 57 ++---------- htdocs/admin/supplier_order.php | 42 ++------- htdocs/admin/supplier_proposal.php | 51 ++--------- htdocs/core/actions_setfreetext.inc.php | 54 +++++++++++ htdocs/core/lib/pdf.lib.php | 5 + htdocs/core/tpl/admin_freetext.tpl.php | 116 ++++++++++++++++++++++++ 17 files changed, 303 insertions(+), 583 deletions(-) create mode 100644 htdocs/core/actions_setfreetext.inc.php create mode 100644 htdocs/core/tpl/admin_freetext.tpl.php diff --git a/htdocs/admin/bom.php b/htdocs/admin/bom.php index b7f1f0e6db9..f862f7e69e5 100644 --- a/htdocs/admin/bom.php +++ b/htdocs/admin/bom.php @@ -44,6 +44,7 @@ $type = 'bom'; */ include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php'; +include DOL_DOCUMENT_ROOT.'/core/actions_setfreetext.inc.php'; if ($action == 'updateMask') { @@ -167,23 +168,7 @@ elseif ($action == 'set_BOM_DRAFT_WATERMARK') } } -elseif ($action == 'set_BOM_FREE_TEXT') -{ - $freetext = GETPOST("BOM_FREE_TEXT", 'none'); // No alpha here, we want exact string - - $res = dolibarr_set_const($db, "BOM_FREE_TEXT", $freetext, 'chaine', 0, '', $conf->entity); - - if (! $res > 0) $error++; - - if (! $error) - { - setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); - } - else - { - setEventMessages($langs->trans("Error"), null, 'errors'); - } -} elseif ($action=="setshippableiconinlist") { +elseif ($action=="setshippableiconinlist") { // Activate Set Shippable Icon In List $setshippableiconinlist = GETPOST('value', 'int'); $res = dolibarr_set_const($db, "SHIPPABLE_BOM_ICON_IN_LIST", $setshippableiconinlist, 'yesno', 0, '', $conf->entity); @@ -490,35 +475,12 @@ if ($conf->global->MAIN_FEATURES_LEVEL >= 2) print " \n"; print "\n"; - $substitutionarray=pdf_getSubstitutionArray($langs, null, null, 2); - $substitutionarray['__(AnyTranslationKey)__']=$langs->trans("Translation"); - $htmltext = ''.$langs->trans("AvailableVariables").':
'; - foreach($substitutionarray as $key => $val) $htmltext.=$key.'
'; - $htmltext.='
'; - - print '
'; - print ''; - print ''; - print ''; - print $form->textwithpicto($langs->trans("FreeLegalTextOnBOMs"), $langs->trans("AddCRIfTooLong").'

'.$htmltext, 1, 'help', '', 0, 2, 'freetexttooltip').'
'; - $variablename='BOM_FREE_TEXT'; - if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) - { - print ''; - } - else - { - include_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; - $doleditor=new DolEditor($variablename, $conf->global->$variablename, '', 80, 'dolibarr_notes'); - print $doleditor->Create(); - } - print ''; - print ''; - print "\n"; - print '
'; + // free text + $freetexttitle = $langs->trans("FreeLegalTextOnBOMs"); + $freetextvar = "BOM_FREE_TEXT"; + require_once(DOL_DOCUMENT_ROOT.'/core/tpl/admin_freetext.tpl.php'); //Use draft Watermark - print "
"; print ''; print ""; diff --git a/htdocs/admin/chequereceipts.php b/htdocs/admin/chequereceipts.php index e8e035f8b49..05c2d023364 100644 --- a/htdocs/admin/chequereceipts.php +++ b/htdocs/admin/chequereceipts.php @@ -44,6 +44,7 @@ $value = GETPOST('value', 'alpha'); if (empty($conf->global->CHEQUERECEIPTS_ADDON)) $conf->global->CHEQUERECEIPTS_ADDON = 'mod_chequereceipts_mint.php'; +include DOL_DOCUMENT_ROOT.'/core/actions_setfreetext.inc.php'; /* * Actions @@ -72,23 +73,6 @@ if ($action == 'setmod') dolibarr_set_const($db, "CHEQUERECEIPTS_ADDON", $value, 'chaine', 0, '', $conf->entity); } -if ($action == 'set_BANK_CHEQUERECEIPT_FREE_TEXT') -{ - $freetext = GETPOST('BANK_CHEQUERECEIPT_FREE_TEXT', 'none'); // No alpha here, we want exact string - - $res = dolibarr_set_const($db, "BANK_CHEQUERECEIPT_FREE_TEXT", $freetext, 'chaine', 0, '', $conf->entity); - - if (! $res > 0) $error++; - - if (! $error) - { - setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); - } - else - { - setEventMessages($langs->trans("Error"), null, 'errors'); - } -} /* * view @@ -237,10 +221,6 @@ print '
'; */ print load_fiche_titre($langs->trans("OtherOptions"), '', ''); -print ''; -print ''; -print ''; - print ''; print ''; print ''; @@ -248,37 +228,15 @@ print ''; print ''; print "\n"; -$substitutionarray=pdf_getSubstitutionArray($langs, null, null, 2); -$substitutionarray['__(AnyTranslationKey)__']=$langs->trans("Translation"); -$htmltext = ''.$langs->trans("AvailableVariables").':
'; -foreach($substitutionarray as $key => $val) $htmltext.=$key.'
'; -$htmltext.='
'; - -print '\n"; -print '
'.$langs->trans("Parameters").'  
'; -print $form->textwithpicto($langs->trans("FreeLegalTextOnChequeReceipts"), $langs->trans("AddCRIfTooLong").'

'.$htmltext, 1, 'help', '', 0, 2, 'freetexttooltip').'
'; -$variablename='BANK_CHEQUERECEIPT_FREE_TEXT'; -if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) -{ - print ''; -} -else -{ - include_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; - $doleditor=new DolEditor($variablename, $conf->global->$variablename, '', 80, 'dolibarr_notes'); - print $doleditor->Create(); -} -print '
'; -print ''; -print "
'; -print "
"; +// free text +$freetexttitle = $langs->trans("FreeLegalTextOnChequeReceipts"); +$freetextvar = "BANK_CHEQUERECEIPT_FREE_TEXT"; +require_once(DOL_DOCUMENT_ROOT.'/core/tpl/admin_freetext.tpl.php'); print ''."\n"; dol_fiche_end(); -print '
'; - // End of page llxFooter(); $db->close(); diff --git a/htdocs/admin/commande.php b/htdocs/admin/commande.php index 455175220a8..b7e1e3e0f75 100644 --- a/htdocs/admin/commande.php +++ b/htdocs/admin/commande.php @@ -47,12 +47,12 @@ $label = GETPOST('label', 'alpha'); $scandir = GETPOST('scan_dir', 'alpha'); $type = 'order'; - /* * Actions */ include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php'; +include DOL_DOCUMENT_ROOT.'/core/actions_setfreetext.inc.php'; if ($action == 'updateMask') { @@ -176,23 +176,8 @@ elseif ($action == 'set_COMMANDE_DRAFT_WATERMARK') } } -elseif ($action == 'set_ORDER_FREE_TEXT') +elseif ($action=="setshippableiconinlist") { - $freetext = GETPOST("ORDER_FREE_TEXT", 'none'); // No alpha here, we want exact string - - $res = dolibarr_set_const($db, "ORDER_FREE_TEXT", $freetext, 'chaine', 0, '', $conf->entity); - - if (! $res > 0) $error++; - - if (! $error) - { - setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); - } - else - { - setEventMessages($langs->trans("Error"), null, 'errors'); - } -} elseif ($action=="setshippableiconinlist") { // Activate Set Shippable Icon In List $setshippableiconinlist = GETPOST('value', 'int'); $res = dolibarr_set_const($db, "SHIPPABLE_ORDER_ICON_IN_LIST", $setshippableiconinlist, 'yesno', 0, '', $conf->entity); @@ -532,35 +517,12 @@ print ''.$langs->trans("Value").''; print " \n"; print "\n"; -$substitutionarray=pdf_getSubstitutionArray($langs, null, null, 2); -$substitutionarray['__(AnyTranslationKey)__']=$langs->trans("Translation"); -$htmltext = ''.$langs->trans("AvailableVariables").':
'; -foreach($substitutionarray as $key => $val) $htmltext.=$key.'
'; -$htmltext.='
'; - -print '
'; -print ''; -print ''; -print ''; -print $form->textwithpicto($langs->trans("FreeLegalTextOnOrders"), $langs->trans("AddCRIfTooLong").'

'.$htmltext, 1, 'help', '', 0, 2, 'freetexttooltip').'
'; -$variablename='ORDER_FREE_TEXT'; -if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) -{ - print ''; -} -else -{ - include_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; - $doleditor=new DolEditor($variablename, $conf->global->$variablename, '', 80, 'dolibarr_notes'); - print $doleditor->Create(); -} -print ''; -print ''; -print "\n"; -print '
'; +// free text +$freetexttitle = $langs->trans("FreeLegalTextOnOrders"); +$freetextvar = "ORDER_FREE_TEXT"; +require_once(DOL_DOCUMENT_ROOT.'/core/tpl/admin_freetext.tpl.php'); //Use draft Watermark - print "
"; print ''; print ""; diff --git a/htdocs/admin/contract.php b/htdocs/admin/contract.php index bf02df80b5b..36236fc1b30 100644 --- a/htdocs/admin/contract.php +++ b/htdocs/admin/contract.php @@ -50,6 +50,7 @@ if (empty($conf->global->CONTRACT_ADDON)) */ include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php'; +include DOL_DOCUMENT_ROOT.'/core/actions_setfreetext.inc.php'; if ($action == 'updateMask') { @@ -157,13 +158,10 @@ elseif ($action == 'setmod') elseif ($action == 'set_other') { - $freetext= GETPOST('CONTRACT_FREE_TEXT', 'none'); // No alpha here, we want exact string - $res1 = dolibarr_set_const($db, "CONTRACT_FREE_TEXT", $freetext, 'chaine', 0, '', $conf->entity); - $draft= GETPOST('CONTRACT_DRAFT_WATERMARK', 'alpha'); - $res2 = dolibarr_set_const($db, "CONTRACT_DRAFT_WATERMARK", trim($draft), 'chaine', 0, '', $conf->entity); + $res = dolibarr_set_const($db, "CONTRACT_DRAFT_WATERMARK", trim($draft), 'chaine', 0, '', $conf->entity); - if (! $res1 > 0 || ! $res2 > 0) $error++; + if (! $res > 0) $error++; if (! $error) { @@ -458,55 +456,36 @@ print "
"; * */ -print ''; -print ''; -print ''; - print load_fiche_titre($langs->trans("OtherOptions"), '', ''); print ''; print ''; print ''; print ''; +print "\n"; print "\n"; -$substitutionarray=pdf_getSubstitutionArray($langs, array('objectamount'), null, 2); -$substitutionarray['__(AnyTranslationKey)__']=$langs->trans("Translation"); -$htmltext = ''.$langs->trans("AvailableVariables").':
'; -foreach($substitutionarray as $key => $val) $htmltext.=$key.'
'; -$htmltext.='
'; +// free text +$freetexttitle = $langs->trans("FreeLegalTextOnContracts"); +$freetextvar = "CONTRACT_FREE_TEXT"; +require_once(DOL_DOCUMENT_ROOT.'/core/tpl/admin_freetext.tpl.php'); -print ''."\n"; +print ''; +print ''; +print ''; //Use draft Watermark - print ''."\n"; -print '
'.$langs->trans("Parameter").''.$langs->trans("Value").' 
'; -print $form->textwithpicto($langs->trans("FreeLegalTextOnContracts"), $langs->trans("AddCRIfTooLong").'

'.$htmltext, 1, 'help', '', 0, 2, 'tooltiphelp'); -print '
'; -$variablename='CONTRACT_FREE_TEXT'; -if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) -{ - print ''; -} -else -{ - include_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; - $doleditor=new DolEditor($variablename, $conf->global->$variablename, '', 80, 'dolibarr_notes'); - print $doleditor->Create(); -} -print '
'; print $form->textwithpicto($langs->trans("WatermarkOnDraftContractCards"), $htmltext, 1, 'help', '', 0, 2, 'watermarktooltip').'
'; print '
'; print ''; +print ''; +print ''; print '
'; - -print '
'; -print ''; -print '
'; - print '
'; +print ''; + dol_fiche_end(); // End of page diff --git a/htdocs/admin/expedition.php b/htdocs/admin/expedition.php index 04dcf3ddc36..9ac7b2aa61a 100644 --- a/htdocs/admin/expedition.php +++ b/htdocs/admin/expedition.php @@ -57,6 +57,7 @@ if (empty($conf->global->EXPEDITION_ADDON_NUMBER)) */ include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php'; +include DOL_DOCUMENT_ROOT.'/core/actions_setfreetext.inc.php'; if ($action == 'updateMask') { @@ -76,14 +77,6 @@ if ($action == 'updateMask') elseif ($action == 'set_param') { - $freetext=GETPOST('SHIPPING_FREE_TEXT', 'none'); // No alpha here, we want exact string - $res = dolibarr_set_const($db, "SHIPPING_FREE_TEXT", $freetext, 'chaine', 0, '', $conf->entity); - if ($res <= 0) - { - $error++; - setEventMessages($langs->trans("Error"), null, 'errors'); - } - $draft=GETPOST('SHIPPING_DRAFT_WATERMARK', 'alpha'); $res = dolibarr_set_const($db, "SHIPPING_DRAFT_WATERMARK", trim($draft), 'chaine', 0, '', $conf->entity); if ($res <= 0) @@ -466,47 +459,35 @@ print '
'; */ print load_fiche_titre($langs->trans("OtherOptions")); +print ''; +print ''; +print ''; +print ''; +print "\n"; +print "\n"; + +// free text +$freetexttitle = $langs->trans("FreeLegalTextOnShippings"); +$freetextvar = "SHIPPING_FREE_TEXT"; +require_once(DOL_DOCUMENT_ROOT.'/core/tpl/admin_freetext.tpl.php'); + + print ''; print ''; print ''; -print "
'.$langs->trans("Parameter").''.$langs->trans("Value").' 
"; -print ""; -print "\n"; -print ""; - -$substitutionarray=pdf_getSubstitutionArray($langs, null, null, 2); -$substitutionarray['__(AnyTranslationKey)__']=$langs->trans("Translation"); -$htmltext = ''.$langs->trans("AvailableVariables").':
'; -foreach($substitutionarray as $key => $val) $htmltext.=$key.'
'; -$htmltext.='
'; - -print '\n"; - print '\n"; -print '
".$langs->trans("Parameter")."
'; -print $form->textwithpicto($langs->trans("FreeLegalTextOnShippings"), $langs->trans("AddCRIfTooLong").'

'.$htmltext, 1, 'help', '', 0, 2, 'freetexttooltip').'
'; -$variablename='SHIPPING_FREE_TEXT'; -if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) -{ - print ''; -} -else -{ - include_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; - $doleditor=new DolEditor($variablename, $conf->global->$variablename, '', 80, 'dolibarr_notes'); - print $doleditor->Create(); -} -print "
'; print $form->textwithpicto($langs->trans("WatermarkOnDraftContractCards"), $htmltext, 1, 'help', '', 0, 2, 'watermarktooltip').'
'; +print '
'; print ''; +print ''; +print ''; print "
'; - -print '
'; - print ''; +print ''; + // End of page llxFooter(); $db->close(); diff --git a/htdocs/admin/expensereport.php b/htdocs/admin/expensereport.php index cac83ef8d8b..dfe35ee7b56 100644 --- a/htdocs/admin/expensereport.php +++ b/htdocs/admin/expensereport.php @@ -51,6 +51,7 @@ $type='expensereport'; */ include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php'; +include DOL_DOCUMENT_ROOT.'/core/actions_setfreetext.inc.php'; if ($action == 'updateMask') { @@ -166,13 +167,10 @@ elseif ($action == 'setoptions') { $db->begin(); - $freetext= GETPOST('EXPENSEREPORT_FREE_TEXT', 'none'); // No alpha here, we want exact string - $res1 = dolibarr_set_const($db, "EXPENSEREPORT_FREE_TEXT", $freetext, 'chaine', 0, '', $conf->entity); - $draft= GETPOST('EXPENSEREPORT_DRAFT_WATERMARK', 'alpha'); - $res2 = dolibarr_set_const($db, "EXPENSEREPORT_DRAFT_WATERMARK", trim($draft), 'chaine', 0, '', $conf->entity); + $res = dolibarr_set_const($db, "EXPENSEREPORT_DRAFT_WATERMARK", trim($draft), 'chaine', 0, '', $conf->entity); - if (! $res1 > 0 || ! $res2 > 0) $error++; + if (! $res > 0) $error++; if (! $error) { @@ -464,53 +462,37 @@ print '
'; * Other options */ -print '
'; -print ''; -print ''; - print load_fiche_titre($langs->trans("OtherOptions"), '', ''); print ''; print ''; -print ''; +print ''; print ''; +print "\n"; print "\n"; -$substitutionarray=pdf_getSubstitutionArray($langs, null, null, 2); -$substitutionarray['__(AnyTranslationKey)__']=$langs->trans("Translation"); -$htmltext = ''.$langs->trans("AvailableVariables").':
'; -foreach($substitutionarray as $key => $val) $htmltext.=$key.'
'; -$htmltext.='
'; +// free text +$freetexttitle = $langs->trans("FreeLegalTextOnExpenseReports"); +$freetextvar = "EXPENSEREPORT_FREE_TEXT"; +require_once(DOL_DOCUMENT_ROOT.'/core/tpl/admin_freetext.tpl.php'); -print ''."\n"; + +print ''; +print ''; +print ''; //Use draft Watermark print ''."\n"; -print '
'.$langs->trans("Parameter").''.$langs->trans("Parameter").' 
'; -print $form->textwithpicto($langs->trans("FreeLegalTextOnExpenseReports"), $langs->trans("AddCRIfTooLong").'

'.$htmltext, 1, 'help', '', 0, 2, 'freetexttooltip').'
'; -$variablename='EXPENSEREPORT_FREE_TEXT'; -if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) -{ - print ''; -} -else -{ - include_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; - $doleditor=new DolEditor($variablename, $conf->global->$variablename, '', 80, 'dolibarr_notes'); - print $doleditor->Create(); -} -print '
'; print $form->textwithpicto($langs->trans("WatermarkOnDraftExpenseReports"), $htmltext, 1, 'help', '', 0, 2, 'watermarktooltip').'
'; print ''; +print '
'; +print ''; print '
'; - -print '
'; -print ''; -print '
'; - print '
'; +print ''; + dol_fiche_end(); // End of page diff --git a/htdocs/admin/facture.php b/htdocs/admin/facture.php index 57a18afcbd3..c25d26f3e0b 100644 --- a/htdocs/admin/facture.php +++ b/htdocs/admin/facture.php @@ -50,6 +50,7 @@ $type='invoice'; */ include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php'; +include DOL_DOCUMENT_ROOT.'/core/actions_setfreetext.inc.php'; if ($action == 'updateMask') { @@ -195,24 +196,6 @@ elseif ($action == 'set_FACTURE_DRAFT_WATERMARK') setEventMessages($langs->trans("Error"), null, 'errors'); } } - -elseif ($action == 'set_INVOICE_FREE_TEXT') -{ - $freetext = GETPOST('INVOICE_FREE_TEXT', 'none'); // No alpha here, we want exact string - - $res = dolibarr_set_const($db, "INVOICE_FREE_TEXT", $freetext, 'chaine', 0, '', $conf->entity); - - if (! $res > 0) $error++; - - if (! $error) - { - setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); - } - else - { - setEventMessages($langs->trans("Error"), null, 'errors'); - } -} elseif ($action == 'setforcedate') { $forcedate = GETPOST('forcedate', 'alpha'); @@ -759,34 +742,12 @@ print '\n"; print ''; -$substitutionarray=pdf_getSubstitutionArray($langs, null, null, 2); -$substitutionarray['__(AnyTranslationKey)__']=$langs->trans("Translation"); -$htmltext = ''.$langs->trans("AvailableVariables").':
'; -foreach($substitutionarray as $key => $val) $htmltext.=$key.'
'; -$htmltext.='
'; - -print '
'; -print ''; -print ''; -print ''; -print $form->textwithpicto($langs->trans("FreeLegalTextOnInvoices"), $langs->trans("AddCRIfTooLong").'

'.$htmltext, 1, 'help', '', 0, 2, 'freetexttooltip').'
'; -$variablename='INVOICE_FREE_TEXT'; -if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) -{ - print ''; -} -else -{ - include_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; - $doleditor=new DolEditor($variablename, $conf->global->$variablename, '', 80, 'dolibarr_notes'); - print $doleditor->Create(); -} -print ''; -print ''; -print "\n"; -print '
'; - +// free text +$freetexttitle = $langs->trans("FreeLegalTextOnInvoices"); +$freetextvar = "INVOICE_FREE_TEXT"; +require_once(DOL_DOCUMENT_ROOT.'/core/tpl/admin_freetext.tpl.php'); +//Use draft Watermark print '
'; print ''; print ''; diff --git a/htdocs/admin/fichinter.php b/htdocs/admin/fichinter.php index a407edd3864..8dcfadf9a6c 100644 --- a/htdocs/admin/fichinter.php +++ b/htdocs/admin/fichinter.php @@ -51,6 +51,7 @@ $type='ficheinter'; */ include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php'; +include DOL_DOCUMENT_ROOT.'/core/actions_setfreetext.inc.php'; if ($action == 'updateMask') { @@ -156,23 +157,6 @@ elseif ($action == 'setmod') dolibarr_set_const($db, "FICHEINTER_ADDON", $value, 'chaine', 0, '', $conf->entity); } -elseif ($action == 'set_FICHINTER_FREE_TEXT') -{ - $freetext= GETPOST('FICHINTER_FREE_TEXT', 'none'); // No alpha here, we want exact string - $res = dolibarr_set_const($db, "FICHINTER_FREE_TEXT", $freetext, 'chaine', 0, '', $conf->entity); - - if (! $res > 0) $error++; - - if (! $error) - { - setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); - } - else - { - setEventMessages($langs->trans("Error"), null, 'errors'); - } -} - elseif ($action == 'set_FICHINTER_DRAFT_WATERMARK') { $draft= GETPOST('FICHINTER_DRAFT_WATERMARK', 'alpha'); @@ -532,32 +516,10 @@ print ''.$langs->trans("Value").''; print " \n"; print "\n"; -$substitutionarray=pdf_getSubstitutionArray($langs, null, null, 2); -$substitutionarray['__(AnyTranslationKey)__']=$langs->trans("Translation"); -$htmltext = ''.$langs->trans("AvailableVariables").':
'; -foreach($substitutionarray as $key => $val) $htmltext.=$key.'
'; -$htmltext.='
'; - -print ''; -print ''; -print ''; -print ''; -print $form->textwithpicto($langs->trans("FreeLegalTextOnInterventions"), $langs->trans("AddCRIfTooLong").'

'.$htmltext, 1, 'help', '', 0, 2, 'freetexttooltip').'
'; -$variablename='FICHINTER_FREE_TEXT'; -if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) -{ - print ''; -} -else -{ - include_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; - $doleditor=new DolEditor($variablename, $conf->global->$variablename, '', 80, 'dolibarr_notes'); - print $doleditor->Create(); -} -print ''; -print ''; -print "\n"; -print '
'; +// free text +$freetexttitle = $langs->trans("FreeLegalTextOnInterventions"); +$freetextvar = "FICHINTER_FREE_TEXT"; +require_once(DOL_DOCUMENT_ROOT.'/core/tpl/admin_freetext.tpl.php'); //Use draft Watermark print "
"; diff --git a/htdocs/admin/holiday.php b/htdocs/admin/holiday.php index d67451812c6..ce6d390aa69 100644 --- a/htdocs/admin/holiday.php +++ b/htdocs/admin/holiday.php @@ -52,6 +52,7 @@ if (empty($conf->global->HOLIDAY_ADDON)) */ include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php'; +include DOL_DOCUMENT_ROOT.'/core/actions_setfreetext.inc.php'; if ($action == 'updateMask') { @@ -159,13 +160,10 @@ elseif ($action == 'setmod') elseif ($action == 'set_other') { - $freetext= GETPOST('HOLIDAY_FREE_TEXT', 'none'); // No alpha here, we want exact string - $res1 = dolibarr_set_const($db, "HOLIDAY_FREE_TEXT", $freetext, 'chaine', 0, '', $conf->entity); - $draft= GETPOST('HOLIDAY_DRAFT_WATERMARK', 'alpha'); - $res2 = dolibarr_set_const($db, "HOLIDAY_DRAFT_WATERMARK", trim($draft), 'chaine', 0, '', $conf->entity); + $res = dolibarr_set_const($db, "HOLIDAY_DRAFT_WATERMARK", trim($draft), 'chaine', 0, '', $conf->entity); - if (! $res1 > 0 || ! $res2 > 0) $error++; + if (! $res > 0) $error++; if (! $error) { @@ -464,54 +462,36 @@ print "
"; * Other options */ -print ''; -print ''; -print ''; - print load_fiche_titre($langs->trans("OtherOptions"), '', ''); + print ''; print ''; print ''; print ''; +print "\n"; print "\n"; -$substitutionarray=pdf_getSubstitutionArray($langs, array('objectamount'), null, 2); -$substitutionarray['__(AnyTranslationKey)__']=$langs->trans("Translation"); -$htmltext = ''.$langs->trans("AvailableVariables").':
'; -foreach($substitutionarray as $key => $val) $htmltext.=$key.'
'; -$htmltext.='
'; +// free text +$freetexttitle = $langs->trans("FreeLegalTextOnHolidays"); +$freetextvar = "HOLIDAY_FREE_TEXT"; +require_once(DOL_DOCUMENT_ROOT.'/core/tpl/admin_freetext.tpl.php'); -print ''."\n"; +print ''; +print ''; +print ''; //Use draft Watermark - print ''."\n"; -print '
'.$langs->trans("Parameter").''.$langs->trans("Value").' 
'; -print $form->textwithpicto($langs->trans("FreeLegalTextOnHolidays"), $langs->trans("AddCRIfTooLong").'

'.$htmltext, 1, 'help', '', 0, 2, 'tooltiphelp'); -print '
'; -$variablename='HOLIDAY_FREE_TEXT'; -if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) -{ - print ''; -} -else -{ - include_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; - $doleditor=new DolEditor($variablename, $conf->global->$variablename, '', 80, 'dolibarr_notes'); - print $doleditor->Create(); -} -print '
'; print $form->textwithpicto($langs->trans("WatermarkOnDraftHolidayCards"), $htmltext, 1, 'help', '', 0, 2, 'watermarktooltip').'
'; print '
'; print ''; +print ''; +print ''; print '
'; - -print '
'; -print ''; -print '
'; - print '
'; + +print ''; } diff --git a/htdocs/admin/livraison.php b/htdocs/admin/livraison.php index d11d07c5f38..dde70bc5314 100644 --- a/htdocs/admin/livraison.php +++ b/htdocs/admin/livraison.php @@ -51,6 +51,7 @@ $type='delivery'; */ include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php'; +include DOL_DOCUMENT_ROOT.'/core/actions_setfreetext.inc.php'; if ($action == 'updateMask') { @@ -70,23 +71,6 @@ if ($action == 'updateMask') } } -if ($action == 'set_DELIVERY_FREE_TEXT') -{ - $free=GETPOST('DELIVERY_FREE_TEXT', 'none'); // No alpha here, we want exact string - $res=dolibarr_set_const($db, "DELIVERY_FREE_TEXT", $free, 'chaine', 0, '', $conf->entity); - - if (! $res > 0) $error++; - - if (! $error) - { - setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); - } - else - { - setEventMessages($langs->trans("Error"), null, 'errors'); - } -} - if ($action == 'specimen') { $modele=GETPOST('module', 'alpha'); @@ -449,32 +433,10 @@ print ''.$langs->trans("Value").''; print ' '; print "\n"; -$substitutionarray=pdf_getSubstitutionArray($langs, null, null, 2); -$substitutionarray['__(AnyTranslationKey)__']=$langs->trans("Translation"); -$htmltext = ''.$langs->trans("AvailableVariables").':
'; -foreach($substitutionarray as $key => $val) $htmltext.=$key.'
'; -$htmltext.='
'; - -print '
'; -print ''; -print ''; -print ''; -print $form->textwithpicto($langs->trans("FreeLegalTextOnDeliveryReceipts"), $langs->trans("AddCRIfTooLong").'

'.$htmltext, 1, 'help', '', 0, 2, 'freetexttooltip').'
'; -$variablename='DELIVERY_FREE_TEXT'; -if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) -{ - print ''; -} -else -{ - include_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; - $doleditor=new DolEditor($variablename, $conf->global->$variablename, '', 80, 'dolibarr_notes'); - print $doleditor->Create(); -} -print ''; -print ''; -print "\n"; -print '
'; +// free text +$freetexttitle = $langs->trans("FreeLegalTextOnDeliveryReceipts"); +$freetextvar = "DELIVERY_FREE_TEXT"; +require_once(DOL_DOCUMENT_ROOT.'/core/tpl/admin_freetext.tpl.php'); print ''; diff --git a/htdocs/admin/propal.php b/htdocs/admin/propal.php index db41876b02c..50faa61d87a 100644 --- a/htdocs/admin/propal.php +++ b/htdocs/admin/propal.php @@ -50,6 +50,7 @@ $type='propal'; */ include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php'; +include DOL_DOCUMENT_ROOT.'/core/actions_setfreetext.inc.php'; $error=0; if ($action == 'updateMask') @@ -148,23 +149,6 @@ elseif ($action == 'set_PROPALE_DRAFT_WATERMARK') setEventMessages($langs->trans("Error"), null, 'errors'); } } -elseif ($action == 'set_PROPOSAL_FREE_TEXT') -{ - $freetext = GETPOST('PROPOSAL_FREE_TEXT', 'none'); // No alpha here, we want exact string - - $res = dolibarr_set_const($db, "PROPOSAL_FREE_TEXT", $freetext, 'chaine', 0, '', $conf->entity); - - if (! $res > 0) $error++; - - if (! $error) - { - setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); - } - else - { - setEventMessages($langs->trans("Error"), null, 'errors'); - } -} elseif ($action == 'setdefaultduration') { $res = dolibarr_set_const($db, "PROPALE_VALIDITY_DURATION", $value, 'chaine', 0, '', $conf->entity); @@ -653,34 +637,12 @@ print "\n"; print ''; */ -$substitutionarray=pdf_getSubstitutionArray($langs, null, null, 2); -$substitutionarray['__(AnyTranslationKey)__']=$langs->trans("Translation"); -$htmltext = ''.$langs->trans("AvailableVariables").':
'; -foreach($substitutionarray as $key => $val) $htmltext.=$key.'
'; -$htmltext.='
'; - -print '
'; -print ''; -print ''; -print ''; -print $form->textwithpicto($langs->trans("FreeLegalTextOnProposal"), $langs->trans("AddCRIfTooLong").'

'.$htmltext, 1, 'help', '', 0, 2, 'freetexttooltip').'
'; -$variablename='PROPOSAL_FREE_TEXT'; -if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) -{ - print ''; -} -else -{ - include_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; - $doleditor=new DolEditor($variablename, $conf->global->$variablename, '', 80, 'dolibarr_notes'); - print $doleditor->Create(); -} -print ''; -print ''; -print "\n"; -print '
'; - +// free text +$freetexttitle = $langs->trans("FreeLegalTextOnProposal"); +$freetextvar = "PROPOSAL_FREE_TEXT"; +require_once(DOL_DOCUMENT_ROOT.'/core/tpl/admin_freetext.tpl.php'); +//Use draft Watermark print "
"; print ''; print ""; diff --git a/htdocs/admin/supplier_invoice.php b/htdocs/admin/supplier_invoice.php index 6d8936fbe71..fcc3906150f 100644 --- a/htdocs/admin/supplier_invoice.php +++ b/htdocs/admin/supplier_invoice.php @@ -55,6 +55,8 @@ $specimenthirdparty->initAsSpecimen(); * Actions */ +include DOL_DOCUMENT_ROOT.'/core/actions_setfreetext.inc.php'; + if ($action == 'updateMask') { $maskconstinvoice=GETPOST('maskconstinvoice', 'alpha'); @@ -174,25 +176,6 @@ if ($action == 'addcat') $fourn->CreateCategory($user, $_POST["cat"]); } -if ($action == 'set_SUPPLIER_INVOICE_FREE_TEXT') -{ - $freetext = GETPOST('SUPPLIER_INVOICE_FREE_TEXT', 'none'); // No alpha here, we want exact string - - $res = dolibarr_set_const($db, "SUPPLIER_INVOICE_FREE_TEXT", $freetext, 'chaine', 0, '', $conf->entity); - - if (! $res > 0) $error++; - - if (! $error) - { - setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); - } - else - { - setEventMessages($langs->trans("Error"), null, 'errors'); - } -} - - /* * View */ @@ -461,11 +444,6 @@ print '
'; /* * Other options */ - -print ''; -print ''; -print ''; - print load_fiche_titre($langs->trans("OtherOptions"), '', ''); print ''; print ''; @@ -474,33 +452,10 @@ print ''; print ''; print "\n"; -$substitutionarray=pdf_getSubstitutionArray($langs, null, null, 2); -$substitutionarray['__(AnyTranslationKey)__']=$langs->trans("Translation"); -$htmltext = ''.$langs->trans("AvailableVariables").':
'; -foreach($substitutionarray as $key => $val) $htmltext.=$key.'
'; -$htmltext.='
'; - -print '\n"; - -print '
'.$langs->trans("Value").' 
'; -print $form->textwithpicto($langs->trans("FreeLegalTextOnInvoices"), $langs->trans("AddCRIfTooLong").'

'.$htmltext, 1, 'help', '', 0, 2, 'freetexttooltip').'
'; -$variablename='SUPPLIER_INVOICE_FREE_TEXT'; -if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) -{ - print ''; -} -else -{ - include_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; - $doleditor=new DolEditor($variablename, $conf->global->$variablename, '', 80, 'dolibarr_notes'); - print $doleditor->Create(); -} -print '
'; -print ''; -print "

'; - -print '
'; - +// free text +$freetexttitle = $langs->trans("FreeLegalTextOnInvoices"); +$freetextvar = "SUPPLIER_INVOICE_FREE_TEXT"; +require_once(DOL_DOCUMENT_ROOT.'/core/tpl/admin_freetext.tpl.php'); /* * Notifications diff --git a/htdocs/admin/supplier_order.php b/htdocs/admin/supplier_order.php index c414eca8158..95eca54074a 100644 --- a/htdocs/admin/supplier_order.php +++ b/htdocs/admin/supplier_order.php @@ -54,6 +54,8 @@ $specimenthirdparty->initAsSpecimen(); * Actions */ +include DOL_DOCUMENT_ROOT.'/core/actions_setfreetext.inc.php'; + if ($action == 'updateMask') { $maskconstorder=GETPOST('maskconstorder', 'alpha'); @@ -168,17 +170,15 @@ elseif ($action == 'addcat') elseif ($action == 'set_SUPPLIER_ORDER_OTHER') { - $freetext = GETPOST('SUPPLIER_ORDER_FREE_TEXT', 'none'); // No alpha here, we want exact string $doubleapproval = GETPOST('SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED', 'alpha'); $doubleapproval = price2num($doubleapproval); - $res1 = dolibarr_set_const($db, "SUPPLIER_ORDER_FREE_TEXT", $freetext, 'chaine', 0, '', $conf->entity); - $res2 = dolibarr_set_const($db, "SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED", $doubleapproval, 'chaine', 0, '', $conf->entity); + $res = dolibarr_set_const($db, "SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED", $doubleapproval, 'chaine', 0, '', $conf->entity); // TODO We add/delete permission here until permission can have a condition on a global var include_once DOL_DOCUMENT_ROOT.'/core/modules/modFournisseur.class.php'; $newmodule=new modFournisseur($db); - + if ($conf->global->SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED) { // clear default rights array @@ -191,7 +191,7 @@ elseif ($action == 'set_SUPPLIER_ORDER_OTHER') $newmodule->rights[$r][3] = 0; $newmodule->rights[$r][4] = 'commande'; $newmodule->rights[$r][5] = 'approve2'; - + // Insert $newmodule->insert_permissions(1); } @@ -199,7 +199,7 @@ elseif ($action == 'set_SUPPLIER_ORDER_OTHER') { // Remove all rights with Permission1190 $newmodule->delete_permissions(); - + // Add all right without Permission1190 $newmodule->insert_permissions(1); } @@ -541,34 +541,12 @@ else } */ -$substitutionarray=pdf_getSubstitutionArray($langs, null, null, 2); -$substitutionarray['__(AnyTranslationKey)__']=$langs->trans("Translation"); -$htmltext = ''.$langs->trans("AvailableVariables").':
'; -foreach($substitutionarray as $key => $val) $htmltext.=$key.'
'; -$htmltext.='
'; - -print ''; -print $form->textwithpicto($langs->trans("FreeLegalTextOnOrders"), $langs->trans("AddCRIfTooLong").'

'.$htmltext, 1, 'help', '', 0, 2, 'freetexttooltip').'
'; -$variablename='SUPPLIER_ORDER_FREE_TEXT'; -if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) -{ - print ''; -} -else -{ - include_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; - $doleditor=new DolEditor($variablename, $conf->global->$variablename, '', 80, 'dolibarr_notes'); - print $doleditor->Create(); -} -print ''; -print ''; -print "\n"; - -print '
'; - print ''; - +// free text +$freetexttitle = $langs->trans("FreeLegalTextOnOrders"); +$freetextvar = "SUPPLIER_ORDER_FREE_TEXT"; +require_once(DOL_DOCUMENT_ROOT.'/core/tpl/admin_freetext.tpl.php'); /* * Notifications diff --git a/htdocs/admin/supplier_proposal.php b/htdocs/admin/supplier_proposal.php index b757fb66673..551572891ba 100644 --- a/htdocs/admin/supplier_proposal.php +++ b/htdocs/admin/supplier_proposal.php @@ -48,6 +48,7 @@ $error=0; */ include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php'; +include DOL_DOCUMENT_ROOT.'/core/actions_setfreetext.inc.php'; if ($action == 'updateMask') { @@ -129,24 +130,6 @@ if ($action == 'set_SUPPLIER_PROPOSAL_DRAFT_WATERMARK') } } -if ($action == 'set_SUPPLIER_PROPOSAL_FREE_TEXT') -{ - $freetext = GETPOST('SUPPLIER_PROPOSAL_FREE_TEXT', 'none'); // No alpha here, we want exact string - - $res = dolibarr_set_const($db, "SUPPLIER_PROPOSAL_FREE_TEXT", $freetext, 'chaine', 0, '', $conf->entity); - - if (! $res > 0) $error++; - - if (! $error) - { - setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); - } - else - { - setEventMessages($langs->trans("Error"), null, 'errors'); - } -} - if ($action == 'set_BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_PROPOSAL') { $res = dolibarr_set_const($db, "BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_PROPOSAL", $value, 'chaine', 0, '', $conf->entity); @@ -495,34 +478,12 @@ print ''.$langs->trans("Value")."\n"; print " \n"; print ""; -$substitutionarray=pdf_getSubstitutionArray($langs, null, null, 2); -$substitutionarray['__(AnyTranslationKey)__']=$langs->trans("Translation"); -$htmltext = ''.$langs->trans("AvailableVariables").':
'; -foreach($substitutionarray as $key => $val) $htmltext.=$key.'
'; -$htmltext.='
'; - -print '
'; -print ''; -print ''; -print ''; -print $form->textwithpicto($langs->trans("FreeLegalTextOnSupplierProposal"), $langs->trans("AddCRIfTooLong").'

'.$htmltext, 1, 'help', '', 0, 2, 'freetexttooltip').'
'; -$variablename='SUPPLIER_PROPOSAL_FREE_TEXT'; -if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) -{ - print ''; -} -else -{ - include_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; - $doleditor=new DolEditor($variablename, $conf->global->$variablename, '', 80, 'dolibarr_notes'); - print $doleditor->Create(); -} -print ''; -print ''; -print "\n"; -print '
'; - +// free text +$freetexttitle = $langs->trans("FreeLegalTextOnSupplierProposal"); +$freetextvar = "SUPPLIER_PROPOSAL_FREE_TEXT"; +require_once(DOL_DOCUMENT_ROOT.'/core/tpl/admin_freetext.tpl.php'); +//Use draft Watermark print "
"; print ''; print ""; diff --git a/htdocs/core/actions_setfreetext.inc.php b/htdocs/core/actions_setfreetext.inc.php new file mode 100644 index 00000000000..7e76a3d5a6d --- /dev/null +++ b/htdocs/core/actions_setfreetext.inc.php @@ -0,0 +1,54 @@ + + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * or see http://www.gnu.org/ + */ + +/** + * \file htdocs/core/actions_setmoduleoptions.inc.php + * \brief Code for actions on setting notes of object page + */ + + +// $action must be defined +// $arrayofparameters must be set for action 'update' +// $nomessageinupdate can be set to 1 +// $nomessageinsetmoduleoptions can be set to 1 +if ($action == 'set_freetext') +{ + $freetextvar = GETPOST("freetextvar", 'alpha'); + $freetext = GETPOST("freetext", 'none'); // No alpha here, we want exact string + $freetextlang = GETPOST('freetextlang', 'alpha'); + + if ( ! empty($conf->global->MAIN_MULTILANGS) && !empty($freetextlang) ) + { + $res = dolibarr_set_const($db, $freetextvar."_".$freetextlang, $freetext, 'chaine', 0, '', $conf->entity); + } + else + { + $res = dolibarr_set_const($db, $freetextvar, $freetext, 'chaine', 0, '', $conf->entity); + } + + if (! $res > 0) $error++; + + if (! $error) + { + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); + } + else + { + setEventMessages($langs->trans("Error"), null, 'errors'); + } +} \ No newline at end of file diff --git a/htdocs/core/lib/pdf.lib.php b/htdocs/core/lib/pdf.lib.php index 2d6e41abe59..2e8d286fc26 100644 --- a/htdocs/core/lib/pdf.lib.php +++ b/htdocs/core/lib/pdf.lib.php @@ -874,6 +874,11 @@ function pdf_pagefoot(&$pdf, $outputlangs, $paramfreetext, $fromcompany, $marge_ $dims=$pdf->getPageDimensions(); + if ( ! empty($conf->global->$paramfreetext."_".$outputlangs->defaultlang) ) + { + $paramfreetext .= "_".$outputlangs->defaultlang; + } + // Line of free text if (empty($hidefreetext) && ! empty($conf->global->$paramfreetext)) { diff --git a/htdocs/core/tpl/admin_freetext.tpl.php b/htdocs/core/tpl/admin_freetext.tpl.php new file mode 100644 index 00000000000..f80ce8b224e --- /dev/null +++ b/htdocs/core/tpl/admin_freetext.tpl.php @@ -0,0 +1,116 @@ + + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/** + * The following vars must be defined: + * $freetexttitle + * $freetextvar + * $conf, $langs, $db + * The following vars may also be defined: + * $freetextlang + */ + +// Protection to avoid direct call of template +if (empty($conf) || ! is_object($conf)) +{ + print "Error, template page can't be called as URL"; + exit; +} + +$substitutionarray=pdf_getSubstitutionArray($langs, null, null, 2); +$substitutionarray['__(AnyTranslationKey)__']=$langs->trans("Translation"); +$htmltext = ''.$langs->trans("AvailableVariables").':
'; +foreach($substitutionarray as $key => $val) $htmltext.=$key.'
'; +$htmltext.='
'; + +print ''; +print ''; +print ''; +print ''; +print ''; + +$form=new Form($db); +print $form->textwithpicto($freetexttitle, $langs->trans("AddCRIfTooLong").'

'.$htmltext, 1, 'help', '', 0, 2, 'freetexttooltip').'
'; + +$freetextconfvar = $freetextvar; +if (! empty($conf->global->MAIN_MULTILANGS) ) +{ + $freetextlang = GETPOST('freetextlang', 'alpha'); + require_once DOL_DOCUMENT_ROOT.'/core/class/html.formadmin.class.php'; + $formadmin=new FormAdmin($db); + print '
'.$langs->trans('Language').' '; + print $formadmin->select_language($freetextlang, 'freetextlang', 0, $freetextlang, 1); + print '
'; + + if (! empty($freetextlang)) + { + $freetextconfvar .= '_'.$freetextlang; + } +} + +if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) +{ + print ''; +} +else +{ + include_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; + $doleditor=new DolEditor("freetext", $conf->global->$freetextconfvar, '', 80, 'dolibarr_notes'); + print $doleditor->Create(); +} +print ''; +print ''; +print "\n"; +print ''; + +if (! empty($conf->global->MAIN_MULTILANGS) ) +{ +?> + + Date: Tue, 16 Apr 2019 16:21:32 +0200 Subject: [PATCH 005/828] add freetextsubstitutionexclude parameter --- htdocs/admin/contract.php | 1 + htdocs/admin/holiday.php | 1 + htdocs/core/tpl/admin_freetext.tpl.php | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/htdocs/admin/contract.php b/htdocs/admin/contract.php index 36236fc1b30..74df1b6af31 100644 --- a/htdocs/admin/contract.php +++ b/htdocs/admin/contract.php @@ -467,6 +467,7 @@ print "\n"; // free text $freetexttitle = $langs->trans("FreeLegalTextOnContracts"); $freetextvar = "CONTRACT_FREE_TEXT"; +$freetextsubstitutionexclude = array('objectamount'); require_once(DOL_DOCUMENT_ROOT.'/core/tpl/admin_freetext.tpl.php'); print '
'; diff --git a/htdocs/admin/holiday.php b/htdocs/admin/holiday.php index ce6d390aa69..f81bf8fa4a4 100644 --- a/htdocs/admin/holiday.php +++ b/htdocs/admin/holiday.php @@ -474,6 +474,7 @@ print "\n"; // free text $freetexttitle = $langs->trans("FreeLegalTextOnHolidays"); $freetextvar = "HOLIDAY_FREE_TEXT"; +$freetextsubstitutionexclude = array('objectamount'); require_once(DOL_DOCUMENT_ROOT.'/core/tpl/admin_freetext.tpl.php'); print ''; diff --git a/htdocs/core/tpl/admin_freetext.tpl.php b/htdocs/core/tpl/admin_freetext.tpl.php index f80ce8b224e..98b83215e86 100644 --- a/htdocs/core/tpl/admin_freetext.tpl.php +++ b/htdocs/core/tpl/admin_freetext.tpl.php @@ -23,6 +23,7 @@ * $conf, $langs, $db * The following vars may also be defined: * $freetextlang + * $freetextsubstitutionexclude */ // Protection to avoid direct call of template @@ -32,7 +33,7 @@ if (empty($conf) || ! is_object($conf)) exit; } -$substitutionarray=pdf_getSubstitutionArray($langs, null, null, 2); +$substitutionarray=pdf_getSubstitutionArray($langs, $freetextsubstitutionexclude, null, 2); $substitutionarray['__(AnyTranslationKey)__']=$langs->trans("Translation"); $htmltext = ''.$langs->trans("AvailableVariables").':
'; foreach($substitutionarray as $key => $val) $htmltext.=$key.'
'; From ce4b67ecaa2ecd15fdf33240867ada0f978cdf90 Mon Sep 17 00:00:00 2001 From: Christophe Battarel Date: Tue, 16 Apr 2019 16:45:43 +0200 Subject: [PATCH 006/828] fix pagefoot --- htdocs/core/lib/pdf.lib.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/pdf.lib.php b/htdocs/core/lib/pdf.lib.php index 2e8d286fc26..d38d6d3f3ca 100644 --- a/htdocs/core/lib/pdf.lib.php +++ b/htdocs/core/lib/pdf.lib.php @@ -874,9 +874,10 @@ function pdf_pagefoot(&$pdf, $outputlangs, $paramfreetext, $fromcompany, $marge_ $dims=$pdf->getPageDimensions(); - if ( ! empty($conf->global->$paramfreetext."_".$outputlangs->defaultlang) ) + $paramfreetextlang = $paramfreetext."_".$outputlangs->defaultlang; + if ( ! empty($conf->global->$paramfreetextlang) ) { - $paramfreetext .= "_".$outputlangs->defaultlang; + $paramfreetext = $paramfreetextlang; } // Line of free text From f4cc1695f46ee3d8677c600c42ebf4e3e7d36faf Mon Sep 17 00:00:00 2001 From: Christophe Battarel Date: Tue, 16 Apr 2019 17:22:33 +0200 Subject: [PATCH 007/828] fix when ckeditor is not enabled --- htdocs/core/tpl/admin_freetext.tpl.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/core/tpl/admin_freetext.tpl.php b/htdocs/core/tpl/admin_freetext.tpl.php index 98b83215e86..55269b0d6fc 100644 --- a/htdocs/core/tpl/admin_freetext.tpl.php +++ b/htdocs/core/tpl/admin_freetext.tpl.php @@ -64,7 +64,7 @@ if (! empty($conf->global->MAIN_MULTILANGS) ) } } -if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) +if (empty($conf->modFckeditor->enabled) || empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) { print ''; } @@ -97,10 +97,10 @@ if (! empty($conf->global->MAIN_MULTILANGS) ) $('#freetextlang').change(function() { global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) + if (empty($conf->modFckeditor->enabled) || empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) { ?> - $('#freetext').html(freetext[$(this).val()]); + $('textarea[name=freetext]').val(freetext[$(this).val()]); Date: Tue, 16 Apr 2019 17:30:57 +0200 Subject: [PATCH 008/828] fix javascript --- htdocs/core/tpl/admin_freetext.tpl.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/htdocs/core/tpl/admin_freetext.tpl.php b/htdocs/core/tpl/admin_freetext.tpl.php index 55269b0d6fc..d3b61ebf776 100644 --- a/htdocs/core/tpl/admin_freetext.tpl.php +++ b/htdocs/core/tpl/admin_freetext.tpl.php @@ -64,7 +64,7 @@ if (! empty($conf->global->MAIN_MULTILANGS) ) } } -if (empty($conf->modFckeditor->enabled) || empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) +if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) { print ''; } @@ -83,6 +83,8 @@ if (! empty($conf->global->MAIN_MULTILANGS) ) { ?> Date: Tue, 16 Apr 2019 17:36:42 +0200 Subject: [PATCH 009/828] fix javascript --- htdocs/core/tpl/admin_freetext.tpl.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/tpl/admin_freetext.tpl.php b/htdocs/core/tpl/admin_freetext.tpl.php index d3b61ebf776..37d014be7d9 100644 --- a/htdocs/core/tpl/admin_freetext.tpl.php +++ b/htdocs/core/tpl/admin_freetext.tpl.php @@ -64,7 +64,7 @@ if (! empty($conf->global->MAIN_MULTILANGS) ) } } -if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) +if (empty($conf->fckeditor->enabled) || empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) { print ''; } @@ -99,7 +99,7 @@ if (! empty($conf->global->MAIN_MULTILANGS) ) $('#freetextlang').change(function() { global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) + if (empty($conf->fckeditor->enabled) || empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) { ?> $('textarea[name=freetext]').val(freetext[$(this).val()]); From 660a1cea1d8ddca131114ec2c7c975ec2bb66db2 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 17 Apr 2019 07:26:39 +0200 Subject: [PATCH 010/828] NEW Accounting - Add rights on export, delete operations in ledger --- htdocs/accountancy/bookkeeping/list.php | 61 +++++++++++++-------- htdocs/core/modules/modAccounting.class.php | 39 ++++++++++--- htdocs/langs/en_US/admin.lang | 9 +++ 3 files changed, 79 insertions(+), 30 deletions(-) diff --git a/htdocs/accountancy/bookkeeping/list.php b/htdocs/accountancy/bookkeeping/list.php index 207ea3464d8..53603e08b39 100644 --- a/htdocs/accountancy/bookkeeping/list.php +++ b/htdocs/accountancy/bookkeeping/list.php @@ -1,7 +1,7 @@ * Copyright (C) 2013-2016 Florian Henry - * Copyright (C) 2013-2018 Alexandre Spangaro + * Copyright (C) 2013-2019 Alexandre Spangaro * Copyright (C) 2016-2017 Laurent Destailleur * Copyright (C) 2018 Frédéric France * @@ -100,7 +100,7 @@ $formaccounting = new FormAccounting($db); $formother = new FormOther($db); $form = new Form($db); -if (! in_array($action, array('export_file', 'delmouv', 'delmouvconfirm')) && ! isset($_POST['begin']) && ! isset($_GET['begin']) && ! isset($_POST['formfilteraction']) && GETPOST('page', 'int') == '' && ! GETPOST('noreset', 'int')) +if (! in_array($action, array('export_file', 'delmouv', 'delmouvconfirm')) && ! isset($_POST['begin']) && ! isset($_GET['begin']) && ! isset($_POST['formfilteraction']) && GETPOST('page', 'int') == '' && ! GETPOST('noreset', 'int') && $user->rights->accounting->mouvements->export) { if (empty($search_date_start) && empty($search_date_end) && ! GETPOSTISSET('restore_lastsearch_values')) { @@ -283,7 +283,7 @@ if (! empty($search_lettering_code)) { } -if ($action == 'delbookkeeping') { +if ($action == 'delbookkeeping' && $user->rights->accounting->mouvements->supprimer) { $import_key = GETPOST('importkey', 'alpha'); @@ -296,7 +296,7 @@ if ($action == 'delbookkeeping') { exit(); } } -if ($action == 'delbookkeepingyearconfirm') { +if ($action == 'delbookkeepingyearconfirm' && $user->rights->accounting->mouvements->supprimer_tous) { $delyear = GETPOST('delyear', 'int'); if ($delyear==-1) { @@ -327,7 +327,7 @@ if ($action == 'delbookkeepingyearconfirm') { exit; } } -if ($action == 'delmouvconfirm') { +if ($action == 'delmouvconfirm' && $user->rights->accounting->mouvements->supprimer) { $mvt_num = GETPOST('mvt_num', 'int'); @@ -347,7 +347,7 @@ if ($action == 'delmouvconfirm') { } // Export into a file with format defined into setup (FEC, CSV, ...) -if ($action == 'export_file') { +if ($action == 'export_file' && $user->rights->accounting->mouvements->export) { $result = $object->fetchAll($sortorder, $sortfield, 0, 0, $filter); @@ -442,18 +442,30 @@ print ''; print ''; print ''; -$listofformat=AccountancyExport::getType(); -$button = ''; -if (count($filter)) $button.= $langs->trans("ExportFilteredList"); -else $button.= $langs->trans("ExportList"); -//$button.=' ('.$listofformat[$conf->global->ACCOUNTING_EXPORT_MODELCSV].')'; -$button.= ''; - +if ($user->rights->accounting->mouvements->export) { + $listofformat=AccountancyExport::getType(); + $button = ''; + if (count($filter)) $button.= $langs->trans("ExportFilteredList"); + else $button.= $langs->trans("ExportList"); + $button.= ''; +} else { + $button = ''; + if (count($filter)) $button.= $langs->trans("ExportFilteredList"); + else $button.= $langs->trans("ExportList"); + $button.= ''; +} $groupby = ' ' . $langs->trans("GroupByAccountAccounting") . ''; -$newcardbutton = ''.$langs->trans("NewAccountingMvt").''; -$newcardbutton.= ''; -$newcardbutton.= ''; + +if ($user->rights->accounting->mouvements->creer) { + $newcardbutton = ''.$langs->trans("NewAccountingMvt").''; + $newcardbutton.= ''; + $newcardbutton.= ''; +} else { + $newcardbutton = '' . $langs->trans("NewAccountingMvt") . ''; + $newcardbutton.= ''; + $newcardbutton.= ''; +} print_barre_liste($title_page, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $button, $result, $nbtotalofrecords, 'title_accountancy', 0, $groupby.$newcardbutton, '', $limit); @@ -731,8 +743,12 @@ if ($num > 0) // Action column print ''; - print '' . img_edit() . ' '; - print '' . img_delete() . ''; + if ($user->rights->accounting->mouvements->creer) { + print '' . img_edit() . ''; + } + if ($user->rights->accounting->mouvements->supprimer) { + print ' ' . img_delete() . ''; + } print ''; if (! $i) $totalarray['nbfield']++; @@ -766,10 +782,11 @@ print ""; print ''; // TODO Replace this with mass delete action -print '
' . "\n"; -print '' . $langs->trans("DeleteMvt") . ''; -print '
'; - +if ($user->rights->accounting->mouvements->supprimer_tous) { + print '
' . "\n"; + print '' . $langs->trans("DeleteMvt") . ''; + print '
'; +} print ''; diff --git a/htdocs/core/modules/modAccounting.class.php b/htdocs/core/modules/modAccounting.class.php index 8250549b9e1..c91c59169ba 100644 --- a/htdocs/core/modules/modAccounting.class.php +++ b/htdocs/core/modules/modAccounting.class.php @@ -170,14 +170,6 @@ class modAccounting extends DolibarrModules $this->rights = array(); // Permission array used by this module $r = 0; - $this->rights[$r][0] = 50440; - $this->rights[$r][1] = 'Manage chart of accounts, setup of accountancy'; - $this->rights[$r][2] = 'r'; - $this->rights[$r][3] = 0; - $this->rights[$r][4] = 'chartofaccount'; - $this->rights[$r][5] = ''; - $r++; - $this->rights[$r][0] = 50401; $this->rights[$r][1] = 'Bind products and invoices with accounting accounts'; $this->rights[$r][2] = 'r'; @@ -212,6 +204,30 @@ class modAccounting extends DolibarrModules $this->rights[$r][5] = 'creer'; $r++; + $this->rights[$r][0] = 50414; + $this->rights[$r][1] = 'Delete operations in Ledger'; + $this->rights[$r][2] = 'd'; + $this->rights[$r][3] = 0; + $this->rights[$r][4] = 'mouvements'; + $this->rights[$r][5] = 'supprimer'; + $r++; + + $this->rights[$r][0] = 50415; + $this->rights[$r][1] = 'Delete all operations by year and journal in Ledger'; + $this->rights[$r][2] = 'd'; + $this->rights[$r][3] = 0; + $this->rights[$r][4] = 'mouvements'; + $this->rights[$r][5] = 'supprimer_tous'; + $r++; + + $this->rights[$r][0] = 50418; + $this->rights[$r][1] = 'Export operations of the Ledger'; + $this->rights[$r][2] = 'r'; + $this->rights[$r][3] = 0; + $this->rights[$r][4] = 'mouvements'; + $this->rights[$r][5] = 'export'; + $r++; + $this->rights[$r][0] = 50420; $this->rights[$r][1] = 'Report and export reports (turnover, balance, journals, ledger)'; $this->rights[$r][2] = 'r'; @@ -228,6 +244,13 @@ class modAccounting extends DolibarrModules $this->rights[$r][5] = ''; $r++; + $this->rights[$r][0] = 50440; + $this->rights[$r][1] = 'Manage chart of accounts, setup of accountancy'; + $this->rights[$r][2] = 'r'; + $this->rights[$r][3] = 0; + $this->rights[$r][4] = 'chartofaccount'; + $this->rights[$r][5] = ''; + $r++; // Menus //------- diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 23f10739424..6c54cb643fe 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -882,6 +882,15 @@ Permission2802=Use FTP client in write mode (delete or upload files) Permission50101=Use Point of Sale Permission50201=Read transactions Permission50202=Import transactions +Permission50401=Bind products and invoices with accounting accounts +Permission50411=Read operations in ledger +Permission50412=Write/Edit operations in ledger +Permission50414=Delete operations in ledger +Permission50415=Delete all operations by year and journal in ledger +Permission50418=Export operations of the ledger +Permission50420=Report and export reports (turnover, balance, journals, ledger) +Permission50430=Define and close a fiscal year +Permission50440=Manage chart of accounts, setup of accountancy Permission54001=Print Permission55001=Read polls Permission55002=Create/modify polls From 3091288ed79c6287ab31edd0ad78293e0c8cd7fa Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 17 Apr 2019 07:27:38 +0200 Subject: [PATCH 011/828] Revert "Move to Warning an alert on hook when method return a string than a int" This reverts commit cc5727bc7b8c5b80d5603a44c6b160fcf2d4cc24. --- htdocs/core/class/hookmanager.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/hookmanager.class.php b/htdocs/core/class/hookmanager.class.php index 8752f01b95d..f23aa1da5a3 100644 --- a/htdocs/core/class/hookmanager.class.php +++ b/htdocs/core/class/hookmanager.class.php @@ -275,7 +275,7 @@ class HookManager // TODO dead code to remove (do not enable this, but fix hook instead): result must not be a string but an int. you must use $actionclassinstance->resprints to return a string if (! is_array($resaction) && ! is_numeric($resaction)) { - dol_syslog('Warning: Bug into hook '.$method.' of module class '.get_class($actionclassinstance).'. Method must not return a string but an int (0=OK, 1=Replace, -1=KO) and set string into ->resprints', LOG_WARNING); + dol_syslog('Error: Bug into hook '.$method.' of module class '.get_class($actionclassinstance).'. Method must not return a string but an int (0=OK, 1=Replace, -1=KO) and set string into ->resprints', LOG_ERR); if (empty($actionclassinstance->resprints)) { $this->resPrint.=$resaction; $resaction=0; } } } From 79fc351cbdf204807c01e065cf5fe4e064f1a107 Mon Sep 17 00:00:00 2001 From: Christophe Battarel Date: Wed, 17 Apr 2019 09:26:45 +0200 Subject: [PATCH 012/828] credentials --- htdocs/core/actions_setfreetext.inc.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/htdocs/core/actions_setfreetext.inc.php b/htdocs/core/actions_setfreetext.inc.php index 7e76a3d5a6d..deb6efd9f86 100644 --- a/htdocs/core/actions_setfreetext.inc.php +++ b/htdocs/core/actions_setfreetext.inc.php @@ -1,5 +1,5 @@ +/* Copyright (C) 2019 Christophe Battarel * * 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 @@ -23,9 +23,7 @@ // $action must be defined -// $arrayofparameters must be set for action 'update' -// $nomessageinupdate can be set to 1 -// $nomessageinsetmoduleoptions can be set to 1 + if ($action == 'set_freetext') { $freetextvar = GETPOST("freetextvar", 'alpha'); From 0b5cb9770f68081abad703961db11f903c6ce58a Mon Sep 17 00:00:00 2001 From: Christophe Battarel Date: Thu, 18 Apr 2019 09:59:39 +0200 Subject: [PATCH 013/828] use dol_escapa_js --- htdocs/core/tpl/admin_freetext.tpl.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/tpl/admin_freetext.tpl.php b/htdocs/core/tpl/admin_freetext.tpl.php index 37d014be7d9..99c4f62a209 100644 --- a/htdocs/core/tpl/admin_freetext.tpl.php +++ b/htdocs/core/tpl/admin_freetext.tpl.php @@ -93,7 +93,7 @@ if (! empty($conf->global->MAIN_MULTILANGS) ) foreach ($langs_available as $key => $value) { $freetextlangvar = $freetextvar."_".$key; - print 'freetext["'.$key.'"] = "'.$conf->global->$freetextlangvar.'";'; + print 'freetext["'.$key.'"] = "'.dol_escape_js($conf->global->$freetextlangvar,2).'";'; } ?> $('#freetextlang').change(function() From 01ea4c28cff6efe403c310ad5718fb03f70965c7 Mon Sep 17 00:00:00 2001 From: Joa Date: Fri, 3 May 2019 11:02:37 +0200 Subject: [PATCH 014/828] adding hooks loading for form customization to card.php of adherents module --- htdocs/adherents/card.php | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php index 5d57208eb0e..850537356ee 100644 --- a/htdocs/adherents/card.php +++ b/htdocs/adherents/card.php @@ -1059,6 +1059,13 @@ else // Other attributes include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_add.tpl.php'; + //Hooks here + $reshook=$hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook + //print $hookmanager->resPrint; //it double prints? + if (empty($reshook)) + { + print $object->showOptionals($extrafields, 'edit'); + } print ''; print "\n"; @@ -1357,9 +1364,15 @@ else // Other attributes include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_add.tpl.php'; - + //Hooks here + $reshook=$hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook + //print $hookmanager->resPrint; //it double prints? + if (empty($reshook)) + { + print $object->showOptionals($extrafields, 'edit'); + } + print ''; - dol_fiche_end(); print '
'; From 87e83a79670cd5e2503f88c676b6e4b1137fa11a Mon Sep 17 00:00:00 2001 From: Lionel VESSILLER Date: Fri, 3 May 2019 16:14:44 +0200 Subject: [PATCH 015/828] New add extrafield separator collapse with theses specific values - empty for a simple separator - 1 to extend by default all extrafields after the separator position - 2 to collapse by default all extrafields after the separator position --- htdocs/core/class/commonobject.class.php | 17 ++++++++- htdocs/core/class/extrafields.class.php | 36 ++++++++++++++++++- htdocs/core/tpl/admin_extrafields_add.tpl.php | 2 +- .../core/tpl/admin_extrafields_edit.tpl.php | 4 +-- htdocs/core/tpl/extrafields_view.tpl.php | 18 ++++++++-- 5 files changed, 70 insertions(+), 7 deletions(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index fae9ab49cc8..7a4b2e58e0a 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -6404,6 +6404,7 @@ abstract class CommonObject $out .= ' '; $out .= "\n"; + $extrafields_collapse_num = ''; $e = 0; foreach($extrafields->attributes[$this->table_element]['label'] as $key=>$label) { @@ -6463,6 +6464,20 @@ abstract class CommonObject if ($extrafields->attributes[$this->table_element]['type'][$key] == 'separate') { + $extrafields_collapse_num = ''; + $extrafield_param = $extrafields->attributes[$this->table_element]['param'][$key]; + if (!empty($extrafield_param) && is_array($extrafield_param)) { + $extrafield_param_list = array_keys($extrafield_param['options']); + + if (count($extrafield_param_list)>0) { + $extrafield_collapse_display_value = intval($extrafield_param_list[0]); + + if ($extrafield_collapse_display_value==1 || $extrafield_collapse_display_value==2) { + $extrafields_collapse_num = $extrafields->attributes[$this->table_element]['pos'][$key]; + } + } + } + $out .= $extrafields->showSeparator($key, $this); } else @@ -6482,7 +6497,7 @@ abstract class CommonObject $html_id = !empty($this->id) ? 'extrarow-'.$this->element.'_'.$key.'_'.$this->id : ''; - $out .= ''; + $out .= ''; if (! empty($conf->global->MAIN_EXTRAFIELDS_USE_TWO_COLUMS) && ($e % 2) == 0) { diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index caea57280b9..86019cc807b 100644 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -1951,9 +1951,43 @@ class ExtraFields { global $langs; - $out = ''; + $out = ''; $out.= $langs->trans($this->attributes[$object->table_element]['label'][$key]); $out.= ''; + + $extrafield_param = $this->attributes[$object->table_element]['param'][$key]; + if (!empty($extrafield_param) && is_array($extrafield_param)) { + $extrafield_param_list = array_keys($extrafield_param['options']); + + if (count($extrafield_param_list) > 0) { + $extrafield_collapse_display_value = intval($extrafield_param_list[0]); + if ($extrafield_collapse_display_value == 1 || $extrafield_collapse_display_value == 2) { + $collapse_display = ($extrafield_collapse_display_value == 2 ? false : true); + $extrafields_collapse_num = $this->attributes[$object->table_element]['pos'][$key]; + + $out .= ''; + } + } + } + return $out; } diff --git a/htdocs/core/tpl/admin_extrafields_add.tpl.php b/htdocs/core/tpl/admin_extrafields_add.tpl.php index 45c620db456..04720004492 100644 --- a/htdocs/core/tpl/admin_extrafields_add.tpl.php +++ b/htdocs/core/tpl/admin_extrafields_add.tpl.php @@ -107,7 +107,7 @@ $langs->load("modulebuilder"); else if (type == 'link') { size.val('').prop('disabled', true); unique.removeAttr('disabled'); jQuery("#value_choice").show();jQuery("#helpselect").hide();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").hide();jQuery("#helplink").show();jQuery("#helppassword").hide();} else if (type == 'separate') { langfile.val('').prop('disabled',true);size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); required.val('').prop('disabled', true); - jQuery("#value_choice").hide();jQuery("#helpselect").hide();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").hide();jQuery("#helplink").hide(); + jQuery("#value_choice").show();jQuery("#helpselect").hide();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").hide();jQuery("#helplink").hide();jQuery("#helppassword").hide(); } else { // type = string size.val('').prop('disabled', true); diff --git a/htdocs/core/tpl/admin_extrafields_edit.tpl.php b/htdocs/core/tpl/admin_extrafields_edit.tpl.php index 1ba83bc393f..7ed41af9281 100644 --- a/htdocs/core/tpl/admin_extrafields_edit.tpl.php +++ b/htdocs/core/tpl/admin_extrafields_edit.tpl.php @@ -103,7 +103,7 @@ $langs->load("modulebuilder"); else if (type == 'checkbox') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show();jQuery("#helpselect").show();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").hide();jQuery("#helplink").hide();jQuery("#helppassword").hide();} else if (type == 'chkbxlst') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show();jQuery("#helpselect").hide();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").show();jQuery("#helplink").hide();jQuery("#helppassword").hide();} else if (type == 'link') { size.val('').prop('disabled', true); unique.removeAttr('disabled'); jQuery("#value_choice").show();jQuery("#helpselect").hide();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").hide();jQuery("#helplink").show();jQuery("#helppassword").hide();} - else if (type == 'separate') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); required.val('').prop('disabled', true); default_value.val('').prop('disabled', true); jQuery("#value_choice").hide();jQuery("#helpselect").hide();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").hide();jQuery("#helplink").hide();jQuery("#helppassword").hide();} + else if (type == 'separate') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); required.val('').prop('disabled', true); default_value.val('').prop('disabled', true); jQuery("#value_choice").show();jQuery("#helpselect").hide();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").hide();jQuery("#helplink").hide();jQuery("#helppassword").hide();} else { // type = string size.val('').prop('disabled', true); unique.removeAttr('disabled'); @@ -173,7 +173,7 @@ if((($type == 'select') || ($type == 'checkbox') || ($type == 'radio')) && is_ar } } } -elseif (($type== 'sellist') || ($type == 'chkbxlst') || ($type == 'link') || ($type == 'password')) +elseif (($type== 'sellist') || ($type == 'chkbxlst') || ($type == 'link') || ($type == 'password') || ($type == 'separate')) { $paramlist=array_keys($param['options']); $param_chain = $paramlist[0]; diff --git a/htdocs/core/tpl/extrafields_view.tpl.php b/htdocs/core/tpl/extrafields_view.tpl.php index db0d6a4897d..00a617a3e6c 100644 --- a/htdocs/core/tpl/extrafields_view.tpl.php +++ b/htdocs/core/tpl/extrafields_view.tpl.php @@ -48,8 +48,8 @@ if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'e //var_dump($extrafields->attributes[$object->table_element]); if (empty($reshook) && is_array($extrafields->attributes[$object->table_element]['label'])) - { + $extrafields_collapse_num = ''; foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $label) { // Discard if extrafield is a hidden field on form @@ -86,11 +86,25 @@ if (empty($reshook) && is_array($extrafields->attributes[$object->table_element] } if ($extrafields->attributes[$object->table_element]['type'][$key] == 'separate') { + $extrafields_collapse_num = ''; + $extrafield_param = $extrafields->attributes[$object->table_element]['param'][$key]; + if (!empty($extrafield_param) && is_array($extrafield_param)) { + $extrafield_param_list = array_keys($extrafield_param['options']); + + if (count($extrafield_param_list)>0) { + $extrafield_collapse_display_value = intval($extrafield_param_list[0]); + + if ($extrafield_collapse_display_value==1 || $extrafield_collapse_display_value==2) { + $extrafields_collapse_num = $extrafields->attributes[$object->table_element]['pos'][$key]; + } + } + } + print $extrafields->showSeparator($key, $object); } else { - print ''; + print ''; print ''; print ''; print ''; From a7a8eb3648b2d0a634d76583c24249ee19924900 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laurent=20L=C3=A9onard?= Date: Sat, 4 May 2019 06:33:23 +0200 Subject: [PATCH 016/828] Add customer code in customer orders documents --- htdocs/core/modules/commande/doc/pdf_einstein.modules.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php index 9d73384cf3a..0aada45f7f0 100644 --- a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php +++ b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php @@ -1320,6 +1320,14 @@ class pdf_einstein extends ModelePDFCommandes $pdf->SetTextColor(0, 0, 60); $pdf->MultiCell(100, 3, $outputlangs->transnoentities("OrderDate")." : " . dol_print_date($object->date, "%d %b %Y", false, $outputlangs, true), '', 'R'); + if ($object->thirdparty->code_client) + { + $posy+=4; + $pdf->SetXY($posx, $posy); + $pdf->SetTextColor(0, 0, 60); + $pdf->MultiCell(100, 3, $outputlangs->transnoentities("CustomerCode")." : " . $outputlangs->transnoentities($object->thirdparty->code_client), '', 'R'); + } + // Get contact if (!empty($conf->global->DOC_SHOW_FIRST_SALES_REP)) { From 9c69c8acc7db9fc27f1dcce206c2e9b2a3691814 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joaqu=C3=ADn?= Date: Sat, 4 May 2019 12:08:28 +0200 Subject: [PATCH 017/828] trying to pass travis check --- htdocs/adherents/card.php | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php index 850537356ee..17ccdb0c546 100644 --- a/htdocs/adherents/card.php +++ b/htdocs/adherents/card.php @@ -1060,17 +1060,16 @@ else // Other attributes include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_add.tpl.php'; //Hooks here - $reshook=$hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook - //print $hookmanager->resPrint; //it double prints? - if (empty($reshook)) - { + $reshook=$hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook + //print $hookmanager->resPrint; //it double prints? + if (empty($reshook)) + { print $object->showOptionals($extrafields, 'edit'); - } - - print ''; + } + + print ''; print "
\n"; - - dol_fiche_end(); + dol_fiche_end(); print '
'; print ''; @@ -1365,12 +1364,12 @@ else // Other attributes include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_add.tpl.php'; //Hooks here - $reshook=$hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook - //print $hookmanager->resPrint; //it double prints? - if (empty($reshook)) - { + $reshook=$hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook + //print $hookmanager->resPrint; //it double prints? + if (empty($reshook)) + { print $object->showOptionals($extrafields, 'edit'); - } + } print ''; dol_fiche_end(); From 11ece5603816221f531c35dbede74d84e61b58a0 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sun, 5 May 2019 19:08:27 +0200 Subject: [PATCH 018/828] NEW add API shipment mode --- htdocs/api/class/api_setup.class.php | 62 ++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/htdocs/api/class/api_setup.class.php b/htdocs/api/class/api_setup.class.php index 783ec6540e3..e3bb7f4a799 100644 --- a/htdocs/api/class/api_setup.class.php +++ b/htdocs/api/class/api_setup.class.php @@ -4,6 +4,7 @@ * Copyright (C) 2017 Regis Houssin * Copyright (C) 2017 Neil Orley * Copyright (C) 2018 Frédéric France + * Copyright (C) 2018 Thibault FOUCART * * * This program is free software; you can redistribute it and/or modify @@ -706,6 +707,67 @@ class Setup extends DolibarrApi return $list; } + + /** + * Get the list of shipping methods. + * + * @param int $limit Number of items per page + * @param int $page Page number {@min 0} + * @param int $active Shipping methodsm is active or not {@min 0} {@max 1} + * @param string $sqlfilters SQL criteria to filter. Syntax example "(t.code:=:'CHQ')" + * + * @url GET dictionary/shipping_methods + * + * @return array List of shipping methods + * + * @throws 400 RestException + * @throws 200 OK + */ + public function getShippingModes($limit = 100, $page = 0, $active = 1, $sqlfilters = '') + { + $list = array(); + + $sql = "SELECT rowid as id, code, libelle as label, description, tracking, module"; + $sql.= " FROM ".MAIN_DB_PREFIX."c_shipment_mode as t"; + $sql.= " WHERE t.entity IN (".getEntity('c_shipment_mode').")"; + $sql.= " AND t.active = ".$active; + // Add sql filters + if ($sqlfilters) + { + if (! DolibarrApi::_checkFilters($sqlfilters)) + { + throw new RestException(400, 'Error when validating parameter sqlfilters '.$sqlfilters); + } + $regexstring='\(([^:\'\(\)]+:[^:\'\(\)]+:[^:\(\)]+)\)'; + $sql.=" AND (".preg_replace_callback('/'.$regexstring.'/', 'DolibarrApi::_forge_criteria_callback', $sqlfilters).")"; + } + + + //$sql.= $this->db->order($sortfield, $sortorder); + + if ($limit) { + if ($page < 0) { + $page = 0; + } + $offset = $limit * $page; + + $sql .= $this->db->plimit($limit, $offset); + } + + $result = $this->db->query($sql); + + if ($result) { + $num = $this->db->num_rows($result); + $min = min($num, ($limit <= 0 ? $num : $limit)); + for ($i = 0; $i < $min; $i++) { + $list[] = $this->db->fetch_object($result); + } + } else { + throw new RestException(400, $this->db->lasterror()); + } + + return $list; + } /** * Get the list of tickets categories. From 15cff25bbc68738e6c11a7d12081fa7842c2f9b0 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sun, 5 May 2019 19:10:39 +0200 Subject: [PATCH 019/828] Update llx_c_shipment_mode.sql --- htdocs/install/mysql/tables/llx_c_shipment_mode.sql | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/install/mysql/tables/llx_c_shipment_mode.sql b/htdocs/install/mysql/tables/llx_c_shipment_mode.sql index 7945c9f9fb0..efacec420c9 100644 --- a/htdocs/install/mysql/tables/llx_c_shipment_mode.sql +++ b/htdocs/install/mysql/tables/llx_c_shipment_mode.sql @@ -19,6 +19,7 @@ create table llx_c_shipment_mode ( rowid integer AUTO_INCREMENT PRIMARY KEY, + entity integer DEFAULT 1 NOT NULL, -- multi company id tms timestamp, code varchar(30) NOT NULL, libelle varchar(50) NOT NULL, From 499798b2e01b725b35027dd94dcc2dadf2bb2340 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sun, 5 May 2019 19:11:18 +0200 Subject: [PATCH 020/828] Update llx_c_shipment_mode.key.sql --- htdocs/install/mysql/tables/llx_c_shipment_mode.key.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/install/mysql/tables/llx_c_shipment_mode.key.sql b/htdocs/install/mysql/tables/llx_c_shipment_mode.key.sql index 15058c0630e..3a90d15330f 100644 --- a/htdocs/install/mysql/tables/llx_c_shipment_mode.key.sql +++ b/htdocs/install/mysql/tables/llx_c_shipment_mode.key.sql @@ -16,5 +16,5 @@ -- -- =================================================================== -ALTER TABLE llx_c_shipment_mode ADD UNIQUE INDEX uk_c_shipment_mode (code); +ALTER TABLE llx_c_shipment_mode ADD UNIQUE INDEX uk_c_shipment_mode (entity, code); From e65c8399e60b0310648bd8368dc48fd0c6428706 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sun, 5 May 2019 19:14:09 +0200 Subject: [PATCH 021/828] Update 9.0.0-10.0.0.sql --- htdocs/install/mysql/migration/9.0.0-10.0.0.sql | 2 ++ 1 file changed, 2 insertions(+) diff --git a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql index e5b925b0d83..2e143209d9a 100644 --- a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql +++ b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql @@ -108,6 +108,8 @@ ALTER TABLE llx_prelevement_facture_demande ADD COLUMN ext_payment_id varchar(12 ALTER TABLE llx_prelevement_facture_demande ADD COLUMN ext_payment_site varchar(128) NULL; -- Fix if table exists +ALTER TABLE llx_c_shipment_mode ADD COLUMN entity integer; + ALTER TABLE llx_c_units DROP INDEX uk_c_units_code; ALTER TABLE llx_c_units ADD COLUMN scale integer; ALTER TABLE llx_c_units ADD COLUMN unit_type varchar(10); From a0ba8d98a1fee2b2d414c4a6ed137e792cfaa755 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sun, 5 May 2019 20:54:31 +0200 Subject: [PATCH 022/828] Update api_setup.class.php --- htdocs/api/class/api_setup.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/api/class/api_setup.class.php b/htdocs/api/class/api_setup.class.php index e3bb7f4a799..78b794a996c 100644 --- a/htdocs/api/class/api_setup.class.php +++ b/htdocs/api/class/api_setup.class.php @@ -4,7 +4,7 @@ * Copyright (C) 2017 Regis Houssin * Copyright (C) 2017 Neil Orley * Copyright (C) 2018 Frédéric France - * Copyright (C) 2018 Thibault FOUCART + * Copyright (C) 2018 Thibault FOUCART * * * This program is free software; you can redistribute it and/or modify @@ -767,7 +767,7 @@ class Setup extends DolibarrApi } return $list; - } + } /** * Get the list of tickets categories. From 2aafef4017b0927b947ba0fd5a26559e8bc6e12c Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Mon, 6 May 2019 10:27:13 +0200 Subject: [PATCH 023/828] NEW add multicurrency rate at currency list API --- htdocs/api/class/api_setup.class.php | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/htdocs/api/class/api_setup.class.php b/htdocs/api/class/api_setup.class.php index 783ec6540e3..8d5d6d581f9 100644 --- a/htdocs/api/class/api_setup.class.php +++ b/htdocs/api/class/api_setup.class.php @@ -448,6 +448,7 @@ class Setup extends DolibarrApi /** * Get the list of currencies. * + * @param int $multicurrency Multicurrency rates (0: no multicurrency, 1: last rate) {@min 0} {@max 1} * @param string $sortfield Sort field * @param string $sortorder Sort order * @param int $limit Number of items per page @@ -460,13 +461,22 @@ class Setup extends DolibarrApi * * @throws RestException */ - public function getListOfCurrencies($sortfield = "code_iso", $sortorder = 'ASC', $limit = 100, $page = 0, $active = 1, $sqlfilters = '') + public function getListOfCurrencies($multicurrency = 0, $sortfield = "code_iso", $sortorder = 'ASC', $limit = 100, $page = 0, $active = 1, $sqlfilters = '') { $list = array(); - //TODO link with multicurrency module $sql = "SELECT t.code_iso, t.label, t.unicode"; + if (!empty($multicurrency)) $sql.= " , cr.date_sync, cr.rate "; $sql.= " FROM ".MAIN_DB_PREFIX."c_currencies as t"; + if (!empty($multicurrency)) { + $sql.= " JOIN ".MAIN_DB_PREFIX."multicurrency as m ON m.code=t.code_iso"; + $sql.= " JOIN ".MAIN_DB_PREFIX."multicurrency_rate as cr ON (m.rowid = cr.fk_multicurrency)"; + } $sql.= " WHERE t.active = ".$active; + if (!empty($multicurrency)) { + $sql.= " AND m.entity IN (".getEntity('multicurrency').")"; + $sql.= " AND cr.date_sync = (SELECT MAX(cr2.date_sync) FROM ".MAIN_DB_PREFIX."multicurrency_rate AS cr2 WHERE cr2.fk_multicurrency = m.rowid)"; + } + // Add sql filters if ($sqlfilters) { From 650fbb2bbf7c8af2a193cb3736e7bff1a9d61d73 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Mon, 6 May 2019 10:55:11 +0200 Subject: [PATCH 024/828] Update api_setup.class.php --- htdocs/api/class/api_setup.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/api/class/api_setup.class.php b/htdocs/api/class/api_setup.class.php index 8d5d6d581f9..386c04cdd9f 100644 --- a/htdocs/api/class/api_setup.class.php +++ b/htdocs/api/class/api_setup.class.php @@ -475,7 +475,7 @@ class Setup extends DolibarrApi if (!empty($multicurrency)) { $sql.= " AND m.entity IN (".getEntity('multicurrency').")"; $sql.= " AND cr.date_sync = (SELECT MAX(cr2.date_sync) FROM ".MAIN_DB_PREFIX."multicurrency_rate AS cr2 WHERE cr2.fk_multicurrency = m.rowid)"; - } + } // Add sql filters if ($sqlfilters) From 80ed080800954f31b35eae42b43bff6ea09dacc6 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Mon, 6 May 2019 11:31:41 +0200 Subject: [PATCH 025/828] Update api_setup.class.php --- htdocs/api/class/api_setup.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/api/class/api_setup.class.php b/htdocs/api/class/api_setup.class.php index 386c04cdd9f..227921889e6 100644 --- a/htdocs/api/class/api_setup.class.php +++ b/htdocs/api/class/api_setup.class.php @@ -448,7 +448,7 @@ class Setup extends DolibarrApi /** * Get the list of currencies. * - * @param int $multicurrency Multicurrency rates (0: no multicurrency, 1: last rate) {@min 0} {@max 1} + * @param int $multicurrency Multicurrency rates (0: no multicurrency, 1: last rate, 2: all rates) {@min 0} {@max 2} * @param string $sortfield Sort field * @param string $sortorder Sort order * @param int $limit Number of items per page @@ -474,7 +474,7 @@ class Setup extends DolibarrApi $sql.= " WHERE t.active = ".$active; if (!empty($multicurrency)) { $sql.= " AND m.entity IN (".getEntity('multicurrency').")"; - $sql.= " AND cr.date_sync = (SELECT MAX(cr2.date_sync) FROM ".MAIN_DB_PREFIX."multicurrency_rate AS cr2 WHERE cr2.fk_multicurrency = m.rowid)"; + if (!empty($multicurrency) && $multicurrecny != 2) $sql.= " AND cr.date_sync = (SELECT MAX(cr2.date_sync) FROM ".MAIN_DB_PREFIX."multicurrency_rate AS cr2 WHERE cr2.fk_multicurrency = m.rowid)"; } // Add sql filters From 96cc4f7774a9aef072c79644ec401d172373b902 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Mon, 6 May 2019 12:37:55 +0200 Subject: [PATCH 026/828] Update api_setup.class.php --- htdocs/api/class/api_setup.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/api/class/api_setup.class.php b/htdocs/api/class/api_setup.class.php index 227921889e6..e72f178cd68 100644 --- a/htdocs/api/class/api_setup.class.php +++ b/htdocs/api/class/api_setup.class.php @@ -474,7 +474,7 @@ class Setup extends DolibarrApi $sql.= " WHERE t.active = ".$active; if (!empty($multicurrency)) { $sql.= " AND m.entity IN (".getEntity('multicurrency').")"; - if (!empty($multicurrency) && $multicurrecny != 2) $sql.= " AND cr.date_sync = (SELECT MAX(cr2.date_sync) FROM ".MAIN_DB_PREFIX."multicurrency_rate AS cr2 WHERE cr2.fk_multicurrency = m.rowid)"; + if (!empty($multicurrency) && $multicurrency != 2) $sql.= " AND cr.date_sync = (SELECT MAX(cr2.date_sync) FROM ".MAIN_DB_PREFIX."multicurrency_rate AS cr2 WHERE cr2.fk_multicurrency = m.rowid)"; } // Add sql filters From 77d3f221631a1a92e7c27c82126c33f505eea90c Mon Sep 17 00:00:00 2001 From: ATM-Nicolas Date: Mon, 6 May 2019 11:21:39 +0200 Subject: [PATCH 027/828] NEW : Amount invoiced column in propal list --- htdocs/comm/propal/list.php | 30 ++++++++++++++++++++++++++++++ htdocs/langs/fr_FR/main.lang | 1 + 2 files changed, 31 insertions(+) diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php index 24c53d26526..7355ea83269 100644 --- a/htdocs/comm/propal/list.php +++ b/htdocs/comm/propal/list.php @@ -160,6 +160,7 @@ $arrayfields=array( 'p.total_ht'=>array('label'=>$langs->trans("AmountHT"), 'checked'=>1), 'p.total_vat'=>array('label'=>$langs->trans("AmountVAT"), 'checked'=>0), 'p.total_ttc'=>array('label'=>$langs->trans("AmountTTC"), 'checked'=>0), + 'p.total_invoiced'=>array('label'=>$langs->trans("AmountInvoicedTTC"), 'checked'=>0), 'u.login'=>array('label'=>$langs->trans("Author"), 'checked'=>1, 'position'=>10), 'sale_representative'=>array('label'=>$langs->trans("SaleRepresentativesOfThirdParty"), 'checked'=>1), 'p.datec'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0, 'position'=>500), @@ -637,6 +638,12 @@ if ($resql) print ''; print ''; } + if (! empty($arrayfields['p.total_invoiced']['checked'])) + { + // Amount invoiced + print ''; + print ''; + } if (! empty($arrayfields['u.login']['checked'])) { // Author @@ -701,6 +708,7 @@ if ($resql) if (! empty($arrayfields['p.total_ht']['checked'])) print_liste_field_titre($arrayfields['p.total_ht']['label'], $_SERVER["PHP_SELF"], 'p.total_ht', '', $param, 'class="right"', $sortfield, $sortorder); if (! empty($arrayfields['p.total_vat']['checked'])) print_liste_field_titre($arrayfields['p.total_vat']['label'], $_SERVER["PHP_SELF"], 'p.tva', '', $param, 'class="right"', $sortfield, $sortorder); if (! empty($arrayfields['p.total_ttc']['checked'])) print_liste_field_titre($arrayfields['p.total_ttc']['label'], $_SERVER["PHP_SELF"], 'p.total', '', $param, 'class="right"', $sortfield, $sortorder); + if (! empty($arrayfields['p.total_invoiced']['checked'])) print_liste_field_titre($arrayfields['p.total_invoiced']['label'], $_SERVER["PHP_SELF"], 'p.total', '', $param, 'class="right"', $sortfield, $sortorder); if (! empty($arrayfields['u.login']['checked'])) print_liste_field_titre($arrayfields['u.login']['label'], $_SERVER["PHP_SELF"], 'u.login', '', $param, 'align="center"', $sortfield, $sortorder); if (! empty($arrayfields['sale_representative']['checked'])) print_liste_field_titre($arrayfields['sale_representative']['label'], $_SERVER["PHP_SELF"], "", "", "$param", '', $sortfield, $sortorder); // Extra fields @@ -911,6 +919,27 @@ if ($resql) if (! $i) $totalarray['totalttcfield']=$totalarray['nbfield']; $totalarray['totalttc'] += $obj->total_ttc; } + // Amount invoiced + if(! empty($arrayfields['p.total_invoiced']['checked'])) { + $totalInvoiced = 0; + $p = new Propal($db); + $TInvoiceData = $p->InvoiceArrayList($obj->rowid); + + if(! empty($TInvoiceData)) { + foreach($TInvoiceData as $invoiceData) { + $invoice = new Facture($db); + $invoice->fetch($invoiceData->facid); + + if(! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS) && $invoice->type == Facture::TYPE_DEPOSIT) continue; + $totalInvoiced += $invoice->total_ttc; + } + } + + print ''.price($totalInvoiced)."\n"; + if (! $i) $totalarray['nbfield']++; + if (! $i) $totalarray['totalinvoicedfield']=$totalarray['nbfield']; + $totalarray['totalinvoiced'] += $totalInvoiced; + } $userstatic->id=$obj->fk_user_author; $userstatic->login=$obj->login; @@ -1037,6 +1066,7 @@ if ($resql) elseif ($totalarray['totalhtfield'] == $i) print ''.price($totalarray['totalht']).''; elseif ($totalarray['totalvatfield'] == $i) print ''.price($totalarray['totalvat']).''; elseif ($totalarray['totalttcfield'] == $i) print ''.price($totalarray['totalttc']).''; + elseif ($totalarray['totalinvoicedfield'] == $i) print ''.price($totalarray['totalinvoiced']).''; elseif ($totalarray['totalizable']) { $printed = false; foreach ($totalarray['totalizable'] as $totalizable) { diff --git a/htdocs/langs/fr_FR/main.lang b/htdocs/langs/fr_FR/main.lang index 552c3334bbe..22e6914dcd9 100644 --- a/htdocs/langs/fr_FR/main.lang +++ b/htdocs/langs/fr_FR/main.lang @@ -347,6 +347,7 @@ PriceUTTC=P.U TTC Amount=Montant AmountInvoice=Montant facture AmountInvoiced=Montant facturé +AmountInvoicedTTC=Montant TTC facturé AmountPayment=Montant paiement AmountHTShort=Montant HT AmountTTCShort=Montant TTC From 53b1dec317f9b8bee27e39437916f899021cbd37 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 8 May 2019 01:56:52 +0200 Subject: [PATCH 028/828] Update 9.0.0-10.0.0.sql --- htdocs/install/mysql/migration/9.0.0-10.0.0.sql | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql index 2e143209d9a..66839713bb7 100644 --- a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql +++ b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql @@ -107,9 +107,11 @@ ALTER TABLE llx_prelevement_facture_demande ADD COLUMN sourcetype varchar(32); ALTER TABLE llx_prelevement_facture_demande ADD COLUMN ext_payment_id varchar(128) NULL; ALTER TABLE llx_prelevement_facture_demande ADD COLUMN ext_payment_site varchar(128) NULL; --- Fix if table exists -ALTER TABLE llx_c_shipment_mode ADD COLUMN entity integer; +ALTER TABLE llx_c_shipment_mode ADD COLUMN entity integer DEFAULT 1; +ALTER TABLE llx_c_shipment_mode DROP INDEX uk_c_shipment_mode; +ALTER TABLE llx_c_shipment_mode ADD UNIQUE INDEX uk_c_shipment_mode (entity, code); +-- Fix if table exists ALTER TABLE llx_c_units DROP INDEX uk_c_units_code; ALTER TABLE llx_c_units ADD COLUMN scale integer; ALTER TABLE llx_c_units ADD COLUMN unit_type varchar(10); From 249893a4ab1774b55fb8bf4e066aebb962ba450a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 8 May 2019 01:57:23 +0200 Subject: [PATCH 029/828] Update 9.0.0-10.0.0.sql --- htdocs/install/mysql/migration/9.0.0-10.0.0.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql index 66839713bb7..43e12c6c05f 100644 --- a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql +++ b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql @@ -109,7 +109,7 @@ ALTER TABLE llx_prelevement_facture_demande ADD COLUMN ext_payment_site varchar( ALTER TABLE llx_c_shipment_mode ADD COLUMN entity integer DEFAULT 1; ALTER TABLE llx_c_shipment_mode DROP INDEX uk_c_shipment_mode; -ALTER TABLE llx_c_shipment_mode ADD UNIQUE INDEX uk_c_shipment_mode (entity, code); +ALTER TABLE llx_c_shipment_mode ADD UNIQUE INDEX uk_c_shipment_mode (code, entity); -- Fix if table exists ALTER TABLE llx_c_units DROP INDEX uk_c_units_code; From 95bb8a1f755f323fef09be8a8f6129a3951ef612 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 8 May 2019 01:57:39 +0200 Subject: [PATCH 030/828] Update llx_c_shipment_mode.key.sql --- htdocs/install/mysql/tables/llx_c_shipment_mode.key.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/install/mysql/tables/llx_c_shipment_mode.key.sql b/htdocs/install/mysql/tables/llx_c_shipment_mode.key.sql index 3a90d15330f..a75dfaf2740 100644 --- a/htdocs/install/mysql/tables/llx_c_shipment_mode.key.sql +++ b/htdocs/install/mysql/tables/llx_c_shipment_mode.key.sql @@ -16,5 +16,5 @@ -- -- =================================================================== -ALTER TABLE llx_c_shipment_mode ADD UNIQUE INDEX uk_c_shipment_mode (entity, code); +ALTER TABLE llx_c_shipment_mode ADD UNIQUE INDEX uk_c_shipment_mode (code, entity); From c4fdec9481c3469dcae8f0622abc127ab09eda58 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 8 May 2019 02:05:03 +0200 Subject: [PATCH 031/828] Update api_setup.class.php --- htdocs/api/class/api_setup.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/api/class/api_setup.class.php b/htdocs/api/class/api_setup.class.php index e72f178cd68..57aac1b3bb0 100644 --- a/htdocs/api/class/api_setup.class.php +++ b/htdocs/api/class/api_setup.class.php @@ -448,7 +448,7 @@ class Setup extends DolibarrApi /** * Get the list of currencies. * - * @param int $multicurrency Multicurrency rates (0: no multicurrency, 1: last rate, 2: all rates) {@min 0} {@max 2} + * @param int $multicurrency Multicurrency rates (0: no multicurrency, 1: last rate, 2: all rates) {@min 0} {@max 2} * @param string $sortfield Sort field * @param string $sortorder Sort order * @param int $limit Number of items per page From 3dbfc08a1353c66d81c368f850cd5149b0250420 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Fri, 10 May 2019 12:24:02 +0200 Subject: [PATCH 032/828] NEW add "printBucktrackInfo" hook, an external module can add info --- ChangeLog | 1 + htdocs/main.inc.php | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/ChangeLog b/ChangeLog index 355d9baa561..4e36f831197 100644 --- a/ChangeLog +++ b/ChangeLog @@ -14,6 +14,7 @@ FIX: Disallow line start date if after end date. For Developers: NEW: Module "DebugBar" is available as a stable module. +NEW: add "printBucktrackInfo" hook, an external module can add info WARNING: diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index f195d5f945e..2f3455f7631 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -2030,6 +2030,16 @@ function left_menu($menu_array_before, $helppagename = '', $notused = '', $menu_ $bugbaseurl.= urlencode("- **PHP**: " . php_sapi_name() . ' ' . phpversion() . "\n"); $bugbaseurl.= urlencode("- **Database**: " . $db::LABEL . ' ' . $db->getVersion() . "\n"); $bugbaseurl.= urlencode("- **URL**: " . $_SERVER["REQUEST_URI"] . "\n"); + + // Execute hook printBugtrackInfo + $parameters=array('searchform'=>$searchform); + $reshook=$hookmanager->executeHooks('printBugtrackInfo', $parameters); // Note that $action and $object may have been modified by some hooks + if (empty($reshook)) + { + $bugbaseurl.=$hookmanager->resPrint; + } + else $bugbaseurl=$hookmanager->resPrint; + $bugbaseurl.= urlencode("\n"); $bugbaseurl.= urlencode("## Report\n"); print '
'; From a91b462a898cb871fe7e91c886194853b42c7128 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Fri, 10 May 2019 12:28:27 +0200 Subject: [PATCH 033/828] FIX wrong parameter --- htdocs/main.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 2f3455f7631..7dc8df05499 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -2032,7 +2032,7 @@ function left_menu($menu_array_before, $helppagename = '', $notused = '', $menu_ $bugbaseurl.= urlencode("- **URL**: " . $_SERVER["REQUEST_URI"] . "\n"); // Execute hook printBugtrackInfo - $parameters=array('searchform'=>$searchform); + $parameters=array('bugbaseurl'=>$bugbaseurl); $reshook=$hookmanager->executeHooks('printBugtrackInfo', $parameters); // Note that $action and $object may have been modified by some hooks if (empty($reshook)) { From d4e2fab9834ab10bcd9be6b90f8b4c4aba8d74df Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Mon, 13 May 2019 22:25:15 +0200 Subject: [PATCH 034/828] Replace term "Advanced accountancy" by Accountancy (Double entries) --- htdocs/accountancy/admin/account.php | 2 +- htdocs/accountancy/admin/accountmodel.php | 2 +- htdocs/accountancy/admin/card.php | 2 +- htdocs/accountancy/admin/categories.php | 2 +- htdocs/accountancy/admin/closure.php | 2 +- htdocs/accountancy/admin/defaultaccounts.php | 2 +- htdocs/accountancy/admin/export.php | 2 +- htdocs/accountancy/admin/fiscalyear.php | 2 +- htdocs/accountancy/admin/fiscalyear_card.php | 2 +- htdocs/accountancy/admin/fiscalyear_info.php | 2 +- htdocs/accountancy/admin/index.php | 2 +- htdocs/accountancy/admin/journals_list.php | 2 +- htdocs/accountancy/admin/productaccount.php | 2 +- htdocs/accountancy/bookkeeping/balance.php | 2 +- htdocs/accountancy/bookkeeping/balancebymonth.php | 2 +- htdocs/accountancy/bookkeeping/card.php | 2 +- htdocs/accountancy/bookkeeping/list.php | 7 +++++-- htdocs/accountancy/bookkeeping/listbyaccount.php | 2 +- .../bookkeeping/thirdparty_lettering_supplier.php | 2 +- htdocs/accountancy/class/accountancycategory.class.php | 2 +- htdocs/accountancy/class/accountancyexport.class.php | 2 +- htdocs/accountancy/class/accountancysystem.class.php | 2 +- htdocs/accountancy/class/accountingaccount.class.php | 2 +- htdocs/accountancy/class/accountingjournal.class.php | 2 +- htdocs/accountancy/class/bookkeeping.class.php | 2 +- htdocs/accountancy/class/lettering.class.php | 2 +- htdocs/accountancy/customer/card.php | 2 +- htdocs/accountancy/customer/index.php | 2 +- htdocs/accountancy/customer/lines.php | 2 +- htdocs/accountancy/customer/list.php | 2 +- htdocs/accountancy/expensereport/card.php | 2 +- htdocs/accountancy/expensereport/index.php | 2 +- htdocs/accountancy/expensereport/lines.php | 2 +- htdocs/accountancy/expensereport/list.php | 2 +- htdocs/accountancy/index.php | 2 +- htdocs/accountancy/journal/bankjournal.php | 2 +- htdocs/accountancy/journal/expensereportsjournal.php | 2 +- htdocs/accountancy/journal/purchasesjournal.php | 2 +- htdocs/accountancy/journal/sellsjournal.php | 2 +- htdocs/accountancy/supplier/card.php | 2 +- htdocs/accountancy/supplier/index.php | 2 +- htdocs/accountancy/supplier/lines.php | 2 +- htdocs/accountancy/supplier/list.php | 2 +- 43 files changed, 47 insertions(+), 44 deletions(-) diff --git a/htdocs/accountancy/admin/account.php b/htdocs/accountancy/admin/account.php index 9d4f4b68370..1a42b927506 100644 --- a/htdocs/accountancy/admin/account.php +++ b/htdocs/accountancy/admin/account.php @@ -19,7 +19,7 @@ /** * \file htdocs/accountancy/admin/account.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief List accounting account */ diff --git a/htdocs/accountancy/admin/accountmodel.php b/htdocs/accountancy/admin/accountmodel.php index 6404b6119e7..f44ff0071d2 100644 --- a/htdocs/accountancy/admin/accountmodel.php +++ b/htdocs/accountancy/admin/accountmodel.php @@ -28,7 +28,7 @@ /** * \file htdocs/accountancy/admin/accountmodel.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief Page to administer model of chart of accounts */ diff --git a/htdocs/accountancy/admin/card.php b/htdocs/accountancy/admin/card.php index 6d43f01b03f..a6c3969e64a 100644 --- a/htdocs/accountancy/admin/card.php +++ b/htdocs/accountancy/admin/card.php @@ -19,7 +19,7 @@ /** * \file htdocs/accountancy/admin/card.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief Card of accounting account */ diff --git a/htdocs/accountancy/admin/categories.php b/htdocs/accountancy/admin/categories.php index faba7fb1c62..17fa65d4f5e 100644 --- a/htdocs/accountancy/admin/categories.php +++ b/htdocs/accountancy/admin/categories.php @@ -18,7 +18,7 @@ /** * \file htdocs/accountancy/admin/categories.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief Page to assign mass categories to accounts */ diff --git a/htdocs/accountancy/admin/closure.php b/htdocs/accountancy/admin/closure.php index ff559332316..a638d598ac9 100644 --- a/htdocs/accountancy/admin/closure.php +++ b/htdocs/accountancy/admin/closure.php @@ -18,7 +18,7 @@ /** * \file htdocs/accountancy/admin/closure.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief Setup page to configure accounting expert module */ require '../../main.inc.php'; diff --git a/htdocs/accountancy/admin/defaultaccounts.php b/htdocs/accountancy/admin/defaultaccounts.php index 4ea9ff9139a..cba9ac92f3b 100644 --- a/htdocs/accountancy/admin/defaultaccounts.php +++ b/htdocs/accountancy/admin/defaultaccounts.php @@ -24,7 +24,7 @@ /** * \file htdocs/accountancy/admin/defaultaccounts.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief Setup page to configure accounting expert module */ require '../../main.inc.php'; diff --git a/htdocs/accountancy/admin/export.php b/htdocs/accountancy/admin/export.php index 15e455cf84c..74090e54120 100644 --- a/htdocs/accountancy/admin/export.php +++ b/htdocs/accountancy/admin/export.php @@ -23,7 +23,7 @@ /** * \file htdocs/accountancy/admin/export.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief Setup page to configure accounting expert module */ require '../../main.inc.php'; diff --git a/htdocs/accountancy/admin/fiscalyear.php b/htdocs/accountancy/admin/fiscalyear.php index df2dec9d3b1..47211087956 100644 --- a/htdocs/accountancy/admin/fiscalyear.php +++ b/htdocs/accountancy/admin/fiscalyear.php @@ -17,7 +17,7 @@ /** * \file htdocs/accountancy/admin/fiscalyear.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief Setup page to configure fiscal year */ diff --git a/htdocs/accountancy/admin/fiscalyear_card.php b/htdocs/accountancy/admin/fiscalyear_card.php index 4063e28f369..5dc6010d465 100644 --- a/htdocs/accountancy/admin/fiscalyear_card.php +++ b/htdocs/accountancy/admin/fiscalyear_card.php @@ -18,7 +18,7 @@ /** * \file htdocs/accountancy/admin/fiscalyear_card.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief Page to show a fiscal year */ diff --git a/htdocs/accountancy/admin/fiscalyear_info.php b/htdocs/accountancy/admin/fiscalyear_info.php index 86b01fa7397..dfec49949a3 100644 --- a/htdocs/accountancy/admin/fiscalyear_info.php +++ b/htdocs/accountancy/admin/fiscalyear_info.php @@ -17,7 +17,7 @@ /** * \file htdocs/accountancy/admin/fiscalyear_info.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief Page to show info of a fiscal year */ diff --git a/htdocs/accountancy/admin/index.php b/htdocs/accountancy/admin/index.php index 965b63ba9b9..fefa081848e 100644 --- a/htdocs/accountancy/admin/index.php +++ b/htdocs/accountancy/admin/index.php @@ -24,7 +24,7 @@ /** * \file htdocs/accountancy/admin/index.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief Setup page to configure accounting expert module */ diff --git a/htdocs/accountancy/admin/journals_list.php b/htdocs/accountancy/admin/journals_list.php index c48e1a5989d..cac81bfbcae 100644 --- a/htdocs/accountancy/admin/journals_list.php +++ b/htdocs/accountancy/admin/journals_list.php @@ -18,7 +18,7 @@ /** * \file htdocs/accountancy/admin/journals_list.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief Setup page to configure journals */ diff --git a/htdocs/accountancy/admin/productaccount.php b/htdocs/accountancy/admin/productaccount.php index 80c2ed052c0..4d5561e3aca 100644 --- a/htdocs/accountancy/admin/productaccount.php +++ b/htdocs/accountancy/admin/productaccount.php @@ -21,7 +21,7 @@ /** * \file htdocs/accountancy/admin/productaccount.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief To define accounting account on product / service */ require '../../main.inc.php'; diff --git a/htdocs/accountancy/bookkeeping/balance.php b/htdocs/accountancy/bookkeeping/balance.php index 6d2c7644d85..44a12b76f36 100644 --- a/htdocs/accountancy/bookkeeping/balance.php +++ b/htdocs/accountancy/bookkeeping/balance.php @@ -21,7 +21,7 @@ /** * \file htdocs/accountancy/bookkeeping/balance.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief Balance of book keeping */ diff --git a/htdocs/accountancy/bookkeeping/balancebymonth.php b/htdocs/accountancy/bookkeeping/balancebymonth.php index edf7383b595..b9568228a36 100644 --- a/htdocs/accountancy/bookkeeping/balancebymonth.php +++ b/htdocs/accountancy/bookkeeping/balancebymonth.php @@ -21,7 +21,7 @@ /** * \file htdocs/accountancy/bookkeeping/balancebymonth.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief Balance by month */ require '../../main.inc.php'; diff --git a/htdocs/accountancy/bookkeeping/card.php b/htdocs/accountancy/bookkeeping/card.php index 8974b65a68f..24a0e9605a4 100644 --- a/htdocs/accountancy/bookkeeping/card.php +++ b/htdocs/accountancy/bookkeeping/card.php @@ -21,7 +21,7 @@ /** * \file htdocs/accountancy/bookkeeping/card.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief Page to show book-entry */ diff --git a/htdocs/accountancy/bookkeeping/list.php b/htdocs/accountancy/bookkeeping/list.php index 207ea3464d8..7df29416878 100644 --- a/htdocs/accountancy/bookkeeping/list.php +++ b/htdocs/accountancy/bookkeeping/list.php @@ -1,7 +1,7 @@ * Copyright (C) 2013-2016 Florian Henry - * Copyright (C) 2013-2018 Alexandre Spangaro + * Copyright (C) 2013-2019 Alexandre Spangaro * Copyright (C) 2016-2017 Laurent Destailleur * Copyright (C) 2018 Frédéric France * @@ -21,7 +21,7 @@ /** * \file htdocs/accountancy/bookkeeping/list.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief List operation of book keeping */ require '../../main.inc.php'; @@ -47,6 +47,9 @@ $search_date_creation_start = dol_mktime(0, 0, 0, GETPOST('date_creation_startmo $search_date_creation_end = dol_mktime(0, 0, 0, GETPOST('date_creation_endmonth', 'int'), GETPOST('date_creation_endday', 'int'), GETPOST('date_creation_endyear', 'int')); $search_date_modification_start = dol_mktime(0, 0, 0, GETPOST('date_modification_startmonth', 'int'), GETPOST('date_modification_startday', 'int'), GETPOST('date_modification_startyear', 'int')); $search_date_modification_end = dol_mktime(0, 0, 0, GETPOST('date_modification_endmonth', 'int'), GETPOST('date_modification_endday', 'int'), GETPOST('date_modification_endyear', 'int')); +$search_date_export_start = dol_mktime(0, 0, 0, GETPOST('date_export_startmonth', 'int'), GETPOST('date_export_startday', 'int'), GETPOST('date_export_startyear', 'int')); +$search_date_export_end = dol_mktime(0, 0, 0, GETPOST('date_export_endmonth', 'int'), GETPOST('date_export_endday', 'int'), GETPOST('date_export_endyear', 'int')); + //var_dump($search_date_start);exit; if (GETPOST("button_delmvt_x") || GETPOST("button_delmvt.x") || GETPOST("button_delmvt")) { $action = 'delbookkeepingyear'; diff --git a/htdocs/accountancy/bookkeeping/listbyaccount.php b/htdocs/accountancy/bookkeeping/listbyaccount.php index 38dc49c5bf6..7b57f443ef9 100644 --- a/htdocs/accountancy/bookkeeping/listbyaccount.php +++ b/htdocs/accountancy/bookkeeping/listbyaccount.php @@ -21,7 +21,7 @@ /** * \file htdocs/accountancy/bookkeeping/listbyaccount.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief List operation of book keeping ordered by account number */ diff --git a/htdocs/accountancy/bookkeeping/thirdparty_lettering_supplier.php b/htdocs/accountancy/bookkeeping/thirdparty_lettering_supplier.php index 50b80c72338..87bd79bb64d 100644 --- a/htdocs/accountancy/bookkeeping/thirdparty_lettering_supplier.php +++ b/htdocs/accountancy/bookkeeping/thirdparty_lettering_supplier.php @@ -22,7 +22,7 @@ /** * \file htdocs/accountancy/bookkeeping/thirdparty_lettrage_supplier.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief Tab to setup lettering */ require '../../main.inc.php'; diff --git a/htdocs/accountancy/class/accountancycategory.class.php b/htdocs/accountancy/class/accountancycategory.class.php index 523fba7acda..f11ff3957f7 100644 --- a/htdocs/accountancy/class/accountancycategory.class.php +++ b/htdocs/accountancy/class/accountancycategory.class.php @@ -19,7 +19,7 @@ /** * \file htdocs/accountancy/class/accountancycategory.class.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief File of class to manage categories of an accounting category_type */ diff --git a/htdocs/accountancy/class/accountancyexport.class.php b/htdocs/accountancy/class/accountancyexport.class.php index 344a45f19fc..5da52e05784 100644 --- a/htdocs/accountancy/class/accountancyexport.class.php +++ b/htdocs/accountancy/class/accountancyexport.class.php @@ -27,7 +27,7 @@ /** * \file htdocs/accountancy/class/accountancyexport.class.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief Class accountancy export */ diff --git a/htdocs/accountancy/class/accountancysystem.class.php b/htdocs/accountancy/class/accountancysystem.class.php index c8a855c0d8a..102ee4cce61 100644 --- a/htdocs/accountancy/class/accountancysystem.class.php +++ b/htdocs/accountancy/class/accountancysystem.class.php @@ -19,7 +19,7 @@ /** * \file htdocs/accountancy/class/accountancysystem.class.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief File of class to manage accountancy systems */ diff --git a/htdocs/accountancy/class/accountingaccount.class.php b/htdocs/accountancy/class/accountingaccount.class.php index 33f8990bc8d..dc5d8eab77d 100644 --- a/htdocs/accountancy/class/accountingaccount.class.php +++ b/htdocs/accountancy/class/accountingaccount.class.php @@ -22,7 +22,7 @@ /** * \file htdocs/accountancy/class/accountingaccount.class.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief File of class to manage accounting accounts */ diff --git a/htdocs/accountancy/class/accountingjournal.class.php b/htdocs/accountancy/class/accountingjournal.class.php index eb99badd5f3..e8caaab8a89 100644 --- a/htdocs/accountancy/class/accountingjournal.class.php +++ b/htdocs/accountancy/class/accountingjournal.class.php @@ -17,7 +17,7 @@ /** * \file htdocs/accountancy/class/accountingjournal.class.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief File of class to manage accounting journals */ diff --git a/htdocs/accountancy/class/bookkeeping.class.php b/htdocs/accountancy/class/bookkeeping.class.php index 3c985d325bc..c1df8b1045c 100644 --- a/htdocs/accountancy/class/bookkeeping.class.php +++ b/htdocs/accountancy/class/bookkeeping.class.php @@ -20,7 +20,7 @@ /** * \file htdocs/accountancy/class/bookkeeping.class.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief File of class to manage Ledger (General Ledger and Subledger) */ diff --git a/htdocs/accountancy/class/lettering.class.php b/htdocs/accountancy/class/lettering.class.php index 555e1a244a6..a0c977a8d5a 100644 --- a/htdocs/accountancy/class/lettering.class.php +++ b/htdocs/accountancy/class/lettering.class.php @@ -20,7 +20,7 @@ /** * \file htdocs/accountancy/class/lettering.class.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief File of class for lettering */ diff --git a/htdocs/accountancy/customer/card.php b/htdocs/accountancy/customer/card.php index 5c1dfc5ccbb..eb66b235d0b 100644 --- a/htdocs/accountancy/customer/card.php +++ b/htdocs/accountancy/customer/card.php @@ -19,7 +19,7 @@ /** * \file htdocs/accountancy/customer/card.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief Card customer ventilation */ require '../../main.inc.php'; diff --git a/htdocs/accountancy/customer/index.php b/htdocs/accountancy/customer/index.php index aa8161b9c52..1086800e355 100644 --- a/htdocs/accountancy/customer/index.php +++ b/htdocs/accountancy/customer/index.php @@ -22,7 +22,7 @@ /** * \file htdocs/accountancy/customer/index.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief Home customer journalization page */ diff --git a/htdocs/accountancy/customer/lines.php b/htdocs/accountancy/customer/lines.php index f7a53c9e210..2801e234486 100644 --- a/htdocs/accountancy/customer/lines.php +++ b/htdocs/accountancy/customer/lines.php @@ -21,7 +21,7 @@ /** * \file htdocs/accountancy/customer/lines.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief Page of detail of the lines of ventilation of invoices customers */ require '../../main.inc.php'; diff --git a/htdocs/accountancy/customer/list.php b/htdocs/accountancy/customer/list.php index 4b3906d60da..90bb9574961 100644 --- a/htdocs/accountancy/customer/list.php +++ b/htdocs/accountancy/customer/list.php @@ -22,7 +22,7 @@ /** * \file htdocs/accountancy/customer/list.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief Ventilation page from customers invoices */ require '../../main.inc.php'; diff --git a/htdocs/accountancy/expensereport/card.php b/htdocs/accountancy/expensereport/card.php index eb620d7bf14..1052a1d485d 100644 --- a/htdocs/accountancy/expensereport/card.php +++ b/htdocs/accountancy/expensereport/card.php @@ -23,7 +23,7 @@ */ /** * \file htdocs/accountancy/supplier/card.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief Card expense report ventilation */ require '../../main.inc.php'; diff --git a/htdocs/accountancy/expensereport/index.php b/htdocs/accountancy/expensereport/index.php index e350a3011a0..f5e71082bfa 100644 --- a/htdocs/accountancy/expensereport/index.php +++ b/htdocs/accountancy/expensereport/index.php @@ -20,7 +20,7 @@ /** * \file htdocs/accountancy/expensereport/index.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief Home expense report ventilation */ diff --git a/htdocs/accountancy/expensereport/lines.php b/htdocs/accountancy/expensereport/lines.php index 3a322c07ef3..30734bb803b 100644 --- a/htdocs/accountancy/expensereport/lines.php +++ b/htdocs/accountancy/expensereport/lines.php @@ -21,7 +21,7 @@ /** * \file htdocs/accountancy/expensereport/lines.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief Page of detail of the lines of ventilation of expense reports */ require '../../main.inc.php'; diff --git a/htdocs/accountancy/expensereport/list.php b/htdocs/accountancy/expensereport/list.php index 4f037f3c72b..ffb9297626b 100644 --- a/htdocs/accountancy/expensereport/list.php +++ b/htdocs/accountancy/expensereport/list.php @@ -22,7 +22,7 @@ /** * \file htdocs/accountancy/expensereport/list.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief Ventilation page from expense reports */ require '../../main.inc.php'; diff --git a/htdocs/accountancy/index.php b/htdocs/accountancy/index.php index b34efe5ea04..922f1285b3c 100644 --- a/htdocs/accountancy/index.php +++ b/htdocs/accountancy/index.php @@ -18,7 +18,7 @@ /** * \file htdocs/accountancy/index.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief Home accounting module */ diff --git a/htdocs/accountancy/journal/bankjournal.php b/htdocs/accountancy/journal/bankjournal.php index 275af10701d..49e76c51dde 100644 --- a/htdocs/accountancy/journal/bankjournal.php +++ b/htdocs/accountancy/journal/bankjournal.php @@ -27,7 +27,7 @@ /** * \file htdocs/accountancy/journal/bankjournal.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief Page with bank journal */ require '../../main.inc.php'; diff --git a/htdocs/accountancy/journal/expensereportsjournal.php b/htdocs/accountancy/journal/expensereportsjournal.php index 30ed5a07207..fcb0ac8713f 100644 --- a/htdocs/accountancy/journal/expensereportsjournal.php +++ b/htdocs/accountancy/journal/expensereportsjournal.php @@ -25,7 +25,7 @@ /** * \file htdocs/accountancy/journal/expensereportsjournal.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief Page with expense reports journal */ require '../../main.inc.php'; diff --git a/htdocs/accountancy/journal/purchasesjournal.php b/htdocs/accountancy/journal/purchasesjournal.php index 6bbc4ad9c62..f23bc48c134 100644 --- a/htdocs/accountancy/journal/purchasesjournal.php +++ b/htdocs/accountancy/journal/purchasesjournal.php @@ -25,7 +25,7 @@ /** * \file htdocs/accountancy/journal/purchasesjournal.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief Page with purchases journal */ require '../../main.inc.php'; diff --git a/htdocs/accountancy/journal/sellsjournal.php b/htdocs/accountancy/journal/sellsjournal.php index 25c53863162..ac36238af6e 100644 --- a/htdocs/accountancy/journal/sellsjournal.php +++ b/htdocs/accountancy/journal/sellsjournal.php @@ -26,7 +26,7 @@ /** * \file htdocs/accountancy/journal/sellsjournal.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief Page with sells journal */ diff --git a/htdocs/accountancy/supplier/card.php b/htdocs/accountancy/supplier/card.php index 10e52d6c029..97f7d618ce8 100644 --- a/htdocs/accountancy/supplier/card.php +++ b/htdocs/accountancy/supplier/card.php @@ -23,7 +23,7 @@ */ /** * \file htdocs/accountancy/supplier/card.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief Card supplier ventilation */ require '../../main.inc.php'; diff --git a/htdocs/accountancy/supplier/index.php b/htdocs/accountancy/supplier/index.php index ab85507a7b4..95bcc15b9fd 100644 --- a/htdocs/accountancy/supplier/index.php +++ b/htdocs/accountancy/supplier/index.php @@ -20,7 +20,7 @@ /** * \file htdocs/accountancy/supplier/index.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief Home supplier journalization page */ diff --git a/htdocs/accountancy/supplier/lines.php b/htdocs/accountancy/supplier/lines.php index 4af51060b4b..7752d8355f0 100644 --- a/htdocs/accountancy/supplier/lines.php +++ b/htdocs/accountancy/supplier/lines.php @@ -21,7 +21,7 @@ /** * \file htdocs/accountancy/supplier/lines.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief Page of detail of the lines of ventilation of invoices suppliers */ require '../../main.inc.php'; diff --git a/htdocs/accountancy/supplier/list.php b/htdocs/accountancy/supplier/list.php index 27cccdb7eb2..c6480c6d6eb 100644 --- a/htdocs/accountancy/supplier/list.php +++ b/htdocs/accountancy/supplier/list.php @@ -22,7 +22,7 @@ /** * \file htdocs/accountancy/supplier/list.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief Ventilation page from suppliers invoices */ require '../../main.inc.php'; From 7c9ccee64d21634b3a364cdb2bc0d5ec780f0c8c Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Tue, 14 May 2019 05:45:36 +0200 Subject: [PATCH 035/828] NEW Accountancy - Differentiated export --- htdocs/accountancy/bookkeeping/list.php | 66 +++++++++++++++++-- .../accountancy/class/bookkeeping.class.php | 23 ++++--- .../install/mysql/migration/9.0.0-10.0.0.sql | 2 + .../tables/llx_accounting_bookkeeping.sql | 5 +- htdocs/langs/en_US/main.lang | 1 + 5 files changed, 80 insertions(+), 17 deletions(-) diff --git a/htdocs/accountancy/bookkeeping/list.php b/htdocs/accountancy/bookkeeping/list.php index 7df29416878..ac9811c687c 100644 --- a/htdocs/accountancy/bookkeeping/list.php +++ b/htdocs/accountancy/bookkeeping/list.php @@ -146,6 +146,7 @@ $arrayfields=array( 't.code_journal'=>array('label'=>$langs->trans("Codejournal"), 'checked'=>1), 't.date_creation'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0), 't.tms'=>array('label'=>$langs->trans("DateModification"), 'checked'=>0), + 't.date_export'=>array('label'=>$langs->trans("DateExport"), 'checked'=>0), ); if (empty($conf->global->ACCOUNTING_ENABLE_LETTERING)) unset($arrayfields['t.lettering_code']); @@ -181,6 +182,8 @@ if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x' $search_date_creation_end = ''; $search_date_modification_start = ''; $search_date_modification_end = ''; + $search_date_export_start = ''; + $search_date_export_end = ''; $search_debit = ''; $search_credit = ''; $search_lettering_code = ''; @@ -272,6 +275,16 @@ if (! empty($search_date_modification_end)) { $tmp=dol_getdate($search_date_modification_end); $param .= '&date_modification_endmonth=' . $tmp['mon'] . '&date_modification_endday=' . $tmp['mday'] . '&date_modification_endyear=' . $tmp['year']; } +if (! empty($search_date_export_start)) { + $filter['t.date_export>='] = $search_date_export_start; + $tmp=dol_getdate($search_date_export_start); + $param .= '&date_export_startmonth=' . $tmp['mon'] . '&date_export_startday=' . $tmp['mday'] . '&date_export_startyear=' . $tmp['year']; +} +if (! empty($search_date_export_end)) { + $filter['t.date_export<='] = $search_date_export_end; + $tmp=dol_getdate($search_date_export_end); + $param .= '&date_export_endmonth=' . $tmp['mon'] . '&date_export_endday=' . $tmp['mday'] . '&date_export_endyear=' . $tmp['year']; +} if (! empty($search_debit)) { $filter['t.debit'] = $search_debit; $param .= '&search_debit=' . urlencode($search_debit); @@ -351,8 +364,9 @@ if ($action == 'delmouvconfirm') { // Export into a file with format defined into setup (FEC, CSV, ...) if ($action == 'export_file') { + $reexportMovements = GETPOST('already_exported')=='on'?1:0; - $result = $object->fetchAll($sortorder, $sortfield, 0, 0, $filter); + $result = $object->fetchAll($sortorder, $sortfield, 0, 0, $filter, 'AND', $reexportMovements); if ($result < 0) { @@ -363,6 +377,22 @@ if ($action == 'export_file') { $accountancyexport = new AccountancyExport($db); $accountancyexport->export($object->lines); + // TODO Move in class bookKeeping + // Specify as export : update field date_export + foreach ( $object->lines as $movement ) { + $now = dol_now(); + $sql = " UPDATE " . MAIN_DB_PREFIX . "accounting_bookkeeping"; + $sql .= " SET date_export = '" . $db->idate($now) . "'"; + $sql .= " WHERE rowid = " . $movement->id; + + dol_syslog("/accountancy/bookeeping/list.php Function export_file Specify movements as exported sql=" . $sql, LOG_DEBUG); + if ($db->query($sql)) { + $db->commit(); + } else { + $db->rollback(); + } + } + if (!empty($accountancyexport->errors)) { setEventMessages('', $accountancyexport->errors, 'errors'); @@ -446,10 +476,10 @@ print ''; print ''; $listofformat=AccountancyExport::getType(); -$button = ''; +$button = ' ' . $langs->trans("IncludeDocsAlreadyExported"); +$button .= 'global->ACCOUNTING_EXPORT_MODELCSV].')'.'" name="button_export_file" href="'.$_SERVER["PHP_SELF"].'?action=export_file'.($param?'&'.$param:'').'">'; if (count($filter)) $button.= $langs->trans("ExportFilteredList"); else $button.= $langs->trans("ExportList"); -//$button.=' ('.$listofformat[$conf->global->ACCOUNTING_EXPORT_MODELCSV].')'; $button.= ''; @@ -600,6 +630,20 @@ if (! empty($arrayfields['t.tms']['checked'])) print '
'; print ''; } +// Date export +if (! empty($arrayfields['t.date_export']['checked'])) +{ + print ''; + print '
'; + print $langs->trans('From') . ' '; + print $form->selectDate($search_date_export_start, 'date_export_start', 0, 0, 1); + print '
'; + print '
'; + print $langs->trans('to') . ' '; + print $form->selectDate($search_date_export_end, 'date_export_end', 0, 0, 1); + print '
'; + print ''; +} // Action column print ''; $searchpicto=$form->showFilterButtons(); @@ -620,6 +664,7 @@ if (! empty($arrayfields['t.lettering_code']['checked'])) print_liste_field_tit if (! empty($arrayfields['t.code_journal']['checked'])) print_liste_field_titre($arrayfields['t.code_journal']['label'], $_SERVER['PHP_SELF'], "t.code_journal", "", $param, '', $sortfield, $sortorder, 'center '); if (! empty($arrayfields['t.date_creation']['checked'])) print_liste_field_titre($arrayfields['t.date_creation']['label'], $_SERVER['PHP_SELF'], "t.date_creation", "", $param, '', $sortfield, $sortorder, 'center '); if (! empty($arrayfields['t.tms']['checked'])) print_liste_field_titre($arrayfields['t.tms']['label'], $_SERVER['PHP_SELF'], "t.tms", "", $param, '', $sortfield, $sortorder, 'center '); +if (! empty($arrayfields['t.date_export']['checked'])) print_liste_field_titre($arrayfields['t.date_export']['label'], $_SERVER['PHP_SELF'], "t.date_export", "", $param, '', $sortfield, $sortorder, 'center '); print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'center maxwidthsearch '); print "\n"; @@ -732,11 +777,20 @@ if ($num > 0) if (! $i) $totalarray['nbfield']++; } + // Exported operation date + if (! empty($arrayfields['t.date_export']['checked'])) + { + print '' . dol_print_date($line->date_export, 'dayhour') . ''; + if (! $i) $totalarray['nbfield']++; + } + // Action column print ''; - print '' . img_edit() . ' '; - print '' . img_delete() . ''; - print ''; + if(empty($line->date_export)) { + print '' . img_edit() . ' '; + print '' . img_delete() . ''; + } + print ''; if (! $i) $totalarray['nbfield']++; print "\n"; diff --git a/htdocs/accountancy/class/bookkeeping.class.php b/htdocs/accountancy/class/bookkeeping.class.php index c1df8b1045c..872bd56ca0f 100644 --- a/htdocs/accountancy/class/bookkeeping.class.php +++ b/htdocs/accountancy/class/bookkeeping.class.php @@ -866,15 +866,16 @@ class BookKeeping extends CommonObject /** * Load object in memory from the database * - * @param string $sortorder Sort Order - * @param string $sortfield Sort field - * @param int $limit Offset limit - * @param int $offset Offset limit - * @param array $filter Filter array - * @param string $filtermode Filter mode (AND or OR) - * @return int <0 if KO, >0 if OK + * @param string $sortorder Sort Order + * @param string $sortfield Sort field + * @param int $limit Offset limit + * @param int $offset Offset limit + * @param array $filter Filter array + * @param string $filtermode Filter mode (AND or OR) + * @param int $showAlreadyExportMovements Show movements when field 'date_export' is not empty (0:No / 1:Yes (Default)) + * @return int <0 if KO, >0 if OK */ - public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND') + public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND', $showAlreadyExportMovements = 1) { global $conf; @@ -904,7 +905,8 @@ class BookKeeping extends CommonObject $sql .= " t.journal_label,"; $sql .= " t.piece_num,"; $sql .= " t.date_creation,"; - $sql .= " t.tms as date_modification"; + $sql .= " t.tms as date_modification,"; + $sql .= " t.date_export"; $sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element . ' as t'; // Manage filter $sqlwhere = array (); @@ -924,6 +926,8 @@ class BookKeeping extends CommonObject $sqlwhere[] = $key . '\'' . $this->db->idate($value) . '\''; } elseif ($key == 't.tms>=' || $key == 't.tms<=') { $sqlwhere[] = $key . '\'' . $this->db->idate($value) . '\''; + } elseif ($key == 't.date_export>=' || $key == 't.date_export<=') { + $sqlwhere[] = $key . '\'' . $this->db->idate($value) . '\''; } elseif ($key == 't.credit' || $key == 't.debit') { $sqlwhere[] = natural_search($key, $value, 1, 1); } else { @@ -978,6 +982,7 @@ class BookKeeping extends CommonObject $line->piece_num = $obj->piece_num; $line->date_creation = $this->db->jdate($obj->date_creation); $line->date_modification = $this->db->jdate($obj->date_modification); + $line->date_export = $this->db->jdate($obj->date_export); $this->lines[] = $line; diff --git a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql index b53d0603be6..ef8a8c7b750 100644 --- a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql +++ b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql @@ -366,4 +366,6 @@ ALTER TABLE llx_reception_extrafields ADD INDEX idx_reception_extrafields (fk_ob ALTER TABLE llx_commande_fournisseur_dispatch ADD COLUMN fk_projet integer DEFAULT NULL; ALTER TABLE llx_commande_fournisseur_dispatch ADD COLUMN fk_reception integer DEFAULT NULL; +ALTER TABLE llx_accounting_bookkeeping ADD COLUMN date_export datetime DEFAULT NULL after date_validated; + \ No newline at end of file diff --git a/htdocs/install/mysql/tables/llx_accounting_bookkeeping.sql b/htdocs/install/mysql/tables/llx_accounting_bookkeeping.sql index af693c273a4..4a8f3ac7587 100644 --- a/htdocs/install/mysql/tables/llx_accounting_bookkeeping.sql +++ b/htdocs/install/mysql/tables/llx_accounting_bookkeeping.sql @@ -1,6 +1,6 @@ -- ============================================================================ -- Copyright (C) 2013-2014 Olivier Geffroy --- Copyright (C) 2013-2017 Alexandre Spangaro +-- Copyright (C) 2013-2019 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 @@ -51,6 +51,7 @@ CREATE TABLE llx_accounting_bookkeeping piece_num integer NOT NULL, -- FEC:EcritureNum | accounting source document validated tinyint DEFAULT 0 NOT NULL, -- | 0 line not validated / 1 line validated (No deleting / No modification) date_validated datetime, -- FEC:ValidDate - import_key varchar(14), + date_export datetime DEFAULT NULL, -- + import_key varchar(14), -- extraparams varchar(255) -- for other parameters with json format ) ENGINE=innodb; diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index f91cbd8f1eb..be4d25cfef5 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -842,6 +842,7 @@ Exports=Exports ExportFilteredList=Export filtered list ExportList=Export list ExportOptions=Export Options +IncludeDocsAlreadyExported=Include docs already exported Miscellaneous=Miscellaneous Calendar=Calendar GroupBy=Group by... From bdd4f3e2973ec48a3d4d51286959383fdecb1e48 Mon Sep 17 00:00:00 2001 From: ATM John BOTELLA Date: Sat, 18 May 2019 18:59:55 +0200 Subject: [PATCH 036/828] add css for html5 ::invalid pseudo element --- htdocs/theme/eldy/global.inc.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index c1167524bf5..3ab314a5321 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -95,6 +95,10 @@ input.button.massactionconfirmed { margin: 4px; } +input:invalid, select:invalid { + border-color: #ea1212; +} + /* Focus definitions must be after standard definition */ textarea:focus { /* v6 box-shadow: 0 0 4px #8091BF; */ From 6be48e69521262c461b91d61095362239acec38e Mon Sep 17 00:00:00 2001 From: ATM-Nicolas Date: Mon, 20 May 2019 08:59:44 +0200 Subject: [PATCH 037/828] NEW : Amount HT invoiced column in propal list --- htdocs/comm/propal/list.php | 32 +++++++++++++++++++++++++++++++- htdocs/langs/fr_FR/main.lang | 1 + 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php index 7355ea83269..cd98800f606 100644 --- a/htdocs/comm/propal/list.php +++ b/htdocs/comm/propal/list.php @@ -160,6 +160,7 @@ $arrayfields=array( 'p.total_ht'=>array('label'=>$langs->trans("AmountHT"), 'checked'=>1), 'p.total_vat'=>array('label'=>$langs->trans("AmountVAT"), 'checked'=>0), 'p.total_ttc'=>array('label'=>$langs->trans("AmountTTC"), 'checked'=>0), + 'p.total_ht_invoiced'=>array('label'=>$langs->trans("AmountInvoicedHT"), 'checked'=>0), 'p.total_invoiced'=>array('label'=>$langs->trans("AmountInvoicedTTC"), 'checked'=>0), 'u.login'=>array('label'=>$langs->trans("Author"), 'checked'=>1, 'position'=>10), 'sale_representative'=>array('label'=>$langs->trans("SaleRepresentativesOfThirdParty"), 'checked'=>1), @@ -638,6 +639,12 @@ if ($resql) print ''; print ''; } + if (! empty($arrayfields['p.total_ht_invoiced']['checked'])) + { + // Amount invoiced + print ''; + print ''; + } if (! empty($arrayfields['p.total_invoiced']['checked'])) { // Amount invoiced @@ -708,7 +715,8 @@ if ($resql) if (! empty($arrayfields['p.total_ht']['checked'])) print_liste_field_titre($arrayfields['p.total_ht']['label'], $_SERVER["PHP_SELF"], 'p.total_ht', '', $param, 'class="right"', $sortfield, $sortorder); if (! empty($arrayfields['p.total_vat']['checked'])) print_liste_field_titre($arrayfields['p.total_vat']['label'], $_SERVER["PHP_SELF"], 'p.tva', '', $param, 'class="right"', $sortfield, $sortorder); if (! empty($arrayfields['p.total_ttc']['checked'])) print_liste_field_titre($arrayfields['p.total_ttc']['label'], $_SERVER["PHP_SELF"], 'p.total', '', $param, 'class="right"', $sortfield, $sortorder); - if (! empty($arrayfields['p.total_invoiced']['checked'])) print_liste_field_titre($arrayfields['p.total_invoiced']['label'], $_SERVER["PHP_SELF"], 'p.total', '', $param, 'class="right"', $sortfield, $sortorder); + if (! empty($arrayfields['p.total_ht_invoiced']['checked'])) print_liste_field_titre($arrayfields['p.total_ht_invoiced']['label'], $_SERVER["PHP_SELF"], '', '', $param, 'class="right"', $sortfield, $sortorder); + if (! empty($arrayfields['p.total_invoiced']['checked'])) print_liste_field_titre($arrayfields['p.total_invoiced']['label'], $_SERVER["PHP_SELF"], '', '', $param, 'class="right"', $sortfield, $sortorder); if (! empty($arrayfields['u.login']['checked'])) print_liste_field_titre($arrayfields['u.login']['label'], $_SERVER["PHP_SELF"], 'u.login', '', $param, 'align="center"', $sortfield, $sortorder); if (! empty($arrayfields['sale_representative']['checked'])) print_liste_field_titre($arrayfields['sale_representative']['label'], $_SERVER["PHP_SELF"], "", "", "$param", '', $sortfield, $sortorder); // Extra fields @@ -920,6 +928,27 @@ if ($resql) $totalarray['totalttc'] += $obj->total_ttc; } // Amount invoiced + if(! empty($arrayfields['p.total_ht_invoiced']['checked'])) { + $totalInvoiced = 0; + $p = new Propal($db); + $TInvoiceData = $p->InvoiceArrayList($obj->rowid); + + if(! empty($TInvoiceData)) { + foreach($TInvoiceData as $invoiceData) { + $invoice = new Facture($db); + $invoice->fetch($invoiceData->facid); + + if(! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS) && $invoice->type == Facture::TYPE_DEPOSIT) continue; + $totalInvoiced += $invoice->total_ht; + } + } + + print ''.price($totalInvoiced)."\n"; + if (! $i) $totalarray['nbfield']++; + if (! $i) $totalarray['totalhtinvoicedfield']=$totalarray['nbfield']; + $totalarray['totalhtinvoiced'] += $totalInvoiced; + } + // Amount invoiced if(! empty($arrayfields['p.total_invoiced']['checked'])) { $totalInvoiced = 0; $p = new Propal($db); @@ -1066,6 +1095,7 @@ if ($resql) elseif ($totalarray['totalhtfield'] == $i) print ''.price($totalarray['totalht']).''; elseif ($totalarray['totalvatfield'] == $i) print ''.price($totalarray['totalvat']).''; elseif ($totalarray['totalttcfield'] == $i) print ''.price($totalarray['totalttc']).''; + elseif ($totalarray['totalhtinvoicedfield'] == $i) print ''.price($totalarray['totalhtinvoiced']).''; elseif ($totalarray['totalinvoicedfield'] == $i) print ''.price($totalarray['totalinvoiced']).''; elseif ($totalarray['totalizable']) { $printed = false; diff --git a/htdocs/langs/fr_FR/main.lang b/htdocs/langs/fr_FR/main.lang index 22e6914dcd9..3cbcf89574e 100644 --- a/htdocs/langs/fr_FR/main.lang +++ b/htdocs/langs/fr_FR/main.lang @@ -347,6 +347,7 @@ PriceUTTC=P.U TTC Amount=Montant AmountInvoice=Montant facture AmountInvoiced=Montant facturé +AmountInvoicedHT=Montant HT facturé AmountInvoicedTTC=Montant TTC facturé AmountPayment=Montant paiement AmountHTShort=Montant HT From 69e4420772841af91074503b3c6b6d31af9b79b7 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Wed, 22 May 2019 11:53:36 +0200 Subject: [PATCH 038/828] FIX missing "dropdown-icon" replacement --- htdocs/main.inc.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index b0d34db43eb..6563e60e239 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -1738,7 +1738,7 @@ function top_menu_user(User $user, Translate $langs) $userImage = Form::showphoto('userphoto', $user, 0, 0, 0, 'photouserphoto userphoto', 'small', 0, 1); $userDropDownImage = Form::showphoto('userphoto', $user, 0, 0, 0, 'dropdown-user-image', 'small', 0, 1); } - else{ + else { $nophoto='/public/theme/common/user_anonymous.png'; if ($user->gender == 'man') $nophoto='/public/theme/common/user_man.png'; if ($user->gender == 'woman') $nophoto='/public/theme/common/user_woman.png'; @@ -1752,7 +1752,7 @@ function top_menu_user(User $user, Translate $langs) $dropdownBody.= '
'; // login infos - if (!empty($user->admin)) { + if (! empty($user->admin)) { $dropdownBody.= '
' . $langs->trans("Administrator").': '.yn($user->admin); } if (! empty($user->socid)) // Add thirdparty for external users @@ -1805,7 +1805,7 @@ function top_menu_user(User $user, Translate $langs) $profilName = $user->getFullName($langs).' ('.$user->login.')'; - if($user->admin){ + if (! empty($user->admin)) { $profilName = ' '.$profilName; } @@ -1851,6 +1851,8 @@ function top_menu_user(User $user, Translate $langs) if (!$(event.target).closest("#topmenu-login-dropdown").length) { // Hide the menus. $("#topmenu-login-dropdown").removeClass("open"); + $("#dropdown-icon-down").show(); // use show/hide instead toggle for avoid conflict + $("#dropdown-icon-up").hide(); // use show/hide instead toggle for avoid conflict } }); From 4ba8cf0641f6d435d52732610af84e08f973ba0c Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Thu, 23 May 2019 11:08:06 +0200 Subject: [PATCH 039/828] Fix --- htdocs/accountancy/bookkeeping/list.php | 74 +++++++++++++------ .../accountancy/class/bookkeeping.class.php | 4 +- htdocs/langs/en_US/main.lang | 4 + 3 files changed, 59 insertions(+), 23 deletions(-) diff --git a/htdocs/accountancy/bookkeeping/list.php b/htdocs/accountancy/bookkeeping/list.php index 80e9d9b2e71..6860bf94006 100644 --- a/htdocs/accountancy/bookkeeping/list.php +++ b/htdocs/accountancy/bookkeeping/list.php @@ -32,6 +32,7 @@ require_once DOL_DOCUMENT_ROOT . '/accountancy/class/accountingjournal.class.php require_once DOL_DOCUMENT_ROOT . '/core/class/html.formother.class.php'; require_once DOL_DOCUMENT_ROOT . '/core/class/html.formaccounting.class.php'; require_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php'; +require_once DOL_DOCUMENT_ROOT . '/core/lib/admin.lib.php'; // Load translation files required by the page $langs->loadLangs(array("accountancy")); @@ -146,7 +147,7 @@ $arrayfields=array( 't.code_journal'=>array('label'=>$langs->trans("Codejournal"), 'checked'=>1), 't.date_creation'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0), 't.tms'=>array('label'=>$langs->trans("DateModification"), 'checked'=>0), - 't.date_export'=>array('label'=>$langs->trans("DateExport"), 'checked'=>0), + 't.date_export'=>array('label'=>$langs->trans("DateExport"), 'checked'=>1), ); if (empty($conf->global->ACCOUNTING_ENABLE_LETTERING)) unset($arrayfields['t.lettering_code']); @@ -364,9 +365,7 @@ if ($action == 'delmouvconfirm') { // Export into a file with format defined into setup (FEC, CSV, ...) if ($action == 'export_file') { - $reexportMovements = GETPOST('already_exported')=='on'?1:0; - - $result = $object->fetchAll($sortorder, $sortfield, 0, 0, $filter, 'AND', $reexportMovements); + $result = $object->fetchAll($sortorder, $sortfield, 0, 0, $filter, 'AND', $conf->global->ACCOUNTING_REEXPORT); if ($result < 0) { @@ -374,33 +373,57 @@ if ($action == 'export_file') { } else { + // Export files $accountancyexport = new AccountancyExport($db); $accountancyexport->export($object->lines); - // TODO Move in class bookKeeping - // Specify as export : update field date_export - foreach ( $object->lines as $movement ) { - $now = dol_now(); - $sql = " UPDATE " . MAIN_DB_PREFIX . "accounting_bookkeeping"; - $sql .= " SET date_export = '" . $db->idate($now) . "'"; - $sql .= " WHERE rowid = " . $movement->id; + if (! empty($accountancyexport->errors)) + { + setEventMessages('', $accountancyexport->errors, 'errors'); + } else { + // Specify as export : update field date_export + // TODO Move in class bookKeeping + $error=0; + $db->begin(); - dol_syslog("/accountancy/bookeeping/list.php Function export_file Specify movements as exported sql=" . $sql, LOG_DEBUG); - if ($db->query($sql)) { - $db->commit(); - } else { - $db->rollback(); + if (is_array($object->lines)) { + foreach ($object->lines as $movement) { + $now = dol_now(); + $sql = " UPDATE " . MAIN_DB_PREFIX . "accounting_bookkeeping"; + $sql .= " SET date_export = '" . $db->idate($now) . "'"; + $sql .= " WHERE rowid = " . $movement->id; + + dol_syslog("/accountancy/bookeeping/list.php Function export_file Specify movements as exported sql=" . $sql, LOG_DEBUG); + $result = $db->query($sql); + if ($result) { + $db->commit(); + // setEventMessages($langs->trans("AllExportedMovementsWereRecordedAsExported"), null, 'mesgs'); + } else { + $db->rollback(); + // setEventMessages($langs->trans("NotAllExportedMovementsCouldBeRecordedAsExported"), null, 'errors'); + } + } } } - - if (!empty($accountancyexport->errors)) - { - setEventMessages('', $accountancyexport->errors, 'errors'); - } exit; } } +if ($action == 'setreexport') { + $export = 0; + $setreexport = GETPOST('value', 'int'); + if (! dolibarr_set_const($db, "ACCOUNTING_REEXPORT", $setreexport, 'yesno', 0, '', $conf->entity)) $error++; + + if (! $error) { + if ($conf->global->ACCOUNTING_REEXPORT == 1) { + setEventMessages($langs->trans("ExportOfPiecesAlreadyExportedIsEnable"), null, 'mesgs'); + } else { + setEventMessages($langs->trans("ExportOfPiecesAlreadyExportedIsDisable"), null, 'mesgs'); + } + } else { + setEventMessages($langs->trans("Error"), null, 'errors'); + } +} /* * View @@ -481,7 +504,14 @@ $listofformat=AccountancyExport::getType(); if (count($filter)) $buttonLabel = $langs->trans("ExportFilteredList"); else $buttonLabel = $langs->trans("ExportList"); -$newcardbutton = ' ' . $langs->trans("IncludeDocsAlreadyExported"); +// Button re-export +if (! empty($conf->global->ACCOUNTING_REEXPORT)) { + print $newcardbutton =''.img_picto($langs->trans("Activated"), 'switch_on').' '; +} else { + print $newcardbutton =''.img_picto($langs->trans("Disabled"), 'switch_off').' '; +} +$newcardbutton.= $langs->trans("IncludeDocsAlreadyExported"); + $newcardbutton.= dolGetButtonTitle($buttonLabel, $langs->trans("ExportFilteredList").' ('.$listofformat[$conf->global->ACCOUNTING_EXPORT_MODELCSV].')', 'fa fa-file-export', $_SERVER["PHP_SELF"].'?action=export_file'.($param?'&'.$param:'')); $newcardbutton.= dolGetButtonTitle($langs->trans('GroupByAccountAccounting'), '', 'fa fa-object-group', DOL_URL_ROOT.'/accountancy/bookkeeping/listbyaccount.php?'.$param); diff --git a/htdocs/accountancy/class/bookkeeping.class.php b/htdocs/accountancy/class/bookkeeping.class.php index 872bd56ca0f..784c1ab06e8 100644 --- a/htdocs/accountancy/class/bookkeeping.class.php +++ b/htdocs/accountancy/class/bookkeeping.class.php @@ -936,10 +936,12 @@ class BookKeeping extends CommonObject } } $sql.= ' WHERE t.entity IN (' . getEntity('accountancy') . ')'; + if ($showAlreadyExportMovements == 0) { + $sql .= " AND t.date_export IS NULL"; + } if (count($sqlwhere) > 0) { $sql .= ' AND ' . implode(' ' . $filtermode . ' ', $sqlwhere); } - if (! empty($sortfield)) { $sql .= $this->db->order($sortfield, $sortorder); } diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index be4d25cfef5..996fdf63d1d 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -843,6 +843,10 @@ ExportFilteredList=Export filtered list ExportList=Export list ExportOptions=Export Options IncludeDocsAlreadyExported=Include docs already exported +ExportOfPiecesAlreadyExportedIsEnable=Export of pieces already exported is enable +ExportOfPiecesAlreadyExportedIsDisable=Export of pieces already exported is disable +AllExportedMovementsWereRecordedAsExported=All exported movements were recorded as exported +NotAllExportedMovementsCouldBeRecordedAsExported=Not all exported movements could be recorded as exported Miscellaneous=Miscellaneous Calendar=Calendar GroupBy=Group by... From 34a91ef96f1fb6442c915ad9e73e7f19d8c9a83b Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Thu, 23 May 2019 11:21:41 +0200 Subject: [PATCH 040/828] Apply button reexport on view list --- htdocs/accountancy/bookkeeping/list.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/accountancy/bookkeeping/list.php b/htdocs/accountancy/bookkeeping/list.php index 6860bf94006..51ea2b9359f 100644 --- a/htdocs/accountancy/bookkeeping/list.php +++ b/htdocs/accountancy/bookkeeping/list.php @@ -436,14 +436,14 @@ llxHeader('', $title_page); // List $nbtotalofrecords = ''; if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { - $nbtotalofrecords = $object->fetchAll($sortorder, $sortfield, 0, 0, $filter); + $nbtotalofrecords = $object->fetchAll($sortorder, $sortfield, 0, 0, $filter, 'AND', $conf->global->ACCOUNTING_REEXPORT); if ($nbtotalofrecords < 0) { setEventMessages($object->error, $object->errors, 'errors'); } } // TODO Do not use this -$result = $object->fetchAll($sortorder, $sortfield, $limit, $offset, $filter); +$result = $object->fetchAll($sortorder, $sortfield, $limit, $offset, $filter, 'AND', $conf->global->ACCOUNTING_REEXPORT); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } From aaaad713470a2dbada31b0a2c68052d3bfe59bad Mon Sep 17 00:00:00 2001 From: Christophe Battarel Date: Fri, 24 May 2019 12:10:58 +0200 Subject: [PATCH 041/828] FIX : do not include disabled modules tpl --- htdocs/core/class/commonobject.class.php | 68 ++++++++++++++++++------ 1 file changed, 52 insertions(+), 16 deletions(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index f0fe7bf437c..22c96f0f589 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -3715,16 +3715,25 @@ abstract class CommonObject // Output template part (modules that overwrite templates must declare this into descriptor) // Use global variables + $dateSelector + $seller and $buyer - $dirtpls=array_merge($conf->modules_parts['tpl'],array('/core/tpl')); - foreach($dirtpls as $reldir) + $dirtpls=array_merge($conf->modules_parts['tpl'], array('/core/tpl')); + foreach($dirtpls as $module => $reldir) { - $tpl = dol_buildpath($reldir.'/objectline_create.tpl.php'); + if (!empty($module) && empty($conf->$module->enabled)) continue; + + if (!empty($module)) + { + $tpl = dol_buildpath($reldir.'/objectline_create.tpl.php'); + } + else + { + $tpl = DOL_DOCUMENT_ROOT.$reldir.'/objectline_create.tpl.php'; + } if (empty($conf->file->strict_mode)) { $res=@include $tpl; } else { $res=include $tpl; // for debug } - if ($res) break; + if ($res > 0) break; } } @@ -3967,16 +3976,25 @@ abstract class CommonObject // Output template part (modules that overwrite templates must declare this into descriptor) // Use global variables + $dateSelector + $seller and $buyer - $dirtpls=array_merge($conf->modules_parts['tpl'],array('/core/tpl')); - foreach($dirtpls as $reldir) + $dirtpls=array_merge($conf->modules_parts['tpl'], array('/core/tpl')); + foreach($dirtpls as $module => $reldir) { - $tpl = dol_buildpath($reldir.'/objectline_view.tpl.php'); + if (!empty($module) && empty($conf->$module->enabled)) continue; + + if (!empty($module)) + { + $tpl = dol_buildpath($reldir.'/objectline_view.tpl.php'); + } + else + { + $tpl = DOL_DOCUMENT_ROOT.$reldir.'/objectline_view.tpl.php'; + } if (empty($conf->file->strict_mode)) { $res=@include $tpl; } else { $res=include $tpl; // for debug } - if ($res) break; + if ($res > 0) break; } } @@ -3990,16 +4008,25 @@ abstract class CommonObject // Output template part (modules that overwrite templates must declare this into descriptor) // Use global variables + $dateSelector + $seller and $buyer - $dirtpls=array_merge($conf->modules_parts['tpl'],array('/core/tpl')); - foreach($dirtpls as $reldir) + $dirtpls=array_merge($conf->modules_parts['tpl'], array('/core/tpl')); + foreach($dirtpls as $module => $reldir) { - $tpl = dol_buildpath($reldir.'/objectline_edit.tpl.php'); + if (!empty($module) && empty($conf->$module->enabled)) continue; + + if (!empty($module)) + { + $tpl = dol_buildpath($reldir.'/objectline_edit.tpl.php'); + } + else + { + $tpl = DOL_DOCUMENT_ROOT.$reldir.'/objectline_edit.tpl.php'; + } if (empty($conf->file->strict_mode)) { $res=@include $tpl; } else { $res=include $tpl; // for debug } - if ($res) break; + if ($res > 0) break; } } } @@ -4186,16 +4213,25 @@ abstract class CommonObject // Output template part (modules that overwrite templates must declare this into descriptor) // Use global variables + $dateSelector + $seller and $buyer - $dirtpls=array_merge($conf->modules_parts['tpl'],array('/core/tpl')); - foreach($dirtpls as $reldir) + $dirtpls=array_merge($conf->modules_parts['tpl'], array('/core/tpl')); + foreach($dirtpls as $module => $reldir) { - $tpl = dol_buildpath($reldir.'/originproductline.tpl.php'); + if (!empty($module) && empty($conf->$module->enabled)) continue; + + if (!empty($module)) + { + $tpl = dol_buildpath($reldir.'/originproductline.tpl.php'); + } + else + { + $tpl = DOL_DOCUMENT_ROOT.$reldir.'/originproductline.tpl.php'; + } if (empty($conf->file->strict_mode)) { $res=@include $tpl; } else { $res=include $tpl; // for debug } - if ($res) break; + if ($res > 0) break; } } From abc7c2f0f8deead444bc41727cc36099d517a014 Mon Sep 17 00:00:00 2001 From: Christophe Battarel Date: Fri, 24 May 2019 12:33:40 +0200 Subject: [PATCH 042/828] test include return on TRUE --- htdocs/core/class/commonobject.class.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 22c96f0f589..5034e4c4899 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -3733,7 +3733,7 @@ abstract class CommonObject } else { $res=include $tpl; // for debug } - if ($res > 0) break; + if ($res === TRUE) break; } } @@ -3994,7 +3994,7 @@ abstract class CommonObject } else { $res=include $tpl; // for debug } - if ($res > 0) break; + if ($res === TRUE) break; } } @@ -4026,7 +4026,7 @@ abstract class CommonObject } else { $res=include $tpl; // for debug } - if ($res > 0) break; + if ($res === TRUE) break; } } } @@ -4231,7 +4231,7 @@ abstract class CommonObject } else { $res=include $tpl; // for debug } - if ($res > 0) break; + if ($res === TRUE) break; } } From 545cdd07623163eda45df13a92f7ef4a5a16cf9d Mon Sep 17 00:00:00 2001 From: Christophe Battarel Date: Fri, 24 May 2019 12:54:24 +0200 Subject: [PATCH 043/828] test include return on FALSE --- htdocs/core/class/commonobject.class.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 5034e4c4899..eae3f566d2f 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -3733,7 +3733,7 @@ abstract class CommonObject } else { $res=include $tpl; // for debug } - if ($res === TRUE) break; + if ($res !== FALSE) break; } } @@ -3994,7 +3994,7 @@ abstract class CommonObject } else { $res=include $tpl; // for debug } - if ($res === TRUE) break; + if ($res !== FALSE) break; } } @@ -4026,7 +4026,7 @@ abstract class CommonObject } else { $res=include $tpl; // for debug } - if ($res === TRUE) break; + if ($res !== FALSE) break; } } } @@ -4231,7 +4231,7 @@ abstract class CommonObject } else { $res=include $tpl; // for debug } - if ($res === TRUE) break; + if ($res !== FALSE) break; } } From 83d883c36a9d36c4a687939e04d7686d1bada205 Mon Sep 17 00:00:00 2001 From: Christophe Battarel Date: Fri, 24 May 2019 15:14:34 +0200 Subject: [PATCH 044/828] finally eldy is always right --- htdocs/core/class/commonobject.class.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index eae3f566d2f..b64ae066cb1 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -3733,7 +3733,7 @@ abstract class CommonObject } else { $res=include $tpl; // for debug } - if ($res !== FALSE) break; + if ($res) break; } } @@ -3994,7 +3994,7 @@ abstract class CommonObject } else { $res=include $tpl; // for debug } - if ($res !== FALSE) break; + if ($res) break; } } @@ -4026,7 +4026,7 @@ abstract class CommonObject } else { $res=include $tpl; // for debug } - if ($res !== FALSE) break; + if ($res) break; } } } @@ -4231,7 +4231,7 @@ abstract class CommonObject } else { $res=include $tpl; // for debug } - if ($res !== FALSE) break; + if ($res) break; } } From 09faf3aa5b0e404bc0c85f8ae4b4bb8d7505c5ec Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Fri, 24 May 2019 21:48:36 +0200 Subject: [PATCH 045/828] Accountancy - Use Ansi on Agiris model export & indent --- .../class/accountancyexport.class.php | 295 +++++++++--------- 1 file changed, 147 insertions(+), 148 deletions(-) diff --git a/htdocs/accountancy/class/accountancyexport.class.php b/htdocs/accountancy/class/accountancyexport.class.php index 1ef500fcf6b..0bfbbea2581 100644 --- a/htdocs/accountancy/class/accountancyexport.class.php +++ b/htdocs/accountancy/class/accountancyexport.class.php @@ -585,19 +585,19 @@ class AccountancyExport $date = dol_print_date($line->doc_date, '%d%m%Y'); print $line->piece_num . $separator; - print $line->label_operation . $separator; + print self::toAnsi($line->label_operation) . $separator; print $date . $separator; - print $line->label_operation . $separator; + print self::toAnsi($line->label_operation) . $separator; if (empty($line->subledger_account)) { print length_accountg($line->numero_compte) . $separator; - print $line->label_compte . $separator; + print self::toAnsi($line->label_compte) . $separator; } else { print length_accounta($line->subledger_account) . $separator; - print $line->subledger_label . $separator; + print self::toAnsi($line->subledger_label) . $separator; } - print $line->doc_ref . $separator; + print self::toAnsi($line->doc_ref) . $separator; print price($line->debit) . $separator; print price($line->credit) . $separator; print price($line->montant) . $separator; @@ -767,156 +767,155 @@ class AccountancyExport } } - /** - * Export format : SAGE50SWISS - * - * - * https://onlinehelp.sageschweiz.ch/default.aspx?tabid=19984 - * http://media.topal.ch/Public/Schnittstellen/TAF/Specification/Sage50-TAF-format.pdf - * - * @param array $objectLines data - * - * @return void - */ - public function exportSAGE50SWISS($objectLines) + /** + * Export format : SAGE50SWISS + * + * https://onlinehelp.sageschweiz.ch/default.aspx?tabid=19984 + * http://media.topal.ch/Public/Schnittstellen/TAF/Specification/Sage50-TAF-format.pdf + * + * @param array $objectLines data + * + * @return void + */ + public function exportSAGE50SWISS($objectLines) { - // SAGE50SWISS - $this->separator = ','; - $this->end_line = "\r\n"; + // SAGE50SWISS + $this->separator = ','; + $this->end_line = "\r\n"; - // Print header line - print "Blg,Datum,Kto,S/H,Grp,GKto,SId,SIdx,KIdx,BTyp,MTyp,Code,Netto,Steuer,FW-Betrag,Tx1,Tx2,PkKey,OpId,Flag"; - print $this->end_line; - $thisPieceNum= ""; - $thisPieceAccountNr= ""; - $aSize= count($objectLines); - foreach ($objectLines as $aIndex=>$line) + // Print header line + print "Blg,Datum,Kto,S/H,Grp,GKto,SId,SIdx,KIdx,BTyp,MTyp,Code,Netto,Steuer,FW-Betrag,Tx1,Tx2,PkKey,OpId,Flag"; + print $this->end_line; + $thisPieceNum= ""; + $thisPieceAccountNr= ""; + $aSize= count($objectLines); + foreach ($objectLines as $aIndex=>$line) + { + $sammelBuchung= false; + if ($aIndex-2 >= 0 && $objectLines[$aIndex-2]->piece_num == $line->piece_num) + { + $sammelBuchung= true; + } + elseif ($aIndex+2 < $aSize && $objectLines[$aIndex+2]->piece_num == $line->piece_num) + { + $sammelBuchung= true; + } + elseif ($aIndex+1 < $aSize + && $objectLines[$aIndex+1]->piece_num == $line->piece_num + && $aIndex-1 < $aSize + && $objectLines[$aIndex-1]->piece_num == $line->piece_num + ) + { + $sammelBuchung= true; + } + + //Blg + print $line->piece_num . $this->separator; + + // Datum + $date = dol_print_date($line->doc_date, '%d.%m.%Y'); + print $date . $this->separator; + + // Kto + print length_accountg($line->numero_compte) . $this->separator; + // S/H + if ($line->sens == 'D') + { + print 'S' . $this->separator; + } + else + { + print 'H' . $this->separator; + } + //Grp + print self::trunc($line->code_journal, 1) . $this->separator; + // GKto + if (empty($line->code_tiers)) + { + if ($line->piece_num == $thisPieceNum) { - $sammelBuchung= false; - if ($aIndex-2 >= 0 && $objectLines[$aIndex-2]->piece_num == $line->piece_num) - { - $sammelBuchung= true; - } - elseif ($aIndex+2 < $aSize && $objectLines[$aIndex+2]->piece_num == $line->piece_num) - { - $sammelBuchung= true; - } - elseif ($aIndex+1 < $aSize - && $objectLines[$aIndex+1]->piece_num == $line->piece_num - && $aIndex-1 < $aSize - && $objectLines[$aIndex-1]->piece_num == $line->piece_num - ) - { - $sammelBuchung= true; - } + print length_accounta($thisPieceAccountNr) . $this->separator; + } + else + { + print "div" . $this->separator; + } + } + else + { + print length_accounta($line->code_tiers) . $this->separator; + } + //SId + print $this->separator; + //SIdx + print "0" . $this->separator; + //KIdx + print "0" . $this->separator; + //BTyp + print "0" . $this->separator; - //Blg - print $line->piece_num . $this->separator; + //MTyp 1=Fibu Einzelbuchung 2=Sammebuchung + if ($sammelBuchung) + { + print "2" . $this->separator; + } + else + { + print "1" . $this->separator; + } + // Code + print '""' . $this->separator; + // Netto + if ($line->montant >= 0) + { + print $line->montant . $this->separator; + } + else + { + print $line->montant*-1 . $this->separator; + } + // Steuer + print "0.00" . $this->separator; + // FW-Betrag + print "0.00" . $this->separator; + // Tx1 + $line1= self::toAnsi($line->label_compte, 29); + if ($line1 == "LIQ" || $line1 == "LIQ Beleg ok" || strlen($line1) <= 3) + { + $line1= ""; + } + $line2= self::toAnsi($line->doc_ref, 29); + if (strlen($line1) == 0) + { + $line1= $line2; + $line2= ""; + } + if (strlen($line1) > 0 && strlen($line2) > 0 && (strlen($line1) + strlen($line2)) < 27) + { + $line1= $line1 . ' / ' . $line2; + $line2= ""; + } - // Datum - $date = dol_print_date($line->doc_date, '%d.%m.%Y'); - print $date . $this->separator; + print '"' . self::toAnsi($line1). '"' . $this->separator; + // Tx2 + print '"' . self::toAnsi($line2). '"' . $this->separator; + //PkKey + print "0" . $this->separator; + //OpId + print $this->separator; - // Kto - print length_accountg($line->numero_compte) . $this->separator; - // S/H - if ($line->sens == 'D') - { - print 'S' . $this->separator; - } - else - { - print 'H' . $this->separator; - } - //Grp - print self::trunc($line->code_journal, 1) . $this->separator; - // GKto - if (empty($line->code_tiers)) - { - if ($line->piece_num == $thisPieceNum) - { - print length_accounta($thisPieceAccountNr) . $this->separator; - } - else - { - print "div" . $this->separator; - } - } - else - { - print length_accounta($line->code_tiers) . $this->separator; - } - //SId - print $this->separator; - //SIdx - print "0" . $this->separator; - //KIdx - print "0" . $this->separator; - //BTyp - print "0" . $this->separator; + // Flag + print "0"; - //MTyp 1=Fibu Einzelbuchung 2=Sammebuchung - if ($sammelBuchung) - { - print "2" . $this->separator; - } - else - { - print "1" . $this->separator; - } - // Code - print '""' . $this->separator; - // Netto - if ($line->montant >= 0) - { - print $line->montant . $this->separator; - } - else - { - print $line->montant*-1 . $this->separator; - } - // Steuer - print "0.00" . $this->separator; - // FW-Betrag - print "0.00" . $this->separator; - // Tx1 - $line1= self::toAnsi($line->label_compte, 29); - if ($line1 == "LIQ" || $line1 == "LIQ Beleg ok" || strlen($line1) <= 3) - { - $line1= ""; - } - $line2= self::toAnsi($line->doc_ref, 29); - if (strlen($line1) == 0) - { - $line1= $line2; - $line2= ""; - } - if (strlen($line1) > 0 && strlen($line2) > 0 && (strlen($line1) + strlen($line2)) < 27) - { - $line1= $line1 . ' / ' . $line2; - $line2= ""; - } + print $this->end_line; - print '"' . self::toAnsi($line1). '"' . $this->separator; - // Tx2 - print '"' . self::toAnsi($line2). '"' . $this->separator; - //PkKey - print "0" . $this->separator; - //OpId - print $this->separator; - - // Flag - print "0"; - - print $this->end_line; - - if ($line->piece_num !== $thisPieceNum) - { - $thisPieceNum= $line->piece_num; - $thisPieceAccountNr= $line->numero_compte; - } + if ($line->piece_num !== $thisPieceNum) + { + $thisPieceNum= $line->piece_num; + $thisPieceAccountNr= $line->numero_compte; + } } - } + } /** * @@ -932,8 +931,8 @@ class AccountancyExport /** * * @param unknown $str Original string to encode and optionaly truncate - * @param integer $size trucate string after $size characters - * @return string String encoded in Windows-1251 charset + * @param integer $size truncate string after $size characters + * @return string String encoded in Windows-1251 charset */ public static function toAnsi($str, $size = -1) { From f8792250320208aafe07e2d0db98ac8b844dad6e Mon Sep 17 00:00:00 2001 From: KlaasOl <43514101+KlaasOl@users.noreply.github.com> Date: Sun, 26 May 2019 15:29:50 +0200 Subject: [PATCH 046/828] Create llx_accounting_account_nl.sql First accounting account scheme for Dutch accounting --- .../mysql/data/llx_accounting_account_nl.sql | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 htdocs/install/mysql/data/llx_accounting_account_nl.sql diff --git a/htdocs/install/mysql/data/llx_accounting_account_nl.sql b/htdocs/install/mysql/data/llx_accounting_account_nl.sql new file mode 100644 index 00000000000..8cd08eb474d --- /dev/null +++ b/htdocs/install/mysql/data/llx_accounting_account_nl.sql @@ -0,0 +1,117 @@ +-- Copyright (C) 2001-2004 Rodolphe Quiedeville +-- Copyright (C) 2003 Jean-Louis Bergamo +-- Copyright (C) 2004-2009 Laurent Destailleur +-- Copyright (C) 2004 Benoit Mortier +-- Copyright (C) 2004 Guillaume Delecourt +-- Copyright (C) 2005-2009 Regis Houssin +-- Copyright (C) 2007 Patrick Raguin +-- Copyright (C) 2011-2017 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 +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- + +-- +-- Ne pas placer de commentaire en fin de ligne, ce fichier est parsé lors +-- de l'install et tous les sigles '--' sont supprimés. +-- + +-- Description of the accounts in NL-VERKORT +-- ID 0100-9999 +-- ADD 7006000 to rowid # Do no remove this comment -- +-- + +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1000, 'NL_VERKORT', 'BALANS', 'XXXXXX', '0050', '', 'Bedrijfspand en woning', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1001, 'NL-VERKORT', 'BALANS', 'XXXXXX', '0055', '', 'Afschrijving bedrijfspand en woning', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1002, 'NL-VERKORT', 'BALANS', 'XXXXXX', '0100', '', 'Inventaris', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1003, 'NL-VERKORT', 'BALANS', 'XXXXXX', '0105', '', 'Afschrijving inventaris', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1004, 'NL-VERKORT', 'BALANS', 'XXXXXX', '0150', '', 'Kantoor-inventaris', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1005, 'NL-VERKORT', 'BALANS', 'XXXXXX', '0155', '', 'Afschrijving kantoor-inventaris', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1006, 'NL-VERKORT', 'BALANS', 'XXXXXX', '0200', '', 'Transportmiddelen', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1007, 'NL-VERKORT', 'BALANS', 'XXXXXX', '0205', '', 'Afschrijving transportmiddelen', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1008, 'NL-VERKORT', 'BALANS', 'XXXXXX', '1100', '', 'Kas', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1009, 'NL-VERKORT', 'BALANS', 'XXXXXX', '1200', '', 'Bank', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1010, 'NL-VERKORT', 'BALANS', 'XXXXXX', '1300', '', 'Debiteuren', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1011, 'NL-VERKORT', 'BALANS', 'XXXXXX', '1310', '', 'Oninbare debiteuren', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1012, 'NL-VERKORT', 'BALANS', 'XXXXXX', '1500', '', 'Privé', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1013, 'NL-VERKORT', 'BALANS', 'XXXXXX', '1520', '', 'Privé IB/ZORGVERZ', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1014, 'NL-VERKORT', 'BALANS', 'XXXXXX', '1600', '', 'Crediteuren', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1015, 'NL-VERKORT', 'BALANS', 'XXXXXX', '1700', '', 'Ingehouden loonbelasing', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1016, 'NL-VERKORT', 'BALANS', 'XXXXXX', '1710', '', 'Afdracht loonbelasting', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1017, 'NL-VERKORT', 'BALANS', 'XXXXXX', '1720', '', 'Ingehouden pensioenlasten', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1018, 'NL-VERKORT', 'BALANS', 'XXXXXX', '1730', '', 'Reservering vakantiegeld', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1019, 'NL-VERKORT', 'BALANS', 'XXXXXX', '1820', '', 'BTW te betalen hoog', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1020, 'NL-VERKORT', 'BALANS', 'XXXXXX', '1825', '', 'BTW te betalen laag', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1021, 'NL-VERKORT', 'BALANS', 'XXXXXX', '1828', '', 'BTW te betalen auto privé', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1022, 'NL-VERKORT', 'BALANS', 'XXXXXX', '1829', '', 'BTW te betalen telefoon privé', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1023, 'NL-VERKORT', 'BALANS', 'XXXXXX', '1830', '', 'BTW te vorderen hoog', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1024, 'NL-VERKORT', 'BALANS', 'XXXXXX', '1835', '', 'BTW te vorderen laag', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1025, 'NL-VERKORT', 'BALANS', 'XXXXXX', '1890', '', 'Betaalde BTW', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1026, 'NL-VERKORT', 'BALANS', 'XXXXXX', '2200', '', 'Te betalen netto lonen', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1027, 'NL-VERKORT', 'BALANS', 'XXXXXX', '2500', '', 'Kruisposten', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1028, 'NL-VERKORT', 'BALANS', 'XXXXXX', '2900', '', 'Vraagposten', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1029, 'NL-VERKORT', 'BALANS', 'XXXXXX', '3000', '', 'Voorraad', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1030, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4000', '', 'Kantoorbenodigdheden', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1031, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4010', '', 'Porti', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1032, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4020', '', 'Telefoon/Internet', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1033, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4030', '', 'Onderhoud gebouwen', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1034, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4040', '', 'Overige huisvestingskosten', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1035, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4050', '', 'Belastingen en heffingen onroerend goed', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1036, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4060', '', 'Onderhoud inventaris e.d.', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1037, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4070', '', 'Kleine aanschaffingen < 500', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1038, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4080', '', 'Kosten automatisering', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1039, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4090', '', 'Abonnementen en contributies', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1040, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4100', '', 'Autokosten', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1041, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4110', '', 'Boetes', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1042, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4120', '', 'Auto brandstof', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1043, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4130', '', 'Auto belasting en verzekering', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1044, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4140', '', 'BTW privé gebruik', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1045, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4150', '', 'Bijtelling auto', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1046, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4200', '', 'Reiskosten', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1047, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4210', '', 'Reiskosten/eten', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1048, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4220', '', 'Representatiekosten', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1049, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4230', '', 'Werkkleding', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1050, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4300', '', 'Magazijnkosten', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1051, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4310', '', 'Stroom, gas en water', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1052, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4320', '', 'Huur', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1053, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4330', '', 'Reclamekosten', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1054, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4340', '', 'Sponsoring', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1055, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4350', '', 'Vertegenwoordigers/provisie', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1056, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4400', '', 'Bruto lonen', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1057, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4410', '', 'Sociale lasten', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1058, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4500', '', 'Afschr. kosten gebouwen', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1059, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4510', '', 'Afschr. kosten bedrijfsinventaris', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1060, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4520', '', 'Afschr. kosten kantoorinventaris', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1061, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4530', '', 'Afschr. kosten transportmiddelen', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1062, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4600', '', 'Administratiekosten', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1063, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4610', '', 'Kantinekosten', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1064, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4620', '', 'Provisie ass. tussenpersoon', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1065, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4630', '', 'Vraagposten (V&W)', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1066, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4640', '', 'Diverse verzekeringen', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1067, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4700', '', 'Overige kosten', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1068, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4750', '', 'Nog te verdelen posten', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1069, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4800', '', 'Rente hypotheek', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1070, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4810', '', 'Rente overige leningen', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1071, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '4820', '', 'Rente en kosten RC', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1072, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '7000', '', 'Inkoop hoog', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1073, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '7010', '', 'Inkoop laag', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1074, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '7020', '', 'Inkoop nul BTW', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1075, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '7030', '', 'Inkoop binnen EU', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1076, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '7040', '', 'Inkoop buiten EU', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1077, 'NL-VERKORT', 'INCOME', 'XXXXXX', '8000', '', 'Omzet hoog', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1078, 'NL-VERKORT', 'INCOME', 'XXXXXX', '8010', '', 'Omzet laag', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1079, 'NL-VERKORT', 'INCOME', 'XXXXXX', '8020', '', 'Omzet nul BTW', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1080, 'NL-VERKORT', 'INCOME', 'XXXXXX', '8090', '', 'Onderhanden omzet', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1081, 'NL-VERKORT', 'INCOME', 'XXXXXX', '9000', '', 'Bijzondere baten', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1082, 'NL-VERKORT', 'EXPENSE', 'XXXXXX', '9010', '', 'Bijzondere lasten', 1); +INSERT INTO llx_accounting_account (entity, rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (__ENTITY__, 1083, 'NL-VERKORT', 'BALANS', 'XXXXXX', '9900', '', 'Kapitaal', 1); From 4301cd5b7a1a92c4e4c6c24aa66a4134f57eefaf Mon Sep 17 00:00:00 2001 From: KlaasOl <43514101+KlaasOl@users.noreply.github.com> Date: Sun, 26 May 2019 15:40:44 +0200 Subject: [PATCH 047/828] Update llx_accounting_abc.sql Adding chart of account NL VERKORT --- htdocs/install/mysql/data/llx_accounting_abc.sql | 3 +++ 1 file changed, 3 insertions(+) diff --git a/htdocs/install/mysql/data/llx_accounting_abc.sql b/htdocs/install/mysql/data/llx_accounting_abc.sql index b1dcdb64c35..54ae1d6e466 100644 --- a/htdocs/install/mysql/data/llx_accounting_abc.sql +++ b/htdocs/install/mysql/data/llx_accounting_abc.sql @@ -129,3 +129,6 @@ INSERT INTO llx_accounting_system (fk_country, pcg_version, label, active) VALUE -- Description of chart of account DZ NSCF INSERT INTO llx_accounting_system (fk_country, pcg_version, label, active) VALUES ( 13, 'NSCF', 'Nouveau système comptable financier', 1); + +-- Description of chart of account NL NL-VERKORT +INSERT INTO llx_accounting_system (fk_country, pcg_version, label, active) VALUES ( 17, 'NL-VERKORT', 'Verkort rekeningschema', 1); From 45fabede280fcf2ede6519b6be6c751a182740bf Mon Sep 17 00:00:00 2001 From: andreubisquerra Date: Sun, 26 May 2019 16:44:17 +0200 Subject: [PATCH 048/828] Basic phone layout for Restaurants in TakePOS --- htdocs/langs/en_US/cashdesk.lang | 3 +- htdocs/takepos/admin/setup.php | 10 +++ htdocs/takepos/invoice.php | 127 +++++++++++++++++++++++++++++-- htdocs/takepos/takepos.php | 7 ++ 4 files changed, 138 insertions(+), 9 deletions(-) diff --git a/htdocs/langs/en_US/cashdesk.lang b/htdocs/langs/en_US/cashdesk.lang index 8ba3bda053f..83c217b06f7 100644 --- a/htdocs/langs/en_US/cashdesk.lang +++ b/htdocs/langs/en_US/cashdesk.lang @@ -67,4 +67,5 @@ ValidateAndClose=Validate and close Terminal=Terminal NumberOfTerminals=Number of Terminals TerminalSelect=Select terminal you want to use: -POSTicket=POS Ticket \ No newline at end of file +POSTicket=POS Ticket +BasicPhoneLayout=Use basic layout for phones \ No newline at end of file diff --git a/htdocs/takepos/admin/setup.php b/htdocs/takepos/admin/setup.php index f331587723b..3fb9d869cd0 100644 --- a/htdocs/takepos/admin/setup.php +++ b/htdocs/takepos/admin/setup.php @@ -73,6 +73,7 @@ if (GETPOST('action', 'alpha') == 'set') $res = dolibarr_set_const($db, "TAKEPOS_PRINT_SERVER", GETPOST('TAKEPOS_PRINT_SERVER', 'alpha'), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, "TAKEPOS_ORDER_PRINTERS", GETPOST('TAKEPOS_ORDER_PRINTERS', 'alpha'), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, "TAKEPOS_ORDER_NOTES", GETPOST('TAKEPOS_ORDER_NOTES', 'alpha'), 'chaine', 0, '', $conf->entity); + $res = dolibarr_set_const($db, "TAKEPOS_PHONE_BASIC_LAYOUT", GETPOST('TAKEPOS_PHONE_BASIC_LAYOUT', 'alpha'), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, "TAKEPOS_AUTO_PRINT_TICKETS", GETPOST('TAKEPOS_AUTO_PRINT_TICKETS', 'int'), 'int', 0, '', $conf->entity); $res = dolibarr_set_const($db, "TAKEPOS_HEADER", GETPOST('TAKEPOS_HEADER', 'alpha'), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, "TAKEPOS_FOOTER", GETPOST('TAKEPOS_FOOTER', 'alpha'), 'chaine', 0, '', $conf->entity); @@ -199,6 +200,15 @@ if ($conf->global->TAKEPOS_BAR_RESTAURANT && $conf->global->TAKEPOSCONNECTOR){ print ''; } +if ($conf->global->TAKEPOS_BAR_RESTAURANT) +{ + print ''; + print $langs->trans("BasicPhoneLayout"); + print ''; + print $form->selectyesno("TAKEPOS_PHONE_BASIC_LAYOUT", $conf->global->TAKEPOS_PHONE_BASIC_LAYOUT, 1); + print ''; +} + print ''; print $langs->trans('TicketVatGrouped'); print ''; diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index 510b949b92b..aac6f7ecaf8 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -44,6 +44,31 @@ $action = GETPOST('action', 'alpha'); $idproduct = GETPOST('idproduct', 'int'); $place = (GETPOST('place', 'int') > 0 ? GETPOST('place', 'int') : 0); // $place is id of table for Ba or Restaurant +if ($conf->global->TAKEPOS_PHONE_BASIC_LAYOUT==1 && $conf->browser->layout == 'phone') +{ + // DIRECT LINK TO THIS PAGE FROM MOBILE AND NO TERMINAL SELECTED + if ($_SESSION["takeposterminal"]=="") + { + if ($conf->global->TAKEPOS_NUM_TERMINALS=="1") $_SESSION["takeposterminal"]=1; + else + { + header("Location: takepos.php"); + exit; + } + } + $mobilepage = GETPOST('mobilepage', 'alpha'); + $title='TakePOS - Dolibarr '.DOL_VERSION; + if (! empty($conf->global->MAIN_APPLICATION_TITLE)) $title='TakePOS - '.$conf->global->MAIN_APPLICATION_TITLE; + $head=' + + + '; + top_htmlhead($head, $title, $disablejs, $disablehead, $arrayofjs, $arrayofcss); + print ' + + '; +} + /** * Abort invoice creationg with a given error message * @@ -497,13 +522,88 @@ print $langs->trans('TotalTTC'); print ' : '.price($invoice->total_ttc, 1, '', 1, - 1, - 1, $conf->currency).''; print '
'.$sectionwithinvoicelink; print ''; -print '' . $langs->trans('ReductionShort') . ''; -print '' . $langs->trans('Qty') . ''; -print '' . $langs->trans('TotalHTShort') . ''; +if ($_SESSION["basiclayout"]!=1) +{ + print '' . $langs->trans('ReductionShort') . ''; + print '' . $langs->trans('Qty') . ''; + print '' . $langs->trans('TotalHTShort') . ''; +} print "\n"; +if ($_SESSION["basiclayout"]==1) +{ + if ($mobilepage=="cats") + { + require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; + $categorie = new Categorie($db); + $categories = $categorie->get_full_arbo('product'); + $htmlforlines = ''; + foreach ($categories as $row){ + $htmlforlines.= ''; + $htmlforlines.= ''; + $htmlforlines.= $row['label']; + $htmlforlines.= ''; + $htmlforlines.= ''."\n"; + } + $htmlforlines.= ''; + $htmlforlines.= '
'; + $htmlforlines.= ''.$langs->trans("Floors").''; + $htmlforlines.= '
'; + print $htmlforlines; + } + + if ($mobilepage=="products") + { + require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; + $object = new Categorie($db); + $catid = GETPOST('catid', 'int'); + $result=$object->fetch($catid); + $prods = $object->getObjectsInCateg("product"); + $htmlforlines = ''; + foreach ($prods as $row) { + $htmlforlines.= ''; + $htmlforlines.= ''; + $htmlforlines.= $row->label; + $htmlforlines.= ''; + $htmlforlines.= ''."\n"; + } + $htmlforlines.= ''; + $htmlforlines.= '
'; + $htmlforlines.= ''.$langs->trans("Categories").''; + $htmlforlines.= ''.$langs->trans("Floors").''; + $htmlforlines.= '
'; + print $htmlforlines; + } + + if ($mobilepage=="places") + { + $sql="SELECT rowid, entity, label, leftpos, toppos, floor FROM ".MAIN_DB_PREFIX."takepos_floor_tables"; + $resql = $db->query($sql); + $rows = array(); + $htmlforlines = ''; + while($row = $db->fetch_array($resql)){ + $rows[] = $row; + $htmlforlines.= ''; + $htmlforlines.= ''; + $htmlforlines.= $row['label']; + $htmlforlines.= ''; + $htmlforlines.= ''."\n"; + } + $htmlforlines.= ''; + $htmlforlines.= '
'; + $htmlforlines.= ''.$langs->trans("Categories").''; + $htmlforlines.= ''.$langs->trans("Floors").''; + $htmlforlines.= '
'; + print $htmlforlines; + } +} + if ($placeid > 0) { + if ($_SESSION["basiclayout"]==1 && $mobilepage!="invoice") return; if (is_array($invoice->lines) && count($invoice->lines)) { $tmplines = array_reverse($invoice->lines); @@ -538,11 +638,14 @@ if ($placeid > 0) } } if (!empty($line->array_options['options_order_notes'])) $htmlforlines.= "
(".$line->array_options['options_order_notes'].")"; - $htmlforlines.= ''; - $htmlforlines.= '' . vatrate($line->remise_percent, true) . ''; - $htmlforlines.= '' . $line->qty . ''; - $htmlforlines.= '' . price($line->total_ttc) . ''; - $htmlforlines.= ''."\n"; + if ($_SESSION["basiclayout"]!=1) + { + $htmlforlines.= ''; + $htmlforlines.= '' . vatrate($line->remise_percent, true) . ''; + $htmlforlines.= '' . $line->qty . ''; + $htmlforlines.= '' . price($line->total_ttc) . ''; + } + $htmlforlines.= ''."\n"; print $htmlforlines; } @@ -558,6 +661,14 @@ else { // No invoice generated yet print ''; +if ($_SESSION["basiclayout"]==1 && $mobilepage=="invoice") +{ + print ''; +} + if ($invoice->socid != $conf->global->{'CASHDESK_ID_THIRDPARTY'.$_SESSION["takeposterminal"]}) { $soc = new Societe($db); diff --git a/htdocs/takepos/takepos.php b/htdocs/takepos/takepos.php index c0a37881cf9..7e55bbc5936 100644 --- a/htdocs/takepos/takepos.php +++ b/htdocs/takepos/takepos.php @@ -57,6 +57,13 @@ if ($conf->browser->layout == 'phone') { $maxcategbydefaultforthisdevice=8; $maxproductbydefaultforthisdevice=16; + //REDIRECT TO BASIC LAYOUT IF TERMINAL SELECTED AND BASIC MOBILE LAYOUT ENABLED + if ($_SESSION["takeposterminal"]!="" && $conf->global->TAKEPOS_PHONE_BASIC_LAYOUT==1) + { + $_SESSION["basiclayout"]=1; + header("Location: invoice.php?mobilepage=invoice"); + exit; + } } $MAXCATEG = (empty($conf->global->TAKEPOS_NB_MAXCATEG)?$maxcategbydefaultforthisdevice:$conf->global->TAKEPOS_NB_MAXCATEG); $MAXPRODUCT = (empty($conf->global->TAKEPOS_NB_MAXPRODUCT)?$maxproductbydefaultforthisdevice:$conf->global->TAKEPOS_NB_MAXPRODUCT); From 19b275f2d16207db6d415ec0c52021c273f733b8 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Sun, 26 May 2019 22:33:35 +0200 Subject: [PATCH 049/828] Fix bankline cat with various payment --- htdocs/compta/bank/class/paymentvarious.class.php | 2 +- htdocs/compta/bank/various_payment/card.php | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/compta/bank/class/paymentvarious.class.php b/htdocs/compta/bank/class/paymentvarious.class.php index fad76c45d1b..ebdf085e18c 100644 --- a/htdocs/compta/bank/class/paymentvarious.class.php +++ b/htdocs/compta/bank/class/paymentvarious.class.php @@ -421,7 +421,7 @@ class PaymentVarious extends CommonObject $this->label, $sign * abs($this->amount), $this->num_payment, - ($category_transaction > 0 ? $category_transaction : 0), + ($this->category_transaction > 0 ? $this->category_transaction : 0), $user ); diff --git a/htdocs/compta/bank/various_payment/card.php b/htdocs/compta/bank/various_payment/card.php index 176fea7e8db..5b4ae6c8b4a 100644 --- a/htdocs/compta/bank/various_payment/card.php +++ b/htdocs/compta/bank/various_payment/card.php @@ -53,7 +53,7 @@ $paymenttype = GETPOST("paymenttype", "int"); $accountancy_code = GETPOST("accountancy_code", "alpha"); $subledger_account = GETPOST("subledger_account", "alpha"); $projectid = (GETPOST('projectid', 'int') ? GETPOST('projectid', 'int') : GETPOST('fk_project', 'int')); -$cat1 = GETPOST("cat1", 'alpha'); +$category_transaction = GETPOST("category_transaction", 'alpha'); // Security check $socid = GETPOST("socid", "int"); @@ -112,7 +112,7 @@ if (empty($reshook)) $object->type_payment=GETPOST("paymenttype", 'int') > 0 ? GETPOST("paymenttype", "int") : 0; $object->num_payment=GETPOST("num_payment", 'alpha'); $object->fk_user_author=$user->id; - $object->category_transaction=GETPOST("cat1", 'alpha'); + $object->category_transaction=GETPOST("category_transaction", 'alpha'); $object->accountancy_code=GETPOST("accountancy_code") > 0 ? GETPOST("accountancy_code", "alpha") : ""; $object->subledger_account=GETPOST("subledger_account") > 0 ? GETPOST("subledger_account", "alpha") : ""; @@ -328,7 +328,7 @@ if ($action == 'create') if (is_array($options) && count($options)) { print ''.$langs->trans("Rubrique").''; - print Form::selectarray('cat1', $options, GETPOST('cat1'), 1); + print Form::selectarray('category_transaction', $options, GETPOST('category_transaction'), 1); print ''; } From c79b9b97043b05f156114265c5db3fb149189e86 Mon Sep 17 00:00:00 2001 From: atm-ph Date: Mon, 27 May 2019 11:18:29 +0200 Subject: [PATCH 050/828] Fix create bills on mass action does not retrieve the original currency code --- htdocs/core/actions_massactions.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php index 0c66d51d589..00ffe03c7ed 100644 --- a/htdocs/core/actions_massactions.inc.php +++ b/htdocs/core/actions_massactions.inc.php @@ -510,7 +510,7 @@ if ($massaction == 'confirm_createbills') $objecttmp->cond_reglement_id = $cmd->cond_reglement_id; $objecttmp->mode_reglement_id = $cmd->mode_reglement_id; $objecttmp->fk_project = $cmd->fk_project; - + $objecttmp->multicurrency_code = $cmd->multicurrency_code; $datefacture = dol_mktime(12, 0, 0, $_POST['remonth'], $_POST['reday'], $_POST['reyear']); if (empty($datefacture)) { From c1242f409b034a47b10a678ad4615e2dc4cfead1 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Mon, 27 May 2019 11:30:59 +0200 Subject: [PATCH 051/828] FIX add Windows and Mac executable --- htdocs/core/lib/functions.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index bce137d1e11..e50e0874faa 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -8275,7 +8275,7 @@ function dolGetButtonTitle($label, $helpText = '', $iconClass = 'fa fa-file', $u */ function isAFileWithExecutableContent($filename) { - if (preg_match('/\.(htm|html|js|php|phtml|pl|py|cgi|ksh|sh|bash)$/i', $filename)) + if (preg_match('/\.(htm|html|js|php|phtml|pl|py|cgi|ksh|sh|bash|bat|cmd|wsk|exe|dmg)$/i', $filename)) { return true; } From 3df6f0f6c333b899fe4627dd70b92a861ce223f7 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Mon, 27 May 2019 11:43:06 +0200 Subject: [PATCH 052/828] FIX wrong extension --- htdocs/core/lib/functions.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index e50e0874faa..c189e309e4c 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -8275,7 +8275,7 @@ function dolGetButtonTitle($label, $helpText = '', $iconClass = 'fa fa-file', $u */ function isAFileWithExecutableContent($filename) { - if (preg_match('/\.(htm|html|js|php|phtml|pl|py|cgi|ksh|sh|bash|bat|cmd|wsk|exe|dmg)$/i', $filename)) + if (preg_match('/\.(htm|html|js|php|phtml|pl|py|cgi|ksh|sh|bash|bat|cmd|wpk|exe|dmg)$/i', $filename)) { return true; } From 5539b07bc5422d626ad291d97019f0e1c113039f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 28 May 2019 12:15:30 +0200 Subject: [PATCH 053/828] Fix missing title --- htdocs/expensereport/card.php | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/htdocs/expensereport/card.php b/htdocs/expensereport/card.php index e6354c01105..0d008cea93d 100644 --- a/htdocs/expensereport/card.php +++ b/htdocs/expensereport/card.php @@ -2076,17 +2076,13 @@ else if ($action != 'editline' || $line->rowid != GETPOST('rowid', 'int')) { print ''; - + // Num print ''; print $numline; print ''; - - /*print ''; - print img_picto($langs->trans("Document"), "object_generic"); - print ' '.$piece_comptable.''; - print '';*/ - + // Date print ''.dol_print_date($db->jdate($line->date), 'day').''; + // Project if (! empty($conf->projet->enabled)) { print ''; @@ -2094,21 +2090,26 @@ else { $projecttmp->id=$line->fk_project; $projecttmp->ref=$line->projet_ref; + $projecttmp->title=$line->projet_title; print $projecttmp->getNomUrl(1); } print ''; } + // IK if (!empty($conf->global->MAIN_USE_EXPENSE_IK)) { print ''; print dol_getIdFromCode($db, $line->fk_c_exp_tax_cat, 'c_exp_tax_cat', 'rowid', 'label'); print ''; } + // Type of fee print ''; $labeltype = ($langs->trans(($line->type_fees_code)) == $line->type_fees_code ? $line->type_fees_libelle : $langs->trans($line->type_fees_code)); print $labeltype; print ''; + // Comment print ''.dol_nl2br($line->comments).''; + // VAT rate print ''.vatrate($line->vatrate, true).''; // Unit price HT print ''; @@ -2716,9 +2717,6 @@ if ($action != 'create' && $action != 'edit') print '
'; -//$conf->global->DOL_URL_ROOT_DOCUMENT_PHP=dol_buildpath('/expensereport/documentwrapper.php',1); - - // Select mail models is same action as presend if (GETPOST('modelselected', 'alpha')) { $action = 'presend'; From 2404e6a521401cda300fb27f48f10a31f37f627e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 28 May 2019 12:38:21 +0200 Subject: [PATCH 054/828] Fix cast to int --- htdocs/core/db/DoliDB.class.php | 2 +- htdocs/core/lib/functions.lib.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/db/DoliDB.class.php b/htdocs/core/db/DoliDB.class.php index 575cf2256ef..b05f118b08b 100644 --- a/htdocs/core/db/DoliDB.class.php +++ b/htdocs/core/db/DoliDB.class.php @@ -284,7 +284,7 @@ abstract class DoliDB implements Database if ($string==0 || $string=="0000-00-00 00:00:00") return ''; $string=preg_replace('/([^0-9])/i', '', $string); $tmp=$string.'000000'; - $date=dol_mktime(substr($tmp, 8, 2), substr($tmp, 10, 2), substr($tmp, 12, 2), substr($tmp, 4, 2), substr($tmp, 6, 2), substr($tmp, 0, 4), $gm); + $date=dol_mktime((int) substr($tmp, 8, 2), (int) substr($tmp, 10, 2), (int) substr($tmp, 12, 2), (int) substr($tmp, 4, 2), (int) substr($tmp, 6, 2), (int) substr($tmp, 0, 4), $gm); return $date; } diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index bce137d1e11..12449d201f6 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -1982,7 +1982,7 @@ function dol_mktime($hour, $minute, $second, $month, $day, $year, $gm = false, $ //var_dump($localtz); //var_dump($year.'-'.$month.'-'.$day.'-'.$hour.'-'.$minute); $dt = new DateTime(null, $localtz); - $dt->setDate($year, $month, $day); + $dt->setDate((int) $year, (int) $month, (int) $day); $dt->setTime((int) $hour, (int) $minute, (int) $second); $date=$dt->getTimestamp(); // should include daylight saving time //var_dump($date); From 1c3f519b1a4d37b08665acfcc93523fac47c20ec Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 28 May 2019 12:54:35 +0200 Subject: [PATCH 055/828] Remove warnings --- htdocs/core/class/translate.class.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/core/class/translate.class.php b/htdocs/core/class/translate.class.php index 40c5ef8c048..fe00f803a6b 100644 --- a/htdocs/core/class/translate.class.php +++ b/htdocs/core/class/translate.class.php @@ -196,6 +196,7 @@ class Translate $modulename = ''; // Search if a module directory name is provided into lang file name + $regs=array(); if (preg_match('/^([^@]+)@([^@]+)$/i', $domain, $regs)) { $newdomain = $regs[1]; @@ -223,7 +224,7 @@ class Translate return -1; } - foreach($this->dir as $keydir => $searchdir) + foreach($this->dir as $searchdir) { // Directory of translation files $file_lang = $searchdir.($modulename?'/'.$modulename:'')."/langs/".$langofdir."/".$newdomain.".lang"; From 2352463c212b506f814e90ef201e99747811fcf1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 28 May 2019 13:23:12 +0200 Subject: [PATCH 056/828] Fix link to change validator is on validate status only --- htdocs/holiday/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/holiday/card.php b/htdocs/holiday/card.php index e569096e5ff..288cecef75d 100644 --- a/htdocs/holiday/card.php +++ b/htdocs/holiday/card.php @@ -1229,7 +1229,7 @@ else print ''; print ''.$valideur->getNomUrl(-1); $include_users = $object->fetch_users_approver_holiday(); - if (in_array($user->id, $include_users) && $object->statut != 1) + if (in_array($user->id, $include_users) && $object->statut == Holiday::STATUS_VALIDATED) { print ''.img_edit($langs->trans("Edit")).''; } From a853764f6d7226db4481e2d0cbf56b12926a518a Mon Sep 17 00:00:00 2001 From: atm-arnaud Date: Tue, 28 May 2019 15:03:36 +0200 Subject: [PATCH 057/828] FIX productaccount buylist with pages --- htdocs/accountancy/admin/productaccount.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/accountancy/admin/productaccount.php b/htdocs/accountancy/admin/productaccount.php index 389dd8df7b8..67d6920ced5 100644 --- a/htdocs/accountancy/admin/productaccount.php +++ b/htdocs/accountancy/admin/productaccount.php @@ -279,7 +279,8 @@ if ($result) if ($search_desc > 0) $param.="&search_desc=".urlencode($search_desc); if ($search_current_account > 0) $param.="&search_current_account=".urlencode($search_current_account); if ($search_current_account_valid && $search_current_account_valid != '-1') $param.="&search_current_account_valid=".urlencode($search_current_account_valid); - + if ($accounting_product_mode) $param.="&accounting_product_mode=".urlencode($accounting_product_mode); + print '
'; if ($optioncss != '') print ''; print ''; From cd32734c5888d049aba58d015ef04990b1e6f833 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 28 May 2019 16:10:11 +0200 Subject: [PATCH 058/828] CSS --- htdocs/website/index.php | 42 +++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/htdocs/website/index.php b/htdocs/website/index.php index 2099102cced..379e5d2e05c 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -56,6 +56,7 @@ $type_container=GETPOST('WEBSITE_TYPE_CONTAINER', 'alpha'); $section_dir = GETPOST('section_dir', 'alpha'); $file_manager = GETPOST('file_manager', 'alpha'); +$replacesite = GETPOST('replacesite', 'alpha'); if (GETPOST('deletesite', 'alpha')) { $action='deletesite'; } if (GETPOST('delete', 'alpha')) { $action='delete'; } @@ -73,6 +74,7 @@ if (GETPOST('importsite', 'alpha')) { $action='importsite'; } if (GETPOST('createfromclone', 'alpha')) { $action='createfromclone'; } if (GETPOST('createpagefromclone', 'alpha')) { $action='createpagefromclone'; } if (empty($action) && $file_manager) $action='file_manager'; +if (empty($action) && $replacesite) $action='replacesite'; // Load variable for pagination $limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; @@ -1745,6 +1747,10 @@ if ($action == 'file_manager') { print ''; } +if ($action == 'replacesite') +{ + print ''; +} print '
'; @@ -1817,9 +1823,7 @@ if (! GETPOST('hide_websitemenu')) print '   '; print ''; - //print ''; - print ''; - print ''; + if (! $atleastonepage) { print ''; @@ -1829,11 +1833,16 @@ if (! GETPOST('hide_websitemenu')) print ''; } + //print ''; + print ''; + print ''; + print ''; print '   '; - print ''; + print 'ref.'" class="button nobordertransp"'.$disabled.' title="'.dol_escape_htmltag($langs->trans("MediaFiles")).'">'; + //print ''; /*print ''.dol_escape_htmltag($langs->trans("MediaFiles")).''; print ''; */ + + //print ''.dol_escape_htmltag($langs->trans("Replace")).'" name="replacesite">'; + print 'ref.'" class="button nobordertransp"'.$disabled.' title="'.dol_escape_htmltag($langs->trans("ReplaceWebSiteContent")).'">'; } print '
'; @@ -1900,10 +1912,10 @@ if (! GETPOST('hide_websitemenu')) print '
'; } - if (in_array($action, array('editcss','editmenu','file_manager'))) + if (in_array($action, array('editcss','editmenu','file_manager','replacesite'))) { - if (preg_match('/^create/', $action) && $action != 'file_manager') print ''; - if (preg_match('/^edit/', $action) && $action != 'file_manager') print ''; + if (preg_match('/^create/', $action) && $action != 'file_manager' && $action != 'replacesite') print ''; + if (preg_match('/^edit/', $action) && $action != 'file_manager' && $action != 'replacesite') print ''; if ($action != 'preview') print ''; } @@ -2155,7 +2167,7 @@ if (! GETPOST('hide_websitemenu')) // TODO Add js to save alias like we save virtual host name and use dynamic virtual host for url of id=previewpageext } - if (! in_array($action, array('editcss','editmenu','file_manager','createsite','createcontainer','createpagefromclone'))) + if (! in_array($action, array('editcss','editmenu','file_manager','replacesite','createsite','createcontainer','createpagefromclone'))) { if (preg_match('/^create/', $action)) print ''; if (preg_match('/^edit/', $action)) print ''; @@ -2815,7 +2827,7 @@ if ($action == 'editmeta' || $action == 'createcontainer') if ($action == 'editfile' || $action == 'file_manager') { print ''."\n"; - print '


'; + print '

'; //print '
'.$langs->trans("FeatureNotYetAvailable").''; $module = 'medias'; @@ -2825,6 +2837,18 @@ if ($action == 'editfile' || $action == 'file_manager') print '
'; } +if ($action == 'replacesite') +{ + print ''."\n"; + print '

'; + + print load_fiche_titre($langs->trans("ReplaceWebSiteContent")); + + print '
'.$langs->trans("FeatureNotYetAvailable").''; + + print '
'; +} + if ($action == 'editmenu') { print ''."\n"; From 454316a5faada99b18a0b2f40294c4f0bd9a0fcd Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 28 May 2019 22:18:22 +0200 Subject: [PATCH 059/828] Fix getDomainFromURL --- htdocs/core/lib/geturl.lib.php | 10 ++++++--- test/phpunit/GetUrlLibTest.php | 41 +++++++++++++++++++++++++++++++++- 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/htdocs/core/lib/geturl.lib.php b/htdocs/core/lib/geturl.lib.php index c161eb056fe..ba349edd1b2 100644 --- a/htdocs/core/lib/geturl.lib.php +++ b/htdocs/core/lib/geturl.lib.php @@ -172,14 +172,18 @@ function getURLContent($url, $postorget = 'GET', $param = '', $followlocation = * For example: https://www.abc.mydomain.com/dir/page.html return 'mydomain' * * @param string $url Full URL. + * @param string $mode 0=return 'mydomain', 1=return 'mydomain.com' * @return string Returns domaine name */ -function getDomainFromURL($url) +function getDomainFromURL($url, $mode=0) { $tmpdomain = preg_replace('/^https?:\/\//i', '', $url); // Remove http(s):// $tmpdomain = preg_replace('/\/.*$/i', '', $tmpdomain); // Remove part after domain - $tmpdomain = preg_replace('/\.[^\.]+$/', '', $tmpdomain); // Remove first level domain (.com, .net, ...) - $tmpdomain = preg_replace('/^[^\.]+\./', '', $tmpdomain); // Remove part www. before domain name + $tmpdomain = preg_replace('/^.*\.([^\.]+)\.([^\.]+)$/', '\1.\2', $tmpdomain); // Remove part www.abc before domain name + if (empty($mode)) + { + $tmpdomain = preg_replace('/\.[^\.]+$/', '', $tmpdomain); // Remove first level domain (.com, .net, ...) + } return $tmpdomain; } diff --git a/test/phpunit/GetUrlLibTest.php b/test/phpunit/GetUrlLibTest.php index 0e0cfb7d767..a8fb1f1718c 100644 --- a/test/phpunit/GetUrlLibTest.php +++ b/test/phpunit/GetUrlLibTest.php @@ -46,7 +46,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class GetUrlLibTest extends PHPUnit_Framework_TestCase +class GetUrlLibTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; @@ -167,6 +167,45 @@ class GetUrlLibTest extends PHPUnit_Framework_TestCase return 1; } + /** + * testGetDomainFromURL + * + * @return int + */ + public function testGetDomainFromURL() + { + global $conf,$user,$langs,$db; + $conf=$this->savconf; + $user=$this->savuser; + $langs=$this->savlangs; + $db=$this->savdb; + + $result=getDomainFromURL('https://dolimed.com'); + print __METHOD__." result=".$result."\n"; + $this->assertEquals('dolimed', $result, 'Test 1'); + + $result=getDomainFromURL('http://www.dolimed.com/screenshots/afile'); + print __METHOD__." result=".$result."\n"; + $this->assertEquals('dolimed', $result, 'Test 2'); + + $result=getDomainFromURL('http://www.with.dolimed.com/screenshots/afile'); + print __METHOD__." result=".$result."\n"; + $this->assertEquals('dolimed', $result, 'Test 3'); + + $result=getDomainFromURL('https://dolimed.com', 1); + print __METHOD__." result=".$result."\n"; + $this->assertEquals('dolimed.com', $result, 'Test 4'); + + $result=getDomainFromURL('http://www.dolimed.com/screenshots/afile', 1); + print __METHOD__." result=".$result."\n"; + $this->assertEquals('dolimed.com', $result, 'Test 5'); + + $result=getDomainFromURL('http://www.with.dolimed.com/screenshots/afile', 1); + print __METHOD__." result=".$result."\n"; + $this->assertEquals('dolimed.com', $result, 'Test 6'); + + return 1; + } /** * testRemoveHtmlComment From 3841fb5a85cb2a4bddb164a2bb4a5194db92f00b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 28 May 2019 22:18:46 +0200 Subject: [PATCH 060/828] Fix doxygen --- htdocs/core/lib/geturl.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/geturl.lib.php b/htdocs/core/lib/geturl.lib.php index ba349edd1b2..59469a6313c 100644 --- a/htdocs/core/lib/geturl.lib.php +++ b/htdocs/core/lib/geturl.lib.php @@ -172,7 +172,7 @@ function getURLContent($url, $postorget = 'GET', $param = '', $followlocation = * For example: https://www.abc.mydomain.com/dir/page.html return 'mydomain' * * @param string $url Full URL. - * @param string $mode 0=return 'mydomain', 1=return 'mydomain.com' + * @param int $mode 0=return 'mydomain', 1=return 'mydomain.com' * @return string Returns domaine name */ function getDomainFromURL($url, $mode=0) From 4295d707d001980ed7e5805bb8ed9b3ce92608e8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 28 May 2019 22:21:00 +0200 Subject: [PATCH 061/828] More complete test --- test/phpunit/GetUrlLibTest.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test/phpunit/GetUrlLibTest.php b/test/phpunit/GetUrlLibTest.php index a8fb1f1718c..61d23a8d5d2 100644 --- a/test/phpunit/GetUrlLibTest.php +++ b/test/phpunit/GetUrlLibTest.php @@ -180,6 +180,14 @@ class GetUrlLibTest extends PHPUnit\Framework\TestCase $langs=$this->savlangs; $db=$this->savdb; + $result=getDomainFromURL('http://localhost'); + print __METHOD__." result=".$result."\n"; + $this->assertEquals('localhost', $result, 'Test 0a'); + + $result=getDomainFromURL('http://localhost', 1); + print __METHOD__." result=".$result."\n"; + $this->assertEquals('localhost', $result, 'Test 0b'); + $result=getDomainFromURL('https://dolimed.com'); print __METHOD__." result=".$result."\n"; $this->assertEquals('dolimed', $result, 'Test 1'); From 716722c71189f219a442dc1ad7cacbd235cf20e5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 29 May 2019 00:17:07 +0200 Subject: [PATCH 062/828] Fix filter on status --- htdocs/cron/list.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/htdocs/cron/list.php b/htdocs/cron/list.php index 6bfa0c025af..abc94c29acd 100644 --- a/htdocs/cron/list.php +++ b/htdocs/cron/list.php @@ -55,7 +55,7 @@ $pagenext = $page + 1; if (! $sortfield) $sortfield='t.status,t.priority'; if (! $sortorder) $sortorder='DESC,ASC'; -$search_status=GETPOST('search_status', 'int')?GETPOST('search_status', 'int'):GETPOST('status', 'int'); +$search_status=(GETPOSTISSET('search_status')?GETPOST('search_status', 'int'):GETPOST('status', 'int')); //Search criteria $search_label=GETPOST("search_label", 'alpha'); @@ -251,7 +251,7 @@ $sql.= " t.libname,"; $sql.= " t.test"; $sql.= " FROM ".MAIN_DB_PREFIX."cronjob as t"; $sql.= " WHERE entity IN (0,".$conf->entity.")"; -if ($search_status >= 0 && $search_status < 2) $sql.= " AND t.status = ".(empty($search_status)?'0':'1'); +if ($search_status >= 0 && $search_status < 2 && $search_status != '') $sql.= " AND t.status = ".(empty($search_status)?'0':'1'); //Manage filter if (is_array($filter) && count($filter)>0) { foreach($filter as $key => $value) { @@ -337,8 +337,6 @@ print ''; print ''; print ''; print ''; -print ''; -print ''; // Line with explanation and button new job $newcardbutton=''; From 42306835d2f6e0cef57e38f56081b2bc734c664a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 29 May 2019 09:38:19 +0200 Subject: [PATCH 063/828] Fix CSS --- htdocs/cron/list.php | 5 ++--- .../modulebuilder/template/myobject_list.php | 16 ++------------ htdocs/theme/eldy/btn.inc.php | 22 +++++++++---------- 3 files changed, 14 insertions(+), 29 deletions(-) diff --git a/htdocs/cron/list.php b/htdocs/cron/list.php index abc94c29acd..7273640e77e 100644 --- a/htdocs/cron/list.php +++ b/htdocs/cron/list.php @@ -338,9 +338,8 @@ print ''; print ''; print ''; -// Line with explanation and button new job -$newcardbutton=''; -$newcardbutton.= dolGetButtonTitle($langs->trans('New'), $langs->trans('CronCreateJob'), 'fa fa-plus-circle', DOL_URL_ROOT.'/societe/card.php?action=create'.$typefilter, '', $user->rights->cron->create); +// Line with explanation and button new +$newcardbutton = dolGetButtonTitle($langs->trans('New'), $langs->trans('CronCreateJob'), 'fa fa-plus-circle', DOL_URL_ROOT.'/cron/card.php?action=create&backtopage='.urlencode($_SERVER['PHP_SELF']), '', $user->rights->cron->create); print_barre_liste($pagetitle, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'title_setup', 0, $newcardbutton, '', $limit); diff --git a/htdocs/modulebuilder/template/myobject_list.php b/htdocs/modulebuilder/template/myobject_list.php index d1e69a18cc4..5e6388d55f9 100644 --- a/htdocs/modulebuilder/template/myobject_list.php +++ b/htdocs/modulebuilder/template/myobject_list.php @@ -354,19 +354,7 @@ print ''; print ''; print ''; -$newcardbutton=''; -//if ($user->rights->mymodule->creer) -//{ - $newcardbutton=''.$langs->trans('New').''; - $newcardbutton.= ''; - $newcardbutton.= ''; -//} -//else -//{ -// $newcardbutton=''.$langs->trans('New').'; -// $newcardbutton.= ''; -// $newcardbutton.= ''; -//} +$newcardbutton = dolGetButtonTitle($langs->trans('New'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/mymodule/myobject_card.php?action=create&backtopage='.urlencode($_SERVER['PHP_SELF']), '', $user->rights->mymodule->write); print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'title_companies', 0, $newcardbutton, '', $limit); @@ -600,7 +588,7 @@ if (in_array('builddoc', $arrayofmassactions) && ($nbtotalofrecords === '' || $n $filedir=$diroutputmassaction; $genallowed=$user->rights->mymodule->read; - $delallowed=$user->rights->mymodule->create; + $delallowed=$user->rights->mymodule->write; print $formfile->showdocuments('massfilesarea_mymodule', '', $filedir, $urlsource, 0, $delallowed, '', 1, 1, 0, 48, 1, $param, $title, '', '', '', null, $hidegeneratedfilelistifempty); } diff --git a/htdocs/theme/eldy/btn.inc.php b/htdocs/theme/eldy/btn.inc.php index f95940a61a0..c0cd029126d 100644 --- a/htdocs/theme/eldy/btn.inc.php +++ b/htdocs/theme/eldy/btn.inc.php @@ -59,19 +59,17 @@ span.butAction, span.butActionDelete { display: inline-block; /* text-align: center; New button are on right of screen */ cursor: pointer; - /*color: #fff !important; - background: rgb(); -border: 1px solid rgb(); -border-color: rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.25); -border-top-right-radius: 0 !important; -border-bottom-right-radius: 0 !important; -border-top-left-radius: 0 !important; -border-bottom-left-radius: 0 !important;*/ } -a.butActionNew>span.fa-plus-circle, a.butActionNew>span.fa-plus-circle:hover { padding-left: 6px; font-size: 1.5em; border: none; box-shadow: none; webkit-box-shadow: none; } -a.butActionNewRefused>span.fa-plus-circle, a.butActionNewRefused>span.fa-plus-circle:hover { padding-left: 6px; font-size: 1.5em; border: none; box-shadow: none; webkit-box-shadow: none; } -a.butActionNew>span.fa-list-alt, a.butActionNew>span.fa-list-alt:hover { padding-left: 6px; font-size: 1.5em; border: none; box-shadow: none; webkit-box-shadow: none; } -a.butActionNewRefused>span.fa-list-alt, a.butActionNewRefused>span.fa-list-alt:hover { padding-left: 6px; font-size: 1.5em; border: none; box-shadow: none; webkit-box-shadow: none; } +a.butActionNew>span.fa-plus-circle, a.butActionNew>span.fa-plus-circle:hover, +span.butActionNew>span.fa-plus-circle, span.butActionNew>span.fa-plus-circle:hover, +a.butActionNewRefused>span.fa-plus-circle, a.butActionNewRefused>span.fa-plus-circle:hover, +span.butActionNewRefused>span.fa-plus-circle, span.butActionNewRefused>span.fa-plus-circle:hover, +a.butActionNew>span.fa-list-alt, a.butActionNew>span.fa-list-alt:hover, +span.butActionNew>span.fa-list-alt, span.butActionNew>span.fa-list-alt:hover, +a.butActionNewRefused>span.fa-list-alt, a.butActionNewRefused>span.fa-list-alt:hover, +span.butActionNewRefused>span.fa-list-alt, span.butActionNewRefused>span.fa-list-alt:hover { + padding-left: 6px; font-size: 1.5em; border: none; box-shadow: none; webkit-box-shadow: none; +} .butAction:hover { -webkit-box-shadow: 0px 0px 6px 1px rgba(50, 50, 50, 0.4), 0px 0px 0px rgba(60,60,60,0.1); From b024c288b85a772391d9a617a3ff41bcbde594d4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 29 May 2019 09:46:39 +0200 Subject: [PATCH 064/828] Fix duplicate translation --- htdocs/cron/class/cronjob.class.php | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/htdocs/cron/class/cronjob.class.php b/htdocs/cron/class/cronjob.class.php index 4345385f16d..7934a628880 100644 --- a/htdocs/cron/class/cronjob.class.php +++ b/htdocs/cron/class/cronjob.class.php @@ -159,11 +159,11 @@ class Cronjob extends CommonObject // Check parameters // Put here code to add a control on parameters values if (dol_strlen($this->datestart)==0) { - $this->errors[]=$langs->trans('CronFieldMandatory', $langs->trans('CronDtStart')); + $this->errors[]=$langs->trans('CronFieldMandatory', $langs->transnoentitiesnoconv('CronDtStart')); $error++; } if (empty($this->label)) { - $this->errors[]=$langs->trans('CronFieldMandatory', $langs->trans('CronLabel')); + $this->errors[]=$langs->trans('CronFieldMandatory', $langs->transnoentitiesnoconv('CronLabel')); $error++; } if ((dol_strlen($this->datestart)!=0) && (dol_strlen($this->dateend)!=0) && ($this->dateend<$this->datestart)) { @@ -171,28 +171,27 @@ class Cronjob extends CommonObject $error++; } if (empty($this->unitfrequency)) { - $this->errors[]=$langs->trans('CronFieldMandatory', $langs->trans('CronFrequency')); + $this->errors[]=$langs->trans('CronFieldMandatory', $langs->transnoentitiesnoconv('CronFrequency')); $error++; } if (($this->jobtype=='command') && (empty($this->command))) { - $this->errors[]=$langs->trans('CronFieldMandatory', $langs->trans('CronCommand')); + $this->errors[]=$langs->trans('CronFieldMandatory', $langs->transnoentitiesnoconv('CronCommand')); $error++; } if (($this->jobtype=='method') && (empty($this->classesname))) { - $this->errors[]=$langs->trans('CronFieldMandatory', $langs->trans('CronClass')); + $this->errors[]=$langs->trans('CronFieldMandatory', $langs->transnoentitiesnoconv('CronClass')); $error++; } if (($this->jobtype=='method' || $this->jobtype == 'function') && (empty($this->methodename))) { - $this->errors[]=$langs->trans('CronFieldMandatory', $langs->trans('CronMethod')); + $this->errors[]=$langs->trans('CronFieldMandatory', $langs->transnoentitiesnoconv('CronMethod')); $error++; } if (($this->jobtype=='method') && (empty($this->objectname))) { - $this->errors[]=$langs->trans('CronFieldMandatory', $langs->trans('CronObject')); + $this->errors[]=$langs->trans('CronFieldMandatory', $langs->transnoentitiesnoconv('CronObject')); $error++; } - if (($this->jobtype=='function') && (empty($this->libname))) { - $this->errors[]=$langs->trans('CronFieldMandatory', $langs->trans('CronLib')); + $this->errors[]=$langs->trans('CronFieldMandatory', $langs->transnoentitiesnoconv('CronLib')); $error++; } From 22189949580e8ed6b4538071b235a0b633814849 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 29 May 2019 09:51:45 +0200 Subject: [PATCH 065/828] FIX Duplicate encoding on error message --- htdocs/adherents/card.php | 4 ++-- htdocs/admin/company.php | 2 +- htdocs/admin/delais.php | 4 ++-- htdocs/admin/menus/edit.php | 4 ++-- htdocs/comm/mailing/advtargetemailing.php | 2 +- htdocs/comm/mailing/card.php | 2 +- htdocs/comm/remx.php | 4 ++-- htdocs/commande/class/commande.class.php | 2 +- htdocs/compta/facture/card.php | 6 +++--- htdocs/compta/facture/class/facture.class.php | 2 +- htdocs/compta/prelevement/ligne.php | 2 +- htdocs/contrat/class/contrat.class.php | 4 ++-- htdocs/core/photos_resize.php | 2 +- htdocs/don/card.php | 8 ++++---- htdocs/don/class/don.class.php | 16 ++++++++-------- htdocs/fichinter/card.php | 2 +- .../fourn/class/fournisseur.commande.class.php | 2 +- htdocs/hrm/establishment/card.php | 6 +++--- htdocs/install/step1.php | 2 +- htdocs/product/admin/price_rules.php | 2 +- .../company/actions_card_company.class.php | 4 ++-- htdocs/societe/card.php | 6 +++--- htdocs/societe/checkvat/checkVatPopup.php | 2 +- htdocs/societe/class/societe.class.php | 4 ++-- htdocs/variants/generator.php | 2 +- 25 files changed, 48 insertions(+), 48 deletions(-) diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php index 85720de5156..3aed4bc11d5 100644 --- a/htdocs/adherents/card.php +++ b/htdocs/adherents/card.php @@ -273,7 +273,7 @@ if (empty($reshook)) { if (empty($login)) { $error++; - setEventMessages($langs->trans("ErrorFieldRequired", $langs->trans("Login")), null, 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Login")), null, 'errors'); } } // Create new object @@ -509,7 +509,7 @@ if (empty($reshook)) { if (empty($login)) { $error++; - setEventMessages($langs->trans("ErrorFieldRequired", $langs->trans("Login")), null, 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Login")), null, 'errors'); } else { $sql = "SELECT login FROM ".MAIN_DB_PREFIX."adherent WHERE login='".$db->escape($login)."'"; diff --git a/htdocs/admin/company.php b/htdocs/admin/company.php index 54f3a4cbb73..32398f05ada 100644 --- a/htdocs/admin/company.php +++ b/htdocs/admin/company.php @@ -987,7 +987,7 @@ else print ''; print "\n"; $s.=''.$langs->trans("VATIntraCheck").''; - $s = $form->textwithpicto($s, $langs->trans("VATIntraCheckDesc", $langs->trans("VATIntraCheck")), 1); + $s = $form->textwithpicto($s, $langs->trans("VATIntraCheckDesc", $langs->transnoentitiesnoconv("VATIntraCheck")), 1); } else { diff --git a/htdocs/admin/delais.php b/htdocs/admin/delais.php index 160e8b079e8..1d05d5e0afe 100644 --- a/htdocs/admin/delais.php +++ b/htdocs/admin/delais.php @@ -268,8 +268,8 @@ print $langs->trans("DescWeather").'
'; if($action == 'edit') { - $str_mode_std = $langs->trans('MeteoStdModEnabled').' : '.$langs->trans('MeteoUseMod', $langs->trans('MeteoPercentageMod')); - $str_mode_percentage = $langs->trans('MeteoPercentageModEnabled').' : '.$langs->trans('MeteoUseMod', $langs->trans('MeteoStdMod')); + $str_mode_std = $langs->trans('MeteoStdModEnabled').' : '.$langs->trans('MeteoUseMod', $langs->transnoentitiesnoconv('MeteoPercentageMod')); + $str_mode_percentage = $langs->trans('MeteoPercentageModEnabled').' : '.$langs->trans('MeteoUseMod', $langs->transnoentitiesnoconv('MeteoStdMod')); if(empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE)) $str_mode_enabled = $str_mode_std; else $str_mode_enabled = $str_mode_percentage; print ''.$str_mode_enabled.''; diff --git a/htdocs/admin/menus/edit.php b/htdocs/admin/menus/edit.php index 51fe9a25554..b4f5fbd3355 100644 --- a/htdocs/admin/menus/edit.php +++ b/htdocs/admin/menus/edit.php @@ -177,13 +177,13 @@ if ($action == 'add') } if (! $error && ! $_POST['url']) { - setEventMessages($langs->trans("ErrorFieldRequired", $langs->trans("URL")), null, 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("URL")), null, 'errors'); $action = 'create'; $error++; } if (! $error && ! $_POST['titre']) { - setEventMessages($langs->trans("ErrorFieldRequired", $langs->trans("Title")), null, 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Title")), null, 'errors'); $action = 'create'; $error++; } diff --git a/htdocs/comm/mailing/advtargetemailing.php b/htdocs/comm/mailing/advtargetemailing.php index fff9b40d5ea..a4bba8f7adc 100644 --- a/htdocs/comm/mailing/advtargetemailing.php +++ b/htdocs/comm/mailing/advtargetemailing.php @@ -267,7 +267,7 @@ if ($action == 'savefilter' || $action == 'createfilter') { $error = 0; if ($action == 'createfilter' && empty($template_name)) { - setEventMessages($langs->trans('ErrorFieldRequired', $langs->trans('AdvTgtOrCreateNewFilter')), null, 'errors'); + setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('AdvTgtOrCreateNewFilter')), null, 'errors'); $error ++; } diff --git a/htdocs/comm/mailing/card.php b/htdocs/comm/mailing/card.php index 53f1a881cbe..b6f5d9328f8 100644 --- a/htdocs/comm/mailing/card.php +++ b/htdocs/comm/mailing/card.php @@ -424,7 +424,7 @@ if (empty($reshook)) $object->sendto = $_POST["sendto"]; if (! $object->sendto) { - setEventMessages($langs->trans("ErrorFieldRequired", $langs->trans("MailTo")), null, 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("MailTo")), null, 'errors'); $error++; } diff --git a/htdocs/comm/remx.php b/htdocs/comm/remx.php index 48b4ee6440d..eabb217fb99 100644 --- a/htdocs/comm/remx.php +++ b/htdocs/comm/remx.php @@ -161,7 +161,7 @@ if ($action == 'setremise' && $user->rights->societe->creer) $error=0; if (empty($desc)) { - setEventMessages($langs->trans("ErrorFieldRequired", $langs->trans("ReasonDiscount")), null, 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("ReasonDiscount")), null, 'errors'); $error++; } @@ -193,7 +193,7 @@ if ($action == 'setremise' && $user->rights->societe->creer) } else { - setEventMessages($langs->trans("ErrorFieldFormat", $langs->trans("NewGlobalDiscount")), null, 'errors'); + setEventMessages($langs->trans("ErrorFieldFormat", $langs->transnoentitiesnoconv("NewGlobalDiscount")), null, 'errors'); } } diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index 6a5f333492e..fd7832f868f 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -815,7 +815,7 @@ class Commande extends CommonOrder } if (! empty($conf->global->COMMANDE_REQUIRE_SOURCE) && $this->source < 0) { - $this->error=$langs->trans("ErrorFieldRequired", $langs->trans("Source")); + $this->error=$langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Source")); dol_syslog(get_class($this)."::create ".$this->error, LOG_ERR); return -1; } diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index 722976890c0..260edb5f61c 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -939,7 +939,7 @@ if (empty($reshook)) if (empty($dateinvoice)) { $error++; - setEventMessages($langs->trans("ErrorFieldRequired", $langs->trans("Date")), null, 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Date")), null, 'errors'); } $date_pointoftax = dol_mktime(12, 0, 0, $_POST['date_pointoftaxmonth'], $_POST['date_pointoftaxday'], $_POST['date_pointoftaxyear']); @@ -1566,7 +1566,7 @@ if (empty($reshook)) $datefacture = dol_mktime(12, 0, 0, $_POST['remonth'], $_POST['reday'], $_POST['reyear']); if (empty($datefacture)) { $error++; - $mesg = $langs->trans("ErrorFieldRequired", $langs->trans("Date")); + $mesg = $langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Date")); setEventMessages($mesg, null, 'errors'); } @@ -1574,7 +1574,7 @@ if (empty($reshook)) if (!($_POST['situations'] > 0)) { $error++; - $mesg = $langs->trans("ErrorFieldRequired", $langs->trans("InvoiceSituation")); + $mesg = $langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("InvoiceSituation")); setEventMessages($mesg, null, 'errors'); } diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 4fbcc3cbd01..686190c359b 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -2284,7 +2284,7 @@ class Facture extends CommonInvoice // Controle que facture source connue if ($this->fk_facture_source <= 0) { - $this->error=$langs->trans("ErrorFieldRequired", $langs->trans("InvoiceReplacement")); + $this->error=$langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("InvoiceReplacement")); $this->db->rollback(); return -10; } diff --git a/htdocs/compta/prelevement/ligne.php b/htdocs/compta/prelevement/ligne.php index 33728093ec1..8b11716bf6f 100644 --- a/htdocs/compta/prelevement/ligne.php +++ b/htdocs/compta/prelevement/ligne.php @@ -59,7 +59,7 @@ if ($action == 'confirm_rejet') if (empty($daterej)) { $error++; - setEventMessages($langs->trans("ErrorFieldRequired", $langs->trans("Date")), null, 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Date")), null, 'errors'); } elseif ($daterej > dol_now()) diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index 316983a5d0a..d21b383bf97 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -878,14 +878,14 @@ class Contrat extends CommonObject if ($this->commercial_signature_id <= 0) { $langs->load("commercial"); - $this->error.=$langs->trans("ErrorFieldRequired", $langs->trans("SalesRepresentativeSignature")); + $this->error.=$langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("SalesRepresentativeSignature")); $paramsok=0; } if ($this->commercial_suivi_id <= 0) { $langs->load("commercial"); $this->error.=($this->error?"
":''); - $this->error.=$langs->trans("ErrorFieldRequired", $langs->trans("SalesRepresentativeFollowUp")); + $this->error.=$langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("SalesRepresentativeFollowUp")); $paramsok=0; } if (! $paramsok) return -1; diff --git a/htdocs/core/photos_resize.php b/htdocs/core/photos_resize.php index 6c473b83691..2ecb127f3b2 100644 --- a/htdocs/core/photos_resize.php +++ b/htdocs/core/photos_resize.php @@ -488,7 +488,7 @@ jQuery(document).ready(function() { console.log("We click on submitcrop"); var idClicked = e.target.id; if (parseInt(jQuery(\'#w\').val())) return true; - alert(\''.dol_escape_js($langs->trans("ErrorFieldRequired", $langs->trans("Dimension"))).'\'); + alert(\''.dol_escape_js($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Dimension"))).'\'); return false; }); }); diff --git a/htdocs/don/card.php b/htdocs/don/card.php index 5662b3272f0..cd92d8d02f5 100644 --- a/htdocs/don/card.php +++ b/htdocs/don/card.php @@ -84,14 +84,14 @@ if ($action == 'update') if (empty($donation_date)) { - setEventMessages($langs->trans("ErrorFieldRequired", $langs->trans("Date")), null, 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Date")), null, 'errors'); $action = "create"; $error++; } if (empty($amount)) { - setEventMessages($langs->trans("ErrorFieldRequired", $langs->trans("Amount")), null, 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Amount")), null, 'errors'); $action = "create"; $error++; } @@ -140,14 +140,14 @@ if ($action == 'add') if (empty($donation_date)) { - setEventMessages($langs->trans("ErrorFieldRequired", $langs->trans("Date")), null, 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Date")), null, 'errors'); $action = "create"; $error++; } if (empty($amount)) { - setEventMessages($langs->trans("ErrorFieldRequired", $langs->trans("Amount")), null, 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Amount")), null, 'errors'); $action = "create"; $error++; } diff --git a/htdocs/don/class/don.class.php b/htdocs/don/class/don.class.php index de360d8cc3b..d75e658a191 100644 --- a/htdocs/don/class/don.class.php +++ b/htdocs/don/class/don.class.php @@ -271,32 +271,32 @@ class Don extends CommonObject { if ((dol_strlen(trim($this->lastname)) + dol_strlen(trim($this->firstname))) == 0) { - $error_string[] = $langs->trans('ErrorFieldRequired', $langs->trans('Company').'/'.$langs->trans('Firstname').'-'.$langs->trans('Lastname')); + $error_string[] = $langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Company').'/'.$langs->transnoentitiesnoconv('Firstname').'-'.$langs->transnoentitiesnoconv('Lastname')); $err++; } } if (dol_strlen(trim($this->address)) == 0) { - $error_string[] = $langs->trans('ErrorFieldRequired', $langs->trans('Address')); + $error_string[] = $langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Address')); $err++; } if (dol_strlen(trim($this->zip)) == 0) { - $error_string[] = $langs->trans('ErrorFieldRequired', $langs->trans('Zip')); + $error_string[] = $langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Zip')); $err++; } if (dol_strlen(trim($this->town)) == 0) { - $error_string[] = $langs->trans('ErrorFieldRequired', $langs->trans('Town')); + $error_string[] = $langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Town')); $err++; } if (dol_strlen(trim($this->email)) == 0) { - $error_string[] = $langs->trans('ErrorFieldRequired', $langs->trans('EMail')); + $error_string[] = $langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('EMail')); $err++; } @@ -308,7 +308,7 @@ class Don extends CommonObject { if (!isset($map[substr($this->amount, $i, 1)])) { - $error_string[] = $langs->trans('ErrorFieldRequired', $langs->trans('Amount')); + $error_string[] = $langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Amount')); $err++; $amount_invalid = 1; break; @@ -319,14 +319,14 @@ class Don extends CommonObject { if ($this->amount == 0) { - $error_string[] = $langs->trans('ErrorFieldRequired', $langs->trans('Amount')); + $error_string[] = $langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Amount')); $err++; } else { if ($this->amount < $minimum && $minimum > 0) { - $error_string[] = $langs->trans('MinimumAmount', $langs->trans('$minimum')); + $error_string[] = $langs->trans('MinimumAmount', $langs->transnoentitiesnoconv('$minimum')); $err++; } } diff --git a/htdocs/fichinter/card.php b/htdocs/fichinter/card.php index 20d9d786354..31db9d0c2b4 100644 --- a/htdocs/fichinter/card.php +++ b/htdocs/fichinter/card.php @@ -427,7 +427,7 @@ if (empty($reshook)) } else { - $mesg='
'.$langs->trans("ErrorFieldRequired", $langs->trans("ThirdParty")).'
'; + $mesg='
'.$langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("ThirdParty")).'
'; $action = 'create'; } } diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index e876d5caee2..bf0a3da62b3 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -1540,7 +1540,7 @@ class CommandeFournisseur extends CommonOrder // Check parameters if ($qty < 1 && ! $fk_product) { - $this->error=$langs->trans("ErrorFieldRequired", $langs->trans("Product")); + $this->error=$langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Product")); return -1; } if ($type < 0) return -1; diff --git a/htdocs/hrm/establishment/card.php b/htdocs/hrm/establishment/card.php index 37a3d7f538b..071277bd501 100644 --- a/htdocs/hrm/establishment/card.php +++ b/htdocs/hrm/establishment/card.php @@ -127,7 +127,7 @@ elseif ($action == 'update') $name = GETPOST('name', 'alpha'); if (empty($name)) { - setEventMessages($langs->trans('ErrorFieldRequired', $langs->trans('Name')), null, 'errors'); + setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Name')), null, 'errors'); $error ++; } @@ -291,7 +291,7 @@ if (($id || $ref) && $action == 'edit') print ''.$form->editfieldkey('Name', 'name', '', $object, 0, 'string', '', 1).''; print ''; print ''; - + // Parent print ''.$form->editfieldkey('Parent', 'entity', '', $object, 0, 'string', '', 1).''; print ''; @@ -380,7 +380,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea print ''.$langs->trans("Name").''; print ''.$object->name.''; print ''; - + // Parent print ''; print ''.$langs->trans("Parent").''; diff --git a/htdocs/install/step1.php b/htdocs/install/step1.php index 0cb8fe68c5a..c37dee6570a 100644 --- a/htdocs/install/step1.php +++ b/htdocs/install/step1.php @@ -366,7 +366,7 @@ if (! $error && $db->connected && $action == "set") print ""; print $langs->trans("ErrorDirDoesNotExists", $main_dir).'
'; - print $langs->trans("ErrorWrongValueForParameter", $langs->trans("WebPagesDirectory")).'
'; + print $langs->trans("ErrorWrongValueForParameter", $langs->transnoentitiesnoconv("WebPagesDirectory")).'
'; print $langs->trans("ErrorGoBackAndCorrectParameters").'

'; print ''; print $langs->trans("Error"); diff --git a/htdocs/product/admin/price_rules.php b/htdocs/product/admin/price_rules.php index 7b0e1ddcc64..d50e474026e 100644 --- a/htdocs/product/admin/price_rules.php +++ b/htdocs/product/admin/price_rules.php @@ -183,7 +183,7 @@ $genPriceOptions = function ($level) use ($price_options) { - trans('PercentDiscountOver', $langs->trans('SellingPrice').' '.$i) ?> + trans('PercentDiscountOver', $langs->transnoentitiesnoconv('SellingPrice').' '.$i) ?> diff --git a/htdocs/societe/canvas/company/actions_card_company.class.php b/htdocs/societe/canvas/company/actions_card_company.class.php index a4a3d71a4a9..27aeca883cc 100644 --- a/htdocs/societe/canvas/company/actions_card_company.class.php +++ b/htdocs/societe/canvas/company/actions_card_company.class.php @@ -131,7 +131,7 @@ class ActionsCardCompany extends ActionsCardCommon if ($conf->use_javascript_ajax) { $s.=''.$langs->trans("VATIntraCheck").''; - $this->tpl['tva_intra'] = $form->textwithpicto($s, $langs->trans("VATIntraCheckDesc", $langs->trans("VATIntraCheck")), 1); + $this->tpl['tva_intra'] = $form->textwithpicto($s, $langs->trans("VATIntraCheckDesc", $langs->transnoentitiesnoconv("VATIntraCheck")), 1); } else { @@ -170,7 +170,7 @@ class ActionsCardCompany extends ActionsCardCommon if ($conf->use_javascript_ajax) { $s.=''.$langs->trans("VATIntraCheck").''; - $this->tpl['tva_intra'] = $form->textwithpicto($s, $langs->trans("VATIntraCheckDesc", $langs->trans("VATIntraCheck")), 1); + $this->tpl['tva_intra'] = $form->textwithpicto($s, $langs->trans("VATIntraCheckDesc", $langs->transnoentitiesnoconv("VATIntraCheck")), 1); } else { diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index 9c688c19c99..d55ea537297 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -126,7 +126,7 @@ if (empty($reshook)) { $langs->load('errors'); $langs->load('companies'); - setEventMessages($langs->trans('ErrorThirdPartyIdIsMandatory', $langs->trans('MergeOriginThirdparty')), null, 'errors'); + setEventMessages($langs->trans('ErrorThirdPartyIdIsMandatory', $langs->transnoentitiesnoconv('MergeOriginThirdparty')), null, 'errors'); } else { @@ -2042,7 +2042,7 @@ else print ''; print "\n"; $s.=''.$langs->trans("VATIntraCheck").''; - $s = $form->textwithpicto($s, $langs->trans("VATIntraCheckDesc", $langs->trans("VATIntraCheck")), 1); + $s = $form->textwithpicto($s, $langs->trans("VATIntraCheckDesc", $langs->transnoentitiesnoconv("VATIntraCheck")), 1); } else { @@ -2454,7 +2454,7 @@ else print ''; print "\n"; $s.=''.$langs->trans("VATIntraCheck").''; - $s = $form->textwithpicto($s, $langs->trans("VATIntraCheckDesc", $langs->trans("VATIntraCheck")), 1); + $s = $form->textwithpicto($s, $langs->trans("VATIntraCheckDesc", $langs->transnoentitiesnoconv("VATIntraCheck")), 1); } else { diff --git a/htdocs/societe/checkvat/checkVatPopup.php b/htdocs/societe/checkvat/checkVatPopup.php index 021a932f388..aaafc334e9e 100644 --- a/htdocs/societe/checkvat/checkVatPopup.php +++ b/htdocs/societe/checkvat/checkVatPopup.php @@ -163,7 +163,7 @@ else } print '
'; -print $langs->trans("VATIntraManualCheck", $langs->trans("VATIntraCheckURL"), $langs->trans("VATIntraCheckURL")).'
'; +print $langs->trans("VATIntraManualCheck", $langs->trans("VATIntraCheckURL"), $langs->transnoentitiesnoconv("VATIntraCheckURL")).'
'; print '
'; print '
'; diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index 4bec5fc6f49..84bda8abd54 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -1642,7 +1642,7 @@ class Societe extends CommonObject $note=trim($note); if (! $note) { - $this->error=$langs->trans("ErrorFieldRequired", $langs->trans("NoteReason")); + $this->error=$langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("NoteReason")); return -2; } @@ -1705,7 +1705,7 @@ class Societe extends CommonObject $note=trim($note); if (! $note) { - $this->error=$langs->trans("ErrorFieldRequired", $langs->trans("NoteReason")); + $this->error=$langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("NoteReason")); return -2; } diff --git a/htdocs/variants/generator.php b/htdocs/variants/generator.php index b2b2b1bdfc6..39d32094fe4 100644 --- a/htdocs/variants/generator.php +++ b/htdocs/variants/generator.php @@ -331,7 +331,7 @@ if (! empty($id) || ! empty($ref)) { -

trans('TooMuchCombinationsWarning', $langs->trans('DoNotRemovePreviousCombinations')) ?>

+

trans('TooMuchCombinationsWarning', $langs->transnoentitiesnoconv('DoNotRemovePreviousCombinations')) ?>

> From 35b021f20327d3ab33bf21ac7170a3b4b3db42b4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 29 May 2019 09:53:54 +0200 Subject: [PATCH 066/828] Fix phpcs --- htdocs/accountancy/class/accountingaccount.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/accountancy/class/accountingaccount.class.php b/htdocs/accountancy/class/accountingaccount.class.php index ccb12f7bc4c..c8636a66145 100644 --- a/htdocs/accountancy/class/accountingaccount.class.php +++ b/htdocs/accountancy/class/accountingaccount.class.php @@ -152,7 +152,7 @@ class AccountingAccount extends CommonObject * @param int $rowid Id * @param string $account_number Account number * @param int|boolean $limittocurrentchart 1 or true=Load record only if it is into current active char of account - * @param string $limittochartaccount 'ABC'=Load record only if it is into chart account with code 'ABC'. + * @param string $limittoachartaccount 'ABC'=Load record only if it is into chart account with code 'ABC'. * @return int <0 if KO, 0 if not found, Id of record if OK and found */ function fetch($rowid = null, $account_number = null, $limittocurrentchart = 0, $limittoachartaccount = '') From 6e9cd819c13b2d03941f171d550978c0ab186655 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 29 May 2019 09:55:09 +0200 Subject: [PATCH 067/828] Fix phpcs --- htdocs/core/modules/import/import_csv.modules.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/modules/import/import_csv.modules.php b/htdocs/core/modules/import/import_csv.modules.php index 4dd4ef342e7..feeddb399c2 100644 --- a/htdocs/core/modules/import/import_csv.modules.php +++ b/htdocs/core/modules/import/import_csv.modules.php @@ -137,7 +137,7 @@ class ImportCsv extends ModeleImports * * @param Translate $outputlangs Output language * @param array $headerlinefields Array of fields name - * @return string + * @return string$limittoachartaccount */ function write_title_example($outputlangs,$headerlinefields) { @@ -444,7 +444,7 @@ class ImportCsv extends ModeleImports $classinstance=new $class($this->db); // Try the fetch from code or ref $param_array = array('', $newval); - if ($class == 'AccountingAccount') + if ($class == 'AccountingAccount') { //var_dump($arrayrecord[0]['val']); /*include_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountancysystem.class.php'; From a524fd17ceb1774a51503d15798ef3a78616bb19 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 29 May 2019 10:03:05 +0200 Subject: [PATCH 068/828] Fix phpcs --- htdocs/core/lib/geturl.lib.php | 2 +- htdocs/public/cron/cron_run_jobs.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/core/lib/geturl.lib.php b/htdocs/core/lib/geturl.lib.php index 59469a6313c..714bc26b7da 100644 --- a/htdocs/core/lib/geturl.lib.php +++ b/htdocs/core/lib/geturl.lib.php @@ -175,7 +175,7 @@ function getURLContent($url, $postorget = 'GET', $param = '', $followlocation = * @param int $mode 0=return 'mydomain', 1=return 'mydomain.com' * @return string Returns domaine name */ -function getDomainFromURL($url, $mode=0) +function getDomainFromURL($url, $mode = 0) { $tmpdomain = preg_replace('/^https?:\/\//i', '', $url); // Remove http(s):// $tmpdomain = preg_replace('/\/.*$/i', '', $tmpdomain); // Remove part after domain diff --git a/htdocs/public/cron/cron_run_jobs.php b/htdocs/public/cron/cron_run_jobs.php index 6708062fc51..7f3e3c947c5 100644 --- a/htdocs/public/cron/cron_run_jobs.php +++ b/htdocs/public/cron/cron_run_jobs.php @@ -186,7 +186,7 @@ if (is_array($qualifiedjobs) && (count($qualifiedjobs)>0)) { echo " - qualified"; - dol_syslog("cron_run_jobs.php line->datenextrun:".dol_print_date($line->datenextrun,'dayhourrfc')." line->datestart:".dol_print_date($line->datestart,'dayhourrfc')." line->dateend:".dol_print_date($line->dateend,'dayhourrfc')." now:".dol_print_date($now,'dayhourrfc')); + dol_syslog("cron_run_jobs.php line->datenextrun:".dol_print_date($line->datenextrun, 'dayhourrfc')." line->datestart:".dol_print_date($line->datestart, 'dayhourrfc')." line->dateend:".dol_print_date($line->dateend, 'dayhourrfc')." now:".dol_print_date($now, 'dayhourrfc')); $cronjob=new Cronjob($db); $result=$cronjob->fetch($line->id); @@ -230,7 +230,7 @@ if (is_array($qualifiedjobs) && (count($qualifiedjobs)>0)) { echo " - not qualified\n"; - dol_syslog("cron_run_jobs.php job not qualified line->datenextrun:".dol_print_date($line->datenextrun,'dayhourrfc')." line->datestart:".dol_print_date($line->datestart,'dayhourrfc')." line->dateend:".dol_print_date($line->dateend,'dayhourrfc')." now:".dol_print_date($now,'dayhourrfc')); + dol_syslog("cron_run_jobs.php job not qualified line->datenextrun:".dol_print_date($line->datenextrun, 'dayhourrfc')." line->datestart:".dol_print_date($line->datestart, 'dayhourrfc')." line->dateend:".dol_print_date($line->dateend, 'dayhourrfc')." now:".dol_print_date($now, 'dayhourrfc')); } } From 84d7154106511a82c11e97840f46d97d17c7855f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 29 May 2019 10:03:18 +0200 Subject: [PATCH 069/828] Fix phpcs --- scripts/cron/cron_run_jobs.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/cron/cron_run_jobs.php b/scripts/cron/cron_run_jobs.php index c8060805872..0f20675cbfc 100755 --- a/scripts/cron/cron_run_jobs.php +++ b/scripts/cron/cron_run_jobs.php @@ -25,11 +25,11 @@ * \brief Execute pendings jobs */ -if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL','1'); // Disables token renewal -if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU','1'); -if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML','1'); -if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX','1'); -if (! defined('NOLOGIN')) define('NOLOGIN','1'); +if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL', '1'); // Disables token renewal +if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU', '1'); +if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML', '1'); +if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX', '1'); +if (! defined('NOLOGIN')) define('NOLOGIN', '1'); $sapi_type = php_sapi_name(); From cf70b26db70fe33b72a7b27b6b62d37b677cd31f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 29 May 2019 10:27:03 +0200 Subject: [PATCH 070/828] Add distinct id --- htdocs/contrat/card.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/contrat/card.php b/htdocs/contrat/card.php index 687dc2c7f2f..5c9ac3375dd 100644 --- a/htdocs/contrat/card.php +++ b/htdocs/contrat/card.php @@ -2139,22 +2139,22 @@ else { if ($user->rights->contrat->activer) { - print ''; + print ''; } else { - print ''; + print ''; } } if ($object->nbofservicesclosed < $nbofservices) { if ($user->rights->contrat->desactiver) { - print ''; + print ''; } else { - print ''; + print ''; } //if (! $numactive) From 3c05cfe6901a6aeaa1dcee41fd45a380317344a6 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 29 May 2019 10:50:33 +0200 Subject: [PATCH 071/828] Fix useless test --- htdocs/core/class/commonobject.class.php | 8 -------- 1 file changed, 8 deletions(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index b64ae066cb1..b9c58477757 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -3718,8 +3718,6 @@ abstract class CommonObject $dirtpls=array_merge($conf->modules_parts['tpl'], array('/core/tpl')); foreach($dirtpls as $module => $reldir) { - if (!empty($module) && empty($conf->$module->enabled)) continue; - if (!empty($module)) { $tpl = dol_buildpath($reldir.'/objectline_create.tpl.php'); @@ -3979,8 +3977,6 @@ abstract class CommonObject $dirtpls=array_merge($conf->modules_parts['tpl'], array('/core/tpl')); foreach($dirtpls as $module => $reldir) { - if (!empty($module) && empty($conf->$module->enabled)) continue; - if (!empty($module)) { $tpl = dol_buildpath($reldir.'/objectline_view.tpl.php'); @@ -4011,8 +4007,6 @@ abstract class CommonObject $dirtpls=array_merge($conf->modules_parts['tpl'], array('/core/tpl')); foreach($dirtpls as $module => $reldir) { - if (!empty($module) && empty($conf->$module->enabled)) continue; - if (!empty($module)) { $tpl = dol_buildpath($reldir.'/objectline_edit.tpl.php'); @@ -4216,8 +4210,6 @@ abstract class CommonObject $dirtpls=array_merge($conf->modules_parts['tpl'], array('/core/tpl')); foreach($dirtpls as $module => $reldir) { - if (!empty($module) && empty($conf->$module->enabled)) continue; - if (!empty($module)) { $tpl = dol_buildpath($reldir.'/originproductline.tpl.php'); From 912e29a746cd02e6e8d001bc5779ac3d52e969b0 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 29 May 2019 11:06:01 +0200 Subject: [PATCH 072/828] FIX #11244 --- htdocs/core/class/commonobject.class.php | 48 ++++++------------------ htdocs/main.inc.php | 10 ++++- 2 files changed, 20 insertions(+), 38 deletions(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index b9c58477757..1a6d5018eae 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -3716,16 +3716,10 @@ abstract class CommonObject // Output template part (modules that overwrite templates must declare this into descriptor) // Use global variables + $dateSelector + $seller and $buyer $dirtpls=array_merge($conf->modules_parts['tpl'], array('/core/tpl')); - foreach($dirtpls as $module => $reldir) + foreach($dirtpls as $reldir) { - if (!empty($module)) - { - $tpl = dol_buildpath($reldir.'/objectline_create.tpl.php'); - } - else - { - $tpl = DOL_DOCUMENT_ROOT.$reldir.'/objectline_create.tpl.php'; - } + $tpl = dol_buildpath($reldir.'/objectline_create.tpl.php'); + if (empty($conf->file->strict_mode)) { $res=@include $tpl; } else { @@ -3975,16 +3969,10 @@ abstract class CommonObject // Output template part (modules that overwrite templates must declare this into descriptor) // Use global variables + $dateSelector + $seller and $buyer $dirtpls=array_merge($conf->modules_parts['tpl'], array('/core/tpl')); - foreach($dirtpls as $module => $reldir) + foreach($dirtpls as $reldir) { - if (!empty($module)) - { - $tpl = dol_buildpath($reldir.'/objectline_view.tpl.php'); - } - else - { - $tpl = DOL_DOCUMENT_ROOT.$reldir.'/objectline_view.tpl.php'; - } + $tpl = dol_buildpath($reldir.'/objectline_view.tpl.php'); + if (empty($conf->file->strict_mode)) { $res=@include $tpl; } else { @@ -4005,16 +3993,10 @@ abstract class CommonObject // Output template part (modules that overwrite templates must declare this into descriptor) // Use global variables + $dateSelector + $seller and $buyer $dirtpls=array_merge($conf->modules_parts['tpl'], array('/core/tpl')); - foreach($dirtpls as $module => $reldir) + foreach($dirtpls as $reldir) { - if (!empty($module)) - { - $tpl = dol_buildpath($reldir.'/objectline_edit.tpl.php'); - } - else - { - $tpl = DOL_DOCUMENT_ROOT.$reldir.'/objectline_edit.tpl.php'; - } + $tpl = dol_buildpath($reldir.'/objectline_edit.tpl.php'); + if (empty($conf->file->strict_mode)) { $res=@include $tpl; } else { @@ -4208,16 +4190,10 @@ abstract class CommonObject // Output template part (modules that overwrite templates must declare this into descriptor) // Use global variables + $dateSelector + $seller and $buyer $dirtpls=array_merge($conf->modules_parts['tpl'], array('/core/tpl')); - foreach($dirtpls as $module => $reldir) + foreach($dirtpls as $reldir) { - if (!empty($module)) - { - $tpl = dol_buildpath($reldir.'/originproductline.tpl.php'); - } - else - { - $tpl = DOL_DOCUMENT_ROOT.$reldir.'/originproductline.tpl.php'; - } + $tpl = dol_buildpath($reldir.'/originproductline.tpl.php'); + if (empty($conf->file->strict_mode)) { $res=@include $tpl; } else { diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index ca182c7b337..c73daa011a5 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -383,13 +383,19 @@ if ((! defined('NOCSRFCHECK') && empty($dolibarr_nocsrfcheck) && ! empty($conf-> if (GETPOST('disablemodules','alpha')) $_SESSION["disablemodules"]=GETPOST('disablemodules','alpha'); if (! empty($_SESSION["disablemodules"])) { - $disabled_modules=explode(',',$_SESSION["disablemodules"]); + $modulepartkeys = array('css', 'js', 'tabs', 'triggers', 'login', 'substitutions', 'menus', 'theme', 'sms', 'tpl', 'barcode', 'models', 'societe', 'hooks', 'dir', 'syslog', 'tpllinkable', 'contactelement', 'moduleforexternal'); + + $disabled_modules=explode(',',$_SESSION["disablemodules"]); foreach($disabled_modules as $module) { if ($module) { - if (empty($conf->$module)) $conf->$module=new stdClass(); + if (empty($conf->$module)) $conf->$module=new stdClass(); // To avoid warnings $conf->$module->enabled=false; + foreach($modulepartkeys as $modulepartkey) + { + unset($conf->modules_parts[$modulepartkey][$module]); + } if ($module == 'fournisseur') // Special case { $conf->supplier_order->enabled=0; From c5c7e8d4513e316471c6afff87d70005f68b5b46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 29 May 2019 11:18:01 +0200 Subject: [PATCH 073/828] Update linkedobjectblock.tpl.php --- .../facture/tpl/linkedobjectblock.tpl.php | 31 ++++++++++++++++--- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/htdocs/compta/facture/tpl/linkedobjectblock.tpl.php b/htdocs/compta/facture/tpl/linkedobjectblock.tpl.php index d184fb58966..f0916d79443 100644 --- a/htdocs/compta/facture/tpl/linkedobjectblock.tpl.php +++ b/htdocs/compta/facture/tpl/linkedobjectblock.tpl.php @@ -47,10 +47,31 @@ foreach($linkedObjectBlock as $key => $objectlink) if ($ilink == count($linkedObjectBlock) && empty($noMoreLinkedObjectBlockAfter) && count($linkedObjectBlock) <= 1) $trclass.=' liste_sub_total'; ?> - trans("CustomerInvoice"); ?> + type) { + case Facture::TYPE_REPLACEMENT: + echo $langs->trans("InvoiceReplacement"); + break; + case Facture::TYPE_CREDIT_NOTE: + echo $langs->trans("InvoiceAvoir"); + break; + case Facture::TYPE_DEPOSIT: + echo $langs->trans("InvoiceDeposit"); + break; + case Facture::TYPE_PROFORMA: + echo $langs->trans("InvoiceProForma"); + break; + case Facture::TYPE_SITUATION: + echo $langs->trans("InvoiceSituation"); + break; + default: + echo $langs->trans("CustomerInvoice"); + break; + } + ?> getNomUrl(1); ?> - ref_client; ?> - date, 'day'); ?> + ref_client; ?> + date, 'day'); ?> rights->facture->lire) { $sign = 1; @@ -76,8 +97,8 @@ if (count($linkedObjectBlock) > 1) trans("Total"); ?> - - + + From 6bb1a4a0e6f035132040a6c706e34f44e001a4d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 29 May 2019 11:26:04 +0200 Subject: [PATCH 074/828] Update linkedobjectblock.tpl.php --- htdocs/compta/facture/tpl/linkedobjectblock.tpl.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/facture/tpl/linkedobjectblock.tpl.php b/htdocs/compta/facture/tpl/linkedobjectblock.tpl.php index f0916d79443..97f0b876abc 100644 --- a/htdocs/compta/facture/tpl/linkedobjectblock.tpl.php +++ b/htdocs/compta/facture/tpl/linkedobjectblock.tpl.php @@ -55,7 +55,7 @@ foreach($linkedObjectBlock as $key => $objectlink) case Facture::TYPE_CREDIT_NOTE: echo $langs->trans("InvoiceAvoir"); break; - case Facture::TYPE_DEPOSIT: + case Facture::TYPE_DEPOSIT: echo $langs->trans("InvoiceDeposit"); break; case Facture::TYPE_PROFORMA: @@ -70,7 +70,7 @@ foreach($linkedObjectBlock as $key => $objectlink) } ?> getNomUrl(1); ?> - ref_client; ?> + ref_client; ?> date, 'day'); ?> rights->facture->lire) { From 48d15032af97b3c54714ae0d45d3b4ae83c9b9af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 29 May 2019 11:28:07 +0200 Subject: [PATCH 075/828] Update linkedobjectblock.tpl.php --- htdocs/comm/propal/tpl/linkedobjectblock.tpl.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/comm/propal/tpl/linkedobjectblock.tpl.php b/htdocs/comm/propal/tpl/linkedobjectblock.tpl.php index bbdfc57af50..1b78370048a 100644 --- a/htdocs/comm/propal/tpl/linkedobjectblock.tpl.php +++ b/htdocs/comm/propal/tpl/linkedobjectblock.tpl.php @@ -63,7 +63,7 @@ foreach($linkedObjectBlock as $key => $objectlink) getNomUrl(1); ?> ref_client; ?> - date, 'day'); ?> + date, 'day'); ?> rights->propale->lire) { $total = $total + $objectlink->total_ht; @@ -80,8 +80,8 @@ if (count($linkedObjectBlock) > 1) trans("Total"); ?> - - + + From 05063016e8ac92b9b16d0723ea0542ed3361c832 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 29 May 2019 12:21:51 +0200 Subject: [PATCH 076/828] FIX #11244 Enhance repair tool --- htdocs/core/lib/functions.lib.php | 2 +- htdocs/install/repair.php | 138 ++++++++++++++++++++++++------ 2 files changed, 114 insertions(+), 26 deletions(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 12449d201f6..f70d0b58c5c 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -649,7 +649,7 @@ function dol_include_once($relpath, $classname = '') * @param int $returnemptyifnotfound 0:If $type==0 and if file was not found into alternate dir, return default path into main dir (no test on it) * 1:If $type==0 and if file was not found into alternate dir, return empty string * 2:If $type==0 and if file was not found into alternate dir, test into main dir, return default path if found, empty string if not found - * @return string Full filesystem path (if path=0), Full url path (if mode=1) + * @return string Full filesystem path (if path=0) or '' if file not found, Full url path (if mode=1) */ function dol_buildpath($path, $type = 0, $returnemptyifnotfound = 0) { diff --git a/htdocs/install/repair.php b/htdocs/install/repair.php index fa1b070cc40..c52e840d11e 100644 --- a/htdocs/install/repair.php +++ b/htdocs/install/repair.php @@ -67,17 +67,17 @@ $actiondone=1; print '

'.$langs->trans("Repair").'

'; -print 'Option standard (0 or \'confirmed\') is '.(GETPOST('standard', 'alpha')?GETPOST('standard', 'alpha'):'0').'
'."\n"; -print 'Option restore_thirdparties_logos (0 or \'confirmed\') is '.(GETPOST('restore_thirdparties_logos', 'alpha')?GETPOST('restore_thirdparties_logos', 'alpha'):'0').'
'."\n"; -print 'Option clean_linked_elements (0 or \'confirmed\') is '.(GETPOST('clean_linked_elements', 'alpha')?GETPOST('clean_linked_elements', 'alpha'):'0').'
'."\n"; -print 'Option clean_menus (0 or \'test\' or \'confirmed\') is '.(GETPOST('clean_menus', 'alpha')?GETPOST('clean_menus', 'alpha'):'0').'
'."\n"; -print 'Option clean_orphelin_dir (0 or \'test\' or \'confirmed\') is '.(GETPOST('clean_orphelin_dir', 'alpha')?GETPOST('clean_orphelin_dir', 'alpha'):'0').'
'."\n"; -print 'Option clean_product_stock_batch (0 or \'test\' or \'confirmed\') is '.(GETPOST('clean_product_stock_batch', 'alpha')?GETPOST('clean_product_stock_batch', 'alpha'):'0').'
'."\n"; -print 'Option set_empty_time_spent_amount (0 or \'test\' or \'confirmed\') is '.(GETPOST('set_empty_time_spent_amount', 'alpha')?GETPOST('set_empty_time_spent_amount', 'alpha'):'0').'
'."\n"; -print 'Option rebuild_product_thumbs (0 or \'test\' or \'confirmed\') is '.(GETPOST('rebuild_product_thumbs', 'alpha')?GETPOST('rebuild_product_thumbs', 'alpha'):'0').'
'."\n"; -print 'Option force_disable_of_modules_not_found (0 or \'test\' or \'confirmed\') is '.(GETPOST('force_disable_of_modules_not_found', 'alpha')?GETPOST('force_disable_of_modules_not_found', 'alpha'):'0').'
'."\n"; -print 'Option clean_perm_table (0 or \'test\' or \'confirmed\') is '.(GETPOST('clean_perm_table', 'alpha')?GETPOST('clean_perm_table', 'alpha'):'0').'
'."\n"; -print 'Option force_utf8_on_tables, for mysql/mariadb only (0 or \'test\' or \'confirmed\') is '.(GETPOST('force_utf8_on_tables', 'alpha')?GETPOST('force_utf8_on_tables', 'alpha'):'0').'
'."\n"; +print 'Option standard (\'test\' or \'confirmed\') is '.(GETPOST('standard', 'alpha')?GETPOST('standard', 'alpha'):'undefined').'
'."\n"; +print 'Option restore_thirdparties_logos (\'test\' or \'confirmed\') is '.(GETPOST('restore_thirdparties_logos', 'alpha')?GETPOST('restore_thirdparties_logos', 'alpha'):'undefined').'
'."\n"; +print 'Option clean_linked_elements (\'test\' or \'confirmed\') is '.(GETPOST('clean_linked_elements', 'alpha')?GETPOST('clean_linked_elements', 'alpha'):'undefined').'
'."\n"; +print 'Option clean_menus (\'test\' or \'confirmed\') is '.(GETPOST('clean_menus', 'alpha')?GETPOST('clean_menus', 'alpha'):'undefined').'
'."\n"; +print 'Option clean_orphelin_dir (\'test\' or \'confirmed\') is '.(GETPOST('clean_orphelin_dir', 'alpha')?GETPOST('clean_orphelin_dir', 'alpha'):'undefined').'
'."\n"; +print 'Option clean_product_stock_batch (\'test\' or \'confirmed\') is '.(GETPOST('clean_product_stock_batch', 'alpha')?GETPOST('clean_product_stock_batch', 'alpha'):'undefined').'
'."\n"; +print 'Option set_empty_time_spent_amount (\'test\' or \'confirmed\') is '.(GETPOST('set_empty_time_spent_amount', 'alpha')?GETPOST('set_empty_time_spent_amount', 'alpha'):'undefined').'
'."\n"; +print 'Option rebuild_product_thumbs (\'test\' or \'confirmed\') is '.(GETPOST('rebuild_product_thumbs', 'alpha')?GETPOST('rebuild_product_thumbs', 'alpha'):'undefined').'
'."\n"; +print 'Option force_disable_of_modules_not_found (\'test\' or \'confirmed\') is '.(GETPOST('force_disable_of_modules_not_found', 'alpha')?GETPOST('force_disable_of_modules_not_found', 'alpha'):'undefined').'
'."\n"; +print 'Option clean_perm_table (\'test\' or \'confirmed\') is '.(GETPOST('clean_perm_table', 'alpha')?GETPOST('clean_perm_table', 'alpha'):'undefined').'
'."\n"; +print 'Option force_utf8_on_tables, for mysql/mariadb only (\'test\' or \'confirmed\') is '.(GETPOST('force_utf8_on_tables', 'alpha')?GETPOST('force_utf8_on_tables', 'alpha'):'undefined').'
'."\n"; print '
'; print ''; @@ -302,14 +302,23 @@ if ($ok && GETPOST('standard', 'alpha')) ); //var_dump($field_desc);exit; - $result=$db->DDLAddField($tableextra, $code, $field_desc, ""); - if ($result < 0) + $result = 0; + if (GETPOST('standard', 'alpha') == 'confirmed') { - print "KO ".$db->lasterror."
\n"; + $result=$db->DDLAddField($tableextra, $code, $field_desc, ""); + + if ($result < 0) + { + print "KO ".$db->lasterror."
\n"; + } + else + { + print "OK
\n"; + } } else { - print "OK
\n"; + print ' - Mode test, no column added.'; } } } @@ -324,7 +333,6 @@ if ($ok && GETPOST('standard', 'alpha')) } - // clean_data_ecm_dir: Clean data into ecm_directories table if ($ok && GETPOST('standard', 'alpha')) { @@ -332,7 +340,79 @@ if ($ok && GETPOST('standard', 'alpha')) } +// clean declaration constants +if ($ok && GETPOST('standard', 'alpha')) +{ + print ''; + $sql ="SELECT name, entity, value"; + $sql.=" FROM ".MAIN_DB_PREFIX."const as c"; + $sql.=" WHERE name LIKE 'MAIN_MODULE_%_TPL' OR name LIKE 'MAIN_MODULE_%_CSS' OR name LIKE 'MAIN_MODULE_%_JS' OR name LIKE 'MAIN_MODULE_%_HOOKS'"; + $sql.=" OR name LIKE 'MAIN_MODULE_%_TRIGGERS' OR name LIKE 'MAIN_MODULE_%_THEME' OR name LIKE 'MAIN_MODULE_%_SUBSTITUTIONS' OR name LIKE 'MAIN_MODULE_%_MODELS'"; + $sql.=" OR name LIKE 'MAIN_MODULE_%_MENUS' OR name LIKE 'MAIN_MODULE_%_LOGIN' OR name LIKE 'MAIN_MODULE_%_BARCODE'"; + $sql.=" ORDER BY name, entity"; + + $resql = $db->query($sql); + if ($resql) + { + $num = $db->num_rows($resql); + + if ($num) + { + $db->begin(); + + $i = 0; + while ($i < $num) + { + $obj=$db->fetch_object($resql); + + $reg = array(); + if (preg_match('/MAIN_MODULE_(.*)_(.*)/i', $obj->name, $reg)) + { + $name=$reg[1]; + $type=$reg[2]; + + $sql2 ="SELECT COUNT(*) as nb"; + $sql2.=" FROM ".MAIN_DB_PREFIX."const as c"; + $sql2.=" WHERE name LIKE 'MAIN_MODULE_".$name."'"; + $sql2.=" AND entity = ".$obj->entity; + $resql2 = $db->query($sql2); + if ($resql2) + { + $obj2 = $db->fetch_object($resql2); + if ($obj2 && $obj2->nb == 0) + { + // Module not found, so we canremove entry + $sqldelete = "DELETE FROM ".MAIN_DB_PREFIX."const WHERE name = '".$db->escape($obj->name)."' AND entity = ".$obj->entity; + + if (GETPOST('standard', 'alpha') == 'confirmed') + { + $db->query($sqldelete); + + print ''; + } + else + { + print ''; + } + } + else + { + //print ''; + } + } + } + + $i++; + } + + $db->commit(); + } + } + + + +} /* From here, actions need a parameter */ @@ -903,7 +983,7 @@ if ($ok && GETPOST('set_empty_time_spent_amount', 'alpha')) // force_disable_of_modules_not_found if ($ok && GETPOST('force_disable_of_modules_not_found', 'alpha')) { - print ''; + print ''; $arraylistofkey=array('hooks','js','css'); @@ -931,12 +1011,16 @@ if ($ok && GETPOST('force_disable_of_modules_not_found', 'alpha')) $db->begin(); + $reg = array(); if (preg_match('/MAIN_MODULE_(.*)_'.strtoupper($key).'/i', $constantname, $reg)) { $name=strtolower($reg[1]); - if ($name) // And entry for key $key and module $name was found in database. + if ($name) // An entry for key $key and module $name was found in database. { + $reloffile = ''; + $result = 'found'; + if ($key == 'hooks') $reloffile=$name.'/class/actions_'.$name.'.class.php'; if ($key == 'js') { @@ -953,13 +1037,17 @@ if ($ok && GETPOST('force_disable_of_modules_not_found', 'alpha')) $reloffile=preg_replace('/^\//', '', $valuearray[0]); } - //var_dump($key.' - '.$value.' - '.$reloffile); - try { - $result = dol_buildpath($reloffile, 0, 2); - } - catch(Exception $e) + if ($reloffile) { - // No catch yet + //var_dump($key.' - '.$value.' - '.$reloffile); + try { + $result = dol_buildpath($reloffile, 0, 2); + } + catch(Exception $e) + { + // No catch yet + $result = 'found'; // If error, we force lke if we found to avoid any deletion + } } if (! $result) @@ -967,7 +1055,7 @@ if ($ok && GETPOST('force_disable_of_modules_not_found', 'alpha')) print ' - File of '.$key.' ('.$reloffile.') NOT found, we disable the module.'; if (GETPOST('force_disable_of_modules_not_found') == 'confirmed') { - $sql2 ="DELETE FROM ".MAIN_DB_PREFIX."const WHERE name = 'MAIN_MODULE_".strtoupper($name)."_".strtoupper($key)."'"; + $sql2 ="DELETE FROM ".MAIN_DB_PREFIX."const WHERE name 'MAIN_MODULE_".strtoupper($name)."_".strtoupper($key)."'"; $resql2=$db->query($sql2); if (! $resql2) { From 6a84dfe29ee2794692e33d7df6006062dd6c2a0b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 29 May 2019 12:34:54 +0200 Subject: [PATCH 077/828] Update card.php --- htdocs/compta/bank/various_payment/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/bank/various_payment/card.php b/htdocs/compta/bank/various_payment/card.php index 5b4ae6c8b4a..476314f0851 100644 --- a/htdocs/compta/bank/various_payment/card.php +++ b/htdocs/compta/bank/various_payment/card.php @@ -327,7 +327,7 @@ if ($action == 'create') // Category if (is_array($options) && count($options)) { - print ''; } From cafb3840b749f268b8dfa6ec4d0e55b86b1bf324 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 29 May 2019 12:56:11 +0200 Subject: [PATCH 078/828] Fix look and feel v10 --- htdocs/compta/bank/bankentries_list.php | 1 + htdocs/compta/bank/class/paymentvarious.class.php | 2 +- htdocs/compta/bank/various_payment/card.php | 4 ++-- htdocs/compta/bank/various_payment/document.php | 2 +- htdocs/compta/bank/various_payment/info.php | 2 +- htdocs/compta/sociales/card.php | 4 ++++ htdocs/loan/card.php | 8 ++++++-- htdocs/modulebuilder/template/myobject_agenda.php | 2 +- htdocs/modulebuilder/template/myobject_card.php | 2 +- htdocs/modulebuilder/template/myobject_document.php | 2 +- htdocs/modulebuilder/template/myobject_note.php | 2 +- 11 files changed, 20 insertions(+), 11 deletions(-) diff --git a/htdocs/compta/bank/bankentries_list.php b/htdocs/compta/bank/bankentries_list.php index cf059f1cdf1..444927ea27d 100644 --- a/htdocs/compta/bank/bankentries_list.php +++ b/htdocs/compta/bank/bankentries_list.php @@ -961,6 +961,7 @@ if ($resql) $balancebefore = 0; // For balance $balancecalculated = false; $posconciliatecol = 0; + $cachebankaccount = array(); // Loop on each record $sign = 1; diff --git a/htdocs/compta/bank/class/paymentvarious.class.php b/htdocs/compta/bank/class/paymentvarious.class.php index 5a7ac205fe5..0c9df2c8b63 100644 --- a/htdocs/compta/bank/class/paymentvarious.class.php +++ b/htdocs/compta/bank/class/paymentvarious.class.php @@ -44,7 +44,7 @@ class PaymentVarious extends CommonObject /** * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png */ - public $picto = 'bill'; + public $picto = 'payment'; /** * @var int ID diff --git a/htdocs/compta/bank/various_payment/card.php b/htdocs/compta/bank/various_payment/card.php index a1c1d8ae349..6990fb34106 100644 --- a/htdocs/compta/bank/various_payment/card.php +++ b/htdocs/compta/bank/various_payment/card.php @@ -395,7 +395,7 @@ if ($id) { $head=various_payment_prepare_head($object); - dol_fiche_head($head, 'card', $langs->trans("VariousPayment"), -1, 'payment'); + dol_fiche_head($head, 'card', $langs->trans("VariousPayment"), -1, $object->picto); $morehtmlref='
'; // Project @@ -479,7 +479,7 @@ if ($id) print '
'; - + if (! empty($conf->banque->enabled)) { if ($object->fk_account > 0) diff --git a/htdocs/compta/bank/various_payment/document.php b/htdocs/compta/bank/various_payment/document.php index 02c3b331544..3d37b7e7de6 100644 --- a/htdocs/compta/bank/various_payment/document.php +++ b/htdocs/compta/bank/various_payment/document.php @@ -82,7 +82,7 @@ if ($object->id) { $head=various_payment_prepare_head($object); - dol_fiche_head($head, 'documents', $langs->trans("VariousPayment"), -1, 'payment'); + dol_fiche_head($head, 'documents', $langs->trans("VariousPayment"), -1, $object->picto); $morehtmlref='
'; // Project diff --git a/htdocs/compta/bank/various_payment/info.php b/htdocs/compta/bank/various_payment/info.php index 9afae281f78..33fd53b602b 100644 --- a/htdocs/compta/bank/various_payment/info.php +++ b/htdocs/compta/bank/various_payment/info.php @@ -50,7 +50,7 @@ $object->info($id); $head = various_payment_prepare_head($object); -dol_fiche_head($head, 'info', $langs->trans("VariousPayment"), -1, 'payment'); +dol_fiche_head($head, 'info', $langs->trans("VariousPayment"), -1, $object->picto); $morehtmlref='
'; diff --git a/htdocs/compta/sociales/card.php b/htdocs/compta/sociales/card.php index 12acff2ee4d..3ac50a65e9a 100644 --- a/htdocs/compta/sociales/card.php +++ b/htdocs/compta/sociales/card.php @@ -602,6 +602,8 @@ if ($id > 0) $num = $db->num_rows($resql); $i = 0; $total = 0; + + print '
'; // You can use div-table-responsive-no-min if you dont need reserved height for your table print '

*** Clean module_parts entries of modules not enabled
Constant '.$obj->name.' set in entity '.$obj->entity.' with value '.$obj->value.' -> Module not enabled in entity '.$obj->entity.', we delete record
Constant '.$obj->name.' set in entity '.$obj->entity.' with value '.$obj->value.' -> Module not enabled in entity '.$obj->entity.', we should delete record (not done, mode test)
Constant '.$obj->name.' set in entity '.$obj->entity.' with value '.$obj->value.' -> Module found in entity '.$obj->entity.', we keep record

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

*** Force modules not found physicaly to be disabled (only modules adding js, css or hooks can be detected as removed physicaly)
'.$langs->trans("Rubrique").''; + print '
'.$langs->trans("RubriquesTransactions").''; print Form::selectarray('category_transaction', $options, GETPOST('category_transaction'), 1); print '
'; print $object->subledger_account; print '
'; print ''; print ''; @@ -668,6 +670,8 @@ if ($id > 0) print '\n"; print "
'.$langs->trans("RefPayment").''.price($resteapayer)."
"; + print '
'; + $db->free($resql); } else diff --git a/htdocs/loan/card.php b/htdocs/loan/card.php index bb2b69f63f2..e826e86ea57 100644 --- a/htdocs/loan/card.php +++ b/htdocs/loan/card.php @@ -302,7 +302,7 @@ if ($action == 'create') // Rate print ''.$langs->trans("Rate").' %'; - // insurance amount + // Insurance amount print ''.$langs->trans("Insurance").''; // Project @@ -707,7 +707,9 @@ if ($id > 0) $total_insurance = 0; $total_interest = 0; $total_capital = 0; - print ''; + + print '
'; // You can use div-table-responsive-no-min if you dont need reserved height for your table + print '
'; print ''; print ''; print ''; @@ -748,6 +750,8 @@ if ($id > 0) print ''; } print "
'.$langs->trans("RefPayment").''.$langs->trans("Date").'
"; + print '
'; + $db->free($resql); } else diff --git a/htdocs/modulebuilder/template/myobject_agenda.php b/htdocs/modulebuilder/template/myobject_agenda.php index b536b264952..1f693282e5f 100644 --- a/htdocs/modulebuilder/template/myobject_agenda.php +++ b/htdocs/modulebuilder/template/myobject_agenda.php @@ -141,7 +141,7 @@ if ($object->id > 0) $head = myobjectPrepareHead($object); - dol_fiche_head($head, 'agenda', $langs->trans("MyObject"), -1, 'myobject@mymodule'); + dol_fiche_head($head, 'agenda', $langs->trans("MyObject"), -1, $object->picto); // Object card // ------------------------------------------------------------ diff --git a/htdocs/modulebuilder/template/myobject_card.php b/htdocs/modulebuilder/template/myobject_card.php index 3543722670d..1fc376dfe17 100644 --- a/htdocs/modulebuilder/template/myobject_card.php +++ b/htdocs/modulebuilder/template/myobject_card.php @@ -248,7 +248,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea $res = $object->fetch_optionals(); $head = myobjectPrepareHead($object); - dol_fiche_head($head, 'card', $langs->trans("MyObject"), -1, 'myobject@mymodule'); + dol_fiche_head($head, 'card', $langs->trans("MyObject"), -1, $object->picto); $formconfirm = ''; diff --git a/htdocs/modulebuilder/template/myobject_document.php b/htdocs/modulebuilder/template/myobject_document.php index 55fcdc6f9eb..6c956826e4c 100644 --- a/htdocs/modulebuilder/template/myobject_document.php +++ b/htdocs/modulebuilder/template/myobject_document.php @@ -110,7 +110,7 @@ if ($object->id) */ $head = myobjectPrepareHead($object); - dol_fiche_head($head, 'document', $langs->trans("MyObject"), -1, 'myobject@mymodule'); + dol_fiche_head($head, 'document', $langs->trans("MyObject"), -1, $object->picto); // Build file list diff --git a/htdocs/modulebuilder/template/myobject_note.php b/htdocs/modulebuilder/template/myobject_note.php index 0cbf4c40d8b..6ebe37b674a 100644 --- a/htdocs/modulebuilder/template/myobject_note.php +++ b/htdocs/modulebuilder/template/myobject_note.php @@ -95,7 +95,7 @@ if ($id > 0 || ! empty($ref)) $head = myobjectPrepareHead($object); - dol_fiche_head($head, 'note', $langs->trans("MyObject"), -1, 'myobject@mymodule'); + dol_fiche_head($head, 'note', $langs->trans("MyObject"), -1, $object->picto); // Object card // ------------------------------------------------------------ From bc030561ace3a2335ad58c959634339c3c6087b5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 29 May 2019 13:48:00 +0200 Subject: [PATCH 079/828] Debug various payment --- htdocs/blockedlog/class/blockedlog.class.php | 6 ++-- htdocs/compta/bank/various_payment/card.php | 34 +++++++++++--------- htdocs/compta/bank/various_payment/list.php | 12 +++---- 3 files changed, 28 insertions(+), 24 deletions(-) diff --git a/htdocs/blockedlog/class/blockedlog.class.php b/htdocs/blockedlog/class/blockedlog.class.php index ae64665bbfd..d7302a2c795 100644 --- a/htdocs/blockedlog/class/blockedlog.class.php +++ b/htdocs/blockedlog/class/blockedlog.class.php @@ -449,7 +449,7 @@ class BlockedLog { if (in_array($key, $arrayoffieldstoexclude)) continue; // Discard some properties if (! in_array($key, array( - 'ref','ref_client','ref_supplier','date','datef','type','total_ht','total_tva','total_ttc','localtax1','localtax2','revenuestamp','datepointoftax','note_public','lines' + 'ref','ref_client','ref_supplier','date','datef','datev','type','total_ht','total_tva','total_ttc','localtax1','localtax2','revenuestamp','datepointoftax','note_public','lines' ))) continue; // Discard if not into a dedicated list if ($key == 'lines') { @@ -459,8 +459,8 @@ class BlockedLog $lineid++; foreach($tmpline as $keyline => $valueline) { - if (! in_array($keyline, array( - 'ref','multicurrency_code','multicurrency_total_ht','multicurrency_total_tva','multicurrency_total_ttc','qty','product_type','vat_src_code','tva_tx','info_bits','localtax1_tx','localtax2_tx','total_ht','total_tva','total_ttc','total_localtax1','total_localtax2' + if (! in_array($keyline, array( + 'ref','multicurrency_code','multicurrency_total_ht','multicurrency_total_tva','multicurrency_total_ttc','qty','product_type','vat_src_code','tva_tx','info_bits','localtax1_tx','localtax2_tx','total_ht','total_tva','total_ttc','total_localtax1','total_localtax2' ))) continue; // Discard if not into a dedicated list if (! is_object($this->object_data->invoiceline[$lineid])) $this->object_data->invoiceline[$lineid] = new stdClass(); diff --git a/htdocs/compta/bank/various_payment/card.php b/htdocs/compta/bank/various_payment/card.php index ab5bd0aee87..2d911b5c6bb 100644 --- a/htdocs/compta/bank/various_payment/card.php +++ b/htdocs/compta/bank/various_payment/card.php @@ -37,7 +37,7 @@ if (! empty($conf->projet->enabled)) } // Load translation files required by the page -$langs->loadLangs(array("compta", "banks", "bills", "users", "accountancy")); +$langs->loadLangs(array("compta", "banks", "bills", "users", "accountancy", "categories")); // Get parameters $id = GETPOST('id', 'int'); @@ -144,6 +144,7 @@ if (empty($reshook)) setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("BankAccount")), null, 'errors'); $error++; } + // TODO Remove this and allow instead to edit a various payment to enter accounting code if (! empty($conf->accounting->enabled) && ! $object->accountancy_code) { $langs->load('errors'); @@ -324,14 +325,6 @@ if ($action == 'create') print ''."\n"; } - // Category - if (is_array($options) && count($options)) - { - print ''.$langs->trans("RubriquesTransactions").''; - print Form::selectarray('category_transaction', $options, GETPOST('category_transaction'), 1); - print ''; - } - // Project if (! empty($conf->projet->enabled)) { @@ -353,14 +346,20 @@ if ($action == 'create') print $hookmanager->resPrint; print ''; - print ''; - print '
'; - print ''; + // Category + if (is_array($options) && count($options) && $conf->categorie->enabled) + { + print ''; + } + // Accountancy account if (! empty($conf->accounting->enabled)) { - print ''; + // TODO Remove the fieldrequired and allow instead to edit a various payment to enter accounting code + print ''; print ''; @@ -525,7 +524,6 @@ if ($id) print '
'.$langs->trans("RubriquesTransactions").''; + print Form::selectarray('category_transaction', $options, GETPOST('category_transaction'), 1); + print '
'.$langs->trans("AccountAccounting").'
'.$langs->trans("AccountAccounting").''; print $formaccounting->select_account($accountancy_code, 'accountancy_code', 1, null, 1, 1, ''); print '
'; - print '
'; print '
'; print '
'; @@ -537,7 +535,12 @@ if ($id) * Action buttons */ print '
'."\n"; - if ($object->rappro == 0) + + // TODO + // Add button modify + + // Delete + if (empty($object->rappro)) { if (! empty($user->rights->banque->modifier)) { @@ -552,6 +555,7 @@ if ($id) { print ''.$langs->trans("Delete").''; } + print "
"; } diff --git a/htdocs/compta/bank/various_payment/list.php b/htdocs/compta/bank/various_payment/list.php index 537bd6aee66..c9aba472dd8 100644 --- a/htdocs/compta/bank/various_payment/list.php +++ b/htdocs/compta/bank/various_payment/list.php @@ -57,7 +57,7 @@ if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or $offset = $conf->liste_limit * $page; $pageprev = $page - 1; $pagenext = $page + 1; -if (! $sortfield) $sortfield="v.datep"; +if (! $sortfield) $sortfield="v.datep,v.rowid"; if (! $sortorder) $sortorder="DESC"; $filtre=GETPOST("filtre", 'alpha'); @@ -110,13 +110,13 @@ $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."bank_account as ba ON b.fk_account = ba.row $sql.= " WHERE v.entity IN (".getEntity('payment_various').")"; // Search criteria -if ($search_ref) $sql.=" AND v.rowid=".$search_ref; +if ($search_ref) $sql.=" AND v.rowid=".$db->escape($search_ref); if ($search_label) $sql.=natural_search(array('v.label'), $search_label); if ($search_amount_deb) $sql.=natural_search("v.amount", $search_amount_deb, 1); if ($search_amount_cred) $sql.=natural_search("v.amount", $search_amount_cred, 1); -if ($search_account > 0) $sql.=" AND b.fk_account=".$search_account; -if ($search_date) $sql.=" AND v.datep=".$search_date; -if ($search_accountancy_code > 0) $sql.=" AND v.accountancy_code=".$search_accountancy_code; +if ($search_account > 0) $sql.=" AND b.fk_account=".$db->escape($search_account); +if ($search_date) $sql.=" AND v.datep = '".$db->idate($search_date)."'"; +if ($search_accountancy_code > 0) $sql.=" AND v.accountancy_code=".$db->escape($search_accountancy_code); if ($typeid > 0) $sql .= " AND v.fk_typepayment=".$typeid; if ($filtre) { $filtre=str_replace(":", "=", $filtre); @@ -234,7 +234,7 @@ if ($result) print ''; print_liste_field_titre("Ref", $_SERVER["PHP_SELF"], "v.rowid", "", $param, "", $sortfield, $sortorder); print_liste_field_titre("Label", $_SERVER["PHP_SELF"], "v.label", "", $param, '', $sortfield, $sortorder, 'left '); - print_liste_field_titre("DatePayment", $_SERVER["PHP_SELF"], "v.datep", "", $param, '', $sortfield, $sortorder, 'center '); + print_liste_field_titre("DatePayment", $_SERVER["PHP_SELF"], "v.datep,v.rowid", "", $param, '', $sortfield, $sortorder, 'center '); print_liste_field_titre("PaymentMode", $_SERVER["PHP_SELF"], "type", "", $param, '', $sortfield, $sortorder, 'left '); if (! empty($conf->banque->enabled)) print_liste_field_titre("BankAccount", $_SERVER["PHP_SELF"], "ba.label", "", $param, "", $sortfield, $sortorder); if (! empty($conf->accounting->enabled)) print_liste_field_titre("AccountAccounting", $_SERVER["PHP_SELF"], "v.accountancy_code", "", $param, '', $sortfield, $sortorder, 'left '); From 5b6821c191588a6f821ac2d8abcd11791fdecaea Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Wed, 29 May 2019 16:55:44 +0200 Subject: [PATCH 080/828] FIX display job/fucnction in contact list Display job/function is usefull for correct choice of additionnal contact in a object (PR from returns of severals professionnal dolibarr's user) --- htdocs/core/tpl/contacts.tpl.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/tpl/contacts.tpl.php b/htdocs/core/tpl/contacts.tpl.php index 316e85a3ac6..3830e2bc31a 100644 --- a/htdocs/core/tpl/contacts.tpl.php +++ b/htdocs/core/tpl/contacts.tpl.php @@ -129,7 +129,7 @@ if ($permission) { selectCompaniesForNewContact($object, 'id', $selectedCompany, 'newcompany', '', 0, '', 'minwidth300imp'); ?>
- select_contacts(($selectedCompany > 0 ? $selectedCompany : -1), '', 'contactid', 3, '', '', 0, 'minwidth100imp'); ?> + select_contacts(($selectedCompany > 0 ? $selectedCompany : -1), '', 'contactid', 3, '', '', 1, 'minwidth100imp'); ?>
Date: Thu, 30 May 2019 11:42:28 +0200 Subject: [PATCH 081/828] FIX missing llx_const encrypt --- htdocs/install/mysql/migration/8.0.0-9.0.0.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/install/mysql/migration/8.0.0-9.0.0.sql b/htdocs/install/mysql/migration/8.0.0-9.0.0.sql index 8bc8d691bbd..80d144249d1 100644 --- a/htdocs/install/mysql/migration/8.0.0-9.0.0.sql +++ b/htdocs/install/mysql/migration/8.0.0-9.0.0.sql @@ -269,8 +269,8 @@ CREATE TABLE llx_pos_cash_fence( -- Withdrawals / Prelevements -UPDATE llx_const set name = 'PRELEVEMENT_END_TO_END' where name = 'END_TO_END'; -UPDATE llx_const set name = 'PRELEVEMENT_USTRD' where name = 'USTRD'; +UPDATE llx_const set name = __ENCRYPT('PRELEVEMENT_END_TO_END')__ where name = __ENCRYPT('END_TO_END')__; +UPDATE llx_const set name = __ENCRYPT('PRELEVEMENT_USTRD')__ where name = __ENCRYPT('USTRD')__; -- Delete duplicate accounting account, but only if not used From 063fe35c97fc03691b850191d3ad2907c93874c5 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Thu, 30 May 2019 11:45:55 +0200 Subject: [PATCH 082/828] FIX missing encrypt llx_const fields --- htdocs/install/mysql/migration/9.0.0-10.0.0.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql index 075e95fb0bd..81a1e315751 100644 --- a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql +++ b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql @@ -304,8 +304,8 @@ ALTER TABLE llx_actioncomm ADD COLUMN calling_duration integer; ALTER TABLE llx_emailcollector_emailcollector ADD COLUMN datelastok datetime; ALTER TABLE llx_emailcollector_emailcollector ADD COLUMN maxemailpercollect integer DEFAULT 100; -DELETE FROM llx_const WHERE name = 'THEME_ELDY_USE_HOVER' AND value = '0'; -DELETE FROM llx_const WHERE name = 'THEME_ELDY_USE_CHECKED' AND value = '0'; +DELETE FROM llx_const WHERE name = __ENCRYPT('THEME_ELDY_USE_HOVER')__ AND value = __ENCRYPT('0')__; +DELETE FROM llx_const WHERE name = __ENCRYPT('THEME_ELDY_USE_CHECKED')__ AND value = __ENCRYPT('0')__; ALTER TABLE llx_inventorydet DROP COLUMN pmp; ALTER TABLE llx_inventorydet DROP COLUMN pa; From e4969672354577ea570f007bc524117de186f4cd Mon Sep 17 00:00:00 2001 From: Francis Appels Date: Thu, 30 May 2019 17:30:53 +0200 Subject: [PATCH 083/828] Fix scrutinizer, wrong unitprice var --- htdocs/contrat/class/contrat.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index d21b383bf97..3a20e2f9c6b 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -1647,7 +1647,7 @@ class Contrat extends CommonObject // if buy price not defined, define buyprice as configured in margin admin if ($this->pa_ht == 0) { - if (($result = $this->defineBuyPrice($pu_ht, $remise_percent)) < 0) + if (($result = $this->defineBuyPrice($pu, $remise_percent)) < 0) { return $result; } From cd75794aaac0b9e98711e707e2cfe1a595395abe Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 31 May 2019 11:38:54 +0200 Subject: [PATCH 084/828] FIX #11169 #11202 --- htdocs/core/class/extrafields.class.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index 415998f5eb7..752818f1520 100644 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -1861,7 +1861,7 @@ class ExtraFields function setOptionalsFromPost($extralabels, &$object, $onlykey='') { global $_POST, $langs; - $nofillrequired='';// For error when required field left blank + $nofillrequired=0;// For error when required field left blank $error_field_required = array(); if (is_array($this->attributes[$object->table_element]['label'])) $extralabels=$this->attributes[$object->table_element]['label']; @@ -1892,7 +1892,8 @@ class ExtraFields if ($this->attributes[$object->table_element]['required'][$key]) // Value is required { // Check if empty without using GETPOST, value can be alpha, int, array, etc... - if ((! is_array($_POST["options_".$key]) && empty($_POST["options_".$key]) && $_POST["options_".$key] != '0') + if ((! is_array($_POST["options_".$key]) && empty($_POST["options_".$key]) && $this->attributes[$object->table_element]['type'][$key] != 'select' && $_POST["options_".$key] != '0') + || (! is_array($_POST["options_".$key]) && empty($_POST["options_".$key]) && $this->attributes[$object->table_element]['type'][$key] == 'select') || (is_array($_POST["options_".$key]) && empty($_POST["options_".$key]))) { //print 'ccc'.$value.'-'.$this->attributes[$object->table_element]['required'][$key]; From f2088a084f4a366e4e06b8a85bdfa79448e0626f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 31 May 2019 11:53:30 +0200 Subject: [PATCH 085/828] Fix error management --- htdocs/contact/card.php | 46 +++++++++++++------------ htdocs/core/class/extrafields.class.php | 1 - 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/htdocs/contact/card.php b/htdocs/contact/card.php index 9289c156fdb..2ad2e5e2e99 100644 --- a/htdocs/contact/card.php +++ b/htdocs/contact/card.php @@ -377,21 +377,24 @@ if (empty($reshook)) $ret = $extrafields->setOptionalsFromPost($extralabels,$object); if ($ret < 0) $error++; - $result = $object->update($contactid, $user); - - if ($result > 0) { - // Categories association - $categories = GETPOST('contcats', 'array'); - $object->setCategories($categories); - - $object->old_lastname=''; - $object->old_firstname=''; - $action = 'view'; - } - else + if (! $error) { - setEventMessages($object->error, $object->errors, 'errors'); - $action = 'edit'; + $result = $object->update($contactid, $user); + + if ($result > 0) { + // Categories association + $categories = GETPOST('contcats', 'array'); + $object->setCategories($categories); + + $object->old_lastname=''; + $object->old_firstname=''; + $action = 'view'; + } + else + { + setEventMessages($object->error, $object->errors, 'errors'); + $action = 'edit'; + } } } @@ -500,8 +503,8 @@ else $linkback=''; print load_fiche_titre($title,$linkback,'title_companies.png'); - // Affiche les erreurs - dol_htmloutput_errors(is_numeric($error)?'':$error,$errors); + // Show errors + dol_htmloutput_errors(is_numeric($error)?'':$error, $errors); if ($conf->use_javascript_ajax) { @@ -775,8 +778,8 @@ else $objsoc = new Societe($db); $objsoc->fetch($object->socid); - // Affiche les erreurs - dol_htmloutput_errors($error,$errors); + // Show errors + dol_htmloutput_errors(is_numeric($error)?'':$error, $errors); if ($conf->use_javascript_ajax) { @@ -1073,11 +1076,10 @@ else { $objsoc = new Societe($db); - /* - * Fiche en mode visualisation - */ + // View mode - dol_htmloutput_errors($error,$errors); + // Show errors + dol_htmloutput_errors(is_numeric($error)?'':$error, $errors); dol_fiche_head($head, 'card', $title, -1, 'contact'); diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index 752818f1520..32313e75d3a 100644 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -1901,7 +1901,6 @@ class ExtraFields $error_field_required[] = $langs->transnoentitiesnoconv($value); } } - if (in_array($key_type,array('date'))) { // Clean parameters From 15fd24a511056862996296d4eb4fdc137a3640c6 Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Fri, 31 May 2019 12:14:51 +0200 Subject: [PATCH 086/828] Fix : remove hardcoded llx_ prefix --- .../core/modules/modReceiptPrinter.class.php | 4 ++-- htdocs/core/modules/modStock.class.php | 2 +- htdocs/install/repair.php | 2 +- htdocs/install/upgrade2.php | 22 +++++++++---------- htdocs/website/class/website.class.php | 2 +- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/htdocs/core/modules/modReceiptPrinter.class.php b/htdocs/core/modules/modReceiptPrinter.class.php index 50c93f07220..49a12b5942c 100644 --- a/htdocs/core/modules/modReceiptPrinter.class.php +++ b/htdocs/core/modules/modReceiptPrinter.class.php @@ -138,8 +138,8 @@ class modReceiptPrinter extends DolibarrModules // Clean before activation $this->remove($options); $sql = array( - "CREATE TABLE IF NOT EXISTS llx_printer_receipt (rowid integer AUTO_INCREMENT PRIMARY KEY, name varchar(128), fk_type integer, fk_profile integer, parameter varchar(128), entity integer) ENGINE=innodb;", - "CREATE TABLE IF NOT EXISTS llx_printer_receipt_template (rowid integer AUTO_INCREMENT PRIMARY KEY, name varchar(128), template text, entity integer) ENGINE=innodb;", + "CREATE TABLE IF NOT EXISTS ".MAIN_DB_PREFIX."printer_receipt (rowid integer AUTO_INCREMENT PRIMARY KEY, name varchar(128), fk_type integer, fk_profile integer, parameter varchar(128), entity integer) ENGINE=innodb;", + "CREATE TABLE IF NOT EXISTS ".MAIN_DB_PREFIX."printer_receipt_template (rowid integer AUTO_INCREMENT PRIMARY KEY, name varchar(128), template text, entity integer) ENGINE=innodb;", ); return $this->_init($sql,$options); } diff --git a/htdocs/core/modules/modStock.class.php b/htdocs/core/modules/modStock.class.php index 1c0393b3653..5e358c68841 100644 --- a/htdocs/core/modules/modStock.class.php +++ b/htdocs/core/modules/modStock.class.php @@ -274,7 +274,7 @@ class modStock extends DolibarrModules 'ps.fk_product'=>"PREF123456",'ps.fk_entrepot'=>"ALM001",'ps.reel'=>"10" ); $this->import_run_sql_after_array[$r]=array( // Because we may change data that are denormalized, we must update dernormalized data after. - 'UPDATE llx_product p SET p.stock= (SELECT SUM(ps.reel) FROM llx_product_stock ps WHERE ps.fk_product = p.rowid);' + 'UPDATE '.MAIN_DB_PREFIX.'product p SET p.stock= (SELECT SUM(ps.reel) FROM '.MAIN_DB_PREFIX.'product_stock ps WHERE ps.fk_product = p.rowid);' ); } diff --git a/htdocs/install/repair.php b/htdocs/install/repair.php index 229ae0a3c3e..2e4847e2a97 100644 --- a/htdocs/install/repair.php +++ b/htdocs/install/repair.php @@ -774,7 +774,7 @@ if ($ok && GETPOST('clean_product_stock_batch','alpha')) if ($resql2) { // We update product_stock, so we must field stock into product too. - $sql3='UPDATE llx_product p SET p.stock= (SELECT SUM(ps.reel) FROM llx_product_stock ps WHERE ps.fk_product = p.rowid)'; + $sql3='UPDATE '.MAIN_DB_PREFIX.'product p SET p.stock= (SELECT SUM(ps.reel) FROM '.MAIN_DB_PREFIX.'product_stock ps WHERE ps.fk_product = p.rowid)'; $resql3=$db->query($sql3); if (! $resql3) { diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php index be31b1f6452..1c87d333795 100644 --- a/htdocs/install/upgrade2.php +++ b/htdocs/install/upgrade2.php @@ -660,8 +660,8 @@ function migrate_paiements_orphelins_1($db,$langs,$conf) $sql = "SELECT distinct p.rowid, p.datec, p.amount as pamount, bu.fk_bank, b.amount as bamount,"; $sql.= " bu2.url_id as socid"; $sql.= " FROM (".MAIN_DB_PREFIX."paiement as p, ".MAIN_DB_PREFIX."bank_url as bu, ".MAIN_DB_PREFIX."bank as b)"; - $sql.= " LEFT JOIN llx_paiement_facture as pf ON pf.fk_paiement = p.rowid"; - $sql.= " LEFT JOIN llx_bank_url as bu2 ON (bu.fk_bank=bu2.fk_bank AND bu2.type = 'company')"; + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."paiement_facture as pf ON pf.fk_paiement = p.rowid"; + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."bank_url as bu2 ON (bu.fk_bank=bu2.fk_bank AND bu2.type = 'company')"; $sql.= " WHERE pf.rowid IS NULL AND (p.rowid=bu.url_id AND bu.type='payment') AND bu.fk_bank = b.rowid"; $sql.= " AND b.rappro = 1"; $sql.= " AND (p.fk_facture = 0 OR p.fk_facture IS NULL)"; @@ -787,8 +787,8 @@ function migrate_paiements_orphelins_2($db,$langs,$conf) $sql = "SELECT distinct p.rowid, p.datec, p.amount as pamount, bu.fk_bank, b.amount as bamount,"; $sql.= " bu2.url_id as socid"; $sql.= " FROM (".MAIN_DB_PREFIX."paiement as p, ".MAIN_DB_PREFIX."bank_url as bu, ".MAIN_DB_PREFIX."bank as b)"; - $sql.= " LEFT JOIN llx_paiement_facture as pf ON pf.fk_paiement = p.rowid"; - $sql.= " LEFT JOIN llx_bank_url as bu2 ON (bu.fk_bank = bu2.fk_bank AND bu2.type = 'company')"; + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."paiement_facture as pf ON pf.fk_paiement = p.rowid"; + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."bank_url as bu2 ON (bu.fk_bank = bu2.fk_bank AND bu2.type = 'company')"; $sql.= " WHERE pf.rowid IS NULL AND (p.fk_bank = bu.fk_bank AND bu.type = 'payment') AND bu.fk_bank = b.rowid"; $sql.= " AND (p.fk_facture = 0 OR p.fk_facture IS NULL)"; @@ -1104,7 +1104,7 @@ function migrate_contracts_date1($db,$langs,$conf) print '
'; print ''.$langs->trans('MigrationContractsEmptyDatesUpdate')."
\n"; - $sql="update llx_contrat set date_contrat=tms where date_contrat is null"; + $sql="update ".MAIN_DB_PREFIX."contrat set date_contrat=tms where date_contrat is null"; dolibarr_install_syslog("upgrade2::migrate_contracts_date1"); $resql = $db->query($sql); if (! $resql) dol_print_error($db); @@ -1113,7 +1113,7 @@ function migrate_contracts_date1($db,$langs,$conf) else print $langs->trans('MigrationContractsEmptyDatesNothingToUpdate')."
\n"; - $sql="update llx_contrat set datec=tms where datec is null"; + $sql="update ".MAIN_DB_PREFIX."contrat set datec=tms where datec is null"; dolibarr_install_syslog("upgrade2::migrate_contracts_date1"); $resql = $db->query($sql); if (! $resql) dol_print_error($db); @@ -1204,7 +1204,7 @@ function migrate_contracts_date3($db,$langs,$conf) print '
'; print ''.$langs->trans('MigrationContractsIncoherentCreationDateUpdate')."
\n"; - $sql="update llx_contrat set datec=date_contrat where datec is null or datec > date_contrat"; + $sql="update ".MAIN_DB_PREFIX."contrat set datec=date_contrat where datec is null or datec > date_contrat"; dolibarr_install_syslog("upgrade2::migrate_contracts_date3"); $resql = $db->query($sql); if (! $resql) dol_print_error($db); @@ -1231,7 +1231,7 @@ function migrate_contracts_open($db,$langs,$conf) print '
'; print ''.$langs->trans('MigrationReopeningContracts')."
\n"; - $sql = "SELECT c.rowid as cref FROM llx_contrat as c, llx_contratdet as cd"; + $sql = "SELECT c.rowid as cref FROM ".MAIN_DB_PREFIX."contrat as c, ".MAIN_DB_PREFIX."contratdet as cd"; $sql.= " WHERE cd.statut = 4 AND c.statut=2 AND c.rowid=cd.fk_contrat"; dolibarr_install_syslog("upgrade2::migrate_contracts_open"); $resql = $db->query($sql); @@ -1964,7 +1964,7 @@ function migrate_modeles($db,$langs,$conf) if (count($modellist)==0) { // Aucun model par defaut. - $sql=" insert into llx_document_model(nom,type) values('crabe','invoice')"; + $sql=" insert into ".MAIN_DB_PREFIX."document_model(nom,type) values('crabe','invoice')"; $resql = $db->query($sql); if (! $resql) dol_print_error($db); } @@ -1977,7 +1977,7 @@ function migrate_modeles($db,$langs,$conf) if (count($modellist)==0) { // Aucun model par defaut. - $sql=" insert into llx_document_model(nom,type) values('einstein','order')"; + $sql=" insert into ".MAIN_DB_PREFIX."document_model(nom,type) values('einstein','order')"; $resql = $db->query($sql); if (! $resql) dol_print_error($db); } @@ -1990,7 +1990,7 @@ function migrate_modeles($db,$langs,$conf) if (count($modellist)==0) { // Aucun model par defaut. - $sql=" insert into llx_document_model(nom,type) values('rouget','shipping')"; + $sql=" insert into ".MAIN_DB_PREFIX."document_model(nom,type) values('rouget','shipping')"; $resql = $db->query($sql); if (! $resql) dol_print_error($db); } diff --git a/htdocs/website/class/website.class.php b/htdocs/website/class/website.class.php index 432851b4bd4..bfd6a0dcb9e 100644 --- a/htdocs/website/class/website.class.php +++ b/htdocs/website/class/website.class.php @@ -850,7 +850,7 @@ class Website extends CommonObject } foreach($listofpages as $pageid => $objectpageold) { - $line = 'INSERT INTO llx_website_page(rowid, fk_page, fk_website, pageurl, title, description, keyword, status, date_creation, tms, lang, import_key, grabbed_from, content)'; + $line = 'INSERT INTO '.MAIN_DB_PREFIX.'website_page(rowid, fk_page, fk_website, pageurl, title, description, keyword, status, date_creation, tms, lang, import_key, grabbed_from, content)'; $line.= " VALUES("; $line.= $objectpageold->newid."+__MAXROWID__, "; $line.= ($objectpageold->newfk_page ? $this->db->escape($objectpageold->newfk_page)."+__MAXROWID__" : "null").", "; From 9ab2f4494644d6e9ea2b8558767be1a41204ecc8 Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Fri, 31 May 2019 15:14:56 +0200 Subject: [PATCH 087/828] Fix : missing rights test to display tag create link --- htdocs/categories/index.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/htdocs/categories/index.php b/htdocs/categories/index.php index 9f41c0b016a..d6a314791c8 100644 --- a/htdocs/categories/index.php +++ b/htdocs/categories/index.php @@ -65,9 +65,12 @@ $arrayofcss=array('/includes/jquery/plugins/jquerytreeview/jquery.treeview.css') llxHeader('',$title,'','',0,0,$arrayofjs,$arrayofcss); -$newcardbutton = ''.$langs->trans("NewCategory").''; -$newcardbutton.= ''; -$newcardbutton.= ''; +$newcardbutton=''; +if($user->rights->categorie->creer) { + $newcardbutton = ''.$langs->trans("NewCategory").''; + $newcardbutton.= ''; + $newcardbutton.= ''; +} print load_fiche_titre($title, $newcardbutton); From 6dd01e86e9834c783a5a0a150050c905cec64aab Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Fri, 31 May 2019 15:53:23 +0200 Subject: [PATCH 088/828] Fix : avoid warning and uniformize var use --- htdocs/comm/action/list.php | 2 +- htdocs/comm/action/rapport/index.php | 2 +- htdocs/compta/paiement.php | 2 +- htdocs/compta/sociales/document.php | 2 +- htdocs/compta/tva/document.php | 3 ++- htdocs/fourn/facture/paiement.php | 2 +- htdocs/hrm/admin/admin_establishment.php | 2 +- htdocs/loan/document.php | 2 +- htdocs/resource/list.php | 3 +-- htdocs/societe/notify/index.php | 2 +- 10 files changed, 11 insertions(+), 11 deletions(-) diff --git a/htdocs/comm/action/list.php b/htdocs/comm/action/list.php index ae411addb25..048308c9c20 100644 --- a/htdocs/comm/action/list.php +++ b/htdocs/comm/action/list.php @@ -87,7 +87,7 @@ $limit = GETPOST('limit','int')?GETPOST('limit','int'):$conf->liste_limit; $sortfield = GETPOST("sortfield",'alpha'); $sortorder = GETPOST("sortorder",'alpha'); $page = GETPOST("page",'int'); -if ($page == -1 || $page == null) { $page = 0 ; } +if (empty($page) || $page == -1) { $page = 0 ; } $offset = $limit * $page ; if (! $sortorder) { diff --git a/htdocs/comm/action/rapport/index.php b/htdocs/comm/action/rapport/index.php index 7e4108b470b..703d35c8480 100644 --- a/htdocs/comm/action/rapport/index.php +++ b/htdocs/comm/action/rapport/index.php @@ -42,7 +42,7 @@ $limit = GETPOST('limit','int')?GETPOST('limit','int'):$conf->liste_limit; $sortfield = GETPOST("sortfield",'alpha'); $sortorder = GETPOST("sortorder",'alpha'); $page = GETPOST("page",'int'); -if ($page == -1 || $page == null) { $page = 0 ; } +if (empty($page) || $page == -1) { $page = 0 ; } $offset = $limit * $page ; if (! $sortorder) $sortorder="DESC"; if (! $sortfield) $sortfield="a.datep"; diff --git a/htdocs/compta/paiement.php b/htdocs/compta/paiement.php index 805bdbdf79e..4888b758cc1 100644 --- a/htdocs/compta/paiement.php +++ b/htdocs/compta/paiement.php @@ -817,7 +817,7 @@ if ($action == 'create' || $action == 'confirm_paiement' || $action == 'add_paie */ if (! GETPOST('action','aZ09')) { - if ($page == -1) $page = 0 ; + if (empty($page) || $page == -1) $page = 0 ; $limit = GETPOST('limit','int')?GETPOST('limit','int'):$conf->liste_limit; $offset = $limit * $page ; diff --git a/htdocs/compta/sociales/document.php b/htdocs/compta/sociales/document.php index 490dbf3a1fe..36d51ff9f01 100644 --- a/htdocs/compta/sociales/document.php +++ b/htdocs/compta/sociales/document.php @@ -55,7 +55,7 @@ $result = restrictedArea($user, 'tax', $id, 'chargesociales','charges'); $sortfield = GETPOST("sortfield",'alpha'); $sortorder = GETPOST("sortorder",'alpha'); $page = GETPOST("page",'int'); -if ($page == -1) { +if (empty($page) || $page == -1) { $page = 0; } $offset = $conf->liste_limit * $page; diff --git a/htdocs/compta/tva/document.php b/htdocs/compta/tva/document.php index b83cad80bdd..1653cc28460 100644 --- a/htdocs/compta/tva/document.php +++ b/htdocs/compta/tva/document.php @@ -56,9 +56,10 @@ $result = restrictedArea($user, 'tax', $id, 'vat','charges'); $sortfield = GETPOST("sortfield",'alpha'); $sortorder = GETPOST("sortorder",'alpha'); $page = GETPOST("page",'int'); -if ($page == -1) { +if (empty($page) || $page == -1) { $page = 0; } + $offset = $conf->liste_limit * $page; $pageprev = $page - 1; $pagenext = $page + 1; diff --git a/htdocs/fourn/facture/paiement.php b/htdocs/fourn/facture/paiement.php index 57ca70dfa98..3a47b496394 100644 --- a/htdocs/fourn/facture/paiement.php +++ b/htdocs/fourn/facture/paiement.php @@ -753,7 +753,7 @@ if (empty($action)) $sortfield = GETPOST("sortfield",'alpha'); $sortorder = GETPOST("sortorder",'alpha'); $page=GETPOST("page",'int'); - if ($page == -1 || $page == null) { $page = 0 ; } + if (empty($page) || $page == -1) { $page = 0 ; } $offset = $limit * $page ; $pageprev = $page - 1; $pagenext = $page + 1; diff --git a/htdocs/hrm/admin/admin_establishment.php b/htdocs/hrm/admin/admin_establishment.php index 996ddd58ed3..d28323240dd 100644 --- a/htdocs/hrm/admin/admin_establishment.php +++ b/htdocs/hrm/admin/admin_establishment.php @@ -54,7 +54,7 @@ $sortfield = GETPOST("sortfield"); if (!$sortorder) $sortorder="DESC"; if (!$sortfield) $sortfield="e.rowid"; -if ($page == -1) { +if (empty($page) || $page == -1) { $page = 0 ; } diff --git a/htdocs/loan/document.php b/htdocs/loan/document.php index f9d17c563fa..69050a5e10d 100644 --- a/htdocs/loan/document.php +++ b/htdocs/loan/document.php @@ -47,7 +47,7 @@ $result = restrictedArea($user, 'loan', $id, '',''); $sortfield = GETPOST("sortfield",'alpha'); $sortorder = GETPOST("sortorder",'alpha'); $page = GETPOST("page",'int'); -if ($page == -1) { +if (empty($page) || $page == -1) { $page = 0; } $offset = $conf->liste_limit * $page; diff --git a/htdocs/resource/list.php b/htdocs/resource/list.php index 68f91327f6d..f6e81b89773 100644 --- a/htdocs/resource/list.php +++ b/htdocs/resource/list.php @@ -97,8 +97,7 @@ if (empty($arch)) $arch = 0; $limit = GETPOST('limit','int')?GETPOST('limit','int'):$conf->liste_limit; $page = GETPOST("page"); -$page = is_numeric($page) ? $page : 0; -$page = $page == -1 ? 0 : $page; +if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 $offset = $limit * $page ; $pageprev = $page - 1; $pagenext = $page + 1; diff --git a/htdocs/societe/notify/index.php b/htdocs/societe/notify/index.php index 3326e431178..c1d99620b89 100644 --- a/htdocs/societe/notify/index.php +++ b/htdocs/societe/notify/index.php @@ -42,7 +42,7 @@ if ($sortfield == "") $sortfield="s.nom"; } -if ($page == -1 || $page == null) { $page = 0 ; } +if (empty($page) || $page == -1) { $page = 0 ; } $offset = $conf->liste_limit * $page ; $pageprev = $page - 1; From 0372276a7bb77a124b81890af2104c3964cf8b4b Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Fri, 31 May 2019 16:04:12 +0200 Subject: [PATCH 089/828] Fix : warnings in resource module --- htdocs/resource/class/dolresource.class.php | 6 ++++-- htdocs/resource/class/html.formresource.class.php | 2 -- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/resource/class/dolresource.class.php b/htdocs/resource/class/dolresource.class.php index 7c3999db7c9..9a595a5b650 100644 --- a/htdocs/resource/class/dolresource.class.php +++ b/htdocs/resource/class/dolresource.class.php @@ -530,13 +530,13 @@ class Dolresource extends CommonObject if ($limit) $sql.= $this->db->plimit($limit, $offset); dol_syslog(get_class($this)."::fetch_all", LOG_DEBUG); + $this->lines=array(); $resql=$this->db->query($sql); if ($resql) { $num = $this->db->num_rows($resql); if ($num) { - $this->lines=array(); while ($obj = $this->db->fetch_object($resql)) { $line = new Dolresource($this->db); @@ -829,6 +829,8 @@ class Dolresource extends CommonObject $sql .= ' ORDER BY resource_type'; dol_syslog(get_class($this)."::getElementResources", LOG_DEBUG); + + $resources = array(); $resql = $this->db->query($sql); if ($resql) { @@ -879,7 +881,7 @@ class Dolresource extends CommonObject { global $langs; - if (count($this->cache_code_type_resource)) return 0; // Cache deja charge + if (!empty($this->cache_code_type_resource) && count($this->cache_code_type_resource)) return 0; // Cache deja charge $sql = "SELECT rowid, code, label, active"; $sql.= " FROM ".MAIN_DB_PREFIX."c_type_resource"; diff --git a/htdocs/resource/class/html.formresource.class.php b/htdocs/resource/class/html.formresource.class.php index 19bed957f74..06d253493c0 100644 --- a/htdocs/resource/class/html.formresource.class.php +++ b/htdocs/resource/class/html.formresource.class.php @@ -85,8 +85,6 @@ class FormResource $out = ''; $out.= ''; } - //$out.= ''; - //$out.= ''; if ($resourcestat) { From d47913ed197fdaa20e5f229c4bed82d6fba8d0a0 Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Fri, 31 May 2019 16:33:32 +0200 Subject: [PATCH 090/828] Fix : add refclient on bulk invoicing --- htdocs/core/actions_massactions.inc.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php index 381adbff567..9ca7fa03cca 100644 --- a/htdocs/core/actions_massactions.inc.php +++ b/htdocs/core/actions_massactions.inc.php @@ -565,6 +565,7 @@ if ($massaction == 'confirm_createbills') $objecttmp->cond_reglement_id = $cmd->cond_reglement_id; $objecttmp->mode_reglement_id = $cmd->mode_reglement_id; $objecttmp->fk_project = $cmd->fk_project; + if (empty($createbills_onebythird)) $objecttmp->ref_client = $cmd->ref_client; $datefacture = dol_mktime(12, 0, 0, $_POST['remonth'], $_POST['reday'], $_POST['reyear']); if (empty($datefacture)) From d2c853c47bb0a3bb685bc089a033acddafb19da9 Mon Sep 17 00:00:00 2001 From: AXeL-dev Date: Sat, 1 Jun 2019 15:00:15 +0000 Subject: [PATCH 091/828] Fix #11256 --- htdocs/core/class/html.form.class.php | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index f0b116a06fe..054a8ef2b1d 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -1914,6 +1914,16 @@ class Form $selected_input_value=$producttmpselect->ref; unset($producttmpselect); } + // handle case where product or service module is disabled + no filter specified + if (empty($filtertype)) + { + if (empty($conf->product->enabled)) { // when product module is disabled, show services only + $filtertype = 1; + } + elseif (empty($conf->service->enabled)) { // when service module is disabled, show products only + $filtertype = 0; + } + } // mode=1 means customers products $urloption='htmlname='.$htmlname.'&outjson=1&price_level='.$price_level.'&type='.$filtertype.'&mode=1&status='.$status.'&finished='.$finished.'&hidepriceinlabel='.$hidepriceinlabel.'&warehousestatus='.$warehouseStatus; //Price by customer @@ -2165,7 +2175,14 @@ class Form { $sql.= " AND p.tosell = ".$status; } - if (strval($filtertype) != '') $sql.=" AND p.fk_product_type=".$filtertype; + // Filter by product type + if (strval($filtertype) != '') $sql.= " AND p.fk_product_type = ".$filtertype; + elseif (empty($conf->product->enabled)) { // when product module is disabled, show services only + $sql.= " AND p.fk_product_type = 1"; + } + elseif (empty($conf->service->enabled)) { // when service module is disabled, show products only + $sql.= " AND p.fk_product_type = 0"; + } // Add criteria on ref/label if ($filterkey != '') { From 82b37a514cc350bc7d0b6e92d2eef34b37db4b09 Mon Sep 17 00:00:00 2001 From: AXeL-dev Date: Sat, 1 Jun 2019 16:27:06 +0000 Subject: [PATCH 092/828] Fixed empty verification (0 might be considered as empty also, so its better to compare string value with '') --- htdocs/core/class/html.form.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 054a8ef2b1d..63246fb0287 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -1915,7 +1915,7 @@ class Form unset($producttmpselect); } // handle case where product or service module is disabled + no filter specified - if (empty($filtertype)) + if ($filtertype == '') { if (empty($conf->product->enabled)) { // when product module is disabled, show services only $filtertype = 1; From 916d3ce9311a1fb8f130cc65be706cfec474d710 Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Sun, 2 Jun 2019 11:00:58 +0200 Subject: [PATCH 093/828] Fix : only invoice active lines of a contract --- htdocs/compta/facture/card.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index 10a8296c144..9f96e9ee7f7 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -1378,8 +1378,9 @@ if (empty($reshook)) { // Don't add lines with qty 0 when coming from a shipment including all order lines if($srcobject->element == 'shipping' && $conf->global->SHIPMENT_GETS_ALL_ORDER_PRODUCTS && $lines[$i]->qty == 0) continue; - // Don't add closed lines when coming from a contract - if($srcobject->element == 'contrat' && $lines[$i]->statut == 5) continue; + // Don't add inactive or closed lines when coming from a contract + if (! isset( $conf->global->CONTRACT_EXCLUDE_SERVICES_STATUS_FOR_INVOICE)) $conf->global->CONTRACT_EXCLUDE_SERVICES_STATUS_FOR_INVOICE = '0,5'; + if($srcobject->element == 'contrat' && in_array($lines[$i]->statut, explode(',', $conf->global->CONTRACT_EXCLUDE_SERVICES_STATUS_FOR_INVOICE))) continue; $label=(! empty($lines[$i]->label)?$lines[$i]->label:''); $desc=(! empty($lines[$i]->desc)?$lines[$i]->desc:$lines[$i]->libelle); From 3e9fbf0148c6c324e89c3ca962bb2481d82d4f10 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 2 Jun 2019 12:14:07 +0200 Subject: [PATCH 094/828] Update index.php --- htdocs/categories/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/categories/index.php b/htdocs/categories/index.php index d6a314791c8..06b70616792 100644 --- a/htdocs/categories/index.php +++ b/htdocs/categories/index.php @@ -66,7 +66,7 @@ $arrayofcss=array('/includes/jquery/plugins/jquerytreeview/jquery.treeview.css') llxHeader('',$title,'','',0,0,$arrayofjs,$arrayofcss); $newcardbutton=''; -if($user->rights->categorie->creer) { +if (! empty($user->rights->categorie->creer)) { $newcardbutton = ''.$langs->trans("NewCategory").''; $newcardbutton.= ''; $newcardbutton.= ''; From cb927847ab288500bc626d4e08464dc081dc482b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 2 Jun 2019 12:16:12 +0200 Subject: [PATCH 095/828] Update dolresource.class.php --- htdocs/resource/class/dolresource.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/resource/class/dolresource.class.php b/htdocs/resource/class/dolresource.class.php index 9a595a5b650..43e697a101a 100644 --- a/htdocs/resource/class/dolresource.class.php +++ b/htdocs/resource/class/dolresource.class.php @@ -881,7 +881,7 @@ class Dolresource extends CommonObject { global $langs; - if (!empty($this->cache_code_type_resource) && count($this->cache_code_type_resource)) return 0; // Cache deja charge + if (is_array($this->cache_code_type_resource) && count($this->cache_code_type_resource)) return 0; // Cache deja charge $sql = "SELECT rowid, code, label, active"; $sql.= " FROM ".MAIN_DB_PREFIX."c_type_resource"; From 7020e1ef29bb95a347ebc4d15af6a2450bf71771 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 2 Jun 2019 12:27:32 +0200 Subject: [PATCH 096/828] Update card.php --- htdocs/compta/facture/card.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index 9f96e9ee7f7..04cb48f4c09 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -1378,8 +1378,8 @@ if (empty($reshook)) { // Don't add lines with qty 0 when coming from a shipment including all order lines if($srcobject->element == 'shipping' && $conf->global->SHIPMENT_GETS_ALL_ORDER_PRODUCTS && $lines[$i]->qty == 0) continue; - // Don't add inactive or closed lines when coming from a contract - if (! isset( $conf->global->CONTRACT_EXCLUDE_SERVICES_STATUS_FOR_INVOICE)) $conf->global->CONTRACT_EXCLUDE_SERVICES_STATUS_FOR_INVOICE = '0,5'; + // Don't add closed lines when coming from a contract (Set constant to '0,5' to exclude also inactive lines) + if (! isset( $conf->global->CONTRACT_EXCLUDE_SERVICES_STATUS_FOR_INVOICE)) $conf->global->CONTRACT_EXCLUDE_SERVICES_STATUS_FOR_INVOICE = '5'; if($srcobject->element == 'contrat' && in_array($lines[$i]->statut, explode(',', $conf->global->CONTRACT_EXCLUDE_SERVICES_STATUS_FOR_INVOICE))) continue; $label=(! empty($lines[$i]->label)?$lines[$i]->label:''); From 4bbef9b4787f2238f9bd0844c9803df59379aebf Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 2 Jun 2019 12:29:05 +0200 Subject: [PATCH 097/828] Update card.php --- htdocs/compta/facture/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index 04cb48f4c09..df6aa92ff54 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -1380,7 +1380,7 @@ if (empty($reshook)) if($srcobject->element == 'shipping' && $conf->global->SHIPMENT_GETS_ALL_ORDER_PRODUCTS && $lines[$i]->qty == 0) continue; // Don't add closed lines when coming from a contract (Set constant to '0,5' to exclude also inactive lines) if (! isset( $conf->global->CONTRACT_EXCLUDE_SERVICES_STATUS_FOR_INVOICE)) $conf->global->CONTRACT_EXCLUDE_SERVICES_STATUS_FOR_INVOICE = '5'; - if($srcobject->element == 'contrat' && in_array($lines[$i]->statut, explode(',', $conf->global->CONTRACT_EXCLUDE_SERVICES_STATUS_FOR_INVOICE))) continue; + if ($srcobject->element == 'contrat' && in_array($lines[$i]->statut, explode(',', $conf->global->CONTRACT_EXCLUDE_SERVICES_STATUS_FOR_INVOICE))) continue; $label=(! empty($lines[$i]->label)?$lines[$i]->label:''); $desc=(! empty($lines[$i]->desc)?$lines[$i]->desc:$lines[$i]->libelle); From 3cda0d2dc58e158ea8deb03720ef67fc9e0240f6 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 2 Jun 2019 15:49:10 +0200 Subject: [PATCH 098/828] Fix phpcs --- htdocs/install/repair.php | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/htdocs/install/repair.php b/htdocs/install/repair.php index c52e840d11e..d55cdd7d01f 100644 --- a/htdocs/install/repair.php +++ b/htdocs/install/repair.php @@ -388,7 +388,7 @@ if ($ok && GETPOST('standard', 'alpha')) if (GETPOST('standard', 'alpha') == 'confirmed') { $db->query($sqldelete); - + print 'Constant '.$obj->name.' set in entity '.$obj->entity.' with value '.$obj->value.' -> Module not enabled in entity '.$obj->entity.', we delete record'; } else @@ -409,14 +409,8 @@ if ($ok && GETPOST('standard', 'alpha')) $db->commit(); } } - - - } -/* From here, actions need a parameter */ - - // restore_thirdparties_logos: Move logos to correct new directory. if ($ok && GETPOST('restore_thirdparties_logos')) From 094719e0990be574ecb54aa9d94f2d74b04f0a6c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 2 Jun 2019 15:53:16 +0200 Subject: [PATCH 099/828] Fix prefix --- htdocs/website/class/website.class.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/htdocs/website/class/website.class.php b/htdocs/website/class/website.class.php index 48319b02cab..f05dd0723b4 100644 --- a/htdocs/website/class/website.class.php +++ b/htdocs/website/class/website.class.php @@ -844,8 +844,10 @@ class Website extends CommonObject } foreach($listofpages as $pageid => $objectpageold) { - $line = 'INSERT INTO '.MAIN_DB_PREFIX.'website_page(rowid, fk_page, fk_website, pageurl, title, description, keyword, status, date_creation, tms, lang, import_key, grabbed_from, content)'; - $line.= " VALUES("; + // Warning: We must keep llx_ here. It is a generic SQL. + $line = 'INSERT INTO llx_website_page(rowid, fk_page, fk_website, pageurl, title, description, keyword, status, date_creation, tms, lang, import_key, grabbed_from, content)'; + + $line.= " VALUES("; $line.= $objectpageold->newid."+__MAXROWID__, "; $line.= ($objectpageold->newfk_page ? $this->db->escape($objectpageold->newfk_page)."+__MAXROWID__" : "null").", "; $line.= "__WEBSITE_ID__, "; From 1415ad5b53f86122b56badd788bf424a809d7758 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 2 Jun 2019 17:27:00 +0200 Subject: [PATCH 100/828] Debug website module --- htdocs/langs/en_US/website.lang | 5 +- htdocs/theme/eldy/global.inc.php | 2 +- htdocs/theme/md/style.css.php | 2 +- htdocs/website/class/website.class.php | 21 +++++--- htdocs/website/index.php | 69 ++++++++++++++++++++------ 5 files changed, 76 insertions(+), 23 deletions(-) diff --git a/htdocs/langs/en_US/website.lang b/htdocs/langs/en_US/website.lang index 4655bf3493a..43f82e9f1fb 100644 --- a/htdocs/langs/en_US/website.lang +++ b/htdocs/langs/en_US/website.lang @@ -97,4 +97,7 @@ ThisPageHasTranslationPages=This page/container has translation NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). -NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. \ No newline at end of file +NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. +ReplaceWebsiteContent=Replace website content +DeleteAlsoJs=Delete also all javascript files specific to this website? +DeleteAlsoMedias=Delete also all medias files specific to this website? \ No newline at end of file diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 010d2bd8eed..70496d8689a 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -313,7 +313,7 @@ hr { border: 0; border-top: 1px solid #ccc; } -webkit-box-shadow: 0px 0px 1px 1px rgba(0, 0, 0, 0.2), 0px 0px 0px rgba(60,60,60,0.1); box-shadow: 0px 0px 1px 1px rgba(0, 0, 0, 0.2), 0px 0px 0px rgba(60,60,60,0.1); } -.button:disabled, .buttonDelete:disabled { +.button:disabled, .buttonDelete:disabled, .button.disabled { opacity: 0.4; box-shadow: none; -webkit-box-shadow: none; diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 2dfdf4e28a1..98618800e39 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -540,7 +540,7 @@ hr { border: 0; border-top: 1px solid #ccc; } -webkit-box-shadow: 0px 0px 6px 1px rgba(0, 0, 0, 0.2), 0px 0px 0px rgba(60,60,60,0.1); box-shadow: 0px 0px 6px 1px rgba(0, 0, 0, 0.2), 0px 0px 0px rgba(60,60,60,0.1); } -.button:disabled, .buttonDelete:disabled { +.button:disabled, .buttonDelete:disabled, .button.disabled { opacity: 0.4; box-shadow: none; -webkit-box-shadow: none; diff --git a/htdocs/website/class/website.class.php b/htdocs/website/class/website.class.php index a12bb2ebf11..5405f723a0c 100644 --- a/htdocs/website/class/website.class.php +++ b/htdocs/website/class/website.class.php @@ -489,8 +489,7 @@ class Website extends CommonObject if (! $error && ! empty($this->ref)) { - global $dolibarr_main_data_root; - $pathofwebsite=$dolibarr_main_data_root.'/website/'.$this->ref; + $pathofwebsite=DOL_DATA_ROOT.'/website/'.$this->ref; dol_delete_dir_recursive($pathofwebsite); } @@ -519,7 +518,7 @@ class Website extends CommonObject */ public function createFromClone($user, $fromid, $newref, $newlang = '') { - global $conf, $hookmanager; + global $conf; global $dolibarr_main_data_root; $now = dol_now(); @@ -542,8 +541,9 @@ class Website extends CommonObject $object->fetch($fromid); $oldidforhome=$object->fk_default_home; + $oldref=$object->ref; - $pathofwebsiteold=$dolibarr_main_data_root.'/website/'.$object->ref; + $pathofwebsiteold=$dolibarr_main_data_root.'/website/'.$oldref; $pathofwebsitenew=$dolibarr_main_data_root.'/website/'.$newref; dol_delete_dir_recursive($pathofwebsitenew); @@ -575,8 +575,8 @@ class Website extends CommonObject dolCopyDir($pathofwebsiteold, $pathofwebsitenew, $conf->global->MAIN_UMASK, 0); // Check symlink to medias and restore it if ko - $pathtomedias=DOL_DATA_ROOT.'/medias'; - $pathtomediasinwebsite=$pathofwebsitenew.'/medias'; + $pathtomedias=DOL_DATA_ROOT.'/medias'; // Target + $pathtomediasinwebsite=$pathofwebsitenew.'/medias'; // Source / Link name if (! is_link(dol_osencode($pathtomediasinwebsite))) { dol_syslog("Create symlink for ".$pathtomedias." into name ".$pathtomediasinwebsite); @@ -584,6 +584,15 @@ class Website extends CommonObject $result = symlink($pathtomedias, $pathtomediasinwebsite); } + // Copy images and js dir + $pathofmediasjsold=DOL_DATA_ROOT.'/medias/js/'.$oldref; + $pathofmediasjsnew=DOL_DATA_ROOT.'/medias/js/'.$newref; + dolCopyDir($pathofmediasjsold, $pathofmediasjsnew, $conf->global->MAIN_UMASK, 0); + + $pathofmediasimageold=DOL_DATA_ROOT.'/medias/image/'.$oldref; + $pathofmediasimagenew=DOL_DATA_ROOT.'/medias/image/'.$newref; + dolCopyDir($pathofmediasimageold, $pathofmediasimagenew, $conf->global->MAIN_UMASK, 0); + $newidforhome=0; // Duplicate pages diff --git a/htdocs/website/index.php b/htdocs/website/index.php index 379e5d2e05c..76d063393f8 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -799,13 +799,13 @@ if ($action == 'addcontainer') } // Delete site -if ($action == 'deletesite') +if ($action == 'confirm_deletesite' && $confirm == 'yes') { $error = 0; $db->begin(); - $res = $object->fetch(0, $websitekey); + $res = $object->fetch(GETPOST('id', 'int')); $website = $object; if ($res > 0) @@ -817,13 +817,28 @@ if ($action == 'deletesite') setEventMessages($object->error, $object->errors, 'errors'); } } + if (! $error) + { + if (GETPOST('delete_also_js', 'alpha') == 'on') + { + $pathofwebsitejs=DOL_DATA_ROOT.'/medias/js/'.$object->ref; + + dol_delete_dir_recursive($pathofwebsitejs); + } + if (GETPOST('delete_also_medias', 'alpha') == 'on') + { + $pathofwebsitemedias=DOL_DATA_ROOT.'/medias/image/'.$object->ref; + + dol_delete_dir_recursive($pathofwebsitemedias); + } + } if (! $error) { $db->commit(); - setEventMessages($langs->trans("SiteDeleted", $object->ref, $websitekey), null, 'mesgs'); + setEventMessages($langs->trans("SiteDeleted", $object->ref), null, 'mesgs'); - header("Location: ".$_SERVER["PHP_SELF"]); + header("Location: ".$_SERVER["PHP_SELF"].'?id='.$object->id); exit; } else @@ -1815,7 +1830,7 @@ if (! GETPOST('hide_websitemenu')) if (! is_array($array) && $array < 0) dol_print_error('', $objectpage->error, $objectpage->errors); $atleastonepage=(is_array($array) && count($array) > 0); - if ($websitekey && $websitekey != '-1' && ($action == 'preview' || $action == 'createfromclone' || $action == 'createpagefromclone')) + if ($websitekey && $websitekey != '-1' && ($action == 'preview' || $action == 'createfromclone' || $action == 'createpagefromclone' || $action == 'deletesite')) { $disabled=''; if (empty($user->rights->website->write)) $disabled=' disabled="disabled"'; @@ -1862,7 +1877,7 @@ if (! GETPOST('hide_websitemenu')) */ //print ''.dol_escape_htmltag($langs->trans("Replace")).'" name="replacesite">'; - print 'ref.'" class="button nobordertransp"'.$disabled.' title="'.dol_escape_htmltag($langs->trans("ReplaceWebSiteContent")).'">'; + print 'ref.'" class="button nobordertransp"'.$disabled.' title="'.dol_escape_htmltag($langs->trans("ReplaceWebsiteContent")).'">'; } print '
'; @@ -1872,7 +1887,7 @@ if (! GETPOST('hide_websitemenu')) print '
'; - if ($action == 'preview' || $action == 'createfromclone' || $action == 'createpagefromclone') + if ($action == 'preview' || $action == 'createfromclone' || $action == 'createpagefromclone' || $action == 'deletesite') { $urlext=$virtualurl; $urlint=$urlwithroot.'/public/website/index.php?website='.$websitekey; @@ -2038,11 +2053,26 @@ if (! GETPOST('hide_websitemenu')) $websitepage->fetch($pageid); } - if ($action == 'preview' || $action == 'createfromclone' || $action == 'createpagefromclone') + if ($action == 'preview' || $action == 'createfromclone' || $action == 'createpagefromclone' || $action == 'deletesite') { $disabled=''; if (empty($user->rights->website->write)) $disabled=' disabled="disabled"'; + // Confirmation delete site + if ($action == 'deletesite') { + // Create an array for form + $formquestion = array( + array('type' => 'checkbox', 'name' => 'delete_also_js', 'label' => $langs->trans("DeleteAlsoJs"), 'value' => 0), + array('type' => 'checkbox', 'name' => 'delete_also_medias', 'label' => $langs->trans("DeleteAlsoMedias"), 'value' => 0), + //array('type' => 'other','name' => 'newlang','label' => $langs->trans("Language"), 'value' => $formadmin->select_language(GETPOST('newlang', 'az09')?GETPOST('newlang', 'az09'):$langs->defaultlang, 'newlang', 0, null, '', 0, 0, 'minwidth200')), + //array('type' => 'other','name' => 'newwebsite','label' => $langs->trans("WebSite"), 'value' => $formwebsite->selectWebsite($object->id, 'newwebsite', 0)) + ); + + $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id='.$object->id, $langs->trans('DeleteWebsite'), '', 'confirm_deletesite', $formquestion, 0, 1, 200); + + print $formconfirm; + } + // Confirmation to clone if ($action == 'createfromclone') { // Create an array for form @@ -2058,7 +2088,7 @@ if (! GETPOST('hide_websitemenu')) print $formconfirm; } - if ($pageid > 0 && $atleastonepage) // pageid can be set without pages, if homepage of site is set and all page were removed + if ($pageid > 0 && $atleastonepage) // pageid can be set without pages, if homepage of site is set and all pages were removed { // Confirmation to clone if ($action == 'createpagefromclone') { @@ -2125,8 +2155,19 @@ if (! GETPOST('hide_websitemenu')) print '
'; print ''; - if ($object->fk_default_home > 0 && $pageid == $object->fk_default_home) print ''; - else print ''; + // @TODO Move this action into a combo list + if ($object->fk_default_home > 0 && $pageid == $object->fk_default_home) + { + //$disabled=' disabled="disabled"'; + //print ''; + print ''; + } + else + { + //$disabled=''; + //print 'ref.'" class="button nobordertransp"'.$disabled.' title="'.dol_escape_htmltag($langs->trans("SetAsHomePage")).'">'; + print ''; + } print ''; print ''; } @@ -2136,7 +2177,7 @@ if (! GETPOST('hide_websitemenu')) print '
'; - if (($pageid > 0 && $atleastonepage) && ($action == 'preview' || $action == 'createfromclone' || $action == 'createpagefromclone')) + if (($pageid > 0 && $atleastonepage) && ($action == 'preview' || $action == 'createfromclone' || $action == 'createpagefromclone' || $action == 'deletesite')) { $realpage=$urlwithroot.'/public/website/index.php?website='.$websitekey.'&pageref='.$websitepage->pageurl; $pagealias = $websitepage->pageurl; @@ -2167,7 +2208,7 @@ if (! GETPOST('hide_websitemenu')) // TODO Add js to save alias like we save virtual host name and use dynamic virtual host for url of id=previewpageext } - if (! in_array($action, array('editcss','editmenu','file_manager','replacesite','createsite','createcontainer','createpagefromclone'))) + if (! in_array($action, array('editcss','editmenu','file_manager','replacesite','createsite','createcontainer','createfromclone','createpagefromclone','deletesite'))) { if (preg_match('/^create/', $action)) print ''; if (preg_match('/^edit/', $action)) print ''; @@ -2842,7 +2883,7 @@ if ($action == 'replacesite') print ''."\n"; print '

'; - print load_fiche_titre($langs->trans("ReplaceWebSiteContent")); + print load_fiche_titre($langs->trans("ReplaceWebsiteContent")); print '
'.$langs->trans("FeatureNotYetAvailable").''; From e6100310af05fea1bf23cdb4933e773fe59fe7ae Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 2 Jun 2019 19:47:01 +0200 Subject: [PATCH 101/828] Fix missing title --- htdocs/core/lib/functions.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 91840a50b53..ef3341b025a 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -3627,7 +3627,7 @@ function img_mime($file, $titlealt = '', $morecss = '') if (empty($titlealt)) $titlealt = 'Mime type: '.$mimetype; //return img_picto_common($titlealt, 'mime/'.$mimeimg, 'class="'.$morecss.'"'); - return ''; + return ''; } From 5530e003ba6a2a88284c2a334a953b2d7de36ae6 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 2 Jun 2019 19:47:19 +0200 Subject: [PATCH 102/828] Fix title --- htdocs/core/lib/functions.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index ef3341b025a..19b39fd776d 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -3627,7 +3627,7 @@ function img_mime($file, $titlealt = '', $morecss = '') if (empty($titlealt)) $titlealt = 'Mime type: '.$mimetype; //return img_picto_common($titlealt, 'mime/'.$mimeimg, 'class="'.$morecss.'"'); - return ''; + return ''; } From 43ada3fcd44b35bdbf8771ec409146848bd158b7 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Mon, 3 Jun 2019 09:36:00 +0200 Subject: [PATCH 103/828] FIX better method to check if pdf is protected/encrypted --- htdocs/core/lib/pdf.lib.php | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/htdocs/core/lib/pdf.lib.php b/htdocs/core/lib/pdf.lib.php index 14c0435b4ad..1932fca31a2 100644 --- a/htdocs/core/lib/pdf.lib.php +++ b/htdocs/core/lib/pdf.lib.php @@ -175,18 +175,29 @@ function pdf_getInstance($format = '', $metric = 'mm', $pagetype = 'P') /** * Return if pdf file is protected/encrypted * - * @param TCPDF $pdf PDF initialized object * @param string $pathoffile Path of file * @return boolean True or false */ -function pdf_getEncryption(&$pdf, $pathoffile) +function pdf_getEncryption($pathoffile) { + require_once TCPDF_PATH.'tcpdf_parser.php'; + $isencrypted = false; - $pdfparser = $pdf->_getPdfParser($pathoffile); - $data = $pdfparser->getParsedData(); - if (isset($data[0]['trailer'][1]['/Encrypt'])) { - $isencrypted = true; + $content = file_get_contents($pathoffile); + + ob_start(); + @($parser = new \TCPDF_PARSER(ltrim($content))); + list($xref, $data) = $parser->getParsedData(); + unset($parser); + ob_end_clean(); + + if (isset($xref['trailer']['encrypt'])) { + $isencrypted = true; // Secured pdf file are currently not supported + } + + if (empty($data)) { + $isencrypted = true; // Object list not found. Possible secured file } return $isencrypted; From 398d2b864f47c268065470f35d10ccd0df82fde1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 3 Jun 2019 11:25:31 +0200 Subject: [PATCH 104/828] Update doc --- ChangeLog | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index 54244427b81..b641ec2029e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -113,15 +113,16 @@ NEW: Widget birthdays of the month. NEW: Option in workflow module to set a reception billed on validate supplier bill. NEW: Autocompletion on lists should be available on mobile applications. NEW: Add mass action to close several members. +NEW: Add hidden option ADD_UNSPLASH_LOGIN_BACKGROUND for random background For Developers: NEW: Module "DebugBar" is available as a stable module. NEW: Add API REST for donations NEW: Add a script 'purge-data.php' to purge data older than a defined creation date NEW: Add constant XFRAMEOPTIONS_ALLOWALL -NEW: Add function isValidVATID() -NEW: ADD document's product support in APIs -NEW: REST API: get the list of objects in a category. +NEW: Add function isValidVATID() to heck syntax of a VAT ID/number. +NEW: Add document's product support in APIs +NEW: Add REST API: get the list of objects in a category. NEW: Update Stripe library to 6.35 NEW: Upgrade jquery lib to 3.3.1 NEW: Add hook 'addHtmlHeader()' @@ -135,22 +136,21 @@ NEW: Add the current modulepart into the Conf class object NEW: Add trigger FICHINTER_UNVALIDATE NEW: Add visibility with value 4 in framework to define fields to show NEW: More option to tune initialization of a new module with modulebuilder. -NEW: API to list currencies -NEW: API Proposal, Orders, Invoices: Add contact details -NEW: hidden option to change concat desc order +NEW: Add REST API to list currencies +NEW: REST API Proposal, Orders, Invoices: Add contact details +NEW: hidden option to change concat order of description/product label. NEW: Enhance management of webhooks NEW: Generation of doc by modulebuilder can include README and CHANGELOG -NEW: massfilesarea feature for external modules -NEW: Show enabled modules in dol_print_error() +NEW: massfilesarea feature is possible for external modules +NEW: Show list of enabled modules in dol_print_error(). NEW: Simplification of CSS styles of default themes. NEW: Clean code of a lot of deprecated code. NEW: Add hidden option to set a search entry to the top NEW: add hidden option DISPLAY_DISCOUNTED_SUPPLIER_PRICE NEW: add hidden option MAIN_DEFAULT_LANGUAGE_FILTER NEW: add hidden option NO_CONCAT_DESCRIPTION -NEW: Add hidden option for ACCOUNTANCY_COMBO_FOR_AUX -NEW: Add hidden option 'ADD_UNSPLASH_LOGIN_BACKGROUND' -NEW: Add Hidden option 'OVERRIDE_VAT_FOR_EXPENSE_REPORT' +NEW: Add hidden option ACCOUNTANCY_COMBO_FOR_AUX +NEW: Add Hidden option OVERRIDE_VAT_FOR_EXPENSE_REPORT NEW: add hidden option MAIN_DOC_UPLOAD_NOT_RENAME_BY_DEFAULT NEW: Hidden conf to improve pdf desc item visibitity NEW: Look and feel v10 - Add CSS 'tabBarNoTop' @@ -179,6 +179,8 @@ Following changes may create regressions for some external modules, but were nec * Variable $dolibarr_main_cookie_cryptkey is no more created at install (it was not used by Dolibarr). A new variable called $dolibarr_main_instance_unique_id is now generated at each installation. It will be used by some future features. + + ***** ChangeLog for 9.0.3 compared to 9.0.2 ***** FIX: #11013 FIX: #11041 From 281c69f59a5a4dfb9153dc1965dac45a0a47322d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 3 Jun 2019 11:33:04 +0200 Subject: [PATCH 105/828] Prepare package 10.0 --- build/rpm/dolibarr_fedora.spec | 4 ++++ build/rpm/dolibarr_generic.spec | 4 ++++ build/rpm/dolibarr_mandriva.spec | 4 ++++ build/rpm/dolibarr_opensuse.spec | 4 ++++ 4 files changed, 16 insertions(+) diff --git a/build/rpm/dolibarr_fedora.spec b/build/rpm/dolibarr_fedora.spec index b6d526bf8e1..9f360c3ef19 100755 --- a/build/rpm/dolibarr_fedora.spec +++ b/build/rpm/dolibarr_fedora.spec @@ -165,6 +165,7 @@ done >>%{name}.lang %_datadir/dolibarr/htdocs/barcode %_datadir/dolibarr/htdocs/blockedlog %_datadir/dolibarr/htdocs/bookmarks +%_datadir/dolibarr/htdocs/bom %_datadir/dolibarr/htdocs/cashdesk %_datadir/dolibarr/htdocs/categories %_datadir/dolibarr/htdocs/collab @@ -179,6 +180,7 @@ done >>%{name}.lang %_datadir/dolibarr/htdocs/custom %_datadir/dolibarr/htdocs/datapolicy %_datadir/dolibarr/htdocs/dav +%_datadir/dolibarr/htdocs/debugbar %_datadir/dolibarr/htdocs/don %_datadir/dolibarr/htdocs/ecm %_datadir/dolibarr/htdocs/emailcollector @@ -200,6 +202,7 @@ done >>%{name}.lang %_datadir/dolibarr/htdocs/mailmanspip %_datadir/dolibarr/htdocs/margin %_datadir/dolibarr/htdocs/modulebuilder +%_datadir/dolibarr/htdocs/mrp %_datadir/dolibarr/htdocs/multicurrency %_datadir/dolibarr/htdocs/opensurvey %_datadir/dolibarr/htdocs/paybox @@ -208,6 +211,7 @@ done >>%{name}.lang %_datadir/dolibarr/htdocs/product %_datadir/dolibarr/htdocs/projet %_datadir/dolibarr/htdocs/public +%_datadir/dolibarr/htdocs/reception %_datadir/dolibarr/htdocs/resource %_datadir/dolibarr/htdocs/societe %_datadir/dolibarr/htdocs/stripe diff --git a/build/rpm/dolibarr_generic.spec b/build/rpm/dolibarr_generic.spec index 32c6e50018e..9c51feba990 100755 --- a/build/rpm/dolibarr_generic.spec +++ b/build/rpm/dolibarr_generic.spec @@ -245,6 +245,7 @@ done >>%{name}.lang %_datadir/dolibarr/htdocs/barcode %_datadir/dolibarr/htdocs/blockedlog %_datadir/dolibarr/htdocs/bookmarks +%_datadir/dolibarr/htdocs/bom %_datadir/dolibarr/htdocs/cashdesk %_datadir/dolibarr/htdocs/categories %_datadir/dolibarr/htdocs/collab @@ -259,6 +260,7 @@ done >>%{name}.lang %_datadir/dolibarr/htdocs/custom %_datadir/dolibarr/htdocs/datapolicy %_datadir/dolibarr/htdocs/dav +%_datadir/dolibarr/htdocs/debugbar %_datadir/dolibarr/htdocs/don %_datadir/dolibarr/htdocs/ecm %_datadir/dolibarr/htdocs/emailcollector @@ -280,6 +282,7 @@ done >>%{name}.lang %_datadir/dolibarr/htdocs/mailmanspip %_datadir/dolibarr/htdocs/margin %_datadir/dolibarr/htdocs/modulebuilder +%_datadir/dolibarr/htdocs/mrp %_datadir/dolibarr/htdocs/multicurrency %_datadir/dolibarr/htdocs/opensurvey %_datadir/dolibarr/htdocs/paybox @@ -288,6 +291,7 @@ done >>%{name}.lang %_datadir/dolibarr/htdocs/product %_datadir/dolibarr/htdocs/projet %_datadir/dolibarr/htdocs/public +%_datadir/dolibarr/htdocs/reception %_datadir/dolibarr/htdocs/resource %_datadir/dolibarr/htdocs/societe %_datadir/dolibarr/htdocs/stripe diff --git a/build/rpm/dolibarr_mandriva.spec b/build/rpm/dolibarr_mandriva.spec index dbb8e0d1310..9f87638e8ba 100755 --- a/build/rpm/dolibarr_mandriva.spec +++ b/build/rpm/dolibarr_mandriva.spec @@ -162,6 +162,7 @@ done >>%{name}.lang %_datadir/dolibarr/htdocs/barcode %_datadir/dolibarr/htdocs/blockedlog %_datadir/dolibarr/htdocs/bookmarks +%_datadir/dolibarr/htdocs/bom %_datadir/dolibarr/htdocs/cashdesk %_datadir/dolibarr/htdocs/categories %_datadir/dolibarr/htdocs/collab @@ -176,6 +177,7 @@ done >>%{name}.lang %_datadir/dolibarr/htdocs/custom %_datadir/dolibarr/htdocs/datapolicy %_datadir/dolibarr/htdocs/dav +%_datadir/dolibarr/htdocs/debugbar %_datadir/dolibarr/htdocs/don %_datadir/dolibarr/htdocs/ecm %_datadir/dolibarr/htdocs/emailcollector @@ -197,6 +199,7 @@ done >>%{name}.lang %_datadir/dolibarr/htdocs/mailmanspip %_datadir/dolibarr/htdocs/margin %_datadir/dolibarr/htdocs/modulebuilder +%_datadir/dolibarr/htdocs/mrp %_datadir/dolibarr/htdocs/multicurrency %_datadir/dolibarr/htdocs/opensurvey %_datadir/dolibarr/htdocs/paybox @@ -205,6 +208,7 @@ done >>%{name}.lang %_datadir/dolibarr/htdocs/product %_datadir/dolibarr/htdocs/projet %_datadir/dolibarr/htdocs/public +%_datadir/dolibarr/htdocs/reception %_datadir/dolibarr/htdocs/resource %_datadir/dolibarr/htdocs/societe %_datadir/dolibarr/htdocs/stripe diff --git a/build/rpm/dolibarr_opensuse.spec b/build/rpm/dolibarr_opensuse.spec index aa810a737b9..f55ca13906d 100755 --- a/build/rpm/dolibarr_opensuse.spec +++ b/build/rpm/dolibarr_opensuse.spec @@ -173,6 +173,7 @@ done >>%{name}.lang %_datadir/dolibarr/htdocs/barcode %_datadir/dolibarr/htdocs/blockedlog %_datadir/dolibarr/htdocs/bookmarks +%_datadir/dolibarr/htdocs/bom %_datadir/dolibarr/htdocs/cashdesk %_datadir/dolibarr/htdocs/categories %_datadir/dolibarr/htdocs/collab @@ -187,6 +188,7 @@ done >>%{name}.lang %_datadir/dolibarr/htdocs/custom %_datadir/dolibarr/htdocs/datapolicy %_datadir/dolibarr/htdocs/dav +%_datadir/dolibarr/htdocs/debugbar %_datadir/dolibarr/htdocs/don %_datadir/dolibarr/htdocs/ecm %_datadir/dolibarr/htdocs/emailcollector @@ -208,6 +210,7 @@ done >>%{name}.lang %_datadir/dolibarr/htdocs/mailmanspip %_datadir/dolibarr/htdocs/margin %_datadir/dolibarr/htdocs/modulebuilder +%_datadir/dolibarr/htdocs/mrp %_datadir/dolibarr/htdocs/multicurrency %_datadir/dolibarr/htdocs/opensurvey %_datadir/dolibarr/htdocs/paybox @@ -216,6 +219,7 @@ done >>%{name}.lang %_datadir/dolibarr/htdocs/product %_datadir/dolibarr/htdocs/projet %_datadir/dolibarr/htdocs/public +%_datadir/dolibarr/htdocs/reception %_datadir/dolibarr/htdocs/resource %_datadir/dolibarr/htdocs/societe %_datadir/dolibarr/htdocs/stripe From 5c2b585705916034e806c26f73c627689bf84b8f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 3 Jun 2019 11:50:20 +0200 Subject: [PATCH 106/828] Fix packager --- build/makepack-dolibarr.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/makepack-dolibarr.pl b/build/makepack-dolibarr.pl index b2aa49927e2..ba68a76f073 100755 --- a/build/makepack-dolibarr.pl +++ b/build/makepack-dolibarr.pl @@ -997,7 +997,7 @@ if ($nboftargetok) { $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/dev/translation/autotranslator.class.php`; $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/htdocs/modulebuilder/template/class/actions_mymodule.class.php`; $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/htdocs/modulebuilder/template/class/api_mymodule.class.php`; - $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/htdocs/modulebuilder/template/class/myobject.class.php`; + $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/htdocs/modulebuilder/template/class/mymodule.class.php`; $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/htdocs/modulebuilder/template/core/modules/modMyModule.class.php`; $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/htdocs/modulebuilder/template/mymoduleindex.php`; $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/htdocs/modulebuilder/template/myobject_card.php`; From 5144992eeab91dab4799529a8025a1a5927eea85 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 3 Jun 2019 11:51:15 +0200 Subject: [PATCH 107/828] Fix packager --- build/makepack-dolibarr.pl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build/makepack-dolibarr.pl b/build/makepack-dolibarr.pl index ba68a76f073..b787d439243 100755 --- a/build/makepack-dolibarr.pl +++ b/build/makepack-dolibarr.pl @@ -997,12 +997,12 @@ if ($nboftargetok) { $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/dev/translation/autotranslator.class.php`; $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/htdocs/modulebuilder/template/class/actions_mymodule.class.php`; $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/htdocs/modulebuilder/template/class/api_mymodule.class.php`; - $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/htdocs/modulebuilder/template/class/mymodule.class.php`; + $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/htdocs/modulebuilder/template/class/myobject.class.php`; $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/htdocs/modulebuilder/template/core/modules/modMyModule.class.php`; $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/htdocs/modulebuilder/template/mymoduleindex.php`; $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/htdocs/modulebuilder/template/myobject_card.php`; $ret=`chmod -R 644 $BUILDROOT/$PROJECT.tmp/htdocs/modulebuilder/template/myobject_list.php`; - $ret=`chmod -R 755 $BUILDROOT/$PROJECT.tmp/htdocs/modulebuilder/template/scripts/myobject.php`; + $ret=`chmod -R 755 $BUILDROOT/$PROJECT.tmp/htdocs/modulebuilder/template/scripts/mymodule.php`; $cmd="find $BUILDROOT/$PROJECT.tmp/scripts -name '*.php' -type f -exec chmod 755 {} \\; "; $ret=`$cmd`; $cmd="find $BUILDROOT/$PROJECT.tmp/scripts -name '*.sh' -type f -exec chmod 755 {} \\; "; From 17cb6fa11ff83d666a58e4edace855c3301e710f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 3 Jun 2019 15:22:00 +0200 Subject: [PATCH 108/828] Fix copyright --- COPYRIGHT | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/COPYRIGHT b/COPYRIGHT index b70640175fc..4ce5efff40b 100644 --- a/COPYRIGHT +++ b/COPYRIGHT @@ -13,7 +13,6 @@ Component Version License GPL Compatible ------------------------------------------------------------------------------------- PHP libraries: AdoDb-Date 0.36 Modified BSD License Yes Date convertion (not into rpm package) -ChromePHP 4.1.0 Apache Software License 2.0 Yes Return server log to chrome browser console CKEditor 4.11.4 LGPL-2.1+ Yes Editor WYSIWYG PHPDebugBar 1.15.0 MIT License Yes Used only by the module "debugbar" for developers EvalMath 1.0 BSD Yes Safe math expressions evaluation @@ -30,12 +29,13 @@ php-iban 1.4.7 LGPL-3+ Yes PHPoAuthLib 0.8.2 MIT License Yes Library to provide oauth1 and oauth2 to different service PHPPrintIPP 1.3 GPL-2+ Yes Library to send print IPP requests PSR/Logs 1.0 Library for logs (used by DebugBar) -PSR/simple-cache Library for cache (used by PHPSpreadSheet) +PSR/simple-cache ? Library for cache (used by PHPSpreadSheet) Restler 3.0.0RC6 LGPL-3+ Yes Library to develop REST Web services (+ swagger-ui js lib into dir explorer) +Sabre 3.2.2 BSD Yes DAV support +Swift Mailer 5.4.2-DEV MIT license Yes Comprehensive mailing tools for PHP +Stripe 6.35 MIT licence Yes Library for Stripe module TCPDF 6.2.25 LGPL-3+ Yes PDF generation TCPDI 1.0.0 LGPL-3+ / Apache 2.0 Yes FPDI replacement -Swift Mailer 5.4.2-DEV MIT license Yes Comprehensive mailing tools for PHP -Stripe 6.34.5 MIT licence Yes Library for Stripe module JS libraries: jQuery 3.3.1 MIT License Yes JS library From 439eafb6377780f9347aa4fabd185949621c73a6 Mon Sep 17 00:00:00 2001 From: Lionel VESSILLER Date: Mon, 3 Jun 2019 15:44:17 +0200 Subject: [PATCH 109/828] NEW add extrafields in warehouses - create table - admin extrafields - object fecth, insert, update and delete extrafields - card and list --- htdocs/admin/stock.php | 5 + htdocs/core/lib/stock.lib.php | 34 +++++ .../install/mysql/migration/10.0.0-11.0.0.sql | 15 +++ .../tables/llx_entrepot_extrafields.key.sql | 20 +++ .../mysql/tables/llx_entrepot_extrafields.sql | 26 ++++ htdocs/install/pgsql/functions/functions.sql | 1 + htdocs/product/admin/stock_extrafields.php | 116 +++++++++++++++++ htdocs/product/stock/card.php | 118 +++++++++++++----- htdocs/product/stock/class/entrepot.class.php | 66 ++++++++-- htdocs/product/stock/list.php | 73 +++++++++-- 10 files changed, 424 insertions(+), 50 deletions(-) create mode 100644 htdocs/install/mysql/migration/10.0.0-11.0.0.sql create mode 100644 htdocs/install/mysql/tables/llx_entrepot_extrafields.key.sql create mode 100644 htdocs/install/mysql/tables/llx_entrepot_extrafields.sql create mode 100644 htdocs/product/admin/stock_extrafields.php diff --git a/htdocs/admin/stock.php b/htdocs/admin/stock.php index 2e934211970..7c22d1a4a58 100644 --- a/htdocs/admin/stock.php +++ b/htdocs/admin/stock.php @@ -27,6 +27,7 @@ */ require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/stock.lib.php'; // Load translation files required by the page $langs->loadLangs(array("admin", "stocks")); @@ -77,6 +78,10 @@ llxHeader('', $langs->trans("StockSetup")); $linkback=''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans("StockSetup"), $linkback, 'title_setup'); +$head = stock_admin_prepare_head(); + +dol_fiche_head($head, 'general', $langs->trans("StockSetup"), -1, 'stock'); + $form=new Form($db); diff --git a/htdocs/core/lib/stock.lib.php b/htdocs/core/lib/stock.lib.php index 7b3ef796432..fc7701877bc 100644 --- a/htdocs/core/lib/stock.lib.php +++ b/htdocs/core/lib/stock.lib.php @@ -78,3 +78,37 @@ function stock_prepare_head($object) return $head; } + +/** + * Return array head with list of tabs to view object informations. + * + * @return array head array with tabs + */ +function stock_admin_prepare_head() +{ + global $langs, $conf, $user; + + $h = 0; + $head = array(); + + $head[$h][0] = DOL_URL_ROOT.'/admin/stock.php'; + $head[$h][1] = $langs->trans("Miscellaneous"); + $head[$h][2] = 'general'; + $h++; + + // Show more tabs from modules + // Entries must be declared in modules descriptor with line + // $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab + // $this->tabs = array('entity:-tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to remove a tab + complete_head_from_modules($conf, $langs, null, $head, $h, 'stock_admin'); + + $head[$h][0] = DOL_URL_ROOT.'/product/admin/stock_extrafields.php'; + $head[$h][1] = $langs->trans("ExtraFields"); + $head[$h][2] = 'attributes'; + $h++; + + complete_head_from_modules($conf, $langs, null, $head, $h, 'stock_admin', 'remove'); + + return $head; +} + diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql new file mode 100644 index 00000000000..9f758b6bc40 --- /dev/null +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -0,0 +1,15 @@ +-- +-- Be carefull to requests order. +-- This file must be loaded by calling /install/index.php page +-- when current version is 11.0.0 or higher. + + +create table llx_entrepot_extrafields +( + rowid integer AUTO_INCREMENT PRIMARY KEY, + tms timestamp, + fk_object integer NOT NULL, + import_key varchar(14) -- import key +) ENGINE=innodb; + +ALTER TABLE llx_entrepot_extrafields ADD INDEX idx_entrepot_extrafields (fk_object); \ No newline at end of file diff --git a/htdocs/install/mysql/tables/llx_entrepot_extrafields.key.sql b/htdocs/install/mysql/tables/llx_entrepot_extrafields.key.sql new file mode 100644 index 00000000000..72973186918 --- /dev/null +++ b/htdocs/install/mysql/tables/llx_entrepot_extrafields.key.sql @@ -0,0 +1,20 @@ +-- =================================================================== +-- Copyright (C) 2011 Laurent Destailleur +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- +-- =================================================================== + + +ALTER TABLE llx_entrepot_extrafields ADD INDEX idx_entrepot_extrafields (fk_object); diff --git a/htdocs/install/mysql/tables/llx_entrepot_extrafields.sql b/htdocs/install/mysql/tables/llx_entrepot_extrafields.sql new file mode 100644 index 00000000000..c7a209eba8b --- /dev/null +++ b/htdocs/install/mysql/tables/llx_entrepot_extrafields.sql @@ -0,0 +1,26 @@ +-- ======================================================================== +-- Copyright (C) 2011 Laurent Destailleur +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- +-- ======================================================================== + +create table llx_entrepot_extrafields +( + rowid integer AUTO_INCREMENT PRIMARY KEY, + tms timestamp, + fk_object integer NOT NULL, + import_key varchar(14) -- import key +) ENGINE=innodb; + diff --git a/htdocs/install/pgsql/functions/functions.sql b/htdocs/install/pgsql/functions/functions.sql index 66b1fbaf370..fc4e4116c84 100644 --- a/htdocs/install/pgsql/functions/functions.sql +++ b/htdocs/install/pgsql/functions/functions.sql @@ -106,6 +106,7 @@ CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_emailcollector_email CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_emailcollector_emailcollectoraction FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_emailcollector_emailcollectorfilter FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_entrepot FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); +CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_entrepot_extrafields FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_events FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_expedition FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_expensereport FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); diff --git a/htdocs/product/admin/stock_extrafields.php b/htdocs/product/admin/stock_extrafields.php new file mode 100644 index 00000000000..8b2a016415e --- /dev/null +++ b/htdocs/product/admin/stock_extrafields.php @@ -0,0 +1,116 @@ + + * Copyright (C) 2003 Jean-Louis Bergamo + * Copyright (C) 2004-2011 Laurent Destailleur + * Copyright (C) 2012 Regis Houssin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file htdocs/product/admin/stock_extrafields.php + * \ingroup stock + * \brief Page to setup extra fields of third party + */ + +require '../../main.inc.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/stock.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; + +// Load translation files required by the page +$langs->loadLangs(array('companies', 'admin', 'stock')); + +$extrafields = new ExtraFields($db); +$form = new Form($db); + +// List of supported format +$tmptype2label=ExtraFields::$type2label; +$type2label=array(''); +foreach ($tmptype2label as $key => $val) $type2label[$key]=$langs->transnoentitiesnoconv($val); + +$action=GETPOST('action', 'alpha'); +$attrname=GETPOST('attrname', 'alpha'); +$elementtype='entrepot'; //Must be the $table_element of the class that manage extrafield + +if (!$user->admin) accessforbidden(); + + +/* + * Actions + */ + +require DOL_DOCUMENT_ROOT.'/core/actions_extrafields.inc.php'; + + + +/* + * View + */ + +$textobject=$langs->transnoentitiesnoconv("Warehouses"); + +llxHeader('', $langs->trans("StockSetup")); + +$linkback=''.$langs->trans("BackToModuleList").''; +print load_fiche_titre($langs->trans("StockSetup"), $linkback, 'title_setup'); + + +$head = stock_admin_prepare_head(); + +dol_fiche_head($head, 'attributes', $langs->trans("Warehouses"), -1, 'stock'); + +require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_view.tpl.php'; + +dol_fiche_end(); + + +// Buttons +if ($action != 'create' && $action != 'edit') +{ + print '
'; + print ''; + print "
"; +} + + +/* ************************************************************************** */ +/* */ +/* Creation of an optional field */ +/* */ +/* ************************************************************************** */ + +if ($action == 'create') +{ + print "
"; + print load_fiche_titre($langs->trans('NewAttribute')); + + require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php'; +} + +/* ************************************************************************** */ +/* */ +/* Edition of an optional field */ +/* */ +/* ************************************************************************** */ +if ($action == 'edit' && ! empty($attrname)) +{ + print "
"; + print load_fiche_titre($langs->trans("FieldEdition", $attrname)); + + require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php'; +} + +// End of page +llxFooter(); +$db->close(); diff --git a/htdocs/product/stock/card.php b/htdocs/product/stock/card.php index ae2150e8464..89d7258e3cc 100644 --- a/htdocs/product/stock/card.php +++ b/htdocs/product/stock/card.php @@ -33,6 +33,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/stock.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/product.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'; require_once DOL_DOCUMENT_ROOT.'/product/class/html.formproduct.class.php'; +require_once DOL_DOCUMENT_ROOT . '/core/class/extrafields.class.php'; // Load translation files required by the page $langs->loadLangs(array('products', 'stocks', 'companies', 'categories')); @@ -55,16 +56,32 @@ $backtopage=GETPOST('backtopage', 'alpha'); //$result=restrictedArea($user,'stock', $id, 'entrepot&stock'); $result=restrictedArea($user, 'stock'); +$object = new Entrepot($db); +$extrafields = new ExtraFields($db); + +// fetch optionals attributes and labels +$extralabels = $extrafields->fetch_name_optionals_label('entrepot'); + +// Load object +if ($id > 0 || ! empty($ref)) { + $ret = $object->fetch($id, $ref); +// if ($ret > 0) +// $ret = $object->fetch_thirdparty(); + if ($ret <= 0) { + setEventMessages($object->error, $object->errors, 'errors'); + $action = ''; + } +} + // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context $hookmanager->initHooks(array('warehousecard','globalcard')); -$object = new Entrepot($db); - - /* * Actions */ +$error = 0; + $usercanread = (($user->rights->stock->lire)); $usercancreate = (($user->rights->stock->creer)); $usercandelete = (($user->rights->stock->supprimer)); @@ -85,27 +102,30 @@ if ($action == 'add' && $user->rights->stock->creer) if (! empty($object->libelle)) { - $id = $object->create($user); - if ($id > 0) - { - setEventMessages($langs->trans("RecordSaved"), null, 'mesgs'); + // Fill array 'array_options' with data from add form + $ret = $extrafields->setOptionalsFromPost($extralabels, $object); + if ($ret < 0) { + $error++; + $action = 'create'; + } - if (! empty($backtopage)) - { - header("Location: ".$backtopage); - exit; - } - else - { - header("Location: card.php?id=".$id); - exit; - } - } - else - { - $action = 'create'; - setEventMessages($object->error, $object->errors, 'errors'); - } + if (! $error) { + $id = $object->create($user); + if ($id > 0) { + setEventMessages($langs->trans("RecordSaved"), null, 'mesgs'); + + if (!empty($backtopage)) { + header("Location: " . $backtopage); + exit; + } else { + header("Location: card.php?id=" . $id); + exit; + } + } else { + $action = 'create'; + setEventMessages($object->error, $object->errors, 'errors'); + } + } } else { @@ -147,15 +167,21 @@ if ($action == 'update' && $cancel <> $langs->trans("Cancel")) $object->town = GETPOST("town"); $object->country_id = GETPOST("country_id"); - if ( $object->update($id, $user) > 0) - { - $action = ''; - } - else - { + // Fill array 'array_options' with data from add form + $ret = $extrafields->setOptionalsFromPost($extralabels, $object); + if ($ret < 0) $error++; + + if (! $error) { + $ret = $object->update($id, $user); + if ($ret < 0) $error++; + } + + if ($error) { $action = 'edit'; setEventMessages($object->error, $object->errors, 'errors'); - } + } else { + $action = ''; + } } else { @@ -163,6 +189,22 @@ if ($action == 'update' && $cancel <> $langs->trans("Cancel")) setEventMessages($object->error, $object->errors, 'errors'); } } +elseif ($action == 'update_extras') { + $object->oldcopy = dol_clone($object); + + // Fill array 'array_options' with data from update form + $extralabels = $extrafields->fetch_name_optionals_label($object->table_element); + $ret = $extrafields->setOptionalsFromPost($extralabels, $object, GETPOST('attribute', 'none')); + if ($ret < 0) $error++; + if (! $error) { + $result = $object->insertExtraFields(); + if ($result < 0) { + setEventMessages($object->error, $object->errors, 'errors'); + $error++; + } + } + if ($error) $action = 'edit_extras'; +} if ($cancel == $langs->trans("Cancel")) { @@ -257,6 +299,9 @@ if ($action == 'create') print ''; print ''; + // Other attributes + include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_add.tpl.php'; + print ''; dol_fiche_end(); @@ -392,6 +437,9 @@ else } print ""; + // Other attributes + include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_view.tpl.php'; + print ""; print '
'; @@ -638,6 +686,7 @@ else if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1); print ''; + // Status print ''.$langs->trans("Status").''; print ''; print ''; + // Other attributes + $parameters=array('colspan' => ' colspan="3"', 'cols'=>3); + $reshook=$hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + if (empty($reshook)) + { + print $object->showOptionals($extrafields, 'edit'); + } + print ''; dol_fiche_end(); diff --git a/htdocs/product/stock/class/entrepot.class.php b/htdocs/product/stock/class/entrepot.class.php index 0032d17f97e..4593037da10 100644 --- a/htdocs/product/stock/class/entrepot.class.php +++ b/htdocs/product/stock/class/entrepot.class.php @@ -163,6 +163,19 @@ class Entrepot extends CommonObject } } + // Actions on extra fields + if (! $error) + { + if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used + { + $result=$this->insertExtraFields(); + if ($result < 0) + { + $error++; + } + } + } + if (! $error) { $this->db->commit(); @@ -199,6 +212,10 @@ class Entrepot extends CommonObject */ public function update($id, $user) { + global $conf; + + $error=0; + if (empty($id)) $id = $this->id; // Check if new parent is already a child of current warehouse @@ -239,13 +256,24 @@ class Entrepot extends CommonObject dol_syslog(get_class($this)."::update", LOG_DEBUG); $resql=$this->db->query($sql); - if ($resql) - { + + if (! $resql) { + $error++; + $this->errors[]="Error ".$this->db->lasterror(); + } + + if (! $error && empty($conf->global->MAIN_EXTRAFIELDS_DISABLED) && is_array($this->array_options) && count($this->array_options)>0) { + $result=$this->insertExtraFields(); + if ($result < 0) + { + $error++; + } + } + + if (!$error) { $this->db->commit(); return 1; - } - else - { + } else { $this->db->rollback(); $this->error=$this->db->lasterror(); return -1; @@ -262,6 +290,10 @@ class Entrepot extends CommonObject */ public function delete($user, $notrigger = 0) { + global $conf; + + $error = 0; + $this->db->begin(); if (! $error && empty($notrigger)) @@ -293,17 +325,30 @@ class Entrepot extends CommonObject { $sql = "DELETE FROM ".MAIN_DB_PREFIX."entrepot"; $sql.= " WHERE rowid = " . $this->id; - dol_syslog(get_class($this)."::delete", LOG_DEBUG); $resql1=$this->db->query($sql); + if (!$resql1) $error++; // Update denormalized fields because we change content of produt_stock. Warning: Do not use "SET p.stock", does not works with pgsql $sql = "UPDATE ".MAIN_DB_PREFIX."product as p SET stock = (SELECT SUM(ps.reel) FROM ".MAIN_DB_PREFIX."product_stock as ps WHERE ps.fk_product = p.rowid)"; - dol_syslog(get_class($this)."::delete", LOG_DEBUG); $resql2=$this->db->query($sql); + if (!$resql2) $error++; - if ($resql1 && $resql2) + // Removed extrafields + if (! $error) { + if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used + { + $result=$this->deleteExtraFields(); + if ($result < 0) { + $error++; + $errorflag=-4; + dol_syslog(get_class($this)."::delete erreur ".$errorflag." ".$this->error, LOG_ERR); + } + } + } + + if (!$error) { $this->db->commit(); return 1; @@ -377,6 +422,10 @@ class Entrepot extends CommonObject $this->town = $obj->town; $this->country_id = $obj->country_id; + // Retreive all extrafield + // fetch optionals attributes and labels + $this->fetch_optionals(); + include_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; $tmp=getCountry($this->country_id, 'all'); $this->country=$tmp['label']; @@ -386,6 +435,7 @@ class Entrepot extends CommonObject } else { + $this->error="Record Not Found"; return 0; } } diff --git a/htdocs/product/stock/list.php b/htdocs/product/stock/list.php index b9876bdf36a..8178df6b03c 100644 --- a/htdocs/product/stock/list.php +++ b/htdocs/product/stock/list.php @@ -49,6 +49,16 @@ $offset = $limit * $page; $year = strftime("%Y", time()); +// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context +$object = new Entrepot($db); +$hookmanager->initHooks(array('stocklist')); +$extrafields = new ExtraFields($db); + +// fetch optionals attributes and labels +$extralabels = $extrafields->fetch_name_optionals_label('entrepot'); +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element, '', 'search_'); + + // List of fields to search into when doing a "search in all" $fieldstosearchall = array( 'e.ref'=>"Ref", @@ -60,6 +70,16 @@ $fieldstosearchall = array( ); +// Extra fields +if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) +{ + foreach($extrafields->attribute_label as $key => $val) + { + if (! empty($extrafields->attribute_list[$key])) $arrayfields["ef.".$key]=array('label'=>$extrafields->attribute_label[$key], 'checked'=>(($extrafields->attribute_list[$key]<0)?0:1), 'position'=>$extrafields->attribute_pos[$key], 'enabled'=>(abs($extrafields->attribute_list[$key])!=3 && $extrafields->attribute_perms[$key])); + } +} + + /* * Actions */ @@ -85,14 +105,19 @@ $warehouse=new Entrepot($db); $sql = "SELECT e.rowid, e.ref, e.statut, e.lieu, e.address, e.zip, e.town, e.fk_pays, e.fk_parent,"; $sql.= " SUM(p.pmp * ps.reel) as estimatedvalue, SUM(p.price * ps.reel) as sellvalue, SUM(ps.reel) as stockqty"; +// Add fields from extrafields +foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ", ef.".$key.' as options_'.$key : ''); $sql.= " FROM ".MAIN_DB_PREFIX."entrepot as e"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_stock as ps ON e.rowid = ps.fk_entrepot"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p ON ps.fk_product = p.rowid"; +if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."entrepot_extrafields as ef on (e.rowid = ef.fk_object)"; $sql.= " WHERE e.entity IN (".getEntity('stock').")"; if ($search_ref) $sql.= natural_search("e.ref", $search_ref); // ref if ($search_label) $sql.= natural_search("e.lieu", $search_label); // label if ($search_status != '' && $search_status >= 0) $sql.= " AND e.statut = ".$search_status; if ($sall) $sql .= natural_search(array_keys($fieldstosearchall), $sall); +// Add where from extra fields +include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php'; $sql.= " GROUP BY e.rowid, e.ref, e.statut, e.lieu, e.address, e.zip, e.town, e.fk_pays, e.fk_parent"; $totalnboflines=0; $result=$db->query($sql); @@ -131,6 +156,9 @@ if ($result) if ($search_status) $param.="&search_status=".urlencode($search_status); if ($sall) $param.="&sall=".urlencode($sall); + // Add $param from extra fields + include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php'; + $newcardbutton=''; if ($user->rights->stock->creer) { @@ -173,6 +201,9 @@ if ($result) print ''; print ''; + // Extra fields + include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; + print ''; print $form->selectarray('search_status', $warehouse->statuts, $search_status, 1, 0, 0, '', 1); print ''; @@ -190,7 +221,9 @@ if ($result) print_liste_field_titre("PhysicalStock", $_SERVER["PHP_SELF"], "stockqty", '', $param, '', $sortfield, $sortorder, 'right '); print_liste_field_titre("EstimatedStockValue", $_SERVER["PHP_SELF"], "estimatedvalue", '', $param, '', $sortfield, $sortorder, 'right '); print_liste_field_titre("EstimatedStockValueSell", $_SERVER["PHP_SELF"], "", '', $param, '', $sortfield, $sortorder, 'right '); - print_liste_field_titre("Status", $_SERVER["PHP_SELF"], "e.statut", '', $param, '', $sortfield, $sortorder, 'right '); + // Extra fields + include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; + print_liste_field_titre("Status", $_SERVER["PHP_SELF"], "e.statut", '', $param, '', $sortfield, $sortorder, 'right '); print_liste_field_titre('', $_SERVER["PHP_SELF"], "", '', $param, '', $sortfield, $sortorder, 'maxwidthsearch '); print "\n"; @@ -198,40 +231,55 @@ if ($result) { $warehouse=new Entrepot($db); $var=false; + $totalarray=array(); while ($i < min($num, $limit)) { - $objp = $db->fetch_object($result); + $obj = $db->fetch_object($result); - $warehouse->id = $objp->rowid; - $warehouse->ref = $objp->ref; - $warehouse->label = $objp->ref; - $warehouse->lieu = $objp->lieu; - $warehouse->fk_parent = $objp->fk_parent; + $warehouse->id = $obj->rowid; + $warehouse->ref = $obj->ref; + $warehouse->label = $obj->ref; + $warehouse->lieu = $obj->lieu; + $warehouse->fk_parent = $obj->fk_parent; print ''; print '' . $warehouse->getNomUrl(1) . ''; + if (! $i) $totalarray['nbfield']++; // Location - print ''.$objp->lieu.''; + print ''.$obj->lieu.''; + if (! $i) $totalarray['nbfield']++; + // Stock qty - print ''.price2num($objp->stockqty, 5).''; + print ''.price2num($obj->stockqty, 5).''; + if (! $i) $totalarray['nbfield']++; + // PMP value print ''; - if (price2num($objp->estimatedvalue, 'MT')) print price(price2num($objp->estimatedvalue, 'MT'), 1); + if (price2num($obj->estimatedvalue, 'MT')) print price(price2num($obj->estimatedvalue, 'MT'), 1); else print ''; print ''; + if (! $i) $totalarray['nbfield']++; + // Selling value print ''; - if (empty($conf->global->PRODUIT_MULTIPRICES)) print price(price2num($objp->sellvalue, 'MT'), 1); + if (empty($conf->global->PRODUIT_MULTIPRICES)) print price(price2num($obj->sellvalue, 'MT'), 1); else { $htmltext=$langs->trans("OptionMULTIPRICESIsOn"); print $form->textwithtooltip($langs->trans("Variable"), $htmltext); } print ''; + if (! $i) $totalarray['nbfield']++; + + // Extra fields + include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; + // Status - print ''.$warehouse->LibStatut($objp->statut, 5).''; + print ''.$warehouse->LibStatut($obj->statut, 5).''; + if (! $i) $totalarray['nbfield']++; print ''; + if (! $i) $totalarray['nbfield']++; print "\n"; @@ -255,6 +303,7 @@ if ($result) print ''; print ''; print ''; + print ''; print "\n"; } } From 9a974814fac002004afd5d9b8a90a501b6947653 Mon Sep 17 00:00:00 2001 From: Lionel VESSILLER Date: Mon, 3 Jun 2019 15:53:21 +0200 Subject: [PATCH 110/828] NEW add extrafields in warehouses - fix load lang stocks --- htdocs/product/admin/stock_extrafields.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/product/admin/stock_extrafields.php b/htdocs/product/admin/stock_extrafields.php index 8b2a016415e..5dc2aa63357 100644 --- a/htdocs/product/admin/stock_extrafields.php +++ b/htdocs/product/admin/stock_extrafields.php @@ -29,7 +29,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/stock.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; // Load translation files required by the page -$langs->loadLangs(array('companies', 'admin', 'stock')); +$langs->loadLangs(array('companies', 'admin', 'stocks')); $extrafields = new ExtraFields($db); $form = new Form($db); From 213936aac188788f07827b6fa4deb2d6812b71d7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 3 Jun 2019 16:20:04 +0200 Subject: [PATCH 111/828] Fix combo --- htdocs/core/class/html.formcompany.class.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/core/class/html.formcompany.class.php b/htdocs/core/class/html.formcompany.class.php index d42bfcbeb5a..d2fb93000a9 100644 --- a/htdocs/core/class/html.formcompany.class.php +++ b/htdocs/core/class/html.formcompany.class.php @@ -716,12 +716,13 @@ class FormCompany } } print "\n"; + print ajax_combobox($htmlname); return $firstCompany; } else { dol_print_error($this->db); - print 'Error sql'; + return 0; } } } From 8ef209bc0447be6f8b97ee0c9b25afd87ddf4147 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 3 Jun 2019 16:30:49 +0200 Subject: [PATCH 112/828] Fix responsive --- htdocs/core/boxes/box_contracts.php | 2 +- htdocs/core/boxes/box_factures.php | 4 ++-- htdocs/core/boxes/box_factures_fourn.php | 4 ++-- htdocs/core/boxes/box_services_contracts.php | 6 +++--- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/htdocs/core/boxes/box_contracts.php b/htdocs/core/boxes/box_contracts.php index 57adf1c06cb..6447b63b120 100644 --- a/htdocs/core/boxes/box_contracts.php +++ b/htdocs/core/boxes/box_contracts.php @@ -151,7 +151,7 @@ class box_contracts extends ModeleBoxes ); $this->info_box_contents[$line][] = array( - 'td' => 'class="nowrap right"', + 'td' => 'class="nowraponall right"', 'text' => $contractstatic->getLibStatut(7), 'asis'=>1, ); diff --git a/htdocs/core/boxes/box_factures.php b/htdocs/core/boxes/box_factures.php index 42c21f0708b..3465182ff02 100644 --- a/htdocs/core/boxes/box_factures.php +++ b/htdocs/core/boxes/box_factures.php @@ -149,7 +149,7 @@ class box_factures extends ModeleBoxes } $this->info_box_contents[$line][] = array( - 'td' => '', + 'td' => 'class="nowraponall"', 'text' => $facturestatic->getNomUrl(1), 'text2'=> $late, 'asis' => 1, @@ -162,7 +162,7 @@ class box_factures extends ModeleBoxes ); $this->info_box_contents[$line][] = array( - 'td' => 'class="right"', + 'td' => 'class="right nowraponall"', 'text' => price($objp->total_ht, 0, $langs, 0, -1, -1, $conf->currency), ); diff --git a/htdocs/core/boxes/box_factures_fourn.php b/htdocs/core/boxes/box_factures_fourn.php index 3dc8011fd7f..1c349bc8756 100644 --- a/htdocs/core/boxes/box_factures_fourn.php +++ b/htdocs/core/boxes/box_factures_fourn.php @@ -144,7 +144,7 @@ class box_factures_fourn extends ModeleBoxes } $this->info_box_contents[$line][] = array( - 'td' => '', + 'td' => 'class="nowraponall"', 'text' => $facturestatic->getNomUrl(1), 'text2'=> $late, 'asis' => 1, @@ -164,7 +164,7 @@ class box_factures_fourn extends ModeleBoxes ); $this->info_box_contents[$line][] = array( - 'td' => 'class="right"', + 'td' => 'class="right nowraponall"', 'text' => price($objp->total_ht, 0, $langs, 0, -1, -1, $conf->currency), ); diff --git a/htdocs/core/boxes/box_services_contracts.php b/htdocs/core/boxes/box_services_contracts.php index 68959b15056..b1330192a11 100644 --- a/htdocs/core/boxes/box_services_contracts.php +++ b/htdocs/core/boxes/box_services_contracts.php @@ -191,19 +191,19 @@ class box_services_contracts extends ModeleBoxes $this->info_box_contents[$i][] = array( - 'td' => 'class="tdoverflowmax100 maxwidth100onsmartphone"', + 'td' => 'class="tdoverflowmax150 maxwidth150onsmartphone"', 'text' => $s, 'asis' => 1 ); $this->info_box_contents[$i][] = array( - 'td' => '', + 'td' => 'class="nowraponall"', 'text' => $contractstatic->getNomUrl(1), 'asis' => 1 ); $this->info_box_contents[$i][] = array( - 'td' => 'class="tdoverflowmax100 maxwidth100onsmartphone"', + 'td' => 'class="tdoverflowmax150 maxwidth150onsmartphone"', 'text' => $thirdpartytmp->getNomUrl(1), 'asis' => 1 ); From 490e85f4941b1eb71013a6b06c432a5b7cb1762b Mon Sep 17 00:00:00 2001 From: Lionel VESSILLER Date: Mon, 3 Jun 2019 16:34:49 +0200 Subject: [PATCH 113/828] Fix PSR2 --- htdocs/core/lib/stock.lib.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/core/lib/stock.lib.php b/htdocs/core/lib/stock.lib.php index fc7701877bc..50a7611af82 100644 --- a/htdocs/core/lib/stock.lib.php +++ b/htdocs/core/lib/stock.lib.php @@ -111,4 +111,3 @@ function stock_admin_prepare_head() return $head; } - From 65b702d85479489a9b59d72dbd4cd5f34e3ef30a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 3 Jun 2019 16:37:31 +0200 Subject: [PATCH 114/828] responsive --- htdocs/core/boxes/box_factures_fourn.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/boxes/box_factures_fourn.php b/htdocs/core/boxes/box_factures_fourn.php index 1c349bc8756..fd55478932c 100644 --- a/htdocs/core/boxes/box_factures_fourn.php +++ b/htdocs/core/boxes/box_factures_fourn.php @@ -151,14 +151,14 @@ class box_factures_fourn extends ModeleBoxes ); $this->info_box_contents[$line][] = array( - 'td' => 'class="tdoverflowmax50"', + 'td' => 'class="tdoverflowmax150"', 'text' => $objp->ref_supplier, 'tooltip' => $langs->trans('SupplierInvoice').': '.($objp->ref?$objp->ref:$objp->facid).'
'.$langs->trans('RefSupplier').': '.$objp->ref_supplier, 'url' => DOL_URL_ROOT."/fourn/facture/card.php?facid=".$objp->facid, ); $this->info_box_contents[$line][] = array( - 'td' => 'class="tdoverflowmax50"', + 'td' => 'class="tdoverflowmax150"', 'text' => $thirdpartytmp->getNomUrl(1, 'supplier'), 'asis' => 1, ); From 6c6c353177632e39cf0ffc6db1823ecfabfc80e7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 3 Jun 2019 16:47:43 +0200 Subject: [PATCH 115/828] Prepare 10.0 --- htdocs/filefunc.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/filefunc.inc.php b/htdocs/filefunc.inc.php index 22cc1036f52..6f1a773b7c1 100644 --- a/htdocs/filefunc.inc.php +++ b/htdocs/filefunc.inc.php @@ -31,7 +31,7 @@ */ if (! defined('DOL_APPLICATION_TITLE')) define('DOL_APPLICATION_TITLE', 'Dolibarr'); -if (! defined('DOL_VERSION')) define('DOL_VERSION', '10.0.0-beta'); // a.b.c-alpha, a.b.c-beta, a.b.c-rcX or a.b.c +if (! defined('DOL_VERSION')) define('DOL_VERSION', '10.0.0'); // a.b.c-alpha, a.b.c-beta, a.b.c-rcX or a.b.c if (! defined('EURO')) define('EURO', chr(128)); From 7fd1051efc87a6171ea096ef6178b3a5700a6eda Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Tue, 16 Apr 2019 10:16:20 +0200 Subject: [PATCH 116/828] FIX missing compatibility with multicompany transverse mode Conflicts: htdocs/core/class/html.formother.class.php --- htdocs/core/class/html.formother.class.php | 46 ++++++++++++++++++---- 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/htdocs/core/class/html.formother.class.php b/htdocs/core/class/html.formother.class.php index 991a92ec445..a35a73546bb 100644 --- a/htdocs/core/class/html.formother.class.php +++ b/htdocs/core/class/html.formother.class.php @@ -372,9 +372,10 @@ class FormOther * @param string $morecss More CSS * @return string Html combo list code */ - function select_salesrepresentatives($selected,$htmlname,$user,$showstatus=0,$showempty=1,$morecss='') + function select_salesrepresentatives($selected, $htmlname, $user, $showstatus=0, $showempty=1, $morecss='') { - global $conf,$langs; + // phpcs:enable + global $conf, $langs; $langs->load('users'); $out = ''; @@ -396,17 +397,48 @@ class FormOther // Get list of users allowed to be viewed $sql_usr = "SELECT u.rowid, u.lastname, u.firstname, u.statut, u.login"; $sql_usr.= " FROM ".MAIN_DB_PREFIX."user as u"; - $sql_usr.= " WHERE u.entity IN (0,".$conf->entity.")"; + + if (! empty($conf->global->MULTICOMPANY_TRANSVERSE_MODE)) + { + if (! empty($user->admin) && empty($user->entity) && $conf->entity == 1) { + $sql_usr.= " WHERE u.entity IS NOT NULL"; // Show all users + } else { + $sql_usr.= ",".MAIN_DB_PREFIX."usergroup_user as ug"; + $sql_usr.= " WHERE ((ug.fk_user = u.rowid"; + $sql_usr.= " AND ug.entity IN (".getEntity('user')."))"; + $sql_usr.= " OR u.entity = 0)"; // Show always superadmin + } + } + else + { + $sql_usr.= " WHERE u.entity IN (".getEntity('user').")"; + } + if (empty($user->rights->user->user->lire)) $sql_usr.=" AND u.rowid = ".$user->id; - if (! empty($user->societe_id)) $sql_usr.=" AND u.fk_soc = ".$user->societe_id; + if (! empty($user->socid)) $sql_usr.=" AND u.fk_soc = ".$user->socid; // Add existing sales representatives of thirdparty of external user - if (empty($user->rights->user->user->lire) && $user->societe_id) + if (empty($user->rights->user->user->lire) && $user->socid) { $sql_usr.=" UNION "; $sql_usr.= "SELECT u2.rowid, u2.lastname, u2.firstname, u2.statut, u2.login"; $sql_usr.= " FROM ".MAIN_DB_PREFIX."user as u2, ".MAIN_DB_PREFIX."societe_commerciaux as sc"; - $sql_usr.= " WHERE u2.entity IN (0,".$conf->entity.")"; - $sql_usr.= " AND u2.rowid = sc.fk_user AND sc.fk_soc=".$user->societe_id; + + if (! empty($conf->global->MULTICOMPANY_TRANSVERSE_MODE)) + { + if (! empty($user->admin) && empty($user->entity) && $conf->entity == 1) { + $sql_usr.= " WHERE u2.entity IS NOT NULL"; // Show all users + } else { + $sql_usr.= ",".MAIN_DB_PREFIX."usergroup_user as ug2"; + $sql_usr.= " WHERE ug2.fk_user = u2.rowid"; + $sql_usr.= " AND ug2.entity IN (".getEntity('user').")"; + } + } + else + { + $sql_usr.= " WHERE u2.entity IN (".getEntity('user').")"; + } + + $sql_usr.= " AND u2.rowid = sc.fk_user AND sc.fk_soc=".$user->socid; } $sql_usr.= " ORDER BY statut DESC, lastname ASC"; // Do not use 'ORDER BY u.statut' here, not compatible with the UNION. //print $sql_usr;exit; From 5726b40a10e66789efda7804d3610d18fad89466 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Fri, 10 May 2019 12:07:15 +0200 Subject: [PATCH 117/828] FIX try to use WHERE EXISTS instead DISTINCT --- htdocs/core/class/html.formother.class.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/htdocs/core/class/html.formother.class.php b/htdocs/core/class/html.formother.class.php index a35a73546bb..b3d41d80ffb 100644 --- a/htdocs/core/class/html.formother.class.php +++ b/htdocs/core/class/html.formother.class.php @@ -395,7 +395,7 @@ class FormOther if ($showempty) $out.=''; // Get list of users allowed to be viewed - $sql_usr = "SELECT u.rowid, u.lastname, u.firstname, u.statut, u.login"; + $sql_usr = "SELECT DISTINCT u.rowid, u.lastname, u.firstname, u.statut, u.login"; $sql_usr.= " FROM ".MAIN_DB_PREFIX."user as u"; if (! empty($conf->global->MULTICOMPANY_TRANSVERSE_MODE)) @@ -428,9 +428,7 @@ class FormOther if (! empty($user->admin) && empty($user->entity) && $conf->entity == 1) { $sql_usr.= " WHERE u2.entity IS NOT NULL"; // Show all users } else { - $sql_usr.= ",".MAIN_DB_PREFIX."usergroup_user as ug2"; - $sql_usr.= " WHERE ug2.fk_user = u2.rowid"; - $sql_usr.= " AND ug2.entity IN (".getEntity('user').")"; + $sql_usr.= " WHERE EXISTS (SELECT ug2.fk_user FROM ".MAIN_DB_PREFIX."usergroup_user as ug2 WHERE u2.rowid = ug2.fk_user AND ug2.entity IN (".getEntity('user').") )"; } } else From 72f55e1d81089c36e18838205edef063e67f2c59 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 3 Jun 2019 18:11:53 +0200 Subject: [PATCH 118/828] Debug modulebuilder --- htdocs/bom/bom_card.php | 5 +- htdocs/bom/class/bom.class.php | 57 ++++++------------- htdocs/core/actions_fetchobject.inc.php | 4 +- htdocs/core/class/commonobject.class.php | 54 +++++++++++++++++- .../template/class/myobject.class.php | 41 ++++++------- .../modulebuilder/template/myobject_card.php | 3 +- 6 files changed, 92 insertions(+), 72 deletions(-) diff --git a/htdocs/bom/bom_card.php b/htdocs/bom/bom_card.php index 0f2dfb5e52b..7baf187756c 100644 --- a/htdocs/bom/bom_card.php +++ b/htdocs/bom/bom_card.php @@ -141,6 +141,7 @@ if (empty($reshook)) if ($result <= 0) { setEventMessages($bomline->error, $bomline->errors, 'errors'); + $action = ''; } } } @@ -386,7 +387,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea if (! empty($object->lines)) { -// $ret = $object->printObjectLines($action, $mysoc, $soc, $lineid, 1); + $object->printObjectLines($action, $mysoc, null, GETPOST('lineid', 'int'), 1); } // Form to add new line @@ -395,7 +396,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea if ($action != 'editline') { // Add products/services form - $object->formAddObjectLine(1, $mysoc, $soc, '/bom/tpl'); + $object->formAddObjectLine(1, $mysoc, null, '/bom/tpl'); $parameters = array(); $reshook = $hookmanager->executeHooks('formAddObjectLine', $parameters, $object, $action); // Note that $action and $object may have been modified by hook diff --git a/htdocs/bom/class/bom.class.php b/htdocs/bom/class/bom.class.php index de67cbc82e8..56f790052e7 100644 --- a/htdocs/bom/class/bom.class.php +++ b/htdocs/bom/class/bom.class.php @@ -94,9 +94,9 @@ class BOM extends CommonObject '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'=>'1',), 'description' => array('type'=>'text', 'label'=>'Description', 'enabled'=>1, 'visible'=>-1, 'position'=>60, 'notnull'=>-1,), - 'fk_product' => array('type'=>'integer:Product:product/class/product.class.php', 'label'=>'Product', 'enabled'=>1, 'visible'=>1, 'position'=>50, 'notnull'=>1, 'index'=>1, 'help'=>'ProductBOMHelp'), + 'fk_product' => array('type'=>'integer:Product:product/class/product.class.php', 'label'=>'Product', 'enabled'=>1, 'visible'=>1, 'position'=>35, 'notnull'=>1, 'index'=>1, 'help'=>'ProductBOMHelp'), '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'=>'ValueOfMeansLoss'), + 'efficiency' => array('type'=>'real', 'label'=>'ManufacturingEfficiency', 'enabled'=>1, 'visible'=>-1, 'default'=>1, 'position'=>100, 'notnull'=>0, 'css'=>'maxwidth50imp', 'help'=>'ValueOfMeansLoss'), 'note_public' => array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>1, 'visible'=>-1, 'position'=>161, 'notnull'=>-1,), 'note_private' => array('type'=>'html', 'label'=>'NotePrivate', 'enabled'=>1, 'visible'=>-1, 'position'=>162, 'notnull'=>-1,), 'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>1, 'visible'=>-2, 'position'=>300, 'notnull'=>1,), @@ -291,27 +291,8 @@ class BOM extends CommonObject { $this->lines=array(); - // Load lines with object BOMLine - $sql = 'SELECT rowid, fk_product, description, qty, rank WHERE fk_bom = '.$this->id; - - $resql=$this->db->query($sql); - if ($resql) - { - $obj = $this->db->fetch_object($resql); - if ($obj) - { - $newline = new BOMLine($this->db); - $newline->id = $obj->rowid; - $newline->fk_product = $obj->fk_product; - $newline->description = $obj->description; - $newline->qty = $obj->qty; - $newline->rank = $obj->rank; - - $this->lines[] = $newline; - } - } - - return count($this->lines)?1:0; + $result = $this->fetchLinesCommon(); + return $result; } /** @@ -333,11 +314,11 @@ class BOM extends CommonObject $records=array(); - $sql = 'SELECT'; - $sql .= ' t.rowid'; - // TODO Get all fields + $sql = 'SELECT '; + $sql .= $this->getFieldList(); $sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element. ' as t'; - $sql .= ' WHERE t.entity = '.$conf->entity; + if ($this->ismultientitymanaged) $sql .= ' WHERE t.entity IN ('.getEntity($this->table_element).')'; + else $sql .= ' WHERE 1 = 1'; // Manage filter $sqlwhere = array(); if (count($filter) > 0) { @@ -374,11 +355,8 @@ class BOM extends CommonObject while ($obj = $this->db->fetch_object($resql)) { $record = new self($this->db); + $record->setVarsFromFetchObj($obj); - $record->id = $obj->rowid; - // TODO Get other fields - - //var_dump($record->id); $records[$record->id] = $record; } $this->db->free($resql); @@ -858,7 +836,7 @@ class BOM extends CommonObject $this->lines=array(); $objectline = new BOMLine($this->db); - $result = $objectline->fetchAll('', '', 0, 0, array('fk_bom'=>$this->id)); + $result = $objectline->fetchAll('', '', 0, 0, array('customsql'=>'fk_bom = '.$this->id)); if (is_numeric($result)) { @@ -869,7 +847,7 @@ class BOM extends CommonObject else { $this->lines = $result; - return $this->lines(); + return $this->lines; } } @@ -1139,11 +1117,11 @@ class BOMLine extends CommonObject $records=array(); - $sql = 'SELECT'; - $sql .= ' t.rowid'; - // TODO Get all fields + $sql = 'SELECT '; + $sql .= $this->getFieldList(); $sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element. ' as t'; - $sql .= ' WHERE t.entity = '.$conf->entity; + if ($this->ismultientitymanaged) $sql .= ' WHERE t.entity IN ('.getEntity($this->table_element).')'; + else $sql .= ' WHERE 1 = 1'; // Manage filter $sqlwhere = array(); if (count($filter) > 0) { @@ -1180,11 +1158,8 @@ class BOMLine extends CommonObject while ($obj = $this->db->fetch_object($resql)) { $record = new self($this->db); + $record->setVarsFromFetchObj($obj); - $record->id = $obj->rowid; - // TODO Get other fields - - //var_dump($record->id); $records[$record->id] = $record; } $this->db->free($resql); diff --git a/htdocs/core/actions_fetchobject.inc.php b/htdocs/core/actions_fetchobject.inc.php index 780895e47a9..dc8ee938bfc 100644 --- a/htdocs/core/actions_fetchobject.inc.php +++ b/htdocs/core/actions_fetchobject.inc.php @@ -32,8 +32,8 @@ if (($id > 0 || (! empty($ref) && ! in_array($action, array('create', 'createtas { if (($id > 0 && is_numeric($id)) || ! empty($ref)) // To discard case when id is list of ids like '1,2,3...' { - $ret = $object->fetch($id, $ref); - if ($ret > 0) + $ret = $object->fetch($id, $ref); + if ($ret > 0) { $object->fetch_thirdparty(); $id = $object->id; diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index a064e611c2f..5a09ea17127 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -4103,7 +4103,7 @@ abstract class CommonObject // Define output language and label if (! empty($conf->global->MAIN_MULTILANGS)) { - if (! is_object($this->thirdparty)) + if (property_exists($this, 'socid') && ! is_object($this->thirdparty)) { dol_print_error('', 'Error: Method printObjectLine was called on an object and object->fetch_thirdparty was not done before'); return; @@ -4115,7 +4115,7 @@ abstract class CommonObject $outputlangs = $langs; $newlang=''; if (empty($newlang) && GETPOST('lang_id', 'aZ09')) $newlang=GETPOST('lang_id', 'aZ09'); - if (! empty($conf->global->PRODUIT_TEXTS_IN_THIRDPARTY_LANGUAGE) && empty($newlang)) $newlang=$this->thirdparty->default_lang; // For language to language of customer + if (! empty($conf->global->PRODUIT_TEXTS_IN_THIRDPARTY_LANGUAGE) && empty($newlang) && is_object($this->thirdparty)) $newlang=$this->thirdparty->default_lang; // To use language of customer if (! empty($newlang)) { $outputlangs = new Translate("", $conf); @@ -7370,6 +7370,56 @@ abstract class CommonObject } } + /** + * Load object in memory from the database + * + * @param string $morewhere More SQL filters (' AND ...') + * @return int <0 if KO, 0 if not found, >0 if OK + */ + public function fetchLinesCommon($morewhere = '') + { + $objectlineclassname = get_class($this).'Line'; + if (! class_exists($objectlineclassname)) + { + $this->error = 'Error, class '.$objectlineclassname.' not found during call of fetchLinesCommon'; + return -1; + } + + $objectline = new $objectlineclassname($this->db); + + $sql = 'SELECT '.$objectline->getFieldList(); + $sql.= ' FROM '.MAIN_DB_PREFIX.$objectline->table_element; + $sql.=' WHERE fk_'.$this->element.' = '.$this->id; + if ($morewhere) $sql.= $morewhere; + + $resql = $this->db->query($sql); + if ($resql) + { + $num_rows = $this->db->num_rows($resql); + $i = 0; + while ($i < $num_rows) + { + $obj = $this->db->fetch_object($resql); + if ($obj) + { + $newline = new $objectlineclassname($this->db); + $newline->setVarsFromFetchObj($obj); + + $this->lines[] = $newline; + } + $i++; + } + + return 1; + } + else + { + $this->error = $this->db->lasterror(); + $this->errors[] = $this->error; + return -1; + } + } + /** * Update object into database * diff --git a/htdocs/modulebuilder/template/class/myobject.class.php b/htdocs/modulebuilder/template/class/myobject.class.php index c36debb9a12..c85ceb3c18b 100644 --- a/htdocs/modulebuilder/template/class/myobject.class.php +++ b/htdocs/modulebuilder/template/class/myobject.class.php @@ -42,6 +42,11 @@ class MyObject extends CommonObject */ public $table_element = 'mymodule_myobject'; + /** + * @var string Name of subtable if this object has sub lines + */ + //public $table_element_line = 'mymodule_myobjectline'; + /** * @var int Does myobject support multicompany module ? 0=No test on entity, 1=Test with field entity, 2=Test with link by societe */ @@ -327,14 +332,14 @@ class MyObject extends CommonObject * * @return int <0 if KO, 0 if not found, >0 if OK */ - /*public function fetchLines() + public function fetchLines() { $this->lines=array(); - // Load lines with object MyObjectLine + $result = $this->fetchLinesCommon(); + return $result; + } - return count($this->lines)?1:0; - }*/ /** * Load list of objects in memory from the database. @@ -355,11 +360,11 @@ class MyObject extends CommonObject $records=array(); - $sql = 'SELECT'; - $sql .= ' t.rowid'; - // TODO Get all fields + $sql = 'SELECT '; + $sql .= $this->getFieldList(); $sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element. ' as t'; - $sql .= ' WHERE t.entity = '.$conf->entity; + if ($this->ismultientitymanaged) $sql .= ' WHERE t.entity IN ('.getEntity($this->table_element).')'; + else $sql .= ' WHERE 1 = 1'; // Manage filter $sqlwhere = array(); if (count($filter) > 0) { @@ -398,11 +403,8 @@ class MyObject extends CommonObject $obj = $this->db->fetch_object($resql); $record = new self($this->db); + $record->setVarsFromFetchObj($obj); - $record->id = $obj->rowid; - // TODO Get other fields - - //var_dump($record->id); $records[$record->id] = $record; $i++; @@ -649,8 +651,8 @@ class MyObject extends CommonObject { $this->lines=array(); - $objectline = new BOMLine($this->db); - $result = $objectline->fetchAll('', '', 0, 0, array('fk_myobject'=>$this->id)); + $objectline = new MyObjectLine($this->db); + $result = $objectline->fetchAll('', '', 0, 0, array('customsql'=>'fk_myobject = '.$this->id)); if (is_numeric($result)) { @@ -661,7 +663,7 @@ class MyObject extends CommonObject else { $this->lines = $result; - return $this->lines(); + return $this->lines; } } @@ -699,14 +701,7 @@ class MyObject extends CommonObject /** * Class MyObjectLine. You can also remove this and generate a CRUD class for lines objects. */ -/* class MyObjectLine { - // @var int ID - public $id; - // @var mixed Sample line property 1 - public $prop1; - // @var mixed Sample line property 2 - public $prop2; + // To complete with content of an object MyObjectLine } -*/ diff --git a/htdocs/modulebuilder/template/myobject_card.php b/htdocs/modulebuilder/template/myobject_card.php index 1fc376dfe17..159dc897fa3 100644 --- a/htdocs/modulebuilder/template/myobject_card.php +++ b/htdocs/modulebuilder/template/myobject_card.php @@ -389,8 +389,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea if (! empty($object->lines)) { - // printObjectLines return void - $object->printObjectLines($action, $mysoc, $soc, $lineid, 1); + $object->printObjectLines($action, $mysoc, null, GETPOST('lineid', 'int'), 1); } // Form to add new line From 7d2cedfdcf3da53d5c7b1bfd8dcd4d25c7503c8f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 3 Jun 2019 19:29:49 +0200 Subject: [PATCH 119/828] Debug bom module --- htdocs/bom/class/bom.class.php | 12 +- htdocs/bom/tpl/objectline_create.tpl.php | 1 - htdocs/bom/tpl/objectline_view.tpl.php | 149 +---------------------- htdocs/core/class/commonobject.class.php | 112 ++++------------- htdocs/core/tpl/objectline_title.tpl.php | 131 ++++++++++++++++++++ htdocs/fichinter/card.php | 4 +- 6 files changed, 170 insertions(+), 239 deletions(-) create mode 100644 htdocs/core/tpl/objectline_title.tpl.php diff --git a/htdocs/bom/class/bom.class.php b/htdocs/bom/class/bom.class.php index 56f790052e7..f4fd4ab93b9 100644 --- a/htdocs/bom/class/bom.class.php +++ b/htdocs/bom/class/bom.class.php @@ -106,7 +106,7 @@ class BOM extends CommonObject 'fk_user_modif' => array('type'=>'integer', 'label'=>'UserModif', 'enabled'=>1, 'visible'=>-2, 'position'=>511, 'notnull'=>-1,), 'fk_user_valid' => array('type'=>'integer', 'label'=>'UserValidation', 'enabled'=>1, 'visible'=>-2, 'position'=>512, 'notnull'=>0,), 'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>1, 'visible'=>-2, 'position'=>900, 'notnull'=>-1,), - 'status' => array('type'=>'integer', 'label'=>'Status', 'enabled'=>1, 'visible'=>1, 'position'=>1000, 'notnull'=>1, 'default'=>0, 'index'=>1, 'arrayofkeyval'=>array(0=>'Draft', 1=>'Enabled', 9=>'Disabled')), + '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')), ); public $rowid; public $ref; @@ -753,23 +753,23 @@ class BOM extends CommonObject } elseif ($mode == 2) { - return img_picto($this->labelstatus[$status], 'statut'.$status, '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status]; + return img_picto($this->labelstatus[$status], 'statut'.($status == self::STATUS_VALIDATED ? 4 : $status), '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status]; } elseif ($mode == 3) { - return img_picto($this->labelstatus[$status], 'statut'.$status, '', false, 0, 0, '', 'valignmiddle'); + return img_picto($this->labelstatus[$status], 'statut'.($status == self::STATUS_VALIDATED ? 4 : $status), '', false, 0, 0, '', 'valignmiddle'); } elseif ($mode == 4) { - return img_picto($this->labelstatus[$status], 'statut'.$status, '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status]; + return img_picto($this->labelstatus[$status], 'statut'.($status == self::STATUS_VALIDATED ? 4 : $status), '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status]; } elseif ($mode == 5) { - return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status], 'statut'.$status, '', false, 0, 0, '', 'valignmiddle'); + return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status], 'statut'.($status == self::STATUS_VALIDATED ? 4 : $status), '', false, 0, 0, '', 'valignmiddle'); } elseif ($mode == 6) { - return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status], 'statut'.$status, '', false, 0, 0, '', 'valignmiddle'); + return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status], 'statut'.($status == self::STATUS_VALIDATED ? 4 : $status), '', false, 0, 0, '', 'valignmiddle'); } } diff --git a/htdocs/bom/tpl/objectline_create.tpl.php b/htdocs/bom/tpl/objectline_create.tpl.php index da9942fce44..0101024df40 100644 --- a/htdocs/bom/tpl/objectline_create.tpl.php +++ b/htdocs/bom/tpl/objectline_create.tpl.php @@ -107,7 +107,6 @@ if ($nolinesbefore) { { if ($forceall >= 0 && $freelines) echo '
'; echo ''; - $filtertype=''; if (! empty($object->element) && $object->element == 'contrat' && empty($conf->global->CONTRACT_SUPPORT_PRODUCTS)) $filtertype='1'; diff --git a/htdocs/bom/tpl/objectline_view.tpl.php b/htdocs/bom/tpl/objectline_view.tpl.php index 46c25e3674c..82c5efbb71b 100644 --- a/htdocs/bom/tpl/objectline_view.tpl.php +++ b/htdocs/bom/tpl/objectline_view.tpl.php @@ -58,6 +58,8 @@ $domData .= ' data-id="'.$line->id.'"'; $domData .= ' data-qty="'.$line->qty.'"'; $domData .= ' data-product_type="'.$line->product_type.'"'; +// Lines for extrafield +$objectline = new BOMLine($this->db); ?> @@ -68,146 +70,18 @@ $domData .= ' data-product_type="'.$line->product_type.'"';
info_bits & 2) == 2) { - ?> - - trans("ShowReduc"), 'reduc').' '; - if ($line->description == '(DEPOSIT)') $txt=$langs->trans("Deposit"); - elseif ($line->description == '(EXCESS RECEIVED)') $txt=$langs->trans("ExcessReceived"); - elseif ($line->description == '(EXCESS PAID)') $txt=$langs->trans("ExcessPaid"); - //else $txt=$langs->trans("Discount"); - print $txt; - ?> - - description) - { - if ($line->description == '(CREDIT_NOTE)' && $line->fk_remise_except > 0) - { - $discount=new DiscountAbsolute($this->db); - $discount->fetch($line->fk_remise_except); - echo ($txt?' - ':'').$langs->transnoentities("DiscountFromCreditNote", $discount->getNomUrl(0)); - } - elseif ($line->description == '(DEPOSIT)' && $line->fk_remise_except > 0) - { - $discount=new DiscountAbsolute($this->db); - $discount->fetch($line->fk_remise_except); - echo ($txt?' - ':'').$langs->transnoentities("DiscountFromDeposit", $discount->getNomUrl(0)); - // Add date of deposit - if (! empty($conf->global->INVOICE_ADD_DEPOSIT_DATE)) - echo ' ('.dol_print_date($discount->datec).')'; - } - elseif ($line->description == '(EXCESS RECEIVED)' && $objp->fk_remise_except > 0) - { - $discount=new DiscountAbsolute($this->db); - $discount->fetch($line->fk_remise_except); - echo ($txt?' - ':'').$langs->transnoentities("DiscountFromExcessReceived", $discount->getNomUrl(0)); - } - elseif ($line->description == '(EXCESS PAID)' && $objp->fk_remise_except > 0) - { - $discount=new DiscountAbsolute($this->db); - $discount->fetch($line->fk_remise_except); - echo ($txt?' - ':'').$langs->transnoentities("DiscountFromExcessPaid", $discount->getNomUrl(0)); - } - else - { - echo ($txt?' - ':'').dol_htmlentitiesbr($line->description); - } - } - } - else - { - $format = $conf->global->MAIN_USE_HOURMIN_IN_DATE_RANGE?'dayhour':'day'; - - if ($line->fk_product > 0) - { - echo $form->textwithtooltip($text, $description, 3, '', '', $i, 0, (!empty($line->fk_parent_line)?img_picto('', 'rightarrow'):'')); - } - else - { - if ($type==1) $text = img_object($langs->trans('Service'), 'service'); - else $text = img_object($langs->trans('Product'), 'product'); - - if (! empty($line->label)) { - $text.= ' '.$line->label.''; - echo $form->textwithtooltip($text, dol_htmlentitiesbr($line->description), 3, '', '', $i, 0, (!empty($line->fk_parent_line)?img_picto('', 'rightarrow'):'')); - } else { - if (! empty($line->fk_parent_line)) echo img_picto('', 'rightarrow'); - echo $text.' '.dol_htmlentitiesbr($line->description); - } - } - - // Show date range - if ($line->element == 'facturedetrec') { - if ($line->date_start_fill || $line->date_end_fill) echo '
'; - if ($line->date_start_fill) echo $langs->trans('AutoFillDateFromShort').': '.yn($line->date_start_fill); - if ($line->date_start_fill && $line->date_end_fill) echo ' - '; - if ($line->date_end_fill) echo $langs->trans('AutoFillDateToShort').': '.yn($line->date_end_fill); - if ($line->date_start_fill || $line->date_end_fill) echo '
'; - } - else { - if ($line->date_start || $line->date_end) echo '
'.get_date_range($line->date_start, $line->date_end, $format).'
'; - //echo get_date_range($line->date_start, $line->date_end, $format); - } - + echo $form->textwithtooltip($text, $description, 3, '', '', $i, 0, (!empty($line->fk_parent_line)?img_picto('', 'rightarrow'):'')); // Add description in form - if ($line->fk_product > 0 && ! empty($conf->global->PRODUIT_DESC_IN_FORM)) + if (! empty($conf->global->PRODUIT_DESC_IN_FORM)) { print (! empty($line->description) && $line->description!=$line->product_label)?'
'.dol_htmlentitiesbr($line->description):''; } } - - if (! empty($conf->accounting->enabled) && $line->fk_accounting_account > 0) - { - $accountingaccount=new AccountingAccount($this->db); - $accountingaccount->fetch($line->fk_accounting_account); - echo '

' . $langs->trans('AccountingAffectation') . ' : ' . $accountingaccount->getNomUrl(0, 1, 1); - } - ?> - element == 'supplier_proposal' || $object->element == 'order_supplier' || $object->element == 'invoice_supplier') // We must have same test in printObjectLines - { - ?> - ref_fourn?$line->ref_fourn:$line->ref_supplier); - ?> - - tva_tx)) $positiverates.=($positiverates?'/':'').price2num($line->tva_tx); - if (price2num($line->total_localtax1)) $positiverates.=($positiverates?'/':'').price2num($line->localtax1_tx); - if (price2num($line->total_localtax2)) $positiverates.=($positiverates?'/':'').price2num($line->localtax2_tx); - if (empty($positiverates)) $positiverates='0'; - echo vatrate($positiverates.($line->vat_src_code?' ('.$line->vat_src_code.')':''), '%', $line->info_bits); - //echo vatrate($line->tva_tx.($line->vat_src_code?(' ('.$line->vat_src_code.')'):''), '%', $line->info_bits); - ?> - - subprice); ?> - - multicurrency->enabled) && $this->multicurrency_code != $conf->currency) { ?> - multicurrency_subprice); ?> - - - - pu_ttc)?price($line->pu_ttc):price($line->subprice)); ?> - - info_bits & 2) != 2) && $line->special_code != 3) { - // I comment this because it shows info even when not required - // for example always visible on invoice but must be visible only if stock module on and stock decrease option is on invoice validation and status is not validated - // must also not be output for most entities (proposal, intervention, ...) - //if($line->qty > $line->stock) print img_picto($langs->trans("StockTooLow"),"warning", 'style="vertical-align: bottom;"')." "; - echo price($line->qty, 0, '', 0, 0); // Yes, it is a quantity, not a price, but we just want the formating role of function price - } else echo ' '; + echo price($line->qty, 0, '', 0, 0); // Yes, it is a quantity, not a price, but we just want the formating role of function price ?> @@ -237,9 +111,6 @@ $domData .= ' data-product_type="'.$line->product_type.'"'; ?> - special_code == 3) { ?> - trans('Option'); ?> - global->MAIN_OPTIMIZEFORTEXTBROWSER)) @@ -257,16 +128,8 @@ $domData .= ' data-product_type="'.$line->product_type.'"'; { print '
'; } - ?> + ?> - multicurrency->enabled) && $this->multicurrency_code != $conf->currency) { ?> - multicurrency_total_ht); ?> - - - - total_ttc); ?> - - statut == 0 && ($object_rights->creer) && $action != 'selectlines' ) { ?> diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 5a09ea17127..02c7a9ca6dd 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -3911,12 +3911,13 @@ abstract class CommonObject * @param string $buyer Object of buyer third party * @param int $selected Object line selected * @param int $dateSelector 1=Show also date range input fields + * @param string $defaulttpldir Directory where to find the template * @return void */ - public function printObjectLines($action, $seller, $buyer, $selected = 0, $dateSelector = 0) + public function printObjectLines($action, $seller, $buyer, $selected = 0, $dateSelector = 0, $defaulttpldir = '/core/tpl') { - global $conf, $hookmanager, $langs, $user; - // TODO We should not use global var for this ! + global $conf, $hookmanager, $langs, $user, $object; + // TODO We should not use global var for this global $inputalsopricewithtax, $usemargins, $disableedit, $disablemove, $disableremove, $outputalsopricetotalwithtax; // Define usemargins @@ -3934,90 +3935,26 @@ abstract class CommonObject $reshook = $hookmanager->executeHooks('printObjectLineTitle', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks if (empty($reshook)) { - // Title line - print "\n"; - - print ''; - - // Adds a line numbering column - if (! empty($conf->global->MAIN_VIEW_LINE_NUMBER)) print ' '; - - // Description - print ''.$langs->trans('Description').''; - - if ($this->element == 'supplier_proposal' || $this->element == 'order_supplier' || $this->element == 'invoice_supplier') + // Output template part (modules that overwrite templates must declare this into descriptor) + // Use global variables + $dateSelector + $seller and $buyer + $dirtpls=array_merge($conf->modules_parts['tpl'], array($defaulttpldir)); + foreach($dirtpls as $module => $reldir) { - print ''.$langs->trans("SupplierRef").''; - } - - // VAT - print ''.$langs->trans('VAT').''; - - // Price HT - print ''.$langs->trans('PriceUHT').''; - - // Multicurrency - if (!empty($conf->multicurrency->enabled) && $this->multicurrency_code != $conf->currency) print ''.$langs->trans('PriceUHTCurrency', $this->multicurrency_code).''; - - if ($inputalsopricewithtax) print ''.$langs->trans('PriceUTTC').''; - - // Qty - print ''.$langs->trans('Qty').''; - - if($conf->global->PRODUCT_USE_UNITS) - { - print ''.$langs->trans('Unit').''; - } - - // Reduction short - print ''.$langs->trans('ReductionShort').''; - - // Fields for situation invoice - if ($this->situation_cycle_ref) { - print '' . $langs->trans('Progress') . ''; - print '' . $langs->trans('TotalHT100Short') . ''; - } - - if ($usemargins && ! empty($conf->margin->enabled) && empty($user->societe_id)) - { - if (!empty($user->rights->margins->creer)) + if (!empty($module)) { - if ($conf->global->MARGIN_TYPE == "1") - print ''.$langs->trans('BuyingPrice').''; - else - print ''.$langs->trans('CostPrice').''; + $tpl = dol_buildpath($reldir.'/objectline_title.tpl.php'); } - - if (! empty($conf->global->DISPLAY_MARGIN_RATES) && $user->rights->margins->liretous) - print ''.$langs->trans('MarginRate').''; - if (! empty($conf->global->DISPLAY_MARK_RATES) && $user->rights->margins->liretous) - print ''.$langs->trans('MarkRate').''; + else + { + $tpl = DOL_DOCUMENT_ROOT.$reldir.'/objectline_title.tpl.php'; + } + if (empty($conf->file->strict_mode)) { + $res=@include $tpl; + } else { + $res=include $tpl; // for debug + } + if ($res) break; } - - // Total HT - print ''.$langs->trans('TotalHTShort').''; - - // Multicurrency - if (!empty($conf->multicurrency->enabled) && $this->multicurrency_code != $conf->currency) print ''.$langs->trans('TotalHTShortCurrency', $this->multicurrency_code).''; - - if ($outputalsopricetotalwithtax) print ''.$langs->trans('TotalTTCShort').''; - - print ''; // No width to allow autodim - - print ''; - - print ''; - - if($action == 'selectlines') - { - print ''; - print ''; - print ''; - print ''; - } - - print "\n"; - print "\n"; } $var = true; @@ -4045,7 +3982,7 @@ abstract class CommonObject } if (empty($reshook)) { - $this->printObjectLine($action, $line, $var, $num, $i, $dateSelector, $seller, $buyer, $selected, $extrafieldsline); + $this->printObjectLine($action, $line, $var, $num, $i, $dateSelector, $seller, $buyer, $selected, $extrafieldsline, $defaulttpldir); } $i++; @@ -4067,9 +4004,10 @@ abstract class CommonObject * @param string $buyer Object of buyer third party * @param int $selected Object line selected * @param int $extrafieldsline Object of extrafield line attribute + * @param string $defaulttpldir Directory where to find the template * @return void */ - public function printObjectLine($action, $line, $var, $num, $i, $dateSelector, $seller, $buyer, $selected = 0, $extrafieldsline = 0) + public function printObjectLine($action, $line, $var, $num, $i, $dateSelector, $seller, $buyer, $selected = 0, $extrafieldsline = 0, $defaulttpldir = '/core/tpl') { global $conf,$langs,$user,$object,$hookmanager; global $form,$bc,$bcdd; @@ -4157,7 +4095,7 @@ abstract class CommonObject } } - // Ligne en mode update + // Line in update mode if ($this->statut == 0 && $action == 'editline' && $selected == $line->id) { $label = (! empty($line->label) ? $line->label : (($line->fk_product > 0) ? $line->product_label : '')); @@ -4167,7 +4105,7 @@ abstract class CommonObject // Output template part (modules that overwrite templates must declare this into descriptor) // Use global variables + $dateSelector + $seller and $buyer - $dirtpls=array_merge($conf->modules_parts['tpl'], array('/core/tpl')); + $dirtpls=array_merge($conf->modules_parts['tpl'], array($defaulttpldir)); foreach($dirtpls as $module => $reldir) { if (!empty($module)) diff --git a/htdocs/core/tpl/objectline_title.tpl.php b/htdocs/core/tpl/objectline_title.tpl.php new file mode 100644 index 00000000000..fd848764721 --- /dev/null +++ b/htdocs/core/tpl/objectline_title.tpl.php @@ -0,0 +1,131 @@ + + * Copyright (C) 2010-2011 Laurent Destailleur + * Copyright (C) 2012-2013 Christophe Battarel + * Copyright (C) 2012 Cédric Salvador + * Copyright (C) 2012-2014 Raphaël Doursenaud + * Copyright (C) 2013 Florian Henry + * Copyright (C) 2017 Juanjo Menent + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * Need to have following variables defined: + * $object (invoice, order, ...) + * $conf + * $langs + * $element (used to test $user->rights->$element->creer) + * $permtoedit (used to replace test $user->rights->$element->creer) + * $inputalsopricewithtax (0 by default, 1 to also show column with unit price including tax) + * $outputalsopricetotalwithtax + * $usemargins (0 to disable all margins columns, 1 to show according to margin setup) + * + * $type, $text, $description, $line + */ + +// Protection to avoid direct call of template +if (empty($object) || ! is_object($object)) +{ + print "Error, template page can't be called as URL"; + exit; +} +?> + +\n"; + +print ''; + +// Adds a line numbering column +if (! empty($conf->global->MAIN_VIEW_LINE_NUMBER)) print ' '; + +// Description +print ''.$langs->trans('Description').''; + +if ($this->element == 'supplier_proposal' || $this->element == 'order_supplier' || $this->element == 'invoice_supplier') +{ + print ''.$langs->trans("SupplierRef").''; +} + +// VAT +print ''.$langs->trans('VAT').''; + +// Price HT +print ''.$langs->trans('PriceUHT').''; + +// Multicurrency +if (!empty($conf->multicurrency->enabled) && $this->multicurrency_code != $conf->currency) print ''.$langs->trans('PriceUHTCurrency', $this->multicurrency_code).''; + +if ($inputalsopricewithtax) print ''.$langs->trans('PriceUTTC').''; + +// Qty +print ''.$langs->trans('Qty').''; + +if($conf->global->PRODUCT_USE_UNITS) +{ + print ''.$langs->trans('Unit').''; +} + +// Reduction short +print ''.$langs->trans('ReductionShort').''; + +// Fields for situation invoice +if ($this->situation_cycle_ref) { + print '' . $langs->trans('Progress') . ''; + print '' . $langs->trans('TotalHT100Short') . ''; +} + +if ($usemargins && ! empty($conf->margin->enabled) && empty($user->societe_id)) +{ + if (!empty($user->rights->margins->creer)) + { + if ($conf->global->MARGIN_TYPE == "1") + print ''.$langs->trans('BuyingPrice').''; + else + print ''.$langs->trans('CostPrice').''; + } + + if (! empty($conf->global->DISPLAY_MARGIN_RATES) && $user->rights->margins->liretous) + print ''.$langs->trans('MarginRate').''; + if (! empty($conf->global->DISPLAY_MARK_RATES) && $user->rights->margins->liretous) + print ''.$langs->trans('MarkRate').''; +} + +// Total HT +print ''.$langs->trans('TotalHTShort').''; + +// Multicurrency +if (!empty($conf->multicurrency->enabled) && $this->multicurrency_code != $conf->currency) print ''.$langs->trans('TotalHTShortCurrency', $this->multicurrency_code).''; + +if ($outputalsopricetotalwithtax) print ''.$langs->trans('TotalTTCShort').''; + +print ''; // No width to allow autodim + +print ''; + +print ''; + +if($action == 'selectlines') +{ + print ''; + print ''; + print ''; + print ''; +} + +print "\n"; +print "\n"; +?> + + \ No newline at end of file diff --git a/htdocs/fichinter/card.php b/htdocs/fichinter/card.php index 31db9d0c2b4..f38b8fb10e0 100644 --- a/htdocs/fichinter/card.php +++ b/htdocs/fichinter/card.php @@ -1647,11 +1647,11 @@ elseif ($id > 0 || ! empty($ref)) } // create intervention model - if ($object->statut == Fichinter::STATUS_DRAFT && $user->rights->ficheinter->creer && (count($object->lines) > 0)) { + if ($object->statut == Fichinter::STATUS_DRAFT && $user->rights->ficheinter->creer && (count($object->lines) > 0) && $conf->global->MAIN_FEATURES_LEVEL >= 2) { print ''; } From a143dba9f8f93f3ae519c76eee8cd8ff90090eac Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 3 Jun 2019 20:46:11 +0200 Subject: [PATCH 120/828] Work on incomplete code on BOM module --- htdocs/bom/bom_card.php | 13 +-- htdocs/bom/class/bom.class.php | 52 ++++++++++++ htdocs/bom/tpl/objectline_title.tpl.php | 84 +++++++++++++++++++ htdocs/bom/tpl/objectline_view.tpl.php | 48 ++--------- htdocs/contrat/class/contrat.class.php | 9 +- htdocs/core/actions_addupdatedelete.inc.php | 39 ++++++++- htdocs/core/class/commonobject.class.php | 64 +++++++++++++- .../template/class/myobject.class.php | 52 ++++++++++++ .../modulebuilder/template/myobject_card.php | 9 +- 9 files changed, 315 insertions(+), 55 deletions(-) create mode 100644 htdocs/bom/tpl/objectline_title.tpl.php diff --git a/htdocs/bom/bom_card.php b/htdocs/bom/bom_card.php index 7baf187756c..885fb4b26a3 100644 --- a/htdocs/bom/bom_card.php +++ b/htdocs/bom/bom_card.php @@ -40,6 +40,7 @@ $confirm = GETPOST('confirm', 'alpha'); $cancel = GETPOST('cancel', 'aZ09'); $contextpage= GETPOST('contextpage', 'aZ')?GETPOST('contextpage', 'aZ'):'bomcard'; // To manage different context of search $backtopage = GETPOST('backtopage', 'alpha'); +$lineid = GETPOST('lineid', 'int'); // Initialize technical objects $object=new BOM($db); @@ -149,14 +150,12 @@ if (empty($reshook)) /* * View - * - * Put here all code to build page */ $form=new Form($db); $formfile=new FormFile($db); -llxHeader('', 'NewBOM', ''); +llxHeader('', $langs->trans("BOM"), ''); // Example : Adding jquery code print ''; + print ''; +} + +print "\n"; +print "\n"; +?> + + \ No newline at end of file diff --git a/htdocs/bom/tpl/objectline_view.tpl.php b/htdocs/bom/tpl/objectline_view.tpl.php index 82c5efbb71b..d3fb1f7607b 100644 --- a/htdocs/bom/tpl/objectline_view.tpl.php +++ b/htdocs/bom/tpl/objectline_view.tpl.php @@ -24,11 +24,9 @@ * $object (invoice, order, ...) * $conf * $langs - * $dateSelector * $forceall (0 by default, 1 for supplier invoices/orders) * $element (used to test $user->rights->$element->creer) * $permtoedit (used to replace test $user->rights->$element->creer) - * $senderissupplier (0 by default, 1 for supplier invoices/orders) * $inputalsopricewithtax (0 by default, 1 to also show column with unit price including tax) * $object_rights->creer initialized from = $object->getRights() * $disableedit, $disablemove, $disableremove @@ -76,7 +74,6 @@ $objectline = new BOMLine($this->db); { print (! empty($line->description) && $line->description!=$line->product_label)?'
'.dol_htmlentitiesbr($line->description):''; } - } ?> @@ -96,43 +93,14 @@ $objectline = new BOMLine($this->db); print ''; } ?> - - remise_percent) && $line->special_code != 3) { ?> - remise_percent, $langs); - ?> - -   - global->MAIN_MAX_DECIMALS_UNIT, $conf->global->MAIN_MAX_DECIMALS_TOT); - - ?> - - global->MAIN_OPTIMIZEFORTEXTBROWSER)) - { - print 'country_code).'='.price($line->total_ht); - print '
'.$langs->transcountry("TotalVAT", ($senderissupplier?$object->thirdparty->country_code:$mysoc->country_code)).'='.price($line->total_tva); - if (price2num($line->total_localtax1)) print '
'.$langs->transcountry("TotalLT1", ($senderissupplier?$object->thirdparty->country_code:$mysoc->country_code)).'='.price($line->total_localtax1); - if (price2num($line->total_localtax2)) print '
'.$langs->transcountry("TotalLT2", ($senderissupplier?$object->thirdparty->country_code:$mysoc->country_code)).'='.price($line->total_localtax2); - print '
'.$langs->transcountry("TotalTTC", $mysoc->country_code).'='.price($line->total_ttc); - print '">'; - } - print price($line->total_ht); - if (empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) - { - print '
'; - } - ?> - - + + efficiency; + ?> + statut == 0 && ($object_rights->creer) && $action != 'selectlines' ) { ?> + + if ($this->statut == 0 && ($object_rights->write) && $action != 'selectlines' ) { ?> info_bits & 2) == 2 || ! empty($disableedit)) { ?> @@ -145,7 +113,7 @@ $objectline = new BOMLine($this->db); 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 - print 'id . '">'; + print 'id . '">'; print img_delete(); print ''; } diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index d21b383bf97..0ac28e92bb0 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -1752,7 +1752,6 @@ class Contrat extends CommonObject if ($this->statut >= 0) { - // Call trigger $result=$this->call_trigger('LINECONTRACT_DELETE', $user); if ($result < 0) return -1; @@ -1760,10 +1759,10 @@ class Contrat extends CommonObject $this->db->begin(); - $sql = "DELETE FROM ".MAIN_DB_PREFIX."contratdet"; + $sql = "DELETE FROM ".MAIN_DB_PREFIX.$this->table_element_line; $sql.= " WHERE rowid=".$idline; - dol_syslog(get_class($this)."::delete", LOG_DEBUG); + dol_syslog(get_class($this)."::deleteline", LOG_DEBUG); $resql = $this->db->query($sql); if (! $resql) { @@ -1781,7 +1780,7 @@ class Contrat extends CommonObject if ($result < 0) { $error++; - $this->error="Error ".get_class($this)."::delete deleteExtraFields error -4 ".$contractline->error; + $this->error="Error ".get_class($this)."::deleteline deleteExtraFields error -4 ".$contractline->error; } } } @@ -1790,7 +1789,7 @@ class Contrat extends CommonObject $this->db->commit(); return 1; } else { - dol_syslog(get_class($this)."::delete ERROR:".$this->error, LOG_ERR); + dol_syslog(get_class($this)."::deleteline ERROR:".$this->error, LOG_ERR); $this->db->rollback(); return -1; } diff --git a/htdocs/core/actions_addupdatedelete.inc.php b/htdocs/core/actions_addupdatedelete.inc.php index 3bd33c94c15..40529413bbe 100644 --- a/htdocs/core/actions_addupdatedelete.inc.php +++ b/htdocs/core/actions_addupdatedelete.inc.php @@ -195,8 +195,45 @@ if ($action == 'confirm_delete' && ! empty($permissiontodelete)) } } +// Remove a line +if ($action == 'confirm_deleteline' && $confirm == 'yes' && ! empty($permissiontoadd)) +{ + $result = $object->deleteline($user, $lineid); + if ($result > 0) + { + // Define output language + $outputlangs = $langs; + $newlang = ''; + if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id', 'aZ09')) + { + $newlang = GETPOST('lang_id', 'aZ09'); + } + if ($conf->global->MAIN_MULTILANGS && empty($newlang) && is_object($object->thirdparty)) + { + $newlang = $object->thirdparty->default_lang; + } + if (! empty($newlang)) { + $outputlangs = new Translate("", $conf); + $outputlangs->setDefaultLang($newlang); + } + if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) { + $ret = $object->fetch($object->id); // Reload to get new records + $object->generateDocument($object->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref); + } + + setEventMessages($langs->trans('RecordDeleted'), null, 'mesgs'); + header('Location: '.$_SERVER["PHP_SELF"].'?id='.$object->id); + exit; + } + else + { + setEventMessages($object->error, $object->errors, 'errors'); + } +} + + // Action clone object -if ($action == 'confirm_clone' && $confirm == 'yes' && $permissiontoadd) +if ($action == 'confirm_clone' && $confirm == 'yes' && ! empty($permissiontoadd)) { if (1==0 && ! GETPOST('clone_content') && ! GETPOST('clone_receivers')) { diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 02c7a9ca6dd..9852e2f2fb0 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -3916,7 +3916,7 @@ abstract class CommonObject */ public function printObjectLines($action, $seller, $buyer, $selected = 0, $dateSelector = 0, $defaulttpldir = '/core/tpl') { - global $conf, $hookmanager, $langs, $user, $object; + global $conf, $hookmanager, $langs, $user, $object, $form; // TODO We should not use global var for this global $inputalsopricewithtax, $usemargins, $disableedit, $disablemove, $disableremove, $outputalsopricetotalwithtax; @@ -4075,7 +4075,7 @@ abstract class CommonObject // Output template part (modules that overwrite templates must declare this into descriptor) // Use global variables + $dateSelector + $seller and $buyer - $dirtpls=array_merge($conf->modules_parts['tpl'], array('/core/tpl')); + $dirtpls=array_merge($conf->modules_parts['tpl'], array($defaulttpldir)); foreach($dirtpls as $module => $reldir) { if (!empty($module)) @@ -7529,6 +7529,66 @@ abstract class CommonObject } } + /** + * Delete a line of object in database + * + * @param User $user User that delete + * @param int $idline Id of line to delete + * @param bool $notrigger false=launch triggers after, true=disable triggers + * @return int >0 if OK, <0 if KO + */ + public function deleteLineCommon(User $user, $idline, $notrigger = false) + { + global $conf; + + $error=0; + + $tmpforobjectclass = get_class($this); + $tmpforobjectlineclass = ucfirst($tmpforobjectclass).'Line'; + + // Call trigger + $result=$this->call_trigger('LINE'.strtoupper($tmpforobjectclass).'_DELETE', $user); + if ($result < 0) return -1; + // End call triggers + + $this->db->begin(); + + $sql = "DELETE FROM ".MAIN_DB_PREFIX.$this->table_element_line; + $sql.= " WHERE rowid=".$idline; + + dol_syslog(get_class($this)."::deleteLineCommon", LOG_DEBUG); + $resql = $this->db->query($sql); + if (! $resql) + { + $this->error="Error ".$this->db->lasterror(); + $error++; + } + + if (empty($error)) { + // Remove extrafields + if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used + { + $tmpobjectline = new $tmpforobjectlineclass($this->db); + $tmpobjectline->id= $idline; + $result=$tmpobjectline->deleteExtraFields(); + if ($result < 0) + { + $error++; + $this->error="Error ".get_class($this)."::deleteLineCommon deleteExtraFields error -4 ".$tmpobjectline->error; + } + } + } + + if (empty($error)) { + $this->db->commit(); + return 1; + } else { + dol_syslog(get_class($this)."::deleteLineCommon ERROR:".$this->error, LOG_ERR); + $this->db->rollback(); + return -1; + } + } + /** * Initialise object with example values * Id must be 0 if object instance is a specimen diff --git a/htdocs/modulebuilder/template/class/myobject.class.php b/htdocs/modulebuilder/template/class/myobject.class.php index c85ceb3c18b..a3e1f43b619 100644 --- a/htdocs/modulebuilder/template/class/myobject.class.php +++ b/htdocs/modulebuilder/template/class/myobject.class.php @@ -445,6 +445,25 @@ class MyObject extends CommonObject //return $this->deleteCommon($user, $notrigger, 1); } + /** + * Delete a line of object in database + * + * @param User $user User that delete + * @param int $idline Id of line to delete + * @param bool $notrigger false=launch triggers after, true=disable triggers + * @return int >0 if OK, <0 if KO + */ + public function deleteLine(User $user, $idline, $notrigger = false) + { + if ($this->status < 0) + { + $this->error = 'ErrorDeleteLineNotAllowedByObjectStatus'; + return -2; + } + + return $this->deleteLineCommon($user, $idline, $notrigger); + } + /** * Return a link to the object card (with optionaly the picto) * @@ -667,6 +686,39 @@ class MyObject extends CommonObject } } + /** + * Create a document onto disk according to template module. + * + * @param string $modele Force template to use ('' to not force) + * @param Translate $outputlangs objet lang a utiliser pour traduction + * @param int $hidedetails Hide details of lines + * @param int $hidedesc Hide description + * @param int $hideref Hide ref + * @param null|array $moreparams Array to provide more information + * @return int 0 if KO, 1 if OK + */ + public function generateDocument($modele, $outputlangs, $hidedetails = 0, $hidedesc = 0, $hideref = 0, $moreparams = null) + { + global $conf,$langs; + + $langs->load("mymodule@mymodule"); + + if (! dol_strlen($modele)) { + + $modele = 'standard'; + + if ($this->modelpdf) { + $modele = $this->modelpdf; + } elseif (! empty($conf->global->MYOBJECT_ADDON_PDF)) { + $modele = $conf->global->MYOBJECT_ADDON_PDF; + } + } + + $modelpath = "core/modules/mymodule/doc/"; + + return $this->commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams); + } + /** * Action executed by scheduler * CAN BE A CRON TASK. In such a case, parameters come from the schedule job setup field 'Parameters' diff --git a/htdocs/modulebuilder/template/myobject_card.php b/htdocs/modulebuilder/template/myobject_card.php index 159dc897fa3..64a0eb008fa 100644 --- a/htdocs/modulebuilder/template/myobject_card.php +++ b/htdocs/modulebuilder/template/myobject_card.php @@ -73,6 +73,7 @@ $confirm = GETPOST('confirm', 'alpha'); $cancel = GETPOST('cancel', 'aZ09'); $contextpage= GETPOST('contextpage', 'aZ')?GETPOST('contextpage', 'aZ'):'myobjectcard'; // To manage different context of search $backtopage = GETPOST('backtopage', 'alpha'); +//$lineid = GETPOST('lineid', 'int'); // Initialize technical objects $object=new MyObject($db); @@ -159,7 +160,7 @@ if (empty($reshook)) $form=new Form($db); $formfile=new FormFile($db); -llxHeader('', 'MyObject', ''); +llxHeader('', $langs->trans('MyObject'), ''); // Example : Adding jquery code print ''."\n"; // Code to ask the credit card. This use the default "API version". No way to force API version when using JS code. print ''."\n"; @@ -1862,21 +1865,46 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment if (! empty($conf->global->STRIPE_USE_NEW_CHECKOUT)) { - $sessionstripe = \Stripe\Checkout\Session::create([ - 'customer_email' => (GETPOST('email', 'alpha')?GETPOST('email', 'alpha'):''), - 'payment_method_types' => ['card'], - 'line_items' => [[ - 'name' => 'T-shirt', - 'description' => 'Stripe payment: '.$FULLTAG.' ref='.$ref, - //'images' => ['https://example.com/t-shirt.png'], - 'amount' => $amount, - 'currency' => $currency, - 'quantity' => 1, - ]], - 'success_url' => $urlok, - 'cancel_url' => $urlko, - ]); + $amountstripe = $amount; + // Correct the amount according to unit of currency + // See https://support.stripe.com/questions/which-zero-decimal-currencies-does-stripe-support + $arrayzerounitcurrency=array('BIF', 'CLP', 'DJF', 'GNF', 'JPY', 'KMF', 'KRW', 'MGA', 'PYG', 'RWF', 'VND', 'VUV', 'XAF', 'XOF', 'XPF'); + if (! in_array($currency, $arrayzerounitcurrency)) $amountstripe=$amountstripe * 100; + + try { + $arrayforcheckout = array( + 'payment_method_types' => array('card'), + 'line_items' => array(array( + 'name' => $langs->transnoentitiesnoconv("Payment").' '.$FULLTAG.' ref='.$ref, + 'description' => 'Stripe payment: '.$FULLTAG.' ref='.$ref, + 'amount' => $amountstripe, + 'currency' => $currency, + 'images' => array($urllogofull), + 'quantity' => 1, + )), + 'client_reference_id' => $FULLTAG, + 'success_url' => $urlok, + 'cancel_url' => $urlko, + ); + if ($stripecu) $arrayforcheckout['customer'] = $stripecu; + elseif (GETPOST('email', 'alpha') && isValidEmail(GETPOST('email', 'alpha'))) $arrayforcheckout['customer_email'] = GETPOST('email', 'alpha'); + $sessionstripe = \Stripe\Checkout\Session::create($arrayforcheckout); + + $remoteip = getUserRemoteIP(); + + // Save some data for the paymentok + $_SESSION["currencyCodeType"] = $currency; + $_SESSION["paymentType"] = ''; + $_SESSION["FinalPaymentAmt"] = $amount; + $_SESSION['ipaddress'] = ($remoteip?$remoteip:'unknown'); // Payer ip + $_SESSION['payerID'] = is_object($stripecu)?$stripecu->id:''; + $_SESSION['TRANSACTIONID'] = $sessionstripe->id; + } + catch(Exception $e) + { + print $e->getMessage(); + } ?> // Code for payment with option STRIPE_USE_NEW_CHECKOUT set diff --git a/htdocs/public/stripe/ipn.php b/htdocs/public/stripe/ipn.php index ca7db10f9d1..201d434e758 100644 --- a/htdocs/public/stripe/ipn.php +++ b/htdocs/public/stripe/ipn.php @@ -297,12 +297,18 @@ elseif ($event->type == 'customer.deleted') { $db->query($sql); $db->commit(); } -elseif ($event->type == 'payment_intent.succeeded') { - // TODO: Redirect to paymentok.php +elseif ($event->type == 'payment_intent.succeeded') { // Called when making payment with PaymentIntent method ($conf->global->STRIPE_USE_NEW_CHECKOUT is on). + // TODO: create fees + // TODO: Redirect to paymentok.php } elseif ($event->type == 'payment_intent.payment_failed') { // TODO: Redirect to paymentko.php } +elseif ($event->type == 'checkout.session.completed') // Called when making payment with new Checkout method ($conf->global->STRIPE_USE_NEW_CHECKOUT is on). +{ + // TODO: create fees + // TODO: Redirect to paymentok.php +} elseif ($event->type == 'charge.succeeded') { // TODO: create fees // TODO: Redirect to paymentok.php From 9314bb4667f3d198257ecb974e29c1d6a5bfda20 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 7 Jun 2019 13:07:19 +0200 Subject: [PATCH 171/828] Fix missing statement descriptor --- htdocs/public/payment/newpayment.php | 15 +++++++++++++++ htdocs/public/stripe/ipn.php | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php index 93620e70c0e..32db0d99a08 100644 --- a/htdocs/public/payment/newpayment.php +++ b/htdocs/public/payment/newpayment.php @@ -1872,7 +1872,21 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment $arrayzerounitcurrency=array('BIF', 'CLP', 'DJF', 'GNF', 'JPY', 'KMF', 'KRW', 'MGA', 'PYG', 'RWF', 'VND', 'VUV', 'XAF', 'XOF', 'XPF'); if (! in_array($currency, $arrayzerounitcurrency)) $amountstripe=$amountstripe * 100; + $ipaddress=getUserRemoteIP(); + $metadata = array('dol_version'=>DOL_VERSION, 'dol_entity'=>$conf->entity, 'ipaddress'=>$ipaddress); + if (is_object($object)) + { + $metadata['dol_type'] = $object->element; + $metadata['dol_id'] = $object->id; + } + try { + $arrayforpaymentintent = array( + 'description'=>'Stripe payment: '.$FULLTAG.(is_object($object)?' ref='.$object->ref:''), + "metadata" => $metadata + ); + if ($TAG) $arrayforpaymentintent["statement_descriptor"] = dol_trunc($TAG, 10, 'right', 'UTF-8', 1); // 22 chars that appears on bank receipt (company + description) + $arrayforcheckout = array( 'payment_method_types' => array('card'), 'line_items' => array(array( @@ -1886,6 +1900,7 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment 'client_reference_id' => $FULLTAG, 'success_url' => $urlok, 'cancel_url' => $urlko, + 'payment_intent_data' => $arrayforpaymentintent ); if ($stripecu) $arrayforcheckout['customer'] = $stripecu; elseif (GETPOST('email', 'alpha') && isValidEmail(GETPOST('email', 'alpha'))) $arrayforcheckout['customer_email'] = GETPOST('email', 'alpha'); diff --git a/htdocs/public/stripe/ipn.php b/htdocs/public/stripe/ipn.php index 201d434e758..8795031592a 100644 --- a/htdocs/public/stripe/ipn.php +++ b/htdocs/public/stripe/ipn.php @@ -106,7 +106,7 @@ catch(\UnexpectedValueException $e) { $langs->load("main"); -// TODO Do we really need a user in setup just to have an name to fill an email topic when it is a technical system notification email +// TODO Do we really need a user in setup just to have a name to fill an email topic when it is a technical system notification email $user = new User($db); $user->fetch($conf->global->STRIPE_USER_ACCOUNT_FOR_ACTIONS); $user->getrights(); From 1520ca964606a58ce4e961fa52c29853c042af70 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 7 Jun 2019 13:51:53 +0200 Subject: [PATCH 172/828] Fix buttons for payments --- htdocs/langs/en_US/paybox.lang | 2 +- htdocs/langs/en_US/paypal.lang | 1 + htdocs/langs/en_US/stripe.lang | 2 +- htdocs/public/payment/newpayment.php | 18 ++++++++++++++---- htdocs/theme/eldy/global.inc.php | 7 ++++++- htdocs/theme/md/style.css.php | 5 ++++- 6 files changed, 27 insertions(+), 8 deletions(-) diff --git a/htdocs/langs/en_US/paybox.lang b/htdocs/langs/en_US/paybox.lang index d3c26c8e65a..a4eee3680af 100644 --- a/htdocs/langs/en_US/paybox.lang +++ b/htdocs/langs/en_US/paybox.lang @@ -10,7 +10,7 @@ ToComplete=To complete YourEMail=Email to receive payment confirmation Creditor=Creditor PaymentCode=Payment code -PayBoxDoPayment=Pay with Credit or Debit Card (Paybox) +PayBoxDoPayment=Pay with Paybox ToPay=Do payment YouWillBeRedirectedOnPayBox=You will be redirected on secured Paybox page to input you credit card information Continue=Next diff --git a/htdocs/langs/en_US/paypal.lang b/htdocs/langs/en_US/paypal.lang index 1db01a59012..5eb5f389445 100644 --- a/htdocs/langs/en_US/paypal.lang +++ b/htdocs/langs/en_US/paypal.lang @@ -33,3 +33,4 @@ PostActionAfterPayment=Post actions after payments ARollbackWasPerformedOnPostActions=A rollback was performed on all Post actions. You must complete post actions manually if they are necessary. ValidationOfPaymentFailed=Validation of payment has failed CardOwner=Card holder +PayPalBalance=Paypal credit diff --git a/htdocs/langs/en_US/stripe.lang b/htdocs/langs/en_US/stripe.lang index 1eb0a649a74..91d1f5a54c5 100644 --- a/htdocs/langs/en_US/stripe.lang +++ b/htdocs/langs/en_US/stripe.lang @@ -12,7 +12,7 @@ YourEMail=Email to receive payment confirmation STRIPE_PAYONLINE_SENDEMAIL=Email notification after a payment attempt (success or fail) Creditor=Creditor PaymentCode=Payment code -StripeDoPayment=Pay with Credit or Debit Card (Stripe) +StripeDoPayment=Pay with Stripe YouWillBeRedirectedOnStripe=You will be redirected on secured Stripe page to input you credit card information Continue=Next ToOfferALinkForOnlinePayment=URL for %s payment diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php index 32db0d99a08..90646ef9b41 100644 --- a/htdocs/public/payment/newpayment.php +++ b/htdocs/public/payment/newpayment.php @@ -1670,27 +1670,37 @@ if ($action != 'dopayment') if ((empty($paymentmethod) || $paymentmethod == 'paybox') && ! empty($conf->paybox->enabled)) { // If STRIPE_PICTO_FOR_PAYMENT is 'cb' we show a picto of a crdit card instead of paybox - print '
'; + print '
'; + print '
'; + print ''.$langs->trans("CreditOrDebitCard").''; + print '
'; } if ((empty($paymentmethod) || $paymentmethod == 'stripe') && ! empty($conf->stripe->enabled)) { // If STRIPE_PICTO_FOR_PAYMENT is 'cb' we show a picto of a crdit card instead of stripe - print '
'; + print '
'; + print '
'; + print ''.$langs->trans("CreditOrDebitCard").''; + print '
'; } if ((empty($paymentmethod) || $paymentmethod == 'paypal') && ! empty($conf->paypal->enabled)) { if (empty($conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY)) $conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY='integral'; + print '
'; if ($conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY == 'integral') { - print '
'; + print '
'; + print ''.$langs->trans("CreditOrDebitCard").' - '; + print ''.$langs->trans("PayPalBalance").''; } if ($conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY == 'paypalonly') { - print '
'; + //print '
'.$langs->trans("PaypalAccount").'">'; } + print '
'; } } } diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 70496d8689a..e5e68e59c48 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -133,7 +133,7 @@ input.buttongen { vertical-align: middle; } input.buttonpayment, button.buttonpayment, div.buttonpayment { - min-width: 320px; + min-width: 290px; margin-bottom: 15px; background-image: none; line-height: 24px; @@ -147,6 +147,11 @@ input.buttonpayment, button.buttonpayment, div.buttonpayment { color: #fff; border-radius: 4px; } +.buttonpaymentsmall { + font-size: 0.65em; + padding-left: 5px; + padding-right: 5px; +} div.buttonpayment input { background-color: unset; color: #fff; diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 98618800e39..752f60541d1 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -353,8 +353,11 @@ input.buttongen { vertical-align: middle; } input.buttonpayment, button.buttonpayment, div.buttonpayment { - min-width: 320px; + min-width: 290px; margin-bottom: 15px; + margin-top: 0; + margin-left: 5px; + margin-right: 5px; background-image: none; line-height: 24px; padding: 8px; From 63e205c23fdcbae610c64f8d5ae04c534b2ef1b0 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Tue, 4 Jun 2019 16:22:43 +0200 Subject: [PATCH 173/828] FIX term of lang for explicit date in subscription list --- htdocs/adherents/subscription/list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/adherents/subscription/list.php b/htdocs/adherents/subscription/list.php index 8e8482d4398..a55aadfe9cb 100644 --- a/htdocs/adherents/subscription/list.php +++ b/htdocs/adherents/subscription/list.php @@ -417,7 +417,7 @@ if (! empty($arrayfields['d.bank']['checked'])) } if (! empty($arrayfields['c.dateadh']['checked'])) { - print_liste_field_titre("Date", $_SERVER["PHP_SELF"], "c.dateadh", $param, "", 'align="center"', $sortfield, $sortorder); + print_liste_field_titre("DateStart", $_SERVER["PHP_SELF"], "c.dateadh", $param, "", 'align="center"', $sortfield, $sortorder); } if (! empty($arrayfields['c.datef']['checked'])) { From ed2d9435dbbbcb9fa49eac53bb3d94a2bba54f8b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 7 Jun 2019 15:21:15 +0200 Subject: [PATCH 174/828] Update project.class.php --- htdocs/projet/class/project.class.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/projet/class/project.class.php b/htdocs/projet/class/project.class.php index 1694a3ff35e..c762b7f65e7 100644 --- a/htdocs/projet/class/project.class.php +++ b/htdocs/projet/class/project.class.php @@ -1794,6 +1794,7 @@ class Project extends CommonObject // For external user, no check is done on company because readability is managed by public status of project and assignement. //$socid=$user->societe_id; + $projectsListId = null; if (! $user->rights->projet->all->lire) $projectsListId = $this->getProjectsAuthorizedForUser($user, 0, 1); $sql = "SELECT p.rowid, p.fk_statut as status, p.fk_opp_status, p.datee as datee"; From bb0313a1a4cfbed3d8f2f5d566bf9ff544fa9330 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josep=20Llu=C3=ADs?= Date: Wed, 5 Jun 2019 17:48:48 +0200 Subject: [PATCH 175/828] Fix Hide disabled fields Hide disabled fields in product list --- htdocs/product/list.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/product/list.php b/htdocs/product/list.php index 93bcb936e98..7677e82e1b4 100644 --- a/htdocs/product/list.php +++ b/htdocs/product/list.php @@ -168,9 +168,9 @@ $arrayfields=array( 'p.barcode'=>array('label'=>$langs->trans("Gencod"), 'checked'=>1, 'enabled'=>(! empty($conf->barcode->enabled))), 'p.duration'=>array('label'=>$langs->trans("Duration"), 'checked'=>($contextpage != 'productlist'), 'enabled'=>(! empty($conf->service->enabled))), 'p.weight'=>array('label'=>$langs->trans("Weight"), 'checked'=>0, 'enabled'=>(! empty($conf->produit->enabled))), - 'p.length'=>array('label'=>$langs->trans("Length"), 'checked'=>0, 'enabled'=>(! empty($conf->produit->enabled))), - 'p.surface'=>array('label'=>$langs->trans("Surface"), 'checked'=>0, 'enabled'=>(! empty($conf->produit->enabled))), - 'p.volume'=>array('label'=>$langs->trans("Volume"), 'checked'=>0, 'enabled'=>(! empty($conf->produit->enabled))), + 'p.length'=>array('label'=>$langs->trans("Length"), 'checked'=>0, 'enabled'=>(! empty($conf->produit->enabled) && ! empty($conf->global->PRODUCT_DISABLE_SIZE))), + 'p.surface'=>array('label'=>$langs->trans("Surface"), 'checked'=>0, 'enabled'=>(! empty($conf->produit->enabled) && ! empty($conf->global->PRODUCT_DISABLE_SURFACE))), + 'p.volume'=>array('label'=>$langs->trans("Volume"), 'checked'=>0, 'enabled'=>(! empty($conf->produit->enabled) && ! empty($conf->global->PRODUCT_DISABLE_VOLUME))), 'p.sellprice'=>array('label'=>$langs->trans("SellingPrice"), 'checked'=>1, 'enabled'=>empty($conf->global->PRODUIT_MULTIPRICES)), 'p.minbuyprice'=>array('label'=>$langs->trans("BuyingPriceMinShort"), 'checked'=>1, 'enabled'=>(! empty($user->rights->fournisseur->lire))), 'p.numbuyprice'=>array('label'=>$langs->trans("BuyingPriceNumShort"), 'checked'=>0, 'enabled'=>(! empty($user->rights->fournisseur->lire))), From 73326cfbf94db5807d7b2876a8e947a24dc6c1c7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 7 Jun 2019 16:56:08 +0200 Subject: [PATCH 176/828] Removed bad commited files --- .../doctemplates/websites/template/.htaccess | 2 - .../blog-our-company-is-now-on-dolibarr.php | 5 - ...log-our-new-web-site-has-been-launched.php | 5 - .../doctemplates/websites/template/blog.php | 5 - .../websites/template/careers.php | 5 - .../websites/template/carriere.php | 5 - .../template/clients-testimonials.php | 5 - .../websites/template/contact.php | 5 - .../doctemplates/websites/template/faq.php | 5 - .../doctemplates/websites/template/footer.php | 5 - .../doctemplates/websites/template/header.php | 5 - .../doctemplates/websites/template/home.php | 5 - .../websites/template/htmlheader.html | 9 - .../doctemplates/websites/template/index.php | 11 - .../websites/template/javascript.js.php | 202 - .../websites/template/master.inc.php | 4 - .../medias/image/template/ajax-loading.gif | Bin 2052 -> 0 bytes .../medias/image/template/alberteinstein.jpg | Bin 4673 -> 0 bytes .../template/medias/image/template/apache.png | Bin 11505 -> 0 bytes .../image/template/background_coder.jpg | Bin 235841 -> 0 bytes .../template/background_computer_coffee.jpg | Bin 385205 -> 0 bytes .../image/template/background_dolibarr.jpg | Bin 337251 -> 0 bytes .../image/template/background_rough-horn.jpg | Bin 395520 -> 0 bytes .../image/template/background_sunset.jpg | Bin 368448 -> 0 bytes .../medias/image/template/briefcase.svg | 1 - .../medias/image/template/calendar.svg | 1 - .../medias/image/template/chevron-down.svg | 1 - .../medias/image/template/chevron-left.svg | 1 - .../medias/image/template/chevron-right.svg | 1 - .../medias/image/template/chevron-up.svg | 1 - .../medias/image/template/daviddoe.png | Bin 10321 -> 0 bytes .../medias/image/template/dolibarr.ico | Bin 2238 -> 0 bytes .../image/template/dolibarr_256x256.png | Bin 4008 -> 0 bytes .../medias/image/template/dolibarr_logo.png | Bin 29999 -> 0 bytes .../template/medias/image/template/icon-5.png | Bin 693 -> 0 bytes .../template/medias/image/template/icon-6.png | Bin 830 -> 0 bytes .../medias/image/template/icon-quote.png | Bin 947 -> 0 bytes .../medias/image/template/light-bulb.svg | 1 - .../medias/image/template/mariadb.png | Bin 78932 -> 0 bytes .../medias/image/template/mariecurie.jpg | Bin 6105 -> 0 bytes .../medias/image/template/organization.svg | 1 - .../template/medias/image/template/ovh.png | Bin 47301 -> 0 bytes .../image/template/owl-nav-modern-white.png | Bin 683 -> 0 bytes .../medias/image/template/package.svg | 1 - .../template/medias/image/template/php.png | Bin 36099 -> 0 bytes .../medias/image/template/pierrecurie.jpg | Bin 5960 -> 0 bytes .../image/template/thumbs/apache_mini.png | Bin 7295 -> 0 bytes .../image/template/thumbs/apache_small.png | Bin 27590 -> 0 bytes .../image/template/thumbs/mariadb_mini.png | Bin 3766 -> 0 bytes .../image/template/thumbs/mariadb_small.png | Bin 13068 -> 0 bytes .../medias/image/template/thumbs/ovh_mini.png | Bin 4509 -> 0 bytes .../image/template/thumbs/ovh_small.png | Bin 15591 -> 0 bytes .../medias/image/template/thumbs/php_mini.png | Bin 2369 -> 0 bytes .../image/template/thumbs/php_small.png | Bin 18867 -> 0 bytes .../image/template/thumbs/ubuntu_mini.png | Bin 2611 -> 0 bytes .../image/template/thumbs/ubuntu_small.png | Bin 8188 -> 0 bytes .../template/medias/image/template/ubuntu.png | Bin 45331 -> 0 bytes .../template/medias/js/template/extlib.min.js | 853 - .../template/medias/js/template/script.js | 577 - .../websites/template/our-team.php | 5 - .../websites/template/page124.tpl.php | 578 - .../websites/template/page125.tpl.php | 97 - .../websites/template/page126.tpl.php | 35 - .../websites/template/page136.tpl.php | 82 - .../websites/template/page147.tpl.php | 128 - .../websites/template/page148.tpl.php | 120 - .../websites/template/page149.tpl.php | 88 - .../websites/template/page150.tpl.php | 75 - .../websites/template/page151.tpl.php | 99 - .../websites/template/page152.tpl.php | 80 - .../websites/template/page191.tpl.php | 112 - .../websites/template/page192.tpl.php | 81 - .../websites/template/page193.tpl.php | 107 - .../websites/template/page194.tpl.php | 183 - .../websites/template/page238.tpl.php | 77 - .../websites/template/page239.tpl.php | 81 - .../websites/template/page240.tpl.php | 81 - .../websites/template/page243.tpl.php | 81 - .../websites/template/page244.tpl.php | 70 - .../websites/template/partners.php | 5 - .../websites/template/pricing.php | 5 - .../websites/template/privacy-policies.php | 5 - .../websites/template/product-p.php | 5 - .../doctemplates/websites/template/robots.txt | 4 - .../doctemplates/websites/template/search.php | 5 - .../websites/template/service-s.php | 5 - .../websites/template/styles.css.php | 20910 ---------------- .../doctemplates/websites/template/test.php | 5 - .../doctemplates/websites/template/test2.php | 5 - .../websites/template/wrapper.php | 126 - 90 files changed, 25062 deletions(-) delete mode 100644 htdocs/install/doctemplates/websites/template/.htaccess delete mode 100644 htdocs/install/doctemplates/websites/template/blog-our-company-is-now-on-dolibarr.php delete mode 100644 htdocs/install/doctemplates/websites/template/blog-our-new-web-site-has-been-launched.php delete mode 100644 htdocs/install/doctemplates/websites/template/blog.php delete mode 100644 htdocs/install/doctemplates/websites/template/careers.php delete mode 100644 htdocs/install/doctemplates/websites/template/carriere.php delete mode 100644 htdocs/install/doctemplates/websites/template/clients-testimonials.php delete mode 100644 htdocs/install/doctemplates/websites/template/contact.php delete mode 100644 htdocs/install/doctemplates/websites/template/faq.php delete mode 100644 htdocs/install/doctemplates/websites/template/footer.php delete mode 100644 htdocs/install/doctemplates/websites/template/header.php delete mode 100644 htdocs/install/doctemplates/websites/template/home.php delete mode 100644 htdocs/install/doctemplates/websites/template/htmlheader.html delete mode 100644 htdocs/install/doctemplates/websites/template/index.php delete mode 100644 htdocs/install/doctemplates/websites/template/javascript.js.php delete mode 100644 htdocs/install/doctemplates/websites/template/master.inc.php delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/ajax-loading.gif delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/alberteinstein.jpg delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/apache.png delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/background_coder.jpg delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/background_computer_coffee.jpg delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/background_dolibarr.jpg delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/background_rough-horn.jpg delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/background_sunset.jpg delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/briefcase.svg delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/calendar.svg delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/chevron-down.svg delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/chevron-left.svg delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/chevron-right.svg delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/chevron-up.svg delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/daviddoe.png delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/dolibarr.ico delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/dolibarr_256x256.png delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/dolibarr_logo.png delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/icon-5.png delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/icon-6.png delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/icon-quote.png delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/light-bulb.svg delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/mariadb.png delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/mariecurie.jpg delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/organization.svg delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/ovh.png delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/owl-nav-modern-white.png delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/package.svg delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/php.png delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/pierrecurie.jpg delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/thumbs/apache_mini.png delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/thumbs/apache_small.png delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/thumbs/mariadb_mini.png delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/thumbs/mariadb_small.png delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/thumbs/ovh_mini.png delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/thumbs/ovh_small.png delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/thumbs/php_mini.png delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/thumbs/php_small.png delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/thumbs/ubuntu_mini.png delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/thumbs/ubuntu_small.png delete mode 100644 htdocs/install/doctemplates/websites/template/medias/image/template/ubuntu.png delete mode 100644 htdocs/install/doctemplates/websites/template/medias/js/template/extlib.min.js delete mode 100644 htdocs/install/doctemplates/websites/template/medias/js/template/script.js delete mode 100644 htdocs/install/doctemplates/websites/template/our-team.php delete mode 100644 htdocs/install/doctemplates/websites/template/page124.tpl.php delete mode 100644 htdocs/install/doctemplates/websites/template/page125.tpl.php delete mode 100644 htdocs/install/doctemplates/websites/template/page126.tpl.php delete mode 100644 htdocs/install/doctemplates/websites/template/page136.tpl.php delete mode 100644 htdocs/install/doctemplates/websites/template/page147.tpl.php delete mode 100644 htdocs/install/doctemplates/websites/template/page148.tpl.php delete mode 100644 htdocs/install/doctemplates/websites/template/page149.tpl.php delete mode 100644 htdocs/install/doctemplates/websites/template/page150.tpl.php delete mode 100644 htdocs/install/doctemplates/websites/template/page151.tpl.php delete mode 100644 htdocs/install/doctemplates/websites/template/page152.tpl.php delete mode 100644 htdocs/install/doctemplates/websites/template/page191.tpl.php delete mode 100644 htdocs/install/doctemplates/websites/template/page192.tpl.php delete mode 100644 htdocs/install/doctemplates/websites/template/page193.tpl.php delete mode 100644 htdocs/install/doctemplates/websites/template/page194.tpl.php delete mode 100644 htdocs/install/doctemplates/websites/template/page238.tpl.php delete mode 100644 htdocs/install/doctemplates/websites/template/page239.tpl.php delete mode 100644 htdocs/install/doctemplates/websites/template/page240.tpl.php delete mode 100644 htdocs/install/doctemplates/websites/template/page243.tpl.php delete mode 100644 htdocs/install/doctemplates/websites/template/page244.tpl.php delete mode 100644 htdocs/install/doctemplates/websites/template/partners.php delete mode 100644 htdocs/install/doctemplates/websites/template/pricing.php delete mode 100644 htdocs/install/doctemplates/websites/template/privacy-policies.php delete mode 100644 htdocs/install/doctemplates/websites/template/product-p.php delete mode 100644 htdocs/install/doctemplates/websites/template/robots.txt delete mode 100644 htdocs/install/doctemplates/websites/template/search.php delete mode 100644 htdocs/install/doctemplates/websites/template/service-s.php delete mode 100644 htdocs/install/doctemplates/websites/template/styles.css.php delete mode 100644 htdocs/install/doctemplates/websites/template/test.php delete mode 100644 htdocs/install/doctemplates/websites/template/test2.php delete mode 100644 htdocs/install/doctemplates/websites/template/wrapper.php diff --git a/htdocs/install/doctemplates/websites/template/.htaccess b/htdocs/install/doctemplates/websites/template/.htaccess deleted file mode 100644 index 7c8813f4c90..00000000000 --- a/htdocs/install/doctemplates/websites/template/.htaccess +++ /dev/null @@ -1,2 +0,0 @@ -# Order allow,deny -# Deny from all \ No newline at end of file diff --git a/htdocs/install/doctemplates/websites/template/blog-our-company-is-now-on-dolibarr.php b/htdocs/install/doctemplates/websites/template/blog-our-company-is-now-on-dolibarr.php deleted file mode 100644 index 5ecc8f882e3..00000000000 --- a/htdocs/install/doctemplates/websites/template/blog-our-company-is-now-on-dolibarr.php +++ /dev/null @@ -1,5 +0,0 @@ -ref.'/page152.tpl.php'; -?> diff --git a/htdocs/install/doctemplates/websites/template/blog-our-new-web-site-has-been-launched.php b/htdocs/install/doctemplates/websites/template/blog-our-new-web-site-has-been-launched.php deleted file mode 100644 index 6d1fb3b7b09..00000000000 --- a/htdocs/install/doctemplates/websites/template/blog-our-new-web-site-has-been-launched.php +++ /dev/null @@ -1,5 +0,0 @@ -ref.'/page150.tpl.php'; -?> diff --git a/htdocs/install/doctemplates/websites/template/blog.php b/htdocs/install/doctemplates/websites/template/blog.php deleted file mode 100644 index 3d1545e2b7c..00000000000 --- a/htdocs/install/doctemplates/websites/template/blog.php +++ /dev/null @@ -1,5 +0,0 @@ -ref.'/page151.tpl.php'; -?> diff --git a/htdocs/install/doctemplates/websites/template/careers.php b/htdocs/install/doctemplates/websites/template/careers.php deleted file mode 100644 index d2866cadf43..00000000000 --- a/htdocs/install/doctemplates/websites/template/careers.php +++ /dev/null @@ -1,5 +0,0 @@ -ref.'/page192.tpl.php'; -?> diff --git a/htdocs/install/doctemplates/websites/template/carriere.php b/htdocs/install/doctemplates/websites/template/carriere.php deleted file mode 100644 index 31a250f32a9..00000000000 --- a/htdocs/install/doctemplates/websites/template/carriere.php +++ /dev/null @@ -1,5 +0,0 @@ -ref.'/page243.tpl.php'; -?> diff --git a/htdocs/install/doctemplates/websites/template/clients-testimonials.php b/htdocs/install/doctemplates/websites/template/clients-testimonials.php deleted file mode 100644 index 036d36e953f..00000000000 --- a/htdocs/install/doctemplates/websites/template/clients-testimonials.php +++ /dev/null @@ -1,5 +0,0 @@ -ref.'/page238.tpl.php'; -?> diff --git a/htdocs/install/doctemplates/websites/template/contact.php b/htdocs/install/doctemplates/websites/template/contact.php deleted file mode 100644 index e19d8269c7d..00000000000 --- a/htdocs/install/doctemplates/websites/template/contact.php +++ /dev/null @@ -1,5 +0,0 @@ -ref.'/page136.tpl.php'; -?> diff --git a/htdocs/install/doctemplates/websites/template/faq.php b/htdocs/install/doctemplates/websites/template/faq.php deleted file mode 100644 index b4772b1f1fd..00000000000 --- a/htdocs/install/doctemplates/websites/template/faq.php +++ /dev/null @@ -1,5 +0,0 @@ -ref.'/page149.tpl.php'; -?> diff --git a/htdocs/install/doctemplates/websites/template/footer.php b/htdocs/install/doctemplates/websites/template/footer.php deleted file mode 100644 index 6fc0af80fba..00000000000 --- a/htdocs/install/doctemplates/websites/template/footer.php +++ /dev/null @@ -1,5 +0,0 @@ -ref.'/page148.tpl.php'; -?> diff --git a/htdocs/install/doctemplates/websites/template/header.php b/htdocs/install/doctemplates/websites/template/header.php deleted file mode 100644 index 54792e93abc..00000000000 --- a/htdocs/install/doctemplates/websites/template/header.php +++ /dev/null @@ -1,5 +0,0 @@ -ref.'/page147.tpl.php'; -?> diff --git a/htdocs/install/doctemplates/websites/template/home.php b/htdocs/install/doctemplates/websites/template/home.php deleted file mode 100644 index 79b2db9d8e1..00000000000 --- a/htdocs/install/doctemplates/websites/template/home.php +++ /dev/null @@ -1,5 +0,0 @@ -ref.'/page124.tpl.php'; -?> diff --git a/htdocs/install/doctemplates/websites/template/htmlheader.html b/htdocs/install/doctemplates/websites/template/htmlheader.html deleted file mode 100644 index 33bb0dd616b..00000000000 --- a/htdocs/install/doctemplates/websites/template/htmlheader.html +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - diff --git a/htdocs/install/doctemplates/websites/template/index.php b/htdocs/install/doctemplates/websites/template/index.php deleted file mode 100644 index cded8dc3fd9..00000000000 --- a/htdocs/install/doctemplates/websites/template/index.php +++ /dev/null @@ -1,11 +0,0 @@ - diff --git a/htdocs/install/doctemplates/websites/template/javascript.js.php b/htdocs/install/doctemplates/websites/template/javascript.js.php deleted file mode 100644 index dbf5f0bc878..00000000000 --- a/htdocs/install/doctemplates/websites/template/javascript.js.php +++ /dev/null @@ -1,202 +0,0 @@ - -/* JS content (all pages) */ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/htdocs/install/doctemplates/websites/template/master.inc.php b/htdocs/install/doctemplates/websites/template/master.inc.php deleted file mode 100644 index c48cb433b24..00000000000 --- a/htdocs/install/doctemplates/websites/template/master.inc.php +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/htdocs/install/doctemplates/websites/template/medias/image/template/ajax-loading.gif b/htdocs/install/doctemplates/websites/template/medias/image/template/ajax-loading.gif deleted file mode 100644 index f7e0378a8ca71410b4cbb6baa30de9f9e8cf150d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2052 zcmZXVc~Fzr8pcn)eEG5g1`-xo!Xn0?fJ_7$;g$xJEi8hhNLeItBLZSrM4+fi2wMb2 zWD`*XQe`Wk2(mXsP!JKuttyTLsfdkSRH~rPz1-MwrkT0t-*e`DelySWyvN(ui@BNi z6qJHRB4}%Cd-Ukh^z?Lhceh9+a&&Y=p-?6!CWC{6<>loZ4rgU$1!x@06=I+#CuECz zkSD|50gX~$S$={s7(fKJU!Q#)3*Z&Oh;L&bQ#IDJ!lj?sv;RE5p*ddFFR&d?IWU#h zypXxDB9{q#Y>iJ2*Cvg`yIh#4OJV;S-txF9b#y-CH)U&@zx~VSrLlFS(5CW+`N40@q)q=CyP!MpDrmaE3Y_HdA91@`3th@nv1o+T)JFW z-_Y3fYjev+Jc4ia#v)jK6x7ZHus))o-~i}zhOk%yMS+l^o9JQZQS2?faWeWQ>Y)=n ziXl%DQTLV3m{B=#_9p24(-HjMJ2?k%l+TNQSpy246(<&_8q|8KX0^HbFq%jo&QY=k zw1!^1OAhmJ-3##@p)*&z+hchGW zigCGMoU?xD$pGKC)>vr2m(Y$IYgp5~kDLD^yhBIJ_v0I>J1Z>KjA1wTQiy zg_qmsyVAC;9d47IobO85J)gS9gz@ z8~wMZ*J2HSRh&(c+x6uX3~EQuz@a0G__(K?$*SjLJ=Yhee|yL~-N3(6bE&A0XUep;Nn-xxjK-}hzd?aWl3Mg*dO3ortP z>IfvMBcMV#seTHq-+DFw0dIRYk3Y2I{Pr4ZysJOW&TM`4T04x6SH%GXse#RPT%A^J zz~~UCE;0a`&QWaNlQ+U@)b@cecTPbTxv(lgK7ah+O-bv2>Yjg@fzTjJa*QaJWFHgd zXXX4I0q=~Tb^l4?PBn%Z(D{b3j_#!D;{>mk2Mh%1(|<9&Mc0)ut1IBv4>@K98k}Wm3A8fE`~2^RQwI?$*R9hFpQl>`zI#AQ zPEKbZ;ZPv7DA1ml7?#Z6LO2!1Hr2q`qsCYbbk!L91tVP~cSqGZpW9O%ICrnApMvv% zFkqc~{fm1LRKS)R$BG`Y)CS9pa%kqUUPKZd1{o#l>7db}ELnIpNacXrvwHpB5=TO_)&}U@bi@fx+ z+KG1;PKRM;@zRKgI`l|wyULsMOD8}`Q!$+qgcHka91L<~to!wCOd=t?eU~KRH{}A) z-z{`x?#AXQAh`igm2(|B`#*dhAbL>VBl{xo*!05@DM-TqNmJF*!XT|H4Si`sk#0W= zM;qCZE%&@ci$&G`E+u-D&AzZdd{o*2H!>_p&?UJ8*D)zmy!EtjG2o;dQE_HSt4A5n z^AFAZ;g1yerclY0!EM(>rd;(wvAJGu{)`4A41h_a5fCKKFoy<7ksqVPNa{hX6g~(} z2{6(m9*3p@6%Sn1UYM()GSzN~WkzejRl{e>y=cP%4ylHMjf@|%w84ffS(VUwx*SW0 z4#VjjVTgZCq|5h`I!9dzyQMC!%xwjz9+k;4T_>9JQCGOBDV;V^D1q!TY;5+Tksqeo^B^Kd5DT%7Zt%320%1X1&4|y zc&A`fojP$CV{L)$pzoU=la0vBr?v6~Lt6f8R{!$z`OrkC6f8(i&`XcBi8jkUMn=a_ zbMy(A6PZaxP8u*#!1r5OVjRr2sJfY|h@K~0T6#49{G1KRCd1U1Xt1y$hJA$22l4HS z1*>PvAWutv$%bMtnZvO3WmV&zCGAX|KthcFhCZ!2QIKLJtIQDkQ&4s&c_S`%xc*5j z6dG%chj)KxjDvkmG_-dD4|O!YRwasLw56mq-$pRK)KHK48E}{QKwP zZ>MyKUMw~05~ZxsrI1KiLY`advc|!3NbWh-YS8Q~S*xXpnviAcp1#8V>v8E&r@N?Y zFJMl=Xh=gb3j9mGpUl*X>P6Y5SDj`Y!g!7-0|rwI?q7-GL&$z_{j4@)YdO;x>Q$Z4b?>c?lLd)%QJ6k|rHLHu|D=lL2i|2@I>;;l c@T5Y*-Bh$tyc#7uvPYQi1ybpdR2R7Z4?Bn+fdBvi diff --git a/htdocs/install/doctemplates/websites/template/medias/image/template/alberteinstein.jpg b/htdocs/install/doctemplates/websites/template/medias/image/template/alberteinstein.jpg deleted file mode 100644 index 869d4762746c970bacc1132b40036ed6929534c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4673 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 CuOQ_B diff --git a/htdocs/install/doctemplates/websites/template/medias/image/template/apache.png b/htdocs/install/doctemplates/websites/template/medias/image/template/apache.png deleted file mode 100644 index 73a380ba51c6c6cb74c868227d0425e0419990e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11505 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 NQdCZ)TF4;qe*i8V{|5j7 diff --git a/htdocs/install/doctemplates/websites/template/medias/image/template/background_coder.jpg b/htdocs/install/doctemplates/websites/template/medias/image/template/background_coder.jpg deleted file mode 100644 index 326d453c8f52811cb8b3077512da3acf1545919c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 235841 zcmb5Wd010tw?6#rkYI?>CV^l;?VE%IAq+BzQ(I368yW)m0s=BBLJ%25WpF_42{h0I z(I#OK5EK!RA)t(kQ&WlzBA_7PJS*bRLDchV+jD+v<9nUo^?ld(&$nB5HapX^o^`K# z4bOV=KR5s9A!5k9yuA>HVMq%9q5rvqJdiP&VoV_$8&izu%rU0Y7&MxR3C(Q&7j(t~ zGY)5gnYp>;V&Ok57g{YcH|N@Ot*n>Wifk?Z;o#(8<0Q1PwIMzPn=@w)jY>16(M)YD z%`I*Ie;@zTjhIvlnxinnn25y0jF{N}^q_?Zk&KAZ{@(*58Nqnxz>^m61abV|=g{nv z|8pDBjW9%F7%>pS-bTD6Ua-KeDzP?kE=e{hdV0O)dEt$+A@91;!(tLfHrKiIUn`Se zvd^9Ur1-Db{?|iGJu>NAS7cgxtE)-ygc7|uFtJ2?AYy!U>z(?pQ$I+jHcTCJ4C#2Z zV$a#hs>4ISt&V&5aiaQ<)tBQAWNgvjy41F!^uo-QyqH##hNzwW@?1SHFH3>MPKz0c zZi6YhQ6-8d`+aZ zX%W-gPT<1F@^O3rfkqmcUn|DOgdyWK@0&7Bs+P8S*DMqEJjAG6&STG&+pT+s#Gxqq* zPe(dJ(SW5>X7hvCFJ*1k>6?pF@)ty$n*yO;KmTLm!u$V<{5ZDl%KM82Ylp)#YAEV=Kr8As^Gr1xeQv6E#M9oZ~0LbVL^LSd_TNJDcd$O)nB zEQQ#49W@#`VJZ|uBf%Id#fX9G0BxuTAs)(MRugiu#A+6w$+8WL%(9#thkJ1m=f{SO zDI2-YM^GLbQJNqx#`}5Y#W*v^em=4!0-2dMtEW5tV*o zr0sn3Uds`mu#v&QzNp>9qQ_AgC)Y;xrZrY%_B>9E-Eh!6Dt_*Y;|FIPzy7-)AZts|i2A%$Y9i)Pz7hdgcTdnwl z*R4zgTZ~W$7|M9D|n#@5%S6jgJgZs9ZAHKb-OKIx68S(v^Vb_t& zPtW(upFLaLA!r;i>)7#hDe)EY?oFbB`HP)$k(;p*;{_o?3{`_({2+}+D^WBiMszN1 z`#Oa&;DK@3moi_0P_77MiOE*Y5hHi8q!z?PWHY!gfeQuMhyhB$KTYf#=7633KM$CK zxkmh%!{upB-DlqnWOxhn_AdF4jC{2H&F|-?4T-iS-CzALmR=M7zBBS-@`d5H%n$2F z+BQEr`JcN_9X-3~{nkUf3J$N2%q;)!A4(>V23*@H?=^4ApML)4SHC^?(w=kS+l)VS z*a@5j3#f6=TkrU0l^l1N zSkpJ6A+6bV>8RgnFZp$K$k6_~mqY`n(w5rlZ(r=aFk_yam^ts!jf-=gkj#Qi_zGL2-gb?W*di3fMuT*83p9t@?`%iS~Ne;(V`>{u{ezUL0y zB@Tck)6V78>idZg&tM1jjh-@x2%os3(3PbLo2)EyH4UwWS4VET4xTFU-?KQW`+iAq zY3X@dXW5@&`!tQCaZfUiEV$w zE5Pb|oEY7V7jPdG0}3*ND~$T7`0M`pDW{IUITg{j;3?cfAWY}?teMG*6iSc$T%|g> z)4WMpB_Aj@6&#fFDMF!})@3|b_x5(yc=@HA5y~9v2S;C>#A^M2bg_)Q)VXo_`VB{x zF4Pa~H`=h{!19pH`6Z#3b`?J@3)jhJUapQl@*;knYiL;N8|S+p>ovsp%^Ql;>)fJc zSkB5hVh@DXnbD0I^GoQ2&2SKX4ux>1>0&bjZ#0*%2m?ZMkUvIoCN5(@Fgmvyc$=VU zU^ikW5bqxWeI*QZ&0p-*D2kkTv?24M-bb6(6zdof*M7QCTIwS2%{Q~N6}e8NW>;5i zNN6%Hz_$ppC?k>P-<=uBSA09NV(fCegSXk-$+5v6--%B)Z`V8QCw+V#U)TQYyB_D= zk!S3dmK||D`*Q7V%juZsZQs`?q`r2E{CMlLNPgjDwOy_(D?i%FvR%mF_#0U&oPYM6 zL!Tq#_&YJ^(M}lnPp~bNt>EM$7(RVg6c4sDGH?kEq5ukTHz*1KXv8oe@|+v4&s8di z;EGhoh1)sn`BUM_&IN}(t0xjxf;eg_xueM9im6+?UFC&K?UsJb9b7Cr@HtUET^HG`&372SV*?%}t^68m$%`BbdxxL1%Bv}FG! zQ_(=e%~$z%e_MLAWYFUFt9`%Sot$61bVb;dW2$r2ZPQ!>29bbK*r4-4cY}bG)woES z!OM?b>>G45NG+ExBsSw zK?Xu8&UAvWjNxH>c8MYy=$dQ>h6B3$t2)@TB8HYD+ zS2i~aPp+?ZnmPMNWlKfMk+e5sZp}}&zTMSq&&25Z`ovD5z;|<4!m2-tEL-?|9N0}S z!AvleO+zN8)~%dgsixQYkOF`l%bDk1=|!~Tx#rUF!f)b|cQl_HO1o7%FzHk4Jk#Y`d9mc&%aIeolc{ef zcW3T<+DZ=56{!;>{VEIdu05{)8`hlWbNO5&3tl}^^7t54?1C4&&+|v!24iUqDX16l z*6Rc|WcfWI44UO{V*JLy=STsX$|Yo(J-D-H4t;)cTzZ3N%|Ml-kGe;zlCT*{p@flr z11Iy4(o8`nQ6O+Y3KS#ydi+>$-@NVQqjvkh_IPe)s{pIW6KeQW32WPRc9864-aI8P_hPP;bMRqjsU=KjKF)(mL{7-!X9+i@a zK~e+3WtP8^7w8WbfVk}0*oKsiq3aHFSWjO5^$`W_`)U8zA2NrTep`w(fZEn};j_Wo zA(MvM?6al&4sKfNmgX1gTYa0B-M1(Kk-U;sUAV9-``JbKs9_hE&{ul^UNEjyWfed(1@@#li8BGHaqLMVA zBr-xmG1-@${_M9u6kmLm@wj65JeR6CUDbKSS|3-i&bHNar}2ef|Fw1Nf!;H!>WMP? z^Bd11^x3I~v%Oneo1S}c4EW&S=v#SK5|gJ;B=C#6`BiQ1JU~odAui$LDwUSe!%$F} zcH9sxQs`RX8AOj2NabpJhH%S(9XU3H@Pjd&TmU{DrhoR}fB_hxHR?lR7^;bXAd#6U zxj``a9I=u_mMMU92&c}oA(0A3BL7Z0W={U1Ea_xPg`{dU)zI*)PFokYIeDT{An8BS z*4TD_{&CR`iZ-m?(W&klHMD?98D5u6 zty=8j57a{|Y#|A7kpwY0VjhDlv8%>+Y!Z4iaj6!j6KICa)P>Qt5Ioo|c2*c-!CMnP z4(tMA#n}gB_~JyY4iYOKDrA$0Hz~n&-<_fwhcYuyFzY1Wx#0h`UH{nCXuzxukVVpVeF z&W-xsL7ySYbV4*ZdK=m6Qn{Z%onX`1%5_%ck|9YoCspd)bVwS*4LZ#Y6npUTe3!SQ z5*1a=5}5NDI`Srr$>fU>9_S+vZN(0i(6>w*oNp5lql1^@dixuIshkkxF|IFeJ|!el zNCGurXiO59XW~wkDcq%Go(h~tB_i`kJ=D_t=Ku8WbDA%_Wc>co&{XTK&9d;6Ff6n< z$tKUM>S|KTu2Wy#KVQ}8$W6;X?A&Xn2`)MDD2iLY$4NUTjw^97S?ocRkh4etKCK9xqJkb>*^3}ThVdGr_b*u#n9Wd-c_=FwI2KgJ4OIZ@ zxHK?#a123+D&~vwesqhU`1pG(?c1UEWBtQjzotZ_dDcGnA?FmVw^!Z5YIdf(o}amt z_eSQUOj~c<(iz2?>8Q}XjKGe@Oh>HE+~syeuXSdTJiH6+Tl;ln+ScI^y{2aw)rLBt z0M9i5Q3bP_$5d%LDKX5bkhRM#t2I4DUBQRNXHeCYx~zc65M0eRjd@8T@x{#;RZSvG z3u|!kc1o5o)`F+2XIbz)IChw#mug4GLa%MCd6LJCpoOjHSEf`K)e_$z5jOgfum zQc2mMzJRd4Zww;0l6`N~`Us<7+-n`rec~TBoh` zYPnH%&oP2uW?51?)!flOwd6m;E)52XjjW5!1qOB5-NvxcAT_;E8Y3v+C~*|0)R(W` z#N?B(Kr4G{aH5sKfZX+ceq3w~hk;{+$fWE<=3t@Dk! z7?baHgDh6jHG|cyLNSDeJceD66EnfoS=O)iXNkh+C0zHm=jmEBstA_^RtJuYpAY85 z@CBnHRS&hwazabu^F29K1hK)PT4^aCSL*~n{j<-ES>>=uS{do>_%T%-YQ*I(r?!6cD3tem63%@cSvZsbo;d+uEnxa7yLRz zgt$3>F^L%|+$kLsYPmEpbFoy-!17JZ96d2gU981%H*QE9L!qjADtD0M;_eBX?A}^l zHJcg`Mv~KTn=Dqlf-2z~F;rC?y8OVrxmA}=0>9HhLqP9r8h{f1SICr5C{&nLXIBz} zAwGF)UdV;Erj>stKQ-!4+8~@f5S~`=v!T@|O4}MZ9D1|gD*V^g|9Uf8Je_`Pq-n?2 zG_|8DFD)ghiS?_4C^Gk##YY<>KU_V}ZFh_*8cErcBptI34fPZFny9GSTA7b=xHrdu zWJq?hWJ#Qo89+r!nf5#r<(ht17_-d4OQ0)ewuRdlCh zAX!~xpDW`VF`XGpOkIO%1~o}XrsDNQbzV&GK%7>^X9^~_P3#x|BNGzhk-0%;V1$=} zUnpWO*q*zjlDG>cQt6$5=dVAlUHRUX_62tFU&d1_l7rLa6MIYRR%Wo4M^wa5tUfzE zQC8D@VC6wWjDGZ;&uI29$D+*CIdT)vo$pmp7)Pf|2CRy2*f13G0dwK^3~DSeUl@DK zfKDI^2#9Ju!1`AiSxucIHFnl{A*n`dPY&r|H!%6j4$gd48|5B87fLmX@k+9=>Tbu} z7(a^Ycvk2@mJ5@QU&$-9b|KSLMUB>Cb(odQ4VyTV02aw%P0Jy%Ld^Yae88ZAgjZ0= z0G1Fx>9XMrwR$Eqbp1D5cYONdYqKxch5z34_DE-VO1#^#(9Q%_F>deK`g~$_==9yP zs~4^J45j$knc(Nf0(9+*p44hq9jNSZUcWA^%&XCk$sc{&qmlTlwEBjp9Rew+kdJ5g zFbl%0IH;d#u}7}Pqmhe8{XBsbF?GN?EV}@TrbivSe&EvPp1c84#~gRA?nuL2W0$tY z|!o({JK-aIB$ZhM_??N~(>?ntG$<4dwi+x=YyoV;X{mp z%F{L-hwM6a=Sq6TS%J!{uPmu_Y6Cyppn~dRork@n&dP2X+d&}Ck{L!8{rv4jTR&lK zm<>oNh8Pmn6M;(+-(L(h5im?7sbq>6%G0eKGgD{Fzxt^7a^c?J!(Nm%JhKNiI^z@P znct=OJ*hcbarb4-{qlx87KvkmbAHpg9bUATLOX@_`pV9o9a;;nz{Q&{2#L-KT`Rfe zO=;GaS2o}688S$>P}@y(9IL~UjaD3t!NGXNHEJF$+k?p<;mRQQ&BctmGWj{bRB1Hd zjf5W$@&dJ=?r)Ds^wqftR|KfmF{Q=ABs=bDE`P4SvQ9xK>m2NrE|kl1b0Z#R*|*e^ z`sq2443&&{pM?xnP=kmx5ecOt4DMHIf=HE+#Ng5h)zztY`ZP3CHkp%RG_Yuv8&3OP_ZXn8m>w$b-wm{XId*SjZS_a`=o`;qt@<>@7HIW2+= zcHOX(ohY)sHx%J|{fio9kMFp(vfPPJRw;UXwK3iTQoT-ySBS^z8hrDc8~S zB?se~Ev(S6Ra*}`woHs{c%Bk>FOG7V630wvzZ`Dmuv0K~$J;0-6?`DJELxoX{gP;x z?g5L1NqiSME&r8HabV6m>wGc)No1LiK+A-v-d8?QCBWp5@qU#pQX*%}RX$uVAT4sH z@C;_`(I3_+a)P(E;;jNkpp`GRNELFt#)oN=B(tUbKT1qc z8YDxXp05J>L}U^x8y=u|;||M!V3lBxNCid+Zh{9nP*(7T*wM9XPFdJ~X|?x{J+DSu z1rveY{l$Y({cFQJj&^2#GTAYBt*iGqNqgDnhOb+L%VhAXL6UX*lf=xu8Zp^xS%q&G z^)yw}VJfbViFdWLmdbU};$SO0QFkMTkIU#S6jt{Z>YNb4@k1s38g5-eG!rYf{sbR;SKLz= zCVjH`n)K7JtHAic21&;Oja;Y$C?vGm>;e1)unc%dZi|Sa(nNL)rhUp?)v_pRW5v1O zi-o#@O>+D5tDAdewiB79(=Rr+_;fg5E7V3gAIzN2ZO%SpZIaZeKDlt+SY#E?w{%(I z>T(jQq|$L(NJ~w%lB^V$LbZp1g0%i+a|NX_QdO~)w>is;?_m|JN2LO?bJ@D&p7nc~^?hZQhyX$@cSaQ5UF# z=Nuc#vU+v)DNrN>uuw-;fJZ=uB(4Ze`_;&%I|w_c?958N1)_tB2C za{y2buD*mx+9DFAI z^oW(Wa}(;LL#20S+*_p!!3j8kIYHcwj*xIt)VqLH@Y1QlRwMecI3@e z=&R$4X8gi8t@w7;Ufb+}rpxt`D$kv1`gf}bSoNkpT-$~TTeg}kQ#$8MumVAW{j!=C zXC|z84|ZP%$8zkzqjq zm^_%l6>edK1~9{OUB78}h;vwbB`&LHgP_&o{oPcsBG3jTL4;Dctm9x=P={hD*q}OK z%SsS1knfo`i5+WULRqYu}X zzHn&uOzpX7)4c!a_hGFTf|8fI4mBxTVI8%WE#t5EH7Qs&P;ajkCSZ+Tw9)PaC$6t3 z(8YuAB)}C7(MH$_Hu*{NaCPhfE>S9Y1VsbtiG*JmeMET{gCZi7q4*-|by}6P3U??h zvJVnBC3d#v&?bsz{8D2))|{V>Pariw!dbwP{K2ZIL{Sz9kzf)KRVkA2JHFg7a$@)! zZ|ondCjZI0r_;JM4AzY3-MCF%4;qHMVkp;&Crks%qDZHgRg1dPj^ri(9KScL+?OG$ zv&Tc?`S@Hvs~V;~f9=3R`4|iD7#H=f_0BH~C9zi)>56Vj7%U4*l}Wf0hlNq1mUwOM znFB?976Wy26w!z*S_T)OB}7w2^YUt_)KP(?Tmox0xR%NAuSsH!%k0jG{`LHiD}o=J zpJ+&+9*D3+05T%bk|_wi<%l7x1KrJ@894#m3)k;&bRWjP^a%gMbYJgNS!kHN>sQOd zf|Sh6`etv|txcPMS+yrfeCe`dSqgl|;$p6yoq*XUfSUuHhv5MM$O{z^`xm_y= zDiGx7bys@Ibq9>|jb)|FqDg%37_qTb+DleCk$P@f7j7BkZ|`w7n2AMV85DT%+HTN9UuIV=!*TK+ct_p(WwEPZzhKT=}r zcC%(ISg@chBQURasw=kPN{*S8!NXLJI7 zhhEJqu!MTLA~z&F{rQslhE5?pRzY^ovTXd8UFM?6aVSv|Ft-mKuwjV#T9S2hd5if*1k9 zuWb}uFZNUo^i&d9WAoiMiw!3wnqK^m?Hi~JTKqthQ1tiMy?=g~dfrB?)hnzJLrYBsJ^P9q!mC9E}bE}OMC>o*l z)rnk^g^j!tD(GmD5rcjZmTj-R+@2F4z)TrEGB(+pDh}9|eR1FGF~OY4mVN?yAOg9P zctC`bAR_~2uas#(KUA?0j7-TFnt$B8rs=4;s`gS?=I?D?5k4#Y0`zBdh6*BT|Mtol zTGi3YbFVzd^^Xc%#_agc#n)jHNm$qdDP8*NzZ@1FyNm5>A#7Hf&kyY*&7V2k_Zq%L)DPG z08xPEcnJL4**CkEezCs1u;7;sN0)w+5dLet!|Gz6;K2>KE2eAP*4vMn-SG4LBP{e~ z+*5je?y!D*!Xxa(O$MJV6KkV;^%?cCF^7@+HGfibfZudcqccCh1iRzLnoGRyVd-UIy|;E-~HtEy!dEO&~NnwrD!_Yk5U(e{QgsQBiH z3Pmb4wcM))sV}GZ-+0Wg?{kg#c%*rEti}7kQa@u3O5g4vBlsp0cLaiAz=BK)VOfxZ zf`GiR!w2;H|KsbdCCASFzU~z7Y}=}a=CCN;;S($F59^y(Z3+m}U#A`n+z=WV?^{2b z_$N>QrWNsZRu)#WZtrc)qfA|`S2-W}v+F$-^~4Zho%mD}roAq7|(^S4tG^_nxSO3KsJ zcatO*QERRI?Z5u@+`gG_7`=0DIuC$r0u2G=5aFf}@d%J4(y=;!6+})VqFTWBs^7RY zek^`ow)7va7cX3Wp$qIDFuOY(HFL7I_(UPUanZR0j{;q-FUL{5W$%2F8^bOc$U)MM zrBSKUl6jWx(YVSVZ*Q?)8B^&`txxC_)>B&e;okff=ZO6NPL}V9sE}Q4N1y&;=igy3 zv($Gj_5Ov;OvPKl0ng_!8`_7qj=IFEuF32gnmWCa+C5ljuaq$w0xac~7-F8J@R#*b z<)ZDVhn(o&K>l%Y^Ci2lVzFbq?XE$<=qHLa4UPN zF%_ufN;2u1xWHb>pDP)#tBQP8QWKE4wjnCeJao0*GfB)Y!uGtFIoRK$4Xf^>X=8i~ zMO^Cw^&trMFxm-eV2Dmg-^3C%Y%M>`Qm$ptV>n8wns0?Tj7nok4VrJYE^k_a(OQ|7 z@gr_`hU0ysU0-va0=W~6$Ym*rq7FQ^z?mR=F_$d_p_M|=pprk=^U}_lPt}jH{&OGC zpRx>T6Sa6WA6@an@@l*bOE$U3*)t=5S}^gwWt3aZmsJx{MXJ#hHOnVA)LXz61NVaWwpU56xX?_Ed-o)$V(c1Y%#=Ub zPo{jA#G(H=XN?eaGAkTpBA>NIQUE=I$c))?9n|Uolsu;B%uv{Gk(pyQ!85xya&MV8 z?ew&K_s6AI{?4T)HP-J-6y50uSUFc#rL^vJ*jzmp!T-6Y=YUivP$yXhG7hN8-ZZgq zgDAY;PF9@P>R{Vs(zMjNG+4)jG^Fm8>rbnEETs-Q>8O^Oyk&DNpRAB@9>*%6ATW=& zmhV+9E?rrUms8RY@Fk3(@h}x7i-zv(5W*aJq~c<$=2x zEnX?drR6dP`$ivhi1h*x>2sJhYe{S_6MS{B4gNS_L$PP@%AAlh1D5mI4~C}vqn+0L za)@8~S!0A@A&?Xb0kD=vSe}wZljT4`Kum-9ipgEKt)%Od{_$%s<4cj#SITr_X~Oxn zyKa{y3{sk(uM0WM;>(w_WHmz}y;nx!KJ}KJ?pk86n#a0XjYfRikK za0q5YrnIoc>!qzEcRFgW#n0H>ctq1+mN6Dlh+M^98JCf~KEyMF*2$NBz2VcpF1*P{ z@i%w$1c8wOBLbs9@dNSbP>TF4C}8#Tswj~^^F!I?i#Pf|dBLGZ%zPZX+#w%d;S!XQ zcIoQ)z-7y^w1z}uUAOLg_n38#nWK@LyQW{cLOYF0W83&Mzx6<%fr$m?QsR0-_+04p zvJMGJ@R`eso9kQ&;#|`NIeF)Ial_0xZ#tI=bn?;dtfd;nW=2IY8XAsl_7ercxTkHR z#mE@QzLC3RK1bJQb%U-@v{lo3ScgA3RU$i{Q zBLw_+L=31zASnEsb?ZQ+tU@ITLT0c&cB#X&`~T^cD&P8c>%U6%rs;Q2Z>U|pb3x$t z9~{DmryCCVT#@l_x7Ze+@NT|ZR`HdCcNVGjbfa_u-f+XjQ*M5KHT^^B@P&ysdtp{+ zzy0gdWibwoqp8yR&EEW=)}~ZH#MhTu1!c*m{itRR^)XR`UWg853`4_lG5fZnA=_gS z`C4|4TCU@*Q;Ir;ETBK|0R3aRWYKnoWAQ$H^ZMYXY0q=6Ov^LEus0w5-W&=+ zMr-;G*}4NB!4*L9k$8YIk3T}7H-cm^Dw}Gfr+Y%6YiIp4fWKeVqCV#;xO zSV2@|`YVSiw#g>_JL^V!2OBF&Xpv8V>#4e=<<-iN5L~{+ap@8kzTQ6~?A`if;qqLP ztD~KMZdSvDr>c0%K(NlG3h!^qFj}@_==q;+WdV8qWntzu)3vfhPvz)#MJL0s!?O1F z7VG$Wl_Gdv_;8(Kki|t+VN9But=q_0VlKugE2F(M2C@@r8TDX@?@-Ex{$QWXpmPFh zfogI^_{YdMp@!%=x14)EuWB$*5w{M+15W|wNVFJ0j0WI^njO_$HrF4DkVU7yJeT?G z)uPK;k1D=S*;QuHy>A(-)pu*cQ!>{DnJc{t**lIx5^%mg5wF&h#fk+H4blQT&g(aK zcRjaO(4kX+X>(>_*m{R{{i7mt)4I#c7I=vs-q8#eIq%=LHtYJ@oC*s!@5~5Rt3P`* zLSD!hlVuLIH*@@DS)O&Io5gHXM;+UyoV1t{YugD$DpRG0m$;Sd+h)yUS&0#Q+U6jG zS!c@I8rSN%P0MUd{bJR{ziwwhlhK-iLtLm{5xzqFxkL{1iu^%Jf`5o;hFIDW@xrNO zKAAqWeb>nJA?df}N!>$lpEtIqzH1w+Yw>*+5OOj+$u|1&vMV*0uB2q#YB(jEsI>76 z{>3`Mx{9aSkkeO}dP6bW4FQcn;*k{V);kqRpClAHhw*3FZ6=ks-qCtU=hzrOEDfAu)+w6T-X>+*kP9|tjke#E38LNuUNqCJWl z1J{H~iB#5I>K_=yW7uqTsDJ0vmx|YaC!aP9ACEh5t#56^6EAVqu)fPDxJOc>|F!jJ zRUMwJ#`U@c2Z2;g+L`Gya{3qO(Q+bkHH0bA`jm{J6!z1O>?BE4eCgrCbd%5l(=ci? z-}g>@@apOD(w76R-aSd|iKM7yBgx`+{JJ*ECBo&6I$Z^e%$$dHW9pyLItA@rAYFUq`v$2cCz;hQZmc+b zz$`*=-u}b1t`&bg_wC{jee>KE*oVj+fWKLYLKz4c2Lxh}6bP0(2=&dzrXu3DFqlQA zzj~f=?BsoWb$`-S!AXJco%5Lf?7Hx0*_~!#4MWR)6<1UmjH=xe6OOCHdxrNV zJL?GJ8yd;025#XIxsVN{cmPDiKsF=}@G{q&Xu9wQ5EiZX^SL?&FpDl#^^LA3rY41BbGKZ^e>YAB5uE#f5gneb(aK&Lv7@VANl`P2? zOHP{04IV_vE0^r)U+Z2lzsk9 z;1P((Y<7hMLKx_8!o(Pwg(HAc400nLHM@!({$$miso(Bi`;q%VGvb^2uJ)75xMxvV z^N>KMsIX-WVEnf&EIzmS@4k%T9t6@DQD-HBcGcMfxHymvtue{;gK5vE{Gtz6EL{^` z)mW&h&iX24seR{mwsy7czKZnMu6Mj5gxX+f`FdXsUgg11XrRuTi@dZen@cTooP|ET zz(uR;)BDx9sNb_|w`0XV`5masjSIT2*>m_;DSqa<{egoCr)ekzTM+yKwv~-Aq|$OvH>_7jUHs!+fsOj%y?s3s@9%aNv*%e0^+g5tY9=KM z(^{OH8oM8597=_T)f_2`MNl3EN&c@XAub2ON>7j~Xn|YW<}SZ9;q$>_#pCLc3f@h%=a}J*tasqA(uz@z@X5NRQ2p}O+#6!-)Vui zQ*gYfsh$<5^WCvCa(~jZ1$txJ&lKjd_^AP^%%4YO*;F$S1DZ}}MSwQO*;+CDMI=z;JOqm&1?CU8aj8SF>}`_Q$Gs+sZ}ZZhtu4|ISZ61in-x*Fm^U;x_0^`0 z_Sa(yKqG96GQjv1LEWDn4q@oB3G_`W!l~cfGXK23LE=*5gVk@QEr$ zfTNQ>{3Z-L64I~5=xQhX1A?EHVq>TB%V17uBkgIAm3Hm`7)YvUVAEWHIvlxNM5G?G zlnbLL!gi&5bU^6snLqnR%gbD|AL!Ea$E$Utc%DjcoP-C*pS zw-VOfV4!diTuJACzUZcL0Z+h-3b@0x+)gWbq_tpOTogs620doml#=AKm)#8~LZ+eq z6{HF=wD4OMo#OLL3*Pc-f{oJ-wRD^phcU6WfNuwV}xZHv`AzOupov_ z%=SZ|p=dx1)tILMhfg#^6GlNTfJQF)0MmjbmXs)c)$@edQN18`;*@THlyi}}ve4@! zZH?>LrQImn39T6$(Xok&xdNQ_=c*Awm;gl5=UM(dWLVo*;31R@?}NLGeu}(!-u{b4 z_ieAMvRi1UWG9-^rnh}VMKB_Swh+VoJf*}oA2bVMV;Ju&&WW)yW?RjHdIz65`(n? zbU|E%#86iT1_6k`h5$&q`KN95gF|Nyq&>LscgBzg8`}8gi`rMXzBI0QNyCLtyBwj% zns_TRBE!&Tos%(Q_^_h}PnKP*^~znvofy{*}zR$mf!=j^*l^LdM)0~UI!fu*9M{Q~y4MkClQ z0pq0uc^Cs+5h9{JK%XKSCIn<S3vlzk3O69&}Q6b)NO1ZAedeiuYR&h<^=49J5 zA%esmQM>QG|9zbpV21WL9utVbV-oHLLAXtVx5KBPT*PIJ12w~BgCD}6HOVf(^X&R8 z{VN#lS1hrULbRl4Tfxyn`+lKuV9v`eAQcO@{Q5c~3(3 znoVOr9aRv!{{Xrg@F@}^LO}#tVa&6TfZdp6SPmi(K_-Q&aH_-HLuZ3Je%!cY)XRyJ z%QZ6Ez)xT29uo@ilIK*|t)Bd*akc8&BA7*k+{?%vhtG)yToCgDh=of;438rQIikTB z33~&3gj*=uW|MR~!hTrqdx#l*Wsn>Y(qmf~0qv7++jL{r`p46J*%D^`<>i0TJ! z(N}Kq;po1saEKvc(BPtw=<|>jF`R6g7*KoUV{oL{^A)SG+jI5$Zz8^`zx1pJv=5^Zv$K&ArXofU5S(?3vs&jRi|=-gS(_T0fC{xn=cG7^u@1ql#n}uM+^E2 z9{jWX3>XDOh8<~7Y1tye%|Yye#FcPDWPmu8qzZz>IUBYk6YX?OZbf@CF1K~*Gjlg1 zCl;zx<%GS_3G4C{PF_u%0k%(W!6sD|v~t5R z0m#Ib8klo}r|Dqw3J>@?umxgg3Q%iYV%|8neSFk8SZkT@t1XR_xK&T`ZN{6IOD!_e zpHti#mmd4=Ouj!E_$GRP+ae9ono3MN03Cy!NMM%)gP2KZ?zC&5528W4W+d{}zP~H{ z;>Yjav4V+H@+kf-jR8J1eO|W3vgjr(KUzBI7`ELn=p2Zsc@+#{7q%|g?WCKBTZdnR=_{Se5(M(jNS9H7v8sSyfYVP-&^wSs;5bj3%klp zQxm+5IK9rlNF8mr55;W}@F~vTS((Z2fBmXBB`zPuif0Lk*iM5U61o6;-3})Y>}Q-1 zPl0At0j)O-1AQ<|R0n`j1=q8>;$&RkOM;S)rqZih^a~==EWMkYv_Xv&wE1)KFf#M;HLhfQ%V$Y!-^o$M(NO5}@aN*P7!M8>b!PKcO zRfk;u_4;P;x8C0r*LE-QaPgjUybzL+yV~+n!8*z4h9iQzx?1P_O;)tc38{Y3Wrf@9 z1Zk6t(#FHayIx0rXil$m?x)6rngDOe*#J@yehfS-=w&`41jEFSU_T3SUt!F3ib^W2 zy8Gd3r?jBndtpLUnt&bnKtSI+@mCz}{?1b#E(847@v+h!<$W1%@7%G3cLAr~8PQ>Z zvjIAoHNmDN1qq|O6H*3ZHc%%#ZD(_a|NATJnU^Va`x9T~?ZtzWuq2=A}hyYMTU zgDy!0rQ1|TW^P4EuSb2F`52hdxc|K9>1YM{Li93Ya;2ATT1U`@TMZL8Zf51AE_Kpn z=wIFa5Z0jqb9Yw3(j~YB!r_6=2<6Rsh+LopF&Gx0GMATC6p)IKq?Fp7SyfM~Pl~dy z8_6J#TfB+WZ4@MSj0sd0Tkn*x7tKrmSaZ*V0Cn{KGsn1+O37?7NepR@0zOCzOn_>T zf}|;8@;wu6BRl_SJgooZbM&RN0wQ2s#G3m|IO7wy?#qI8%Wa!tYYp71!%u1+{VUBvX^&2>aV3F;l0~#}9sbx%+4b_~xo?A- z*yo){2U4`!uQ#0E?TL)J#3r$OBRWPM1Dd0VWd{P%TpAn1Lo|OX3R1RkL)s_ep5D29 z1+gU}TiYRr^v6`WLreC*L+X<1+SR)9&(D^e*MmAN|zNW>Upyt#+dA+N5@9 zV4+=G?aPVC#I@fqKLH_#A=Yej($_a)#H3J$b2B!Po7tIh^O}(uVn|HM%SVJ@@Y@e? za#BF=5P4QifFVLd$^3UCiA!59Cw(RGa%~=9gm~T)_=cbPB}baoDRI3+I|r*z`$kUw zryE4JFiCUnbiE~$s-a*_B!&P$m?>LAIx&eR3Dw$#=TFQy%zQ|He=KmQ5|N;vTx`dD z{A}trdGEZnFZt8U2g)AUOy&=1>`ljBCVsua2BC-zKdm#{Q+~rZuTQllVlP;k(_!A9|LI(HE7R|^n>6p|l(ic=&bU7P^xJ?K z-VY`Ddm|byn+t1Sv%xB1VOdfHqG6b&4~r5qwPF9B+t>Ap$0ypw7+_3 zIZ|G{^NpjQ?ezj5`&fm>AkVTb8*V95WgFyd>a%9b)MDAqk?^UyAr<_h3qdFk!Ko=A zOHu$@A)W$$0YX`Hr#|Ru^XdFKV`&2^zG}-5ce3C1nhRRekOF=WZbc1d!#=xx4DEm#v-9`}VDHDlRM|)6duC_qP=g zp-fhfzI*a~rixGF2j6cyv%zjT*=yUX>!SbKTPFYAVw{2P4@=qe&3A2YZdKj2(e6Z*O=)<=7nrVpY19S-XBe9z!2YIF9qwR_@Hub}pbWk(|fA9wxp+rt_#b71Ua z+oyV9>qQ;mI0$1TBxXRA&4PC7BdMn>&t~rYbw4eX02K+NX{R<{$X{J|Yr~b{D*ngi z)}C*N_U!pTJiP~8lV|rn{v-@pS`uUgM?(k^*#uBQu@M4I!VnMwgbfKBl%;~$21J@b zKoTGDIbm(M*1(=Avy(V&iP;{Wl6w?_8P;bM+DyGEG%qP#6!a zraz5edW9BgZ57yGhZE0e0xjhX{yPvsiSkN-_(7f}ka0EXuG^lUUbt$)9~u-zvP@Ro zu+M>_%mRh^&;)0C#;n@Iu={q=(Z$3&yC?H(UPq(hPYTYg>ukDajHlQ)pbEumZ?!KZ z;!Kj^mN3=&$6KeP!+y(x#B`hD1Yc9#Y9i1l`$@l3<=e|9NZGA9>tMIi$a8wA+EhU_;e2b%V`h7GM6&ZDu{ z>HZ|HV;vbo&DZ;D>`_WgTu;pLGE`(WztTS9h0lp9$BZVv_Z{y4;*1|U0pzc81U(E|3sRo`Df-OnLn&V>q!y;mFe z#oZrc9qMU69HW^DLx@==6p!IQMo$9NHNkHD;f)7L)z5^ZW2{L==hE5VgWO6XSmDlJ z9jA=^)&(z)s5KR=ITJU3ZeF+=H}13>7?@(9vJdDj6^gopOeSOT*oT6+1UK8Vm;)r` zVXF|%)})crA?=dcL&ja!qP=6nS&*LuBrgH##;v*=&fAzaIMQ}h3Ucdt8;C-n*?2?A z(~-5joao)&%7K>#OAS)MLwr}j>B4T)wzjD?z+!{a;H1Cw5*)Ae)ycNFUT3FpD)ZCx#y7K@;1(FU8x8c(s9k?4db4I#`#~y zg=?Qy2XjZUBZJ}dyVRgljV^s?RK#6{nfE6?y4?oeYr@q@yP$Ey8lYhst4dy+>tAy( zuW0Cqw3qAVBtQA9aI&=1X=fF8B0%IZr5YriVan~1dKf9&cy+hI&1EMNmT?^3_009=rL}G}^3yzT|6aS&l?R1#C z?U7*FOwzV0umcdf@l>xFKC|L*#ktwXhDEq=(}>H%jpDKO#X0t$pBJCLTI3A5(;9}c zH@s?x@_x$-ZlB%HJe(af?V9pn82El3-b?2YYcbLN@-VF(vy$4=F~yF`Aq%s4xhQv+ zhe78n4CD|sf-hRl~DD>i}_004yPOZD$s3-c_h#z!%NT$J2~=c7VWDhE4m+1t;W zD}@vMzFTB9mZVzF($GTJIb#ot7IK4@z82OuEOw#*;dMu^ee4CAzRh@URy^{W;c9pWe>aD(d$w`rqUOL!$$$=*jo~1HQ#Ew zxUx7s;Kz~_a{zws>5a)WQ8i@BexMIiK-F0@0+oII(@8p64l-McLcPn2 zLDtq>2dlW1s%?W!M0L+Ew;1r@W0m%n-uSRw)rLAdlbOo+Z-w({@y$22w0`jk3%Vyc zJ9)3lLpfjIbjuIIK*#m}8G1#P#?G$J##%SdL@TzC*MA#BvNo9rF=<^ac*<9U904>a zQyX8nP-`@QJ!J+WNd~zWVtJ&8ag?1vEWJH_*`sw_T_r78qbM<3=2I{2#?$Jw!P(`5b z@KsY5=cW40`-IrGy*$tS$nMJCiyp4O=WkuTQhZjnXmSWX^5XnS{E?r}depwzzOWME z6^@;RF|ITWTppwCf$HRuO&+z~+cTdqH3XPP*t)B^bMPQ&j~G0jhH>{^1kE=ycX4sU zYL%%5;158(2nM-Ka3uOfIsk&$<6W<};`OStF;rRzAxZY)SYMl5JvSJ4KB(TPvj|-! zr^$S?b&*`F)uA}w62^FNY~6ONwJyZsquS-Nb(j-|h&uQpK$q9XEy9 zjhsTR6d`8u;X`bJ`@-y^dk_4L=eW&SSl{aQ>o`QoH9MC~Z#{+s6Ut4nGvAx|Uq}WG zrxWda>~jx?Y2HUPF4?YC&b@uS7BI0|!^n{eqV-I)HtS}g9&~+KH7PN6K`cG}x_4ai zi}5hV(%SGo3|J4KEm8!M5a`AE-wS@~->*?7cbBEKa6FxI6~Q`LmE)E?@0_n%6`6g- zoLpS%FRom;NKVT$@62-|+F+-$3{Cu^$yjQqYnhS1%X!nrobj5mtpsS8ftvz)RS8-Yz|%t{3bSaT*VjV7Jki-1?gg+7^Zt4K z^OPcPf2qt5n!V8|U?s=xA7h*%tYad!>nA4e@LXY2vmLj7&_Ri(>jtw9giUYU8~t6% zfyF!!wiFp}`}{OvG=dCe@=KQ7|NOFe90!Mv_>i7EC;n|Veap&RqS$iPZ6SD%clNob zo>M)jqGft2o&@d+Ku*M%e%inz29ELn76j)0#_XbuBCok&<0#JEwuQ1_Nyvv`0%fCZ zifOTrr{YxD1(k|*f%l8z5_~lFN(}qkBT_dGR8y>}?PDY>rA=OxLUzw?D@(DFeVWm9 zHh02pK#e2wHjNyf%lV-zfCXSLz~3MuEK2K3a_L-@=>3(VJ>5FP^F_m$h)RllE#ids za>WVQ`o&%83*$y+w&`oiBQ|+Q9WI$9)DE98HNd%bR$3REzrTg^IhyOJ#Szo+iZC0F z=uYg!_k-YZ^5>4m&OhB3wb78I*=Mu7Mb?89GY5s*+=oA(B?nb^mL(V+S7*!7Q#ls~ zVSrGB>5IJm|7#1d2&jlpOPlOmPJusWrz%#%%Ek{9l7Nx*_s*>Y71?jIO9y4US7dvN zX8N&|Jawu@72BV*;`Odz79)u8F2n@}(cV2a(yVaR?K!wAA#%`2Lr}D^JrgBL| zjBz|?4u+6dcI{b+X}bP^0EySp&sKaeH!e#!cMSWR9G%MvNHu`nhYo`4PzvBcU^c$L z#N+jfV@#sa7(+#69?JL*Yes@e3kD6f#Hs8Qt%(IK-bMlA;yQ0&a3L&qI5@SCzPjas z?fuzZ+4ednSE$FcK3SJnW|+45#WdpE$Hg3wHQyu0R;?|f-83Qn8250$8cY%NMQMnr zPU@pTomc<@=LHF~^*;Y``+epWevSv_O_gV9?DNsxW6M_wti&t@X$2 z=ZGL|v4CI>XmtGUrzjHhL&&Di)QPD=-t|`=t1ES$2_Uf z4tgTAn&}plVb_Y;S@)MQ0#hbZp84*5!jnJa?|hPW_T#XhJpGG*`QX-#EPU)MdBoK# z&(>~Q7)h{_3oT41Fq zD>HcLkm@e2*ziGZGjcoP6YtBn3Wd@So1X>SrqO=H4b_Ix0>onF(yb#|7 zk=?tovtu?xBL-4TnAUDWv3BBTPuo%mGTTWg;dSF8b(oM%L}$oZpW1bS^nq16p7aXv zmwjIYP$u+>N$LAPTvD_K#6QhXS~Ub~4A@AkYpHJ7uA~fcbqQ(ZJ6vpSgt3v+I)x?B zuE5Wv-@=aMnF#YNZDts<$y>skRK?te>|?nuHVX9dFx9nZkp=AlF*Yk2{b!~sO=ut37sep7QDA3V%l63hL1Vwkj}5QD}_8(4@=oUKBzyDAVN?)eH`XX?l^1V|4er zGinq0dympwYmF34?nHJO9jmM`>8P4fmlQhp9Mkf&3praf@lDBsAci4DuXLt)&!;7! zKz!w|CLQ325$1Xn$AA8^6}|DoUN8odtq@!t^q0G@(LPO6po?w0N};IOBBXGl*D26m0r0of?D?MuMSN`{B)&EG_J-m03rcf~r0-9!qoLDn>}pT{dfKHv`^b5%L2u1$e==XIJljNcC=RA4SRx zV^e4(8BmX|N3^0BPGNI(wX4vi0`a=djpCz}wT?0)-jkJyE~mLp$n-ClhEL%XnT4IH zB(amUf_62}(T3;{d&c6=rmwtzH=p?Qs1Ncb2`0F9M(2d;)T@8|F2!}rT>^Ra_jjlt zw`zmp^m(Ex9SC$+oM9*4>^7C*czEA9Z^1`qkjsob9)yiB#)g&8nV&Ay9%oDp=WWj7 zM*UFOebvu--PLX_aqUlAT%iN8pP%@hDsjHA!m@xr*}Y46vobn@fuNIS3D3@=ipGWj zB9`4`Rr@x)bP1P|)i-fxe$gVxf&$p@5InFPz)p&NUyeNhR1vMmM{~0;Iy)P#7UP<~ z!Ten#hLNw!>Fi3S5H)42tj#&Ir%5594!5f#3%Cs`1K_Xb}l`H zteESOScn+V&b>4{aVVy-D}M4uPj_U55&##oSOqgjt3#$rCp%(ZDK^&AKyc~Ns8po$ zp}G@1CqUmU6eYCRl*gVmVa&~?CS83oO(IL7ap6O`z0&#OF$l^PGe2Bx z_R$TTj#|Y&FYmnY>9s%E3=0G%uB*%CQS12VU?1GMU){+ZS6qL}UXKJM+n4(LnT1%C zYm6CP(&$joN9>Qa>Xi>VxUNb;H4lkV=ZsG~FqI$>|uMPUrN1Q<{* zFb1>)^Ha|~-zGm<-`qA*gSHml&7Vc2XKK(IswuvQ63orLCe;!Hbsd0k3Qc~U8w&Ux z+<8KlN<;Ef7J+)FVW^!vXJ0u{fX!3^DiiolFj4>n>l1-akeK-&dM^@rI}^ElQa=}8 z8$`E(WTo;nhEnj7ZMRGPJ+dv%Ir8h4jA{*qS2Vf&P3z7Ad6;5@(z}TW%Dabg^uif& z+v6Uqj!u1(an(W21-ji|+CB`>VW0+tl3L&-T~;lI`g|&8{5*bZ(t}z&uwgp}kO(G| zfI%xJf%`!uxLw-4s#u7PD>ETGeTrCaJosFa4z+ZB6|9m~s^#}pckMNqnrrk{Vq8G# zwi9KRi!ZhBuvd&44}*jUz+8LmGcMcGN{>);xXfAaH!(T!o^C)k;5{wIwCCubDXI)W zrEY2rfw~)vaIjOiFblgB} z#2Ri@H!_!7+DT)_zSK6E6cD|_Gj`i=d3uhyd!0L~M{|-tq}yW`&supo`mUS^1<&uQ z7X4s;@J{rQppnE>-CB4%vCorJiiX50ZnZq!cJJ1a2Xd)uKaGr?5w082IllfOE;W6= zBm_rNLjV@yW^8prwiz}DRLK}fg+hHmSBR9w_Os*LwM({fLNjShGY6`%vI!-1V%>}x zVR&>fWx%$eHb2KhqSr3G|1tI@CZOxdNII8$)Xk%vk*h-tCJ4&H^|@3A=piz8IkEce z+lNC&o+$(_(%%_dhAvWNF@LZ+Z@<>6F$3~)H6TmK8nAed`EueuTCuK2ueh9EIhR)* z_xf3UNX)<(Dk&o2-E&UKf#V06(5RL{ea9_ocO&X0JWhqM$0PDxJg0dXQmAJOCiu6) z&Kl5TXWzX|&k$ zgU*`HssSAVTx#g0=opCmKl_q;_x|y#VXd}&WWBsmV;s-T+J&BOgWxA2LnJ!2o$d5= ztyvj$`jlbi$C@s=rBmZs!&yfimhg2rZO{~?qiJX&%t{^`xchiQxYQUlX7-=>x+!@% zStYD>!Ayn!0Nwhk)*H|tt^y_oVASPPVj8>49&icnUgPG9p@d$ON?WBb?w3)->Bz(( zS4;b}?MfS|nmQ5_cFTUDv2A(vQw%T#61guPoltRAqNZCO_LVF)|94g89nm+Gi?Y#R0rq8GUl!D&~!aU=~nA!ty2!MQLEU!Zqj#@5Nx6S09L zxazh4QwrKmC9&`N2X_~C+8fe&BOvv6w6f-=yDfra;a0WG>lgBD3qvXMl@aqsMkc}o zSmDujA-kMFko1Vi*w$**wJGDe7dzG#`8fm4uw59@5Zn6t(6>tKVG9XMvJQdE=7$Bt zHGg#S6V(ud}N8UZZ*t`_qrmW;W<)YaFa*7<(Qw;-me`8$A*$3u1sX>Tz)HZA0e@( zTf#X;>MC8FYm>U*W*h*w6wd;j#)HOLpl=W^=^;p)jV+e5LsF=sG%+v|*iX+AF6&&J z^%$=;Zb^1jt@F_F$9i(zlr$>P#Qaet0Z=j3Y7xul+R6g+%C+3fZ)p+>8C_LzV`GBa z2s^2yX#F!e6q25YW7iqH7cFt~(rfindA=snnW>U(@mvUpuG)dbzYMESiX~IeTFl|# z;SDb9ZSVM*cG8tKt4piZ&6SK{#e0Fzyy8at+m<3twNua<-szVB_Sosp1hJxiM_KjX zVnr$~hr+?&mwH>AaS4-2QubKAdVa~ zz#3MdGyy|(w6;IPlV5Q$@Y^`*d$F8>Skc{2e?K?vp)Cfs-4+lvt`m8|+9)JFok!Xm zZYPaV*CU|{c_bIi7kD}Ym#)W3QoWhsje#<_VqsNW2Y7q5)q$FJRPraZlG8FvZcO;%IaXz!jr-2E&VCuG5ceLSjR#={~1= zBk?Q9C&dXi345T|{zPbRVPyb!@vMDr_bJ=ks>bUcBLm<%oMm(<=YN{_5; z@VU-PSz$Qspt#j&C_vMTr=VIP>#T*~DqlfAKar&WW*Qj#_ z&4i6dl0$4ang!u+LlC!b)ZCV{02ORfBfWtyO!t%abshU^ZpOwIRNJKOv-I}6Kn`8w z<>$ukynk{yMh=gLAiXBb4wpo4++|4G*;nkB521G+-~3jfl>$jDfZtq*zH$7z0kk<2 zs#Kg|KT&d4FHp1w3QcD_swo-dDwV-AQA#{O@(IMB26<>0Cx8cHDpE99k5s7H_VY?R zE`NPHn+b`>@9Q~bZMJEq8b;z1EdV$ugE&&*Sw9=zjjtF1?Clf4$Zj*b*)uYF7Nu~JCXb*pqFR%tYI039fR$q=1MP(Qo1^_IN31Dct?UR;_ zr+v`D%)Hfeck`}>m1EN?i8In@cU(&Hb;i0>{%|E(387DdKgxZARkk1rno&+`4s+Q| zc0z#gz;ZL9C@u43g$uMQ5Lmu$!+<5?$@pWabC>;A#VLr!f!=mYjlOWm&Z5Pcr{y*e`%$> zVw50Luwc~G;;)en^t=f_B58$J>#E#*N3V*pJ{+eCY(P@U^uO|14Ah1OF~-0 zGO!|TFiZjn(}@6UQb6hnC_qZG|{E`DKEM(TQvY`n>K z;$II01JX!9k0VcR2=U*pj`I+Pkn;4W*9=&7*IzEJyb)(AZ#|j17%>CA;A;FN&`?q<>9_z z0x94iDR}Ti0B{Wtimw1@VP|o|=xOG4nol5ipiY9pNFnD*OVH2gVDWQwc16Aa=+WF< z-GEw*uC|Fr&4|)muMLrClL}h#mSrLuy{{>1W9~G7P?cw-O(jS0j67}`Wi)*I`%ui* zQ49JIi#32HF3OGN-HOmu)}KCdq5)JU=tRvJC^R-Um9<_T-HUh2(Z{?nDjMU>uq;hN z9?iE6=l!TP4Z_RTvzGPkr+#s#1F=M5Q~dPEfYqGh0EnS_?>hZlkeAJ3LJa=%@YaUv zu1{ZLZj0pKS6%YZ>Ca=sW|GF$o}b6DYMDv*0b8^$Ns>cPHNbM{Wt;#k0t>K4P`t5E zLmLu1{NmW9wKdvSNCaPLA7=j`zD1&xWQpT*WDz`zsTT4~8lU&-F*@xXk0wFf%MN$r zq0dEtIG`b%*s1IkOi|jI5FS8UlJeho*ghgO#EyNjdGTP)CG4nU@DNj;{TLaVrl3=N zvKs&MluBQ3X!o}qf>C5s>1-okZW@%k3ewvq>4BAO_@c$WG` z^=Mey>q-`cY@8^zNqin?%QSYW=aXPYcc&Ll^}0pxRYcYhBzw%?uPO}rF9YNNf)!`< z#PN~G$Y#FAWx?(hFy{I}kz4$~HvqL?03SwummV;4u_=(^V(JSY?aacA+z4qkn*`fp zjJgT}I0b|J%25&@o7Rv&J*s`w1!+@TeKC2CKqv^Mw)40J@0yR3_G;7e!qfnk5CLEX zg`+g(0HdQ+{$bRMabkE{O8|!0R#QN8Ycaxwm|Z$!7UUl^rb35$@6vj3E4arOGyRk~RP7T`tqX$akAX*n^0tY~31x1^#p$=@|1*Em1 zC`g7@Zi>MUU#kB1*OHk$MqynDie^|}zg&#L+DJ(;SaM(-f}cOhD%VuZL?|ey(gcW>IUVQ|wYOqH#5Us84Mc!W(iMfn=k;QF+NX@=hdTvPw z9=$~?%FDgE@_MPzXmnz%3K4NPmi-&vP%DK}AO+n$>vGpN z{+sRX&D};ypR9I6{Uf7ARU;DNwl)`n-92l0H}>Y^%kk$xcp&ymNnWJ$h1(n;Ib`3X z^t=G$9YRJ6WMrrV1Yq&RR0hSloB*Ky!3UKASOX2YV7V+2s;ZFN2l+kw(%P%@%(|m#IEL@nz|`mtCrIpdA}nMBp1NG?$HhucowTSa ze6POW1^}Lg?HS&#n3(I z8B7@Jwn_Z#W+c-YX{OjBIAM6r0D?d1dit1a?CNuowGwC{7TMUf#vn2knkqyLk6-V5Casj{M%LJm!YR|q~r_7S8E%N&&bzS_?uvw`9 zl|FhFh=4MH?-!s-Q9-H+;Fn$>M1Ha+w2Qs9GPP%33_ht4IMosgFPtDV5&UWj8hsPwl+qfqgW_ ztcuZF2&vSyQqX+;dhATV4fE?#K$5Ln=gVgc4qrk*$Z8A7IAnf)@`#bGnOvW}i^qZ~MUSLA^cp&)U*9Y?fpDUQM!OWJnAHY*jjeO#HQU!`#!?(3;}$iBG1ZYV+!{=%6ZL2+`_*p2kHg@63E0cCOioVT^cJg!aZk?84Gqy@xOPfa~rTjsDTBU#> zF+VromBSd76X9WpVucBc4@Ysn62cH70eXC^ZmA$oOzX8v<5Peu%e~#{9nQH>-QB3+ z3xt=f+r1LUldaV!1RzRin*s8BVWJ2)09FAOp+a;3M9!}P))brpU&Dcy@UD*s-n}v1 z>B5CH2r)Br1^AYcD2rhPgJ#^|mV#fVvo)x9o<%FNeIZZJ5p8#bE`=)Ok-GFcxr#L- z3!TLzMIAe7<3NwPaVIw(*4eLXee6k&-jzu9k+e%Mhjyffa`}q6RqbQrxGEPvBEElQ z5^>f~(6ZcJ=-j>9-4>1IKoavE)H@HbzOd~21uK7((6EkuZZQb0&T#ZOEJ!OBUCbL> z85t7^7kB)s;)RNg{L(|=?d+q>y|jdk`n<_N7on+=8K2{sc-A4y^;2M4j5EFl78d+M07@fz`3OcCwIbxwovH4z~{T3?~eS zsLtvxCQXK4(jcbU1t1Yl9^oU{-bZ{Hz&%66el8mSL?b+mj9Xq=ZK;JcXz#k3SBRiX z1M<0*@Ju+8Y0Ur#y89_a@DCPs|E>pDYsUU~+5O(4MY~p$E`I9kG z_32@8;V`M&g$9})Gt+bTkmUnuWy)y4U^!JP~6MyAMur3sTx7AkQ)3D>kDa|QGuRy_&<*fGQ!%oEg2oALwi*ddT5g;3)0ct zh*mX4ECFPY9^DiSje>R=ae~;%13f+VIL|~-h!x=#5oHt+r?WL*neA@uOJW1YS|~s~ z0ATX~=ji)C%MJ*$?*q{<41=3bd>s!t*1!C4UVrjp9<_o&6T^72pauq2mB)(q>MnKye@5ki-`B13I^=3XG^yZ4&K>wK#MNv<5ld3_@@N7AnHnaKm-E@K^w`f=;+D&3VPqx}W$PHG0wKjk;hY#a(xsy921h)A4Bk{;1J7Q?DofnDyZ7sV z?5|3P>o;7_#arkRNo+(C<~3Zu(hjBAiQ1psYB%DhG$1ucC5sM12u27s!;*pS^A7Wh zPnTi^=#gbwG{Z;_`VBom()1*1GA@x{`NNSb@nh%WDNIJ{1#-5V2GM4(mQ-75khbYg z(S-mVD>Z1G7Po7GNY?=y2SH);??Pry6hs+`09xu+0?j}3BHgbrLQqYBW^Xmj|6DjK z>966)gbR)>J!`z4fA%>46chX?Jnq@jY?6NnnF$Rd?9Mo(k}Smmh$B*G;#qS4pE3uZ z9TZ_)M{>#}qA&eXyw)D>?lM?m1?H!|Dn| zu%TiDF`Zn2GY%tL?4YFj9Zkx$-KqYs=TdAl{6nLvbZkFw74+brUEWyw?FUD>tUk6U zr{xJ(Fr|AW;(_($+bd&hL|R*=e_Sgy@Ki0&#iWhlNFz!w{Nsg-HW+!$s*;Bk8YhY( zUNLSMzzT(-X>_RTZc)cUIol~@1Am2g2l(aBpLYh`=w|`CK+s}6vU4B-mWL}RLC~O~ zRFYc`tke*MDxzow;1>Tg-zTyL@dPBvSE5;`uyXY7ORqcm&$tnxdbK>buha;?m4F?Y z(`%WQ;u@z7V_Iy^**RFdW2v`s_QUche?wimjikM9OUnS4a_?db%hEZVuH9iaFgKQr zb%|s=Hi~wQWPl7<<_m?Ar(bmh1sIJ!XXm^nPnr`VLj5Y8g|PPyjP*yAKcl&-EPwY+ z8!B|_w@fF;8sRR{Pf3&eOM~a%ZY-R5eBt|UABek(OFPvF^xD20$f)Y>x?m>$>2p0g z0g_gpw~D$74EYRxXI3rD8WMwX)Y3``qP9ds4wN-04Z?FWIM|$EQ4Ii4*_fdgDVd#5 zw0Cc!W*nnxx(YCiYZxn(BEe4gC^fVhQj(Ui3M?|lXz>Tq79jDrfQSl>ptVh9Ybd!{ z2pXv2Hd)$fi%#BIY7rL3r6;(Bj|!IyN}gokDV^^wKaCp~v7Tx}#*Zy#;R$=E?!rQp~KVXLI2w1?W*^)$FHOwK~8rWz<}vBuns9TAz- z^9S&4;PB?g?Iv7|u8^xFB{^q_)ZKjjhKbp--O(yA)l@WN4oqMsAuvE{(Rn6hAyuZp z+^~S3<-ok1`>NvU(Z1@x^_J{8)VdN<*HllIk{!T6;x>*fn`n1O6edJMaK-~USLcpp z>C)@wqy$b{gLas5+bNz@?38EdxS%Rpk+xOPERn?D9LRqiJodSQo|L)tI>f4bp_^}} zyINM&zKGD(QVq;#A1EZXFAxRQx_B~Qv(+V7z`bDzG9v_u&%2);hsVl+Fwn7x4c*~` zI%9vzwJ)W*?60(G*b1rZL>2h)HC+_TA)Ut6_pR3penan}Drsr6FsN47nT=UeVKy<7 zsRCM)MLk(rr~|%47Sk6vUl}TWSx5p9G~*!9RS)HKqAofmv+ng=J`(wpxjSuCtA7Rn zMMR=4AlVXE8t6WntwU0*$56(la*0EnBrQ#)ZQv}_`55YC(KXz>` zf7!Vi-mpJiQlbKFsDKscDrV60_OV(Dsb!(!zd5Fg6N+u2Bx6ad0AxM#F_uWLRn*zb zv%?bWmMVoP#X8n)IyYyj;G$6?+uu&JYa+gLFV<9 z>IVMJ($i?#cFQ)l3Oux4$3>n22r0ma$m8#7FASa%85i-b+4nmW;!!bb5EH;j_Rs(E z2|9H7L{1<09uz*i@O}r&%pixG!NAEC?WUw*3J4_8HEfx*(*KJo15jv{?VaHly&$$T7(;5;R6Z~2f$suUnqk39qCXVpAFp{D| zy0)CfF;`*t_RYtQw%x6AxfodCZrs9Ukw?h`)%spuho~{FnoJ;xbg|v@;^>Mz)^CI| z78JK0yQ{dy*mlnneGlS3UYgs`w61IeC8z|@S-=7Fy!Ha10KtLz6WOYiX^yX91s33k zm8C#bh4gI=3325IVI4VZJtn2Mi`~ST3o(xk0XECuT?uW-ZO=A)S~x@WpTQWbYf*DOLOn3lBoB9O+f1%Ri;Y%A;S2uYtM0+Z zqwG8v!-$|154+=3_ed>W!&}6D7ro@!4uLHof2fTf&2cI5F+Xye07+8HHH%|)dv6cg ziq5N;$>v|i8?GmhPxw25&4Wc;jEkj82^>`>&S43VKhQ@X;&pUQuzixC97CjQA@CM# zsUjyzhNc?IW2~oumk2O$kOlDd(ddK>I7PiCOE)q$>&Y+-!HFtSY3)X+;rbiMYJ$9 zYsSJn2OiJn@;S;%^2v*j@i&)3^Shc4iD6uI2PQt>CbYEdwClhta!uA&R)#HzAbNkd zzMgqe6a_#q^|HIOf@U7fih-a3u98_{-9b;=KNafVbz^vJZAh>2-w)9bl|YUMw1B`3 zz(#@s>OtdB5}5S~2J8WZ`?@2V2nK*Asbzw2$V++XB`nutHEwn!pkXCtScxN*D|cIF zxRTn;(;-@&sbr@W;0Kh*_!ezg9;Su|)UT9s)t^bQIcli~R)`fRwrgx4wWPG>r2EpI z?sW?;NS=-0g$EY-#^2msm48l~Mw5NHI45uS$jwH4Uzm{;*WzgGLfX6AQkw2nE1yU; z{fk=O&N0gqTv(CGMVFsX;ziydaE9aJT=53}Y9RLOmq1dD0-HQ2`%Y^(K+xvyv{PDI zhT@airU3r(EVc$@tNRelK?sO<;hc&k;Ku-05`bE%2G-5$jsT<-OEva&3m&@(!A~r0 zyxv|AY;NI5w{H`rU>Krwk~?Nj9PNg*Av;Sez<6L3pDjrniOcY^M5pF~ z6=J$x@U}%t%b+jUM;V*O2^%e38Qjlp7j)#|$m-CR#dSv-6w=tfm1$cL4b;&5R=H5M zZe;bL_V-ng>*`YNsfh5*(l@Rwtww_uYf!Tw2HIIJtgF1VHUOo4qL?n#umYAOL)=-#%(&>i6l<`6g5j& z_0gY{H8e-k0muU00xj!r$Rj$;=#kNGF7B#AWcgh45&6pQ_&>~xe~v$DWvMT}X)qcZ zcp~=%At+K?x^t2UJ)r zHf93{gB`f6y76jzZq$+C<_1O-hG3@U=u%2ZLK4Fsp;*k~hRUSN(^x!tmQ+3EFQ-`dq=Nc$6c0cru$|o`d+fkiEf|t&Y@w?5DEpB4i!&Y$#>zt*pzRP~X??+>o$E96HAn@nD|4CyqjRJQ0A4_X zGYTsO-A-b84gV2*Uh#kCI$u=@=st|;!!WqI%5=640`APpQ$QHzA`k`$d3huP&e$;I zNGZ-`Al=9~3^t;j%#lVI)f=}Av``ubJBq4hM&>eX%d4sqdlO>z)M}-fz>VjvFDHjM zlU#`6GySr7R@TPP^$T#ch@A!w)#h0ZtDzWcOw-#UJr8$r!uS(ttID1}J(ptR(zJI2#~MwF)@#;VNw~=#P+@Q_7NS*2Nki$oS>k zTs0}_DyAWaO%91RN{r0m%`>!I>;TUek8w;Y-fz#WEqK`Om9kN$O?wGqc#}R&6FIMqyH2 zv4r;Ly~R(ac*e?T&{hb%80I}-{D5r$^Z>pbNdr{_;JduyNP_(Wfn{GbyzPj(mXA5$ zA3qc}-aDFJ=a0cyVraI4M%`LySY6wd!4x|JZPF)Sg&j*p2VE}ixnOTEV8xX{<+N+IY6 z7l||oalm_!$^?B>)&TqfPB)Or7s%9?CFg4jqYaZX?Yk}ucGrTaRS$N9`>f~#_INeYJuY?xriU;d$Ou)OXOgvzkIwtLlb7RJim-z}NR!x7TPadvRr70WaJ znA|Lw@$FX=CBLfPu6DHe~pXt%o521`@?l^qvxo5b@H6JfhZ0VZIZgk>5>9E{@!;m5`Y-@VHsfWz}!I& z))$|iIKTC#d72U7MI(bR63Lt-(UeS>KVC@o!_cq0NJ%STsCZ(X<#i{UVNxzrk<~54 zP@BQLM$xp(bR=<@<5KJ&8VCpgYw=YetM=tv?6T5%r3KS){i8a9sbQoRR&DSV<5pEpzAV#N(XHQOGdcY!5ALN-jsvlr--V77=cz zwA$E(ylrf+DGU-US#^;`-1q0^MR`&7!d69e8Fp$=C+C(z4ru)rdNl?y$dA zv~Cr9qUhzD*bj)4x^hH`ol;*T*?DAuxb~VHuG?VJB3u|XRwDHg z_KRyl=xQ~NF%vo6Q{w>p^(^AlE|?H5F1Zh zjdUBZ-OA~^1DpJH@G#V|`#_5V1;2KX<;*$GzOjQ5)qhL07xZT6^uKlXJ-3^>M3R;Ha_2wG=UV2e{~P z?U7L97a})MVyfGLorYtER>92TIFlfqo)iCP~F-~?ccM2Ap3 zS)~t@bBJUzR?GFc59*8({2#P8>DT+pSaH>|E5)HK8TE5mHRzrW%u!Q`cpHp9`pq5- zk=le1%IQ%d(h{T5jDwiDQpu09L4<(Opw6`DTT}6K`J4>G9QVYRjS<#)t$U7|0tr9e zW!A!}DhrC&*IXTWEj|{rIWGUxe+M9A0DFkT#J~%XbpRD1`U@9Bh|43@Bml5sfX5h} z*-vorRX4Vf#9Ce;Dr%Vg_X#8ggF!F}_~(MMgrlV7?Nzpm-ettj3#ADx+q{^zh|-hZJt5&H_@=g$s? zs!R!`9w}bQCJtBpe#pEr;BVEYtx4W;(5UU923nL$QQnmOJb)#g8J?9@6{ zk?T;?HXkHBfQ zbwY>HE({YKTzATtMbpa(c+zl2M!kRa}pU_+_=h_JH z%;3S5t9wi~n(TlmK&Jl*65$L4rS#l;YDPPxqc*E0MK+J5)MD~Ae0CEI7!?LvdS2=A^* zca#3%+Td}2muvnSSViIgZ{5K&et%H#4-jFF)?PQgD@ zFO<8eCJTS0_$zARwf_Ar#BU?k6+<&=83R8p@NAv_3;jzD$wJTq{(SpkH-}<&=U=a& zYZAwPj^p9REq;4}0=6b?R~PA06YA{xP(^cGSs#bKi?>sV5WFUq7Q(N`C5~ z=75C~f~Nor2M)p_Sjz8D2fpN@H9H&nNKwLPKut5ZvMWTJ4<^#oB7Z9X5%xlPqL+FEWWD$7fQQzpEa;w!}n^$=56Pw;~6zVpXx_@ zYBgnXXPtiev*O=v8rYs(-TKfc?YimykJ|OmemPDWytRAK`p9lKP7q(j-PidtVAqqy zG0I}i6~_E9cRFf&w(9SuFLc?BI(<{+ug-}QDZf6r`Qc-!&V04r%@1<{%d!vK`n%{$ zjESJywEpC(c?~x~S>BObds=@44?j~y`6FEq_LH9Ek=;bxk=<{;zyB91x8EwbVL!2n zKk`eR)z>heTfX)gcYobhcuL#NH&5Jm>)+scEi2QXw|~+(eF1-Z`&+jU+3`!>Kg3_O zW#8>uFK|Bon76mZm%Kq=%V@>r?$3#8z0~|Bpl~HS|B;6Z-n=4sA}_II%;#T~Z>hqc z)qVcnlAg7m`?n%(;NK3`+<&2e*%jVsQs9teJiH+559U`*Y4cmxxBi0EuZ{&uAumJ^h&p{nCO?#I+E@mD8Jp zHMg}#yqk+5!3Qt5&)Cy}JL{Aswh9?NfJ!@N%N{^~PEX(7iJHVnKY%3t-(9(XaXl3U zAPxK_F>N!TqHXmhI9z}1vgc+Vd?20h0J=UdzWHcSsA%t?snwi1;drC|0J^jWG!tit zBK{Cr(M>V|ELWJ34~PZNQlS}P&FfRb>&-&p((N}?QL}jiU)q$ygpmoj&_XD5i?()? zcB|xQ$p9Qsv|l5AMKAJ}svgA+E7?m9-;SkPL9HvXYAo@V59tAvo?+Q^E(g&J&bs$| zL)EtGldv`ZEy>RpbHZCH9kz8N8{_eK%>Q2mBqEqazdCxNlzUqdd>o z_kU9#aG3<}Ag3V63KZsJEI!vW$ezi=ymL%Eg2!zhEcN9*x~=i4+M|8Ej)qugpYf}t zeQAB)KH`+($H;VoFRx-W)rVCEePq0noSCI*C7)@8VaIjYlfh8t@-bXXRSh3N@>8<( zy5gF)n=h--RNqj0fG+~Bn+zit{Jsr?o$x;CfoaMD`eQ%&yJbxxgjai=J*NfF*6Z-q zE2?M~u@LstRvRpRV;_Pd>>ofakTPE3vSJT% z1wnmWsnM<7e%(E_9t;ZvhQwJ)K?}nkryQped!&7#feYZ&v|Os95NM~TzAWt)>34V) zvpB6J&el_+B|a3cd<>cK8@fWOfStlKH^gZ0IazA0Z;P0Q`e zYxMoST*b%g$$KYdJqS(iUj$|*G7IeZ0W@ktSOA;TK=?jGm0}+37kO{?J{fL+aDXlW zNBijqkSkg4QzX{5$#q1l5?l_q0+w-80+u|uw#sW-A``gs_^IZ(={;xXmmlc68RyS}Z zJ(Jh|7lE(bFi=0x`s;7DYzD;TQ-w4WCB6cwwmT$dG3QSf%VN1iaibW>0FYj_@Ms%+ z2nzUgaJu|{b`Ku;e`X=S4mpU6F%aZn9-%eegq{^Jn>XZ!Xu5Qg!6isgYs%XEbsXQX z0T*uR+aPp4ll;0|VrHu`sa#hTvi%F}5n1G#GVQ&ud>XMG@O|Z_o&(#_E}^#)b90oJ zfxl`&T5F?GIqNLUKwnCa>$gKqzKZ}s{^UZeDnG~T4WjbDr1Sqm^wGTXi3d=%o?#F- ziZ$ju5>)|I;k8J4T$PGM*z3<^p-*|Z3_@@u_(JOfo@xcU`#_YZJ^DW>qfK%u=G2G0 zwKEA0`Y0Ih0jY=~c~Z^<$J&q9>)Y?Y89AB$RO^2fExv>ph=%n(m5-#|`zY^AVBao% zC_S{#tVu~}cXTzhwt~6kU~x`ApME`H_ucmhs73&x(5SKpN;FWKn*ST&f6mjXx*kvK zagKx667LG+ehy=O9BTw99v})m1$Djd;I`B&UZ=ET72!DNgg5gGsHVPN&{uSF45$^{>YDuQotV6TMn=i z){$v=UV~w3NMHgvfp0)IXOM*Hbt^i#8HHt(LiE|OA3%Go_um-(PFkHIGI-oOcYnG+ z0Czc+CD|z?ck9&?8=yY&muZDMfJ=OaNfQI^dHnT1Cz*_t|7X+8d80FcF)i;D?+)p#TCm>-$kBE{ z4QDk)Fn%<~Y*BrFA?raQ!cjGvETt$CpC}9fiGTL|pD~L6Z@j^zFL-!%3{R6!K^7R8@k^@Icx#E*4t4ql7gdcKw^ay)m> zv}y!;hPcA@A6tYLQhLW73H;A%*;;DGPqE6spAp(uP$$(ROL1Up*1I||4y!W3M3nXYY zXlWM5u*D;RCgd?gfK2`W9R5oYwx<6X`rk{yj1>vwwDwxC={zc6%FG6AO6C`L%mZ<` zQW5t@Pr0=Bipx2@3Rnps=-7UT-o0;nB2Ffnh$C9p8O5`CwxOIl^9p?H7=Qp{zs}4X z`Qa${df}1EYtyMiIdqR6!|XqgmD^WdOVN=`$>i2&Jad%e`v2HvNCI>p00aMjLm|YL z%khx~lxkG|lKxjehJ625n1NcS0UclhbH(6U7g1N4hFy-`j)tN>fao_LKu@~H^j2PX zt^8fNsQEs!ro672N98?a_;o)Xaw^1yZDQN-C#CoGWtRLVej- zBWd3GhgmqQ_VPcQ3k@dVz_7a)B1qUHY8X3%iT`2DzYr};er);FF+$~lFW^itJ2&wj zr}AU-GV|E{0X-E-9?7)ao^k#E7{$+T?7toXvTZMI{CD^RNEo)i>M+xGdG$sDEXj5} zVmzEq4cWQR4DVU6V8T0Tz6*`qei!ivl9qA)_V~;40PJue<9#ijAo01)hY0^6(Xq9Y z00bEVfwl+av3LouPH2aaTGZ}<0~8pj186b#gy#WN?ENm>F7nvxHTYtFhb$o8^mF!b+W~JSISTU< z%FVp9NVl_HPi8FrA;EC=!Nx6b0Y#}!=)eREqe^Ptx*7v=RW%B_Q~3eVFlXpg%`F6L zzYnjC!ziW(o|&Un&%~<{!!x6kSYM_Ulkv#2fmn&?O#Jje72*HloTThA#*JtGIsKRK z&u?(R=~Y)d9Kf>$dlOY-E8-k~Jb>cDvhQL}+UQkpAoy8DOzi*x2v|CFdX)RjWQ{+Bg|* zQU`#j??mM)zI~NT*?+O?3w@%&J8xH=GbpW5Ifjq*h_p0>gY1ZZy2oSJ-BaW1U_Tf6 zFIOKA|1vbm4tPIj!#H1uF~}%!3Jp*aP6?0tW~-`eS~R$5^u&n);P>0bH@*0cqjFq* z&+8Mz|GL%NpT^0bTl6K;GYV=p@jG#};v^vsu8+uX?JfPC_yIURGLJo;3CXA9&Zl#& zb1#%b1%v>TcB~}!vX)4ls)i)nBwG~ZD(7almi}GsUF4@q)}gvqcEEiY)umV`r5Z^8 zb?DOwlDuvTAX@$*<4ftt$B`&`yq5pWuk0;)00|veTi$_nXIW`QMc~}-Eyxd`1FxX4 z?Ce2%|I`5R0|-&H!i0=VZ;J-L>fhoWRf+x~`U#69kS?PeIsKe#GnC)~B+>^|kSO~n z&sEYyts1h}O#ndFUiO`Mj1Q^uqdJ9_Cr)V3iCHh~bgjIIRO&tfTXE8hrvraa`e$_F z4kt5;MCEuPds*@nMd_Pz^My!~ZUf+3uO9xX#!))b{G}lQV0|9IW(ttOqe)X~XYTV4 zAkEN9EeX+zRfDzMo9vJ&e3fH-j9VQFx)bx8G_bQM*(ldk83&qTussDqB9-e*?^3R#(|a?5lx< zU#>8gdmz9%kwgbTVBVt=1K1a=Zq6=U4&>y&kO)65R2dn501c}m79K#mv>e_0IaGnU zS9w9VA-{2seM*`*<{z(%!rSr9?AwN~QS=EH>ec!~(KxGW57G^=qS+S18ikp}& zH|#t|K1W`vs(-9b&)^0QYVWMPCXkR0C*Zgrf&6h&jz$AsG+2{Z#aPEeBo;~yppW=n zszIw!AW^vi&(kh9Oe#O1$bK>?1e{?v)Cv^-aoXcS_E&P88=^jWzW)^8!^eV4j>wf{k#Pj-LgXy zkT7)|hA=3n^lr;DO?K2rdNQR`rKnr9sBHdZ2}vhh;UZ!T2h&7T0tr;AQ}{Uew(nms zBR}#794R_tRx#lFKjyj+6XF@uQF_eFd_l|~ymPf)=oEW<&>G|1;su^<--m1=f#Wea z`%OcBq@7gzpF-w?e=A@7=$_TfaKaejR>r@{fj!r9Cedc6Wh*{oAp0dk=N3>!!T_L6^8 z;oo>V8LIzFYv7DJfLaF($lvI;?5B4X7!(3>8eZnPo@}_h=W(gtwWnRZjT`g9xV(M6 zQ$)HP`+MVVHqsJI{>AYNR_X`*TOxyiJEnEjr|NgTmwh+Ewc~G^)v%Im)hF$bV`3+g zfz10?^WjgNxOvd6%70hcH?y0%U`C1QwjhuSnNa2MY|FIj%M3NsADy=l`3N#ntfuk2 z6p7kQb^zm&1`~pJ8Ej-*!MEG8<-t|D;G%uJX#J_eQ=V7f-vuOqe>ZR7 zA>Aft^@Gb)V<3U+IG_j6%WT3wG!)^B!P`6t+l!B-x^EAdi-~;1*h_Hu$_~nvqe10{ zy2}c6ZNLXzP%J9jwEi8Bg_VjEy;+!e#Bvg#HDZ_kgm6@`=gR9r=yFgb{*p?vLLGb} zdzpB82P#G0J@HQ|cbKku0I3HjesGla`%FV1Da+^s#m37FPxnK=Js}P-RPKxR{E=`g zzST-k+ax=*`3K-J-E`wO-Yd}Y10;;7?dU(Z)g`d}n=F&nk~oyU`E$%BHec@B!$M z3!#X76quQKoutd(39DgL1b3X?p;VOI$+exnJ_|7Se4J56(HkW z1Qi;rSa~h9ISfXZxZcPTjo*BoSEwtHC|E7kiNONmoL#)M!`k~k?6?MeEm~9Q2Px^v zBzM7|Jgr(QEhjws9uS8;n6j_5)d*(1vKdkS6Mon?0Fx3;p?UFV^Yx+faraHus8FH@ zRvp|9l`VvK#io>%D%;< z!LBpeq0i^16zoMww}?b|dCmQnM05X=In~@64+UOl{3QyGayye;+vg0_$k`mF&DexBRe8KP-ify~5Qp6)8E(+J z@Eg%c%67q4TUXa%_Z`)LZ#ICwx(d>Z9}L7*slRVvNo@9RsE5E`@v)OP{@Im|5*(F! z+rqMp#Xe)+y;t(voagyBad-7h=`L5h%F3keMYjR_+USF(wfBY}MKflds<5ggJ{P=~ zD4-Yr#FtdA6V#&ch>XocfRtd0FwP;RMaF^4wiq}aLOO^DB*lO7Lb1z*((Z^#DJ>pA z5T@MhD%0Sp&V8^^I+$Hnt;XN^Du$eN$)diN*4`9y;hr)KahyOxNV@m!_Cj=Y=jhS` z|BUex%jLzsM`D5H^Z*@4Ssld;V%dOjUZGjm2`GLt%YDx6lW#Sih~IF(e}NRk>KX4$xgkCf~dafl=~> zD0?FP{({fH;K9tVioquNm-L7l3!~KA`F*A7ZjVjhzBr&*XHR#|meyIE%dfv0j_tQy ziAim>_8MnKU~D^6k`BIW_`yKTzu0>tZA^PQ09o(bI=ySS|4H@$BI5xN&9>2bW>TD` zhOrLM9Cm<&XO^h&M3v1RiHLabEjdWStVOLwiYoJ3`X*9uhxsjz7$75xs+NmsL}&9&)MdibU%Ew6_y`sd?(#6Xuz>W%9y7; z(X9G{CD2XZ$)u28$Zzl)bBEqsKbB6!7@LYKwks6F%gukf+(b2m_#!U+1+@&&IsF!0 zlWfS%8QYavja$%XB#p{h1E(8jkw#ozBp+!Wome6M5D4`BAVzNP zfvC{eBhx)Vt@FB%E&nyOdM868d*x!(1|SAW{^m;vJCE_XrE15m#fJfZ`FnJXOB>9g zW05UrT9<4X_>@h0$c_aDwCqR=?#op|{1U<-9XP252S96OLp?JJ=}5D1s+esh<`h0Z zQ>38aCvJ2W%Lz-#`AywdS0*bK^YPajl8t=;Yz@znF5Kq=Ew~ymDJ9Ih*?ncgsHwn< zR4Myhz<~G#rJG9ZWh}Z9XUZK7!@$W3S)1zv=*1@KZQ|DD?Z9aEo#V}s$by9v>Y8&4 z=l}?FsBWlzqtWv!#mP>Nv3R&Yl{%jUgV3ObfUTJANmwfn+bNMB+N{}_t(rIp=)2)| z_BR8EZ+?0#WZXzD@GuzEEkjuPIe%;sUk!QA74b8j#TQv$1Z;1=OfmW1MX}EnW`)NI zPzJVpmsY1u)y`oSc#(x))+#jiV|dR!UN;Sd+s7;Ht|*||$BnGi+t7($abg-ic*bdz zh)iM9s%DsEu#nx!Ji#`IWARY+x(ql(mPvH?F2`rA7}BIg;`=W=oH3sKGUe57Vn5P0X3?Kcq(rtc5LVTn1_v#0IaoD z84&WD4gE;=uN7EpZ%GzCDm!irmqH+AbtTx(-*{^u@BHn}qMCTwm`;S$$3~VMy6^B3 zRIkFB<~Zqo>K+3Qqg{n}%r0UYN%4gA$v zMhjlXyEhx<4lV_X6DtI2W!fRbeWZ1(A-39d8C(8prsuiF#y7Q)BDt6DED+Tx-e1Ql z79P)^9vx?Gz4c4G@49!pN;urOtrb)T0~7D5xAMm}9p(35BH=K8XFlP8eq{Rsqehhv zoXori&C1M?$`sx}3NUjOz@9SiU9u_(sz)43*($WMBjwm>)w61ag)BVL6~xt)w)@bf z+Am&iW{4rK6RhytEh$goSR{XoQde=X$wUon&&@N_8!b*4Hs%61Jy3O-xl)0ssVGg} zw;}nvr%rM&H<|9m=>Nr)Qhg>{F#JsB^2hGV9}0h$Nzt48gECXHR_hZ{WpVxurjBeB ze^vDpN|OxA8tp0yQYL+IB9&+{JKMOd!GeBMuD&iy<2o!qf<_2ZD5SUn{q5lNUR4sByLhCu+dGt-kiq975DQ z7F35nI(9VphCX91jVfX}nBry4FOx2pf?K}kPMnDD{a1(8-l+ zm8vR(;F-=Jq9tZyK0TM;?vk_brS=2JTCKKZ!eHKBVaJQBT%+uvymgfcUrHLm#S(VT zVg_YAv5}KmTz|lfnw| zx%%Vc`L_PO#wi*<=FzpeX%e^>Xl|o(+b5yTTEuxUgf{3pe??V3^pZL#m!A&l}oV_zrs-dTvn3U60(tU9w9f5zArC-1PlW z{TxB6(+joM!V?S5WjWzwbHN^bf2aoHTT+=C%e3PmQrYZ~U#h}DvW~O27ed`JeUr54 z>!bDky@iGv_Gx~Cng(tFj>=eN6~{sBUXPXRzVrhqBYStYJmAkMQ{>p7s6kEa*h+K6 zUnu2y^PQtv0a(e`M=1g$&eoo}f!CR1DxKte&eRN@cj1}=18?XK7?n3L_-|o-c1$0O zke`+O*N&=(>lZ(X0-y%f|98gw;Mi=6%5yigXOG5E0+bkFFKs8xK*ZH}ryD@*7JH1yz zf1-S{NmT6cFS~n07~9T1=$aJcRYgFqxU#p(@ajdq0|akl5s_Uq{>ijtY*uVIlyGM$ zdILS=*`yk@z}(~TlthYmlsG@sCHljUUjQ-^7ji*Y^uQe-&wcvlExClhAoheIRxx`I z@8SF)F0+CJIjS$5b%Slv&LqN+ij>yC@`OuvnmaZBS3L9es7Q#FS$~Kl)E&2zLL07#t zb~?w~x%Scc<`!^z;;S!o-b*&){x%KC{1VXEdFbtb$~g!+;3LrxFKnUOLis|)STS>5 z(6$B{XORr%jLfPAQ*)7gAb0);gl3xO@d=>V4&Gc!!$ zJXQDd^H~sATrloI>Pj#StT|vF3m+sh)}_&=ndo&Mt5gS`{4nyIMfX7Fi%PJ@mX-j< zB{EDzCdg$iFSwDV$zzYhbRSjFiZD8J7M)+IA!JPc+zgq7t=$ENb_A?QAMeEF)hTr$ zWpLU81?wU?uTD3*5J0zvC^1LX#roTl9u>Pt!c~jJEFtt#Az`ePLKVW};%EU%pyfhh zR#?r56Th?GXd@q*h!`4!$sByb<aa!p23X9-W*8x6 ztFW2FCKj~H29!1DiKnuIHGlN+P7@#f$J7oanzQg!7Wrot*eeaQO)kOEvgB@q`U=;e z%j`)mnym57`ZJ@DpV30$g>tjadkz%3{mTTtx#C+zYz4f&~%I;Gj{o;{`DZOi}=l6~LvImMdd2M{fd$g}lecP2Gr&UPu! z!xvphKEXH@_u>B{(OnsuP~3jbB>SoO%nmuB*s?|lldQE6SF5_hq|_=+z0ny*dXs%| zW;-ls;(OqrgB{=C^P{^^XxWJEPj}vTE$ziubrR5bOd;;ulRW!B&W??Dt^=h7Js49r zgT#4+6xuH=7T>nIa}aN7Ai0T~GAVbwGmNVnA0|U7;^AtWumdDu66Au8z&AGzdVXLN~v_*Dw`**K1h74zM~P*H}CsTsk<>$1_o@hM_h_Y(}TEQOt}&FNG+l zBtB(+Ye|3oHO+3MrWysw9?>pqqBtONm&aM1E-8DOLraQG#!R$!uJI>dP}}OTfItM% z9cDKRbPbyU8qB36uYuJ}(}-XAzL!u!9`W+f6CUI;6KzUbJtfMI(SnC>-)68}rV@1B zc>?oj#A`Ty>?^8MB|mfaarUmppqdHk_^U`m(cdYh4EWVAG1n(`e%ifKH`c#7g_II$ z&T3eFE&g#GrA)n6akg#fjU!bxxGZ%iCqsNlybl2vG1gSPyI`H|O&SfCH6YHNdF7cG z9_SuEI=kLDw(#kBR=YWCKdszhMJB*YOA-|r-VCwo96o?X`uArm@FaZ50T?3QQ3X{o zmI^7TnGLXpF-oi)f$^8I3Xqv8bQ+be4TuU~={NCY=B>d>k!^Dh(Z3WNHpJik*hk6R z+$n`VkuB#?{39e#&%@QUBl&AXY=e<;mB1rMyG-m*U7AC&#+APBe)WBu5co^H!Mjk- zFc)N|aF;Q5Zz8W^Y-Wyz{ZCi-S+b z%pssbXsL9KT7d%KAM^Q_I4;ExUf87O#T=f(BpSy>oql@gGQ_RFF^XU!dS%>_>dF(#U4qBF?1+u+v{Ss@r)4P96Z8sAZ_TV))C7=2IZ9)@- z5D2l5MJ82YTW^}ZRqeKqJ%7dMVN^2p#u}X&nwxP$y4){4A_a2a@YbnvGvGt$Ar-qV z13R@++X~o9#O@~~+3mmXsGB^i{C*v=!nxc17$vn&(91}@Z?lF>+mx{&YmXJ!+f?V3GL^GjhS4}|3u zLRm;kHaE9;XcF_`dFRoI9Wq}1t@lz^WY;R}6Epy|!?|v|uGqXTKWdxo^sAY=2LeyM zC+UgBb=OK8Bg@>D`y#L0amjT?!U$vh*sQSU>X(sD@p^$dzKm}f$}Ugq$i^(MHJvIr zO*GRvvgGUc#0safn@o2t%T;{i&Bi(GT!V`g1%ohF-__Vp?=|pPd#K@m(PtaWQ@LFOr2#~M+{uX+RsT)Xd}<$M*bpq;R~y`RTL^x zQlR-tptjY)f3ClIw*Jx4Vszby?#-d2RcS|e*rAJ%NEkf17kO%pZ-nkfy+7YVnLAjvJy{@NdBY*IkniD_;}hNIK7SeW<3yjl8wxvIH262IEs{nuHq zMO1%=kH>pNjFd!-q9DoIrWO?j^;w5sTOo!dS}s zTxbbbw`kmLc%_|(?1uvr#$a)!A_S)($Cj&1rE)NLVNP1ql`o`uq zl@eLa-9f}gpR=iYyye_@9ItpRhh&YApUW>QhQUR$FD|{?9!vwdABvlOdV`e0@g~ov z6A~CD^ONN!g%Tsu^lBM_rJW+ zL;GdfuUk`Rr)j(QBBC8AQYTJk_;_E`*ZO9v3k&m~zZ~=F+j{`1sHzq1_X_R}&r!&| z;biXLTO_1_sIru9C=a`7a+~{}9;Pnn=F4{+irE@{G;|U|djml#6h@Ot{*i@jqvxh& ztVto&huF9l04AoklU|{_ly*47Ur&Ax;ol&@^l6?{nO)2Tc+?`+=;XvFu zuGDyu2UEyWlzd!h2j-5swWSr;VL-hBmLJm4n2Vu9?X&^ctI}6%zFw*e2Dg`lzRe4H z`>8+Fhp4j0b^?m2xSZ_j5pW!v6b@GDRoc#|r5+SHjI0w@jc=);JPWl`RO_^^Zgug4 zQS&TYxiT2k3dX&VnW=FKpd z2TOWdb}XHvt6X4z1V3M*4*_I}t1chQjV7FWG@?qiJ!0Ta@KAhyjQP3_XlcE%Vj0OH z*^tf5qvzktF=2;hM46c#`@B9JaXjAw*HG=Ezp7v@WpA}n)8uU0UaP<2E&t`OR19oe zuyQK(AJQqN?or21nzDqENUeDMc61urFMwCZ{dORoI*pjbRIjN)fQ$_B&Hc(b`2^4( zfL$cDlIZ*Cm5c%(x2>2o2Jlw(Uaw? z(Ho{!p)?#ZP>FjnBrXHe&69AU#UUep{s~Jib&E+QdQc@@0%tf7XsGn^e{nH?t=SR_ zz8(H?wz1BG9qG+-gv@vRo!kfKo1I@c*YDe_@fGI9dakCR#0G-(vw$#gAu;`@fR7b| z%hHRkUvUO*8<`V#SQv2#cieD^=9$100_e?aR_6li8Uq}Pr8UJOjpl3eLcQHFNcpr3 z&JHM(Xi=?23Xa?gvpB^c_{m4ljfVZKt0(mVdg5eNdjf%7@ETsz$WurY z`*MYDrGEYXwXi{!UXR+ixi$GoEAqDa$aMbC;qUSZZ&5M1>6Jz?6J#Dh&aj9=GLlYw zorsCE6H`j&)js;7Ju@_M7`d~GyL^^;l(8&@)GT6Uu(dD|9rg0s;M=p%q(--@b-qJ4 zzc0k4rm71pCChlF&Qj&o+j03f0f~k-r?j*ZBk*6&>lV-eR^UDxrXfXo0aO}M8U3El z&q%*5x20pazZUkhN1^Nysf*f}yU*0%@>pO`8q7^@BC?XX(qOO`N8(2~dZ`+g%xHYf z`>)Asg=<_b2i)F97F%p?4#aIz$-vN3AkJG6RJB8VQr>af){4o8>@MX>j&{ZFt{Z0! zU)?MRJzLsCEZK|v)n$*tQ?JNVEq_nFip)Eb~qgmFbCt%3nv&e+aLRk6?<2U-3>t~ni zzzqG%iipM!>Z686rwv?CAdHR9iIgJB2Q679G_q-Hc<&7N2U9H@s`seg!N%5lqL#k@ zRV+;M)d@6rKVsaMV1T9G1}ZeW_`02tm}q(9B+DvXG}IMEa&&t;XR!o%e{Bl!hNtTe z-~}S7}k)6U~v0dxK>*pk5c>PjHx^PwKbXQRIGpYH~QLx#c5^000@OQme#zHepf0z zdvJ3H$q(yd!2e_#$37=CB{I*owN}5x+}l%S*;9tN*ZQt1%BSX-U(xW zUjUx)oj|Ug!;?~<59*fg%pWajk*UP(>r27P(am~++gJVX_43VMqG)`WGErCY!k?3r z&wQi9gJO`AcbnoET#|4LV{R1O_bcknh5_}y$==e*>~HPY{EwE~igA(zzA^j?2P)|l z=}#ma6ca3PRAE+@81#c9@zC`3DdmzpzskO@aB2@K*sdoaC<^IPzq)oP(4UMFSXy6C zw=>kL!lf|V7~)A2bY1UDN@7&3Lv$8OOGfh)gGp$zX#&*z<&P}ny_ENYIF^=r&A+lS zTygty5-<Qy9mnMF3OW6cn-YKeH zOZK6C6&T3Kkqf#JF}Xq)h9<#dsq+mD(+US~-xb|v zi9f!@Cu-Q6teMdeR>#yw8Ch)sz2g}#vbO5Z|AoboixN@GwbJ@URpF)Qp$>s>+>( zuH&~%-cPcr4uylbMjV@&6MU6bEbhIlr`NNrn#z$|oe(`7>o05XkRWUYGC+&eZ&|%v@jX!>xD=#c?3q)b}|ERfcgWW=>3! z+e%*?I0~GQZCjW>t>_yLH41x^qd#}(+C{VN-Y=2O{qpUL7}zpAdX(U;DqZk1D!!p< z`neer?W(A3)_A2fO3BrVibs? zycd5bVz^HP?ixw5qX{Rg?G#bq$}!O{znHPmZwvE+8wmVVS$Zc87UIb!tEECOPuuf{ zhazNWkRwIO2`wGkJYe_olD5J@(&2s!EERvY^cZ|J1lt2UQ2m`0IWPZIAY8KBZGL2+ z2mc9P4K4jiaS>WaM1LK$AIoS1{k?wpEHW_xE#frM`_wYiQDB`qWCHOz(qzY3>GH3Y zjVxCGU_6u}a*}M1I$~0jf()M|gP2J)@d_up@q_dPo#Qv!n%=*p&4b;0Tl=!FDQRTW zsLQEqetzQ=&Z4BIuX#lY8X5H~mfKulcyCP8!YF9WXyWL-K~H4B^(2|eM@QvkjT1pmi_~zoVl=8xxiQcGmgLnzytjD=<|8ec2(=dXJB;?2nR2p|q<@d%n`ldB; z3u|x`0YYU|USQ!U>MHGOZfDeDx|$aLX5$P!74fRz>#x~y+x)I{G5HB#m1OCN34=awYE2sbpO+>h z^hvp~K0cBmMtekDLN=>wuZd%Q!#G#7V<{)E1EzLq+Eqmo6|M+3_BoEf@l;`5GDYWh z18SoynUO{Mi{Yh`L}TMJkvWs}i{=YKbiW)H(IOumqr(zh)sG`T#&=yP@J$p)$3{kz z!sT0624yZuK5w?kKB*@wEmJd^`-W!S?9AuTa8EbR+$gG`PabXGSZf?TxiB>o7Sq>k z>v&-a>*3#b)LW(PbND&eYpS8@R^Wk__e;&9)gm&e9|7R99$6OMz@Viho8SqIKCX7A zS|o}^A+|V-<&=_AF>?9aS63yZqjxH>fmDL_+S3D{LpW_;ysr7W^k<;v0ooEk(~+%A4fXeOnUaj=R@1v#Z?0guOBC?S85aobORU{P|tW_Hp)tVP}8=e&QkxeRT7>AX)uD=GTztROhqk~7u=bq^pb&2bq}DS z*2Kv=-is%2{*<;5AC*-pZ`sbe)l?iiCOQHs+jG#uGB*yI>=}2b*DSrI-5a~J+u(Qi zM2SY3=c0;w1q1OGu^)F*b1Xkh4Am&oHfEcXwD8d`!;+}zfuJd4(8G?esWxTp>$Rkp zkumz{K=`HBnm`toc=g#KQhkfJun&yEBV5AGAZk-NF}jK=ko87XZtb%T=|JU1xq*?Z ziy_(YKGie%8M42n7IXB)LLA92lzRHQ$nT^lF5a>2vDu$3)%f~-73J#)>mBU7u-W0K z{yMz(MSy$Ia`Fl4Jck*9jJ(h1H*LLNbc`tRsV-H@?2yodC>>J3T?WW&r3E?EhV{`i z;+Q+p%?UZt19MI$nSa8zHf8en-vXX`zIteK2=BGZ&^U=@EamT5BXuMYglcAHoi|Vj zBa&8>B;C{BOpy=CBp1FQ`Anh6#PyLvQ(sfNvgl?YVCeEuxOtS+h~}Mr!g1xJ$cCf5 zHov;*6EIX`BR5;ZYNA>T?MB_hKSrpvU#W0lTZrjI+p*My6^kaG*1x(h;kUB9&n+x) zi2Zz}+!Z!|0_K{SIX_FPhF7Ys53r^8ze-C;y;AwhJ``%4digtRZVtBb8jxlOD$o8p zi^WASyj^RfolqDi<33r5JKCnM+#A6Q78XoBOt%@n5FD?kDP<#~)?q5%lHJ>sv&=Bb z`e;p;|Bjn%j`H?>Pwj5wRCJ{Rr5^ohXidCZ=ws-KeE;x zk3;7qGqN|V*czjJ>QzdV@V5W!S>o;%9YM;BXV- z=nA4wg)IU{E*Q8z*dBRys^=vO$h1gxLK1na2FFEabTkG$@9RsJTczng;`0Vt3p;bD zm)r&C2RH!&JPQMk=5|pZhj?$N13m~ZfSx@rs$zE7etP1h=6Hprug6kSraF;=;>$TK zu|G`3Vaqhzh__Psb8okMF^#~gjaF*o-N(2VFFMDrCtCt@j(yI~76qQUyQdY7?lE1l zXK~x-$R|ECGh1Tt7^S|XUwEk1QAatEOWH}Dg$8|;gh;h;EVXxdLhqBWYV_KRPxEq*mBlxvh3T2IngX}J5Fzo9OilTkq&ni(qS1X81S z24>GG8`Oc@JVOVow^(Rp1ey$COfE~A>T9z7_L!r}D!Jq&`IH8NQglzUBtD}Gi97KD zd&JN>y|Mg4OG!SxthNodTHwD(24uPujqF#b_xj7R!SYc!G`C;*xKgGRVH`fIbXsan zl953a>0@Ib>-xt%=zi%Z_`3F={B@vmj_Zo*myxkE`5rlqP=>yI)6gK@za<$}{Nq{m z*EUju(}X>809EfZh~LVPe2`MRipI*`v`M$!5t#s)E(<<~r#pHrDxgz=ztA1fWxzxBOv= zQ#4;T4bMf6*rPRk9Te3tP71L~`Gb4V^cTf%>%s7$POmV1C>1VIJs~=U-0Id7&(Ju2 z!Qhx`rz@3jH|R3=ga1mq=2lp-;)^~o)|4x6@QN!A`3EsB#n)RrZ~$IOQ5vNQfnEBA zjd(?+lhWrVn}Ub3mvRIp5ojO-msgJ71WA`>pKIi?94NFPHjM4!tH%Lem8?ccu!WC|CJ<7y@ITh)K^RAL^!b*G$b+(bmW4uiPKfsgMB@I zk8}Ca6cd_y6q)Bdhvq{+IHXdDCXkojVScIgb8TOWsy*~_5t)>uL+n*Ioty%AW22x( z63qUlStZ(oNUaBA|gA_oP$`snXhr93_XE=V~bcx3^5YPKRvD7?+WrDdTnK0kOMYPpc2_jj&TdWdg^%5dV^s;)3=weyD zBwF+qy+uv*ny^@cAXuUcB197T?wjws_j&IAwa?qmnR(|oGiTm2Gi4Z>?e2FrWIv;N zIe|>7IrJ$S6#jZc>VmmTmBg4%k6CLYx`wWdEwWrze^dRlypG?LvDGJ*)1=Jk)}Ugn z5Y23=cBd4bCVRG{i-GK-ZjPV0ua-$0nP09aJ&OXDCm)T~)2Lle=JT8rWR1OGA`nYiA#pG#xdmvOb;5@Zr_%yHQ=1Uauy~ zd_9=?QlA#ru?O$EOKc@NZMUZ@j!Yl9Q)raC$GzBJyQLSG67UlL*Fc%iVepadUhmr> z+V90GCnjh&fi$5CS%MBAWm2fQhG1n@#kU;X$VPTP=BeI5_p6Y#xZFp?Npi>XZTEb* zL`O&Ti?5j%FUZ!UMysW1$ z*x?(f4IjS4H+t(HgTca+RAkWqgC6Ll(PQRS5_=>dRYxh?zK{BX7W zd2JFC_ZSnka3-V~Je@sCRJ7KYQ%1P|@=n@F3R8McqL`f3YNyB(>qjLc8E_J$LvlgK zFN40de#?P=absq@szO8dFUikZg^IsZUM_tr#5TV){JPtXxXm8+N??Ka$~7j|Nus&= zUg4z7;k9(9MAtP}^(#!vq#nd*hh)L!nP9%Ps>TaaEuu2BM%6+0cE1`b;mm!qT2R$W zVs)N=8tEN_+KnVi|EIBmaALTByPM5$YxHiHH`8I&jgFLIJ=bRP&fB{8R9l_G(qkRjuBR$_*;!=`}dV#KIN{OJAGsagIpExg~f7$p#;Qk9Y%GTyel z?P)(g<)61Ep!`x|7?YhG)#{kL2NpLS&wrTAJi)n!;`Vzjru)S4nmViGYo66ty5;1E z&XT7e>N?c$-=L7~L&lsUAoVDH5?Qc}Jj{R?4E=!7@nuDOI_XuA+pmcLoX7w^6+(Xq6Fm__nC zZ01&@KC{l&wXqTT;pXFS)g9`Gpg?brXY!A@YuDX<@pN?!r7amOG)z&C2PpAi8jC9c|yWh;l3 z0_iHLo|UQ9D{sXZ_Hu-1i}`|PY2hO%D80=C*~_bt6VToXph32G=Uxj+YRhj+ILIE{ z4QwX-O{8KeTW|MT=$zw8)ZE?hdpInCij{|3zrOEet^>4ij&t13ZvjF4blh)o>ut7O zeQggUYEJwN-?p1AfT&HPBMEY_?>26KnZE7V4KEY&a&f?1`gayE+d9}YOz-QswDA~t ztxp$?et3mpcaWCRxjq)1xbylc|p{<**Wb>-TGlz2iZ;ZPh zP$j<^meS9Vs?0Ntgq4S4d=d#2k5|6bfT>u9)4ecR4e88|zn)A5Db1(B+khP(EpU@% zvCtH9ttTU374swK2@eOTOdtIte+Q~XDf$$FCYMDqz@{o0TfBcft^T)KwBBlNhg!xh zms|3gk@&;1v8UUM36-0jl~3Y@TJErhO-<+g^DWS54=>-5p@-qflrl(I&(hrYn8?-& zTJ@{kLN?dXIC}l2;eDF~g3+fD&q{SuoA2C885p8VkV_*S!89y$xz=9_F%!K`o=d(j zAYI0pHB?h=sPH&TkzD<7?|{j>?@6lL+WZllaDj^imDq&hc#)DXAQ$C^~l z!o71%Fv|zhX@6qK7s;Ro{yIB58i_pjKQCvr-eg`0gTu-1AUhgOG7eQrrV#OTJ+hze z#ucu>I)dV3j;--EEfabUJNN7f^03MdeD!vdGe$c5)R9&IjNr+OZi_4KLM%o(h6~ww z<>@m*y`rmQp!5f%%8rzlQy28KeMSkmhpr#%Q9OP{`_@$V?ZZj`;A7urC;b?+tn6c&KbcT-2C9_OQFA4%^&?YZhR7MV@{oa~8gmt=ZtZJk+I0usT3iTxE0 zXbF|aL8Kj1nz$1rd)6?e81omZeu2oeTzuM=sgTmOI6)R;!yA@H!%UH7&cRuT5 zbCp`mpp&=97hmim_)N~Qk9qdKTP#+ z(FR)+r;UUdUYwhbp+D4B>G)HdQ7&~9D%2@FfcTY-JT)_}2x?6wt_T!+VDG;A^0OY( zk{MFwWLmGp#kQVTM!r{pru$K6;`z@ z#j{Z?;sZj_ST_g(b%TD}>?BA;RbdYEw%7oXAU(1V1t%3!c_K~wH@|$hUoSaZ`0}AB zY`PIX-Cm9&`#W57Zp}LJ(GRdGn)kXKHmkSX$uRa{LSS7Rm|Qn}m79}iTkF@Tg_=tD zgHTVR9#{MF$ubM`b_gbY@Ng7-+IF|*nW@c@D{5?H2|5X;L7^U=e~rB)SbNg<^COW$ zZ~p*nI<0sR>B_d^&=tef3Tk27MH_9epR&NX~~(~(vQi~t^3dtL6h)|qS1Xly!9t&C3rE0t*N`MN?ldbOHq zKZ^&2#6u^SVl!B>-F-Le`_lUNsihw9a%j47Zffzc`@o`i`!-4;K`DdJ%X(J zW8!v+#5EO;4(Jtnf6KhAgagG}8UiXM2mz}7>IolrmRnFp$m`sbt=0voZUfBfa)8Hs zy{LOu?yi6rC0tBh#I&q7pQuv&qT*4?q_rU%i5jTVb(69GEw`GIiVC#8Hh&dbfBg057(#@+;Ayx}2sQ?kd!0|$ zAs2lnD;twQb1?9^hg;Ghf97D)@2YgzLhTknYL#MhBELAY$g@J*j8M3pEa#4NjiOA} zwNzrCNXxv?#LN8odod=N_i6pujknj|yyv<-#~xf3>$olL*zx!aiC7jM-$M5EYZX2I zXmg9@%5cV-MS&d(B^WTef06BfwoZ2UtRE-dd<{ zyQ9^el@VW;JZbcBw-ok{^#rxKu1MDIG}X@Vtf`Y!B)-Xk1*!${Xvr<)fjlEo-l@AQ z=CAL8-1%yS5|dlm^u)rlF^O*4mc;xMVKcQmy-aP4)}NDrCWO|U4<0dUa;%9`>#E)_c415SiHVfk%R*hWgFM|9RI<}MxOsr{6i zXY9|-jRKb{6jCnM`PR7;)TF}Y>pGNeZ8*b!S!Mq+Xxm+iMLic6w{_ZN zaU7h1n2FMU<^+n-_?u~O0^!*MNR4`YmAo&8QOE7T%P0gF$l0${V*tL65LpcyGShc) z%jcg9L@*RJp8-05p-#m}%t$HT%ql$YmzM}?Hl0PFy*bg@%xo(*DLUDuEoIzJ?D0d@ zYbW;T?GTN=kFLI>L+xp2pbWL|#oyn@>{>wlQ(nBdo%`}pVjr7msC_E=BQ@PEOg#|u zwh(wZ{_N$FtvX=-!Xd(@GohkAMn zdpg9~p+r%OSiz#_AX4pd5*Gp5L|a23*V|N!QLULh*)qIeR=rZ|s)QG+WX6NxwOjTZN7c`%WscMWG1X zcdhI1sF+ZQhiKfZ%v|{bbBH|)gI10SUQvtPvlB>T&RaS5%YD6_ShCP^s2Tgoh`Nm|l82!;ZZpJGOGK4X9^u4| zBjw2-1d0rFvX^MDz=W~gxmgQ9wWZiyqrQo1o}r$Y z2TAs^WeC_HAtbe*VwL+%`#D)%0hV!@I%FX|_inh!cuau1p_>5kX|*o7{qD%F;Z}2g zpESGBezbWmC-&mX7USwWHe#&BL$77)59}UH6j3>+lX^M$9X+Gv-|(pB7`vQfrwz|Z;R90)JigTewiAT=>L-WD_#pN%jpQ}*o`${c#;iyb7AV^+Ka#=Bv|+`GY63nKlFU%wo|DMHhx-03+XLTO--${6+as@iDOe?$M$`dmJ zqq~lwb0mwEdz7R`aTWBBIrHaw62V+SV zx#@%fPpY7TFK(>4UJN6}H0(({F;lz%&ypTO=ZKz1hE1YN~n{IwzhlqjV~f^u^@067yB*#TRO z>71Cp?}yBUJBrDPKK=WmbgS(78X#$bEl~{SU$JK5?C2y_jX31PxM@SR#S#&=2V6bN zDfho8#kV}-acp7fF?4M6Rh2SXy%N!v9b9Pxw^s25%i&S-QSd8%Ja!GhB_@C$u7n@fS0i zCdw3zsKuqO7Yu8-EKTUyxrIkUWeO>x~5!&tpT`qG4K=9L*)`%&f%suK!{UHTAbRjqj`if;Z_n z$+|l6aE{<5Eyzuc(_i=|s+zJ#3~Or$B%m{KGg;LWvC$Xg(ZUV4x1ygmDl}OUw>Vcv zvt{j`5A z1gj{y_=@>rRedjp$x1q6 z%wu=w^0`T+bo`Qf?7byqU=ig)6{~#gS5a=a!jNi`oJyTlCY3K%Fhm zV~4KMq~HsS5rxfKOWheeSj<9npXfwqZ1ugYNVN~Ik_wLzw?jroE6)Crg#QzHRHTQQ zo)Ujvt<%O}6>0KDwfLz1P8k;K`Ya1=r%GQ>AKgahcGsjKO^#6qZyN5--d+mP%8?wfeBP=(|vQ? zjJIn9!~_}jBdr`=(s29Q)|2!iq|7U##|~7PykOfV`y105jy`7L6C#|FOhEW*X zfpv6H;gc7g!|HmIllrK@m<(P6PtFhG)uW5;4TZp>+l!k0_q}0T6ly;lk+pc4k!bro zGpst`VJ)W?+dXbtVXTTcB^J>HsSh-N;_EF`T{HzWW=ju@wQW!}Vv{ycAxbrBnAdC+ zsvukfQjs2RSoxk?F?^I(T>QRW%H%>f|NS~BzWBXhNx%J{&XQ_3!eD*hJRQpi=X#gz zIWchfw)z(rUusjA(LShvN~e8>qdzHm1Er`&cXQkn7l*OM>X_eAh{ey5VRfFTCVTlu z^ru&VHee|Tj)g;oV_Mh^s!dl!+bqA_;@@Qh7w4&1xrb?&L@#iEjZ<#W*MN3Q~<<@`hj%V%9NsvIgK zlod2!VNtUyl7P#5ZY2pSEt}mj&1pBko$|}+9LA}S(O|?z`+B?g#_ntYrAp^_Dx`EG z40r+#taxTIp-xgn=2h*A7m4q%sg4r9TupjuIsz9iZLA$wKw6mh2*5=?jIAv0F0vsS z)fk5tog=h%IX<|f1g3+PCZwC_G0~!uVq>Mi_O_M4@4U~p%-ie65?9sDLI_%We#x4$ zwk(5l-WJ3$hk?Kahy6cWzuDMtH&p(Y*K;QM53fM)}xIsve z1ILGlZ4fFum&t%IJy+it4yBiTnJ65abdtDl=b~&CU-^9LA!?U6e^K=VpT;*X9TGvghdY=MroP1ucw@~)Cjj{S~$sXULfXav^R{6JJIi06yF zOg)^H%1>od`d9;8Oia?s<83zP`mte2qnj)e`chI)317j9-MPJ5I<}fmU|(c60vp*~ zaalz*<2;ur{>^)m7x<2wd(Yk1>Hatw21Furoi*2qJPuJV(Ia1>Iz9WK)G7bmQP-VEH2=zlk}lZ;v|9f>nEY^;SivBzxRp{pWPg(&?{lU8*TXB%V3eiqZP) zher-n$+X8tADgs=P_yrh|6JN@2C1xgdEm;^danpw&uTeiSz=MpFijVE`U zS&@s^ydo@9Bc$$^rv!0mtCTFsi;~Qir3RZ9&;17As6q4=>id#botvTe!DO3pX4s?m zcW0;0*8~)txavZL#;J)!&a?-f&-Y4CxIqZDn7YS*j^{C8XtD}17(^+Qpy2AfeC$DMnOJWhs8Uzu zZMsTYGKlKq1(v$_Vq!pT{>IgqpYb-Il;G~WFgU>kFq$!KCB?H7Wo_=Ek|Y6gixt#E z#cDpFY1V zGrWqYwQ%74P=DhALcoRS`HPjv$3L#yU3d36`Gf`Le4i&Hy;v^_K9&ZB0pE&sx5~2_ zB5C2!dPF^?0Twb3xa6F#;Fg~es)rkw zg;8=e%yu&}RmsYny*#o0dX1VtPl(xk$LZ+_Nlz^gKh!~tMUsE|8JZc7r=)RvRU16% zC$i*Dq2~mZ%ls07WiG?`%<{dPkFcoU{06>#n_^n*lF;x*M10k z5P5S0)Ze`#fGmCEFuJU4Cy0;H!DWS!+Z}NXwak9w$Spo;dsGkBtOwOk&YI3VQLikn zmnAGQ%JZn4(11Zng25EyPyxy3v%aGS3hjzAJf&Rf70Msn|H89t^_^-U?E-S)pkc!} zDK`CI#$TR&(BQCSBaqbQ=kZ=~pvq$1$J>qP08zGT2-29O1wFC-TaOvFfz)J6)C19M z>;nL40|mb3fTxj*0)-rzcuO?QqQK&vuAxjW5#x~6EwmlHsW?90U#Ksu;Qie*mo6*v zN0}GOJK=xB$?o{2@(u`+oIC<^zsZqyXR2aUke?!zvZcxO+&-oCr8X~ds)D=V8#S|{ zV|U;EaQ8%T@B}9EU2dU2AmfWq7vzr>{Ej3lMg=>n6eQ&NLoXX$JW5VZ-Ho(TvlrT(iFxf*zgmh;htyhz5vPToCn3GEO5^9P*!Xh*IyxCS zV{)@B-RFeTtl}y42+Jnj4Y|gQDr}eFZF!dWu|;~{T;Rz1Qh&8m`tO)` z7aR%58k`#}#8!*#wM1#6LD0PH?%(G-Zzg;}=Qe>~&lsP`JX66^Gx5%A2*6JGpJP2M zskMI1tfuCq+Oeq~T!~Yv#OFkU~CCp~W|O znVoRkC-D1iAim9Ad_f&oGixPth%Nt$9T&XDaqo1=Ta>Dnlxn*w?yN7$v=hq|4%CLE zOP|=cYiy2bzP)xcdDC9jjWGOJlzjrB-ZI3Ne0f%8b=2s40Sda-bNh!~!NAT^V>Jct zZ6Ht=rzAdSW&AS zsAZ#rGq*I_*Js@XbHPTF1ps8F@4A?eba^9I<3$WLbVnnfKhOax<3d*Oa4|Oq?Y<*G z;9aTbm;8x4gSfn~s?>9)B}deA{@(7B&io~^)v?(868*CrJf9}_{ znirAzgKgJMIQsQI__ycj#jb^W?oNxvm8$BVtQAB_-bkf9N{R35CkIxY6giE7QcLg8 zDTN9X`R)e0Ze)?gT7I74mX4y&&~PIEF1y-s zO2iwZNB4GrrEGKkruc%RgkrXa+sL7+zmNVEk%vin-~wOnnoYBYYdzRVyIs!6>^!Ee z+wSJ}@!qU0hbNv3X#8O3o34iX}lzb~!~r}AO} z(-RE}BZe1Wk~cq#SrR0*8B>uT3&94`qg~(#?kIiJ@eM~#{_UtAT(7+6zHk*zR2}#M zp{Z*Zz3tvepojHHd$4&sxer5O7w(05XT&rx3oCuMB1xF`>>O{$g}bK)lQ^X%Qu>Ho z#MFJRZHduG;DJ{pw{j^bvwB<0*HuGR>Y=rWJzU`9PI5bJA;D1}BH#_q4XG*(FJ^0( zAJyKtCbddCC2DYuVB0cXRzD{Pd+q+UJ+98!@iO=2ec}Zl4_#+r8mVy6=NVi+Oe4YTvy$3mOpXi&tqi$NbiD=qG~RAb+m=7Ax0 z5BGf(sX=@ZUv=H>^0V`qq~3<`Hnsh=;>i8WuKm(kbx*KLZL5}KFqV-|FP%JMxlwiU z!cSC*)}-@5i=k9xUMQ^+p?$Jao^i7p=trP_8maPJBOUiZpoI5I#)bBXW9+ly@D-OG zWYrKvy#f>yr#{pdgeXC-U}0 zML5<1A!J!-LZ#L#9*-CDmmM)_zI{~2o22r$BML#Tx);d_Va*6P*34iK3HgONnJyJG!N&KNIWAI~ z)k_kAAY9~Mj6zncGnPC5hMeG;cVpzcD3u;e@m>yeBN8AwLY|h`jyH@ZmE3O;7|*-l_-(h% z9)+#pZ5NZvAo-c@2_V=io}W>R5(|**YNLDKjV5rH1Q;@6&po35-^lQeo|KrTK*nQM zT7>Ewblb4WjR9SH zf=JV9U-x-Oy>!Vv`OATES=+dp)9CWie{fF%9l3kLDbf6R723ba-{AsQx9@-RQ6-2x zX8Uwv&_e!XwuE|i-Jf^~suJDq0x8i4)^%HzLaS-7HrHuh0MRjql^Csu-?>}NcZ$|=fQXQo1n3zF{Qle0lz@Q zNWRz52@={DhylS&WOa@KzjyE6uXeQ-j+{ZR^70IAzRd0GURpIJnrI|nhPD!&$D5vg z*z$7LN{JD8E?JsBt-F0GYwa1x!v9%po(!t1 z*s8lpBw^ERdTjY7BGoBt&G;1dT=>G|xk;(Fkj+VI05{YU*Zn5bJ0LP;h90t=B)~AF9UVB6oVqLkTrK*NM zMF%DqzFrJq#Q&+e&gfQxKKbPvY&`u2wS4n*67|=Azg)*)U;S2WIK3Mb#B-|3nOyji zI~m|AbYLM`=+}T%o#8jbroSeCmbpG32KuBTR7svl0cS@{qlJF=(mlOP3!Eg_`GHoIRas+#?>e-pyozEFw53Yop=@u` ze6yNAK;le7tBJql>NK+jx}2J)0py|_V- zMPI9hM0_2V09n2TS`mn|47|3&HEGC3tZfXNK&S*v&w0pOZj#T;&2M@JOPDM@l%uSq z9up~gOg3pK3mXjB+;feu05yUV(1EFEw;YQ};&i7FKVWUb$R8;H0AYtiZ8^ zmPxIA`$c##{qf}o^FVkzJK`uW2V{QJIc^kpS?E&Ax;Ka<5pOL8cB@)5lJ=MimTh0Dla@@mk_5Y z7wV+QQxV561KBjFtl6hw0%pRzG7{3orKh$pY1jDMIZpn_)-5!2-}H&L!L_sZ2ca+a z-@!lFrMNo8ze7Rb z2;Q#rva0e^oOH19yFXc(3pM-g)Q2bIfq_*_`*NWH77?KT{*|1swJ?Ib2&@|H#yo9B zDp7}8?H>iHu{P?9pic8SEG7h6E$fPI(RC?`6_uEQ?3rptJnsi9!|MtsB-s)-RY?Na z4JG8kM@p1K+*oD@@qQHL9_Tm7tQ{l8gUyHxHxP;(2>| z5x6xzJR>{=9hxcJ-TI5RIV0FtuJ=)fn`GWc^Joyyxwh;82h1M|bTMvegYF zUHm%>Je>D7R8bI%QDVLy#uy-%5a7xHMIS&v{8s_y53p*>?z5dXsdSi|ykTXbTOfW@ ztX++B;{$Ng(iM`)$F$B7VK$z;^1FhDMZG*5ML1 znRhs>>S*7t!Tt8E%+DRhuu=sX6?})K!vR4VHGr zhjWAa0@NwkfAkVv_{vvg;#>A4(L+jsp8NXkKsjbY@_`jJ@ZSY;oZyvv7NuStOiR7P zXHU-!;xO@Ny3CMwMAfEw9ozY?FgC4I_f3@T8Ysdn(ogD9&h&QB@b)m-~m?YDZrW*b_uK?0LB?@K#uEN&yDom zy5XD{Z83^C`Q!GLt&|2y8>6F7>zCrZEMYpvK z&vJh@t#GEZj@CeHkk_~q@A+)VCPGZcfC4IT^hc=-Dc|D84Q2U_$=VO_w%{A|whzXLPR6Csx6R2#kF%t>%O6TsA%RJY?~U!3XdW>b#KpVHz#voKJ)x}R;eg^o8oRqg5&+D z;|7!Sue12=-}EaHMp@G6CzG@)U_98;3dlUy=-_CccTAi18DR#{IO4B}G9k57?*w_R0@ro>iv^KEg>;2B(H}D@KXmpkPFX62Z1quL z-fZLtPUrmF4ori^;TCNth~hmP3P&{Jz{;?9XvGo|noWTyw9fjK!G{$NpPJZZ4y?kt zQXulfyvf}VA5vwyO+_jpG&oq}-GtF9oVHf3UKP%yp-}5aRp)#vx^B_rR}{qm)dKHn4J25$H^?!zJEQe9b1f~`*j6Ac&juOlDOQ_+7r-Liv~+7relA1X`S=%1 zU#At#>advFzS6R>q?w$tSF^F9nVPZFeN#g7(cqD8ow&TBDqQg&^P*?IGa4_38ffn; z+B5uhI4c?qoAKky0vi1uIG6vR3kDpPzs_%yuNZ)`jzE)(qQA((M%-VC7pf}G*|!)D zA%AQ%6dztZmD9i@CJDrdzV{hWXI z+`JjM-yzk-zsaDR)vmg_NtNWUt^xkr(^9l>=ib$S2+Yw*B(w(d>-;~@{~f|_{CVF) z2C0Y!L9_Aa{7elpc)Yq~027-9cXWtVY0QJv(*;H|8GLFg?Q-=reyJ1R7Qu{9NzDd^ zT|gk%!=UV_4X!#FeES#&C-RqgT9b$7Qbf{@U4mm^%tcv?EE(Z1>6{L#zl}f(bTx_8 z*_0fR*RNhU83as5_e-{E=eEAYFXikQ!KMvbJXhI`1!VC{oijly>kW63QvI(Ox)qu^ zh4(!Qp1($)16`l*(k}l<{@WeUdMJD2zwev^C#5-j|8>~#Z{Lnx_2_e3ISY{=k+>gk zxi$vhTg)8(HM`~Dru^_%6Z}QQu!k&-GwLeFZamEJn;N_GB_U`!OzRuDF6q|LZ_wyn z#l#2#KhAlJ?ip9gOZEiwBIPz@_SwD3!LS;s!UUwZcBaEk2@`;U?A zv)ww*+gEfn`mCvp_%9}5>(pofL5M&UoWM2#(v@*?9bT=DZcn;MB%;z@e(162==^$wD# zQX2~n?tnGk+X!h4R5!^Ub6NdLx>EvU5vDTGA`*>Bk*8P|Z0h{gL^}dlUZ#8DMX7bx zl1z_?#(Gd=3-6$#_@OdUbe@KDn~8s*T$qQ6MZq%|(&H8q!2vXl8`DobY&O=eBl>8c z!eF0r8YuklS^cpC9F^adx@qrlJk7KKdZh~1%@Z|`HCwDcV?Dx{NHVjA5+x#DTa+a( zeQiU1vM7;Z6u4p!8{@K&#yEdbC|#1NsWYpUC&)ttGiaT4;=joJvIMv>T}?J-CDRz- zqX&_WVifqnOo(_7^yCVK#OQk(*km9_qGo3e^ZWA<2$!;6N_qBYFH9`%-S|-^*>Cx2 z*O~V)BFB6q5gZ3Q?(L_ksVta@ugp`H6$E{&_}XSY-YyNsU`7G=?6Kx&giq*jcC^@m zsrsB|1Vg_bTF^&OpAg|&nN~1b_7s1h335&qE?w%ZCF=L!l&B-ngLaUzFV=4PbZ*ta z!V=iSBbN#z=QEL>>=u&Ez>LsEMKv17R@Een#)`16c2K(9O;_QM(SUYm1RuJE(!5&Od z(qAI6f%J8FC3(+%s6HosM9;o|?|>9MjgH+gff7Z_eB**Cu3`;+(4w8JHj)2s877%i z0H`o=2koff^~VmQk)C&&Zc)$T+4gE{Y3^)D}8T-B8Z#T+14%W9Kc#2j~AB!?9 zATTU?t{;B*-a0Nu>zF8k2+a^n$qiSwCr=8CV(P$rUSv#YEo)aMxT6+ zNaU7v01JUYA;^2c6w_7i^+b-7So8x7dQp8USj-4zW&idf_9BMt*gmN9Oc00KG=b8V4GRCe zp4WzNpv#&Rqk%|N5%j4o5C%PjGB;5NhpUBZ0~!9K!e_!Vr%`DXSwNibC zW_V$`MU(=}K@C;ibqYB;*?EQBG6~Kyfzn4B7C02|Q|ym|_a;g8`4KNn3UnGPDYipH zV%&Us8-Tgx+td=OxrsAD*&_W3AO~dBw>8WYHQ+BO72NM}kWiE>stoi5$Jz3mbMhO% zpp-dlh&M1|)pSB6Q!;Qu%#$gBVVO8pS#4g|nW)91Z# z`?D0ZfzdtGWFu?Y8g)G6#I2ESlEhM_W}JNQjd0CqHGaHXFrkK1;we#zf{IB&G&P#s zl^Yqw*2 zPY^%Ztx|GO39i}7=5(4%Jir&3gqZ6>>!?uytqUL6C%bky?iDrI{drW>WVf$d$=T#0 zHFHY52qq`^88@$eC;*av47lv7v;;svo0OD{gp81ch>(PsfRKO)LPt!?%_Bj7PZfzG zxo>FqB#MDoCH;Y#k&kbQeRT7{EIi|siO)F3p>*@VzC0lTnKIEY4i^80O`DOmZk=2q zVUyVi(`yssqn72)-**cO55=8-S39s(F2pQ9Jr=vPJU%w)E^Ng$4pH7+DJcuJbP=9= z|LeJHVC(X+!EdOaH*r|TdvzT;tevD%Ns`T$Mfj6Sb00xFE1GIi+OxX~ z=+@&%WBl!^(&JHdGXC=bbU)qex8)yg0yjoj1432V=3|P4L%-xQv z-Y-9H`+`r(kfzS15}yPclMT7I+q@Y@bu+1|l-i3_oS@WplFz|D!mm2E_ zMQ=xDj!r)Hju>FQIcxA)8_c4gFw+VTX+AGQoIC8U9w*aiWOt-oJ{E7iS#7awem8YS z6{>cf^9?8y|MZzxu~`neSza=8RNv)Sx1*c7=R2MpxF@WXl<#-LDmPIFbtn8JYOO&$ z^;WQfmR)h(>gCWC|IEPgled>vCR_~*x+|^LlJKN%(u|3b@E%%5WFOH-kN*&K&$tmjsC|~DWzx;6s4_NiCMGu)<%s;LhYjV-kYLU6s-zs zixnZ%-qfnvn^Li-bMN+`LDOL)H5=|% z{Y-Y8%{cieC4vWJ8enm@c%~;YYCRcfo&zjTcFYThW72Dl=H)9-07leecqdprZ?y|9 z__2Xr%^Vl zte4_YKdF(7A$|{_8kxKYw54yc2iNWl-6)e{vzcK6{j>GsOKs@y_Zybz8SNhl2L7$b z?Uni)(?QEBw$d-PF_S)F`=qp$)umX&QO#U~EEo>;z8bexqeD+wW32CqrLX68GlVPO z0fC$WNaIIs6~X11R$(a(fIY0ELP{)dY{jRs>PCWOV!QMo5pwlrXsgDs?5`mj(>Hm` zC)oxmAhA(BZ(q|$9D!M`2B`u~e7qD`Iyb(W9zD-^lwK?GkBFt#WTZsV`Z-S@wb2%B0Bo980g>rb0YTOX=BldIa&_VG2OPw%X9etFzn9(1a5_s;oX{ z=BEo3;uJ^=WVxlnoGY*->Hz}SST)XTdXTw}?Idi|Wi1Q^l1h{Ng1TYDM?kys!J z7r~c+y#Ml+Ie*Y6v)@@rsjhO$?uAe+l5>ODN~&oHL%-+u>KX#fQ7Ah`AA0d!bNd0I`e9|{9HB9 zg(%#F#K+s3^co5r{``yay#Aa(D{j+d$HZ>E%gPfuy?m;FCE?kmdOzm_g&mz&%AwwM z$ns)lz`>eB%AH9v!&%19p1e&EPhOS3O0fbZlf))U;Uzo_RuK+nzglF>ld+Qp2D3B+ zps=xl8%9Sf`H764cDvkGdK?PN$)aK4H-VL}A^&QK1&7t>f{{4NzXYn>4FPo9*7J4y z*jF2(DV&LHYcw@Y`^L|x+U443zY#`2vp5fTee?dMSy#1ZR4q?}!;VdOfAmzgw3#Xq zNkK*MY^tUqlIR=1Ra0v30?>vLcVZ#oZ+(n`^rrW>!iq5NK6@P6tAVW4<|7D@17k3^ zC838LehIrIehs^W(lE?t_JZpyR<;!3LOOnKjp{2^(UPfBDCpQ{7_e}@QmPX8bd9K@NTe8Gtn*G^hHgcCM@79jX;J4$=b@KEpFS$fjq4vsLOh2_R*vLJg?ev0SxS-xMm9K|BTpqNB(A8%;Zli zQA=3m4R1SOuVqAqnp58pJ$dHO$}z(MP%8!&cU^jFmyV$_`qT4u|R3yHZMIh|q4Z1GtJcjAEcLc=h>AV_50#op?a| z>?QZwF8^L&+>&3>0Bur%6sSdiiNF`|a)<%R)-FsiBkDw*14P zwW0x+wvqd#eW&na^@3%tvmGi;eL!liiqzbE3W>Zsa|p-E{(tswt^zvGL=q-3Ep+XH znS#a>xC&8_8_?`kW3DcuI;XxYJ?~GNxv+Wr=_=`qd&D!@F&5roPEFFuy9`-ZJ{JFoyc|XZ z1KP$SL0WaAwYliX$s zhxA-PYlQcF&yVf}=Ha48IA@9(wgPZix&&p!@V09`DkJkUbf!^3`M=Z!A190mwesj9MU4q)piK zAg~I1AVYFsM@6;lCEZ^$f`^5NHAmnm1lOUhzbMF0zTa0rlPzNfAd8r_jUVMz1#3;r z)?K*HvoF`S&~@0J=(RXY(wO0NCkcFT6-g;KZnIF~1qqO+o(NRC+|%sB8{b58XG7eY zKkU^}A|zK%?_V(Y{qk`D3I=^0?TD_v;kK%t`JbKSYtyD8=rN|~*o5MY5+{9Y+f|W% zdwA!?;R_ifUgW+AZ@YRhqrG$cR;;$KB946}Af@q43%d)N|C^B!cB=j(?^LJ6bZGZc zkui(Y{!C_0>7}w~o%3|tqY<)bn4%k zP1-g-Ayx9r66XiF+cn0;qdtvi^`74a@BYkb`MlkleK!ZXdbAovEma=rRV8}bZs{CC zF}>Cz*E?H1ezzITjtu(p`Nr&T6l_(>)HNHXV>-{z2I0AQHj}lM|29Z^aDdTfSH={V zLYOe++B~nX(_%~a=|maBTbJ>KB|)3!qt~2zqITj}`~P%|{vRE`yOx(4CX7QAO8IiunXORinG)(BZ>qoCLR2Xn8U zLh?o#V5l|{ET_RQ1Fy68frRzch_t+0T^{ZX8E{dK=JHaXQK#2N$wDEL#EkTGpVSK< zLKZzvP-$jNHa}>-IAVVwk&u9$;rr=kT|4{d&KsUTx&R3(&@bxDf{wQ+5#*S>z-txW zzr$v1w|nys91HcE2Z~4wK3~aA4Q2tK{A~Tuu?V^Z_jk^l-}+l)D*`G3P>X`(Nx#jrO0X2fz+~#ivN?VFZ%cq zRjpf*2u^T>WRaWN<{*sFmldYer-#(VozF}ZQ;NXtBiQI44KsqzznaS3P+4F$_zTKHq1AcWJyc`q34|Gmn@<-#K z9la_Ss>#{N*~MxbW~H6ee?(u~IB#Y{^e<8J-BN$3U!7S&xz1s8niGTo5$>&5n%C~B z`yG{Q<^JE_bo^bP_{^4SRi~Wvw(pF_>m0e&YL%|7dc-%kup7*weq3n?cYR_PJI#P7 zyq2r=aXw6*W+;&eHcwjI4N8e93Fgc`BxKEOP4?QxGQzyTPcT-mNq?FFC4}e~)JXL; znnhIkD1Z#=WxKE$q~uAXVYSX0*&Y4+sF|LT(m{umfhrD^JXtfN*w@0Xakvh)+>`Q#La%3uX1{=5C`D7_d#M6Q(sA?+(Z=`ar)8M*WEZ4Av z$~$iMu6D-&_)=J^7TJa7TvyKcd{uwwsWsmv)H~=r#NIM(3=`asoKebfJ2Rdtx%s=v z+PA(JtT-^D@1Dt^{;4v#LG$yeL7Eza_yo}&Xw5MBvOL9hnm0h{%KynfqB(UY1u)ib+Z1RmQ0u&%qwQEReqbS%O!YVQv8>lJ+3WS0{p&;1+`&3fn|K2 zznsSc*I$==`H6le!3sHK-)l>8C3S4@Yq16dN*RQ3Dj_#o7{;(Y2xO@{-hT0Oqz^+@ z#hQ_{^%jLyo~J8z&u*ln?wgN)`=#=ECY<=BoiZ&QJ<{R^L4mQ=G-Ci}9+}K1)>V|e z{07Dpd&T9A#MuEkwk-^%LN(~d_hkWT_nxL~xcQgE2Z|w4(=03l7w|#t3aS5=7<|}- zrP-^xBJrdd(e{Dj2ueewycHAI;-7amWhIZ#4qNLK3dTRM_vLv=e-5sLl7fL$fAdX$ z9J(MwuM!ek$>N_XRn%T<=Cyq?t#d>5<)b0qt^FDeqmI97C9`gk$;%drtox6;QbNNu ziU7_z5bR{507{Z;#Vhxu2pRqZtLL3zr#wwq`nBCmg&d*!s(2y65ThI(n59ORAAi|M z$QVOE5!I^9Xc<$tB&TgjyXNS7oMK49kk8`;WV8>!$ws*f>-xs~n{;ISM(i8+zjCoR z;J6nHpiywnq~321KQ~yFlgtW}S7RFX0S0Lle^=$Gi-23bFAW<%(6L;5X<3WIt3`|D zh~>Tie(FInkad#X?{g(+l&g7MNzeLfRKNKj(L~@ODDa6V26NCDO7VBeyZ+5W2+;A3 zXiHDx@7=P0M9O;IUzCl0TGm!v)h=Ui^uc{?yHI$|>|<9Kdgc)#R+*JMNd$tK^S8iY z7vWyrAj??wq*})#=}{-|qCoNBERc0~XxpBTxcAP!ffS~6uTAm{>iO6)zMa*#^in+h zD(qrP+vSx3|5sBrnWajx<%Z05gJRbLfS-v#c;7!F6%(UD=k(o#3uqrbZ4kgI7@m0H zG>DIHs;f%Xdv~MGB7b2TtFdNFpZ&JP;;b&$;M9rig7l~~Yj_33Sq1vpleY0#;(8)z zgf1*)Tvef_UMdCbdR2qL&gK;8Q)YjsDBtg$MPGOu_mNPQXiw~Ja{uzswnG2%tNsnx zDCpPcH_q+XEJMWGJ#rZZ_qA%~rH}Tn*Cc1EG7eS+$bV}!siG;cTPKW9eMv2q=!ddE zz-X+xmCD(TS^(zYJ|zm$?mmU%wnS8}nznR-gAvxQIDxAdR^jvzkC?5#NX}|>$<>cv z0ec!eIx`s$S1nlJnpqhuS+7XWngFefj}2c^t{GO$-w>7pl=5edVD1x-R^-@uX%6Y6 zS_XiG;Jq(t%@v!|E_sw~!5?@Wyfg=FXdPA?KsHs?Cq_Z}yG<#i3Oo`G!P{Tw*KI+( z{6G=D&i$~65>>pvp8wK0{f+mnuiemNk_SXPOx z^%kl?2P^Q8sAeNSwxotj462h`15^TxP*4tY-j2IM!k)OX=R-E^!xfumvC;t)M zuYE(rmOgt|COM?`1w^`aSBfucuc>tlW(Gw zKMZ*i*rdk}zJPt6AEANWay)=7VSLzhtKyN1Q3F9Q=(z|7D^zE77ing6dE4Pl((jE`Ld~x}1z&Pfwn1BX~+*NxKk>tsSUpAbFzxP{nhHezC zg?|Fu;LN~`kLz&0t^*n89C-C5kW|S#8?Q86w8<=>3UzT9>B~D+EqdZjhzC>qjtzHC zbR3$-qDJ5O;DR41VGAL>j^B8jUP35C4cKi*&nVZ06E-O&gT9_nuFZv80@ zoglx1M)gySW!OxGqZ`O9b{61t&z+es!PQI*>p!T+4mYCIu7IXvhQ=n5-}ly(V&ER& zblGGN3_E#k76#6f&)0~F3!;}jUbPDR{W#btDuX%!%9p#3c8RH;W*;_`ue86C ztLnC|=StHQ8z+&3C@rIJ6-fc7-}wU+yc>~aric>ZqRMdiR=QT8OR?ffslp#W;LuQ& zVcsgg)jJlxb`=iX`0x|^O8^+ zRUHj{kIK~>xX$&-P`?0QOv&TRZh8(WIl>$L9%uLcJgd*T9cDK*Qd-~>+)d?YTc1^@ zw1*{*jRV|;O+vcpuyiq}5?lIzia-b?RcN;@ED5|J6V9pIT`}ln^r((!!Ldqu%F;}W zQWQxrAMCoGqRik)b%Lr|2R5%Ix$}9|C!IC*e?%H!VDba)UESU|@m2(3E4(x5^C-C7 zy+7?&C5vA6)ufXlGv2*vtp&$8TuFwSe*2Fo5gS+Zt8|yzpxwT2(dUzGLvcH!hN8)= zC%n?nPUpH}8<;#LZ}qGSZNN4@a&hl-ImwI|C3w`4y1>?NSp*eQ*y4OrPi2Rl%`0kX zls{2V93sY&|1mmMI8*K1iGbBM=YnfQ$`g8x#Hm0I)oEGaIC_?yy(|r@27{l#S>SU3 zGZ5}1B8_hwRcqcm_cqz%PMq~CRvegwcSBGGWT$!B2TFY%pnfKYJLAa<_FwS695yqD zb>KyL8l8s5op=t^uzCXgi0Msn(^?kMSV=G=eq#BRVzGi`ql?*J5+rjrg2MM=&Rp z!X*u)bE<<+dK z)Je?-^9!S_i)SJf@>In(0NOJUC1&{>fr9Rq1vqk2rY}uzkG{y~j@Du6JWD0W@QI=q zDb<4$NKqUCio4!q#f%FlvgtaVZx8NgJU9z!?hDoTXf1n>p43kxF*0XgjVq$IN4$Sh ziL3PGudB&*oLRN_Y?Q0B@a+|ik@pyx*xyTW4LRF-AS?Ylq}oga<7reR>E}tNTHE_n zfDj6?O&cs;DXKoQrjZdvMsci6d_&>-WGQ)c6z6-x=;j1 zem^f}Wx3g6<~>t)w1QbSHRkDUcI$^_Lhck68Je_veOQ)K!tP)u;t^DOiSM~T;>&!L zUbJj{?MvBB^||e7Tb;X{Iy;V#6H|Ky57xs1{q~QTn?Awr&nv>W;$XJLMtYTgJdO0d zjg9pi0Mnqd9Ih1o#vv<6ypta)glC*hF(u8buzVfvL{l@OIfJWYP-fKaG_?)XhfiFV zA1sb0SP!;t+pX8eii(80{Cv4lweEtsDCIZu=E}8lJ2Ml`wwlj9(ee4DFZOuBNJ2;8 zL>;a5n?+itEIprxqE;`S^wlioAA|c%$6J;4?Dqv$+95^uX{A3?r~v6^;QBrZn0@R= zB%|Y`?%^wifQw{X`~LZdIwCE7>(l$)S9w6CUAJN&t@27*RHx%MoK54KMn_?py)Vf zdA7RW=4N~G)O+1XTMUSu+5(1=H^QA9KiK+VV}UH%1pAIGx>XwXQJoXyph0uiruw;y zuhW)qvBt_(dXPak|EZbvWYxRxQ~qXsn|l~xRh}yF7^2oYp7MnB$Z?}-!oZj&QdgX% z9Bv2vqQ1I#}nE2%?6{$f%JX?$~B zzORrf{RYFJMHQihQ0_By8ILjeSYkgd3~4Pk5`U2(rq5jb#glx!p(*nQL7!w~^>uEl z1{iM$#?Vw(p=Q3_wu7%1h&o2=V2H=?BOPTwe;dTH^lh{%<%yZ}d6_ZRNHV*^9Kasi zhD!zD7|`-*J$pf*K>zKu3{$kBch>$L43&_RA>iC;#!R>XQ!AcrQ8UX{vi>}lcitLc zV6IYZAAv~;0A|qJBQ;akb1Me*hDIXrgs}IWzzKu??ZvePEA@v{%P)zb2q~uJ{Jv4w zM|x>yiAZP}#V6a>Sj<$j%O@I@S5r5p#lH;~)JBeVc;STo!3pP~0q$&7bqaPsV(~kM z$%1}5iMo~8uDON^i~ne4UF3U!{i*&)H0chp+r?ps65tL(Lc|9=CG%-y?QyKpn2AP zEwXIimC}CXQZVMinHo!He7cif`+@4J*k$HjNQJ>y$VTCHI%*%DilvW$kiM%$T`THN zCK--ex&9Se=(j0{gP)T5IVQO4{# zKsdP@Y0LdO~1$h@VdG$xN`UvU;qVQUcsIxnDnv~+f%M6mf<1BeX zWAIDuULz(`uLRx;Ud#tan+c3y#ltSJsC~XNvh7$zaawO<4a+Sj>di%GbYuJ$`I2Xz zCPb`^oKigRR_XC~513w^ZO+bgj8@ze*j5Bcx!aabNsfb4w@+`fIO2AQKJ(Mx4`n8e z?P0hibup+w`?imSfGlzDB>30}oDc6ylSs^DFoE$4&V&H;`QryhP3_CYBr&7#dza-g z&i1RyVk#@Y>mm=;EnWcYCsz9Jt)r#;%7uGxS5v`&QxT4{;;m?A9m+$|#8&?1wiFO% zR}KZMA%u`VKv~8z^0LAClIK$h1VX6<2r#m(B33HMv#mk(Ee4~7Y;kaaWX^=z1e8>) zV1kn85@W`b44(DWy8)=g`QoI|BH?mLI~gS*=Z8dy} za4)zIJ*r!a4epDhZv+_U!q*6`+K_4z5@JyA$uhmXZ?TzSxq1l9M*wK~xBUZ$Cn=v* zZhL*Fk~7Rn0XDDXF~2fnthTR}mZ5f#E=h2ndU&&y{8s-xft@5}1qKA}d3a+gMJX}+ z*iZCI{a>x^h_~EyVP-%@<8on2-kFV7qv6J(yOiq`0*8Hyc-=Lrue!BSrvzT9e4p!& zc`Fh*AskJ4zL5{aaibWcbX$BMYgckgWzK$AInuib}B^cpcJ=}R2xVD^cVF*Sq)P|=J#v;Ys(-30|=;ux$W z4lxWG;1h$imj)gCJRBR!l6Qd&`G9ZHQf56EOhHHE(urEG?uw|^9ZcA@f=oG&`-<1C zB=H)plZXNtae7+jnqm@ z7GX*d;gM-PLbbbdwS4Y%ZfZ4pBXKnq?_AX=8ks61^fQEA9Z12%BNL0CYOx9i4=Y_A zzp2xrad6_|>Gmoj80}?q3K8n_=D@Pj6;os@Xj+?D`JHow(D3ZDU7I#go=Cl?na16sZ7ps=FJ}d4_>PsJd zATV_?9k$}@oP$vWTG^pyN(&PxCLyu*qY6LB4RKJ!YYaJ~>P!v~U35LxVnafQzsWfNML9)Osp?tOgs1A!hj1oA*y=~u;jjO!~nDWtDSr*^2sdWZ$V=vmrng%&67TM7$r zuFY}=G?vARGUJGI{$3aQKv?4RF#|lI_c0jfF<5E;6Al#GOV2uuuiZhF#PpTw-ozZ~ zahvUybK%`K`wKXMjxtziTpH<{ZUjP5ax|Q}gYa$5Ir9?4OeI_-kW}9ub)i!QAO;Az zQ*dsNlazrOBJ30}oBq-ElUjVJ7nn>45n;5v60#S48}o%}D?DpPMWVSj18#Vdre~`< z=0Wb_w&>T1^H4nyChj^?i)k7$Dxm0A@ks2R@i0KF!=DuA{JKS3G3_ z?GW!ZK!z6n(8~mqkTV5SXcWj~NUedOkZPn*&rbL)7_)ioVMOgU#KCh8lB+j?O_!x# zL{h3!nbFQTzA5H9Z?9|z*&VL^-I>_qfFFq+yxb#I1&wX!7Q+X@v8yKA;gdQ_1vB52 zlDw1qoyV2}G7;$F9uAmb7SDk3t>yQ3vFmUd8vaTDgq#5ggMHySMHyjp9^$r+afReM z8GbbqcV#Gf{?SP9(`4oMTA1Y+;{~s9a8+c)w?af1OME22*c=WC1DIew2JizwcGufQ zU9Bu$Qn@~u!KkTCXppN15K{x6qXr`ca?~(&(8!%dj$1A)?PMBhFMR2F;Qpbi%0-Jb8AFfsV3`n|D039 z_0jCgTMhTvQgdIyEHY>TFJaCpqu`G$T9FtLI2RsD^%5=$dq;}NfKfWnIMzVjY6vdp zjLH8Ys8OWCnqvZ8h6AO;HP?LTf}ArH%$PBmE|Q2D*1ry61$tYHMfBpIdH)faVDjK5 z$GUK)|GA%mIAENv>(m%=4$O|AMEJJFpw`3IvPf*QebH;(%3>q!NynLu!i)AK{w8>Z z4W=YsvQbnK1JI7SVtBaXiJt2jYllXr#)-k7ri=htS-4!4a_I}^OH}r;iRejSa3na7 z9toreHo2)SMd;h3aSU}@z((RcuO@LRF{fGnSTSgrkp5vgywrrk3mT?0!to8l?IAm< zkgFX-SlS7A7j1H?-qih|(b(+vUx_^|ZZ~G#|DaI~M}@Tn*TL0r`aF0h!yh!NK%rik z(->-lqBhnF0saW}GOcx-)Z#JZXK;etU)r$5oYc7h8N5teF@$tnDHRcM7N|{EtQ*G25_gI zgPhW?9fHWmx{a1NPwEcp>;XL?m?;S%hDlV;T;Fu39373Za9I5&BDExleqq}i;npV! zGFsp0a6#8!tC;8q(PM;PwK6!m!F^g}#9&M58EQ+X9D0`MYUue_wSnl|%}GV>b#^$KCK?@l8B0%>GLtZx1H~<2pDRDWo5E z0;xxW2u}&Pgc=jvJ!cLN%!IQPZiT|G)pVTZd@<*$)IgwfagcND7C`Qc#Q)%8 z$k$V+DQ^B$J8*HBi!1geXwG~Yli-S zZv7384UX;Yh@R>1dGvc6)QGZHXM!a%7r9ZC88~P55SSC?!-gm`;)hFPnmXJGvNkP) z1*Fk`{r8JMoHM{BIx^hzSTSN+4W&wX*l(B;vk zWBUv`PnRd~z7%~o%IAG?J|dpZTw4SrJ&f=^2~Uaw^=PZ6=LF)L?k--cBuGQO9A}7= zPRyfTG zmQ=z*3$~Z59j{|66aHEY-$*L`tDRC+LdUsqqgxUPwQB;2RH7JBqSOXT*d zp>Z%qh8O^jo8W~}xOI$e!t65#aEhy8u?g{7JJ+uX>F7Okt%viPqs@6fqEN3pTLo%| zfdS*a^mt!rq|afV7llh^7cg@Uh*XRe2ItJf&QCi7TbPR6-84rV)6o*{xoTT5=QSN( zoKo?@GA1xFIN2paLhVMvJ3R%U6>A#-e~k8T$T6G^yi@)j{SD#v5Tb}(r;p)A>&TP$qM8o%vb?$I{R!Gh8W?6I|v~)snvANBEqjm2(*LH+BBU9^tpa z!`a2z6jGKT&I%BXC zFnFtsREYC-kY1|wl4tPFm&Sswo1;m6QfERn1>f`+PhYO=I(ns)_Y!bPBAuG+ImRh` z#sgp7JXKZgUxt3RCQNsv76!r7XP+!jnx?i$na_i>YyR9<)G?;#fH|WI=IfYCF|Hwm zdU()%Lj5~2p%cviw1WAs56ms12Tz3WD?%Qdy9tGUR?x|8YJiIqu$%njgOGnwIBr`9~yqUAoQK1-Vk0sW~lP{zt@n-C=Va zDL?i-`&fW71etc{A}#bZjqLQjD7#K}@@K>jn@O?MK;xH#aYqUFpKzDzZ8>nx-JSkF zb;4X_xy2PYV&=a4TDN)M=_wgMbpJ=BI{hd}F?9AlTlHWkIrpL+4%UZ&i-|H|^0PSe0P zT>x7c(2V3t`^hEvtjIT0H0zy=X$bo5LD=Yph^pYRH8VRxXZv{l_uA-02kPgUL;f`{L!i?B2G ze?LMBva8AE2&dfjB10fS5&g%qYtlR7=TWMeHXnwn174ZNm=^w&9$uzKXajR;9gXSv zf1ibJit3Eq)uwGT?*ZKmyQ1?M8#YGo8mmoH^zD&t3MnRaHt2}DiuNly#~^T126Nk; zDjj!U-IR$p{1IrzZYa~|*2Js;^#h~5#K4V<@q^koHIMu!Z8p_6PcAjV_{_fb z`ZC~u8UQ2PS5#i-=a-f<7+9smM8zc~r^MWLFYpJ28=KwNR5MIqrlYE7arfr^JwWft zME#*WMtwKPE$*P+$b4z3?S%f%ja{{f_>Ehtpm4~Ys&@L3N6NzbB?(6R5f)pJ*O`(N zDMpM8>_WGk1?U0gUHxl&C@PbkELE47&kT~5xo00Aebn~-8lwB5!%-`>=4`Q;qdXUg zbPG<$%U)}&rr@;*hq23m`T!uT4AA@LK*Zo>C*QXa^x7*uJ*A_ z%VkRNP{6qUwFUxe*5@nT9HU~ak=B>^u=yV6J=SWw<>hzahMNxG0^4)B$Sz;Pkf#33 z;4DG{ZGYSAxFih;BD})pi`D{ig0jK2u5zp=Xx!bLbMEo*wdf z`k-6=&YEU@vB!Drg}S)ly6t)DV5FZzT*&jDk7jw5L3wV!e9=$&&s7CY!nt2fH1_S3 z+eFyiEBVN2-YoCT=^?4`vFb&!n*2`dmmcm3d4=E%{P0%5Ny5l9ssM}!WYPYwEtKAoV$8TCwMr*>dtI`#gQGl6Z?;*RJ+1?H+bp#*Qb>Z` z5i{T@ZEq1vyUX@;y2b~1+e7X+uq}sO_a9Mb{6k}3{Pnf{F|7E_nr-x0Sa7|Dg)Mi# zJg!wT>>rVQ%vFPgM7>nO!K`JD znM9QX4-@CU92KRNK3a(%laS~8N0jnnE};TiRE5hik-L9GGC zmvkzR%kXb|sJRJqHzX!(XW?CkO% zk#U`ySI^~PS{4=07E?Q1;LOb`;BG<-Gey7RdDa_$@vfBD?=;Mcib&duf=f<(wj|}9 z+a`QAwoi~7Tz8fqTe+PGaL$OUg;dgAm!t_+$d7E^3|d#R)9K!D%_x{|R@d{ttPbW@ zt32mgl>K(G=pQN-#eb)3>`On_ip^!(+vos|i}cV-?c=8*u1ub07LOl(CA;z1D7bgC zI^jEvZ@NBeem#fkr3$PHxmQ(hH7~OJ=xMxYj&6^mp$agW64DzA&O3JY4t zyX4;BUIq=v)SGeHY0utPkmKxm-&OIC=s>iK=;!w6FM&)+HKr6CR7M&$a(38{`&egji&E6`1CIIMfJZ@Su0=$)0E*^5~?d zOc5ZUSnE#_j9or&2=qA-9CZzn7`zF^%esZAx0T_u%dRz&j%asc6fBEwY_4WR88d0q zPd%UQsD$8LO@^DP7yZL0vS{UXLf3~TXwd9BWX8uFS}VJ^lFqgux@md{V?CcTW2 zY~v%_hx+FPME?scQzK>YAaG%%Rr-4DyzN&+fu$7RuOmoIov}E#)#dk{uuyw)$}ZMt zpO=#kZm(oTS5&_ml`Q+#wdM1rE`eIw6K5eR9+Bm6)J;Uip7XY=hB|eZM{qS{I;Sa& zT~<~9^QC|2I(_8f=jmG+pH=jSLY_Pd+^MQiCY-5hJ`ujKIaXtrvpJMy^oh2TNV!&c z%mH*Wf156OLh|k5FK9FC!)&d3AgtV^fA!fPwpzyjs|x|+RsrKS%>(y~wmHGgg{`K{ z`rw=zB3tDdLGpYOvKTG=3B-;#e-mZcW(b*#$kQ8U+gSwsHwOqz-Khaan_ zcL60rmv~;|p!}%*yB`ifkJyxLW`UoR>zZM$gmiAaN4w!`3*0%P_32f`uXBHf=mG*S zdghgzb?s7?w)0l!eamF!FxRd${v%8oI&mq4*KWo&l*`){n%TXs%Y)rDQz`%-&$U5+ zK3*kDTx|QLpynE>t)lG%yNH1 zEeB0vVyJKCUyt&T%m~tndO~^k3ZHtt?%&Y1moR7WVy=j*0!9hlei8kPahddEW*^=> zQs+|J27v+%ynZTdLkvn5WE31V(^@O|_C{z?E@dfDz_j3hjK$UJ;6GnpK;1+fg(%|p zN1HY9K2msz&FxSg>cz{@Jx0i^urVEOsBaM2h`r}_*`}Vv)_O_h8*uvS3SuWFnb@l*$|KQCpUCmrDm`%DLi@a8Ro|rr| z8x1Qw>d0g2I~K<0{uj^?;u@Vq8YN-fhE}rtLKzyh2mkr>|C-bCf8ISh(Ga3sKGvq( z>LO!SUY>U}9GJKsqn-lh5?&c{^M3U1D7o3cx>N#bD zx%^Y=;t;?0SEIyj_j(L|Khl$pfi>T74opyX%Px(`iwwj-9c!9DlaXAcI1G20dCXh2 z1gdu|$wJ%!5TN(-@O}2hw@uccSLM}F{XaU?^h+5#H}7u=TXd&vJj+nOOTw1_|A;F^ zFn#&@k-wl^)3xd~ypzjojrl}V&Be2jg*=ldvQ5a_4=?tN zz!&fLIKNs`Ypo-{*BL3L7eW!)&(q3t6zyFSF<%FybJ0YFQ9kv)Pkt<~-vCJs%z9i! zf%8(K`~j#R`pdVfNzcB*bsq`&vs`k-e?4rc-#iNs2{Qb zfH=>@)LMDn*9{Xmr9&g~?C-}1i&3k8wY-7P{ECfXFEePDoasK``RUR^nYxa{w<-O! z?6~s|k;f7L>91LX@J1kmhQNjL@}fZFwvmOg?NjclBhxfIfL)nnYwc>`Y~!(0-#h!! zqklvTT^3@*2%4-^ScTp(58Oy+@>tTW^Dn zk|mn;9vHLx9lkOaUT?@!)zGM%yC`g94lNWo%KqW z#na{c5q^(jHx;~wdDb$KFZkef9!(iYaO`?Py|NpO++;8!-H77*63zPZ#eeeuuXFt; zIRTR3C?N_UIG5@*=vrhuh-T~f!+eCgGV&&6^qY)XjHRyJoc7IW!#Oc}Ji9BO;N1`_MTRg#Y?*fak1(L5$EEZcaSicI(}Oy&WL% z7xr?1)5Bx0?9Fw|>2KkY$o`nzMWy?ppd`zx-;4RVq-smg^Z^@F_BKf53BaBU8l1?n z)P5YWacXKk|Gu9Fko4a&&83|H+$Ppf%be_CFnv_c|AX?sh|DAg`;W~EFZN^CuNm=m zo6Y*04?QVMX<{Rvkc|I)r}!Ezc=_i%?1V_a5E9sz%C6_-QrEp>E>rIcbdYz8lYxEG9nM7FSSBm(JU*0 zK3ACh)vtU=v=*nbJ`x@lcK3T9im#1sgb!A1%(EICrNQ^C7!qm9;mlyp{URzfWs=mj zOoSotSw`Y3NiDzaTmL`P5r`l~aKnoRI@o_L7Nmc?LVNzuM}YL^_3>@8rOm9LNB9sr zDUO@<3RQ5{?K@fH1?SOPRchX6K$hSU{XtR0xt>2mChmzaccle6X8wrizyrP#&DEIF zA!qyc-c&@&t-45+EONC&EcZ%Y#Q|wmfuhrC+CL&O3L1Z;eAwLy*r{(MF}Z!qE%$vy zc+`Ca`4_~-`g2v^B_J!?D>nYc6Ry^$TCA7$>g^q_igwo z%9ZCHK_kI=S=rMQlmy2oXl32F!8b*~thrS%{lsh!aMC>x_28lTWz@Al&k-4plW?@F zNO7VzNKi&#O6*R2y?%b~%*uIYVb z6_3bXB1a$mh_#85^dHe}!5G~Xa{yr3pd~N)hrDDk48~5o+YTclgt&ExP#~ejtj>E@ z{FH9rBBz_1^;>Wh?~-}q%Z020l^9xX;Q3#>7{;jGcItaV{erd6R|byQ$q6ggPQK=W z>*uXypk(8YfQ(nN%uIK+P6Ph zPewAbC}0vi1qrQvAN5P;6I0OE+dwFMj>Dw0Xq`2@^-j<;S6W5xJLKFitYLR`bE7+c zgOYy0CJX|tXw+EYbcuQQo!?zJarX#;VLNLMKW`X z=GIPhjMX?dPZbYm1>!!uJ19Wd7zv8Cs?YecK;tP%evhQ|Kh9&LS$Jr^D^Tz@aOaq~ zP=9ZWyE4Qf^z94j2av^CE;bvL&F_8C9r=mQf)~0xp@PAd7LVvS_SQ(9{J{=GHymT1 zO6c#Q<4wm_r-Sl@Yv^V>`l%*_ih743C8_RjnuY1-0VA1^p z+E9l>K)2$Pas*509~sBiW^n^^!ZuWF^75+=MG{)-$D!eZXN5u*w$nBX#ibG(p7OJ$ zoy#x3X%brCy%E0rA#)qD5UXVC8j>Mlmaq}U(+&tuPo+tHo+;=;TPyYYdntXiSo|WS z<_&M0#fnmu$2$K&O6BXn6Yaa&m59OVe9%nseX%e#`h?vw8xr zhfo-~tPf-4ni3Pbdr@GEubTpl+-P+{gpYYHDuj#NL#KSFO%?bgp_A_>%V5-jf0z$T z>A(NuzLpG=$727>KX-d1(tfv;8pO>SFS(>TQDGOC;GJbaa0{H@I&m$m-`>Od90 zl)O;Q&1vMBDlp+)RIE19c$AEg7&T9PM9(oi>?UurD3r_(gb%b!-;F^b5asb;F&17N zQVBQ$RI1|Q+^gUuk_fL>B{;K|R1PnJ;Ms8%<0%hQ%{&8&gj7x|g^K3TVuo{kS9JiC z92lyMsLDgoRT5Oh;R{C?aBCUT5c6=%lN`q?nnGR-{2v(S>Ek&@7<~~^rAL_m0D5B? zidc;;{{Zvf(WEtsr;+67{&*hyWves&W?u3rF%Fn8OptD`-YmgK89>KOKdJC+Pr)L= z@sRhyojCWO$e-3+)ERx>emnfc31$Xr4HJvs zPy+I0LG3mVVxY&`b#^g#7|Z?>x8^(Yq1=BeD?f>*#zVjP4&-;Vzw=geLp%o8!>GLS|(>F1a#o+K1yTCZEUdeNC zaRMB#kDd<#xUEWr1g>v`Ho%?FZcz1-;K1}nN|h@zrEz|MMB#YYEyYYpoGUApL(u9@ z6~hCVJOv{!3BX{4gfUs2L4zF4AmZ~FxW*p*4k8tBwVNXcvN-xBRN5Yw_jWSEDBtK@ zF#wu*18quw#!@Hw%+eDWT{CH{b)Vfj<`Is4GdMRj9?ASz7VAWfz9Yi@zs$y`m|#9o zTlbhJ;yjc4CDlCTw-tlpRC~jJiIeK$6in%t%QPiN5sX^Fl~BH*aI@l8b1NJ%!zd=B z3}X=Qjc)nx-WBFzVtYA`3OL!+M~DN2;Zmc(K;e^urScNFz6dEE34Eq9h1r5p4@U`` z33&?P%Lr)_Vr9gV(Gi!5PMpfjOu{@a7CaKM;&_*XfYiLj9%hF#1L&laHDyF~6{?*wwj;g_7EY;)pP8T_!v0?@p| zRd7v590!@U5P9&zV1`EXWbj7!iBil~iyR2XRFt~7T!Mqkcc?w3GM;W+yzzXH-vCH@ z3gu?yLxteq1yrIJ$?7>OR1+w1vPE!M60sT`4hd%;FYGTOg`ybeW2M>b>+s<^T0G3%m{742W@BO zurNYMoy5MQ=QS1#V&)9kNS@UmpJV=iS}c+<$(RA z-?-GqD3YkfX795%L5X>Us*GZSueSmCm5BQ#5P~a!i45~792oH_Shy%SNdzJsCh?g2 z$~ORk!tz|c3AhlP68O|0Lyh_u$+=R3Ul;I)D)e8aibmbarE&@DuL9$2PsUbKnYRb1K)^9 zLsH|xd>m9DgB-353zb|EnvaBdR^UpPQDMSGMAy)$96UOWOn!ml4g=Ijhl-WLxI7HJ z!{|n5FvRf_#IXelQk#{DYLq-HC9e1|N`kl&9*5~aUHt?47lnppl&|}zqZVWLL~s2Q zpOSw}8RG758_vDN(rp=}Z$8md)sqQT-N`ZiPY$6_x-LDFW#(8V(zp<~%bQ3G8yS;{ zjQ)HX{rykmO)(ccmQ81dRMJq3hZV;gjUH=t8g2v_n&e`h$ow!Ra=CK&BE0~lUN3?O z8FMiAjU&ZvgcAJ(S-1m)htn4^P3BPHmojUO{X>J(Q6S*(bmK7Kc?p!o9|U~hYf{E# zj7oZjFiBwwEHt9E2!5IR&*`5-7$zilJ@!p)pCM$%`2I|<#l^ppF`#APKe}lq$gt}^ zCXCuD`KQWZRmPD8SKSjpx`von{UM?3XL;sjI4_o=$N8E4>Rk_LOoC)_jx!HxIFyCU zn}X#^l?aH+i|2q&;aKGvTqNMU;!}F&<|vE{ z^ku1Hd6l19rA(QGBdL>sj3FOe^&TE8(-)Rvn{XIwjf;*K30V$FR4aq_XZ0*#nA>JP zW319WpZn#2wh`}+r^oxmcfgw={>}t?pX!Eqm*k7p(S8W4#aWm$tUrP> zxLI(QE?gIZ1O&Li@mYiiBna?tH!57;7I9Nh9tnZ{9YpM%#ve)g2NmfAbt{1h$~XrN zVrGvW&S1pd#;ck7XZ8ow$A%{bwT1g1_Vfz<_479v{MEPpk($R946kCN*TgnP5?g!| zX`%O)c`cV7=>Gr^)%KzDpVu<>f)DYAZV4jaYGBLhLyir~S_?{5_vX(q;{u>cfe6vS z)4<0SgPETS;Y3Kgim6O5#*C&@lH=$OCnDwYb8&$xVl<8Q4_#Dv9xL1fmHvpHko^M> zSm1C*5N1>m;2bX;)J#gI9n6)<`#btq(8D~uw=9P`d|Tzzv+?jjpXCB!Dz`Lv0wqbQ z(rlVMKhgcnjAK_!`^Ry*rhF2=xtR8Zp?R2mk?LIK4v1^`hRZSgKRMr~ruAqy!77cTf5lTHjV6vBWURKh%j2oRb~66L_RjT0O)=3&8` zSyH(k4lXRKmLLgy92F1HKSg~D`mABX<`aHZ7#NIHc$vaw!^KxAhLp8GYJXD02hT-w zogc&K(P6pb=9b^ZvH7^`<}S|V?reNbb2|J(cbX7C4~1X92wWD&{uzJH3i)HAXEiIR ze>SF`^X^gJcXO%YZh9t;$&!O6RQQ!MRA|iHR8blchls{7AqEyAir5n{3=+hrC;(G zN`W%YsvA~0h9g2gQ!Z%&(|9JZOsjn;wJC-Y$1;Nl0vwG9!v=7;T+AUA23)v80wk8j zGMj-3TwJS!RH@brA`9Pvk-G*Hb+1 zll!Oo9G!T~s!`g@?=gcdggw$Vy;RV5Je{Phd#CcHVs8ZPW9mK9&ZZH~%AzH}jJ!uR zz+otL!JVO4Fia6yoB~uLpj=~}K;X5;w<;OqhXcU|AWF{*P=H2Q_$X+Zjgl!cluLpi zUgdKUcp`NKBDrPD=KXc_fy20JCmTZqVT=wASi@0<=Cc(y4MY4GBG~}HZ~B>lAp7!U zT9lw)$Qb_sMmUC^(aVlIhYq8>3^{-hR!nLf#YKd7_rq2^{{X4{M+ZM}aD0d^P3M#p zsvi*vUF~p(<&{GSfJg>od~mkLJ{1M=fe^%^1So(KxULM!0GHxdo(#Z&DpwV9tA?B| zcwq*nTb4$qI2@pORh5E6yfY$0lTcvH>KW9ho0l)?DqMLE7Utdr+Xgri-WI!MqFCD) zu!jNYxJCz~z8T*PV9yLA!wy~sxNS9x+4n#AGpJ=Hk%!u4PwyJ#fX)ZuaQ^`BX|PB5 z_Z)=7=1uF6PRKt55`a^>BHOz^q}gJir44T;EBUw$CZrjNu_m&@oZ>t_B~*5(XvZO( z1)q2#d*kE4^5S63Vs$ix@=Y%{4|!!vxl*0QoIqKrz5&JpEGD6uVZJ+M(ZMpN8{rR9 z!I`FGsD|ftJcuW9uVfT~WshEwFd=!|tAhd+6C?o^JZA%wgVN>&aJZUVF6U6e1$~mD zX>zTYluF@)aEKzlFPfD*^f2_RfZ^X4!|4no#}-_@rQ6?=_vhBdFNJ?+C!($}eh8?) z;ZO2Zz{ako%ZF#*kZC`G1=KR6s?Prafj^p#(d<9R2mG0j*)@Z&iToJzj?vBym5BcU zg#JbGHN|BZ*WO(hI#U8%N8)AV_$Wr;#X}PLF@hGRP^ovQT2&JD3Go;)nD|b}(4JY6 z3zxvcZdDT|P>5D$uBBe}5EkZpkdEhfDCQ{x5gAH_Ow#4TFej5KaNWv`Hw{8RL5B)h zZcw*82|)uhdYY8Qb5UXzp)Oow637T+fZ<^m(s^O(D>0q$@;4G;4R9TECu{e|=&_6# znBV^ZxJ?M3-QOVNk&3IzqvL1g{7rqXW|N{1=gR(wm5Zy(GL!L(i=c<|RDHVO-_M`d z77LEx-@wN}!)jyLpV1gEGu=o}dlM8-^JZI)=#>g?V>-nU48ai2q5R5~1_kemiHm6~ z8G;ilDTK+3#`QJ1WGLJK#6@mdm)6Hy5Uy$!(3H3Q(_`U_E{ZF4*2)81Qb+M?79+*@dsPy*x0)Um`_*8?%M z-Wl>ogMfP2dXD2CK=620I4TngJNDq<{o(p-7@lTKe9LXAdprJlWlj9OZ}_>g#_!9? z{7ra&Y{DJzR=v|GbO@l?Dro%6pK1%^)mPy)E^TaO^Z6!>+EgFIfpgdqVe=7UYHmIf z=2?<^VKsB+xoi|l+(T08 z6e3{_#y4{eM>R1iE!ivC!j%EU*0UdJ)M{1n@Fg4LYzYW?48c+`dJL&vhG`ID8bd5@ z@jIiGz?3bUXHqyQo@g&Jqv8a4sa%|G;`mr_$I>`A$9(jfO=A{esJvk1{{V;hI~X`E z?2obk0B=E4c6^AIxBd*j#}&W2YMXp=21m0Hent<;LqX*YUe_{${PM5(V8Sa!ej1tO zoXDs3OHc z<3T_KyF(UCUjsr0zQe+{O#epz`1RPX1$sPv*5?2ogpm6RS zt}A$99TQmYZ90jFZYZx_{*J$TewzgE0sKqR{^Z9Z$%{YMNBbhWodGpX?*pgaX*|O@ zJE(1V2rJ}qioR2w`eU^ACZx5>&*E;q=SDfh%v}Bi0Lx z8rP57f8Bz=@TilR$#She~7ZRW;Ca{m**&I609Ra8@R;quH}gce=<=7G&wOAN5rlCz%{ro*q4}; z+7E&^a*(guGBXSwSjK&%e;;@OobVH9*@Z_eOJtpw8#F+pF@;#h_LgEh_MN7o054G{ z2o<&oN|=}>f}l~t+-%EGBdZVz3~-yvL6;t72(6e11l+p<{{S1A(*FR0*YVCo#2Y>x-+}pnk*1@=G;$mJO&=3hx@Epn)4w-K zJ`ULEZmg3N=BCLTBl9CN92Uu_e=-Mch->DVK=M%m(ovNx7{J}_9Q@BFAeexdfZpam z61rf4Gr3N90Yq-Z-ecw|JQD_29*(7kreyaZqY-lemR{1h5|s>MyLB|Y9ebf1wk12MnH z0X6naOK+XbJHImr_rmmzh<&97VwLR#edArGSRfmYbUa38TW`6Dv4pl+a8<}b;n{oS78eBc1t}70P z7&Nvaf?}I*sOnJ4BJK->@vY1F`uW|HQ3MO%YWP*gyi-Z)n^D?FLs9q^$UWW=?q za1CpV5>?dF2-a3C;L9hpcE90_GLz}}CF^T_+Vl@h&%2NKe$#Eg?L&=-b9|H9(Id9; zM6o^wYLEEf_m<7qF^P)|GE*q+V!)N8gzXtx)w2eLOqRcn8oQPdv6fLA%TvHhcFL6! z*FkdrNt1G!T}sq1v{j5ndZX#>gxQ(4pezj7k#-a0;Y4qhm?FelB3!~%fv+%*{{V;` z#wEJJnpvvfdFP)n(=n+UKz-&xUwCg-GQpR^gktN7=9UuRBf%WP>rl#Q5{HySyg~OP zEuxQPSj?hha3SUczN2=;2XeXyHKZ~fOwzR-H4Za7uM=!giqE`GkSEM)n;mc^+(4I{ zMQRw5(lLu5`dAzsZOqiByMW$ctfjh(8JVz(70k$-0(`11r~C=^*DMnRzQz5We>}4t zME?NO=0E9{dHI{%{J)6$c%8%FQxtV^UrQg6@Di_rE&)Z%KIq>9-qT^PWIU9V7@bKW(svSfkf{NrFFx@6$pj5f>q5+T)33f(@?k@nkB=A z99(%b!6?fXF4^2vOvojM1mLhkQwc<9YxigL%wq%upq3g3_x$qe8rvEkR{sEno$#yq z*?uZ)no1YU$1191-DnEdl0T}I!MfjmEw%i5w zfr2L#To<&m1x=tR_J^Jz^^`9E0GaZj>b2rvKMGX+rDRhngd^H$qXqPq1F(Qi&6{)P&dn`|J zmE`{b3t*NLtDo?2!STq}c6^BMzu0X50M4f0d8EQlu6aTD;m_?C=b*Lk3v{SFFWuCv zZ3+yucp-p`P~lC+t<)6MXIR{BK=8OJ?kE`z5m!Mld#8JtgWe|3?I?fPGO?4->=hG% zlz5w<&-8LH`mk41@=Lov2#ffrj+A10VqHL9#xTrpZT+RL*nQK68zv?H06-tbCPF+x6p~x7DUmk~zX?VWa{w^yU~eb9 z$FH*tR6J2zO8AteIy@0p1fyz@ z{{RKe{=-te4Te!SftUXP#G2p2&-nojz&_JSe$zJ!i**BmIMa6ocQgtMZNR#iZ_;=K zPKG7ab_PD=bisIKl&>w5^XJ4pf8DMxzmTMu0=^6_SnIltMkB6u8-68w&z(XEUK27h z`$Pny<*0RVHw-umo&6s8?j~hQWTxZl4kgQKokk0oR@qph#djN}XSYl-#8PGgxH zKW!Yxf8oy))QV%h{{UeB0Ipb&F(0(*%6@470Ew<35@O&V2vj$xxU}H;WvSZ|ynBQw zw>w^9R;Bq@#QY*o{{Ze^79!QN#Hj|=%NHzrO1_$oxh6^W36lgRExf)6TMK#!Y5kH> zSE#?(>Qt{wu)#YBE^pdtn)gHQK1tR15AX|(x9woS5LI%y()TN+dLyP%f&E3MRKyBLxsMYA1rpBt z@iyY14<z6Q-}SA%8WQr7y&|SMDwfh`q>TnE1uYc@~!(8lco|jICY6cm2@P&tnjp{O6Lq zbI7m4bV0g$g1^#ce$jU=?p5Qcgr@AMu`^Lb1MO1kJ25IG(Q~6n%Vz88maIZxU|H0n zU!vmFML;G4Qq^wdvic^8lkEY`&h?H<6O^e3i-ka`b1_y+uZS}}%u1!g#$)Ec!^r{$^BV@kUdAKc<^lagD8Kzg9i*{POzilVSn5`t$F;;Q49fET zpf4xH4ryNK^kwEZEvK;sqyUd{*wKzy+y&PC zbrtqSTk_eO6#Pzr{nPnSA{|X4bp>$wox5WBXXO`%d%zd>HdM$T5o*ZkOn8E+gB1Yw zGY!o~pv=#0<~7^_ZsXMWlt*4t@w z?+YoAwCrV`mjeg6u$|?U7QQ1Lh_dk<=PjxBCj{SPEH7>U0Ee+7!t1$zD;wup{YB-Uf)nUPc$*Ytz=Q!n86Qv;UZaCHHO;bScj z&-*Y=*Y7AZMARD}%~Dfj!8b+wv7ZzbX8J6&PF5;kbtvSW3X6<1U=^Va)K$m%-0)LpJ)W}1gYN_RHPs;R}L3& z7%5bMcV_Q#m6oElL04Oa_d(ugndH)DJbc5yXz!lC!&s0(F*Z{lGsqNtzwezOD~b4A zf5Y~Q(P{j_>4|T_9_&8sJ<#u>Y^Gzo{Rqxs=1se{A}->(FXk;QY#CfUXv^T0%9sZj}nST5S`4GD;fy~Gm*;~vuBX$mGDDVx;PKu!ndbZtD@jL#Q(fD^fL z-wK!F3M{&p4k%`676ya1I3>q-8WHo1c{X0AKpKt#D-32*U+_y}m!mPbfX&O`NQLEA z2zSP*dA~p6EO|yJUoE~r?G9;T&+$WEU*ebYQv&VG0N!ShAwxy-bqoxu$$=Ut{pJk0 z@i0{{p}+c#gYIT*y4+YpH$xgeMrcLw9|t$bU*i;w;7*{Tm40IJxKP{@=Ic6&jW5J| z4~W^=e=x6_p>qsN+{soBE$|7s)VX|GgV`F4vi3q10OVm7edof%_9a3KI!m#kikd_X zRq9hC3hOaASxXo`5Ai3LN#25anf5Kq;94X2r}6Cn0M4N2Wt0W8;s=#L5UuzPOEk;e z&4!8XM{(qN@eb;}%27zIOC<4O@_%d~6`-P2*QWmf#?WG1yf*{G5n`K*#dQE1)FPt= zu=kqr-fmd6xn3A8qwgFTvMq^rzzP=y?2fX+n=DzzV59|1p`v+f(HhN^$>LCB%vv*o zcqT`3t48O%CF&B%VSfrEwgZ|*Ti(_G01smpE=wx z1MV!J!~kBea2LhomsA^tN{y?2Fhkpl&La%7hD=wj)cN&d-;=iK6 zEicLg-7>UWsq>vpre$lopS*WZpYZl9!Nf;#vVy12&szTgkGvT7H;2pI)eHiIn}ENu z^C>uX{MCQMA8Bg$S~tZT|obxUt~X+y%){wuJ%~PsyLV*V-8m=-~8bPJsJ)ll`B0y?-&gYJcL) zipENoi|5`y+r-y_fk7@`H!snSYr`A*y?Sr_MB!7iZ{igzW@)3^XGTk9_=aYg)CFT6 z+$HW)cGj3H1o)06Gu6KJC(kfxLdSw6>?QRUz(6N-4Zq@6!Q1_eJ#J>Sq*K!Y4zh*Zuh^GM zsZKDDXfDyG&bmc$;TeS28kB z1^2mt<+#Th-lg{Q6_fBv%x+TN{i8_sOQxpijn1?|Ebgn~Jgcr|LTfiamvNzHSTZa7 zP0WlsTd3~lok9ZhN82CaS1vCNaJx+L?ZabTug0bz50UvLNZ*tH0JPp8$oxDEKUPEh9N%ZJC!%jc`9|Vg-Ugys z<(DvmTUewwWDRN28f}2jY_Opbp3_IX*Mkq{8&^)OKit@>-nB4FxTvF>f*Xuu67R9p zdkJ)Vgb!hWbV@mBiyraRFo$pVC<8Q3@qTL({P1AS!5mE2Fa8b< zbd`rQP;mKp2my85I{yH3AxiWeTotH`n2s-HF!Ug(#TS6?ZVLX>c(-03nYgFTD45@S zFvNuo>Y$!T4XhbP4w_>@!DYY&v=M;P{lDA_lMU2V$R8}Abohg1kb+GIcw62SFEG0Q6#?LrKF#aJ6Q|8wbL!-niKgxWs>LaJ-6M>15 ztN10ho{_ilD6RPa0Q(`}H=AF>9S1!Z{$^lD$Zit;kq=FM8~V5VZF)RMts8&ne{paR zl2uDs@!Bh>+&5!j_ko5fe~Dl!uBb=3s6tx#Vs+;lxOHb@vNFV!@Kir(T0+y?Rll?x zN)3O^_rPk_8&?<}r6AMiP;FsF_n9OO5|&jiO4_$Qx?>&iTb&jAHS5{^C zjlj-}aUIaVGNRNwU+csHMu|tNHDA*2_h*ZXz|9eY#m=@d2rtCk_zPY7nR4TlVT+2O z4X;w@{lSm4KwNodV*}d2Z^Tv>F^yqe)WyD3C_ROiizBmX?V8@>l-%!adXG-SeW2fO zmstJTjv6=%un&1h#K_a#h&yBLG|o5Bjf)-GKK@z#Kmt9MkGU|e{{Z6dQQrIy;g=6V z`X2tBe&)b!e5I*)nA&RCVCdNPdq!r7YJ%&(h)kwj6JlVE>>2knE(e?$F!dy_LkO#I)`~t`z9D- zWS9aqxTtga{{U0?AyL0}zR{@M2Mtm0_LsF)@I(MvWQ6N;v*XOa1l=2MRA3QT z!7^yEhe_=(y~cljCBZe;gfuL^(zqevkM4tsO-y^t=ie-t!S`V?i(U+4WIdh_pn#+p z<^0HTy*h>ZCr!o%?ec%(1f(7zxABKFRT{}7yJIO|*%-eZf7vl4o#m7V%p>wZtf+kd z0Ei0dY-87#;wC9x*Gr9N77F+O05FNzUvIQah^@ZJTpRpU8;{A(!^8?MR^I9v@_z6# zTL-oYhsY>DC^bQY#7Han9miW$U(90mS4L~c<_xO1xUB=xOOyf@?mB5P-W}Q|S>I6s z892$eiR?Xt`)6l*n;zs^u8ufa@hbk_-+0iyCCMNtI(^BF?q{q6U%s(o$AerGY`GV( zOv(44!}4TzRIi4$ri|vAWsv#Y-dwKY3$5Peh@s+|%tYT&Me<<~*-{;T_Ca zrHy`X_?Me<`@`M%Au+%KUI???9Um+Pt%9-F{7;7#Ar-%gVK6V9Fj^kTWGpK#f_;-! z@5w*A@1`yn9?CHlX7!HiqFY{!J)em}&|NO&!<0{x#8-1OY>@uWnm_eA^y#d@ALU!{ z%EQ6G-7E%sOux`|`g8V2psQ=#$iu60qHKN=&BcqS^)v4#$J`HSg+=Y=VT^jWFS8uo z)hOurHx_B%#v!)_d24ZNb@KouM(oTp{{Welqp{H{>Kk?=ld4{#UOL+3sHSS?e#lyB zM(rQO4mX9W{J}^LzGg#NWky?JrJTNVFtn+8`$q@|nVmndd%fa3>Qhy5h6YXl07Ov; z_VgXghteVYgTlv=Rop$hcoQKPw4pcwMFu{C%a1C8_N`69_P?SkxOUS20G!LNTDl1B zns{ybf`a-urVqb}J|E&DXv{!+>V4r<8*1)X8Gx~(QHt}PUzjzM#Y$g~5mmLfoa#d8 z+$Su)jep8r*?Ah56*;FwQ{~wH;3^gG_j52`dS1nzFoFw1@$_mSm<;Rd;(2G@3s{R>@Qt?OgEx~)Q(|_P>LY!02XgeE? z)h#PNy@mH1_ONV+XN*Pe~loe7~AN5Kq{Cy^hBR#vxfcyC)CMtlFEHO*=#3&B28roo%K7tuV z;eYLq0Pyynt;OQH0#~uS!Sgj|`CpF_ZC5MHF4T3n;+qP$M;7J%(+}{>%rhQ#Oyj?D zehDK}-y=ichY-%bk`CudUlF^H%ofV_l)?|hTbK#9QCXO^eW5$BgOGT`H1P9;R1flD ziGXLx4gPWs>pUN+KV#QsXzlLiGZSdsunH&^!S;rI#>Iag^ITsl?%1OZx?lm<8?8a8 zsqmv;%*w+qV^nmNW0UNE-2VW)g;--d`6j z)Wf*b;>~+XpgzInl)SE`oj5k-J*G;a;k^+Nm_g#^{RsCPh)Y%H@92E8}HJU zX&-4(~R**=>zcq!63Nmu69+uMLlK;yCR)T zF<%oDPuYuJUwllhSG~$G&vKZ=8SOGk4F3QaLu`k$2lTc39b#Ui%PRSd*0b|d{p%0< zg)|Cn#U5UX zZ!h#pcE$eyXn>JLz2We}VKq%eCG)ddUQw}avZd-qp^C@0P@;qs*NJoX-LNkYYZlei z3IS`V%oLmCYwoICha)^n4OS_IhFF`+8MYi+SnT{tQS3_zKM>IaL_jZ@CHl|DrtkC_ zmX&rMQAjV@mNXvD<`T={2F#Y;pwUyzH!JT9o}LL7$#ueU;W(!e01)Zw=Mu=1JH3Tgmu?()=_?arn&~6fdpd|{e zkh~w5FNL$TCqf%z+`;ZSq{`^Z#ml??G4?v#{XUSu$B4n-?-=ia2G~BM(gsNFgbRuhH4ty+8DJYB z(9F`eP&L}^r1rN*iQ<-D-4nfDWgDUMD0l!FroHLa?u4PMd_Y(6Y`@$7&j*$ia?0L& zgA9*>NEQax1jIQC7$9WQ*=@=|todcI1ua&t7{Zv}{;2Drub5*dT}mp8{Qac@_g;IH zI@gFjKaS=B0K44oqQ&+=3H+sa0%O~;bwuvngCX~Uj41Ow!rfieRYU-n#h5Xzh!KyJ zBRwZ3GN+iepZlK^WAKKhhtUQ*PcQCFSiHClvmU+)fuB4Ek8yw~E0gKbFqa|x=rrzo zVrmxom)%)c@Ex+X#{jAeWf^|Z4uUiw@#a7G@KYnA2dkRg0LAc1HFqHN=;-f&yOekM zN*zC#qkyOjd`mHwecv$ZY!-&c5l8)zM$bkK#Ebs`o+-B<#7Ot^F6BboZsi@S=b7bC z0a=D;m@yP9!Ziw7{(zvRNeV9XP9S%IEeFK*_K6uMPr#I4-=-MlibvjmVi5XBJ12lX z)BeI?F!_rqpAe=d)ymYrX!p~rgD8Gr4_8$*Mx}}a-PFdlMMXpAd?Rxxi(Fx* z_eu)8-W&Y4>+kB~0>f`2Y8iI>M5ZdAk~<0UIm89qTx(U0e9TS5wS)d;VxMOph;YzW za=&arCY}*!LRiC$iq@dNU+S><|J(9&1FT}Qi_Y9@Vzloj?SJM)O zU^M>#+l5A*BPn<>LZA3M?a5n75_#ROKK3D}1JvYtzcNr)i^6&Z-Zm0YZEy?YKA&bod8uy&<@dX{< zGXl_gpX)%D`|ah#q?D4#Ti+HduArBG@gv?rsKM~o2Hx?Z6>g@QC55bTZZl=0?;T_G zJD&;z64Yv21(6ZSP)3X&p<`A|ruXxMd9#t)Q3WmS?JcAd{vA6U({i5RXM0W~k zmhVq;)b`Y=1M8+K;!29TM6WG-O3EmfMGe3}fdKKs6fSpb;&emLwt0>Vc$^_@y`n2t z!f#Q8er*!ej-Jm=P1HbA_qZ0(mVJ!9uzd&OH)3}1ugMMNv0EvLykX`w zrTa{Hr||)__A`I>C4o!at}5I=zwBssa|5{ESKjj~Q$N}}^5khcinP!DKnvN_wyvKM zHVpw_+&$e-=aA^|M{K2E+AF677>nJ_mVM=w41i-k^59?-&qq_n>*DK|i z?{lHtBQLOb6kQF$erU#GC>U8UWr9B5CymB@&lbl+2Gw@oysKA5F|Ff&tbapsWygU; zG8Y!XO89_7K9%tBMT0%1_sDlG&iiJuzbL)s@hN8&3Gcz3N9Ylxg$9GmDcn0eByA21 zzVOSb^W0t@jJkS2w6i@1Qqxg?Jc(MBebESfWc8N@Xv-N3*V&CiU`J77led8&BauGA zIutmlDFkrNIhxy+tD64*D5JgI=!!KS%tp66(j>Q3VIhF*w1s9PxQ#nz!cs)$YMZ!sUlQIk>v=(vfpy%u6U zr47O6D}UYUKGe{SVYP43d{%ws5j}ozyo#t1W0TLQJn9Gqd;b88q9z}8nBcxT6YOzH z#8(Xt;NB^r-1fpbEPF_m6zw`ej8DciAfxo)C=ApG#w8Ep5F}UJL(D%Y(+OgN267s( z2)-Empf9;vLE@!k^kzsK@$(17>GmJCp!3<`6Ee^pycs?Wv$^xZmV$|lX%Au=jt(~w zK}F=U6GE~X_z0isOI)IuS>(%YzFFE&B|?fRgEtm@qQpS&5SE$sh0MMtZnLL|tb6*q z{gGnFgIu@)4%wMG0b6-MqaJ`3z$K9i;{hh4)Z;8QQ^ZW}JQKeeL0U_&ffbdCU>qW$ z3`9+0M%77m^D!(|%F8{dq4L001+1fAVS$ywijP98=y2Twn*RW4X-a|`lH%E2c#4Hs z$2MSZxKdE`V+eWfVsC_v*!VqT*t`Oj zHBNh!EM=CJoPddh0ZmQfwG+^T&BHd4d!duTI;41RVwb(~HT0jxqrv(xd!kk@Pic^; zQ7s0k7_qK|Fhmz5PEWK1t8rc$UAHTpQqK(BS=Lm2XH=707iNF}p(oS;p#?%O3BBLY zJJM^UgpPm#L=eRbA@p7oP`PwMkzN8KLI|J`loAU?r3=_VvElWb;hUK?vu3UHX>=+a#y#{Sf`Yo0bu4Ye$@A--N``v%YG1VX-~H+jS|75^^k|;) zk8yP&T9j?bw;Uh9i|R58J}WuB;}$mFJ(l6@&dbW6%Ojzb2G8rKzB#j(FK5InIp6+j zkhroezQ7Nm`sTJGiW6g#XOf?`c*~P`?K0T6I@P5&5PG4Z8Lpp7U<{-*OnJ zhz@wMx?g{LGPD1nUP>NO&DVP;NhbfV5H1qOmb{g=QwEpIm7$zn#Z9gwODDD8W&^B^ zogq3uKUSwt*d)|`4psY}jg5EzSv6$W`{sJ$7c4LY8Zo; zDCl5aSFR3lK3p?Jj2KaFSvEXK`42~xDP+SpQ4z_2?bV7KkEaao_{>9?`?i`RDG?{y=JRf+X`0se7IEdaDvZ5CU^MG(X6E<5-Yr!< z%dM%_e;Ej2ni#7@8N%aKREMf0_c&6~R$2Fg(udZeJvXXUh19{OvbG`*TmvVi6Fy%- zy}JLe6GH07_**`Pb&}#Qpl^UXs3q^UnDaqwPiC+xZB#@~uX*|!qy9Pp(9SeJmu4`{2vhRVi7|GC>kEH>*B# zJ8<@j7Yedm%0)eh4HM9&&boS>+UFZJuKttet?`W;J5w;_(L|9?sJzz-@UazK)>smx z9KnOk;4XbMvrrbJ1=00pxg~@;a6S6U z$vHmjcOzG0ReWQzm2}-*qp_y$2W#ZO4)oDb*i_x2{k~>kp+j(Leh!URzfxPp2KKGkMSj5EE zYe!xo%i$3dhi<0u)=*X&$E$FKa!|JK6O#OMwb*>d{7d(kQBU9;@NRi)t{&be!^mVv zQD0)`M)0`dDL|8)pM`BJQOwx!x2DSupCPwpr_OH{NTJh7?%9~@^&KKQJ%NwS-^g@P zb*Q^DX^@^KdT&R@h^qHGNNoHfv4t%QCW{Z(!z&AGampFzpGn8u>^kC4i%x;%uClJY zdwr=!%j;?`PO6MZsJNM;@Tev#p}MxfgdLbIBR7N{XHzL_1E2UJ$?bz4>*~A>AF(q* zG~0&VnPby@Gm`A38;T#l&v8C;`^-0<+BeT)+{W5vP2HH2Yi)R0$u7+t8O8L2VDMM8 znwhi<7oFMx|0Nroo5Yn<)1xX{7=72o0gSkt+xPlLQB@O}Oh!mQt89Er@vu@C{*aD9 zp136O-9pQt8$pXfH+><^2G}Ahki)ZZK${}(GBnz+r8p1oMz~8@+@?A5KQxZ{z|fe-U38$j|Y6SIamBlefTZstR&w4Zu_?sB@0s$IR; zyKLtDK~bOKb7z~@+xa^)dr_IMtgh2%$e@;9Bwv%8R7vyk%xXOk726`br)c**0)czyjZju*$ePQW5T)ClYNx6fo=lZcO|w{RBa16sBA6@E2GsCI;km2o~>Fe|dML)K?% zhsmwsF%SB&zoB9uZ}O(nv7{zgP24O_+TpJDjcS;uL&BV}Kf{?V=m&EGUi&@h&>hq{ z_}7J_wX4JTZu?S6B-_r6&N!|7CaT} zU6W0wyF~67y!qw4I|A20j!4YDGH&$jydm1^`Xads3ku8dS^4Wkq(A z&wF9!;W28iqqllZTQ1X0JsbG;jO2_I1)a9A=mD!PhxdH9eL?gG%ceZCdmC5>z zR&sw_7;$?Q{6>JgQIf9yRf_oC!7Pj{bjs4dBC-#mCCWpL$M*7yMI`=6{0S?NbdFFR z)eLD#;=O~=f5}J_!QEs2suA5k9F{*l?Oo%nJI~Y&alwZ>zT~+r0pEXw7UwVc2b5cH zG18;BgSPn)3T&E5V{))UQB|9Z(VYW(BYWQWr zQK5M*&-Mx*uI`_#65!ZCT8a+v81?(8w^C;+7I5$&$m=@sj;TVQyWP$xLDl(bSM*|mTQu&VM94n#BdG~$E3q`e&x|UgJu<) zSkdzjd*~ddSO=lWNV5lDQO8tuRs+sxzVT;6QlKV$@l^`?^Sq0zFbAhesLXHcgE6>5 zR16R!UOhDBi;w-xo2VFe=h&ZG87yS^gez_TIjS;!gCgG|n|p7|-gc*7=tgx@ z*$t}Rd$=sKO|i_ioQqKLuc&2Nj7j^o@S1RMlJb1|i*NvR+lMX8Co|4V^8o_ub#PMP z-=5c~BzJk5^ZxyDKfyM;;+BP~$pDbl6X`AvuO66sg<#l6)Mjsh?QOA9tZd5t5zQ5^ zLaSSg339PPEUtGK*>kOnAb*>7^;An5o|10nxGF!aYe^Qw9R%ACPR3W%?}9mH4o%qW z|C9y-tgc*}G0d^vh1O)be7sZoGu!(j|GUFo&TF>C%rH7Yg#E=k>_tG|E0kWQ%SXD3 zToSiEH$u%tBc{va#5Sf;pU1wV5p2Z$qW*PlvLSB}%YmlO-#^tm9&>1?2U-dTKSFs@FpWvG@_OMg8FS7j8^hSME5m zmiD`XzjEFqnKBQJO*g>QvlFc;ZpTeZ_{ba-GU;#z`iM%kC??B$By2yf&E0 zYI%XVB$b5UobanFifh7~bb{olyU7Io8ne!=P7Rnshrh0Ewu?1J1oMQ93ut&B?B+d6;zJ8<4j2U4!>!dP{-xG7{PZ)Rv-GS z>Lf@Uz;!hJ(+;cIvgZ21<(+CU*>Ln7ki70@;I`Xgcin390q~=+HRpXCd;A%^Iognh z%Dw;h;Eey`2LQwi)$!!2wopS4~q4oS4F;h0d6M8-?7)w64p1!T2wVX^)lju(wP(qBsC zmv|4*(vYl}(M;}-cG$*y70Rn>h+kvr9YF$X#8j;nUy_L~m3J71pe4X=&vw#%Np}*W|R>nYc^T5F>Ab0BQ@wX_{CjXnXB+d@}y0r(^n91nxIXZzDM(l z6S7Gb*{8FNe`!~AR43G2$^S@>tOz;8_*0O~u9`a@m*V-9zBi6t?4G%pNryKPwk7x9ss1*(*d-x zD_VbP=6YQxct)M(e*6;8xZ%u#W5`ZHFJgItVZ?05>2A`X<0SeIlW@I%=zt!L4|P(w zG^{NP&eqb=lS;D)6U&3j247EBx>5B$pJ~*7Fo-IsJN6Ygrl=DE+=q+%(HH~xC2pd z44L-`Pu3-+_@VYlns>LktHUycCL7&mC0bC0QTFAHONvFFWj#vi0@xcPDn?aO^Re#g znt^v0v{YPL%F^tqjTbZ{;6WwBa6!)n!-A`cx-Vp_pIBeXlS46aLdRoY$^qq=2}0uK!8O%W63>+(8{20qu@ z@MH3@-m@E`*;yo%*ayZi@yxDhKr)D&Gnt(xw)x%i(>_Lz@M1^hs-ETa(_Ax&zxrCQ z0UhsO%Rgp@aBU(!*cfH4Wy9P#_ri)%pnGvTNos!oWR~{yv*hsB*y!iD?Abi(viJsZXDFd!Y1q z!bD*XV~pUKp!BZCrik|90B4R(nA7-Gwi_^5DEf!+eMIf^&x(v}sDp{_7wy=}B`2ehr2PPS)i@)fHs1dj>nlqbIV@Dkwg)Y1-8VDMVI8n# zeAsw-VVe0Ylz&RAJxOWBT;le`RLGlP;UJD+B>h=lHD|HUygYyZ%g;*g^C>S4t6ZGp z)!81lVK8h>;_d$k7W?Rs0$j~e8mOv#vjM5=+2&q~y$k4WX$BqgdbErOi%GR#0f1_1 zyE^t+Pp8CkP+ASLqg*RK;X+l?|HLlrG(i(9-`6b@_$(;beHOU;4{Y?+`Py%1`&4$k zK>B%;Cg92<;sPKfnj2gI)Z)g1df$}c>r~ZQ=eaVq)cGg$BprD{jYy-2D%CIMWtVBX z!tf1JBtivR^~jd35rxYws=Oq}kzZ0J5VGvVgZ}o~vUk$Oj~;(4nvLAyA5;SL*r}uIy2d@7?)gpf-@Prf|Xvul3 z9YT2NMi^1m)$F8ccHFz9+UP2-&kc#HL9Qy}_UXs=FNJojPtEj1GeJHXlDU$5&CpC} z{w55ab=L-+3&2}^6thst)Kb=0NQoPD1?bXjf~*l98~har>p7aElrqujWZI<=a%@<| z8$9Y`v*i5Vh#=0yat2r@yQ$LF8snnlw7SriXhmEB|GfqIOm%4|luzUSU3g4;0!79M za(|)NFx5(jDgUcvLyQN9_kEi3oV>yvl>cM@TrRy1-bVt!R3R=NLHq4^BP2uX3`aD4LD8&rW? zqd5)q{u{?VCJp@9Pke`ued#~iPtq$XLWU2ri9(@_h8-p&cBXJuS;0;*`524z2PK+a zwEBB)=NCx;>a=Fsm7ORQw*iqd+RB?y&W&pc2gGC$6JBpMXhuxP+jmV;%OP%;FYkn( z(mKIDR7&tY>B=tpH8gadZ-Cfi>qsi691`=~T30&w8d+1{`cqj@@*-e&{*(K)L;`lNa;Iv(e=SxvBlRA@-br0&Tb&yIHvN<2U45G2dz@d_BDv|MGZL$r zHG0Bs5IG#AT5y=ilFmp2Mqf$qlAqkOu8EZ!oM(aDOO{ZPvK1=T5WOdN1!|F*t~--( z_rZDFg;3J=xO`>4pG_YYWvIx~vm&nQjajR5@Cl;%(8oOO`S0Pr#Cw@Fxil|8QEZ5K z#sqw&zK9pv$}4LrUm=`iI`7UC9TCbK+3nFzgxutZcyMjTPb*(u5F_O$X|gW*(w$m3 zig~P^?sDA7Zt!RwI_bo@vZ);<(vgtq>iq-$^`UX3g<3LCiH$Jg+3G#!nV+?<;E%EZ@qb zauGf3%EO<_+W42RY769HuW{`*O$;mZzZ}fJXm3C=an|M)NF3_X|(hM)U+em8A34k#G(+U-gP!KSnX)!v zOQdwWem&QEVZTk0A20H=`A&`-aAh_;Z=Z8*dXuY0YbFjbH{k=yK)t?5j~D#mx{$(a z^gxt{M^nNlSQteQcyI3q4ZOl3u^4@;v1`aCcTq03UO;ddsHKj~gr1CLd`Za?4Xvkj zj@k&&7p|T9+6y#SXQ>k8n)2$r&^=LQ@9v$%c?C=0qGPGiS{}Xjw2*J;aKk48RuV(E z9uXW1ReW=3@F|cOTFAV&$p|aH3xhMl_{$&S#X|F6HeXe&1KbxcSB#lU-659e}s<#=c1;cKx187=AY-z={B& zlB&EM;AZ9uFchG8H(4vMYl>&8)zgq7?ue|}XE7E)4V3Ckx-jgr>!G8TyxYWdU?xi_ zlgoX59p4cKs@rN3rS}MFfZ|m}pWghOtTdhMusgxg z7(971rWxFuoua%&Bc*H8T*A~}@FjfLw=v(h+Hx4Md>SdJCOGereGLo2lKL;F13FLU|`?jAMsjbV0tA-8}*_I24Vr*BirS9609 z3O?1No|>}eDk0{AGcdc=%xB`ZyZi$QH26ac@ht_Hya@%(wbG(NU1FgeC~CfXT8mdx z;VIfL6Uc*wuObl)>j25sZZ-p64#TR^KE*-;2-}h-%oFXysr^pi7THztan^3S@4HN) z=&)*(SxML&z)Jt>lo}skpo-;luBpD`wYyoA8mF*tpM36z!Z;rTP%)gL(+`Dzgas*n1n2k}+(bl5eD~0WLymsyoZ_}?Y(%cWF zJb54cTWN8gml1UYxck?*l6GA#dKr_y!5tXfz?zD%+g0Ihts9K2CE}W#V z)7lx)4TL0SSQ5KPQ>~W7AQ zI_jIlTt6plz02lncGtXSZ{sBB84Kgf*1a#65v7a^xwYn|cnp?F@q+m_MJ*mVBMY1W z^4*9hvQ~peB-O*|TqGiHr3KX-AUJwWz2Y@2AucajRr2)9)24RD`xW?rtrn{AE^U17 zek7emmEJX^Zk8nQBsb2MhaGg{3NQxGk~-97K1^*9Z3gsNMufaxiN{yPIy|4*DE};8 zk{um}@lfp8U|!3A4;w!5>kSnm%Y*8>=oDgX)w+UhlY2lufl0xu9d~6k9A0$(Y`Z;k zM0apdqd5@l37)YSpRcR!btDUYE9t`F($HrIqUM_o#B4%)F&wCr$PpDyShf3ixA052 zOeoZxz%g{WHElcFL*-BaH4b4^v+fVw&7mO3}T&(%|CQs%YaP3*%C7+w+wX zs!2lPPsn5D3n zj5XHW=cgM#nRCmEIOEsiYU$ThG*ceBZ;@|XiY;5gIAj*ie^Vb!0{vBuu_x9f6efWd z^(i&mgjhYnSs8A9p<6cmJCmBzKLl(p*7X5%l|H^FEY4y|Te7N}t3p;ntd<)^v)(KSyytcSBt;4#CB&@#vv`RStyJ}x5ZLrRVjhp^u*;S7l zGORCZcHzF^KACkyEy~A12_Q;#FpDeIKy1c_BTjo!=~jd7qDC?0coq7ODL^iic z<`>#4o-($f?HeJh`JFCFF(^V zAug=6eu6PBUtfQWc!J_{J$sz`tTl~gWzd3r0N3?N1fsOmvYT8TEsOcs-TS=|;nA^x ztxY2Yy)-+Fu?Yq-YiJ(0kFZQ*p(hY#*$bi>LI(9%iCr;RbF%t^>r?Q%wG{KLo^k`U zesQ3I>q=G!n6)~^rlvKHy%{vWMHc90$xWl+iq|JDQ;~2cbx1eozxMmU3k|q`;=ef4 zPOS1nQfd6b!LX@Tf9jENDmYrO)UE8#Zu$tgL!kXFPY$+G?8VJZ`^;UzRA;5U zJ09^2suj%Asczsq79%z~D*NEv9#C7R9KO>-P$^e)kg4pr7|6Zzi{U&haT}UZ+wDff zcge*KjxAX6{D#U-jpA=S7mv~)n>?yGVQh=)-#nwb<*icyy@Ee6stND2A~O5!Tqb#p zTb=SFTbP(JqYOu)&NhQq?d2QkmgG3XCfj?sBXtv2KM++RY`}P<>iF1FJYqx6d0TZY@-z~WH99&Wn6n#YS8!z zydc6|IHMqJu0GnG!o+{9(6}pBL(#JJsrx!9t|((;_E@>-3tN3Ryff}UWnlXZI~Vyt zsCPpoy+8KcqT+1NV2t=;!7)VWWV*(uni9-vpDaLm2TOsILr7{LVIkxmId#SOa*qJz z>I5`@6J(>te!J02D^zIqjd+@7O>~IkcHw~ScEW6|(8;lv!*7>m5iUz*x@OQCyEmH> zxyjeost#UrecK;r$-6`g!-y!Wm3my(CYKj2h6qmStZ_U6Af0IIUXErUHqqOpLi;mA zZ7#agT>n{9C z^@|c)WH70lyp_l-X|?3GfL{b6YUG}&@xKz`YfO_pg5CYcF_lM4nEs`0Ec{#*lT|pc zpZ`OJ?pGDh-?B|s2bDSyxJSKCJjtC%{X911ojBHbUXFz(*q9^}t&-LRmURo1P!|4G zIi*RQ0mB_Up5@#!#qhsmhX?F#iD+Bhk}Hg=X`?N3pBDQ!)acBK68izF=}Wj0D9DU` zoVto)Elvg@HsST8IM(8nOV<@}av*nCmD^b+4Wq?_KTt;QGlHpQ7ug$-*`vb-lILfk z?L*TSGUC;*Pzx#AV7EVViaS0*3u4NI$=QLkj9u`>(B^jZy8VLRNn+&H>Db(}EaR|HrGKvx$efG8S>b?)*vfB#7QIo!jg&T1Z4o*@T_> zmGB>nL&*zQ0U<{@ucj$`f#$G}5@LqfH|3b}w#56-cBlvQ)`u$yG4zu_04MpMN|ecT z8g(scdW3sah*}8mzqn~_C-_Iz2IwbAhR|U+t8SJUeeUHGkDuPPihU_08#b9tB;(3~ zC}nE2@(G(VXOWMuiKEQ}wJJyOP}NDr%ib|q32fhoMFyE+47!tQHHCS8EN>eh z#s(iL;9rH9mR<^H4&ReiGcK(2%`iqeTZHg$J*P&6%VJ6_J?qABjyTE_2e<;U>4H-Rl&EiuBG;) zq%q32g1JGO#R5qoGF!L)W$RTD*Q>;|mQ0GGVrQI*dBuW?sdkT&B>o!p!40wEIH0lB z2P+-DRsz;7clh0*7>pIp>hq%fK)>@_r@`4j9VQVgAlQLC^g#1Ej%!Q6rPi?lAI^h| z$gB=whb(NH%fb6}Nf7LU4$CHJB~}GerNy-M7{3mV(=T`o^JvfHMr0%E8Hl;k!;lG1 z%i0W|=wxk@{tN7DCq&odD&>L?$B}dC2UR47G-CGWsgAtQqWxMn_+Nedrb+vO1?4d; z^p0v%d5qZtIh^P8kYWF=iPAP!Yf$E@@;6$I=D0hl;GsE^shQI`coiuuD~*bMCdr6D zH0K9}_VZlJ@Q8t)Uoq3lNB_WfD?h~kRH-=r$M$@#3r5NP3e%hH`Vy|9Nv`Y?l7y)) z6tj!js8X@nxS$2Ztg69oye6IkmEN4OJcYuDtj}a{L3fo%uc<-Hidm&rBq%=Gtra7Z zw+W{$lG;M4%v&d4i4L(cBxo)lRkZm-jRhA48FbLNth^nE7o;L8VWqJ<+)nX@i(mQq z=lD)?zGN?kQy?M~sBj9l=u5G57%0pq!-V#c6UMN7+d_B1D7X~P*5N%bU78&Nu7|U- z=&9p0=kxz4u*y3jw4rlz_pu||jaT|bg)kmzVuhNEx5xL+*?dgcPGjOH`PVSu9N8kX ziJSIen;d44oFZDci27xx`UxJ$R#zB}=#q~dXUEUn*&>IR%6+wjloI0|TGVEk)r&po zPDJuV_&z*#gb0GSgfD*mz{lt|iUc z8ksPq79Ie;DKo;3&BZzV?E*^WTZdKZETg?CAjg!Q%Vye+&F-7^$tt?VU(d{ZbJ@Rwirgbb;pU7U1xL%WYlj4Bj z?>hv|Q+9ZEKqzI-9L0-_l~}yyuEe5z8I2-DJr%vnD^M4zVf-VaClV#n@Es;MF{mECfV-a zVmEWp%t|2Xe74amy#GIq9a$r$4Pu3HFc9N4HoKB%6RX_-OHfM}`G<{s z?_|!O>=#a_u?U{cY+ZqpoXoSt(J1txELm3B zK7B?c$5sL8C$are%V5pQ6H53hGsbuKRvdUc%#y6RH4EggI&>F&>dp;|!D3l0Xq5i4 zsl9@WElH;Y76!C;c*f~{+eg_`c0F?Omd%v{%{#ow7VnD0y0@)^JgzF?UaSQcgQm0s zQ6^TK9`+}ezGr1;Diz?;4x-@qbEgld0*fe~-7-7pEtHZm#949*kh=o{{Rn!Ho>9VW z`L+RL2G_@fOf&5E(=#IQh=lrPvM(|+mx6y}KhhhDweRZGgV)9*xr)WW0U1jSpqUBiTNt{{SG{XE2uqw zTQr!~j=@%svzOc{(vP%COtb_;OLAq*cWXk}65+ouO-+hy8=;ZGz9c2V%@q3L+%TW5 zUzoT1-&R5bV@P=_#Q%(_2yM53M7%iI{>ak&fGjf3!fms$LIBduF36}FN7IEZZ4$BP zoM>ag7vZWoFBBDt#%6(yCI;5NZ@gDcYu;;49cowRhr=}z-W3u~Sz*bjeZqrmO$v5C z8%hCTQ5Doym*!DSAgQ+ksXysV^#nTnqSByrtfT>oO1V0;z3`ksxoD} zxwD@3v8Gk%@Q7w(^ihzbnYHt(m&{cmWRqW&4N(gE6J8Uz%E~D zn(wxU|IR}YxuBq`N*|?qyH*+gYLTAo_T5|O++r#9nSp89k;zqXkM*w_7qy+XbPP0) zhsKyw#CLhi}k*I{~aK10}COnAw608qfomcMVuv*51RIc|QLTV^SbOjZQH z=V!>YX$>rBY^}pm+}8_}sL9F7p;f5oV&4E-5T83Z;hn%bre>QP=gv2sV$Ew6ozAn3 zjT*fjZ-yq>T_@)~x|}d1AQLJbM$*6XC+dhiJ>RpOn`YDif4VP;GhpX}go7`xG&9?w z(qEg$wj5=M9dQ8&DkP6(ssHO^oV5lkF~=E%6Rouz9qfSDBx2a$Ct_Ma>9zP(WsGmI zfNgkKmm!4VtE|NX8NBm*RtkP^Q_;*Vl+<>Bo#I@m&#~+v{LIBI=OWK7j!Y=Lz0Jqx zpR699lz^{qg8Ue2pASDN@U#8M_A5$0+!o8$M9ar$ZfN#HcJlg;CWNq2G~+VtTHrBX zCq^`^_74;B@KTb10#n{5SsxQ02eDiiWw-`So?V8dK)1_TVR0TQt_eXq+ro;{+qWPE z85HT6f=r5#M%GMjO)btCrB7uCI!?QYXJp+?ix+xmR(?~o1U&1@0^Da$RGoY_D8%M# z`=B_}a!L|Fp^2B#eCL3@edIy zst0m~wq`kO6hAlx4A0OJd@C($v=x*yIW*z=Tht78mkkYwUy2C2XRM z5LMrP&8K)RKx8(EIab(pO)=}!?>S=n1G&z9&OS9b|7*xRG9q_gS>CTvnQL*9 z>fpKpDOB3DXU3q_9C^N+odj$Z1Ml zUEfz-)h0v2CLQ5u5JZO*f*>hld+OU937=O6aORi^(4aLPByG;lnj=ulkQC1V+F8n) zv7n?gg#@(QamA)?hlDp?(CG0?rfqM*Vhr;rOchTsuRN8D;KWVOaigOX5FCERH3u=p zT(|yB^}Hmfft(I5a(Y#8*XE)1W&7&VOihr}C|CA5p&{48Wp;Nwl~Iip*j?PC$!cZf ze>{iR<{DJX;MrD+lJ%x+-t)DliES;+1Q5ZgleS%@Q^g#YER?GBKpop?k_l%aSU%TG zS+z3*)8Wy5$@~vwr^rVdmtY%YkpbMuV9%oUX6h-*%l8im2Gzumn69ErN(82Mc*CA2 zG^faViEnni*)ak|F!~#2nb33(A0*C&wrWkuZ4rD5E zI_t_LskkJ7hBWA-TU*dAncSJ|AP4fyW@nW$2p7hj+p7+q^=QYdQuNp`6I?Yt%oicY zeee?VT`uaVtYk2qg8_~9Rt+Ou<$UFjcZySXN2y+6M02(@+-+eCj*GQ8xQP`{qUgj- zyBMj8gNRYI^|>dVcc^6!?a327h0uYc(g4nb%>h0Wq@=8o+@lY|CDp8k$ z$pU3otKw~CZ*FoTdDdk&V`gD%ArFM>3nr;l+=($J1fa@Y9OQj1`6-44r&^g;Uh5&{ zSqFH^iyY$>^Z1WdBqhW27nVNBXH{v=KfqhHrqpc8d$WWvxV2KOp^!)Q=cRQ~*XA#? zH!F0DKqv6MKc{f;jenX8kW?1qZiHCg5mzv~oQK0*>ir5U^aSz`A?Nr?da74m6scGS z>ZA`-4cdApL@f?V^ag=WAX^Jta7OGAw0up!>)4=E(E%z3uf}6)v@^-=*&&W0|g*GLg4=;|h_X%duV(bltYEaoD zR&V7Ca?||7IvN;z^Y#mYrQ40lfCH68iatwe0k5PEbatzX--82}CVwSk>ZCND{MAKP z#F%9zUKpw`JuAr!3uG4?h9))#k~EgZQ>tLH@$Oq=bwa`9SH<%rEg$^cAo&rJpC!c} zQT>m=)a?GAC3KK(OXW-!ziczuJhA4bC5w9HEEO1N*~W81cVKT8A^#4#E}vvI!U$%L zo%9r#00eW&s-6RJ8AWY)#r?H5@PO5+ddiivx#shC^?x9TT&i>4WPMPWP4WK1o!xi` zO3Em%WZVbkuq98C&!sLrV>U@+Ev;DDrkP_Xy?Fk8DkNS|Ymqp0XHs!HQK)pB6nbgT zp(H=YuWFrh-b98gnY@>QwjwtVs?GgP?h=^jL%tU;1aIvpq>4N z95&tgGgJv#4c{^YqYJpians>LQaAGAxd(}6Zr_U?<3M%pDznJa-=*dc`~S05()70YKP7X`7dFp927S!?Kr_sbR(#ta zH7HA#$1DqP{*h_NA>fh-&_TqXUDKiPt8Bjhlhf>aD*P0LhYvM6P;P=*pEy;_8(ysP z6^h>Zs?M!1y+~!Lt&-sXN>eGw4+ugNd~XHTqxhVzPqj0!HS;t9M~q6m)plg@-@oxK!y!i8pkUhQtq#q4 z8yCxWlxe(V84H+nV-sX048uVCf0o$OTYd2!*m(j>J&+sw6HL&L#2rjqUNCmfNz7p! zG_xi@l3d_z2Vr-=TTW&6++PIs3gza9lN9`KZm{>b_3MB$>KeIF4v_i%!vpMncrG|c zRnepKM&?I>={&p9>YH~(rVRf`XM6KxwQ%dTuUv||N)C~07IHs^xF(F@{r?Q}HK$%` zGv^Oi&YV1z6vn8{Z0(ZgtCT(C-Rg0DDWaKWd)uo*C&(KQs$!7)`P?8OP#@0h$v@zH z4-gi7@U#D9+-h1eT3tReA|KZ09{Tq4a zp?b|`igd#N@r~^&6mi#Q5&CUX`_F-?ttbp!^(-NpK0V!;Ja%bXNPJ*Zd0e<7 zP5q&{fV&2Bd|05{O56N||1rh&wj^v9;-3p>GnreOcOAUn4X8}ruBB)oEL%+#9wqz| ztoz(3UjM%K+rMcl?E$|wDC*q5%~o9Bh^XMOh>E*RM{zS}ur6pD z6^x^(b{%U!_lXS!k^BQq6-;E-ee>5%s zFE(-`rqXL*g3kR-B@4PFi(~nZ+Tdn$hFY~4YdXJUGfOQ0V>BCokmeJ)@`XrEJ88fZ zB@VCy5Nyl(Svl}y%a5aj3x<6exfjH5WFlWF-Q|CQUf}+>WJU!|xn~^$p9~i!{;hZR zJGMo8!*WeYR}9#@4(i260RT?Yca${!W2@H``R%0T%EIL2xSU$ofG!+z7d3UhCLD!T zcN%+yoYc!k{U6N#jT{^apS1fo_2zQ4(KfcF?rm(k?j6e~QJOxMy{|Y1OM|7$&CAuP(KETxp;;2_hS@d4m0a{|T!W2&)%B;K6qM zPh{jWlp5D!%YD&EX1me~TkThzE+h~DY$;dDBn?K(f$fG#Kp^w~MRt(uw|v{XAXhbg zUCyuneDz^}@9>|h>l?A->9se1jSo9WOP2-#GS#XVE##ME^P(n2r|o16FU?A^C&KGnIh&Kk21txp_MP;J?Vy_)@^ePV;~5U>1tkJNYHG zo)Oz1#__$Zuo$5}<|X#EPj=2$OIwj2^qyFgBNc;W0eZ(^+Fpq2p{ohT=?wZ*)7A(F_}*)J_| zflMi#l1du5d9_74Gg3O;R*v5cEXIUianvjY0RVRVrIB)_VwUN4%*g)F4or%b&!>0?A%pRPufnRQX0 z!jemFtG%s@NW!e8i~2O9xs_X}J}Jz+SI8)pCB>BRj?qPYatl#r{N8Kg)IWQzQ70%YT>XVM-w9&k%t4ZG$N2r%5fxmt^%|$03QHE zj>Jn5q=Hfz*x_?JG>+qnHPXrVB3}`4uk6LuGKh9=^Y1LDJeIS!&$!FWITD7NZQsI- z$DvEYCIz8?nh5cL5D)U4LBP>a=}H6)umGKCL_>8#q*T!poQbku|3+7Gi<_}Lcb>wU zHwtjh)zm9O;0>MiKORbFm@REMQ%2C;0(2BDUyHpC4-(R_T1+%ntU+y;hrt2{V7}vu zCiE|^IeZ$C01yEh_Wb?afA10Ej)u_5YWoZt;7X(irgbnjH+wj_Es6My3Dpwk?d|D$ zGpYV%RUmCu&LnanSW(zQx8FwN)3AIxz{eAf9H}`s2>d<2KZOqvMd&{Q*uPZ&B@G#B zrM4p>NMQzzjB4NI{D0e>*z<-E>V)Gze}mPd`zrjU$@H}(*`N%Wb6-O4h|qGQla=h> z3q}nK00BC=1YbhHV}G5w`5XjvGLm?4;{Ngl>_)r1W|KryzKgG120i3kWG< zQIfr9JD?o|hb1$O9MP{%1Y7|vx&dJ^Q40?cXaIo68o2_D*w02<>{$T4+j|leYh+Bg zgRbScF@oO0J()TM-V&d#S?%nX_SYq;gvr`}dIIfCeS(V}AsI3nWE#CKzBX4D}d93xZYE1CIC>-R+&>m*9`?kSSroLKD~ zxFlxK2!dHhoD#(S=%^YI!lgRVw5?JH-m96M)S+ZQJ^(Iq)#agU$&e5-Gyg*qP58!z$b{L22aRyQm zJ+9IZu7=wwlJx1!6-^W^9)P+K-w^~bsBFLp04{|go;ZwbMx^1uUd2dZ2NP_=n&B-- zi(x;>#jDXctpw`A1hE(NSoI^Lu#kVmK=b>S^yza^F^IKUs@Lps!HwQbQQL=KX$}ZEG9eAg%^0q+vUnu>=f`;lBbCs2=PFsTt~7 z0G{w7NrvTvV5al@ejRK;8KiUjO5;^)@z0dn2#AvWt9)vK^%TOH@DW*nY4jvn`=nK+ z+bqyeYC&uoy)_ykzo;@cnLV9OG@_Fbe_dNhGz(Pc8!6c_sCl!3M2aA}IGHYD1&)e!tNPQ}7mLe)xYvUl+;P!A5mUb3mQ zxy<$Gw#57pGDzaaN~T?LzNvSGEjk0JDAIJ2A<8;(;Mb;*OfEYq4q?Y;4iBmb&GeoU z5JOhQ1j;*S%5SakA}gbhrTHm-utj@WgHV1x5-QElS4<*Jcmvr4x}T4Q4XEtN{yak9 z{CgFvpS0BdZFh3iWpvRQqRCsjY~LbcVKZaoKk}OibacTbcuOjJgZ&_?%xy(t`c~D67oU?Ef_zeJOgv%D{te}> zwq+$Z^BQ(B0ye27EQC4>eD6Qj5Nes+xcOg)!2$m=L{n&`k(aMlkW>) zH8mr+!77tXvm~dghhg=eK}iFus}qfZna;=VcNi4!vrkAkUO;1Pv9ina@DlA%e#qQE zI5BF;S>91Y)J>*I#E9M)=aTG$ahd9fvzV5B)wE?7sDFOF<|efz)+?w|;}7N~$Hk%d z;LQT>BxsO>YQuRo5VG;##w*YH`@ZD0?Q1Y6z3zb4B(p`XTZg6>>V2IBetH8d9QDPg z;3V~`Ov;b-ZcE!Yt4K13rsP9JWuT&xUf6Ml1|Bw=G&9ircENmtR#%HdfYWc5$n9}09rl2Be90}f$!K*)j99~-0 z86cY|d!6ZD`2Lcx#g}54Ib1FtPiEV~DriRe(pe1kI4587Sz*4X`NkjDx&s!iiW_L# z7!5`aVRU(p2Aaaw#%i@|0wisAHXKq{Z<}HXHQSD@)D*psIl5`ETzqZ98UEJ57eU3V zGBx9{a|g5%b)P}`1Omz9?#&m@TSEM0@$|aq-Tq*l<0h}*nXdQCZDEJ8?6FPW?sxB&g<9OZr?rhq`Yh&F!>)RCI8_x_tyHfv z;==QUdf8=+lNT0)i|D#ovnkEwsQE@TTHXP*Xq4KU*#(mm(-mt$ys1|Rlu3e-qbS$; zIN>XB?_TPPSoPy+zYe#%fD?V)030Kic+X|qx1yuICnvrI!Lz_j*zQM52a_FhckALu zKBjCg8!WnH{tG{+AHDRLJywiZNHe{sWz<6xjT^8E1F11xAFodUVo8I=xJ%hcnhrky zBAd@(ld2?$Or|Z2XVhFPk)f=6mFup1fwRDh%epr?&+bSj8o2D?5=%jmm@7FE z2X`IqRi#!0t`ArH7>K;+{7jN)H-);yJfFAB<&}Gm+f8WKle>g%Oc1p=)L|HuOJpT0 z2Gunvwv_)k#^4@FPlg4EVNg$ZG$PvWaReZ)psI$Y+5PZj%nvzwDfX+F^~m2iSepji zBxx-TOlWZ@GJ-0tK2*R={BX^n5yk*i0+%Au8~3epq%BM|tfANUijeFdJ76ItELiSxY(}X9;GyvuxDER$_&WX`iJUo`mV#uD3MlvcMgS ztsmyoz4B>Bv%vjS28ZgJoMpFjGA88|G&yK4o9GDG)#R6ta|M$~h2C_y9x~Nq^A3={ ziq2KUp0Pv`C@gZ$3_`>9V@dmrrVwEd%9ITjZ(heIy5QR+-bJ_7V@WfWNd*#ymFQ{Y z47hw27|?>KTEz0nu3_yHi>&O@K|+Rs2|rXzp)cSuZ(Wlr9ak2&uT}t#fK=qX7`3&S zA7Yk8XJH1UnP_EM{~Fv=&B5^#<_B3wo+itAjC?Tz%)huK(un0Zyqc-=Xz45vl=^Nd z^)dt)Zy|Uy?VEHYdvv5rSJ@f{jcyBEhYppaqYJlh4g|33;UBPqgY=HlZ_7s811mpn zx%X?=uCMb2Rc(Q?Yq?<{FOyAC%ePpRvBFN}Q0rY~6K#S)asvr;($A{}sC$F3^9>{o z7=ciCWT_>-yqb+3_l3>QLigV)fxS4YpiHQIqP2mNJ({0+dff29BI%ZgH2gVpGDVIpji<6G`8=x?dvy5Pjyx|l69vs+vb&aZ zWx1@5!9nf1#gd#Ejes&u7+e)@7P+CeIOlA7Cs^<~e||5*F=Cqq!TY8xWygJgT{)w7 zS6c5{*uc?64nrO~x=#9Hg#rIUJdhMBa5_#Q(1F5CSDv%He5Sh{RXJyhLRCg9NXav| z&N23TWG{Z@&~1C0i9L5#@M&fim@cAU()87 zU_{EhaEI>&oygRKjBsFK2AfZ(gk|}qVa1vXW_}Bu4#ERJb)+V3JKBK9HEVo44Sahm zRcPd$F^U+LozHm^w?qB<*maViz{D0Ho^t`u9oe5r%WHA9XHle2UGm)g_lzDzJraOL zY#xm=ofYVbv*XG%WF@`bN*w#?*^oiX2+gXRFD=1uinH(N3{w{>Pt33G&S@RJVt6Vz zaA(+OlTCPVH{EEiPJqat*Fech0;L%cdAGU$XafY`h=L5Z(A9uE8qP<9a5Yk-gz}xm z!xxH=Z*-8-><1jjYd;|OwoVR5cBlMP6KQj6r7u09bqx3vUf5T<4JsjQy7MIPs~$zT zEi?gj6UQJ40)`xG{UUTF>SjPfM|@$$F)gNqg`SbY2%XGC>{@t<0B@{|2RBOk`<$G0{xllH_GsB4B;TuJbPQ#X`1&;{k-0NPo-w<3;8}`}Q zS=?X+U$P?CQgmBP#5tcHXJddo9B7ivw4>v1S2otu#q==MOj0A9-{p z8GjRrc^D!#gSm!oU@_Y0>WZc~&PLu;5J&PEj`se*Tb(1om zw6>Lh_Wd`ohAMI)IQgRl5&j7lXtX4*0YIq|lF)V5m$?gp1SD1sp+0xNl*rfXc7LFg zwxdW3d#`>T8ex)k!`|$mqjQ0GpzqV)34i8Y>VD4!sb7)!c%pZY6n>fX??r5y-wI$A zFJl98n3iAR3WBv*LWjG=k-0VN4bMQ54yt2hV=?e)9)4{K{XcllA1oikRSpdrROp3w zpte=nO3$*V+oYHsH>>YG(*si)bh$C7TWu)12k)C09oMbF0oqnIh7@v?RYE=wOGpk~ zL!(=F4f8QZi$T>eJT@#l2w*k>^V%cUzdTo89ChUp3L;f31y+dBjp7C+KTsQn!evEg zS^|^SfAzV%@!B?LEhdkM^R!oBs2P~%%Q`?jCt)BSYt#a*z*BBysh&8R&JRK~ld6~r zMX&3;3YQIbYmeqW4D;4LfewoDT?tA7looTPI=V&XQQ};uE*F!;f;gQO$Ea?OIp@q% zw1E{`R%E=ss5D&n6;?8!Kovr_11xX;wvHMAP*}|ZaWiU^L_{3ehL>G$j7B+MJ-?e_ zl_{&-ihvR!0PyKxQ;!)_w%MweJ}fe4`YA$xVcY#dH-kcB*`` zw<4_;?qemL68#M31&f-nWE6zdy6`fFOp^u(EDjt<0|-jCh(;`!1sY)t*2o1Y7>h2J zsWhed-PHdQv=b^x5+r2QW_vdfB=Pb?l>+i;x@PaZ?|obFZ+g;$4;$*Sa63`3I}{Yr zb@@!`p0$~TD`+4ThoNCW$;RO*>(QVDrvXA7NKI{|phgJEQVhwXAs2Iy?P|^B(H0ny zx>D&R_&1G3CmK^Wtbe+saP|9<=#KSDJMa9$8Vb*t4iGF&VwN_FJ(cTGq_7=8Be*n!9+9mmhf^pPqrSJO3PS{?IlONuXM5e49EaQ1i;h_z-sXX%wH+2KptUL0{&<&wXd!HoAz%% z8Rgc1A|=GfVB<3(`wUbziazQ28BA#gJF&m=?=V(wz%1}9NIVRyxD)+aY;t>`h{4Q3 z=`uP6c5<~x>3xMC(F3wOXO(n%Fnf-RJCQH5)!9h%l>Y(F#P9^e5+EGr@6M@%LeDQQAINTkGJMXp8+KLB{k!w2%`{Z)d)IA~xM zr=CdYVC%+%A`FPqsnjNvZp7y!blq#~jtGsgP{q4tNJEggom8orL7<6OES%|H5Psqh z%=d%mI!l*wB%TMmVCq zGH6||9OVHEbgFCH0%Ryc4$MGLW%X|=3Py1rNsN+|Mmmz07%V0TjfZH-1gK|D~JKbMl_O8j6bbm{Nm2FgSu0LgEepNDdTx(y;NU zWwJp4Pt3rrQ<(pAo!DLOyF{+=;7+KA(uusikbNeW2LMT2Re6VBa;O2d$)eqjCN-@8 z2gVH0uH>fwi2BS?&f?)e~$aRoZ?B03u_2cbvj-21!St{AKezZOq@ zAR3k-)FhDLM3;(~Mi?NTk{vX5mf*zBxp#!GY?MpNYrmV@A%R9!Rs>~fzL7RwLtMpd_o4Gg-{AR zT(NxIS^}L?D=P`qbo?_{gjl!6WugTOI_lx}1Rx%i$F?|QHtJPsv-58x-56-kpr%O- z^8v$tjIB%GUVVcZggfzBgq3)qq1YW}SyIz=BuN}$JDVuN>)?a__&ddO&?~z~s-$z2 zF&$W*D;+gx@FG^|o*k3v2gHB$_>+lH9?C`}bG`;Z7Ko0G!Okr%Uorn;Me zGo`x{wcN$DRl1otBRWUKvP3C)S2<2($G$BKMiT~{sVkF*IyVkOME4I}HJxLpAohRiJM1kTYA#P{?-VPn z#42?t-<3j5X2LBf-Y7epG;e00PUI|koxC%iqEBQ^Alj{sCGvQg3aNN`GefTk8k?JP6>ihAvX-919tHGR=My4$F^X&_3s2$;_P6O?M`FN1{6a?Eti5M#p!_uzf zK4uZ`zb`iz@pk|5xk%Iw!agEbz9Rr;Fu}An3~uR~>oLM+{QSugY*KIc!wr80%FN7U z|DsX-#hm$oa+Ib0zy!hcJlmRxCGuTL=#U@@jm0F97X$ccCLvo zMBfIvA>}(uJZJeBM?4EjXJgW&TiJps(9(iK)8V`dQ9^%M-p9uS{0z1|25f6t)MZbnCbPru*BJRddL%CY`gq&D z!-vf{2bV%+b>5evE0_++PXGMv{5){t%_WJ#5}=2!;Zd;dpk%^sfdwEga2TB102F{? z1xJjg-Hm9qiN6%3`-#HZq=V=w(>%{M;Lp(;b{7?JQRMNszytl|6)aBGCv$mGV*fgk z@8Q#%!k7F>?5Db6K>{E_XgMz-xYOc4rryjN-G{YE)?F)611O4<_lxMD(GsQ*58OWH zbV5m!GB>{=H|;Z-SYiSX@T=1g%=nVUNZ>jOWmnuLh)CPx6n5huHX?dZ848iv_-MH%jY57_XO z#P{Ne2a8o&j;LfdK|Aufhzt+qpVLX#B<*}LxfnUV1A*)g4~o4^CfaV6M_x7g`Mfb4 zz29F&;#~&D$q#M!1o(Kl+96ng5hSqg?GaQxY_#=`!r^V@y(qTkK31Kr0SFoNlB)2r zlvGa(phNRVZ|mk_q`*`DIscao2L)q8huY*h_bWvCxH6j+;iNYtfv**~jGa_oDm%hy=Fh7eAPoiO`n+ z5H6!XUNj3FudIY5Ecm$h#;#UX=EK zrQFyLt_!7bHRyDgYPseaR+!{;)O4@nPRt*etzO?=jh`g64(7G*shXn3O!uum#qIVg z-+KW&k)ORQTokv72-eWi%mN&aJVQSx@w)flVuS3F!zE9GBs)$2&YXWMx?G<3PZxUb zXAeIEgc)ms-g9atM}qm9@+FHm{q)<^z_y(3@L=8<+b$Q8WxK{RR2%$= z|1TPtJ8_zVzWYRcfL{P@dMIZs9Q?fUh~FDXT6z58atN**s39g?%QG63(3kcCXPV~d zgLeiVxAQ~ks_}}eLW?6**3tJi_syvb#dR~>&mF%Me&jY(A9OHj^1JrPMxVkb=_jvt z?4^79z|FVWceUAOGQ{FJdgf154qPIZttm|`fa%)8ba~yevo{as^NM}E(`NeB7P5ip ziFTdvB+<)&Y_T)E>+^d=;kV-dMGLoP?~<$N)xV&LjF~jnK~~V-*If?@8V6XVPMF}% zRK_ZFE_IwkC}KuP*c*xdvnYP)WOawewEgjV!vH99EUxnhjO=K9Ax)-EK*8^See+xK z|LVB7O6EJ5rJ62?eK%B6a&Ohqf#&}lzgi3>OITyN^0>*&{EN#Usxldnq(j**FaP^{ zwCrt`q}?kRVV1mECjIibQh<#>f_Wi7l3^GMOjUiuX#KzBq*Bx2&|XZh=w7*pVXnvPk}wG>2?n=j&TAHV--ZhfA#;*eX}1N3OSIYvL> zw<$*2UIrbHwWLDw{&iVCv0uNeQzk9}?y3U*sYzpb(Z7yhm}6M!t)Vxw`R7M8lBPZO$?Vluvlo+Gg$= zO|V3cMl>Xh_!g9pPaQ3+4)es5|ECbs){O4{`|-)0@q?!t!Zaz>PtuCjL>0d7I=tE zAthVX7C)WZD!VH~3dq;t)N;6UT{sdnms^l}XfUUIhD)xVU=dd+0W=l*0|@^jshLcu zLPicR-XMRqW=ZB)6#sZ4f+krx-@uBL_c@N1qUFeK9shrmie%FPhdS>UYx0*;Zje`o zY&zoe=|0@CbN}rlq3k!|Iy2FQGgIvtBg7vRx#$eE`X!BIXF18Iyt=S&KTlD0H1jX+ z&h3$A21Z?Ge;y9H=xWLHMHYL`lU{B{4nOwM$PY24?LlP=X^APzu6>2z4!yCMBW6SN z=g%a*u~LUphHdei+)N^Ic{&%ZUAOC zw3^AlJfG>oLv7FIX2#rlR~*4IJ@m9ac|8OpsrNar(83!iJYR+s%)If!nf$-Z6IZv+0==&j_)Qdxi5HUjH?%BZn$N-apN9Jz z&qsVQZT~#gqInPp!Re$;F=5ECyuK|GT3|g{cth7e< zM9u^nF3^g{NR@z}@hb${mc+rGRtx_-L6@LbDLquL+CK5Ji-@z&+tLP`K+l6>X6mP21Nni43ZpQ(9+%59Cv>sI~!}RbLd7w#(-U3-;w5C(A>kcd>dGEJ}&bYn*TLeG=g3A%mz;EHiL__YI&cok9>?KK@g6GF%(hw z2u1>zSht^Hkkv62e!8u#%{86h=`ccDcxkoe?&Eax>ifR2ndL|RYp=rJdHr-Gy-3#9 zYsXrymfuI@3UcM-z!cHWdiXU z(aq|M@qrq7FT%*{-NN60FUNtz}3>!{(*$sU}*ysGRUKRhW zxf}O>XQ?J~HGM(v`-*)_!lKBG>KGt zz4fZ7W8}0qkmG8#s2}83&=nfl$vZrRLs%X1&Unk?uSr%qv`AMz_98i zON@yhzQj!#jGxscbgq0@wQCyv|AToBaLY^7_#RdELA3)CuZWoeA<;l1QYANpi$Bw? zW+dixI}b7G_oMVouz3>eL(Kq5EWuNZFK?{V49_ zPeIB<#C!F|+GU_2glmqhJA$|TcDEvRMlv0i|L^<;Hj{7^MZ1?G5bxp z2r#~V;n7D(q@|;o`26qrFE!dxxwl&fte z;8t-*q5zV)l{!$6(? zlf}+&L~#c~$1Y7IfA4MV-wf}(4_6X*c9Pd+-esP8+t{b6cS@_tnKmt*J*^m`)>c z^Yb93LY@!aq{%7nxnPpJeASn6QINHxR&aarjh2df%3-_W z`AqtsxnvIyuYdmz#HZe!KGN`Vck@iw(Um6@tF~jUo9OC-g?USnEo)yx1(#74Iad9| z2fq51j6lc~9{V>b8`6l-k{dZ~&fp-d5%&is&pFCQdaV0O@P<2c1`2o87oGdNq!?Cz zKXDsAduY*eH^OpluewTV1LPb%B| za0&9qLKajyu9<0D>3Vwu{Ne0Y1nRVa*8f9=dAxNEHfrv;2z>~Fn@BNL60Wj+7Kr_| zl5*`=-zpPYu%c|gc=x8}25eyqZdaME`-8Vb0q*C1T3G_unwfVA?h$P_OSuYd#N?j_ zXd?RTZ{k!9U14lVONifzSgT@C%H;PsQ`l}k3zWm$7Dm`vZak+!LeMwS)_r*{I_DDp z! zPS-!+gI31-q*AA0#P4o2%A`LvML5a^AL**)v8eg2v!GModeDQAm}!_HLuCs|&=(mu z*>}Zgr}>|)=qdI6%EHX2F$KB^zIVy009D25-CGN=_;^P_QmMZcU@QBB)>e12?fLb4 z!;$DE#zfjslgu-`pk?p4FeUWax33&ov0`5Y+`=F0xxV9 zoT|=KI{M`f{yZS@aEmZ*YXvbP+#=8$Ytvv)NIrD{YRNhHUv~)FPOCGG_(;r#;r6kL z`bQ`e8ZjU4;+9JqiWs2H_ z@>&Cuvzgq^5tOA(7#;!>xPU6(K-WCi^8OlXnePK=9W= zxW%;VgSDK#z8+y0s{JDy%okdTnB)vv{3LPsKH9<5MQzs^ED+gDbxyPae4RW^9JUY& zRR`e(__f!CUfhzs``pxCGM4!cpnV_QM&FW$x=Bzq3k`XWR0LZ55xUs4Z7pgZoy$f5 zl+Ull@?w$GpJ9b;jC>Io9v5E`Ck`b0VfQSIiCkkBciXFkC{E8A{^_iGq&_g%w(kD6 zdaHz|et)>)3}X#oWYzoM!6*bq*rS;mc#@1d4g7)pK!h;i8c-OkW^XiAz%3w;I5;jz zc^_cq6sYUDB(B&l*EehMJFq4N4T}%^bk-=FC#7WLdvP?ai++EIIKV>xtPcj%*Mnv0 z=;}k(DBUNnDdgOX)K%@fyF zdFT`_Wnj~~?BKIT?7@kHpGr_|zc#m5LAQK&K1H}i8X=(N4N>Dk-a=KQOf?|GfI>hc zWlc-Y0UYnVExypdz5#|@6d%+BT6>xH7eUcARihkj047FDlYrrh#PNm!Er6)CATKsVqy8Gp z%A{$Vpz-C}Eby&bqARzLj#N?CT9!3R86o+zK+}#7uCG6A3P<6GOw1|%QT|X3*fXQ`t|DOY7LCWotA=X}|B zZqNA_?8P%d9lXF?D67-GY=Qf>d@tzcfx*Jd!scuUesydbhX;fn^ukMIg0)Ijt!fBV zg$Wawl`PGp0lpI@k*L!6g+AvQu>NG^R4cGPsoc2M_5CAT(yyugsq27uLOPDC_L_*` zxOc)61OK23?=ZJV*wkz4TAm}?eGN(5h=7^;+l;CmQvJ8HSMz6diEp5ZF|L8!9(K%C z7ax3q{BYAmquJ)lMvKM&YpG%`9*PC9=kj3|G>DLnUdVxS1Ax zaxxqO%K9Od20beJL(nXc_a;1gYeNy?aHv@iNr>8{iY#Knviiiw@Q2Ocw?P8TbYYk= zJKvSaSN>MFB0}AX0%0#mO~in)+ao(l4S4tjuaNKd@A^dXc0dbi*JPBO<)YXkL^iaR z>~L$7m%CPj6>$`Ua&nUhCmG6bJ`fQ+@wQ)o6I7P|YcwDeqM{}3WJuZsDk4!Vjn+IH zDC!k>Y^-*R4#tx2n&7$pU7@OgyoV~vq;g59y1AoJ)qAu@afOyw#e5FYHMGRr2Xj4r*2VtCcCe1dL)_E$TC!?LnqSF9Kd(>Wc(GfY%Au6?xqudTOWRO#~3 zOBwC)&1+9{K%qg-kCil{K_VCK@9m(IL!R{f1tVOz^&_(&la3P5S}hQ)5Bti-G_o$n zSG5z}GUmZ!ELw7O7NKV~S`-^3SLe(e%zhKuw%$RxJ?q{*FM9O>bUqsKsKpM?mF%0< z-_WnD=oPVVD?FDcM<5oXe=ot4Iv|20R+s?|xu5`WGDg;ctVf#Y_*sA#W%9mL%RQSB z^c$*_L4~kr#z!0_f6wimI92}h5}$I&^WNoH7#rz2lkP_ z*G#suA`vCt@TBj)>Gw@&ftzksSsuV#*QJV@X@P#U4pt|}Oui&gAvdo*d`Eh-uGJ}y z{cIhuaz6SFq?VR8=6^rH?;p&30&$J4Ic>M2-=1Us$I*8saTxUX4up@MXPi%OPPxNB z^{>)|zNoXvX7#b1zZTAf)mhno%Bi!ya9-ThWvJ(s`_0Yft3S?(AW$BYIvIE8{ph?d zFg+B|y>r3k%P$YqMrG(tcV65!Y)Cc_w=KQ0JZ$2c8)db}7l;1;J!FnPnc)=eu*W$t z&^Rgb54k~=?}*O_pZ$8J#Vh=OZ9b1p+q`Jl(A=ueDLnA$6Qd_X@~myGsaeLMPWlH= zn&cZ_6?=IdI=kHd`*+qW2L;u0*Gk=W=aZX{2#WmOH{rJ7I~P5S>%SQL0sWw0f}l0^ z+wIR`ZD|z_#|C0Qmjn_Yk`nGMy^`X3EP?NPb-9gB#lmS*f?z7qDj~~%N8$ zNvd;POmER?X5;oallf=t<#kVDbSxRy{<`LfPkh)P#f~wtx43CGa%9Qo9>K`AeLi~g z+B{D+1o0b>%m18 zrpro7zKN?+FBz>kZ8wI`OT<}yI=F`4D=^=xo-$q-=rR2xZ^x~_<7)S;&#tvLT-S7K zj;PNmAlMkYpG?_(-I5SOGXM=-|?f^w6`Bu@BZo{ zbMdeL7UKt=#Mp0HIBH)lxZ%*6Xtk^MY|5i`=W3F0?mI58dZ1@^NAUBQz{0?0dR|ih z=eu7^Z_er3ov_DX23^mcuq{3AJsu-6ID4(BZrx%8fnWen!4C42iL1 zqzlOYa|WG``EF0eG29Lw^hmVNd)8>_=IcQanBz0h4R0?d~s`F)ahA7 zctfkn!zl8b((|v(|6-rY5_AimO_(OzpH1DjCm^Mu(dG~GNSXkhuWLowe#Ixd;>;08 z+kncALEj?I%v>ZJw>&E7GCs|;j2fmqJsi}L^6+7m-aoym-o7qp^uFWm65GS3 z;25u${gXERr1^wJF1``}y+8b+h52y|Dxw&TK zvF`W-cFZCtld6;|>7$1Q%Pk}G-r-S=Z?Rcs$rvnliEjBW9@{=9u$_u9HPy2l=)Z9O z!uji|si{wXhLzlC%2EeeTbmU8PtnKiD`d~h@NXE2|Dn%SJMG8_H~zQCR?S~jG7>P* zx8=}1n;rM9*)9dv$*40MM-OMVjvUgp@<^$)>U=-8cF(m@oAJYw76~gKAuAp1vKp+s zLVDEYpIyc+a(;#28GTNv-spB%y6v$`dGzpM!OWgjqc@gp47Z)Kven<=Kbe%B&N!cF zW9aFwoC>c{g@v`LZZjI(JTCoy#$&`Iksmj=DJy(z_nA9SV_g!g)|NJZ?+bX>Got)B zW&bFxVBAcCVYSGSqIp+Chj{Wq|~ zZ>&F1WzI;yb$EQ$v%wD^ls#_07stq(nQz&Xt=Xt;_9%c*wUPjPZtg<|-L*A`O%H`y|C1qn zmaY!~f+4`SM>jk&k&opH`;o^4A^+5<(f~iPs!_dM;M?1Cg9Vh?3 zTpMS}c>b4y_OVw^CqHn%??P-cs=ocDNl+(h7`Fc1^rX+{=IDOp>BoXkHzth} zlDGJCydDY2z9W~WJ^H`Z-(X(}=sTP{MY$Iw8TqBUh0kv__Vls%obkl)z?-dTV~Odb z>CJDK7;2B1C+b?|{wFC<-_qZw{Acd+<7-AG&-!w&^*@*e5_9dUt`bl8e2xvY^?R1G zW&i%|wqvh7ola2triFrrI&xx59P^lFBDL8%@z&Dm7khJ?JZ*!HIU1JgAAXlowU&L^ z(aM@UA~sDnNIlxP_1?Rl(5#PBmbX*mqXsk^6LWuLHXkcWdvVWvy`U#8&-85t>3YeJ zpk807CsYodaXlUM#q3d>eU`(XUv=9EFK#J=`zCIL=RbX^4E{*Scon522%fgH*WF0$ z^g8?J#QXf|ODT1OhSz%kTzKtm>~TV!?e`BJy##?J{;B<$&B|1MPYTnZH|1e;QPIu= z*N2L#4VwdIY=a*iE`7iI`_xvd`4moY+jA)n1ixR5QhrQ5|Iye>Al>!n(^CSXq~5$w z*t{<5dsm%2e`@R6g&PSj=KQbqX{A{6ESIn8=HY4F^?EPX z3!W||j2GC{@P9uxuysLyG5;~vR!4m2$UheXy6a-E=~UG%UwK;4BWO5^`F`i}s)E&< z1K4(1)%c>(14U0eDc-HkKc87Bw!InNaOP-tF@3wFQ}_0^anCB-ZW$+_%JH~TOjueS zb&Z6t+rP2&#N|Dk8@&y-dj^|S782_nzY(W}LBDo6R1_P{EOvPrd%Q`raECi3aohUl z(8R1m%FBD~U9y4$QqhS@{+TQPd}4hyU|XrgaL3s05f~k=K6mPEmFB;wm3Pz|m#vY; zCL8LEn;)l6ByV*y&ZS-US)49-R#!*pAv6VO(=(cXntCRrg?w$;_N2Xe%a5_v?KvY~ z6F1$QcdNl@(bL##hrcJt=cTw{cPH0kS8ne8Pw;HB=&I+_ApXTwBmX>iO8mUpeDJ4D zHoy9e!ro%a=5X%&!{e{@Zi>#L5iqar31OSDQ+k($+qg--`S#HagM_pKCtq{_AboF} zTHhTb%;k58<=MB6eI#z2GRa$&Bd~M3s91Z#XR#{joNoOo!%vnGv7yP`#d(6J8RzN5 zWvTs2?Gwrvn7iM=DKiKDVW7jPvjtf>jy^ zpfz&xfy+Pi&GY@nqO7+sTXyr9gO7O-8sZ~t&ZK_LwM#G?%j(x2Tc}w*qm^nhy5BPs zyXQ_K&2ip8njhy=z90MH?QqKX#hpioAF1E8dsuIrp{DF43Um6rWrH6MrX^U}_Vl=@ zMz1iJ)^u&SYc8*^@^56vwC$mImW+;MIi!LOjz5Q%%?N;wXZDx+{!XzLFSB^jC;QrwTum1!@3nv&d?h*)1U{X zhMkBD>23HN_l(lh)Ib?}(%c=Eh1Z<<%J?&W9Q1v5UnE$=dNP%r^yRg;Z=dhRpeJTp zZ$4czGSsQw`stS?qg2ef*5s?)TWbE%(BHhLXSLb)V`*i2HpwNKZ}q(A8`=H3khbf~ z?lZYxgrP1^GSab|H&YDdJ-z;O?S37*v8qV#lz3@Ua_Fw!1A<6_-O=OgqM}^S*knY^ zko|k#gw&_G=v}k8@e>T{&VEfC|CSIW!5f}9Q_SrNCYHqBcl^1@VnIL>_R9B5w;aW+ z+}rsUqlq<9Rj<}O zmvUIq?e3Ivmx*pH# zx`aL%A}6nRczNrYrtG!NoTGj^{J6Dk!qg~8JN@q;8<=CIx9uCm%&gmJiu%q3Du>hFcT(+gA`cLD`uMv7-~+d} z){2lGSS=h}ecak?ZQL4{-7=E-$yrxUAT5yQ1>)+e7jX)5p z=XJuQj0(&v&n0(b1-(hFjt?v!mox*EOR}$?Otg&UrY9b;3yx@!gw|1YlYwR}NUskAsoK*EN>CuR9obNV z#Ui;NiyUJJvf0!b2o*K>1Z2V6;u%O_%{Sj${lEB`kN-S=c`c}|O&|k0D+0lNE$gD; ze6mC<+87ggnE@1}O+1OMYI82RExr$Zbyzx91pN5%V_*rSRn#NwO>KP8GR`+CZEpE% zt$*2rF^u^3*%JA7tbBRCoZN?e&x%;Vhk3RG?Rqd`M~Ai6FcZ|GO{T;-reycZbc^vV zo^U`JBvz($uNj14X3RA5^J;1vz~0OWwuaQw!Q)BeQ<^g5RLe)TdRM9BHj=7kvLn&s zY^uMG|9W!M(F1^}RZb=u&w+g{y8K8QPXg3h@Gz%z`ZDGRC~#QAPpGw9<+uRN__e@f zz_K;*CQ4RzW%R((W_#J-;;2$l$Yv^tNpg zG<4i&j@u~kCF#OTiLgRZ8&LQ{^N4^zm1{%~(6MFW4F-2>ASUiIg~|;D*hav~+uoH_ zx5#G>qG6hbwN@lka~>Au;#c^Up+bhcf#M(Vwjx8!ErXiMS-YPu5Nb9Uohb_-4K$e}F=yL1>l7U;8&!cNX!$+SaQVDOS>8Kf z2-OY_nJ70fGVQnW9vp00SUpTwl~7rl6UDh1^$bESJ`rQ{&PQ~lISK9M5WHGwOeoa! z0kW#XRY+ZNM>QD}PJtW`f9Up3SpJ=b7^>>(j#b%;)!KO!8FV5I<(aUqj$e)ab3==uwSBgu z>Sn05nE*;zkTXn=`S^yVAr~8=IKiOwcMo^?;qT16Q8{mNrEP1{p)- zD{$a;g`8q(s?^c?)}gkKS(vkO4E;J51gXoK_U4iz?Vimj8N#KrUyh$Z;P9c)gB1|>J?IGpnL-qrN}qPW>VT(i4MvKLCr_PtggM-874Uy{}$*4M?@^b;`K~@J116O7S?5n%I)Lz8gxr z2m~X^Kw!htxaB1dfgeGrv$ArLV^YvHwX7};Mrbgwd<)DmVk7nK^`*0!gZ})j0hK?H zYMNwi{?66uUto2sN+kfJUWvt;A405x>->?u@RK~&U$=F_o7DqW>5y559Dr%T#gyoP5zVxE0TcKxpnOS;;(%^hn zn`$^|s-CgLH@IE7LW5#RsmGTtD9o$4WxC&~$ER0W5Ao?NPNd!Oc5x4xf`C!616VnN zt%u8G?KQzH`k++;w>Hid2QCb&=SN-$@m%JG`=1$&j>w6o2*^fnr6%r{wNqLWU8{f} zA2@#W`EjkxVH%ktpJ$aw+;$5fA(Zuy{O57a3U||{Gm*nFelk3wqbj+)l-OXvH-_~! z6Ilt%24Bs?{~Z$N{d&-J*0yo(Gr>&2L6Hsb?q^BI8etzwca0k-dF^NPyGN+xhtENT+{AI_y7Ee>b0Xwjeh7 zbZ!6~rNqoJv+q#aB%r8;O3DLueT?V^i4(Ju_+rLxJ%T^ z(7{F7-fcacU!LzARnYrANI%$=2##b1`7Ym3N*H&^u4dmG#ou}U=LZzf2^AOA`uH|b^=1x*Kv z3{u*@Wm1rO?RPmb}hl5K4;)lBOIORMSmNZoA-MN%<$RHH_ z5O>3xKV__)rZOMmGR>7M#u2Xr&_|III01$9F!9+645x&@qxk$OQ* zb(5?smcWFudZs9I4dDEQK2>1Br?Zve__=$>AmA;JpJH5E)DMq$AYIq{UjS}MEnI4} zsB5K9N)$~gCF%WCL$;OOv*2(RQix+>nfE(-b?Sl){fpOVCGElB6f~<*il&e@D zm#1_Gwz1n-X!(lwcB;X8`SlL=P=cL*CyE}&`}A!5q6vJV3t2YLB|n+4=MVMRsfa(0>{C7dd^6} z`!dwds+YUxSLLblolXzcJ{uMqspo@68VkGGdI&C={*!xh$<#XF4H<{$un~w1b2Bao z;KmRvmhwE(+Zs{dr24Q;=MIa@;&A5h2S;trni9Fb*K1cw3lf=#Oxw%?oM=>Ks2jGg zRA4Z~(`oL%Loz)gdR|+Z9SI4G3aRE`UR7c#37yE?VUPoB>fLa@P)QaCRb3=)^PV&x z|EKKa1BXlg>xql)$T@B%rS&_5D@k5KH+EwCxH@5V6r`~Tr}8u^ZGYi$5nm7+c@fvz zO$ewrKHov9@l>8KukmO^)6eyVyRguxrR`H9n!}OCa%U#JI6bJ0ODuT*4$<&@espMm zy<0Dzg6Ujq7qUsnr7ey_?wM(17h5mr9Yg>G?to)_96S zfeVCcQMc4oijanZIko)712j8s(A%}j4juPvuh`_DsNIY`q#=`JN*lO@?Hk(nEZpr5 zn8KF(#NtM~Pycfet*pZaudlx)TRBEPMW4>$ppn{Jl*tB>{<^w*K5LpEA3vvHF|z?( z2~(75(kw;QCIQ^;ajct)+%T5wi@sRze!pb&do~4~HrD(Y zJ#sB6sFJ%YZ7@QP#06<{X?T?)1kKZ`ZISJp5`3CrY`GVP*?a%7<2ig_iWupm{2KTy z7`VWvj|m5o^}|qeQ^z2uJ&`=D5>){txB*U34QlE|`HjTfzvv5^Eq7XMv?ylxNFi>` z_4!u?z~Rmv4dVBq#lX7JgzqO#}P3i)TEMm3)PtF%}lz?j#@GwC;{B_ zVDCsCv&J;+7_^pxx-xf{;kjmfry+>jl=Z!tM}G|Is-;^O*- zRrKne7Gs+27!*9B;CT%+0KK%QD}~6gWTkxJI}*lZJ8&&Okp4%r-+JGgwA+&;D~d}c zjYAVsBHnQLH~5eNEZ6)VlbW+jkMumZl9&+hC4CA-c*iIDivO4B|G!B8|0nuLjMm>~ z=dU^vgM%3V2k9UFAJYG(lbvdjl5VBWtSI-JIha3exo#1SOrW*J*c_y}SK&&#KymIT z_loz=u4cV|>!}cAzflb-Ps-xnF79Vq0>(1L>olY?^P`i%MXg&S-*9(ND5t;s$2MR7 zezGQ@Eo0Mk*?dO^u$kn}mwKwf4_fbZd3a<)y9ZFW+skLF z8%f(@uIb0um+l^sa&H{*lRtD;q&id$!?mZ{J%85cGy(C0DQXiQh00A0fJn_+vr~%u z1n2(LK|Zp}C{&CLjlIq6_?&U*)oG>H!ol5?tUE$alfG#lW+M_C7VZp)<=|&1 zoI#?Fi;K;#B~J4(YxiqV24Ty z5?jN^n7`GQ28S~QQ|}UI1&5{o!K8@d!C&2NEYdVfP3ocimCS%L%>U$nS97jO;DO%7 zySBzsQcwADd!i`LMOpk{KiFoOeNB%)&61|;SbNVmN=-loiMhGYQj`-YSgrhJx5zTw zUAtdDqc?_GdpDeQ11YnkBTX0p!$SH?T?tpt(7Os0DDujan^PKGI z-y+@V>Co?#VW`&QIA+WDPhOK`%a1S~RbTnR5+Fujo#9JgSpDKOm-C)YX6OKHZS5GQ zvf_NZ3Y+9r@i@k=3p?On4=Q~`eo%OyDz6M~&;9SgLDy{5GDq4kA8D2HfKhcSHeY&X zPmfa8dM7IDiXQU#i;+R|KQ8|rvPhpVzW>R#0b3bvtah1R-_h{`xX}Fcz0l z(^Hh)W1F6b9YglgM9pp|=2q3SIqM9O&#X;8x@QNvXW5h>vR$2~=p!+gS6?&TDowm( z;!L#ey2;lgQbb+Q6_w#WqW}*+laDqSql{1OpjFM+?y%5&FGDpt1Ds!UbailF#=~O& zlO8Bbq>}HTkuh9aB!(8LGcB?()QlH4n7RdsYaJkh{9d%F+B}?M^`Vi#?Ywg7X^l8( zFE&DAEgk`T6A>Am0r0dmp{8+-S5kmtXX~7w-iEY+_co(mYqNX6{~Z!;P|netbVYKB8Kj;y zWCRks`tu=Yv#glxp~qznL}a$*ArB;g7qOM!L23Xmgqpf5a(21F=2J{j+U_%v@?KMy zl-{@aJq1{Hw}}9Dk4Vh0hSiV;uD_)q1?QSJm18UU>Iv4`)0~*+2nc&!gRk-wPQO;H zVm9mDZftu6yC-6?A~~{A zDrKaoK{jBpNwqiOf3xQ(1>u?zsIr-h8vbHNSL0UpO^ zS-bX4Ap|fJUjl1xwOVa5NhzPD?!dYPISf^Mfqr#HP+aH-Ijy#Zg{tV)BzSy;iC;~ zD5p*l&UPK#E<$GmqBM^TELV7@oSBs^-tTE0Y_N5~OWAbrhkod0=YrARvx$9A0e2Nq zsBTV4v-i`W*6u1*4Yv4EB;#&@&C+ifbrWrTf8xB9G?o5y1u3)#y_`5jw#p|s-V#Wm zBDoEU7;nA;`(VsrsNb8Op&DBzU8@*Y z5JrN-66*&*YNGg7wn|ZqsdSIUfMB-NJPR#_00Ho-!8Ti=Vn1&;9mQBXR;A4XeQ0EY z6~DWYz6KPHFyi#EIVip!gU`Wzh~cJf$WsG=laqL<`TAC=^NBUPd5%^5sTRoFbPYp> ztO+H4NU;${a;GwUc>%Vy1QL(WLTIFp&dTqC+a=0IrYls9PyA=7$@0+eneu5v`;Q}! zmP_^IQExv?biscT;K&^%4G?bu%oZb?+dHFQFqhRj?}c(&VgKL7vrX6CJ&?iH z(L{l&U$wO;Go~z%E*XhT5=#OBmQ(@=cr+~l-+i3tcCvKZzuu@D_70sej_C3EsdziV z+?LW|QnGpe>(>HnH>D(QggH`(!rOt!4-eInYw@sxv+Br|#9~dDXT~lpj{Uz&zy5YD zaj;OBBjqNTBe8oa;39uRZP9$3Yu`iuirw0VKCb0wq&=5|mntKnP_QbFLDw3i=^mo3 zfOAGP@<8zGZ#C_jZlA;WEN9ksuGL2*3O)l6Moy$>$st3v&yAl5SJAR!?k zHxr`wkYbSdA%UVT=~@Y@T1yTyxhK~jiCJ;a@Vk!{_S80qulHRu?|xISKv&V8sSjcy zZxgKI2&6B)V>nqrLdTv_S1Vklh>y!ht;}ZH-ms-pk(HGpCLI1bW-{Y3dvN>w*1wa+ zbs~do`Y21D$AYW21X~B$3G=v_rZd-N3D!v`d{n8wB1kH2iA5i&A=-0OK&h)gkYRWZ zctaQ`iuaPnubz}vwu+8%+=zp1MXH~O)S0lY*E|swnt+xeIKuMFZ>C7|KEhZKq50U2 zWM`$8Agg%1x(0%-#q_$ymDQq|aVv@Qi*<`)>VOMolN@7v+TmKbRMOhH_JUb zWBc^NWB}eAk^%&&5<%taQYJ#T_v$iIb>g!Gf3olLi4Wf$433?7;HShlP6ohCU=*ro zpMVxLm-uj>5EQO&guXV4O(Ss}#b}uceXX!oQZSLKxL2^bj1vQ}79A@8=T0&)rAMp^ zKM6Z6nX|y%+wka&9r--K=gDYbu0)t26c-eRe7s;c`Sp=$oOf0jMM8*Xn{PdtozYny zosnD9wuy$UPn7c=nkOuUNbA!oEGUQVMN&OmHkhc??H`>~H9!mGBJVN5iuRb!l;VNR zMA3|OHSAVVp)$i}>$fCp0B@+!IXP4AVhzq;s0d64GG;Y3pl})sz75H@dZ6*j-{hXk zc#SgmnY9!B>f7YxL}7ikb^Qa8eOa*0yy!!fQFXRhdTR(uUA;#NRwu&@LhE?IO-$AI zPp52KJKgv{sxfQSJshz8vof#T?w4EJ`spbL^D<6_Tjf*5g|7+2X)TpT+K&GnI$pk4 zxw(BN;wpX2(|*Ty`VNqoxv)ILg`Db^VargIVR-(Q4WBFoS4=DFyCJv=miMwr(A2wr zGuvxyk@e~x8_J#ZbY4Y~N|AiWVZ34K;YG0X9Kc^6NwE$(jd?aQd-cu3L2$-KW>KkE z1PcnuObn18S9!AI6)kEIFXwhZpg=|&xu#befJtk4ay~=vODzMoVTG+m?{>@~h<^j< z%e59)DsSgOXRNd1K+K!~_Y6w7UgBuS`srEdrAPbNJ)?`)!WFB7);n#(68qa=HTdaN zw3Yn)hx88nW;p@roC6&j8g9N+uJ}rL*jqweux|gviY6&MbvTUvf$cU)DHpr3 zRxJ>znRSv|Ifsf++qa63G|u$ryGxCQNL?pdW(|X&Jv(aJ9;Re5ha-2|x~)5LFVD?Y z%PN3fF-Y{;H5g}5M&llk@@*mTqzXkobA;y?)YKQrb2hV?rmT&*155fOa0fDxKOLV9 z%lFf8_q6(xO*#ZJPI36{X5eD@N$-^HoCI8kx)gly1hivR+qM^yL-U%T>N@$5`TmnB<{6h!AfjcaYzKpb;L0u3he=DaCw zy=u6QnB;%4IzLs~%Nay#SL}Gu0|+ecJbzWF1l-u6$Zad0yq@ww-;`a#zQ5gHvAw*? z;EN!f#aLfQc{H(>dQ^XMn75?~0e4fI@C;+p{-;qLdE2^U8=_%4nPeox#^ZcY=O;F6 zZS6ASx%f9G_W+q0fK@1`(*7=eQogq5KsdVL^l87tNwVVI{R!)zj*DA!&NmaW^nPm- z^JA(lA2K-?4$|(K)2Lnh3a2EUMb(j~u=<7uli82}&;Evq&0E{2_&&)|g_Et<#44Ty zKgl%|53}-T9mQZiWzE>SqY^A!9#j0I)t!-CWX9#rj3a8D&(gRUT?GaCI-^$8*r3Pv zFj{N##lYwcp6c?#Droyyc#vvmzI7V4heZk3*lhLxFvzIVn_8S zsn@U$V9L4y^ao$oeplTLIKa=g(nTEg%k3|# z7BtS-YgLI4nhUqG6{D_xcpGp0Gqk0p3#SId1+Ikx>{d|Fh!y1*(a`VKk2Wo?4nbzT zAsv0EzXaGelsu^Oi`0A{C$Z78HhcovU*o7Y+TU9|86i1NQJ~bbLf^b;nJj3RLETD* zwu#)If}UIYWc_ce9FJbtfDlfdogg{_0!`gU8=d^``U)D(Zxv64*r-TXlbpYWnLe2rq&X#*)F#M+LN$3+I4(T?F8gNOcWn!#^i;hA8-Zz z08RcEGMgFi2lnkH#^Ib3vX6i{lm66R2i05)v!c%148+mD)|GTR3k2kiP!%@2_XeTb z>hk>~_qmSI(ymU>pM&KkrTd>5^1SSZ3}~FBY3x~^zrQ)($SikZr2-mWe=e5AX)7cMR%m##HRNp&hmIRala0}IDTMlRCZR(K322FNduE&pOnAP)Y>r` z6{3X&DaUu8QnBlwnF;CBrpSN&x~~XL!T@kLf#u2#Z(34Bzz-Vq62E3iGG}h2I<^48 zg{k~l!9Lt@V$@7b&Wv+7+2f7G=-j>39w^g>HvIvIRm477id5Q+P?e&HoW^#F^*Cl z1$5f^6(pTiw{^-kUMSm!?7%ELvqWpHB5VZrU~V<({2Vrcip(_hD%lF7!aN=M4(KB; z&LIz>{CKbZ0Jm;?I3@w1=2VQ{sw7p(@C4AQv*2rH#rUW1Om^n9L8PN!9Jqj7WT@D3 z{cWAiA1XEdt5=*H>|Tq>*-o@Lp(*CANSJa`!+;@Ic5b$-cl8un=xsD< zAIrwES1~qkG`cZIBD@u0%L{yb{dM*7k=`*?3XRgrwneDX)6I_x0_>b$eXKBI8%m4q zy8=sJNXPkzfth5;sS9uDG>q}nazbQA_8)k>iGcKx=|v|gVNbCi)m5#TC0waTzQm#) zp@qx~@!q5A>UzUmB*`6$%Yz5o(9B3T?2~21GVxU{%@%)Z2FOw=&ackpyny9vr_DF~ zIKQ4p6o7YM&72T4EHfT17F3M7NXShv9`30hn1?NYL| zOih68>JhK8R&`lmx}Rv0Sh9x5uT!3CQYi$qfrmj3R$nj7`u@o*Oqr5r=7!B;xf#G| z_gn(b+-=OPrH2h=0z&k^=5wl+#E+izRq(Hqu+qgF|Esl$8Sg)D6=wE6-SG;_M(vkK z7r;SH$^#vEJe*L%Gw$!8q{l<}gf~taG#W?nwB@GbK8IfIZmF(P?4HG>b1n;pvAW+{ zRlIxPBtet^WpqY@zw3zocxGO6?`kfjNN_r$dCpk7+w{ueI>ZU2v%% z;hFqKuuumx@vrG+N-qjQ{fRv+KF&X0I0tjSoC-d(koiOL2e9}LFqBJR@k|BQ|5uh% z)YTZlXW{qv3Gx-JO*D`;F7lA#k}^X%Nj`B^?}1zYxvOK!1(f^}ubTs^5-ZqGPCq*{ zn+8|X#-*Fju0^X7E1?%Va=HyN;wOJ%Z9tm+6e-Cja*&&Wcw6!U?euAH33I~}X`h+2 zcy>#zz7GV636|)H9XO=|Z^0hDk|b&_B{!<%Fu6qbl-0ZszQImp@*@mlQ=yjq@AIEw zML?Q87y+cse17dhjkA*QofKM-?9?Mj7VNv5nj{!r$AYsjiv;mW`!O0zYfL#mL@Bn> zGUwxOx!hfcfpbmuUuHpI(&#Km?X03P2;dDGi{rn09ht6X!UrVTg zML!D2`YXGfvE*f(baglz1S~-%5+Y6S?jD;l@R%O>IoxAeJdgpvM`nD@j{{0JQH)xv zS}X0}0c}sG&I9$$Lkxm%Tp}oGy?a>FD&O%&+E9JK;b=N<^YmD}Y)Yu~h)dc>t;BNW z(x3`nCdU!vL)FMboNuF|5C4*n+Y%|NkZ>pVw~|zb65@@Mdap3?u5Ln662MYSTFdx+ z>`_=0&zQLU5GSJ6pq#d{pW9hWzIOKg^QHfds}K-G&a35XhX2N#UQHLS6B|6GC}r`aZ~s= zWSxrL+ue$1RPEYvxr8V6whg|?v3YGgtdMKA|7D>lHf-Ek^a2ok!x33)q#Or6^8?8M z*(A-$Rr+fEcSvxxQd&*(QbCnlhTk&ah zjI+4@@woFr2GNoim2@LD#Z-fM#3}li_2hQ1rdecA+z)cztv6O?$jWB>Il$(XhcpAB z?ltX;$s+fA&$N`64IN)LA562Vm`8Nl`K!Q>V-KIt{9(kqFT2t(RIkxq6T`OinjL`l zdpze4#LGuhZZEKeJx>i1tGp^D-Bl9e!{YmZ)Ng4?PA7w&()DFC;jmR*CZzrnKRe1R zOTlaXD50rORi!l~>eyz&(rJk)9kw#~JKNGMe))`x4>Ne@jxA;+znq&!h%SR=n@N&Pc zmDB7gd>GC6L~_CrkPXfDsv)8yop-Lt&EkfLRob3L#ZRPkSh_p3MT-<9W-^${{lDLqDO5X8zVXssSj|Xn6Sn2CYA77|@ z^5mbTCBAY&0+ZKzp=W)PAGr;LT2}KKS`>VICUO!NdLOny0xrDd#EVylgc&ELmV6jf zWxTvdhEHUvYb54DPn?kDE^#)MVsfIKX0Bnrj*96~epkzAp8OG^nRY|>J!2||K*md3 zetHi~$)QA^875X&iE-6aV+7+`h70Kz%GDoKUd@A6rw%SQ5?9%|@}4CzYM4Cp_7Z*T zB>p{F*019tlL8W%tpiQs<5PrNlFJtUtWSTvPj)*6u_EQvKhwWB>iAbXYald;U~QP{d`VHesBxM6T0yQrvV%z9g)M=t%s%{( z8Kf(o4>Ibo_!bvine_7WlG8E-EDLQlQ*pihD{aZ%DwxtJX?h0T^Wj&7YdIEK8K~A- z(GV&vX=S0Yi#TJ218ibpwFS%>JcG)iR?u)Mg7Jd|(?GY^P-!2PzXP|U{v<5sEQIfO zH7Lg}RQx9ObR#m3PP_^85Ee@f$0a3!14YB_ps==o#$c;}VzgM2$PwAODX73j36+`J zhsIENsfY6Gcah;%l_M{Jvn(F=W#*P#sxGTslWp$ErK`UTM%k zUrn^&IcCdd3r&vmMGIz?>6|3~X&AQP^Kh~(r&T#F?n7WUJ6BR#y89q)n;YL;6~zxj zFY~Gj<<3+F^4`Spkd_H56$IlHkZ_Wg8)Gp})ZirtWf8AiDuC3^6L0W2CT#L%`|ElZ zXOg(zy4Ij!0xHywaDFBt^4^Et{TSvo&b=C@f9HXFq96yAgX60v(>JW$1=L$65+<$1 z_HV2;hi5)E{}uJa$h)WEONt1G+L6tHsI;Mx{AMMp@uCk~#NVifY!-@*smlz`AofFSeao3+Kr9Z{bp%=5Cm&7!E#Emn8=B zy(iK>Z|ec*U&y92Ldx0192ZfPp>FU%9R=t8QbbeR!WTYg|vB9=Q*eQc!tG@vh5kmXX!WFJrE5*U(QZut+ zex}WapeS2XkCB(xI*-c5%}*2Y;3-iU~;tB4=CYA`LVy$!H^{$XFn zv&<{9&xE_HDWc^eP9iRII_N1m6<^0kpo;JZuTV5~c)Qt$@tk@FN{%`ecfL7%+{LV7 zWKEqAb9QQuL?Ut*vP7oTYBu;8-sW$ zj~LJ+TbCGt0WMOUs+meah;RbD3de9h>XPJtc{BnRh4y{4zrY)(*@%4enBL5<*d#4m zek3$_W58rQoHvH--}8wVTeas|Sp`I)kphtTxFX>oo8&*!k!eEBe;>S}#fUFbHIGOk z61fz0*lMdldg8Pc9L_5-6H9M+@%v?lT4m6MwP&DKeiw(TbsmkMTi>FtZ%~4IL{k## z;5q>ux03)~UNMHs6Z)pYjk)yPEgQeD6;ve1l7bP%OTpezP*9K)sw_<3U>dw|i<1X1 zRk*q&z3{sF?3R0m#d3MW>kxW(;_Hu{>%bZZNi@r=f9HyqeZ^Mk?ji#B{F-d{=1d(n>b z&y#{9wblTpW=tpmi_Uz&5H=ox3K+FS>)Kl7H{XbM@Ro^sy+CL@tFNIN<`U_Yq7kW8 zaO*}QO)*U0Q*}q==nDczcas{GKft_uqeAEJB%5}Rd2gxdQ?XMx)yRRo(2nLb1{zz6+WERsio zK#-O*Kyjf!qFylxw`V3aInv(Lo&Cd6>o<$tUor9;SRAF`UqNgZXgdRu=4JpR6}LuS z?WZS>gA15m10bF23Q;cu3W72#NZSkno(*ez3Fa73ade>#0AH@V zT-1vcN_zMJgVby*2{ZUoc{i>d$tC&M@V)n@n!~}A0c4DNUe4}Q&DS(9Fb5|B z6;TC&@v28N_^Opt;J^4~C=MU~OW^+sSNLTp4oM&}W{zNDaBLQ%Qodz?%hOu>`~3gW zuKaa~uU%>0d)q}zkN~v*9s-s5h#2}hyO^N}FFKF#(qBN8wp1IgtQgIY z-7pMS?g@J!hWL4TdiMF_TE`esckN$V`!Ag`gAG4F4kTLpK7FN=%Nb3>E*?}uU{i!-c2-!xGD zCoz>$jDQZ2IlahxTB_9F(xQMb=E_9m=7ZWSh}i{tp6B@(UeHr+^M-6x2503Ry3oUCYU`+gVKZmc<=MtI z{n>B(z>xUDmg13TbN)JjOO1Ocgn7D=E()V2DAg@_FCAy*fw#Q`V{kB?C+74 z;8V#BILBWF>B$^W!>c!l*}JR@YIl1_Lj7uwKO_7$v@kb-zKqPJCtco98;+t)g+DO& zxT9TC{!*6X%rumDZT$PTT0cgLpzB||0#NeOisbZuF*_TlEa^AYtl-`*|F7(kUn$ig zBPGez$McGxsx)Z1kqox1ZfK29veM>)K9rD73G2;Cl01JNYt;T=&r_-&l$E^$0RJp)scUKCw4&si0|5+_;DHerN6Wiiev8hi$;=S~1=F=-U-a zFWBVFD;lUYhyJBU4m8c*AFLLw&bVMwYHV-Z>bwG7u#e2oeee(IQWMi!ulDf~s0qt! zsM=#v|IV7k?vK8`sH8_E!>HUlsi6kxUauDwW+AatN}(6dRc0L37-IeL%3%fvNo_$g zF>y?zU32%UJlt%1rD~XJas#A}bF<~VSI^4B0=U-Kv4H~2HHbcAP{U@D*$zn~z~vv&G|Z0Wy~3hisg@VTJa4M^9+>$}~;d;LWd z1^eC)j&8;-{4Ha8a0C-|k}(-I|F6uAHui-*%yM1wJDh}Wu&PLpZQp`k#B(|+&W~snUH^VBB(+kb zCu3$x`kBiZ{6)N3VbAT}<_6h0@f%5zA5Xq6d4KO&%N0j%!T9*D5 z)tZP;m-xpkv|ta~sWdSa^o zES)&}-yukLRPM|Dx!)2ILt$IX=;6OOpbUel*`CDz4zWopy5r=#40A2t!$&p_oLUhU z^!Uvbzpx(2yUQxa7J`)6VH^VJ`0Zd|#(TJL#GRqxVXY-Bf)}!CzUz^s8szFCm=)V$so8M)Wz|};LGv>nW zgKL$BTrT9_IAN&m`&cpPnfnCe(yiR>h5D(Tf!aD+oxLV3XO6rR-`#-me<3b1X9Ibd+zhHV;gE> zkm|O-TLy+csw(+3{yh{pdZoU0hV!15)6)BVT5-uGr`Me2>vP~+!y)w){uv9oeWdJR z3+-6;P%sHA6Ytuq+j4lnrT>D!8@aiw!Pg{>75ox8_RQYTwt>Tb7r^3xgcYU9P`NOp zOS!+~(*Q>ykE~5Iw5RtLFTUm%J&ta&{BwBOI!XNdoPOhlZEJ-O(gLT>>)gp!0#=yt)X3CyXYaDYr8-FMrWA7gcIh+q6{pclB8P5fT^NU3ZIiF=Y%9K>RG)C}d=1 z*@~t9cgX7L`R+WMzZPAtEOvEm2z=>zzXd+BWYR#5_meO)m51$<&w-#!(sli7ZTnNf z&LgjU2>%_r1ll{MTQkH3Mik1=|DH5EUR@W?@9YgyKVeknHPp~t5W=spmtWW0@V*TB zh#$PlzZH=<4zS`5Fc;ZiCuIZA`zjK<{4wu3*%l6}GK@K%;p(c8I zAD?{vu3s*TzpdH$i73{H51$IsapnKmu{$SB=Fk5wxCcG!cgpgzt$qxvum175F7f#$ z<=(K-I`VR1)?i0{uW^Ow?a)<>tzM|eK`DCH>-HAaUS85T7bMn+HHSG?iOe34ua{d>crllcsPsbb0>d!46 zkPBNobe2wCPUiQA@l09oX{#Qi?3eh67sB^hll*d)jkbmyRb%CQ9|SL)z-CN&!*2s@fJw2-u>A(Uu7t$oPe;|Z*Uw@+H-vXd39$pVU1N(^LSR0

g-%Qb`D_c44mb8Hm}zk1YkPQ%83#buNJoffKjVqbp0cuc$1V``tf{ea}bTA;s( z>j|c54ttz}*}2KptcV5P9Q*mhp#*MN`@ko+&$95Y-|@sL@q4|C?-t>&h@9x4l`~t8 z^R*uz$H?`T^Rv(<3VNdAh9~zNDhe+y(0|d<8Nn}ZUx-p#bZrAXsDIXa$z7tBkMzgcFTYh;C02|-Q&^9ZHM>2_9gR^RR76y?z_BF zdD+)d;+E8>L8UJYeuF^z#D(j+;vHvAm?B%CW}Z?-rnX-DbdP-#$ol3{+Q z;+KQlvT~F(*DHtCt}^(w6T5v&&rv#bP}{>Myo~$Rnn3@n1*UHU@eT)5kmPqeq0>~} z-<2P7@!6A{%8~TAud)W&MfYaxW z-Q|1b(3q#Op4UG9l{j4+^~a2JJka3i>X}71gOu9q=%jlQX`h39rnP(8S=H!OOz6=m zcbl;jtw$zV1M7b7!14Wx}L1(f%E^o^;09PLnk`N!Go zf8xsw8hiTce1^%?>YVuaA-5WQI`Cc+IXJC%g42+CyTKv4hsEr2;WSP@+@?16I&RYo zBL6rfZE@xT3jW|K&+okTK%GvH14MsR8d(YXZJ09tw8?Mr#F*Y9gmpe3av=t!0Li;7C6 zsnq=kjgnjlJ!bfyI_|?a>&_59RkRTD)M6y70NXRU9 z_C+~`q^KJ=8+duY%m^UsZ$S1*U9b{uU0lb|{De|*eb^zu1GYW8>Vc_S1b$=Hi8pGt zM*Hw8y(qV8PCmgxK_k8k_M^AOWUh&OMaqh)#$P&aI%!Pq8F?C>Mc67TOgs#gf1v(4 zvY<5U{>nuTnjw8l(?N|Uoond950Zp^&ptdk%pf1)SWw3A|B3g8HP@ZDDUv=1b1)Y& zH@E2%Zy4JZcDK?kZJ7;6O8u9ew}{uy)#0W0`c>5@p+QiTQ6~R08z@U!SwC;5qy^K(8dxOF! zUdFeE3bfPeZLNA=^V5sjr#RRYd1tVepd@^r8#z#OaJm0_uX->uu(*K3j4s`vwe9G! zXoKvlIH?1UWO8h1Y zQ<*M(l{88In9DCE?pH2^(GU2qCOXaVq07tug59Nxz8ll66HU<<+3Xde`|oa8auOg z4+(u(Gcvu6OW&!fdFs9ogzDlR&ID+?FUH$Bg@pMd^SeOPeuuiLxM(3r1+VRLU`a{b z5Pm%bs^jtvG=-disV{Y>J)fA7UIBKMbR=x(h}?9S&UEexl{tI28c!D15k5J|OFE3z zBtsn%lo)~RKy9uW;=N^ETssu8`7UKvSsyk?g>o_Z6ve-HqvJ?)e^8Z(y|lK|r~ciC zHN2L6oEpG)6~P^0!1F(vo9kfSR|ou)U@g=4*7oX3e~a}Z)~(4pV*b*n1$Ab%@Le&s z^GR~S5sEu+j%FfS%HVy(qvPO5wjwe~u%B2a@AK|$`=<0=%W-bq%2DNy53IA(O$DXv z!nl?>t}M$PoN-J`O>xqu{V9{G*ne^gkInVW&)v~z?d1B9uMw>7@#cK;ggI_3R`c@V zz=F903qlf&9mVvL#Dqs7we7}!{692yC|A)I54A^|pt>B!MOPNfIwHAs)x$uY*8;nR zS^feNrBkp01s?ySk&gGr3Uq51lsHA6n=Y))OPtN0+9sb&5Cpsjv-yphchrxu;&p5- zN7>-{#p5h8XY*d=VP&b%MXUN3mv0A*UFcWoep*S#l|_9_JcLb5GHzsg5tA6K=E137 zX<&&~bnH`Kv8*r7+F#I$qE38#(&16(@2wh9TV*8yH%nyr~X)J#M}oa6^9 zpC(ovRSstV;o4|RuG&NoEeM_*h-&JS;vTsIv*KQwzBrx0>K>vrb|Mkxs*=q`0s{B@ zkR#x9;TpG@x?-6Vg5`2(FRpF=wAO=|wi((U-;O`G2_FqUMn8(&7vi^^)aay*b&1Pj zdqp<5$f}UHaI}5N_9qLNCF7(!!27e-TFxMbDdRq(63dMdqy7_ zo7eIZk31KGRR7s)l_05%Qr^3#m8{RS{r6I-SEQSt{S?~%kRXV-|1{@~mD#5YG5!hX zEoQ$caja_?^U3<@V_2k}`?Uk3VDv#Rj*bN7dg&SrdwlbMH2>Wz5nx7;1-Ry6QCEA| z4ZE-2{gd~6c;dwBaayl5er$LcKRmyPNr?M1u>tcrvmJKef~pFk??KiRLsf4IRjTQp z*`hE6g*x2OUSizei31D-e=@O_dv4nzj=WDyzzg=k=P!aNDu+x1T+q@HNBkypAFA2V z9G^JYA3+s0wEgY0gx|ogFEnprQltGbQBEvnZ6mX5uZ=L%bHp(qfGzdQ(+jR!$Ek z(|ymh@^2m{*Dqc>81kZf2)T*e@AoPCKN(dM*0WKDk@yWu;Q0Yz=seP=9v0 z4GN_j{z7OfjT-G;dt7jEo%OU1r5o0nN-p4c_lXgHd-D=q!J{wF8UkWSYEY6w(mI)c9xG+e&gdsGag^?l|P zyD#c;H8ti5ipFq4*5MvUbf?o5#;fpRSF_dK;^MAtfY;FL|9p6>+C5L+@r%BV#Ey^P z=0B`wo;G_#Bub7$mDM^PbY^dBGVTj5!gBzM&NQq!V~3Cq8%%TnVI3(>@%nN}i!L<8 zr4>^s%u35 zlbY`oz2i#rVe7WU?7$kUxDi{~=uVDTTWTdMMUFAAL0yDCkm}9|Zc0r{*!e)WEfJN< zQsA!ezSyhk<;0bw5>517tWK2-QK78zZ-uYrgmMyYj0(Dwz4s)Q;GTi_)Yd`e^Q%kB zO{@)r4X&)FNp1EM{i7^s{6+N;{yxGze|ySWscufl*JT<2rQ_CLl>l>>RUV{s}|&$iL`tvH63$^ zeE0LbeUY0nAlg&-Y)aBK?ykq=^F)7$V%{%aR*nXX@h3DHeCwwTS6=o??wqtZH01wl z{U43?<_#k7%D^m2Ax@$7s!ih#Pr+aIR2lufM0r4fAiI;no1(e$Si16m@E2xdrGN*e zMs;3KfCn?-lxW;1tXc~(xtNlsl1)ZbqxP4grH7~zOA&?Tnzhmi39KT_<=vI zO((F;uC{iz8gqX_-gVv!6@ zMEm#a9fpUWJ*nj4m1!FYrqT^1@ zIApe_%A(YkLnw#*#(05Ug#H-)=9PuDt*pBQa8h8?UIBy|CsGU+f+t^H+BAI0eK?k2^i&V^+QUUiiw!I4j!aJ{toQx~ zsIDvKeWXjj#m8;_TfjNHO_H=MXb$gn*rF4aN|D(A>Yi=YZuvQtLjqa^Y-M~B?m0MQFe_lwqd=sii zWusrcBa9y^A*ZeV)}a;Rh}z3m+etk%OYDnL^ZW_-FaGttW0_b+_fbrR2hg;;hoN0H zS2+J$Il~NhHn#0ls+0d{KD#u7=0h(zYZmk>#wUli-QEa~R#UD$sTvNz|L7bWdfN}u z4dCYKbGfRo%tX9@YelsgJKK)VxBzuXt_IVN4O>h9nY=#m>bZENn7^H+f5Qap_%@8e zEO4KkaBb=Z+ptMI{a`M7519;CGFsm_peni#=eV<2sihe^PcZq_=f!54CNLW8bt%u0 zn1)U43dc>OKR<~Bl&Z|= zV1@0W8g$H=(gpcCKW$EbQn_Tsu;{#54Qope<(S91Q^1MurhmsjMWZW|LU#K3(=SgT zL-A@x>jNkfMgJ9AA8JsEoe8``xpz502{>;oPf1WMG7TpShY*j-hWD8Y3LM*d{M5S% ze*flwkRzRU2D1sit0a6u!La2I6#7u?+o1{vE{CX3(w|#cq39nl65{!0flxL4NZNXp z9x}ytez}o&ToWly5Lw3wr_ZZCQPrjM z%FJ9ht+(X(&GL?NJw#hX{r24^hR()w$*~Lv8tzXoiV?HX(s=|!>j`}-A)Q=qY}D#f zR<$QY7FpP$c%0b`*5Fq@#@0lH%!I7md2Y*Q_*6n-_uc-5xZ`>qaAvuIDxR`-cmC9f zDt+Fl8;{0iQJohPODgk#k?%@~;`XOoXRl1Fqy%CoeEaK~D@}eS@CvIVVI^I)AeUYi z5z+a`7CM5_b3U4%tm@TG@FMvDo|$^JNV12)z9@~vdx2Xo;L)MEwU?flnT5N|%%C?` zTWrBRwM|;b&Z?51dhF}1x)sVmZD#i){B(0`r!FNzNr$SNRCxX6+`J}W2Ou(6QV{LA zlJO$-zRwWMRE*YKUzoL_C#plW(nYl%+rhDv`Asg-=z@>>9zU^xE{!k>;ZI1TcX%`ZS0n<+K2MMC0} zE1&VGO1AVF05k*j>VgDahq$wsUqGVlNVU@&qm64EQ%QL45pHkX7x+KTzIk=4Jfhfu z-oj=lHTEt=iK4n3i<_H&@lI5;#$3fb%GI{i_fEF1E0GDMl%F#B{pEpj3=lW@=8B@{^+6YXGZqQUED=x zI%QH{-$AF|Hoxi}5WxP7`!>x3S8iLa{H*Hw^SjP3&dRuy%EMg<^EVXBO|JCBD>igk zMs92b9dNxK2V3YK;iXf-sz9h-a!y>vp~hvV)Qw#JbGyDCKf1sR(hBYqAb4_r zd|oj9?n7J1VU3O|hd{vEZp`PGGMb4=Z`fw1Jt%Bf0=1&@ZY^amej{wqwtL&+>1)<_=$ zAnSTsrIM21K66M9!>lcZ!O?(iC~~r2qK!^N(xbFLV;HzK*eu_*jcs6 z&BJPgff~g{Gs<4G>O3=ibfWU+TdtpN+COu)l(`Lp?e6?RnMY7><64>z?-mWy2vxuy zd1Ys~D$=mfELkgRzPfo7I zN(7A3TT*hQeD$@gWapNM0gXDMevpoq2AT1IwkFhh#Nt4~)h3KVd;@w|W{b{m6wD!j`*eF)u2o~q%ceR4F&NanlI=rw8r?|b%I{&_JfGl(@S~mY z;#7twW@CLa#_E3)}bEZ0sKy@KHNhcF^w^Ws2uO}b`U0hmc=-uMF#K9h&F1CX@ zKPEk*%IaotmY?HEbJpg!^;w|TzR_ua3C3U!oF3exD9J~ zcGXe@xOZhu`B?*2A*u)>%s2j%;?5V~(y*Deeh@xp=WIF=mq7_PDCRkdQCG3Hv|)@r z0Y<+P!E(l@;tsmLs2@cebf`+^e8kPGHeJ8+eOB_RGm@m4%B{Ob=iZgm2304h%!J6J zX#u7;9CKpgD!FOAXk&o!?%Wa;K-9b2-59T*w51(0J zZiS7Q(~Bo&;;;^}sZEx_fX~$thB~@81wTp&z@8csX_ZaIxg~em*|8%ex!84fLz7^= zjF!MJ^n|xVxx%@%_PzvFGxkF}b?hnEV(j0xxzEX(w{9$*%Vx_znulHuH~6mc%j*wr z#P-zG6f+~U17-5cJ}@1Q=ev;D;-ZkAjRqXH6%=58Ksv!mRX1iwWfx=n2h_xQCVl5G zCj@<>3jy5_7tHogui6-A6#d8aAae@o#+TrJmM7yhg?(_^+ z>$8N2$*T&)2xL>@J&XWob_U8LV{~>CJI`YP|5wa}!WP;dmDi;;9o39j zoX%3kXR{9q?M%uO1O(l&lfWKqe2KW-VvF>l4Yq5zi&itPTg)Hx`o_$5Ry@1y`Vq13 z)aA%czT|mZN`7`<{9je##utLND3#XIq*s`+OA-OlYyZG)cdfT^{e!Ey5n)~ z(*=xL@z(Ya=2DzVYbV03j3TEoA$w;?E$~jt*4uhHg*IpsU{U2 z*`aZr`ee0R=l|*5{B)9=Cr%2w@tE_w3@-GM7f05T`o~YJ|nRO~(|u0j-AH6pAq z!A@8Q{W9l z7i3GI&(M}jxWX7`xFj#p1fUaJ5F6fW1(hxQHx!b6ZcNC5|gNJkf*iUOg>QE5zHrk**#Rjp^g3F z53PHoE_<_%f|c-@tybkYe}V`ycf>Z#*IMf7z4>IU-Sb3uDb0~7%B9|!AP1axRlOEk zI->~uyuh@L(%>K1HTSgxex2p@64?Gq9;g_$lV6x_BXamQbmW!5lQ`{vNL2%d;_+dF53lVfdTu4L+A1Dc7hhwf= zHaw^i-{HZtr0N<=&x*<4GM>!8s7usNwd)sevm0%EHTK+7uZ8WgI^RoMni-2WDBRg^ z>`uLsDZH0FYtQ)-XBNA3F135tgQ|Mvz3YVbX7*O>-*Mh+qnkjf7bE2tL9}77mcaFf zgX)VA4wDTY#evrl#!Y`##8P!C)xa}*m%A?~RZ{3%?(eX)4_}YxfmU;DaEIHm3O(4s zN~zh8hNI8}5qc#@i05xX_nBSQ!l<~xe9XcjEi$cvdjhrB@hY^N>up64u+A@tZZ(jx zUg3_tTLWj?QPxO`&0Vjue9NNcpyz~M>s{q|H|P2Q{40AUVk$~tkTet3HU&wwb#HKx zF4|Yum1VaUwT^Cjgnv-{xi|?MTT}unam;V`%C9XginxJHl=FcLQ+x>HWEuwxE>l;H zNrK;cOTbb54K~^UH3BV~jUYrg<;u{}IW(Ax6Ga3IS5=vK5memVRHi2t9D=gJrX(tR z-*KH~qMzVp`r-M9IZp$u#!Lin*rBSBpN#w=?kLpX=QtM->V=R_onJWz-JdNWLX#@g zAO%0-{%oxV*E!?C;N{OUBWF`As%3a#Fj*fzLh)!xAmQPV=Io>u9--Wxb2YX1CRlvAV@|-pm~4SP{e5-YZid_yLj^fgGMAXvaBGLrc0Ft-lq5vZH3h5{`3SZ+=qq+lcEelcgPf zTJT5rt%_fe!He?4Y)-ZcUTfB$u)-UL*xe}B>Iz1|euf-PC`}j)-NV=OhOtRbEnc?c zkzL`fB^xUi?;^hhyk|t~AX_4#-nUoBje%WD6na!U6A+0vM+Ev*bOu{|k3?;hVD*?? z?&vl6AOI-xEqDBe9lF@N;061xFn$7T%CjZv~nU z!9xgv@JqRgP3=xD{PMuA`cc9qzUIssPo<43pEhH=G0NzZ8#gp;e?GNk)HYQ2T3t1g zqxI(Gl6O{%etPW31AZoo7ae zaMN?Gkrhpm#Xac*rFlBZD3Yh;I ze`XY^4tPt*rc#sriN+@_>{;+7%yfXgXP(OJFc12Kah7YPbFS~ zwy?h7L{QZ3i6h`y8Kl!(XD7Rq*)R7+I+(MbIU_@|)x$d_m_sfa5Gt{V`~`|80w6-0 z(arx=f{vF=XQ%DE+wIkK}lI!ql+lsdPoJ*kb8fTRNjw0N?; z;ZcM}`Dr_T?GL&iV5DyGTZb~CSFw#s9gaC5&-`NVeBBz*Y7(GuihEeE5I2*-<(V}T zPvITR>zBCXuGHO4gOv>%zZ0|;ZiP`?`khDYzGeO@v%xH$9SMhN48*bFo6pX9cG=Md~SqCai;=c=x%Jc}X8Rw`Zy2!ylD)c}U_D zgirq=+4*1Io!(wkaC4!@_N}+vQ3SVQuUKgqdtOsWalCg&sqA8{KR$R@jpaT-V*%S6 z1ac!@Gd}sy_`S=yu@v=hBWLp-<2J?xF281@pLv*h`xA+y*4`q9e@FCaF0h!*GfQ8p zM;&yHO)>@tVBlScf3M@(VQ7q+8`oEK7I;*R+G%U&+PN-Og`>TU(pIrvZ*r*xe$5b% zl!b&AF7kHqlXmDB|6zE}Sh+sB=>nf$9jC_RO^{*j=dI zM3&ab;>E}mSwC1a40shI)TOC%7S-cnuS4zS>nq zOSVWq>r7Fl;R}t!$4wyS+4ABVuwUR~T0<0uHrHT?9&n)?;r`rxYQ8X^T?}TpRY>WUm&x_e9>H zhTG6={{-e2d{pdfv51<(_dz`mdUwLzx#Z+~-$;0_qZ>c?{7K2?W)-!@S9~Ud69o}X zJiqS21-}A43}x@O&CnRWAo<#lX(E@{9gHl2*|NkIc+Yt`fRJ8|wO0bIN~`9RnbOQ4 zEav2g`3adiTlffpokgO}LpD|I&1 zm$y_Abu$y*i5sO0{if+o$pOq|O6nYn4}=f2U2$v?e32R`rhKFu#ceoW0EFG~chbRXB*GH$j54CUqJ56NMpFH?0+k+v6rwes`_>4Ov9L*9*l z(+I%aBI-u4=)R-qMshcGoSDd*Ehw^t_|R2JYqk|P`oSt365Gh|<-lTY)LkcKvxRkD z_+RcHd^R3jN1@u|w&bSmqx^fQJPxc7s@vn`T*XrkD~~ZYlRzt4s$$lb%YOE5!S`3b z6U)>qRsqS61dg)eX%mjKeAS)PoCh#IS!1!6z?P;O;2yq@5`uZS9J2bbD(sN|lBW5r zXF%akwY)Pd-zV5d^{MIU75M=m5;tAe&F(xLb%| zUWlfVL};@k;YI%G9JYfjn>vR}>t4yz(mfy&Lfs85q+7W)MU$Sjd3RhiXgISTE>dSd z9kEClsi(8^ZkBSu*G^YHvc3z!e%iiAuJm9RipOiyy2{{rTtRg`%AA`sio=3={sga8 zb<1+(Yx=M|+vF%kx+%B6m&>64qp@rAmppw1+BCjpoY&{X^q>tG@HYMSfp1zsrpD`V z&t=6kSyQMC@n)T8RK}dTD_g75zW6^AE1f0RgdKVBKe7_4ze3acS>h7`(m-vJ#||rC z9ig=>)qX<(p+)17Ltm=8uFhpIlAzJ0V5^?TGmrZ>Nz!4w2&$p@MjPap5Lc{)Zw$|{;0LMitias!GuaInq=CZNH)z;AKcEfK zU*2&J)X2x#eKzG}Ho7b}r5`@_Z8br#5>k|S&I+w^*~)?nj;bel;IIM@K@sye=Ab?9 zTov!)quDHC(4`pt?t+{)b%6Vmkta5aH^d3A{$MF=f|q%B<{r22viFeaEeY0|uTs~R z93+-0p-&y&CdGj@vEzPH?tAk8-jCZb$qA?OYz zg$&GG2gbM6%*ci~oLp8rQb7qna?^-5xOARgy=P6F$(L88$q|#u`mUig{ks2MEUroN zs!ZVcI0h2lj@hLKMi?%-;_#^VjBmt)>R>+&3Kk?^P+%BYhJ<~RkAv(txSXcq#X(;VfsCa28WsxvR{6`3KTZGPeMoO8{8%#h(O|?QB zI}O&9#(^|ZY4-($>9{`oJyC+BqiiGZ&xw}flz6)9UOV&(zI=LRIq(1>_T;UDxjNgN zk1y!j?UZ(!ilK5ll4b?#Gbs^5kUKH?*&Fi;CpAcP^TPvf=X_K*re89>B=)^=n@fiY zo1IN+phw;7*h40{xC3KI3@mHCL>%x46LT^9(-lnG$DMG0$H2S@qC5ghkV;uYoKPdT zZU9`#C0pEXDm-769^W1b&qQ}_K6NtFSPoK5Dv0#S=j-JIWtH(2+J-VQeRbaXOd3%66_(c^&9Lk_7Q;i+-Jj##uBR3w)7Pr_TtAX-)9U<{r}ErE+* z(+*R4Wsa`x=?v=+HOS&HX%|VV(9x(%hH8fpYG@oTF z2#qlZRjJ^e?pzCTe`4#23%mxpiVNQSnZm8x!5>}E&AXu*UcbVyq;48Q+Yrw&|Jv$X z)+MXll8-9eEoHY<4PF}mc%Tlr^SDCIdGFN#>|OUO?2wfV8E>S;bSpw@%gLsKwTdVc zeJx{fFu%vkrEMRXBr6>sB3za-$!VJyciq-NZUaDE9=vL4nA~No6a@7P}7jaH?1CIYIi#3Q2;n4Lw>B&S;iw z{2W1mEq10;WNrwT{LhNbZo0^Vn)5m;D;zmus!R`i3eU&AQ0Fr!6MTeydnnqiH)qQx z10MZ^pfuZMlVfMgq zT;mcy-bIAn63PYT$;a#4k2rSoD#vr;7Q59$*^f#d#tRFEEFmqP)Qzp3Uq0^%oZYMo z$pCLtlIy;)=qK=`W)^l4lvE5AO{xwvY5_Z>S`cgorn-2U>ta~IB&ZV5KpFtVxS%Qe z(K6yIc>qi+T5cJUwlr$hxXoltEl6h@1)a6ZofD+@_nd0`s22F-YBh~!dh3tkem~$z z3YC9L_6S$z0eldMr}<JskXZYP$$G^3YIE}Q zYB??=Mp{bi!KzvbK7)l3ca{w&9|2&zgsZVVek_zt7%3W5xX&w+8Zau5fLIE;L0&tT zg_iN7i3o~hO=+)ZZi@hs7j}KatN0tCEh4EVI`kqb%hXTCpuF%X6yG*Ir&}EMx>ZL} zN9aA~>avS_SR3Ya5+wh=p+bMrg>f&V!a`S5;A~z9-i*hnCBglOHI`{IUc~DvJc1Q- zY;CR&rF_|a+-hTUSpki5yVafE}6+7<<`cN4$mIWZi>m@*Faae{|f0}Tg z0rU1RvJX%g6zwi+Z@Klij2`s2I9f_1$nSvXK&VedSW}<1B*y7wkn*r4gf+RS!5Vd0 zeqH*#IU;5uKibBWgA(XGRt*Y+MJ=$7F6qE>vMWRs3m3SwXq;CaKP)Wfcw31wWIkn zgZq;it>p&)mwZo+npdgkT$x;K$SAvEwzhgqc^{1;?FqJlJKoqyjlo(=$5aRhaf3hh z%H%Wp&%*~EhDjg}h*5f#ycb=1>KSN~%lsrR;o+py$@WB;z(?nh{F@zSK{8l}%`5XS z&1DCKk?-Of2AH_RH$^7h5jB>*7C?;u-If~%S12C5B28Dir#L!7og^dL%pbz$18#i| zj;?>V&yk!z@>Eu4kFs63K51?RsGO-mpDM`Lg6B*XbC&AQU*zN${;~rFJj`BM#j%&6vW47=+x9Bhl zFk!dQ#gqDYJ)1~+eaQAKtq8yQEy5Hf6b)61r2`u|A9|O0v;|Nh;frzTq83 zxx~HRx;Rp!h<($ zk)i0wQ)qKGnu|3>d5@~gU0%4&&(np*+S&$htK4`uT5H`aP!17c zk8rEPnh>4TpI}J_H7A!gfZgJY`8^r~dU6bjB;e&z2e5VmGbMmH)PrBLABA?&>7R>l zx}u)KkQdF-@f5i;ivy#Zm%ox?>3OBA*=_jXFS=FI{>>C%g=Y_u z?zlH5ija>#H@}Rc$XlY{S694Kf<3Ogu%lCQYlHc+?<#mdYB|1mDj}p^=M>cQs82iX znPLx)tDRyPhIuj&bJ?46M9H7el^0w8%x`XQQf2|$Wu2SKbX@Q>vR*E;l-H_HdoYaI zWIM2=0Q=BxNUA{ry_M+vmG{Du06ym^@iCy?tX+MK>I{;1dRJexE#(pHLPz?&# zO8~cL^QaqMMO1;Ry?sEMIQD+p76flMdoMv?LE3rrLyZLis$Y)8IUeU}qL*wI!kCJ0 zd%?#D4x84`Hp5PfiAi(uo3# zbp^5p+XL?4 z4;AHY74Wm{r0amdvi7GF&gcM_^oQQbP+o*^2#za8oj2#f#hP9~f{3~fi+fNPA=V5x z1yyQCWK_6f$cBx#^eGHJmzhchqq5&hz6%x!Jfah2ZpHl&KpIZAKn3<8>pVX|00uT? zx!8=3Zm=CDSCg^n!PVCRN?d;>q!}jKs!=q{atd&k_vKaPV}u?mJEQKn6-T!^x~x;8 z@YP^t>|3;Nnxsl1{wMrdBUJOWNE*t8#YQy7Vzq|aTI_Ia%vrwQpIjJ)K2Y_Z)u5s) z(f@twl;!JV*L+$~`FeWd!E83Fw+KwYMAn+FbJNv7InFKmKHki2P0+ex`>aKnWt;T1 z8mMDi5N zG5OFK`)bsV$nJOR#GIVN-clj^-6@Na=Euhe4{%pOLpzML@40^em#SNn zU=x1hBaK6Py~d-1LPutlhq}ZKmzhSF{M>=)=Jz)uWE!Oabczp`4s+f=z41EBlaV`2 zo59OGLrR4F2T~PBe@^7?CJnLdOcEXu_J{_w94_HL*^Yw6@lEC=hjuC4Kn$}fD z#x)1S(_A0vf0ia>D!WXor^uYG&q)qewO64^M$v7@siknT8RsXh5Yio)&85h@I3is5 zCkrC8=oER~0MDu@6L1Umjvn?!DQ_~VVzNUMiq}quD+1j$&|2P`H}~ z&Kv}#B+1r<2IF^t;=Xn~JE*@_-o)!}Ku6_QP`(w$;UMYzItGPyG4Pb{=No|wAzAyH z5faD94c(}^q-0IHOpkp*>Y-|_o!=&d@U&?|luShjI#NmAsJY%sWq^;FVq7P(NJt0P zJPe8k!jUKNS&}X;!~zS|4W7rn#2x}>2 z-N*#uaCW02_GK1(X9iASU6a^EqnpAH1(J2?b0lsmM*tI4OzO$^x-D&O-a_Qi=W~Gp zqg<@k0+Y@v(w+dzElt_c?p>dJRv@>DYNK1nY2KvJJd8r6xoHuDdRo{UI8=a(UcVTHzN=dRq(f*I~2^F(R$q_4wyOIh%n)0w(1O_Z!@_$t0GiI zbnm90U6rzJ5G1(;aVo*@D)@#P`g60=ITI#knjSzk_E58sMyREZQ!h-<41uKao_*t^ z#$mY*gCQC~p&O`QnVAB3OA~~&2Y-jHZjgtjm+d|T#ca)$1Y5Gn?PXQf&1{i2DZAW4 zEEfvu0&T-8+r}NOLOCq{xZ10Koe9-~?G{dUm_V?!pc^uZs`ccEyWF{euZ(waJxIR! zqAh~7c5`Lju$d24$!tww3niS6V{<2MK2_4Kj6vVj+oR~$E;wu)?Gc9!NYHhXaUFXY zWCfxrCX<)|F`^QJQk$?3$-u#`tNc9I?Ye6nLZHSVoa1X2uN?AqXrWbDhqV<@Nv|+K zp$JHj(yP2aDSd0x%c#Hduk=s2S`=CK!R$>`Er>qiHVEWuQZknsSokL_AL7ozN zl)x1MHj??&7D=RGd?)T{<1SRpZ8zK;ga{^X$o(r9nUQ`z-ZhdVLREME3z3(s!p}We zfHeiT2YW?X-q7S0xIdTmnZmXbtZxp^PgPjm0D9Jf>-`_TMSn>jFweb0$p&c zl1NXbz19V~TjUtzE=5PW@d8E>Ww+W+%InJbi=8{k|0%(HM>#yD)P~T!}$T43^O&a>q1jw(ywY(@I{^iWaj2 z28pNgwuRU(l{ulF0?7($ELpz}gG)q{;x`cc>x73jRyVDTM1hwDyxgpPEh$@>Z64mB>&sj zS_HZBUEAWSta?y7*lpJwRh!MUdM$iA-BUheRdj>ff*N6I)^XgiQ~bQq%*nNk0lOj*jcRRo3$ZSRQ#LajKXK0) z4b6ma0WH{YH09;-pvgO@RBGnCQ13fHBW&Y5>@QBlgu!xRjs6zpsM<6pmJ40(b!ZpW ztwffQ8p>c_D_iFk=q0;L_t~2%gIG~qDPn8plR?^huDp!VAturC9WQdco(O&Jwpfe> zia1E4A3qdMHTe9Z#~rw3IHK^|DU)X9Mg6GW}| zMQ4meF1c?Y{0zYW3B7hy(3i!p@a8unTPD4vIp`0wKFVxHf+;GMwH+uio~l*%95`T6%VTUttx z6==lw4qToGd-xYkm0+%N>C36CLt3Cd-G^*?rUq2-+be4Ps&oaBKg)YGS2inkSVt?F z3DxC<2tADzD(iU-A;k8e?e|SYMxmF$qeiY9u5!5)p&`e0#_pnV|3sqz*9bNjSvkwU zb7Rl1LFk|Vm0>^p#2t%`7{mY9Va>Cvi*%!pgbg)0*$z*?wO|)VqR?d=kMD!MvrUD) z0th0t7JN#iYp>c>`oq_b5Qft%Z26`gPYWgJSDb%tRuXk6O}417?#&ZL4nq^t_iwZ6}vKv*b^kpqhlLiP2C*6Yw|DU4s@JsrAySRG~a3oF~xhLWtxJRzU zZEl=dnM9_Udx8Vg9GLcXrDB=8M01N$ikd~)pi)dMOVZ3VN56;XKj6g&?$3Q)=bZNm zO;Sr+Ow!I!j`34emqiaXS`(iW#d$pyBcG+5x_Wc=YdGooye&K@3WW2=XvnivUG>xu z%>)v|UC12)We^3dvXa9**3194*7A&92Wrc7xYqD@c9l&Cg4?rhR#C?7z9OPFnvbo> zb~ryE8r}0iVc?>A)%9JLPmSW<-_TJIc1$VRW9xG8+S<;n`LCapNLVEP3$_~adJlG| z7*o5eU$5T_V)(y-(2=4{8x9zQUO>}SB1O%r*1OUmO5^Z1Erfs35p;{Ck#x6oV-br5 zh-C4;C@L;l7qt9RY*jCX1X$~AxV2;5q?J#81d( zTtD5YAv1%=LtHtk=z$P7pxL{ec|I+r(APMdT4Lf#!L$S) zqbV_ep!S!oxA-7#9&Lt_64N-U--80G0ziciG=qw&b&U=3DX}Iyq-p%Dd0yn&35gCV zTU6>GMz)=$(9Q8bfvUu`%(qp{uwv)rL49x%n79o3e-C%rOS8KwZ}%t00piUPw^xiycg3$LpY??xD#00 z2C#0YMJhebJ_r0=v@Zri z+}~CUbp`2`j4wOK2a{nAN9?L}{sq@*gVe11Z8TM6qWz6=#WORTyq8RP9)G$O%5Z|Z( zYU)KnauutX9vE%zmLLNfSws?_|r-y-?84YWj~G8>{zEx(bsaE*haH&i4=-=*w|!%7<%H^WF=1AZRc)WUdx*7ljgZYt#tj0wLnZDq4I^qjNELcOe`XCME13L0|KW z=;6Wh)+jzJq6zV+9ZcyS$>^`n7}+&115V4%5ou<-Wu1{5Rcmx;gHUsV@5yWe%VOFZ1H%1tlNap0|ipKJX>8y)7u%lw|8QWaz@u8IG&S7 zO$px+a;?5y2~xreVW4ejCc1=gZnaTTf}wnkz5!39Unr?dOJ?y~Id1FNuaxiAU=JVF zy20h%1#nle-W6VBmqQw|y)UtP87Sr>zRlpPcZCDRDSZ^vh$@|c$s1G8*6Z>%YlB2K zeo}PqPi(LYHNthBqTF7)s`Xoj#(IBOvnH>jr4nM0>d9(w{*ZKfaV|5L+je;l7V$^% zD$>R0&>6niC}Vx3bXctHkRC${r3ud66K$6Nq~aZ+ko-V?h3sLhKly154W(U}ym90> zXDEn>$YCRTfov;Q*!+}TNOxemdJzrc8qf%~;;i1scrUizdOKtU-cD_BjUF0)c%ei} z{sTLJ`cgybX#o$?WlQ&WE|-#^JmpzOd4V1nx2@&T%8rSao$_S>eTSIjjXn*JL4b$+ zKCKrlkZgtAUt1}F;%1@$m=Ckzj}kehhXL6BGP2 zAe8fi4b;dbBsC2sJ9q2^zjwgJyU#PLkCf`Y6@trjOEb%*iG0jG=JEHR-9F{@v!4^c z)^V?1K&&9We zk~2wX)h*CVx2@qq&xv!g%GRE(Kg-Q@-*@1GcMbO9X6%5MK%|k z0hc)5!Ji|I{~@@A6#NC2`8250Itoa_M|>#Rkiqp6$Mztk_anp!0t{cnxz(`peCCbP zKAN=Q?3Apm%K<4zlMk|Z539vZs>E4eM_|?JtBGymwTUXd z%R7pf1D}LL2$D6KfJV&20tCYpv8!u>wa}_D%~RFLg$5*}&?(^@Vm_~{2L$*ge58^L zVsw{RodNQej>gM0rRz4j*caX+^E#uh51U;7i+_h;LSxTBB*~egKf%Iuvy#ZeI&AFE zSqoIzcp+{J*7Cc47V6cS`3pjg&LnQBlDjc4ncJ;$x|Jw_p-Q}2Mu%WetV~LS-DaV1 zWq12y_s61=nDd0I`s+i97d4-)9mhayZErv`c)0BUI63^36>iLkUh2tN^}FeC&TpG1 z)uom-`<$4VFUs#ip#j$LF{=IzLPw7oPi1DqKicc-m$iZL*O#lgwi`OHHECckMBX-9 zgXzt2_a7^95=`^F>~p+Z2s9*bn-52Nz79nX{?I3hjS&8ft=ERD%>cgM%}e$wKi ztjz)TthubJ^vRkM+iF^XNR-dnOL`$t-9Oeuz=I@^?@)gIq;_6#%@C3rRO%5_(&fC} z>6Rzu>#78zPT#Eb(UyH$ELAKm4^4EZ$yH1Z$~>&D&D9H{aVA_u!vM?ydl~Jz@1zP) zxIAR1_kK&#Z_V!z{nqh%p2jACijQQH7hvp*z`K4bU!*EDcb?Kg@`Z#4S3NJ{JzW=L zv{Gsjs|7p^6ZwQ2qy`W$Qh!!bAxHPURGkgxzIUbe#U%_56h1gPSO^6WjHcmVayj0M zIEF$ve`BO-1{@546VNqDkJTjZ_w8F|g^+(jnziIKC~W<2$@<|_969Z561bi;>a=TG zM|Hu}2Hl(WYmrkDxsF;hrr27{UdA%tYU|U3-MnDTEHE+)qxV;W=Bd2_bZAinq_CmFmp3Q_WIf!7nupzeL&{ zN-TH|tC7J}fiFfRuGLgE{GND}dAe>~Y^C4QFUZfMo$C&Whn%}GBo6!au6&IWr1f$gJ{2R5!?l{>Mn#Tb6$_Cfd*)T2 z(2lC=lhs4v4YhXybC*QOuF9^HiH{G=lQ|3%dBJfq^1-atEb*GlR6D`meZ_A5@6`Fr zjY_&aE*PFe<-<9zOHOC{=0y8p;y?`o7Wg5}?JkywTA+ef*GF-M#w>e#mmw7bur`TP z+*l=(2857ey%YTUhS9!IOSv$1g%Ve2&ZB_;=2gee(Z6f~J5NP*b!u z*WBm7N4AE3t>9J(@#qFf9JjY_^y-jJ66+oHl)O>wRJ4$I(O=A7T)bsc^gg#xMEJwI ziSK}C22MA=hGx#GJso+zywy@-F?;YODCa?=P59I3tJCsi`7V~1@-7`BKh8$T@7b^H zRI%08DWIMDc-bolrbR`O>{6u#2kKnyUPUG89PYW=9{Akn_RCPq^cW#-B|ty@|iKWp=m0nc<&Tf)r8xA4|-7 zn-wN#HpXi?JKbC6VOWr3rA-+d{X{gJ{iU5j(A%{oPwKliw%zxLQ5TWN(2(h3ArO*X zsYnroauWH~C&V}8OgQzxO}*~X0A<>0N>BR?cbu!-GJLP!@?cT*t(6||kzRj+dV+SEgc59Mo?5HpLV zNfrE0$+mPVhw4&7SGYhNY;OI26W z;k9}ph!CCDoX6TWY9xq??9}UC-OWi)V!%`xCda44-nEb;AWy2;(+s=ZPJMp~$fe~L z3q<{#3@_%**1+p%4;EF=e-p+fbjeZe{Nl~Z3NkifB32OQcBh_1jTJ>7Ixm_QoThXx zo}k{I!DZaGjY~-f>||o-#xKV^Oyb zNYn+MoP(^uUbaJkFmsahV79KDdkQehX{{^FP$iPNma zr`qvc8xHKKN*lQIL(z*8&**B^8bYOR&ZadVfULV>uPkR=SqoNRO`L3Dtn8x;dI;51 zgS z6ymrz)$US4o4KNFv#Ez{m>v&bB4+B`zioC0z?G(#*CsD^1+bRBUj_ydm+X6th4Qn7 z8pqZOw!+Jnb>sC{MCHyG>aVdiaq2A!ON3XdeUM7DB)=yHO+~@DM3r5iOuVhQ6OhXq zP|2qVS1b6j#Y*-Xs^r?$(K9L0A`7*CzAxbDE6T=HDnZk1K37;Ef_hJ@?++{0;7tzn z{=189y3$PYHVPM+1A15J-Z!l0#UKZ!!$f}4uKgVPeUCH`+JaE1be~MfyzJ5d4T|wy z+av!Rm(5u3_8Qx*C)JWWNhBa8Ekikt_?+^SP&=lW0I`4tLlhZS==#I>plMms&3O<6 z&(~Au$o=s7@jKc612D>H?A5Id9V1l2Q@4$S_~_CmSu)S2S8gZq*@wWJU_f_(KvP-5 z7*g7{oyICqq?zwC`scy+QSkta9f@>kQ?GGB+pi)3qSZPhYnbLH+36O@2%Ia{-O~Q) zSKT@9OPI+uP@!-_KHy+E1qYNU8vnQBRo~aCJM>TGLTbiYSGyJgXGgP@b z{4*VH$ePf~93LfwJzBSsfq}uwv+=7XL}?$PdvhS6_$wC$;(|E_^+X2QR^rGyZUp7> z;Vh{ovRrD8`mdFyo8U` z$CRdIsbCpW4!0wsAOc+Jt}-;>nE-rlU@PufEVtSMQ&U0))*3ux6AGEXBW;5>)J68K zGAtcOUDP7NMHpgG;XK=^XcpNCNR%)1jG@V{iL%#$jLLzIWb_BQSimL`VTDF<$y4#d zm9kC&srh#gM7KG_W0-e5S8A)#90+)zrc?tIuZtjR9M#b_kmOU+wE5k8Da5p7IVD&c zq~2*)_P9(g1-lt~^M5Qb^9KB3hEkGD+AI?Pt^QWMBeM{K=!_fv4}6F{Ea}+eQWcEP zSU75bxH|u?x}k~0^t?pOXhgFlU%cq^!wnvmSZ!7<6P)}! zk<&iPp>N$MBf>!@nMHP{#tdsTs6F8{2O+|%ftM{g0^hO5UzEaf+c!E!WnZ^ZADsvf zq2Z)*1~1}R^8B68Jy8iqX=oq>r1Jgr3(DSuMw=p745n=NfLr<66$;O04liGf6Y^3O$$WcdrWFP;zK&!EMp5E?_p@@0Poe3MJyD{aWRAs}YO(%aN}x+s6yI3q*8BjDlR8jWX} z-YFl)6I=K)XU(-Vq;1|I&phJNp_t`X9x1py)T@HXRj@i%O<)rjq5iwdiWa{5MDH^|NdCcq^_9r#w^^Jhh6yBq z2Ig^>G{Lb};^#k?I7*l1H*i66MU`)q$A4<-!yRd-Rx(?dzv$igj+aQPDNT^{2T+C) zalsSwa*uA+`EC+sRvk5CdN~^L`&W*zdYupQO%uYCEIw3OuTZ2o>GHR->a zs{D@ISmc>ZKZ=#(58+*xe4|L8e2$OszMog_eqk#dUm_}UJ_2^A58{7I5) zS!}DQ{G7|i%;RmQL7I-eNiZ=5*Pr%7t%3_xU~O1Af-q$B!}NV9;0?rwH*c zx2pPz$_2!^zOSybGdTHxYVR-1)58Oc*RaO=ToF&EYwuxs9?Ysgr#O7C&@dmhR>V6u ztLUQioU)JS(Vr4P1w++&_>oJHy65PkIT>}W4*p^}VNYHBYkSvV`NtUTV3u{Qru?_x zrw;T$WQxFia0l6r+)Hc%DQT4)U~#VXZsplt4>y2jH4mzC0(3=nCKaFL_sIM0N{|EUuFhH%Xx;J9h|7m?$YXv>l=>wIc#~IwcaIq-=7eE$kMG6&Mr2IXDS%4`|q<> zuyML~Q_R#J59_by-yR9V*nQYiO=vAhmN`Ew+b*4@(JXrTFEGnV3N6DSs8%GiLQ@nk zP?O+gn*neVE4n*}83~3X^S#R3(#0UMTCZ>c4&S8rgL@6H>8Y#L`552ps9ZATV~CEE zDn6V2oSM|7Vri{X-j}DY@ARYiX)y+-#O;)il9DP~a2J`$&mMY5b)oPPS+CjT_-pE^ zaN?hq=&WyGa}CwFcwWQ@bduwL`pe=Ac$+O)$3-)m159#sZaLnq@r*9udDQW05(f~G zEvjig0NuF`e^BXZ_oqAttsQ*PD~ z4r8~VxFyO633o_0!=5@?VTh+o4NHY6$_LrwUw>oen!s9V8Ig-RDASUgB`Nok4a%UR zW!?>;U}PBt1KKvldM^RrfVS5Cy{vd>FheH`yBdaF+A1Yo5G%d72_#+cf*0_%Kn*YF-}pu#tZvU zmoxpoEEmvPy?jJUJdb8rO0F#}H07g%NjFYdN$SZ~BW8f*J;PwsrIdh!<`Lc(+i6Wn zN2k_NTK-CAo%>7?`4|uBn`-+FH7byg60>dfVZY~MAFwZB2>c%llDqbt^E|7rA10XX z&qU>n0q$PsQkNoLaS*O?)euzasC|hNV3J>HsualYC8U7oCW{*c5638rl##pt(7bsB zYeN*+Yw}ErFX&QdCWs>i?mXsJQ&cDQ zJH53HyM;{{l0`&jV71=0us4>77f9?oW zSMl1q^?K;I2yrrl_O^-hbX~&D)*$Z5*bDenM0M}#Kbo13ZFd^^+iQm%{mCwfi>ETM-42khHGR5>>vr_dI&%91ne6cR_G@CzvwWXt&!v3C<52eQr zC@m+mjFQAts^zDnw|pu+dxX@u{Y{lw2zY5sjUJ~xYLbOj-&Ir`a5ms4uw+jHcVnLQ zCU(-8difq1-ml|{2;HVm4dvVQCpO`JQj{D66T2aGP_ z!K@$)Bn+u=b`$EDyne7gw1g)a$|)UUPyA_Cm|fZbz~tDor?Wt8yC`O9Tqd<@3uS0p z#_XwywW9uQ=osFzLX#3&2&Y#+7x*N}9_@z3y(aBys2n!rNiza0-M$!_cmJ;Jzg1(| zkeAHRQAmtevXT0R`YnG!4mj~LogR-g=}L%`W3!aXF0KQBmh2th3wy-3`5JUdJmxa_ zp!8k;ruNbs%h_+lM{a)4u5@))yOutic>ELd%{PYsU9kQu^9Zr8{a<+U-9IXF4|*Py zS1&)JgEDf&>SC+|*s`}hf0vyLav*M9WI!T${2tffLxa9#ohjRb<0k;2zo%MMjJo}0 zFQ4+L3Gw{GcRF2&al1ry+g1EAijxOqAX#RvWC={Hl~xxi|?(U=7qmL8X3GIsUiyY~J*T zhqvG*GLUD?myTfAq8CvTxAYdxD)XU@^<*(`u9?*$7$ zsw?hP_=%%#$3aX0{F1L~Xi5WB0+*E3qdST-Vpfa-G8E7eq>jW@n=LPS`IFDr1*w7apsZBU zAG${uv+h<{^!zhek%$YY&(`WwO-6@{Gj;r1So>6z5vhElAHGt|01aOtn{l~ z#OfenTN*)m3rK+bg7Wl@FQA`iJ%2=Aed)^b+l9L-oA7v$u4I!^q*6#0DJ|4{)T=f@ zYK~F^<(rnytw32LYJC7g4@BNv9>B@EUirz0_CW3Q%=Dy)EO&u7iAC z(_R{aHd+@wqx@{RAXNGN-F$gt^i};lR?pX$aGh89m1_}~V=B2mmrJV`?MEMIv}d%o z`2MbU-coMgwE`%6h_yA2HARhePEVoTI41;~-%>k0p8u|V0IEDg5k-f-i;2Es$PQc2 zcP$?(c^}{|Pc*Rhv>%+fQYGYxFsZi{QqDTtr`v(yP5QTLkmE@q#~d0Ab+ckJ2>9Yb zRK{BJE33p;?)p`oGIkyjPnFEK%u3S67lMxYNL-+e&ngbuRF1| zK8^iz_ih2PT=-(`M0pn}qgcML?TF{q@z5yy`LD1M}B@ygmN7kDO) z+DHUp)<}ug@6{b@5xH6{YVA1}!d}?=tuc^}W%$My+qM1Q)UN51n2fi-g6D5^W~s3x z=?IM2seeApIiGI(!OG1#O&V%T(&1)y9i=b}M!8~Ab0zQUy$^U2G8g9D!GIJ4K$2*0 zh@m(I4)5repZZ#9-#^*lse609TD)pTi62afc@KDH+!t|QM`)qdVD?Ikukg8R)W6n! zWr>Zp5YFJJU(CbVdqZ!tq5xa=L2nnpPAb*E>WvYY(N2SHrtuGCNIYDHBONDp=H zUSXLsseyPsM>h`OYhSYKe#=nr3Ex_)B@zB1Vwl_3y))*KxwHa_-1FXDPU@V0DhTxd0^f`nKg2a;MW{B z1hy&#Br1YLv$=<|uk^qdCXFvwb?1`ZoW|C2Satq{X|XYV0UgFuAv#q8Z36xf$T&c$ zPxycZH*9sAE-*eoporW}b2U4U*Sum7`4b>e784CRfnG(cynJB%4G&&{V_m?|w%E4e#lk^|@ilAwH64;C%xR-yyJ8z+yOW7fXm* zNZ~psAM9~tIqu!Lh}+ZZR#0omlc7k)HCF~!=&@_{c)(L8PVK%>T8(JNH|fwa9hE5j~(zoS|4`Zg@tbRV?6^H25Xe8-H_ zo|VV}Sm1Q&bAfb&oCdQL$7E-dSwoUwcJDwl-G%U%F3QYlbqm$PPwZ=vB7UlGR4m;I z4ISH}CW;9H@d3NLTJh=67Q07<&VS2;CQB~CJG-nu86Q@ro8Bpc4X1x|8oh&{Kio2T z|L@r&?F=y?t?R!XWiG%J$7eX5*q!)RKNt+pll$IdTiMI;0sRSQI%E8bhXUQ(>7H}D z-e!Z;mUI_#r(2SErghy}$D9@9gX_Cz=14=~E&cpoMHH7?R?+d_xHb^~;T^0K70egRIM6ZsXS|whjFtb4Ei{3x{cO8G-*RlP7CN=A z!K%!O(DKDet!BRrPFx;JeG#z!`UkD?5m*wTYixf+dpi|D-oji3XimSS_wM~(vn*3T`l}2$Xvzm_A-@Se`%pwOA<38k+cTwYtN=bxleVnN zgw{JfR3SUFVFgH&ddFm|A1TIG$U?fY zaJ!VwE#@u(Vk{X3p{pS5cNl)*2f`h>cB}*1GBGQk^f(J!Cyr;RH}eDua?ag%Wuqs? zYzjCA5A0m)j9y^TFETb{j3mfj`2(>JaO{HV0odvQSu+8mYNZtrqTY8Q*r6@S`1={E zAM+1?Nn#>c(zz>H>~^r0{83Daf7}(fr{U}|YRn-M-rZ}CsIm3zE?8ruq_{fBO!o6% zKdAN*_}VKR9!le6-_Cgpr7AY0@y4qEv}a)(wgc=WgcXwHZtkRP9+m{=J?EQAb4d7! zFFAeYl6CAfVa2)7i+y(eEYG|AGg-)2)?DxE0k%^{K<4jdvCNp zm<`mHX2be{g)KEVa2q`}xLqjmi)Sjg7cGp(Udm2@w|zhXKVX~%9NM*sngPm2nUE$k z6?d9=xCA^dWMBMsMc#K$pEu%@b&vO@~pKq#YR zNyroTk;E-g%sB2}jC9rdzA!nFbgea|^SFWVtqO-b;FQV*&VPzX<-Cm8e^DqciB#IZv&VBO#9x zK5(uhQhy5mfpbCbg1pc98KHbwFWZRDFJjme2bS2x zotWF<^GTM7YfCFy#&R7@mkK9W ze~~7i=0%*xAaCe2#Jjc#+rpX;c#Q!{`CDqs#dQ27^&fX19e5Z125qF%R6fH$-uY!S zeL6`}F||J;1T}{`)G0|nfrYy&wMsM}_93L_?OA{P$v8)l0O&ftyWW6)^>yVq+cV5K z)9WE?Q(ZZ-W|7AxL5AvY%|#bl@#GY&0hpYfDZ6|nF5?xaC`S|~2Y92ChjO{&XL=LA z!j>u9f35Y?6x*vnb*F7MxeX54MGZrrIbL@8co|?!#iv$L&o5U%b1>y6)VI4_IoF*& zHAhFV@Wm((SEe`F*4F6;p!K7}-Um=o<+9TtKF`x=h-^=z`gkI%#4{S-o=Cl`%O0|E zOc@8*uAYcroyfzMS3CM=?6t*G*GyyGj7{hki-?q@(iA2?bqVg@5XqU4P5kMz+LDgnn5{J8q)faSIRjz^ z_L|=jP#J9BFV&ycN+iK4BAlHWQz`_VlkHy*xUN=G6DQM6)x!cA;kHJB#lNN;fAXN; zOtgQx5Uo}^>s6eSHM(P?_U*1p4ekBpaJ$T$pydc)UMjkn-+v=(^Ka?obqg0|=PTz) zz%bQdN9~Q&Y;btB%J2d+I=&HImHxHo*+xW>c7qMOX6}#wvE+z@qn{)Ty1RZZqtG+P zvsdf?u1~J-8m~8SB$-#$!bO&Adb;7Wx9|RC<9ZkB)_RP3k9ZbWuI62<7S2epGRfWE zH@b-CCmz2?s@#Z~paXW~S0L6>s0_{1H% z9{4OJKq|sxKboVQz#fdg=)d@Mq=y2qvxsWXZ(GuK$^T zp{k_ilSnfb6bKdLNQ#uwwZ$I@6@%FBI6Zu-ZQC^J)}V_R5mT;&#NTvaV3>E+T!kS7{v5#s@0oZ_l?8$6+W`;x?I)*rQyF~qJd%eO5L z%kueNIr@0Gatb$Zn}qQbfL6j{L*QA=)NrYo*}@4xyLVB_q0dOXl&$ z6~2{kQ?avm17fJQUl$dIjn}Bg4C(O^21+(1$trV_X>Dv-`#iK%og@L1B~62g>&Mvr zGNxF#U$v`A`LeSMn$0*#7KIMM%S2^J$X#YH#K{u6{4=&?D4+@xk^tLeSf${Yedz)= zg?N!KX>M&Q)+bj#F%t&Z%ekUPWL2Z_L2v*W_RKI{{77-~cOWf2`|n+RC)cWxn2d&(`c=yh$r(sqB&kU=YwhPEQ}CC5pkPK?`Ps#^4iXH+W<87 zT!|Bc0Rqac*!Pu&>BDHRheY64aeqL;RWRiK{EP4!rAB`U_UrZ@yI3O740CYTPe&)j zI(8_fgmO~xt`9t+DhIkmf|>jiKS>Bavfm;8Qc-y5UGcMEbN+eyG(-WJKGNFj%qlT-k}h}W5)rfCn8=Ny%ZGYjyU zO0@mN6Gm8vBDQaVMF_kTr>*}YChlBW`ElY9l9{<4b!?YVU=90{9MLaU^5ueA$sMl7 zixJ60w?@uEYWsvP+<+tO;+?^kCcuZ%;QLeZ_%7M=(Ub=R)j@&QthMFDcNFP2%>{37 zcJs9&3M8Z1xz?2XXdr_f`;XH39>+zRm&lX#fcOV!Yn>WV_DIT`L6B07-rp2O6F`&= zL0cvA^>*%@d!rkLr%U0JoAZsgVON;Km`%Ofeb@ z*~CU#!LiN^;Jw3SpXAlsHiZ+Yz-p|Dq1$;g;Rjj4%BCXEk9I{WV+?jq*W#EYZzXKJ~xAOE? z17;B?ykDP~!I;j>m31go{rAamOF{>SV7RRx=w4y;t*WZ$^3F zBjL95b%$nKCGgV-k93=3n}(sMg*2q#@gDX2H2NlU!YZST>zw>MS;-^58Sy#5$HTqQ z1%4x6-R-TzEv#KKc@)LJMe=o!W$<4;YhX_Y;>=(CQ=C}xF-ab~4eTY_f2K=s>Bwgw zYy-E;jFKx<*XpG8=Uy#jvk#bbuxgyQhf$kizv#^mq`>|xpSYxZN^^VB@E5Wk+5+TW z9Pk@(sF#*&Pn2T6T;a(J!B5RrVdsoBlgaPdK#DSui%t{y;p3f8`!JVo?~8l3YqET| znh>hBjj)lRm~gP?^yl+q`Xw>!Uc~#WMI{k`tLr}HC_DVO$8zV(2e5)SgiRqz;NjPy zyq;eGg_vswE9Wq(MKNAI@9t9dFt0dfASygq-gVOP5}b0=Xn=NkAcEleD3 zb+N27Nf!dUy?=&Wn=5;SS(tbGKrv+qF*}W6!u+*M5?0{ZlVR+JE$YN{eZKa%zWxwxNrX5%o|Dx|dNP!l6V#X!n7-O3$bHw*v}L5&AnQvf z``lU35>%W^K$WaL#8$W`c@5>X%Xaj}+4|@j6B2p<)ANn1NZlQl7b55xQ^%KFxde7` zYM{=;_p-tV%m*#F;Dy)23TZk|rxq)aeICzIY0 zbgk}YlppO^9Vs2yPwcQz7t$bP-^us8l5bOA$iI%5#O4P-EZY+lZ3{@x&JOpq-*FSP zv3%x(R)_xM-4&pZH8q~f+Lk=}4s6VxmDm@7TY86`-_vxVO6Nh;%E9F>!`~GCUeaN%bLm+Rq{WU3ENMVlYeU#OOlM7A}%QY z;c_?#_j-Wc7B4TIZ|bzWG0BxXWkD#1n5F~CM;G_4YyjZ; z+r|iY1;^@$wu@`=)Olo{+Zb+}?<&5E__B$P*S2u{>zeZ^R>mViO7)dq5_Nn?n5ge) zRVIAOOssA1%p5y1m9&&-<}W~YO9ix*p)}$VId0)$UX|OiR7Q>LM;5?TCF>8Zf#F zs=lr6R|Q4z#dB3^RvXADZm*Sj)BFH-j#iOE&sPqqB^xm7dIyn(sO0;B?Dc}AK=ICk z1jW*ydfPpJ5_6Uf4h484{o`cQqRB;stCd8c!IYxIE;F=Zu~3kj(x&?Tdr>4 z`0X4dXdJf!fRIle8X4h!8iqXaNQO}OZIrI41cY$UZ5@zF4=YVeF+O=>7uwE{GyQe* zOO2K1=Th=CRcbeMWLNXKKuH7*bC9CwcM=r$U#;IRPN@C9CHI?z>0OZTuvSKNvo0sv zWMFnpJg&ZZOtl5UzFzG;`P%_mePOm+gI7p3WbAoy>aD-c((*J+S=NjnPm99TGS~b1 zk=v6IUG8?m3=rq0rWPyGr}E9u8Rx2n1>(o|^C4c?=rhec;y!X`_)TOfUz>^xTKOy= zDQ|%7v;O%7tR!hfx>8v9{^Ag`XrnM=j$VHDsLlUIU0ME_UQuRfSQJ&++h?5{{48pn zUcTcO9Q`h9OFuVO)L>U`mJ4tP>HalysN!!<*kS#tLi@Enh9ow$yn&GL(J3P&cyn5I z7Ad<0i6uu$F4a7Lg4BdH9o7yV-3#uP%@ksCY3mR13mzjT;~b~NeNiaxYrW{M8ews` zVQ3{IfMLGBj%WDkAVG%aCALnWI%QPfzNBIwaxib@<>!Paw%3OX8HzosFKZ{$eEBcrtyM0kT263kY~`{IN|gP=+3@w1rpH_|Em`$H z?V`g-XM^ix57-(nS-VDfWS=no7NSFGqP1 zNHr;V-Z*J=TvJ@{&aE}I2`3e_;Qv`Lt%t-+$PNREU!Nw^%t=KJ%&>UMkxPB*ZW$L- z;0_h_t|iiv!JH^r;*k@M1mEjJ@{*%tM4eDL)OCAuCV+D6Ml(MEZCzZoM9B233rqzb zI-LUgXKvpj5VnvipEJK9MPU3*4TrV288iFRA`Js-^T91F=O@ch0^CXD9`@8X7_SG+ z_1)8=%c+X?LTK1mN%x`U!~e19e;1S<jH)9^g`!&$IXrfg8 zTxpDKu;y91FOC^DM29RgFNYWk;i!PoWc6dg*Cux>G$w^=C3?>T^u4a0A!lq)%ZOmW zjK3cSpB|dloM=LJU(apDeuJR)Ov|t%QoH2yBdUOt1-nVGl>8x8K4r^iD-^0r&>EK% zh@u#d`1;x+V@DUAYZ9;1`rRfHJ3Jrby2kp|ZowjCp52cb;aPD1CBc=NYlOIA@3sLR zkk6H!?qxqOkjVFNOX*6&CES~F>#QWrteC!i$d>PZ9_v&#<5r9Y=E{-c@b=i7fJ4}_ zi0Ryo2^)Z3@-N`W6kNa1ttttjF%?#P(!2(UT~mG19Z#K5?hC1>=k0vs7-2XY-*I)l-hfTDz*1s zwJD8JN~u{RY75#5s!gjUEuumxm8y#QfAfCLhkSUhC%NwX+~@qxe}JwzNSG`8)YWrN zE{(#7+G86r=bD_}2mb*w>xHg*Qkh}*_1$}<@lvzBT1R8H-(Vdawt-E=^=Bw3II$62 z`uN`-F5eD`4QA5*r;S#Ulh3(!+{?Y`cV^~zy9Rs$%1+oAzsMG%(|vha%eJ>v=XHHc zFLIb17#H(Z+eS;pf>OOL0HtuA7S`D^j*^0>QGyon!L=3;O3ln>--U^F$WG+Y32pG+ z{U@2x?5%O-Q4!0js_K63UFURIid$F_`Ml)&SM67q@>M3>f2P0^JprwjD}5H#anIoTZk08`U!^7eAPDcR2U91CeGV5h{+Sf^ zYSgOf=J#2K?0sw$eD1UQcOP522Ncn2C@D-ea}#>FQ|#lO2L{jLGYP@Ag;F!0r+8mY zrtRG)knA?D5J>jJ!iExUlBV@p!U1U%TYvzX!cP%xlUUWQHnd!Xh41E0lAv+q0Z-6m zt3^DVM;}2czQa~MNzFlQKMM3yX3-?%5UYpo#~}Zf?;yD4A=!Qt0LoLTP{nRnezCR} zXBj?EOi!eCgJ8*N8Eb2RY^7z?Mw@=7K$e0XlN$xl%HR}|xiv=o&FfZH%?%@A zXOH+x;crg6KRF7L#rw!J7#@@roCrC1mHah-ukV%f;EU=^T=Itpk94emrXq8S7)NJw zbfPPI$XYs;9(x6~P|cRd4HAcVym@R_P{IRn0Wy~Ak|^41FSWw04$G1FaO2il2`iE? zlZ)^tMqMq6`8s6ftUP_riq{l%xQ+)AwFv4bg7F%QjXp=%wu@>K%MaQ_3c}j_R4ZcN z*F;niN9OZ5&?l0sR*UX?KN;EIl5q0*x1UU$g1%@a+NRpKfY!d;a~fXiTS)u!Hsq2lsse^JS*ew8D_lH$Yg$-Y%E9=VmIWlS+_|s zYWQ>U*O!AcBGZx>mxqX0OC*r6ddPs>bPdeFMb#+IK_>8L^~Ut9e%BO6%MF;p$0aznjVG0D>F05_hADT4<^a+_lAA7yl%aK0hz-U(P)5 z^7WmwoI(kiEvzEpFq)B6vp0u|IV1&=QSpl3{h(JQQVa1n^6mEYp*;%=9&);sDembB zskPW#DrC8F7)3X~eRM{W9?^dAqM0#mD`F8Yn%gFO?wE&2<=kcq=#aX>*u_q6WH_Eo z^1#a<`>baovc75jNCk(54G0i8+12-4&-ofR&`bN>z$u!nc2gK)XF(Webs|DPsT^0+m>>xx5Ayr zu_L3?CPP%mBofq*!$hA$maOo~oz8~2$dp>*&Lj&sfKa{EmdF%GD#wWT?YJarJ++Lj zKG!7;VI3BDIq<|1{N&dD><)A!X*G}97m_qH)7dnCWE_CwFiv1SVovmFJ*MT;EbE;K z$>vfqG*RRA1=xL(1_OJ~m1&1<_PBFhvoLsZL32aXe$2=tqd)Nm${BP-iSPaAIpJnB zz+^FZ;lmrceP*Hu?0NH=%z;3|VP*i{Hj7@ZLfC7bBe2CjtG^MU_;wLD;ICvu^g)sO`C&J?81>vXV?^PAn}; z9;6B%790FI{>+MZI3PY~f53@WI_!;4l|b>-oJ8BCI(B5fs=?Xd9&YKE$o;xIGV&ju ze{jY;m0m*XxJP^*8!@%3h;$)&Z0kj-$9hM<{DLm+@n2`UV|)w#12}cuIy^43i_YXC zb>pL2v0kU$DLuy`ok%zul zx1y6$9ZS07dbWP^5^kftrsui6?f9zCqhPV@&*l_kIMj{dm zimf|QBcPytBtx|6JRMr?XsOB%$60+|xC5Lf4Pv5nbE%1!peav{6Qw z`hOW*$A|8Cg&GcT z8&mr2V-x#Ge%>PXapnfn-?aMiJ;FsDLGAy@)tsd+foULiy_B%IK6I?Sl^LxbPuilh zs;)&Z1xVF~6eIv=7*6p(pr7U^VANI)rdsCoPWszH!J0_Txbu}qTb09)LnwWQV^DQ^ z*wp;eAzzf-)9Pmr4TLo;U)XCaUEkJE&G0ZoI{gPAL-&P;uHz(M4EzB*qQD3iBCAt# zL`Da7-GRfUUeW5(r`jL;7t-c!fZyjdC%o!HS$|PlMqTe6-M3d*MhrbFQD4NciZ-g_ z**?>1qef$;K2sjV@;u}tu|w$KSNZs*>e!LT@Z3}!ylx4z3+}+F?)ehr!!3M3z90)Z zUSgeAjH+Tu1F>);p(UPO^)Rui?Yyvo1>8Dk)491+n%MBt^qhSw@)~^zrD$CoPT!-H zU>_plzz7;VT=PnQYm%6S_wZ6BY;LhDL!XkZ~8lss?j0a&s8 zjEf<0S*4gmc5F(HeWAAdhA6W|3l#^4)&75g$IDzBFaO2fHlkybQtR+_$$0Lw>=B+O zygndw%kW}Ior^y@*jH;eHvd%b)j_=BpES#Ga%%2eR_cFqgNis%AQ%|v+n;SWU9zLJ zxfrckxFZkWYO}grBy}mHa}HX+AZ@S2F6Jg<}1elAZ!%A?dsSmqbWzQQmP4*u)N^UkC@NuqM1|AbVf z+Z^s1qEux%rp+)Tip|E%;x6o_UNvo`zCEQu41_OOQkL7osX~A7LRKSt!s%?*Bm9cq z4{!TL?b)T7>4L{~1ZsDLDyc`IZ9v-c8M({~y!JcbW`QJEDvRIlr$o<2Ki*T3G8V*7 zHx#7oBvI;8#C@l7H-Gq@1c`vcfY}iZ;g@qKJ{sma-_hrEvHm`=O&;fT$#Fe+9J87R96rkTbOa~64Iy7=YW@U;ZUFd0BB)Z~7MN58HTbrJ@=(68Yhg&A-Pup?%s^k_rfvc$gc!^;|28@c8 zk{#KQ;``?pwYouoyTLr?E|6}kn;jd3@oar_%+}>%Xt=_+SxAYd*B9bPkng#JxtCxl z$Ei!xsxt@(&tcu*wf_3EL+C$1jYQX@A17B;l1*g9vKM&n{K;i*cr-UW*w+mDJKbbh z?9X#F>W`KJ_wmNCEdw@?6jXq3B?5^;Is6t3}G&1G+ zcZXX;{afwjc$5_*!||8gSTNY6rf^dQO<-ZZ6qJ^EsejCZ7MD=`q#u5afeM{x`hEA* zSm-^`L~pU5G7)Z$N1kqcCf&Y4P$mo4%aiP|i!5BCt13a>05dYveqXl@vK=t4;y}s) zh;W2V>Yd6ZEX$VhfTG)zKQL7wzV zKei%}y2TLo%r292t;o8m>oIx7!mXu<=ZBGCD{Q>tGW585xYl@Iy>209FH+!~M2CZ% zvVe>uZK~(SY49?8q+b@#@9E9jMW-5s$&&T;HHdaR32tJtXB8|INfpW>6^$m>_`q|f zA)+@Pn>_HVwNM?(o}=VrK~W`?V&UfWT`39w!EFU{cf z#YFm_37-`Z*u=@JLHUqPEO?ZL!(g}zgK*tkCs505)0JO@T$kYF!K+0WB?L)NpOzTa zn|)yJ(h+MG=`GFr0<|RrH5uKRe4bMV;oM=Tt8S|+#e6ll8sHK26@H5roVqXbqj%<1 zz4kZclP}-wYYC=9yL~vw%n#xw$Oy8;Tw1OaonQJ!Zf;FNU_Z(dghHdK6Y>68Y=df~ z{7xG|6%CgEuuZ(uoztFNFG6ttJL1Kvs#ksh`bTf0!^!h z8TLN?biVM#Xt~CM-o54N-)+xB3R5kz=HPbUQz$U#-VE@Pr#^QVZ$*P_0dJ2XK0Tk2$77* z)4kE4#~44B>PxXbUZTWU)>xQ2bX3g{HYtUZOoDEaOv((?n5*E1~t-E5|KMFvhA#5(2 zLu>e3+;?Ji3c4tngp1m$5w0e*Y3tw;3&p*PEcXY9^6ylt0cQTC0Ey%J( z-a)7FYQElMzhK4$`IEVAxpNP2%H^WDm3G5fD)YUL#Ao){=1O_B^`VhD`7R2W4}ZsO zw@e4#|FcxU9+jyaSNz@T>=+;GiT1rjj{*2XY{qG1?PQ{Fbrx!ebpq#Lh4I6~H;@rm zzT}?b9`e?kZEd771(#d8g=(4A)+6ve?p8s9GC{3q)%H^i8Y;0rKZyKeS2j zM3Tl}B)+EX`LMuIQt(2BS?||<$L*Bhe)lKZzn`tvXG#h7^S4U{*qr3oWL#z0Vcxu* zrhlD2aes6m&Q{8h;q?}PY|-;hkM!U%$}{#s(BFrXR^6cUAl&^FPG}DegM0{TVPuO> z%dt}@g76=JH6eV&Vv$R#ic!TaNq@*%h1v2@G@_0F_87uR53Q2B;n97#>TsUJy}o1! zZQ0aHD3xHHarZAj&C85Fubqx80zI66iv|z#&&1CvlKjn9U$w0WL&rRX&7yJ8BcFI9 zQi^#x`w61W=|oC9#}&*;kQY=(ApauTP<~b@pBdC6yms~=mzq-bsWA11v%)4IV!=2t zkALRPa1snqv5fG+lSLN69+-te1aYmKXZZk%;NZO$s*(BDsU?*cG(!kJHMcBn7t@R> z=BMM!Qu4F-UwAF`TzWH{n+5Ku(EH##ik9cy1k_$w>xaw*i35`d9^t$( zvXN9JCi`{pYo^)OjC0aZ$Ogg@;;q;kD!BRJ)5OP7M{l+o6&;@4F3cqI6}#Jg{apL- z{{WqI{kM-f3cmJTqy1|SqVzB4$)Dn7hz0L%IPM|=*NB{zDB#t)iAmEvZO%ksyTrAE zFSXZUh$Je3Xsn^}WSWI^N$YGu!0!`OT=3#@uD5k-w9$?2RX=007Cn}LS>G55++4QL z(8>^u^H)GQi&L3f>5|n-+OPS{u2V(}NVLFtmW$<5R>XN$)*LV`GRO0x5^Q6POhL3N zoHBN_suk$NPT?JopyCW|1khn@tsg|iypn3sXM+6Lbem;-!{f66QtY5(`;FN{_fdzb zo&@X-$}Zhc?fM*%r)|$J819Dq%vGc_Wr>)pF;jG;8 zRPTPDy;CyfC+Qhfw}L&~0!(RphirKyOM2a_J9PTPjMSrwupDOON3KtCQZxez;`QtU z=^g|B8q`~k22Q*U+6?(DuHEfG)Z{~%VjzjZ{*8-iue)wW+14`SYEEX+nt25{<`+zt zmR%nb@%_+f3_cF^HQx)oaqTrkxU7z>M)?UcE#6)_-%%o=5n_s-Lbgivekz!?fo@TQV}+gt!#-RyQ_fU?hcno8Uv+J**ZabtVd_#g~$%; z_%mQV$+hS(yOAfF@ppWHip3DaU9+oj_j`izwGvLI5j^0wo0HFUq*s9Frdf)p1x)A$ zhX=)vpBDn>3;sSz=yAGl*T_Gqef`t3LeywqU`h(E0%Ppkd78ayc4`D{TcK`c!A5rN-NL zSkJvwoAcZXa4ZcUfOmqpwLRxP&|B}nzEt|cA+p3xJ{~d?EE7*0;XA*(AD-y@#S!bX z6O#vejn;;Jn~OzhDyuO|d5`1=+RMn1tW1#M);(?&~tj~!Jm(XHl zTbzeR;o??TWVQ2?+h}}(Pi&@EgslhWe5u8c_hLG>sEw3g6NUCc6}M`GFo!=2&#KYk zs%5TC4F^wkVnsy0br!R$A-74>~=J6<&D~9Ev(RM`ONrKU~rd zc-G!r+V1w_AC6oqmfWa-N32Lx1pLIf(?fo->VeYdU zg|+rB3G3<-@RJRU;jD`{j7jtT5pat)Q=b|UKAg10n`%#clSGKS4`ZIrpxJjz6tkz# ziy%mc1mrS=iS0Fd#=s6djSs5DWr&;+}K z!H3O3Nk?;=wy%o8hl+)bGp;O1Nq5i`efNri4}rsgV_wtpoo+JWSby*k z_}#yFwl{6-s`KO|0HBcb(#p@XTx-YG?IZ<_rs(9PR+vRm{l76>_jB{4Ez0iHkMtw4 z*G^IW`(WdL^FL!_FZ33-!L=1)H@g*WcLGz9f7kn%1)idFus&5X!%V`4R zKCCwX$No&XC$90gVz<@Ap)$oSnDOmm=Cra7$z6u|e`!*`cP`n!(mV%WiY1R4IyBNF zqzgGFioVzF%)wjq5jouL>w~9SE)l}#OD742r`f&s1z_f500(Z zv-6hT?}?6!G}MS^LMS|YAGrsv#$e7#u2u=9%f1q}=R4CjMSK}6sYxq4IYk>j`_pIn z9qiR8JUFMrf>{C<$$3Usg1+aM;7&=P|C!J8lin;ZVZ; zyly1Re=2zA7FRoFBgH-xArJj(+xDu~;$0FezcBq1ndKMU85pk8x=o6GS%1qOI^Tb5 z?)%pm{l7Y8>e5uvQq*O?RV@?V!B)TO&y23D`r0z!KBkRVrQA$q`_{>_fW$Fg)YGqZ z#OshXNv$&$2*jaVprRA(ga$Tm8s zOe6DZrX)nbNbv|&RCuX*wDdf8{YYF`nHPpuOB#Z&=b=xmP6S0sB$_#^{Hs}wTzTX_ zExq_@CLC)h)$J5X$?6G*Q~Dh~87M6!AWB{t?b|-2I%)=q&D(QTyk+StbCLEj=SelA ztU@NV=RZKhpG6a22awkxUm5;@{^LJ!PC`dDr-wI^_VgW@07`&o$nr#~tE#joyrQfmAHL*@zO6gws) zEu`BhWFM)r z)>?%SLl;v95bNuYY%Hae{$>x4Wd_AcQFBPAf0I7SXK@u|)S<jR1BPhKDW3)U?x0ezfBc{@+j%_9;$!d zCT$PxX(-;sY8Y0SX;FBo(6<2@wI!(LOWN_2HLHgbq};r5E*P)2NmYWNlm^0l3WQU~ z+0Mqt6E|x1qGSuXPvyphuIi_itBP;>PgTb?fnyrlRC=%U^@AAiS`G2ZHI&&{q>!w5 z*83v=1{^ddDPPu~kvY(y7>$?)Yn#T)m`^MJj9_$|!N#Oq;?63mKY7fB!&?I?D|jrf%oGJim*N-Y zPgoGov?19fTG=54pU^bUvNfkTsfif+J&hcf7f51*-k-CKBrz6n@XbPGt$yMbx0NA6 z)Ka0)oiY1O^h7A5=Bp8K%#KPp52tGiECjU&I#tX@ik%K!iyXS=75Z#TM78p}&?vrZ z$cw!A4?yQc*oeQO;5Hz7GdABS`8Cs}dih#u**Ge3*M{{T9Solwarw?pQ25T;D)CJh zO~>>B-@NNP^xzzZ3t&=M?P*r^yJEOw%*mkzsVA0qd8{T)Po!uI5WqBtX1nTiq&KTQR6-w{S)l$jP2 z-euyS)=P%W`*_@c{F>}!D5K8~fnl|)KLI-0OarCU4O4>cip%svzBMPi;^|nFM8HU{ z&eo*h>9^|o7mBxxdB%RQy?oz$X3oi_TEtxx{!ag;LgvPTT1}ki&ZQoh9e10c!WxC0 zv3MR?^?MXY{p~TRZ@gb$*vWxH+F$iKh=Yylc+*BA>rnxQY8s9fEB;w^zp9 z$gMh{`^~-d201ZE@VNikqG&r37WSDhQR({f*gLpi`E9pomw zoW7mna!z_J)N{ z^f3%9k*yq6Qk|$?0RZr{HhBvCX-cc~ZsPK;n)Hmhz3@jd)b;VNRb}pwjSBQ@x~Q@WJW>2tMzzudRAT=~8+@`+g_;%H0V>1r zbOx5*BvFono3}w$H$jhLeARPSfNh31Hs?V1tpFMD#cO9zpRE3(S3D|S@*_qTY}yy~ zl#X7W1QW2iRtW>tF|YAG$YZ<17a=_^RWTfW?af}i1R$l-Py zq|?c188sc(cve?u@)kEQJ~t8?uZU60t+HcBRpOAq8TFK0W^V z3OLh#QCJJ;6s6*RJQEEff9%R_c%j|GXLw6nVn9PcI;yEHWI)SxR1ZKc=`8E1ay=zC zwdyWp{Z%$*82Lb2@B0CMxNM0+#84$kzT>4odFt`soMHj2a>HZqWYBa-?cM4NvnLeJ zyIuE9C+syUtwc24K8uEw;AxW7<`i%7x3tT5G8v|ces3o0pnu^xbaRQ)fbO`o^Q^qQ z?LBFN(w&WFCRVt0Zex>xOOfrh!076q2;@>1^NvmSv7qQlQBf5!9#VDf_j|fE#;dJ{ za8XN2cH!Uxdho5GMXycISy5NvXpGhUdQLpLvb zI4>KSXW2Ft+D;kp+U#lCCXv0etfQ&;-!}c`FY-h3Ie%?co2(3hnd%2)tsWzbH~N5# zWUM{|y=QxX&NX4VnR}}nUxWG-Ht;MXF;cOI@hZ=9C11ab35hMG)Pkn=j>S;jk3bmu&LV*mdI_KtQb z3w!i^g?AtCF~m6jT%K*1d1GJi!q!JVj%p3UOt@QC4~ON{IB24i_FtO|GrxU|3GlTF z{demG)DckaEUy@~wQjvh5hxtS!}jm!W*Cy1I5pnK{YzXbd?S^TtkXxwC!wC;@`Zlv1SXxOELv~?dSqQ`Q%<|8n~)tDTUdYS>LIVSR24KS{ap)) z#qpm)dq;8hTT-Fnv$5yjCUh;sZkz@Ot^_;g{;)dg1Xq_zn^+}=w6fVb3l`;8v^CT2 zII^u}u{=y1ow?vk-mlrw8p=*F`gqfLEYU0d{cANXAZzlkU%C@7!rXSx%FqKlvdgqG z1t+6A8}Ek}dZ=F9?EW~Ap5$W4vFYVI8p^t;YGBT7efSsW^tL^VvdzTIIj^1H?)ZGWw?jSuT z&v5QJY56Cx$06QKT&8fL2%c6J!_ zS$P>tM{i)q@R@rOvo!W$?uASAZz6f7+5*7E#m5^i zJVU%077wUOZxwd?lB+_(FZE~Z(^a$MUBpxF7du49=(^YG+Pew!a)zl6UHteRk(_4L z_T-StUIxYaLz$-Yfx6e^fj71Io$$*yCA3ZAiSAooQ}ySQjs}>n)c}Bd&u+DMMIaNK6f?p(OZ}+;zuril#d^<%)&RZ`}DjD zJ9ANlM$RG6%kv*~=+{jr;-P)KS$OpagF$AN`OuCB08GHIewjQwCbHHYS00aeL)_r_+7p_@>um7YOBr@c?b} zg4ejt7T1y^)JgC8)45afYIkZne^oolD)oDr*k}#0WVMRVXW*(YuHrQ51^jBpL1%g$ zpwy0&n~3VPlZIs0DbfQ>Q%DnKE9-yv?zatD6A3D$AOd+kT*o@iPc*uIW2G824(F2` zuKb&Y#YW1!TgE;Le{j2N511;T56|{{)jo(sn{t{fP$r1`ftl}gy;tONOvo>%3cgaOh)^>q(*FE3RP4+e6>_8>Gc>?yghhOiL05*;Cbsl{5;qdeQX6qfku( z7JEfBnRC^S{A2Na6`siWw25iqcSQRfN)d%uA#7kt(5)zzYzMZnW0(P@;B=~sZI#&Q zOB_CY-mO@Y%_=bJ>5g3)6>vb8H9D(B<)^;9E!J@?o~EWj>}_k


aWvYj-hZ&!g~g^h(jIoy#R`6v}hv_R!Na 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 diff --git a/htdocs/install/doctemplates/websites/template/medias/image/template/background_computer_coffee.jpg b/htdocs/install/doctemplates/websites/template/medias/image/template/background_computer_coffee.jpg deleted file mode 100644 index 0a4c8828a585c72cb1df00e127aea7d026c842a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 385205 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

~`SyFD3+-3IZ(2QuL@ozI~N=*p2 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%0DHvB~0NfFfyTSIAyKD;|F`BX?e-Zxx2H^c7;QoX3 z9SB3*9y%qOnRN>%o>Zj73mQqw4BHxfOv>N5yD0jX3I}1qINrqn0In`kN$`s(fes0W zU!4e?4IMQMOHVGyf)-U<-UWuHjVigCuRP))GEd$$RdIXEo&q}Y9Vnhs!+l&g7g1nv%ixtvo#i^S1u0j&EN}NYcaY{G z0gR__j$o-icpga1DhkyxR{sELK~~zLRMu}@<_8T3@#QWVu%&jLv(NBBuDmmFv6?%~ za_6xM$=+pv3uF0~D0VT!TF0LscvQ^c7%|BdR&sO0D4|UghVuzgL4OF7SBX4MHJtOA zk)7%a3YUy=9Or3xqT(vU72uhU#hsaS0aGiYGP}z&0(R5hFDlOC+<;X-B+43?ivW|G zjqd|vF3raW2dTVraRE}E(U~FlD*>l-%(DvAbr80Sv`Vqn5o2Ow=~vNzt8(SRgVX2r z2t%Oun~2K%bPq9R?jk9al#I-I?lGx`SKe@-tGhu#h_KJ~Dz|F*l`YvtH&Kej=8zWy z*omheS&E9<;vA9kM`6X=na?Hcl?n1*;ltM6q3V;98B8L7f?%5l9ie84b}M|sJHaRq z3x?Ql7i2QCz5OC1NuT~H4u?bZh)y#IP0e-B9Y5^B=6&GjaIJQm%5?k7_ZK~V^uH5V z(R|9IerIJ(`;_ZNFpOJr`@=VLI3n}@ScI#c$3-5PYbUW;DGd$M z{{Ym+6zBby9;a;B=Jspm zcrJDT*USx-LV8O;w88m-gHBFiB}H!&Eo^4AzcE>Yy+f4;evpT4eUk&U17mKbYxvg& zg6H7^Rq7`WQ$2L8w5(>LTmo9^llI6 z`<&NNm)FGkoaT9-9X<5FnR7j-%&Bw34BjQ;x?fC7CCiKc;x46Vi3O^Ws3d3N1Y2Nl zh^?hQ32TM-g$24|1lxN`Z>ouxix;>KP0N=ED8O*WTbR<*kjf*3qQk-+N((t%#(Dk; zkB68gnB#(D1iXxQvG2(^=zz}VR@yO$)kWwSp5ExP9}!+IJk%)B0a3yghH^LXCBxrv zP%@ZEMT6#8)9chW6C{1d$uWIIL`c^%#2dL_sW6qyM(PXRMq@j{;tg?WQKK?t^A1QV zOQg`Lk_L3t2E)XtrkTSj?pfXtEXy_1G#`_^w{=y!hEeBedtswZg8ut%sg5tVX} zuD`_^ht}h%)P-<#KL}HZ>NrG?mQcgY5fsiyOwY_4DSS*-o>&ZoHjL4K7ZbBRQsPj+ zy0lqGkA`E;FWyp8hw~^4mORdY?W|^P6->_@(BcgiuNVFxuBIQWK+W4LknHAWl`~r= zOWw+4!~Q=XrZ9TkzK28T_c45Q9@F#m8=o@oT7 z6bj~EL9+}tMlJ3bAW8&n-oYXE8CV^Bn&GgG+BRx>a`h{{YXT z{(((LZql$=r-IyY#Bgt#Vs=j__>bz06RGr{P9BGOlXBXeO=ey09$|^IrUDtC#C)>r zGl{-phZ5FUZW+u21m-5^f;*5rz&$a~GKF^K7&O2VEzP7FRN!});jfu>wqYL0X?}wU z7%{m*7FTF(6W!btO}@zRow$#_^8<#SetSz}3w7o=ApR2Frx3LU_=hP^<`7!_#-@?G z(fdwzU^s$EkHe^-@yv-fxo}Zzm?6>{{Tk6$uHuyhe~FdB;vzJa`sdMKQ}vKR1NGt%b5Lqs&v5mL#65J+LwJMQ9wqZ} zk94@Xl%2#7sn~v`G#03B?HcUKEyExVV`A9TY^X(zRpo`J5XKCD>^2kTI3c|i2N5~? zMl>g5fX_-;{7)X|4TFK{iX36l+E?ZWXz>0nB5?Smf#MydVp?g#f%%3Aqc1T~qnw+r zVA@)$j`8!&Uy~bqIaSOPVT@yN>VaZtUb6P2qs(Shua}$+M77|jsX`h{Aq)%;l*qE^ z&i*WKm~PQnq~U`rUe^Vy4oPxWXE^&p+&(#lmz1EVvn>VVVAIk$A1aJeuF$vnS>XQX zu^ep{v*;qPGXDTtzsDSXCr?x66NzxXg9*lYoPRSe_~>F^d|b)t^T@#Yi$~KrRW{c9lQJTSleT3q#zJCxiTjrr5PKR(;{{THlHxpQiu=1!EF;+)ax1q{%5$v8&Z4sf0izR?9 zi}oMtP%MUZX-to@Oj{l`2X%V)3=O*r1yFKV<5J9&aw53|FhEH&8y<^y$VqCvu;$>a1 z^8+_xSz$X|Qi?+HLEDtxH+4LU3W^MTOk&kHOPY6@8hsDZf1_XGzMJV?4)B%GW?_7B zJkK-C_$pqZ!9Oz^%2Zp_xXWOWVcJmJ6%xz5yD-ILHz?|!T|sYWGlI15Xr4o75YjWt z#9+uCVM_4xE+mzlO969xX1zWMM?9b5Hu$3WIQ)L z<{j*>F)=Yc<4$7=i%WXbDpqAiz)LaH8|N%A{{Xm=U_0?LauAyXGToVH$}rxy0-gwE zW?-{COeQxt2gEk{Yb!iR*Y+VHuG~Ju`+)m$M8ZGeHFS6)yZN0}6qPfcd%}lt{L9O- z<^KRFZE0Bp$nyt8DzaW<8#wSjV@w`%XME`~7o)BM3rUPy*?@3T#rm)N%+ZA@E`?&e z@jc30#PT<9-d+WdcnybESn`1P4VRa<=4A<3a~38WAV+m$N5c&zA1Pbjb)7QyMcQ*$ z%;Z5KTAcG6P&HEw$KqgB8?*3=qW!94`3&lBs%jy>GYDQWqOP#t-eA}N02^q1C(=G= z8=0&8_1lS0E%<|vbHwMSvo-2rGJauAQ8#LcvR+t5G&4q!gUt~VUKVrTOXzCU2Y0$1ClgQa+nT~^*M3) zf-pj8W+sQ(h+Dk#5!*cHlH3jmo{oyqZho_(RLmHfZsGcG(`>Z2ewC%A<>mUm>Z4o#TGA$IPLGcU1!!u&GH;rvhk00-mgHx-cjN$an!i&JpuF>x-; z%i|LJ%an)V+v4tn??=5&PFO%fPC7Ru(_VF@fR-diDg^XVwOBP z(8P*$mC??ICd(Y!d!qNj;NvC`%Je0>x!yWIZ( z_*m&up$HPD$R1($3g&5VaVSu&+c8+BY19`(A$&_#=forrHLU!~Or``+ zu>R-$0Ue=&!-x1IjI+L>7w|imX?JmOer4qt3_vQNV0g<9^#BNn>G~{~yWSi9pmzBx zj+I{sLw?1}SJxFuxVnbj6s}6WKpF;(7cqxro#r?!IKj-=Xx9G#qbrp- z>910wX4VS@r{REsW4Cf3DKX*!;CoEV`67!h!PzY>4->kwgEH1L0aWDKE4)LrLi+pU z@{m*h75x?ZFG~7#`iXvE{RF<>nR}?`r_8rgd(^up7^{PuoSP~X=2>#W53iY~p<-UI zu`dKe&fp*l?}&C??4)bmaRv`|4=|Wi_s61Kw;T{7E9RPDiCvHJ5Ck6nKCAx#16d)b}_3D7@2Q!{73GGymAf$0$(C3CO_=JGGV%5#dq!7#JN@N ztdJd(W>bKB{*!Sv@QbMdm1VL`Te*-oJD+Gqt28-!yv2$PqX>|^Nj(W6<8vHlrC zqrF{Bj$phyp}=3v#;=54&*emA{7}OI?&5_%c!|%3zqFzd_I=~uryVHo1lp>U2S~P2 zspL;F+XE{90L3z*HH37g1Tf((N_ZuvAtTHPVrh}PI>Z51yBzkG4(|T<5We*u?>`f6 z?!$%e6|ZNO=IL5@KqP3*R>;w&MM`OhH(X0y@m+VAxj!x#4UHczIsr6rW-7SZ(F%?c z2M@f>TD_60!n{sGiN;0VV%)ctq3#g?qSgNZ;|z3uv6n9pdR)IV<`*xtJ23J~oMv51 z?Ks>QDzYXadtaI0mf_5^OT;U#BNkBFMUKJZDJ?kMwR^;-JFrOYIT+|o>^1HfWO-}+ zJ#Zb?FT#+>s6U_b)Q!x@ZQ^-zx%voaXzlI;{6C-5^!*hpp>BpvK4L(P#7i2e==s$1 zQkDMzqw@!2sr*eq!V^Of`$BgoX<>lx69GkV0L-LXY~p{~>U2|`!SVVh=9r5&*71TV z(H-w`l!iE{&1-foLaGL8*}zm1>QKm)=2v)1hvkWl4%dAvGNqdbCwK*4g^6B+TDJTRbuNXWd};mp95m$ynGt-dIw`S(kUIgHED%36T(Wb`8WOa+_(b#bp{f zZeUPRciI(|-(zj`O@6&l{d3d9b)UT+1vC`o=m&CXi5hFa!!f?TOso=cA z(}0CBsBK*hU7kBjh)x{pXJxUBguH{6o6Yf3?!-623#Rseg&Tlms6QxS^W4A9NaNxQ zc(K|O>cw-^rqz@B6#lo5(8=`!#8QJBq~4CcbSIEc@~uiD{{ScLuf!0n8sMA$E1PrH zrN#Whce0} zWt348Ye1_qMTMdA%I*K1|@W#q7mX8XR!^E9Bd7rCoZ+po9yb#K^h*B#9qY!zO}8^IAB{nB2%eGaaq_MGJ0EMz`Kzr+ZL=_k3qza0SPiKKN6$Q|P_;XA^ekg)Ef z%1&s+G_Emdmonz%LfZEj(XwI86z^1i@|j&KEeqJVLqy`8gp<}_NpoP?D`m5qnHWd0Dg|z>5Dm!FHooU0?=(>}Pw zd4`c)c=~P2)7-edPJ>yNZWPKh1si6V#hgmD5kE_xuKu1sO8$~_E5=|!T6#z%2=VnD+z%MHv0ba@Y3-a_-SF2G#w4 zb8$aMGN6NXAM-qC<&1J*{{SNg<{}GuKb#+EH4mY<-GuiGB$)e>lYgJ8q&cDr%I^{d zy=?YI<<`Kr72aP~rwBO*+Ro{smaFeOb4tSbEvv|O*DyB(yjiy3g#^AJ;j0ZUmG8&i zQ`vUU?E%@xu_>HtRwklgKEdCmM1kTERr2xnyhnYsANLOl{!oI2^O?*KGO>C!m*-N8 z-@n`dWZmD~)lSdyOI@>ayUOfDclMUdeDGlS_9C#;Q~v;eQ?ZnK@SIGN_PMxf_|i2} z%@&I}c_;knIF;nw;uD})?98vna_BXz+{%b)FR!0I0<-gG3fm`66XBTd9eK%H@kT&HP2!tNX>P zP@iT_B35ZOdVzANT0-CW1gTvstxUrDA3T@&3}2CdFk|f1l z722l1f$Ay3p+ZY^f=(>L;^D1RCBCjwbYtR%TYJQCfyBpp&$N|^m~*F!UjaKtn56*?GOSU0FB!}*TyGQm>tAG|sl zFeselaRNXr+wO%BEz&Sv78U!F#bxCbO1zdo#K~L4!t7vjEve_w{{SI@ZPYoqIiP$? z^EteDlqq=PR?7A4*O9b|%syDi53>G95p#iX`BJeg)1PT&2aZWtC!Fe3$1_{JZ3|`I zN%nJ91g3Xi?pp_h{nNyU@}4Gi1$HLbt@Dk*Emp5~_Isn|Uy>}|d!-;Qrz6}hWaMIa zi4rKfos3NirAl=wR%N3PB=~4{l>(VFNxvFj!Yr_o;FjaOaiPb=KwI40E|z!6mwH_rF8iE37K6VuHn?ED+2Wfm|K%mK?d4b z+ll6ECJ2JqFhbjHw25E$L_v{UlMr@JT0 z!TFTKepUSA@dzoWm|^Mx2BEWi7k(3&#>bSPood#6Pjhowp5_hGVwu=5hCguEybTbL z4=-uHzS5UBmw58|A8uzNfCPJmN+QJt%GY|W#6;EE72D`isCWb%7MlhSmL`kC)}!z~ zhaN@5XP#7vY3=U9{{Rx9XNv^dYhdT|FK@uWgC-5DPs~l(9Dee?@0J6~%4PBh!ZD-5 zTkWa7mr~H%i!OwztTS>RP9Op1p>_Gp-1ppl6)IE?f-D1-P((uQ#rvNe2NJbZIl41l z5f~Jr#tUua_IP;psQiB=Q+PvE!)LbUUD$a3$%V520OoFIfjzX#k@7x zXofXIz!^+2+far|?TEAy$`OwwGFL$6^$RQ&iAU1-mo8jem-G_l!Va7r;oT`Q$q>|} zJL3c}IEsJdQ&ATMPf1wEL?s=jK9v1ZdFpzDkKTMuH43}?%Qpe@?i@W_e=y{vv3<={{X=5Kcdf%sOz#y;d|m=U|;c&%s(9&Ine+d z&4SU89+KdhS`_h^atym+QT)sS%c^3tW&Z#QrMt>Czy5;=JKjV0M9=s%yh=bg1GlIU zyMzR);F;(E^z93yj`H%TW|VgR&?&>4CpmjuuUpz%j&Vk&2*b-XZ-uO*UBrB~HOX^W zgsK7PpE1>xWgv>zxk+sgXOD~A9OUx=CtYVTR^BcpbgSNd&11I^>u62;*D#wcD}s9F zR{_A$mO=#sUYWkPutrSvWpOGp0le`lsJu`#Xc`O?=2tAtq2(?)=;a0zkY{%*+8*D$ zw;hF8bKyjn{z~L*-VTD>y zaz&z;VBy8tbo@o21vnz&NcK^@h(S-ME1FhyA}lXcnyb=$w%yT-wJuIQsBk_IK< z72HZR(falD?Qz<7j`fuy-bjj`KgJ9k&J=UnW~r6zPS-1*1_sD01|eG|e8%se@B#|z z8a}xH04w}WC-3}^=_rsIjCIX;DmTDRT8>@9bypbl1xD&*+*)4PiH;K17`~TH!T_n} zHfTGVsoSj=eqg1+D?i-uZrg!z$6`6l`IgUf;`%o$28t{8V}8uD>^O)9ye(lOLe49M zhG{v-_;ggO+$Q~tFBW^Ea#1$gC^kxqkxy%ekS^S>DS{L1&j6+_q7Dt^s^||fK2!qk+5Z64xTS3z%F=hmkc}h0Sk3kl z;df!h=j{;IFezU?XLg*Q#4Np(-|$K&{gf`f%#$6Xwl(t*te>2;=xH`202?p-2dP5? z15j54zux<}Ep0=1fq>Fy{{YyOA<9-sYe|W2C7~yB?2Vki5jw~K!v6rcE{k1zAUj#2 z-94sDp>InPzMGfyvicuD%cvuw`WK*{-XqX zF*tMa-WXoZ$F$I@igpL7ttGC9{Baz<%#pHiPr7jqwsVKKnV={hn)oP|!#FB_{V8vg z?S9gd1A$%uCvIo#WA6>MxmyX6Q|~Q<@f#DGZP=b}FYwwLo^S;)zRVDT(@5@GRH)FY zXD}s7c!Ann7Y+v4b8M#{!X`f0aLmqEYG-U1?G>PzK;z3D`Q+E#zuH!F#UJKV9+fdF zRm{wbj#inSE1HQk{{Z!~9221{!)OU{{Y@+;}Z}8E9ZzE z-=2c=Gs`LxrT+IZt9sC4S*+6<{h=h&w@^pIL$^bF=(mJ%IWM=IZjSXl(~wMAR_$@> z5i#WCmD4obdv0IIvX}nMGgZw^a#X2=F$YUcS@3)Nl^~q(^$EJ37ZWmGj`1y?##!ou zHTI7o&RczA2qQ1~so^q^{Cy6kO-DEd4$pn#iySlw+Kf{NmfYi1tgh~4NnI3~zX`S$ z^`hGIu~94F2G?^FGeJC;1bH38vdyD=^aP%0AXb&9{p#9*sl2U{qDt{A5wN=NZTO1| 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�?gZ25@FYb1Pr8 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

%J#28k0#xPgXp34$4h9B7m$ z$Xi%rswRA$`5H%4Q{gfoO?Vav3$*r;rWSF=mE1hot8-5ip)Ep77&dMZ5P8JHH?Y8j zd56+B$ zNsV#G`l62j&G;(`n}Bt33ovm*=u+8i`I=#qMwp$QNU z&;UZ?Od{zv%Arod zpaNMEKnnw(Sa-OgGn9LT86X^i&P|fZhL}1mB5ROQ5Iw{~n($ru)Nq-qu)xI}O6yFG zg?JdU!{(|DKOvT58etUdf&>E>IuF3s5r#auiv1WQMR>BKBp~%_pg}Mh z9TAgfNp;u{bBF}^K)dQfCMJg)sMQ5trx zD3S&gq0k`NH-Krjj9b+~jIa$&4NRcRAv1)HxYjtr@@-~l1owP}`zY4|h#BUpEzm-x zHwUW7w*|muYaO`@)gm~9E`-gF@HO;e0W3v#T+3V{0qGp75rm1Uz#<4J!m~LMNpLVn zcZ*@gbjZ^o6EuX1TXfVpDZ*4ls39E+H6k5m0-5_3K?1aUxP>9EObvU;Asi|;E97aM zG;UaAx}Yj;1h}eT4+ILR2#C-HfT|_}o0Bak9G`~8Aqvi@1VxfYXwjPkWMFS-@z7>) z8#ta#COp(RCI_dCKx2W8UgTklTy79t5&@z_SP%uy3VJb^MudpD85wU?5k6qi5y%er z0ElEYTrg~wJHcER5T$~T!U*Q$k;Xs?*PcSY4SboYM+}lZXtagtiohXL15e>A%-0E% z9O@_$AyjMJ1ST=nLQ|~BPy&S+7*VW8Ofxa17Be70XQnM9P<0lfT%J5cBMTuiC^cOM zv1skvkrpI;3>zlRm2Mk02NO^YLD(h?GoU;deaUwL3)&P|f;0|#07nWc2?I_79K;+7 zG)R!K8U!?E01B9xC{ThH3Xs zap5wP1dyS{)VZfIAoz|nM7}`|p}PlNaxesGSP=#>6^Vek&H|T(03qq8?{XB%Q(-{Mc}N^oWf#INIKwv}$nFt70W7jv2z-YF$H%a_1Y2MrXseNS1~$u= zf}<+Xu_yqAC?jz*sRAoDH}rp|F0cerHg&*CZlu62M2W;9lSpHMLwKsXU_#_D0-7w5 zi|8BbvbzUeHcSwtFcntY5r&%ZZSKPm7j6sErAx5dQ+Q}g9D*}C`Pgrffu;^_xu?lf zwRq?Va^yvz34|3A3?UrY>^V%erFOCyga^btMM!C`Wb45SOe5yd;ou+I+=Nk%+~8q9 z%tvH!%w?o=(!q_S5Emd!(vu}}giM7@g@YJ@A*Ki$ECQ6TGjgzqLOG3uA(SaFPp8n~ zpb9cr30zVgS)w8-4IN<%^OXoUoiIWMu61;T7OpxR%zcad;17Rby8^o?(3$Uw$P0+R z65J$aXz-ar9iP}Hn+BKx9r!4uK#P=s3|1PRT~b7Ko`D(4G<{ZHf&T;U}M^eEFS1!&T#D$ z!M#8_6A|vB9BFd!L~4LCVWx$Qc*Gfj@xXYinlNCC6ERR{CYVbh9PNA?!4ZxS>o)nI z4Q@KA4i9Y}>I5dp)X?BRFomZ{nW2qSHX>-jx&qsIs4y@`-_R0Lox(#`^6^N({7@I< zvcQ33cq#%U=rD*?VLtj=%+$Dis$dUn7+d~!pV#4lMa`JPn;a#N%E2yb4+Nrph$!kR}ma+w4jk=I3X76P=Pc(ol69l0~zBHSn?Lu85Z~PNMWdjMXD{N zE;wm3utfy0G*B=h0^NP00If9+=F&aj5CZ|z;(;v0Hv<7D(4dY~T{>gf1e_4Ft#jW& zf6&*d7RM_GONH$$Ycxpif zT1zKA=@|EQ0<7s!XyFtnD)A|hmSSRgL<08|j_feQ;1d#qM{Z}iF>**Ek-T~ z2-W6r&(jDSJckE5!IJ<32_`o8TzG{l%#7S-VxGa@;YbbONYmFbBm|=Z_;2&jg&XpO z3IGN+0aHq_1fc{nE%+ut615>h(V3h;OuHh2NLVo3)B(<=s~9lp1`Awi0(6lBZ^^S6 zdXa?-Qe8;q29W_Mn@EvtO)yu;bGfNYwx}YP%Rq5z!qXW{^L6GaoMabS0+OoDLLyU< z;UWuF<8V*aD1?UyLJ__WOy-kNb)*bf<~tmANnJKG@RabBd3K})@c`T`ZaCyy1a9aa zf(B@#qb5z3-4#xnfE8iHI@o1`wkzPC^h5{4h+P(XNe2w@(GU$Yr6>YTDuKjsZ z`|!|`QSWamakA7O!w%NHn$R-w-K%YnEnnBE=ab_(`*(SgcI5Ttlm6_&!fE#uq!ev~rtS+h27p)?~`I{BM6+>uF;1+&}!8Ci{<8Y-v2mHFB-PCLNvWZVqo4GzJUOWI>EXva3aYnqreu2Z#NQp2y6mTo*;gNbr(({{wbs4*WKlI|Sk*&6 zPsp+R#~kx!ZI4daGj8UKW6_hsHF3*kUrH?d_O#T(iE8B+hk^!`r>w2pb48A|zfT%- zt^c~5E2AzQY7x^aHu`dfGjHLybL}p;u+y2e2@RjTd-?~~`^4+6vrauK!7tVykkn?* zh&Gjn-^($>F5GmKhTjI9`MtM}94oPCaOPtTHKXO^Hfe&A>h>}9DrQ*xdy|n5KWjZU zHAAk8S?BIcKcMc`@sA#^d~xUZv~&Fd`>Op>*t&gVM4J9pvTRPrRwS32pI9gTJJcgieR*YYC?#FU-7SuV?Y*BKpwwa?Q)txl!&ys&WDLbR`-g95aT|T?G zNRNIGwhw!rsdc&dq9=McYmjU1Uk8h|p!zu~rbK(@)L~gJ7tPzI(E9#8cGj$w>ExLW zt46Uh7ZYf?o9UnnU}>ri?4dI_^FAFVkg~B{WxYN{y$pNr2qbKude3%icr8S_s3j1S*?R;Fn9bIgXMT~l7{{j*fleD~rve$irJ z$*0M`JS={qRoSaNU&=NkulDxZT19v6X*6_j=DwBEzO4Q3 z-nu1@&VQOvXV9{`6~2s(F1P)4$Eo}BdUbAo+&%5>ia#xUPyU^cb_Z{K5%)TLoT5+s zG@<6Doq(a6Mx9th$(ojob)QDMdcZn z*R^=|?ZodVxB8^l%I801&v?==~FMZ%*#|p8@C*r0?=P$b<*U_PaCe`k?^gzDjO^X%#?)l*ZR5nlCsz$BM=|x{m zD{(G$*sh@&TeavFTdvd4)E1WuO!&1uZ*jiQoUWJo$AxlLyxD5SgQ}Nz&zSe3`q)M# zw}iQJG|j(dX5P)KQaiPpHKEFjnpL`X_;AdWZh7*ZGip?yBLSov3`>OVOck#jfNrjf3>OHL9A?g+N zFs0?zt(Qk_eZHgE$o7BJp$GBhyVm$@+T~GGKD;-&L%Gtyk~Kw=x^_K8?dFa;7rWNa zaV(`-kB%3stUZ3PLC?4fyG}NE61TQ}R7qBS*}AaQ;H;&yHa+lk;<&x%pU&F8Cn>}2 z9;aUa+W&1fp?v9=pA>C6xKH&h{o_&_*P2%A)a95{!v?mBsqtOH*kRSolR2Wgt~~q2 zPg=dc=?)cWS$D)Ixo4YmyY4j>>`i;E?1>RIQoitWoh_A^`|AUL{M4s>rhSF`Tf=5p z_h?A%3vE_bD1LBM_oy-{sacHTs}onWoR+s|rzP(;t1+`#2Wq?S(7;}R}37HvOE6S-()8IP46c! zOaA1_nd}d5lq*=Gm?dZ{+W0z;yIVkq6sTsGdiD_OXmG|5>ZQtiTQVNzG z+`dflGhdY}*tbBxJomC}OnrO$uvwWFemQFU?H*6kPMdpAJ)G{V$9|@fO9s97UE1kK z>ul`s2IQeeJ=efH!dDQmA^5Q## zV0ra(^%qutwQS#tI=h#g{&~i44;tM``qb~StzE6k7Y`Y2;sz&MeOo5rkE}MiytH|q zggUoVs~+pPdE}zmw=1{nm)K`X;mx-j54c$+od+(CH`o*HEXU`OG z)b81=^EF~mG*CtyuT!hVh4bkP{xGRVztsG9{bQpFZ24wMGb>}pMN69Y*s+A4eKuxU z1a z*K9Uu^yG}2PS1Td=e=fY&YhY3{Q9VQPx8M=X_46VQk$v+GgZHM`-Aes?v>qGY|hB` z-OlV^x~ta3*;(_B8Es`BTC99x_M7w&yIh|?KtK}K1TrAkx=y9+cH90hX)Tun%cgJjtPbra- z>2C6{shC_B~1V)b34A_LxyO@1s25SDCW^e4*L*Dvgg{mAJF9 zwx@K7_mZOTR*$_~b5s50S&~-Nt3R~7eyw_^#2WtcxD@UCvC+xPYO0IwUwBeB#;K7t z*Y$_>E}K&;W@}sGV7L5b_up*QzuY$i4m8!Koo@ZpuO%wddG86UTW9oFhhL{@-81cj zhusIvNF20fWr45eM7OV34}YWVK=0B$^9+5s_{GSwFKcA(`|<19>$8rE%GqRXjgRUc zZ1CChv-6%;KKJ9JhdZvEzI0$~>b*w?dsVBk?@987=2yE_NzV6e)r*50eso}1w@SrQ zqq^@|Gz8zF=eIV0?j2mzZ+62Zy>qSJmrCzzQ6jEDou_M0*hQ;uX}5QE*5cl+9^UO= zf67T)hcxMXE2-X~qtQ*)-Y@mb??cM3>=*Ml4U36ceJ5Y*UN6fHZCvq-VPl40xmoY_ z>z8}Ct|;6ld;jLA?--f7&Q4xie8crC@7QUFOkUUANa&cSpE;*jN{KFIQY*}wonaUM zXhEHHpHDuUeH1Sr-8p&D$<_Jemz~;tH|fHTeaXYySD9QUu}R-SucIpLiOYSI1_n<` z_ul@vRZ{lU)+tYl=1wi#GgHgz$(1|e_f!|nS~63xDqF2>i?2*^&m7seJ=$q}|th^=;W`>X-)Fh@MN{X_={#cPgdeyN!pA zO@8~(^)pfR*F8#Yy!~qL^4^R319Qf&uA9Q+v#ca>n|}-!Dve(LA+>waRw(lV{6nj9-wkA*(Uxt4U**u}w+Uzc#m@s9$CFynIP*KkJb$cb=m6z8_UU8RIVhvt0S#QuD0eJi@MD zt6htvx6^Jcaww%(`MN`n=b@I-6CZs$sZH&ixoWUexx3fye{s>MP4k9Vp8R_9^%~|c zJ>#za@MF^kC4Z$V_sy5DK0cK5xY8j$_ttEEi;YiuS*QMkvVZ;g`q;9>U6}{J9lgBI z{5o31vV6g%-F|@YBvk%U>>*d%~f! z)#sJEXWpOn`>gom^Q}TnZ{;~)?(dRoVxhmuQC7}h-zZ(>o9)IV)%k0Cr`Vz6$6kM! zx&G7b1!MGsHIFo{Qb)a>CT2o`52Eu-NIP+5)%1_b%xpTq%9}2!Uas4B`g(fhX6(2XG+48@Ml~&@j&EMarfYNnD z-F$P#cDeH7-t;rZba;90^XKhSmd*A*Jus)`)^~HJsNW|Rds(LasPF4F8`_~^bmgQS z3yb|;zF5vQsTBv8s5H0KoL0|2@BU}GZyyYp_Gw>Gm(qh@SmE+5An}-F3#L$=l=MikHmNyhN$W7n^RqKBND*&Bq!KIKA?D_Qag84~Q|x zU+?|t_9H6&`O1Fpm;Jr)v*|U@j{0s`<*8eeO8k-h|0p^Se>UH*kH=OsMr^I}qgD{A zD78n6+OdgIyLQ#6t%&_?OT?&Io7h{;pe0rtRK<#lik2#B1&`++$o+cdy6rUP_$qq2 zq+6)gW`nj~yMVhMil_TeiuJ^1dnWik`)w<*1;`}urMg1 z?cAfde0|0|Klccyv^ZB)T-!SuMbH;%&8i(^81WtUY&lObiDZAG>%#D}eZ=%tbpTK5 zjuIsqHb6;%{|%~=(IaY*TQM+V9+ zOW7BD6Vr0UXHE`%Xzv~zGxo8jt!tCj`pf+IiUZF#m#*+n^6OhQLaKZ<{Oa(}h`+13o;L=1We=i# zqh^35Iy0t@0+raj5VTk&)IU>L0kPIr*<`qK2gIWA6kp-e|D}QWJXrSmM|G0S?7{iq zeD_RsDcwD?TEtyc<~nko*kATAMnN)oJZREb{-~Eod|-|~_Vv4J94LPpEwl);s}{H1 z42-k@3K%Pzn4ffcJ-SmhtHkpAm@J)FpqAZH5cM#1_MLF(49jiMXm~DzEB4vc$2XiK zCTz48i{HJ$CN*X9A=M#oFf^hv_TVXn2dnE%PxUO+1N7!n8}t-8vGVf%LEp>?X0_cn z-Yv77DHhPzu#^Nf)+MjMK0A~zaW14ORz-JZrH(rnhG=gsG`;ryG6(6C_cVuMAwdam zjz#xC7$ew~T@+I#SzDX;S#8bBtu@oh_l_v1AB$<(Hp>jxfH*t3Ye3p(4q`|kN+@Gm zKBe3gB{1(8<5?sg9vw?%#WI|s8Xdn9rO>s=^1K&Q&wb8l9n2SKb-bu%M3}>V47&z! zmN{&l+ki9Izyt>uk?SxxZG#p~QUwiwotDiDNEE7&DaaVPDXz`fKybCBI8@gIbzIVPyYrQY` zpN8X8t?q|5i5=@a)p286-E>7?;5~kaRCF$9#X)rLok%Ht1^VyyuKNr<7APf{rlj?%80Vgy zvu_?1_(+?-B}nXsUITJ&@;O-?CgVSG?l3=gzwb$g9FrW0%>lo<7}H`rC0feE&e;!c z)^I;1a*YOmX12OftBgI^dLSHUIei!BHc<2Re8n+gngQe@TgIgWWU<#QNM)iW7Qx|8od=iTpEa;uei;0~~;qoB7hz z#5mkY+3ttZ>rq|ezx{yp3)j@$Q+@lhkDxrW%hq#9 zW^ms~c1k@;MP{L6(n0MdcTlNGIiP(Kvhv!8)*L5e5K%Qyku(eM^Tl;0;N8R)XUoIF z10@o$)wP8=&zqk;J+XNafH9V~l6bwW-Rr53-<;%9!rT5_5?|&u#4Ap96I@WoaQ1l# zyF8lts#{QSt=bU9${BXK7!F>LmNQ7ZClP<+pC+n!k51iB@w+w@=+lVqo8ePmdlgGT zZvG!G;=f~BvJ^|W&(A@NKFk9w2*)`gR$Yjr-B&^TP-5VU+*`5LOsy(F9~+TpA)M~) ze?Qc+Lw-dIV^PkQ5kw9S@1x0jJKoj%_-bJ`ImyOIzbUEu3GA^1on}$ zk5!#D3vomB_T>F-QOt6YQH}~R1~vNF&?K`^1*;R}0P8&3uk}be#loW-YW2VcdSmBm ztWceaczThuGIgl(=631suFpW39qAhI{@#ZUw{uY;BVpkaj;;3^crVa3pnWQ-R@ie5 z&Ty9ETSOGkJ~-N>neF{FBG4$4gp^VD7otEtiDxv3{+r)}454JayBO3kE#Q*0x-mE) z&jW2YEnUwuVLxH>NO23&iFp!M(<$j&FZq{QL3GuMA%eQho!r6Eg|T9yWS+CCE7hT; zVE8Ol@^8$O)H<}qMvM3WT>MJNef(#T1Zz>Ngf*JIC?roSHFhA=`MKadCeqVkuSW!j z*2vadzR6wfV~T0x4w?x}t(;L984i*+V;?~fnb(O@O$)=;;;#Y2Cn-L{SVfoDprGQ} zP4hb@9QJhcQ*TkUR_G@6vd_jWOr>nYIh1Ju8EtP@T_(?~{~@m42(wmS=r!oCEC{>n zr$RWfC7*fxv9(-M{ucAj6y#2!7bS`RqevefYbJNPy`C3LKBXRr(Z|Wuc=?zA87O;e z6(D|z9)+l2>uS+cFr*lcOa5Y_DSiwyR1`gH7Wc%qi{8S%awm+Ww?uvoz)p@oGk!>v zAF?0Ix_6~mSEKoGKj^C#Px-Sc?d}G{f`E_!v7x^>O2vO#cIW;OiJJWzO`xN4&Nu&a zp<((XwrL-@%9Z=!S)y!yw)Y2Wo}_`SD_zm?yr*wp_)7_JmyBAjtRv#b9S z4;AiJkooU|#SHzV4FVK}sn7Zaot--ERRU@1+f(NEz+BrQ;yGsDg1@DfyYDA_47YKi;y?8gu@-$a>^2XI@S z2(FjFdO~tgs`12v_&s7pL5y+TVxV!aKWtqpiAR$$wL_GwPiHdXYLh_4unAPr-aX63 z!-DZrPD#S=o5S5&O?pSb*8rHtNj%@gsJ?&nmRwApMl7*=eD2m0v1g^`Z(=K&v@kE) z41rDzZL(A7ZoXQ5 zTr2`4PaBILbAtv?&RbTwx8^% zJh}75;oztfH>*5k@CeQiWZ`tkp^s(VGex2CXY!x_@djFrfd7b*L2N= z))36#r=c3B-`Lizp4ji3{AdG-cPScZL%U2j_P*dfsb7$BWP^gOVr;*v;L2r1Pi80< z6yJ(NZE7KkA&@E{n=A32%s8jHuN%Tb32&DLv{sYhOy|V9c3PqT%B&p7O;vPaB=X#q z4zT3~GkA|=?DSrsrVVRtigOF$dudHMT=9yzvQdskY5<)kt(46DI@x&!INZ!oUZ>U& z5lc1%21{JP44w*P9#V}?wro4!c|n$om9kaDLw7QcgY1jZo?i-FQ)aeju~}D zM6MqoKws^ooWzkvxPKt=F;e|RGVG^NyzPFMX=7DRhFg^Wu=j3;9yj$a)t*Ytuk7Q- zHthp8j4k#{pT?(cZ0D>I zE?!wp2HS={aNtVb#Ppk+uo;_^&%@Y2SL@E{`VX;ui|Bv~2jZ>XD%>=|LBQ3>&1H9| zUv2n}H+bqNBF>y<&f8&o$3NyG{G2yoZC-+u!f_xfshAJF$fdRk+RkE;!%3Z;Q!g>7 z_ttrn2a6GTvX2?1k)T8J?`4#e76zP@VcHhKqN1?<>I`m_i#Zb)$L{o2$6TY?@8ru- zzl@9taKWXUsoz;f^UD*lVEa(%`}uq9;dz}{ovjhp`H%I`xR1ugDF>1!c#2GjoCKX^ zXOitobPKNgy}N1X{ZV|~&q9Kff8c`{2>dr|9jA#p1$@w5MXe9?_eAp3iJIfxJ|cfl z_Xe-ij0`1Vyjy4Gsgo-054)4%bbk`ZBuGK_v*k?|sXn;!yWw(+kyilQzkTP9xk9yU z@GX<0RxkDOS!rVKQEPs(_OXz1oUW9&ThzNxg6VTuapH!x&K=Uk<%5B;XyFRefwE0A z;$7zgafh)|10(4?qdlQ>&6U+n|3;SIriLCxf;W8}RYXo2k`^?2V4im|mZU0PR#R1I zFmp%t=O9|oYJ_t^RlxCuX0bYx+E9`BO{Jxr-Bmx9%R_XOWgkDrj(Py8=<5R|*B_1L z5fz$)#hW^Kp4U$@ddPOOYc06Nza5XobnZUu+%f#{VMq)N2H!+^{fKM8C;y+@Bwz3l z`z}xpTk5OlJxNW=W_^}iS5R-n1b6rz!&(u742uWb2l&zYsNOA7zy!+!1Ee7leHw9X zqb_dws8I3!LykiCfyWIF^3|?FPhBwv?&i&d*q$#w@MYf1sz>A9@1wt}XrVu~{#IPX z&}?(cSd-iZEkwPd|Dwq4^t1KI0_CQNWEOe;|0CFLHXbm%o@8eGUs=&DSFGK!Xh&sM zpNw%#cq~^U1hGi=wb_oyF(4ZlTDZghwgTgWNsBiC* zenhs8Am>^Uh671?jRVPE@zXrDCl;2C(as-kj%iz-iAktlhOyJ3 zWyYFlNud^za?`MRu;nz6mR3%5N7ru3B_G8UMQRKjv<@`5n(gL=x55>D-)CTzi!i_X z?CSzQo@eBS|3;3wHnr5@-PV|czG439NK?J>ZAa+qbk(YBQYjKd#zb$~l>CFfbX*dFrySmb2&yk(Io zofq0xn9lvI-lKaiCX76O)t#pLCq;LRb9F5aRq{xUrLI^_r&Ig8i`iKyu$NIwOqMd@ zkP5_Y{daWKQ5f~9&vLzrJ8cr9k{islAnJdpLP5Cu;wuMu&uuc#=Skp)%POlY3I_ZB z8O)KTYcd+u5qs2xjENkqWIi<#ydqibrGA&NsH)#z0my?QA z%n6OW2Atm47g<{$fZ3`RfW@VTB5-1MLkhJ~gFTlA(sey}(2JE#jBYvm49hrb>+5S| z%*Sb}?6uqOOb)yWDzp5$Z8ISfS=`5TymH8UcMM)|5^lR4-~3zRup@)fYd`_I&%HmD zN{RR&>1VbhgpJ$MT7g%=T?xKkn2PIfKKfuqoEI%`1wSDbF3iDJ}jm>MJs6WBeE3ktlCR-#JpN&E-QP<2|TRAR;)CDZax zsP?Oow7YT?ab~o;yOH)CQeuB~TcEOE5>HLxy$1Zu=$KNPMzkHcPZxDMKOKC`8UL!f zUE|E4_v$~22VuzSj5xHYGiK@8--$2;N$aR!%&lE_eW{T|-F8Qd3e)dzHZ{Mv0|uYh zfR3oG%<>G6V+>+QKnE6G?X7BhkM1x*e^_f}I=AAsp`A@5rX|0dAl@f1)fb~xG3wUDCg1*!cGh1t}C z^V=^KcSGQnH}!t6Hv_1~9jv&pQAyijIROm?>q!Ajt zPYh7v=h~h1s)%A~lJv|bQA}#;^=q`>Gr_sf4~E6%2jq&($FfAJzIBn z<{nARiAd$UXZ=;N9M2w_;UG=gd~#GUr?hvmCi^J6SO4pLE91lt@yLQL&yB}~V>yiMKKYINm(C8kc>{0=*}`qKBd{QX%H zgAK5IN_GxsCRzS{@=`Scrteo7B9E?{L|MaBw;c6rtcse0xfKs(Q0Oe;r{*=;KOmS{ z4}3u^CB^@ck)2#T?h1?2U*y)6n${B@xh9Aoe>SK8L2t|S1W}GC zI1Sk~wl#uME@@XJ%vMdFyv!u;htsl?z0w-1PhGr~`0=2)Z3-w?8E9RP;6C9BD;1rz ziyEeG^Sj8qWy?UJZHu#Pyb@xvf>Qv_vOP?GdDDp3=v@OKD78~txdlJ)D3fu6utLGb zj6B`qoRspaGeKgwk##Z$7dil;w>U?Ooa44 zgM#S!B1B1Ttn1v;n?98F8gTwI1*UJ1xLWUVbgt-kYg{&Mpn~5BxmqR-!E20%hQNiw zVCKSnB!f|dT^6Wa+BP<9?=C8>tI)q@;~ih&v9xlHq3}%&!(4e|he(XLTU=>oW{2zC z$;rug0|g=Xz?0EAi(gJ_JWdb0a*q^_J8$4mTK8JX|FJm?g7h$o7M%a{!gINsoS}ON zlweL%e_X|$EmNe6*h@byhRx$#G?WHt$ACeUnw$aYhq~PIQ>65ea!Y^XuG?O)?Z$sRlm=WiQnDEIL6#s z9#c1qx0&7Us`aWtFarz1Ja}?!KE3o7dk%^ciY?>(@8f9-(LHvpAQ=0kWXq}AAuVX& zb+_i1Kcj}^P+5YELDGBU^q-fdYO+u%3GI5(QI7_gNl)IvmGT^=p;DTNgcf=-0CEjT zUiCXtP_uS(VO+0m{U2Nf zy%WEI#Ib;U?s?i6GG%S`UNP%nJxum}4jCN`!?2Www(PU8yDSoCR3)bM|!_+}&LmtP%dDDP>` z6Bh99zItsD_)g_Cee(7bvv?wQ znFAhT`a~|?)oBF8RB2p&B*3V3Im>q^T>A#H%Jf|5_z?qI&z7_?u!IY^Z+L8+DFth2dpsNL<%Ql*ZMT-of8;&sFLgd`JO=vDB z0R7I;cq-&Lq)Luk`4}u84*!VZL6?ng4Pm7pmZO_`+IFkuG3JGDJFCH%R~Je}f? z<8h~PJIP%>kf+woreuCDFZ402#QVwvCOTq!LOPwn-#syH3PnWg%>zkyk~Y96rK&t7 z(c_TC4*fx{UxZf;QmQ3wXn#5%CEocKfUkUdSS$y5-lU1Sb;wGr`fq+&G}~@e9klFM zmP0)*5~(3Wb-R{-;y5}Y?URF-mypxst16? zWvtedrTYsmR_t@5LD(U%b8W@PLAtolnOlYxIW`M-6CrSjnTacl{XO7uj7Ig9*;w%6 zmqQb4>8r)mYrr4TqDl&qXwDj2U5e@c4)o|C#y;ebAH-hEz<<@mJ2f5nFXi&4yy&a9 zXrCP^UX3&g&pka~3W3Ael+SIB0xADJklk^*u!=Ff)D8|qj0T=1PRQabtl!nz#HM9=Hip(1WkbAY zU&Y!`L(2(t2`{J)W_G0Ljk$e(qd{I8z0wD~c=Fl7gIB4v`lWq`1R0fy7og_o!%S4z7njWxi9C5Y84u9SpjR#rk1NuAJ+j2nnjW6Wr zTg;0;>My7N$jK~*{I9yb9uyk!75L4z1u8=!tnk^et+kAa<3yAR7{c1pjkUThPyX9} zGVEepceP{zo}6EktR}aH7m-J~*rLOo{h9OZ;iqwSI)`#0ItJ2eo~c8jJfFT!0a1H+ ziJ0(8rQ8=|OSyqeNR=5@S*qJkwRi!k2T)+P_O$)&3Mz$HkKK!;&te6if*K5mU`a~` z_I1>K+C5L{r12)?aXcuMSFwwVe0iy2ubVp3GHbu|-lzU%RsmA{61Z3KghgLV;iK+1 zh;^<1MM|~|EG?I{6)PzVe6M3E$2Ii{bfg4f@!?uHjWfArQ{#El9oY3AH#sco|+IzqY!RdZ>8H0Q=u*FAx)&_?8J;xEGaDMG;`-TQwRnuqj$h$}(` ziw={1^npH4%juOHG}N8-U#QHRxVnI={~kbldeP&yD8^+;v);hh0y4Cw1t?*h?YF@G zi`Tnpv4}$?WDcufv<7)*YR7On)^%{eSa(Yw^d;x?F23x~y+0!Nr|Zo(GL_-hvLe0H*wQXR5D4sRoiTeGX zzsCyXcGrg$Xn9vhPfb?r{r5e>2l=>&h!k{2#GKA=OXeH(>#~O@|whDSw}b+ zXm`$3e5GBrGZk}avvHv@S({+>Pe7CN0O<3ZWqO^SwEuHuqb}RmD?5bjzwEuTB>yG8 zKQ7Nkw7~8pT^7@}4m#Y<(;-HBpIrM8j5pYyikH9xe%o@n1Piaz8o49S9m}}=PBFe}4_qN;WxPOK@RcVuAmX-FOo6 z?pd>z5Z>qpsrE(rm3@4kG4Y=E%IR+3BOLJ4zBw6`NME%wDlsE>S93m)y6L04`Ejhm zE3`)1A*cuKp#XW7(H(v+^dF+%EgdU=Nb$&>kB`71Z8H}7FX~XirqLFp%z}B9?)oc1XD_zvW-(1H}FvoB=>HEv8j&7eat!ij-lm% zQGjOGxsbc^(x?XXHPg41i2AXT_npQkMXmyb*QBTuHokhfN9_Xz@qy*f`;*n`6?t6+ zqocH=era?3mWaV=TT5lA`4O;pE^cB<3Fs*F=v8A?F;B+oOk2CPqx-yJ|5bd~#ASa{ z$Gm!wds<4`j50<{wo^t@?kHfgeY^fZc7&a>HCc9F4La)Q^b>VAa$ZkA&WbcxUR+#S z>3b9K&a+1zr>tn~KN@1^JlE&ivmA@aUNb*b1{8##=ji~pdpYGGp z+sl?X42o+UIC&Wk3wD~FYndTqk zTC90$rEc0*-Lvaq2zqG_?PhyLx$0gHes{OGnZ!N77$ka&gS9&x@uhu+NjQ(ZTMCfl zK@})ERbDWgz-RKR81YCEB^@@6ksryb@^e=qH>i`m6#Mh&S#OD`1dL3BO(KzQz~rUL zu;b-1851#fUAj~4uhdXN`NoXOSkNtwgj#1z%=@RX)+)TPKMe@dt&^q`$eek-Aq}0F{b8t^StFW zyr#d0eX2t1t{XtfN*_FZXCBtlrkGquoye0{@-mX;3|L zi$+#Xp6Db=-iMRCE%lY}O~U0z|I_(sK7JJU7fI9av>NlT=Nd4+cnzTMw!*fJ5iEmU zbOOQ=b#12^UzZrN3lil(iJ4+;8A}PjA(2rWg}Lx;D1m*(A(-Xsg4_1J%KJm1H6d7w zIWXtgfb8_m1-aUfpt%O5G6a}FPH7nsClq7p`hqLaMYHalK1}r7uQgN6L#d@48N@Av zE;A^{Asxh~_ybBX;Vf>5wFM#RJQQM#?4{~sBpt|pt8LF!ThX*mk{n$`_K1eBgvf>c zZFCeaIj~D{$n@q16|6U2U`+1%OygsdN5@M6+!1-yh(B*^g>)BSRD3uC%b7e=*X%KT zicaj#{HO^0s~&4z<>IR@rU0d+DzV&;`qcb^(5`iw?2p^#30lRgLJ3cqO*NDvn?E`0 z*44BQ)i~Qt!GN~?g$JP=)Se5@g~3?B$HmwED77J)RLdU{pT4SHmYsxYT<6j9aS4Pz5h+U+tK5nY4Mp3VMc0Sw66suF67#uR10cfn1^QB#kP!E+8YLx{j5coCEtA?W8+nx(1dFY)y>}nX{c{? zW(9ClC^4FIzxLq{&LM68izDk;eS~3`w$4G^-qK%hCsK|F#9q0rKQ7s$n0)v%Hqzb3 zhoMvjneO;`Fm22}F)Y&-+SCvT|03O9M?WilTpif*cy?tstB>wdf={ESh%R2_o*HXw z7hfF}wF#|gt8at@4CC<~idwv!`ED5?N{ZRJX^%bixCX?dOeNB;0aWkhq+U}7&k&x) zO7HUzx}!j7{LNSn<#@NgqTQGW=Rr-W*zY}4zsEfDAs+9=j&=4Q-n975aEDcj$W4tQNnVVVK#N6h+U@iu1ety?r z$?pK8De_0uKk{y4(SO=Ih3Nj5Nep z8XPFu3>`R;b+a_>$~A&l-e*I0m5#psMI{L=k7Vp|gzukc!-HB{2cZ{38UX$STpplSPnEv(Kp>2;VlC`WD{+qC8Wve`7d>{)mg z?!>z-CdL|0G2!|!Muzo+2-p(@3s-b`q!an)MX_CmjPxmQETWw3waOsL=zf<8mWk?u zb?(TIiRz=eW8aACR)s^wP6}@)-lW1pUh}4O1PqU|9~1sZ&D%K;6Q)~4=|c7jIDE*N znv*`jvfs9_)7MoGP5K&|BHb)?f9N_T1DG8zuPkc${d`Z}ZfUIWrx5McFG z!SNf{5uMh)A{1nP&Q!8VdSg{MP+1ZPCa-Yi!OUsv%hMwe2z2nwcPXKg4{C0?&QHza zxlVG;@P97V&Ty{R0QdA8iDFM^adv&Ie0wj}t{$z#0sV%S@!&U9N_~DY5o#W(7pkkA zHnUH~Qx(0{7m-ADyrO6Qd9}h^9s?wokD6e`RSNlJ^kH&8V|%3B5-^z0Sqwv-k(yIJ zIQqiPYd~*+gKZcyo9o{=A2@@EU}&T40raRT(=hU>^V9aA$uWH4gSDV+ML%0d(G0!V zi=te*;4t{Kh@A!b4WW;Q`gJmsStcOI8d^ovKA1>S#~0q{lMPgMHj#tT?wR9B{6Pti zkn&0M&w?$#yT8}y07RuACIegsWSUu)K4&4*IrhE1`vzZ#1@Zzb3l4#{ZJhAB&{wCa z^iCVEux2&Mpawq)?`))2id)I|6NV01uEqtgSX&38@KS9$t(%d?`@Vlw@_8f3Ehi@INwp`Bt$X z#;vZ^nM>B#uh!X?tzqYGHP4%l^uy6!qapCL-e>{I^55i>heZP5mTt^?>hXHs?8;gE za|e||9eN3cA~%hS5p6%g>g`MYUkdxd5s3Lc5uBo8p8QKb#$&1PdhsFLc09GRN~yXH zE6;sQK1U*MgjU1*eW6%SW^gpO$?wRGI4|{H@$s9XXfDP0k^H68l*gqVQ#n#wfTNy5ZYbC3;{B@xXb0kP);h|@Oh0KS%TW+8trL4DM znQnzPcyqUgKuCggjnPCLvlMN3t(rD%?%VdUcbj+@ySq>o{&?|OlvEY%w89-d zt&pg9TxYi>V|Ddj@afA|Vz<#OT2IsEJaVj8oyiKSa?oM`JtjFoK8s}`3V-Wa9n6^0 ztKZ8?a3hDs@)vZS0H>7ZSgyEwi{RE64L?wd34r;`F9ZgjqZ6QYTtZ7Mmge<=#D~(7 zTd!b9%ZYa|U1nH#x})`MVO~t-EzP*stmzc7vAoq}0>WQ0MuvFnJ8dk2^xgXX6`8ss z!WAr1;z`2crS?JYmQ*!G2_WEP)kw&<@8QJ69m9Y`i zhk7B@UBb-%K?T8P&8gJ*nmE6Exeg=W)=WnMY7iJ67IrMT5%+Z2VfYyBoi|>s%7*i5 zOmd6INRFTZX4@DZFln+oyzz?h8i0r0G2w*A4K2ypt5hd(G57h$bNvn>JojPI@-=*+ zA+KCtLb~f!{#znZU3RV8Lw^rSbW($p`G}3+0-Mnd3S>iW$25b{bErc}P6ZlvCnvC_ z3po`_Y<>bo(K3tZb|=zAYXlsj+y{kf3#-qoN|Ecj%sVT=%HcwS38_kgDK@P|)&(;k zp0`Vj9GoVdjzww2`Vwv3M4iin<|%*lsC`6p2R+DGG#7GLS`c1dlfXF!Ni~M$eU_H* z0>@|ZVlDr97}D~E&AYRM!mnJ?>&oB3mvlw@4(@|dz0UDVB;B6c#jd&h6Uq70%%ufM zJeX(~&Yf0wrwtW?kI4O~qd{{+s7l$rJPDc)n@Mr|yJwqoD6RCWAa`7H_3Bq^=0hUa z9Dz=KIISZ%@YAsHqsfLRI~yFs?puk8C(& zexgALI+l!MzlEuB}x6)R+k63GC z>&Yo}{x?_?aqenZGhOn>D!3+UT|UR{)X>UieuU|Acp=Rk^Q!B~zmPhM2v^$E`-{() zl5UXNIMMz4F$Z?N*MObv&7V29w>$#>M$IV5j)OOWj*On!c^N(Ttkz81silLCUz(D6 zK7R$5b?MHVDUzac4fNx0Rf!yWs)h`+)(L|U1?ctQWtg{(3R%G}$6!adP%&cU_BG(Y z+qb;Ce~VpFuaGpmv+HO%pPT#`SnKm&WTDXAs^>I&(|I*<(7i=3N0mPm6gSbH_tHiz zsXMz#4rJN9EXpyb%w=!lFQX;kXS)Z^ZhmS}i)}_n|DM7ONiy8UnhVcWjq1HM_&s%A z{gCI&NQtK3y9>O1l@z_o4$^M-quKT-d zN^Ci^KMU&KFvfXdaqY?PL_pk%$YfHGL;fCvBtvfBk2>tBEpF z7b9NDny+Tvm+5#n;>#a2lDx^SkEx3wf;hnZ$o{C?YUFcxv_8-|ryqP(L8vI{v&wUu z--Q$B62eB`apoULA4tnzy3G%Se`wp5{nd=C_NvX%F{xAVTC>SBrCm9V$+NfrGfOVr zF2~nO{UiO60i*iH2ALKNB>vYk_xm^56b}=l2#sHKdyi-x1GutW>JP{tz?3hvKW5jv zFxgm^3<5U!G=y>)e-X zgaaFV>Qx&IQ;d1$1Q@od0qZ_F=U#Se6laVW*yK(b zJZScWMPe2&a3h8aC<1RJY;jae3=PE8xgIC!1rBy*w#(j=?v>}?pYw3X1a5+Rfz?BLhw}^nfw=pJGHz+Ok43@~&c&YD@veTI`E47~*ALau%3nqSxD?TGjKK*`UvbtW2yYHdpTLZ!4!46ZJ!Ye1apJW|QL z2e^^|Djo8*9|L(NsR8qP_s72Ni6q0DGnA8y*2Om>qj(6G0t;@+n37t}PhK;#5=56u zOX{QidD?*wkCpu_C!#;ll(fFFXunY37ej^6;5zJXB%Ac*nyUFF>6#zs;Ha`|fFHoY z70oNXvjv&r`sS%8L%!%NUc*5u7ceYmN)b7MH8`$bo^^}K&IvMvx;@nhU@ zE*|XH|L0KgrpM|00x#4GG;AAWn4|nD!sS#`U0omb;#GbW9p8YbTD|@t$m>wCd0a+$ z+$<~jzKMO`a?#B+gq9+fw;GyL_)YWFTfSUDDiuQMaOKueh4$4oZ_3WLLaG46pXE&H zeepGjQfD;hqsm7tN2qAubxryUN?Ms%D<{$n@6qd+8`UxdLV-5nZg}ak4{9-#pG%D?KrjQ2?>mxUlM4;nL(Off3f|S`o@hC9 z?&lk5K1-z(Es5oB+?QRyperhVZaZ0;)Y8jL;11-<38idAZ+;48Xb-LCt!u+kp+I&8 zl3eU|n(u^xideuv8bNVRm;Q1?kEe>@tCJB-TN2KUhw6~qyo~B1S_ngfyDGrSA4wQ? z@r=6ortq{5OCz@KXg`|&4Ffjf{#wc1i|aV)jtdj@lWPCXKK`HO17&@Y_oqUSYo`rR zdm>^w)bjA(r3?x&Umm>v7JQ)<62@oo>1O@K3#1DQ=Y4yQmOJ;1u2hFl_I>e2-)Q~K zb3Q8CeLd~gO^^^@wod;F5^yA)cCW$ z7{WaeRS23wf?}8}gy)OR$}1Wy$4B+M*(42&4dAKH`fqfl<=3_ z&bsmA94dwo(cGaCVa&e{(F5d72G1ZbW_2@CU~nj@H|AEoJ)#2QOvALCDx&+=quqLu z8B|u>-O1QXf$x)jOMD73z+=e(=M_0-25k<9yTE+=K0DUG`oYC1?_eLq)@G$03=8D) ze2zNdH=9n{D+ChwCjBX88s2MkUcht8M{h`c)O&`zi7e_@ufmf*oV*8%`Y%G>m6}QY zB%5z=u@3PHiBP2zj_K;v3u;13+Z7@X91N3EYE#00R9rfV@F|rE4wkNIv&R;zeW>{$ zur_ea#iXUtzZK5FZ!h69WcH~e*Z+U68p*16_3y_Su-TwW;-()K@_paBBAgPZw<;2U z!r2{V$HYKBU8geE17FMqVtHC)))p8gEIDB-BZ;PiHrIfFZ?j2bY3^`*tr+P)ax$-w z#h|#@%1XMs`SDQo)mQP@u(Me9mS(dBtIx93Owxhi%{zwmsI3gJq4`m2u5h4a!_a1p zn}Ly(%V~Z+)PR1B`JGIux`9*n**^_2t|5)csM~U4;nnmw%I2Gix)pC*1C5#;$wE@h zrpK8F+7^N9IW*nyjcyt;JG6|FsDN)Dr+p4uDC6Yn>3H_JCNfvHi*O^!rBWFfjHkTs zyOfZpi}@s{!T!59tsv2Rz2ul^y&nIe)whV`VvAWN!oOCmR)H z@ug9uV&gnK1@;kksBg;mG)qnM^qkw9Dmau*2~nBu4O%%MpZ-r5fpV#Z*jN+e9YoJ^ zQFklA*r~H*VKgK-TDUNBVz-)Oi=@xgjhnN}&Tx~W&6!t}i-5DQ1hR^`z0_0x^ow0z zcX!Mw-U>)P>hmHzt0_Kx`^R0EifZVeMW(aSv&W9 zOR=^LqfLYSBTYEjTQw7la5X*;WNz$Q{e&Np$%lDV-|Dw?bM@WiJ~{Vda$r{u7v73nWqU-0?!XH zRyiz2Qd*mDqU&A+psoR(U>){B@2yGr1n=lrJ%US0AWZ5QKxR<>MUe9)q??vgmSObU z)$D!u#Dx4b_9!i3qT-hJfSNlMzLVy`+Uyv`&i?`OKn=gNsZ`+1qgYCHp1ifj5JrnVa}9C0atcdlYir-e(llpULwSu(m3=U)-3j7`d& z%esS_Vr&hPo5KTIk)Tl0HHgQnJlgTFF~1QBuTj4yk!PMu70 z7gKEBrZY~BOj>l9^EF?*yK>v^Z=HCJV=U6qT+5fMt4W_3W2Yf-TcKpI8kAhMkGxuG zBBU@utS^Xg1YbCoXvDNt%RhN^+#B`&8;@TMz}&3RGX|40lnX=6ZPyVO9+t+w93F2n z{P+=Vcb~;T98|`GSKE*EE~o)^uM}}DcEkmkKP}zkM0$Zl9)P}U>|9LZX03+$lzqxf zvs{=UTyZP zpLp4;9O?i7j~6Pl{b5fv3tn;bDy@sm2JHugFX=Z79=C442?Rt#+?7S0e)5PlC{VKk z(6hY7HbR`SD;{TQtvQH>A@49N=oK^KXT(MhCAACYU?q_Qd`k#;X{l&qGmnq_kZ{1R zW_`sxq^jK7YbN8IT)O5s(mxW;pxIy22q%a;t|Hw*e%OF)Skd3&E`0mkvJN==MIGbf zUHuwNak%AwwG89!{zb|;Weh>P`^wcHVso?3CuNiiqwO#(3knvDsHPH)buE*LK|IF{ z64!*8<|E8?3g%&$AXv;gAo!b2pp}*&C^Iq@_>TU%KzB}HcR3Oc7_BR~yiPDnJY1`3 zpAyMI1SfF|w@~anL3F^ktV$~zg7QshWZoj035Z}4wY)llv1Q=CVVY#%{{7;3G_j*Q zmjF*~w57*GO655q#h6~Zfkwv<+F-{pss$~_wQ4hPbq7Ye$l|M*HcP~pD?bwaTES}m z#cxqj>`f!n$pX@SoI`@ZuK9{xsv}IUqESs;S2amNa;l2*=Kj%A(~qWlmF>jS8J1q$ z?p}oXmg2wM7WG-IYFkxy#T)f;O^`RQn3h^f>ErPeW$W`Ca}vCf4&t{?vT4Q^D zWgb{8EY;t05%oN>$#o7s>EB??NwyuYt)uN}Mzd$r_?FXfp+w16jlEK$n7l+)muHmD0H}>{{UaiEL-n2S1Stw?8Gi9 zSMU1n1wi1$BM0GpL)ot%v|DNzr*SEzC1ZDUGS=X+OiF|=nT}!{X`3paz{WXX3d^%ljMgfv24Bj+0*OON`h^?rRX<;U z;qM`J>J7#2rx}9E48XUEP1`FME2v*T_*pFaWMJRYzS9Xf_?gtIVjHhBJl17f z@2OogsoYhdY9lCWvr*n6Jn#Ii{{Vqp&TX1-&U>CoeG=09{b%bfjczSvuA-{dv2%Nh zXC``z4kepw%(0GVw0+78KQKvr531B}e&c)X7(1GYKQFXvc^H80Ry>%{qZg=%mg$KE96?Ykc{dfX7slcL z0FGjFabDwWyKTld90-moDrGSfv3b-GTN*=hsBM%c@ZREF7Mz@r^blK4pD<*i>{j76~SY~x>U3Nka8Bq*1Lpid~#n3!ce02V2A<%L8_dWiyjB|`PwLvT?qh*xD0Q#+J{dYmX0 z)z)R$W9e6Si*6Ooz^$=r(YY;!0?PKM-c}cE-uFy)ejyS@;&z*Wg%NRHV4punP}lj< z7Mi#>Pk-T$AK(@AY^hz!Kk;|Dm6T|OaW%NNEQ+OxF3Xs#%=ny^KN0&P&7Ib!3TH4B z+@NA@T=fLnUyoA))qF}IoXbUZ^r!rPxc>mcjy{&0L0;+#+)>S(#j=nGE!&%cn8ji* zsc+t1Ze_$3>LZq+R~qZ--I2k4c={Wax|)|nNbl%x=sD^Y%mS`_SD3F3pf2H8sH}6u z0eY4hW^h2ZqGNwB2Fz3|mCq9;RmMtdo~5HJDfa^Qh8vp#RaeJRIfNWz8kEaH<*e#h zrY>(Yt+Cw+`^Lg00>9i|p~fPPaKkP5nTXkN1`qs&^AUHcd?k6`5~S0aK%gz9;f}4B z3cL5>D)_FJ%C6GF-%LdDfY~NC% z+-xKBP}=>bfsU@{2pnMma(enUdOSfz3N8aLahzRwdI#2ruf)s2P`WBuO@eOP+ zo)xUww{-~^?c2ZanVmK4wS18}Ub%U>lZY6v2-+$zk8m!NCLBU34JrOuD2^21#IV#V zoH=pUQ|&82r5s@XBKh=+Ww>wM%V@Z(xU0A6Z*rccg@o`*@`+I#{30K!DNdLmR}2)k z(yq4@D_6`g0#gtSsf+Ul*A_f8EoMbo&oFL6;L}EYLrYU>^Zou|YdTm<9mW{#%a7MG zlvNH_b;TFtnc}MsO#IC%m-CwH0a>ee?hH1i>we|%fX#d6V4MEP z2$n_UwDaSyFfecw6$SI=18u`{(%z*X<9V;DTuO$%o~1uPU(&OGLtpvPFcXi7eIHZY z@WzgVaq&3IuQ5&HqFzL=Bvq#n22F7ryDIP%DssyhIZDa*i&c*^A${f)#ZVE#mhLM3 z4?j!s{{WF({X81Kr53^gO~lY0aV?I;Ihrju_J{)yPM|D8B^oyt{{V;#2*rKp1^y$v z{R6Y<>*-etti)A35!lCnQ``VMxKjb-hV6A9vN$o_%Q=-kWu0Of+@p>mo;Cvk0FbT_tFp9d-%L2pX^$=Amw(4kHMHal_{Kcsg?GzSdV&c}{yzI*Q zi+j{-<~pjJFE327_=-b_6+MyQz2LWp(bJ zPH6Q4?bag^u1a|Ch}G1OLot{1+`p!ho zCR*hZ!SXdm(6jiD1=1U{!2>CrENM1i-;KcqFmj_$R~F<&ha1*m1u9!ljdkt{x!R<^ zf(Js~kT^&Nnpo+}sZLnsLaMv)h$9g|JMnN^7iE}tf}%pBSrx9bx%iny4OjHn8wOTW zC)(li3C;fiIkTv#e*j^Bk1Yhsz0Wo1r>69aq z_lpz6xsXG+MUQBL z(gfoJa+-1(-lg1IX7A!|oo$LTapc`U--u)uE?D*0NER334GOxawp{~;u5m1DFsaY3 z-~e0OkK0g9U{QJaxJSs*dG_%NWGiISj(YVSkFZ`}?Z0Vt$D?;r%TEweJ{uU zC37wG+x#U;dp{wTIW$31{^mwhp28Dfki{c<*5yBB3iIMWgNxDLs3D6 zxFF$~G*uAH%#h8na6v5?%&;M7zjLDD_|J)urgFuxRAlRjje&8Cx{GrG(tvGl8$)EE zPnc5J#Y1Lb;KfT`T+3Epp<4Q-M6gvuA;c|(+#oCvl;wQ$4M4t_`x_n_2xX5LGl{4t zS7Z%X1i>0-04=Z6EYc*kMgIVMjw@G#1JujL;j0rurwI|gVTQ~DlI=gaK4p`H!eg!G z2p&K@-s2NQ6Uony%m{JdVs*^ORe&$5{WAq^m^DXQm=UPfPcapMrjnKYKkQRLcg(Mu zKpLm*DhM>#&@1t{uEt)x;~yG`1%kuzG8Q~%pX&h}MS1)Z#Xwu~`Hg5xOS(>(c;3U8 z``jEdQ+MBR?NIK|@0fYBZBl*U4cfbLL}43trA1|Ce-RR0<8C0Xh**u{6l*r@W4nPu z)T$z^1Y*jrH2%KjPPB07T>au*_YNTj@x~>4fZaiMKHwP$h}mxub77ZxfRqmL)G89& z#08Yw#rTaeTRMYC4Tanim2`ht6-x4A1`C8H*||VkJGnq-ocSQqRa51RRoKG1^H4k3^$istKr9L+ck-@O8;|e@2p!4DkAqkVsW&NQh1H%GVEWhgl z!}NybKBe(8u^i$WZO6nE zV5zKMm^K#=h>R=Cy}yWuL5bT%^7H4PGs#dWt5`XH{{TZ@=ZdAb9KiS~hJ@0Y|!M|hN5Tk$gUsYn!+T$fNG8G(}?p=E78^);6KM1JU?u~ZVy zj1jUb&BVr7)~aUoSI~Jrja3i4pe=92Tn4&jq`-Yge?qkZbWAwQIZ>7 z40OBHyl@oje9R$5I4U@ch+xLCo;m*jQh`ez*;Wp~n8Y4yt>3@A+Cf+zVhWBdcp+j+ z1+)4_HHGb3xFKWLuQ44uQ>l$Ct#1r_Y`#Abdfi$MYt#zw3})q(=PY(>X|BQy*|q{0 z0#%rMhZ%L2v2)zdZF})9E2k1?>|<@`-GNsnKWQMAd$y!^nY3r*Yq0A=(v z*?t*7LxEQ{{{UeEplPaH%QI7CtPSrEh)rll;G{yV-Ye7~sF_)5NbFw{?5+z!@BT{{L2$+Of&$w)FK10Z-eE~f zOozUqY^`0mhK(lk_J-ya?T9qV<~f+QB?US#OAK?YdxJ*2!UX)sV64MgmcrBOSBr-Y zoDsrNekBESDBX|i4H#V?nQ(E&8d>>bQ%Y7VuJNuj;t@rvc~>s!{URJ~*K?5|ALn_m z{4f%`lzk|lA6n++AL6wamR)86mQSCh;^rAy_w+NVV9AIuuiAMsd4p{6RToBJ~&b zo0`gJ#G<&1Mi#hui*nrsz`jt?ocA4O8fR6xq#EK;GX0=7sed!tQ07qKgTyVQBAmjR zNH-}dDHT>ZRA;w{7cO`u1jS;X9n8?tM{HD<{{Z4Dv8ah;s~4E9k6%+dm70RNi9t_> ze*8j?3~>qID)R#DmCh!ilYxZ+JLUs!uN}%{+I8G1fn9omqPdt3d{uJ`GDHlMKpm7d z3?*de_KLt$Jj?=jl8I$PS(;!YLV~mAA%#=X`$Apa;_mev4%x=zv{z1I+eKq_T7trq zR-M40*yXK4t*u-qFmA5QpX2+u0aj22LhS%O-JYV&mV9POngCLh|1eiYoYqV}V{A!r-R3jztQv!xwG}Z{Xg45`kt@vjVQbrRTH}hy_^x0Bg)D41#cxiK_rBvcKHA3w_J- zz%24}E=iSX>LIjbc&TBRXsHs*hF(Kq9uCgqP#i%~xmXtvs?^eGmzGfy+iZd3eN0wi zRsQ0f#wD%C6>RqTsA5+Mtg62n4_D@CbV=YV_LW63u0z}knXW#TeJ$hsDEb+Y#eeY&X1ezeL3IM~Id$cVg^{Uc4yCg5aB5Ns zFEuRgQ|gMys6#dMCc_fiuc2J7@I+<2M&5k@l zP$ak0DT8~i66Fvp8GpS&1nTH7R|M4tsODuUrfY)Xs3`XQ%1FQUD)d`gdmtJJSHIR! zT%2#jt^i{>$jh=gN)v+Tft||>Ew=lYu_?{dE`|1Vj!th*bSu}XO z!o=16;j6s$1iM<81ONNcVkU7RD|QEm_k zLR9X*m^JayF5W?NpVD5)qfc;6m15OOc*vqbQaAWZ_Yf{oEvq8UGB-f@j}+w^9rx^t zrI?Dlt)8>^mjP_HU4Jo}tO#(t<|KJaU4VP2_MF;UC}Nb2rbp$+iG*ke$x?*4vYXig z*!y)*aCeAPO@^~^smvfsD+C6tgJj$2dzP~E9u*hBM~U6Q;bYt=X@s>vTfk@Zg4*T1 zuoLc?+2m*oZ&ugC5;bvKpr^zZ%eW3Wucec5Sg)m!ZeD5)%p?l`01G~t5B#W(SM3Ts zOZ&>VXiOJnIma>kOIrm|tj5zfDVYOs6~D}A(LY&kt~42UEbq*qXE9NAnAPH4ODCjPzx*kc znv}|AXA{@rS99YN8u~a)h7P3{Z8YXwywLFR090U#^^{6PsFe%j>1?(s^>tT<4ac4$ z{WX(tdGkGB^21yI0DnU@MR6(iXArQ*FaTcR+near1q9m!=UxcBxMFEyzUBkGX(o&f z_fcOyY8Du0xK;3Qt&nh@Z94Pu1}ORUGO7T(%vD`V)65aT9(F~g&oV}ms zEP?XR+97R@kaaLBthH9OKrExldc-n?rJv8~I*DDzRiJ6V?qCMgaa`20>L%S^#C$d( z@N`$(^C%tx-8B`pscHTu5lR>;P#eYTm>K9-EGm{8ahZ-rd23jgat{{<%FuE8!#h`d zR_+2ut%tXtFhaoHHJ16yP4T8#fe--8n&Z3tO^W1z1~U_%+7>e2VkXH+oPN+5Tr|yI zrC32nTuuXH@-QPqW3Yu$MOP%MO8d(=D!KP9Z4KUKD=AY;nMHYYcN8wJ^L`};+r4!z zfrA}KLfHCjG{mpl{Qe zNHt}?uM-4-p}!vHd2OZx`*4aY*>(LTFDvVaMLG;>LD1Jw9wqPGYG$qidCL)<2|~Dt z)ES>YO|KaL01;KpgE(;DN8wgiYPWGw1vV`|9mcA&jdL2k9-zqN#lWpzVNVkyERW)C zP+BfrDT#87e}+Ea_+D=xIZ}I?H{=&LY%p+@v_UM)Zq@V%Cl$$Sb(FQADIvTl(YtlBIu7 zqm4@H<~1$qQc_|601Z_vOh0ZR06&RSFstItG;WfR>4E!8Wp`;a4f$w zH{G*Clg;imEx_X~9%YJ88HEL#&l%y5h}VAdtni>T;k z5}+4G-1TtgQwBShAffO0hShG_I=-NWhMb1}{{VSPMcv?o0h!I1_?Q{7$PmDR(zWUr zlPQBI-!kn%O|Gs60c~SUz%&j%WwwRs<}Y`qvq>#+x-U*HD=Abrrih{z&bdweKtLcpZTCHE}1xQ z3qiOWTmc2sm=4&LH2(k(Xovv^8;#5_DegP?IKU;&AQQ=Y0&UB753r#wvw z@JqiDExUcg(J&jCSfFN89M_0y4e>7)OCr=9$6rSHmf>GNMWO@Y>-;@^QPE#A*G6t7 zvElkTVhzD)W99_fKBJ6Zm^jXV_1pZCv5)<82wTDSt77?Va% zQ2+#}x&Ue^HJGH-TvcuQDgJc-0FLsr)Z^5$?l;80iH|a|QykaPr})4CXv4mtWw++_ zb(m}`IF^FUVXyrX=95^yxc*^>97=Gym3n~4{yUw%Cg^j=#Hm?Q_>^gTl%^DWg$}T0 z_i4k+Oz#}1UtSQe|wb|Hs!>ooa1+JAO_XL zse`4B(T7kxtA}^}sbi5vw=m=s1h;C36cc2308}kbea!^G;{O0O05VfWQ!zwh%f9HS z764n5RWGszm&Ef3ek-Vv>cuz8tz4?|9 zqekB1sVEFrOev9`r!0BYZ&bkQzR*FOUw80~K{FL3HGInO3jlyg&^G-Wf`1Tk4?D%D0A4>Ep||@`XRA zr`Zr|4xGyYue0pM(qT`xh@~1up1FpquH#s zh^a{?@O-2LxQ4{xio&?g-eIV) zhSWr?9QlS27-F+ooCuIkQQ^H#MO)aaVHq&zHm+vkE+;OQyyCxbzaEbzmoH04L2FLt1jvD^} z&ar>vd9U*H{{YXwu6#wQWD|0dk#jGpXH(KzE&l-Ue9k_8g;r%&nTB!he8In_2wyPU zak($VK!{_J^A#G+oN?wOO}YO7!y5W6eRPVv^A=1)zo2&y!V{1_Wm69jO1fd+Q z?J+fg7P*ey{J}V^dX2nRFZ-B*R~MRsRg3d<#{!FKquIC!$w7EvDOq^bc@>;cHDB^s zN@BUF06-TGF$w|&xc7a$@hoo0-s}7N&H&y!r_8nYU12p0En>2+Wftr=_Jbv~ z@eTwE!PE+d{H0=9h6WGf00M!Grd#4Mvy+)%cBp3M9U|`rp+cChH2Q_smmdBq4Yt<8 zs-SIFZlConm~1G{vxu>K3qktE=(S++;%2Bc;-VlyLfbtH#94yx7CC}DRpZJ#`ojs{`&{<-FeOe6p74y6?{AihP{H+3wz7+JGyNs{Li^$CmR55u=N1 zAKO0ig6K{Y6$;qbZr|%Hax4rRI*ZgV3UTgIX#fm4fdEi}{$o)@!i|pgQ0q~;c^dx! zkSbo-zCG~{!(ATA4ivYV-(Z&fXib4jPu8kbcmFH=4y^v`U( z*VW>pyvioMeM>P>Di7XLm1%IQ%jQsa)Dx|72R8y+vuIQr()05M?7L2)UYwVIw6&H> z&Y<1^&Tl6R{qYJmx5Wni{o!H&zHobk2JO)o7oF8^02Y|V9Lm)NzS7P`Z!t0zYP^`W zp?Y&y)G!WoN{9-SDW^B;2L{k-Uoy#d0c_uh99@gs$BKXy8aLdfmIwgnpY6mn!Q~Oc ztv|d1fn!N9qKY+}iE0Hl)GCO&;P;p{VanF-;I_YO{`-gptYNKsnOZ1YDmX@l0-_Oz zMX$sGurEu*VainjGb)sqwf2E1+qaj9O<`%Hg+I^Q7Jlf@us;+c*<_LDI+!>`o6EVI6m>=Co{%>}`|Yp;5~Ne8L9K*BQ>W!&4C~tRzJR zSLp;0?MK5e2et7PMkBUMO?4cq}@MCzGc?s+4Zk8J|pH} z{{Riw+8VF$=jZ4*{{Wkh{5wmD+lZ`v#lQ0MGMRy%NcyQyU-^5P-F+1I3+L%iseI3D zv+1J6xI{ADFr))RgBL0)$;4LN?V5j%d`xfX-ycM|`pqWPyO#_Sm5-w~t|6BnLXFP! z!qwM{A=Q5{0kp81;3^@{J{UZU=HA0C3o) zHHv}c4#*cqo~^+uxKiHt@hYX?Jjw#asBAh5CSrp@mjns{Zpa8LQhF-?+e+ph z9ER7qRB49t-eNc$Iv=!lU}?T3S1B^2q_@EoKm}oVSGb04wXb~2u+a|Q4kMzli*NYU zA#4D!>-pcD!~rBS9Eg8N94Lu+tKuT*Lx{=^eW7J_S(L4R#C^f*7jP%?R5l!a{vb4^ z%^~~3sb{4lukMEEWeon(!;~lA`a#-XHOv)_7g@wnC2Y3IoEbBSk-x~qq4wZqrA8@bST*O}VxY%>ZlD<3lZHnV7G_hE1*ESh%8A{Lb>!3+;P!HRBE zW>{5C@iJiGz_kL2q#)~ATF=%zYbXKd{eC4DE{egA$hY;)wFU}c0U@p55H*4Qp_M5& zdL>L^S}VZ}WAP~FSZW%RP{}sBgo|3tx0qzxd@(c+sJ8+@W?-QCfm=Dv!ufzUtG;5n z0ET`gha3>I6-2(~zAiHC66~y*s5tG}3cTE>($4;rg8gYX{t0oVSEx|T9Q`bQmR(=g zvwz~*2L6=)03I>^cg4zm9c7tt@g4nfUG%x?1y z%1;N<>RZ&sM!A+<&OT+meFmXZJUNKLis6pR151-JZN6OnFTe2iPt)m0wJG$$4rUpe zSJAu79Ne{FW-t9qU4_aXzGs%dS%Id##mKti+dZT{z;yNG+uAqXg3?8gDd+- zqd5j&QmD6q_KtWC?CJqc8CugULMUpla9Du7u_#emx3h?W7PFeKGK*K;bN$4o&J#Bp zQUR4PY`(jJyc&L5i$c>o&Dopt2vt?xTtMZiK`8UN%L?Y=Wt*&%Ak%n&TY8Av#LY0Z zG-Di)1PfOW65W4!ZW~d>e`+f{E^TuZHa;x<;EXg@dX)=y1zc99nl|d=8&=E~1^U14 zp@52qCKzu5g8*pm0V3my{{H}2^q>$9`Icv$0K4n$0&1Fqiv`oa?Z*sK*Vl#(Kwp*L z`hZP6Ea6UI6n#xZsCfEeVUgLd;}-t_aYZG=_CJV! zcOBHC=xu?EtjusQ#4B+w142=nKM)+MzF=L-5G#MA=Ms&;KJ_^Xc({hlaVS+|)Kqe( z?=KjMD;Bgf)K~M1mDKYFmQjWkhY)1`*DeT_>QrlwuAfXZ5BMh!(abURt}p9I_b^M(a}SA~M{=L=BRx$e zvpf2aS3G?OalR({p1zgTuIJ`nFX*>C{W3Gm$(c{k-w@~u#9+1xyQrE0%j!D>c5lC? z5Ad=+zL(P$zL+IqzL&ZCCbJ{@%<{nqlIuQh9l7oLE-viieU7=Cez7mbL2DM`Sh>({ z0czdvS116j*UU*nuO!C|Vzd461-i3U<|S67-#^w_Oqkn=lGSfD!zjwH4D2Q`ema7o zp|QlmgKZmrlIZ#*+Y;*6ZbSQX4Le>hE69u5{RWKx0MEQg*gF;_YohO#DUjziPB@h8 zX5Eu%HK8+vZY+d_cE;+(6SyW)T+A zv#2Q+%x8ei-c0`hRRLNB>vD;!Q~mw14JNx+7QOa0{+qQ8O@sT#IIUaIl^U@)rM5!{6Y;vT7Mol2BlDTO_M1&1DM45 z1-G^V1*y>%*s|_hm9fu#LP%OGTfU;nS_4p;)o(JwYzxF?A->sGo9bS5m_9z9pQ5hd z)LWQt;o{hPKU^_|bO$}Z27V<5it5%bYWAlmapbRvRY0y`i;XQZ*%8=BBELv9G4lfy z%O&Sg@d3If(M^2D8=}5~TNNSJtGTllN~N4}3mBCws;B@HH*nh9S?h=ae6W>?4Je-w z3dSHm6KT(>mP|iJ_=9rWhI#rfxR&)W%j^6yMZclc=4Mm__qlrC-c$6hn62&@O(z+e zeJOP+!i`BJj6R6m~gQ&)#AHtn9k{MJg`$ zcQ70+@Ae`h&b`L8Y{k^(TwX5DzR(kNFmZT4n<8RM25`O5 z66CNE{oz#6Y+Z8_Ws;bj?GqV@A+9Q*(M##NfE@&^z^QnwJrDq|ciaH7(%{Y@0e&(A z_n1>QXD_JCo3!p=sIML+j5&I<=3`}91Hp51Mb7Ss5Q4b9-^9nX#ks@%V!@!b!1W$M z2jv0C$ExK~bxH#bF-gg=+naIBQ@X2W>BJBN(rOr-4&_sFtObi>u3~Pjq8F%yr3=Gj z7K?bIWEw72)>hZV+_6Z@9?|nGE>${UBsZ8x3~>x*1S2)Mn<@pu`Ilc+sPt}JPjt#! zGuru<=VxtRZ~MB67e`Xw>I;nOSQlh+mSZ(>^(mCx5!Chb^kikMwOCB^cLych0pfN^ zbi`r>L=K^RMc$^eTwj@17vrrGCZfn%ZR%SFZ%N<3D(+U)Q9-#B|PJV{s)EkR(?a4Hp?hUfL zmVGpueH~3cx_^VJl$GvN*V7(;uI7CGGtI|;;xv6SZ|P5=E>qvpDsl5LN6dKv-C_lB zr(ujFZ5qq#Fl|6=C+{uGfzIk2D?6qDPItsqXu)+`g=|{xTT3~|GUlCTV+lZKJiwxg_^O2zSu4)5 z`^(5+9lD6camW3Fl9IE`PD}&dqNj$IyO;n}TXcYd>zw+JXF3=YLArH+-*ExK#Ra*U z6}5oO1dAwdI@F;e#N!Xo5fF;F1*eRHYf$gPCk6Zq*IQ$h;}#1e17rBIF^o+mH-+j1R+2WyxqiPx^DUE1SqR9vu5L} zu!bou&MuA10=1I47C#Vu(RND~ek0g9BbD{UL2nx)9FLh`9hpL@d$EnsxHMIhY714a zCBP`%Z#Nei65bb5+}ksIm>6%r&*lvkLpA(N8Rt+O2onDQ>_LFI9&X}GfVYR{`rsu}!3CD6R*qE`wVJF_?T zmtdkTa|8;ksQvQ>>;Sy-UHZhkK`^^U5~9r2@QQxFtORp5)~0AHiv41fuwRla1~WX6 zAjwLfXrMCH#G?o~k)`$oPq8m>NOnD`lni_}VTeNv^LGf;l3T8hO%L+I3Q?H=GX<9|ey z#D0i&MH3Q@8TSx9#GucqKvLWex{2S?*?mKCu0Ed>CL6pcbaL}B-Akm?|TEFHLvZ80Zlobvs)*}j#g{N>vO%ilwr$GrdbP*5iCe?efpFD17d1lBr;>|#8n~9ORzs1g(pc#lNJ8} zA^`zPF;{D=jK$yp9}`SzVcvYlo*Ar(#Y=|*+Zx?##5T34^2PrExVc7Ol&x`Um*=lj zo@xwx<0=Zq1s?9^1hn2bzMw<^)*u`jXnt`6C8v%eIDqLQAdmA52kR{$wJBJ~%vUln zw=?1TQYYKoApK=htJfuWa7VRBYVseNOCO~gT768Y1lB&3psY*-Z;AVlndHvlHa^RW zcB+bLxD8}YGbRKXy=EKY{6MDbb7P2wQwJ6HKn#;z!ucht)6}QDKv;!AOiS|yqlN@G3it;=HlG<5pajvAW}?q#lNW0 zs4iktXCxb$(07x4xJRaTd+n!$I70))>5IsgO@iF47frjnCchp+I@kMSEKvknMxVx6{AG!H)MFKki|^CG`fi6&uU~i~MF961UXS%?5Gyl!z)}+b}dRF_PM>?pOnQ zGd@jOf(fFQ0dk>Bmk9o|U@*{eG*I$-!ae&kx}RPfeLD-XID99WoKCFxj0VOIV8oCtX7zmpOH3a;N~h zuQ6aJ4z7k0cbt6p32Z9sJnQ@O5YGr2v!DAdaJ;%HZN9L|M+e(!AErD-P@(OYyl$u1#X4ndJvXy{{Th+DwTBn%D}x(j6@O2Lo}6&sY)EI2Ew6B z&oDw=UZAv*z98JE(XR@g=&rs7W~h)4Z4)OF@l#))+lXNLZoZ8-tn2BYyiGjfnA+yi za}`IgrJ|EP%3fv-jyN?EZHrZp5TuwcUS?ocATy`{sDBY2@|C|Eg)P_OP~PIQk*exu zYE5?o!-YZwD7!7tVygI$0eF|FDkXyg>Nt3c)c%sqpA&yvd5+?S-=$)uKlv|r^gDx5 z-}u*GPf_3bebgsQn6ty@$cHW(u&c@yY%= ze~94yB{9uhf1j;a#HHr^Faew1Y5^8|s9IJJm}55c2K3eAB&}-FVK(yO{{TohVacv8 zaI+VYhWI{AMA=Oyt$})=13qIA;@o3fm=q~rw8(1c$9cI%n^|R4ZFS!fY}?bL#4t*6 zRuv0zUxDHYp0c!EdSEMH;;8Wg(5ud%)e62cCM}cYsFW-vD08@5ay3GCIwoz)&UX-_ zL&ghF?Z95opZOArXKBti6HDPP!osoo#X_@O;w=u#n$!VZ9m6dawNFr^Ag3;Om{L~Q z>2dS?@Ra^@-n$yPNEHbQd$DfIXBq0*FpC2A!@BoWqvL{%-yr5G`7y2;=UH#x& z;J1<`(HDHT0>&Lb65iUw97fd~x2bViY~5h{#=5I*hPhprXW|M1TA1@J;*d>Bpt1~O zGhVl`xnQQxHxY!*rMFMG<_MMzC(lt806FjCAPb7lAw>|nI(mV1HHv>(OJc0x`&1r9 zbkbw1j36NyJ%mdP+M?BGa}|sP;duFn#R8UxoAXTEjanRjvD{dXTuTY;c3cu8AoO*8 z!6tyJ(e?B8jLrF3;$RtRgvK%Pf>@?+Hgnu1gHYY;GLSY`#u#LZO?8NgLy_V!QLxQ~ z{v%pB=!;xj0nHJ@RKl;Hq8&@$h^mEoix*t(Uh6Ja>9{BKu>60n9dId`hyn)OZ3? zQ$@-vMSUKZ?k|aYx_p)NN{R+qQo|odc>e$kJC=cX2qnRpRDBc+iJFu%M7D`cv7HlZ zzsxb4mzs%RSJWBJ`IKAkT~)Z2MGe%m{-9jO;^umb+;aoWy4=aH^20Bw^9MipWyJR^ z>*?hG0K(3tFs@--M^UXy#(s_QFmn?FP!2hwF*v_@h+}-PPDH4-3LKTMrXQw!f0=y3 z_5KG=32ZmwIJ^AJUb750#JzMxnE9xj6I}hE)=Pn${{YA(n{vyeR(|rsV-MmB^UmO? zLgrq|kqdkh-l7Fn3%;P2jP)_YJ5iePFk7n0<|@iHw7X_%`7D%yfWHtL0|49=K?9uP z_XMpx8v8-eY0saDjzu%7uM(Jg#;iRAMfjE8sB0+HbGlcHfp`pzqu4KTGIjoz;L=C zB*qpUm_Fak-ZnBUs?VrxAPt!vLTpgB`0)*tT>{BrY^J?_PV;eEI0|q-_A0p*hya6Y zy-JYxbbv4=VVNsU3@DWgmD?>}#8110tGcOc#0tE#Rm`E&2O6)S!ymdT;jABsZxAaj z8~j2xl#|UqmLE#yzLnI^h+p}IzynoW%UDIhF!NWK7$3AY=WxqnS-~tV;rdLJZc>)< z6^06C7!bY*nI1x&+o)~_CBD^p2F zQ;bSXFe+YZUvV{$rBkn?Vx=RE%Qo{WpviBkM)vV8RZW8u>BJK``dL!(a~mbUL@Vm| z^z=s==5yTV=3a07J^eSo@THoWU-PH!^~Z^y5icJ~#Y#GyXX!v6yuo=1KpHD9u?3Ww zSXU9^(70{?0LaB%{{W7KY74+cbyK2e>Ua2-_{_k~W`BLdxF}^If@HzYel7u8p~j(w z8+X!5Rz$__0+x%06r3)%G#EH<@XKJj6__SAcJ7&d8A$1173=RSO8)?~rC6KK!~%;2 zt?Bo2o-YUMC?z*dH@{E?qZqc@sBwoQ!6>Q@_OFO<1K0BrtX{EP{6QGKeeo4#uQXGq zm`N=5lm~6PcKd~?x}En@n>HC4&gF*yIKE#{P@-DzkM80?hL+lvm=v+zVbmttpp2zn zTJ8dhXm1(Bv=vKLTvRU$f#v&QiAD{UGp9G=pjoqA2HY6)^NwSTkr=+}Qs5SI)KFYH z4x+6PV6Rfu9F^)(X?4di%V;ddYM|=VpEohJS{4QL_b9O4M0vY~N=Ku|_NFzJ&bQ_ku%l(rd4d7Kv2y+6*jQ0pGsn2iG$q!H z;w7d)=B)4E`-W8zP}ObM+wlsrgGJiMh=aInLtLsM7`vj|_4vfvFj4@%V;mKDR0&if zu3w72DgupkTOxmXnZscD{{XR(qgnDd_=uIeiZes2k4+B+>aHl3S{r;^TvhSs%nOJ# zd#Q5RTM_Mu1}hh;m!0Zt(=0fLWB}4YEx!|#s*8zL`j-VYz)~Ni0yhy=Vxot}9wC$f z0r3Sn+peHot|~Z#a-OD;2JXI>nuZ~lGaNrrMtLy8s=WG~SOID#JdWV)^9HB{ zTPnysO2z#Ib^bWi=MzcC%-b@t-_r44_>}rG7`$o~3wO9~ zDv}8Q03cmV86{S?RHqJMfn2HU{51MkU-)GR<<8@A4%oFW89;@$0hwo<5Y#aQ&S`Nn zGtZfTHGhkMtG9QKC4^$Z20Awq44(TUsf(yX4PGylFG){5u(!PH1Z$HY9$*l@axq0$ zRg9CFO2ra^uxohF^FNTMaw&IJ3kn_?xTTpa;g@Qmyg$he1Z>{h^DBU+uiO+D zS>66VA}fTYyMB>FD>a176F{ac$oq;wys9lAteqcth?NViT?h{RS>iHo(AH9|k|TSI zM+xQ?E%p!IWrj>wFrd|Yi8;rIHC8aKtc=n8LT&9gEL5{%K(Rdw)BUJaBx=`>5jZHr zMnQ%I@*d)>iVd%*08!JU5`Z0*Tz^>YfGTNj;0mw^js;DI2sx^|%(W~oIzP1#Zlfmi zTuMaRJe+5q=5*R}?Be}O?j*st;s7o*7F#vvQ)W{RqgPaK5SPbT6g^x{02b$OKQWWC zsjxp-fqS>rULv#{S$jqRdd9!Fue@frnRfsorYBbjtfq&{xVsgY zsDz?M&RRQwQ=2sgZi|Br@fNpGV%%r}%Pn7Gsi7<3ScsWr7m#1gL7b-e{{RrLt>(YL zyVOK!KDO0Vy*t7MO zCP37y$Ut2Zo~0(wpgXJ(9BO4SlR9oKfsAz%u6UGn^u+~7Rc2V16E+gkr6v|92QRc= zQrCAWm?j9d2Iki(u>xRWj7M;JR1xdUdhr`Ls9L>3ogf_IIx%+@pQXi4AaKlaGspNX zeJMSn+!~hd{+|-x^7kA){W7!T>rDGZc#h{EGb{ct?LzsFHD}&jqYuns;J&3mnOWwk zAbzZgz31}6R$HBX75Yc4+DHEYUf;Y+x;|#YSH#0m%aiH7{6WQl<_ay=SUImBL8iyl zviI$P4qzo0UO1G&W#07wTD3yp8w_{LP_f8=5EQ1q%yb2&^A$yTrM*fwNuL!9hy_+3 zIzLzlP^Vl>CVO?iF*+71xzwgX#k6_7K*2_>VN?v@e=vDBh#I==kOGl{un^@6+s1>5 zVYFv~ln*IYzr<=rb}Ys^#B4A0fp4M9f~K^TT|`wGs=v|>7Snk-tx7C8tMBhQC@T$a zX5cm!_Wh<^*l=*gwF=$05KxF!RtUr`M+JOBkV;8hb^F3X1+jO6>*nF1fYrCS&K)jb zM4`g^h=aGxb$)dOpe@?0+Mp40#lT5(-2`9=j5o}vkXDy@maSO4tr1}vRiAlQvSDlI zsFX~tZ+M7oqz3r$6#>y(KJnTP7-~=qSC?MHfHSkP@Dq33AnAV*@DuxVTdWOkC6@O}}ZL|Yz_C^5GwD4rje12vy z4`eBY_!i8-IafM!=44-yMirw`ZT|og{^4kO;ZZZdFDH#niF)edSdPGDQ&7K4Hr3wV?pAm7Ay&D!Ufega~pQkBK2zI0>9m?QNY`s-gx zwbs6Fdj5mBifcJOY(Ura3 zZV7>Qab2>oDDpytXciW~X<;{2dDTN9tx`J70*aQ$oIznNM-LyQz>`c3ej#dt_2#0Y zjBbmHgr+Ov{{UD?K!E!QWi*%?=H=oP@3v3`UQv`9wy89EL6Wd_<{%as-IV}QW|lfy z61T*35jRIZASi;>W8x2Nnb!Qoa8h_SaRA4kRq^I4BFVw7paD|NWrbQ%8L%veH;wKz zL31kwgZjm1x;cVy)$UytORK)1Mva|y1#1HS&;&%Sv_PUGTdLduP9sY)TaE`WnL-r| zR7J$9ai~!jWdNY{9v4;+po;|!+fs-v9jM6Jp$Wi^}oKfDYBlC58;DDhwQfSh3` zB3=HFH6j2!V?LS4u;(b;BhhMc8UwgMNe~ul2a|MW6S~pyFfo%4%nHMGECT6;osCB; zw~17Rvy63B_{8xYbhF-9xqRR?qb@1@z)XV7oWZyi7l}`Dt%fmpkAFeGsPg`0QA)%p z+*Icz9MxPn5T_9W!s6a#T&m6(`&>sV4R-~tT=UFPcD+#+Ez|8AGF>rRtH;v?TmhAI zff27z1G?Qu#R8YjRxSC|XxlQv;+>Q;F`G1q`3pULpnd{HK5J6VJyxJg5gwV1lIXY^ zKTD{%)AohBl$(w<1roEE?{RpFyh4cBp@tV(GbwF@MYY^?-0C=4O&+FH`dQq4Pg2t| z^IuNt86})lr!4$I4w{~Dz}@ymGKxQclEBLj z+uw_}!}fPj)GEadtsm3x zT9#b%h?^!HU7v_!G!*EVF2}kfhcw??mMAe;qV7>ZFHY_t76f0IEGQq<76uPT5rW+- zrXWCSjpQyQDdCn1<;^h)j&tRR6r9gL+m|Ik@ObkI7%gCVB1X#=O}}}B0i@SI@;2B5 zY}&70o77QOE0K?JfZI+O4tiJ(HhR7x4Z%}}-yG&50USDDTO*m%OA!Rd&d-?Cpvu{6 zd&XiwAqH)=JM}Cp*-V(1!ypO2_lbe1QXN90WCwWFvWvE`KIwY-cnDxvXU?UG9CyU4 zdbXqU0pyv3zuJH$XUwZLnQ2;HWq{T2!-r@JthmQ8Io!$z$VQD&S$FR+Ncrx-p-0WH zxCXIunb{Vy>LJy>t#>SC*5|36Gut+1T51jb7q~M_$a!XZCA;~#nNxg{*d3pUBVRF0 z;?1qf6oAVztVXLEjn$EHjlnfra8t>_{-#8N6e;7^-V8@^;PK4Ixka)R&=3LEtWe$fSCzplYR3mND}dK$)vDG!jy7mJL%$8ze=|^0!vrYyiZK7 z;^wZUP&!vJ5v>0JjU!w$Pt)ATnS;#ugPD&%OpMQ&=3i01W52EWewO$2^$&IQ^)#Gf zV3hh&QVnE}ShT1kkhh*AitHF@u~-$)h>p@O_}0Tq9pGy4?-A%t`>{*>f!^eLoT0 zIdP4UF}v382y6jb(dHpZn{sG|+h}Hw%%pWdXLnI9?X_b607zd415PpGT(RMX;l$Dw zLBQuZYuOxeQ0-QVgHlM^zi+$;Xq3l)q;Ehfg>Ga@a8cYet36ZHv>Q%CoZq;s#MZ*8 z?q|8bw)lN07P}x6v>tvV$Miq8x#gVUve5e4}-FII<=Z01yq* z;g4k289>a;=H&;&7Xyb7LZVd-GNF;e2QbZ*H&=zo&p7;(gJ>e%*wR$i2n-`}v0@U# zK&{I@^36oJ;Fd<5%=r2Mwxwd~Rg%2I>`8FVppB(6#)luQ(5!exC6tDuQ420tZJG-Y2+6MeLaGD^r;gE#Eh=Gl-R-}FiMT4vui`i@McW45H|-%{!WVWM<|t!|s_k{= z;iPnv+YQ0{4pJs@hAF&BKoy81HM!&w}l(U@sIEC-6>7;ZV1{6bVscNvi9 zh^r-6r~=92zMy6c=A}4+@cYMlA3x)Rk|8`mzoxcJH7SWxMx*$YaVs@2;(Sc%W6Zo% zb*;yLM-D&1f;t0H`CD7ArhW8xGB zjE-NlU><9SHT}$D%Bbzk0HWaDf;R9V8WH=PKxKi`<31(|0P=69B-Nabld6cg<8anj z_WrRK8&R!X%mTesUD;o>ZQ7Z$aM_1K!84Wc6^>ym0~L%f_Y-lD@#0p6DJHj#MT~s0 zDT0fItHTxTR0XkqaqpRPJ%P5 z8!#MtZn1qp=mpSWI`J9;ZN7{*TJiaaTIm6dDc-qY(G;LIK4pcZS<&ygLNBI}bAT6` zw~yLpD{PE6<~EIir^)XSGMnS|h^t(NR=h0VnM$k;QHR_XUQ9enD3hex#oKbmIGhYa zM&Gn5c5WkC%(&?XTX86FY7^K>C_uU1SNGyLQZo%_qJ+KvC zHQZ003LZ0Cn-n2XV{bnn9}$CoOz{<#gO3t{Z9iyXXj;Z4V2c#rN1Z}3Em3dY@d-ul zz$@ba0K0|1$?3pBl7Kh`dq zK(>XH;oWahcpUZ7xt;q;A7opUn{pDhMen zL2sD1ZOdB2^DJ}J5zH|KtY)}_fBaH3A&iY{yb}lmQVuAtK1im(hM|=7RriMD|_Z`X3YzB zz9FE`z#gT5+m){I;tLjxzws$5C=Ia!N`)7I*1U>-VU~lg75@H_GVF_}(rB7uwH)XN zh%756JxX$fc3xttD7@4C_Z*F-(SSi9+74>??x4lkR>MKHqx6)V-Imbt?l5!AC_f^6lEG<94vw|%10Wz6PfTtV zP;_0V&gN@P0;uCL1xwQ1Uz#-)pj|PiKM)Y;0nFWmv9J7;I07 zLjxwoE=v8@yh?7kmPK`vQ)M2zh-#%^=CJ~uP)nS9n5oS}ejrg(1Xht%EvmVS^Zr(j z1m^C}p=vo|cH1&YKpNLF(vF}l)TobcK4Mb}9+S<8;ploaQrz8y>ltaRL^6&lqM1pJ z&fke;mH3Dh7rlH%V(`*)1_$2xf-NS);XDvv>Plp zj6|TwEqawAIuN`)-PtW!4Wao;JI0C+j$pLMQ-5P}ibaW~o;ZMETMFsC@e@NqavSwu zw=n|R^jq!BAk2Bv`XH77&L}k&pQX32qEs4*aVieP0HQMRD;5V{;#?NegG~>)W{7SN zPY}8lxUW|lts{1VDyomAmsb!MU*S)sBd+3K(;j}0QkZUKW#;C5!}BTnQ$8YB`R_#M zx$!CbUG1K}no9VZMt21SgrTeWnzMd4iD1jra+Vs*KyXnvaJLkhi{W{r{zcijeD}1X z(f-uGwvbx(X}!g3ORR4JDzq1U!UdTxF)E8r2-{Y;#B5eP#{5A~s5rwMWsT|lOTW?u zYexQus+Is3Fv{OZCWQOXiJg+vIqwils#A$(+dGs+=S|8Yt=|y0ml?OzLj1Mthz#h- z1e!b^f4PC!hR}5t44UyUGBKO|tG}0BDwE z*z0l7ErQ)^`*BN99FOpZp^TWznVJDqEB-`IngdH>^tHgf&%(eyNN$!n7@Gn1Qv5 zJ|!A~bi z1xgJ-qCN2|fVu+d8~tIxof9DZ_Yi7Yy$Y#lY;5r6rLkQQbLacSpyvT&(~nmk9MN7I z@V~Pw>~NZHCs;^0IQ8Xd>%HMVh_kC|v7qM_4Y--Lr|-2U)umARKV#1iMJ zYhFr$t6+5=r5t7@LF1UXxHejS0`V%b^b+EB23IQ<)XQ{Ld5ADJ7*vOD~NFN&H7V?J0lKD-#+)aLPuOvL$aZ0JH^RJbGA=tXc(oe|*9PT ztwt`?zt(F<*blyC(}D+?=aK#(OJYFA?*o4&sEi#N5abd_^0m^(?IQEovEW;sp(SOx3c*mL~rI@aGZS=jLP2(>`H* zPaj)g-`6AlCgZ>HD(uVzK%o|dvSgNR2!)vea-Y5}wPb2%r(Xu$~ zUZF!`p92m+Z)5$$BwOGT)*OB~mNqq@^-{q|w7M`nKmZeMpP8^qEdjGJH&tg;E+SP} z?YH}KvPojDhb6$QjJ>=OIHNxi0+O8G_<&vv-`;juy?B7AY13>$m9%rj!ZxPr+9DP% z>eiX8%QRB~(cMDE7nbUuGOg8Y+vXz5rk&}RB7ig7s2~fs+5OBH3Ks(H{`DOrl7WAj zwZL*yF$)e<)qi}!3$2vbVKtFK6gaCJzc2)HjVh_@s9rfO2V8&H7Rh$TpsWJ1X4S4> zm`#k9aJMO}Dy_1u@9{06N};tw<7XvO;?M7yd2xUlp{smz_kaUMg*-0t1*ok9jiKO# zVz$+v8q6>_?FeMD`t7(S>gApeK;3zO z*98Hu5Zi0v>Qc=iD6p$IiN#(?R8Xf7QPF`@`9Q+b<1PVg)!Fcy63*u#hJ~@T+1H%U3<~N&_MWH&D5=WVkqVM83 zV|OWa3*upIA}*M$z_nTeRgm#w)&>3{#SN=U>E@2_y-rLZD}%xq&T*D?&zKueI6cJ! zWxO#;-TgGaqk@Q#dw7GKBp0NY*`gTbb<`@9W2j^?#N)&z1Sox6!9Z_6>Sv3|1uFnq zMoe(bu)2V5kL^Q~AXZ4A)1yq+ok2q4R!6s;L&kJlbaXo3iy09w54y>zEKI zdqS@X{L88ZTUbB3o56R5)@tF#yns{PF`0_gZ{&6Ha}8GbPl>I0nB(Z{>6*(@>z|{! zRn%yh?Qn7F+r+cW+9aF z#Syt)byA}xvB}kS5W*Xn88Pkv%^RC8-tz*kwW(o=XPieZ^8xOl<08Q^&BJhLyTLsg znW~Gisw*>Db*q=#96`K@HR?NR?e_&%Ja~fM3ENQsl&*6Png{I+>G6nAB64q-tS3%& z3oXYl}dt1P3RR~@-lElqlW0;Tyo*O(@PvY~jc<1ADLigyEe)pTOH zFNs1|Q{OMO5K$bJ%pD6Cjj$@F#uhW6B_P9SuJT5piCFiVh&)*D`}#|sU+k4B+L@y+ zV`ITq{{RV4f@GxPSZi4bK4XRz%JU2;RIn-na8Rsy=i~H(2aM_X{L9YKqZZ?18(MlF z_2v{q$XED<)d5ppJjL47pk|j3>o~_IPtE@Ta|Bvcp&hXD(Uo-m!3Q$Y5$l6H?o@OZ zrrtHp#fK6mXuRTILFYKla|HZ=Lp<&U+7~hug`TCeqe7o@c7Tzl{B$u}6 zuQG~4#1Q1fEYp%>%*w^0Ws*L1J%^}UVte|Ya}ah)45~5od$>7ePzU>))KjA)7q!Pe zCY1+6-P4Eh4d(GOm-5B;0mk%1`8Vh7Q9+t48rxx(x!iOr^fJyU02sM}9;3 zsl?w)7vyp2%q;|^xCeJ^MoUMR^+mBpr7+`&WxYbeUTO{JiFM1YN?ekhaS(rZh_+_C z^Br>8tGGhTFF)VBVI@4@xR++sQ^VBAXEwT8RLKHsTR!rH70sKg%s5)sS>=D7N3||_ zSV)J8iU2hGM7zeCHY~kYq;l&nFSBL zRvh`57}Ts+{v2!S@99iB52Zg&K4w;Fly@nO^Y!ar^{7Xw2cJDqQ#|8Y#HpJ*KsJpzAH;nO93ov<<$us@H!-yXI2tzi`j3 z~aG1!=CM zn%Z1zAKHcnt)=D1Qs*id3X}>dYP>+YePSip2VpM|Z@X6O;x?345a;`-+!pZS17|gy z+(2tttVMN_48?LVFWg56G~wv$)UkD1eT$0b)4vcv4zQx{5dzZ&%W+XtB(apcRx&<9 zEo}}l`p&=_SM(qV3N?tb8Y_F;D6~EsgrU!ae8y8?;;&hUvaPYeug~H%42rhp6_f@L zH8Y6OX2>?HTI=ReL1Vsg47Mq1?@^hLF_k29n_ykIKQKj=W=M_R4tkkJU1oU^TY-H;yi6_ zw6^xSEb6Ax9NrtlzqF!w3j;47$^aW!vbl&$l_^>X7m{duN^R~_l5J9~M!AkN$rlM> z!FSEU4KpsWDOn;De+MvD--yt;PP60x037|}j7)g?Tio8?rDCR6>5o57K4%{?ne6`n z4~a~t>y5Vx;&Gq-Ok!pjO01Nw@({CbM+C~39^5k6LsIwW>ty+g_^(iLF0|#JcpcoR zE^C+zihV;M-@yv1e*1;W8@Sr19b5;Jo3>ak%4P;`@9hgzIBFc&S7uq4TnYNiIQ8sh ziz_$OvR@02@7^Jl&%R)S;PU?faTW^$rv_rIIdFi1E}bC@&gDZ=wLi3G0&tyo08@p) z+i!44$3NFlsBYjK;ylSY#Xd6;h8C-3@WOAEJJif3s0BF0Fw*T@pBaTCS_>$&cNH7-24Qy` zo{{j%`>CAcN&=Vxj80@!tsbST_(^s&LDU5cdnG3`Ju|qaPUoL8-2J}rn|Qz|`1{I) zqM*QbpUVMd@C55D*5K3 z!2!x10hRzKF|Dns)-TOYsV0$Y8*L0lewA}|+gc7GDNfqbu`)OFzjC2?Xv2SK z3$6bEej@UluZfI<7=W^jRYkG|a5z7^nq;+RTI(>OB7D1IEtbuh@0mafH@p164pf+J zxocP(qMJkd%$J*Y_mhDF-~-=Hs6k-6;|?Ffc_%*0J^x# zb58OxQdrP+34|>s;(v%8afpFhOkFFF`vEeMp^WTe=V@VC_mnLtSh&v^YAsjv{UdV9 zhQ+&mKvn5>u5qC8>A$GX~80XGz2-saAf#T27 zV$hy8x~uLGf&-^FOcaj8*_IlP#e0RZ#00$=6{o3-?*o2f1t8cx$3R;FOP9H z_lV~{;sraR`I&6M`GSMw@hO9_9wL;zZU|;qWVAh5F>!U{9zA}Mg-1#((SH%f^oJ2k zHOm{T#c)RcW^AQJT(zp-#9G{|i-n5ZS|TmEi#RNRGZYLv;Mm6DQ~2)o{{U~y&hoe` zct(q-R$LPK1+p&MEAJgZ?QT(dOIrMH7D|2)6mANuV|X3+3lu}{P*8il5&43NW8466 zID(>`+e~Yv(}Q|Q;{c^Wg9p~|%c^Zk1F5eK7fJ_AxvaBV`#vLEqANA(QU(SsX=%Uj z5o`sXK~GK-+{!IYsNY`6h673#m~`Xk#L-g3ROYWxn4At#&O7s5V2SLS68m<_fDKxK zR}|qqe8e|p&eMC8w7PScFdSgzLrChe+^VFR{Q41nHvY3?;IJlC?Ee5ULqI-0s`A4^ zijyx+_i~js4#ws4Lb0RxfzTJRYEa8KC)+Jk%wjS0d-s6bmmkQOLZ**l;YK zPN5c#FktUc0YU}auZQyyLtvK!1){-P>l%H;coAzfbH+^g_fBouSXNVXrdmwPUR2|Wcl`R6Xcdd}DRnWX{;wx*qtzrvpaN-U! zm+L;sfYCtH>-xZI{{U`TM#3Q(rPk{v{Nk^Jh_B zARpYs!D^^6iIAWw{mW|ecS~~C{_hO3v}J$Xa)MrLy;c7J$#Y=_w~vW|g%nn+HW~in z91+Pnzux|m_MpnQ#$rxcV&REf8Y-^8*%)iQ-QpR7SC|3|2j*;0fU{MYsdkP>KkhW> zPD{G3pa4!;JV9MR){4)$w#ils&B7HTkxp&r?;JQG%l3?=DqlhW04^zF$OrrJ10vli z?f%p-E=KUkBS~?25%d37NQvec{!K>;35N*Co=i)LZ6luuBX9nZ+2y`m2 zCI^4t695(k^kTS(7g_~8FjmayETC`YoD?Y6JwUZxa$&ch<{F3<0n(RWdW}^;vi$j% zqBnPF_439L6Guz2`hBK(vWnShij)BDb(>7_$L1k$C?XiY?Mr<{P2_(_h>9W?pC5^4 zK+q84p`tZa9)NZfDh!F?VbpM-w}F}jyo-YnD+Ka2k>&(dX?1Zt*$ik17mA*+eb7CE z7f6))SXP1n)uT!tMEgrES&6U+wW_BNGbxwmHOq-%il{aGokFYw9Ww*MConBn0SHL% z8U5W#?f4~Mo4I89yKwSXK45F8t+ihBzB9NupfPK&nAv37d6)NMEq_SMM=O>vp_b=w znTMIy;H!59to~ugT*9RWA+_<;tG&xPuM;&OzNK_H?&b$B&C8!)cj5qJY|8?dkziU6 zFyhO2tEgOAYJk$mG&N9(nyc*#Vm%uPiS@;`2Urxs{UykbtI-b0aE6x9m8;!x7Ccb_ z;0NLdaz@ud*uAcxF`TaVleF)D65Z(87WbA|*rpLMtGi}mL1+@1_X?JdLfgbaCnqVyP|2~q=2HfHz9V`hU_Go;q<1S}PwwFCej|ik zW9AM=0N9^TaW^dr8aacE#_t%H5}bV;W?06TC}J%rZZ=VvvkbD}HnIL{{W#2NKDhJr zE1Ad4E0~ot<_&!)`hEWZ!kME{YCfS{%D!hAnteU9J|>_1A~h15{7l@z8>U}3G2<{{ zb!4*Wa%y`aoU}k)K?NF#vpDV!cKr(*4DKNXcP!uL1F#%H804oe0%VKVe8-~lx{DfP zAGEqv3CmlHcWYFhID(Tyo}sl6Ie>C#OQ>1MqgB9EwYx_k#nc4=KRO_WF zqZ9#cwJ{Wn;}bxXlv9{FKwkQ&o27V(Dx=mvGWiPYwqQ|VoPD8%HoR1GY^!I8tD&=d z=47ph<~@LIV!ib(rWK2#Qj1q6KbWdkF~H)!WuXnOPCw*HsM3MEx0_1p;|>ikkyxI& z_i*Jd@7`?8hSYtvA`}mFPiNJNnJBK%4APrtWyN}om1C!ziva$|J>+c=R z($5Jk1z<}HZy0@D)C&{>GKCx;kIb#Y2I<@VsZ0oxc)T!ipj8e(iO0sW&l!OAJ>A?SD2+O6y5U%W)`kJMb%p|wXWq;?qud`aK0dMDC%3(v@Z7x?w_TH zxpuGO2yK=bDX$7@Xjrch1hAvV<}%xFq6W;jxB^&TxV9zZh_Mj8U1k)Gx_1ec1@;U^ zFqNe4SbzbWEPH||(~(}FtW=`P511r!z25Do;NJ-=*9S)?t3HZQ}>zkG3FKXD6XTpR}OE^4ib&(QTSN7T=cu8`ON041N_=mYUE6!Q$Zfn{D{dO7u(X{&}Dnw!WsT)}>I z1xv3#Lewgru32Jyv0h6(O!&u$S2Uv)(4`&zWfg$uF<@9bGb+}&f#J<=pzT8~E;Soz z3h{8z-&l&J8)+(-3=}pWVO+1>yG8 z%nBb+(8K5b%2}=%n3DxgsM^ZK%sdw zIn-#dm3ObaKo?NDdg3h#0TX)jxqsEiDGZBh3)>aykF*YwTTeS{k5Q%qwkXGMETFYQ zoTpEil@U_h4B7S~j*30rKjgIlLI_gc{{VC1DPlQL#qT%&048-1*r;(|hyVf$GFj*6 z_Ks4UylEecyu{`pClAT-EtjWkzI@9ap#h6hn0(5+j?8$;UZAS%FnKB^smKnG*SPc% zCfN?Zh$(c97t93|LtVU|q&H?N&QJ>j0eP;bS=exw_d7&lx_rbDM=ERFVs1BsEUd-Z z-wEtfyvP=d$5C87zJ9U0`Oi>v}>#{ z=8eA4Z+tKSVU=ZrSWHC?>Y^fZKtA%n8Xj;)_1nb23yA(p+^r?f0Owz%P)K1a;|W~i zn9nvY;*M_hFE#dye=!zWiHzb_EGME?E>=m6%+}yzGf7G8@4PTAO^}%oQs*%Nc4pR5O_+Waq?O>tdx_WNQk7BW`6>MlwvI z7UNOyV?^BwtMMBfp7jALiL($Vgzd`#O9gyA{6S(7TSu|@iK2xG-fGWsz%6@o^Xe{C zVM-rGo$(Z?8_4m+!gN4%zfo3Tcom+dMF2TdY)e+svk>UX8pJDan5}|j+GBDnm~nS- za;s${f2=gA_L?V~fjH<;Ao(uOv?^7Ev4l82sd8~p0ytA*>QyZf8!4Tf!KQx*8@M`G z=lonuA4k{Hp5-CAS;W#{`eMAxJ7#|K9%Ee0_?cn3;=YAyQ`}3HolI^~DJe9G&(gjB z0PBkX0K)?R07!a^HR-S9zO5}RK9qIti9vK%UUM5zr+o&y&V)9Mfdv)R>*j;40l@)7ZTuqggz*mTuVQWi>wwGm~{{VV~*K*$SW&y1NfuhnrDlCNt z7mL8-#Xuy_DZ-6zutD3Rmb?>&D6~I_NS2{xH2(m(PhwP=@rgo23>Mr(n_P>w2(&7p z8H^ld#zH!(a;A;q;0;O@!EF9}gSxbJ=)NP6vR#+gxnTp_IsV*m3lvP#yzvN>3t^)8 zhv{9lf3!^~cr-@q$MXndh@nwQF6vfwE)&!~AKz0$%<`WpX4cxg=f{pAp*OPy)aJH= z+&KG04%DMc!KjXqI%%uFJBVfgOIZ8jR_2x4cUi9xf>fZbH9E`$amx868_={~z5f7s zf(l($-(nC#c?$FJkubUoXyV~nsPZC@AKqn54<=}ASVtP_3WPB3p-?3u!JWqqlL6IA zL|u7{#zWD$%&heaw&%Hat~4lRS-g3P-N)P}QnTP?$l%z^yWBm?a1kc@W5&1nv6pFM@&LdeQ$X;>!%D{On)K+qyFXo_H zTCs&@4h!P=m_1V2#r6C`ESjrF!YI>c*}9SCV{#&`4k z%5Rb=$X*}jG`Po`6(59+44tdz5miyT1iZmwq|=FhEaJpVsf*YST6%`K4qC)TyHRCv z6$N%EtwdJT6i>z%WI`##3ApurjepkLFtQ3$^2)#r>m!p)myX zdfW=6F{6Dz0BYnrfw-C8X?c80tEd4r_k?1?luDhAofEQ`hIaZXX2`bH-ZH6>ZbIhnPCQl5r;{O0xn=wwSh`R!wu39NZ zu0Du3QvPA3UXX0#4PFnoQ#t~Y%A<3wn7RB|6j}db^VebTeZ@(Z$Ht)pi3+Emad--f%FDl5idejZ zOq4xKmAxSg_+L;Ef?F4Na-N~SCszf}bTC=+yd8QK6^#lC-8 zNU6xz(RpA2KO+^{tq|xP8p~F0ARJP;HV}2p?$zviq&xr z@voxD)z`!=Z66b3+yrd8{{7}}@f8LrpM( z`@~&dkJeaLaan@w$;H5ATA6&;KQg0$#74(0au6nyT}2>pQqGP$^$IL>yxrmru(h0H z`S@!}Th z1o2VfAR}D|1bHB=+V8yhmX#C^X~!la5l#a>N8&2L0Qo=$zlhn%-JCImA3!u)-!TJh zASloGsE{g_v@51`K`W!d4Hb;2w)KaYM*$UNUoYEGXDU(+`Nr97s`h4 zxAp}wCWJ2!1=5%D#8IoIx*ILucjgscrNt&eaqEw~tfI{_SkiYY7FW5pVH2zwu-v54 zK`A!Qh0&cxWGazrwEo+Pgryub&V1%06auYS*`LhH!j;G?m<4q*}Hsscl>Yva2$kUCriYTdBM(sA_Ut;`V)bU&(=fXkM1moNwd3l#On-|cuhMP#@@b7-20_iDEw=C8etIuDw!kv6R@zVMdk@x=q zaU)E(v*m`Qptha)j>Yy0Gc0&`#ZQRR>j1xT*Xat2S_x~Bie&~+ZKq3!NqUb;{uy&%k zeUawwt;N6+hn&1YdI;CKZIpIID{3)$%)?bZ%dy5@6Hqd24^&sVmRCJhVl1x48#k!v zavOs7??*EVP1#i|GHJAlkc;u+B)c}z=ll9Z)wCn-U0|iPgM3O^WgHg)rK~Pkh}omB zy!4d6iDu8E)Y1Wt2C5(mv%qdJG^1(g{c|Zxq+G2rTp;c#LJ_(lQnkB#SZ*(~2T{{J ziXS?QfI=#3Q4ChAySN2f(O#`C25wc0giRSs# zAu2R7Juw)W;HvEW%N8~%p@STF%*Vp^I9s@qt#U1nUGuqBlM~2*IQ0?$XayVZxl&65 zG#}w6kb?4k+xtp$m^}{VN`xwK4k2(YyShwXJVgpiGG?aitvgm4n2t5sLXzK@2_Xi} zP2Z?h08BUEQQgFtF zFFTtxc$5OAEkHD`k?$bXO21O025oeqrIeCl&E2<%Z&=%kc|lnul+KDA|t5 zZfyDg0LwllX6HEiW5?4skES*C#=g8~>enAYsY!Ubr~d#|K8R}I`i5931^e7B;DcrB z=t8%8nK^U%%+ar*-5a}|=Fwmv*Tx>3xkTn5GoViufvC5=xJF;V$MP4${ynkObwUwDH$+czpvH{S%Z;Zm=TOdo9d;DEEO{Ck62KS z%x4`;8%{@S<_`*%O)Fm;f~00?EuL{!zYu8UoOX{)q8OpN{M-dY43X&2Rc5aEh|7=* zwAgrv2?c-=>m!XvThrPu-t`JxMMslnV;b|CX#PK#6i@~R9beuP!N?dyXW2Qf9h%5d z{KjFq-VLT47Ybw@;nc4BKs01?UhZl&EzNb`s1C(RLc7l%bqs4tYkv9E15F2oX$<-C9x5%r1FsUSIv+V_kIjYMmD|Nhe z7oNRpGQ+XieUa3yG2Mx8xFt+dj{4^BnlU(HP(#DX)5#Ru3^zR27HN&Ak~Wxg3p&& z;VGXJB*^FahW*5@gm<{mTDOiPL!qbb45yVtpHa3`akG#+ zyWe*dEY91WdiCNY+7)W&+bKL!SRQVQ`+P%MF0_93lQg4vDW0BvK~)AS!86afau{xy zZ;)IsT8Kh@qa|S$2t8QK2pm5$$f&_6tzE4cdBkNY7_^~pR|3K%w@Tu!8%^y&f?H~o z0()b1UlBoK9hc8Cn@OR3FT)4KbXf{)E4gr@R_!~9kPa{Z09`-y!8pw0_>}hpA6iO( z^esy>%AS*k73;tz#vYjMaa<2O$4F*pS-p=K9m(ppx=^j;?l<<5BOJ4Thm5CN1~ zbgKUVzaMFZ3s~ig{@i$~GmvGhq$9MKoT{qSY+P?Re0iAwLc-hDf8+*$jd9GVWfClM zq4Uh4GIh0EwrMaWJ{y)qUi_v;pr-Ks;XQjG7hj|n$7d;{%sH~m+svgY6goY9<#-E5 zwFaf+m9$W*g(a$~(-SV2XgRJBgvJ&MMVyJa0987Lt9@h4P))EY$3|eFxh%-7{yt+} z4>GZ{Cl~y}io%>Y+s%x0ESlAh_<&W`5I8=5V8GlLOr<7Dtnn7mRRTtv;g#GA?^xsT z%^;N;=U!J5*h48W9ryDR%FAyegYiOh419o3x-R z2d?{%N)I)*u>`4|DCe`zAQf}nK~#^kI)<{!UR-||oG$>Y3?kvsSC|7U%0Y5#H(K`@ zKsaX@p-!-nambY$bCcW()-PkG68kZn9++9PqKZhPs{rO1 zbHf=aE)`OJ$z9U1Lj`$rRPT6T(+<{k_I;C>pACK@rZA3NF`<_stBrB@%;~*FJA&}b zb!@h;%v)`iMX79C`j2o%+ntj$54lRXHv)UU;*O=IviTWbMI@xvZdXt(^0$xN8>njOiEUjw#y2q=HR0Jt})H72t8Xb*C78_+~73TJQ z(czc`lC4#{^-_e7HwyV`*i4EI08x8;ji_DM0C=Z27y^ST5v!Gev`Jkv5DGrgM2AT= zSC3T889SK4l#8n|QEr%(PCP=~-`*%<{{Z#V{{TvTY5xGpem7tByR!*F+Ap|6-PMrw3_*^6uFCi;l6{a~P@T|*{$AR5jbk5F#ZEap*WwQhCl z0@_TOvlx^xWNSRY9W%H&Z0Af%7SY?9iD0l@^Baq|q!#n`h0=oATGUa@CPH#1!iKXn zqUPzu5Gn;$f0(JXyufgGi+=b(8~PoA#?$EW8QSJ3QD&@_mv^EY)1a@G6PY1F3&y6x@#K(WP1MqQK*-&(c)K+Je)8( z87{+cFqLFB@ho_`D~j#{5dkfEFts^Ap?zNX-oF;^=~7_MZ5aTSY?gm& zB`_EZ!KbL#x`zSt85T`BScOyrAgl%i8<-FP*7xEKMJooM#6Xv9sr{)#$!;%`XL6e< zF4}zlkck(Rb9%VLg`XhcdT}mbl8kDt*W#cJ&_t}MaX7fp9GY_0-1wW)3`@rliOpm@TR7@mByTLdsijsxb&lh#V=?`^;H2js`^iq89!R zg++RZ%dMfoSTE1>4NFX$5@wkYs*x)EZdq9l!O<=tfgFj`1OmJV{iRV3Ly$fGjBch& zM%{7q43%^k7z8U?-`*0exTA^RAa2>62{5i@b+yX0e7Ksj1-c)I769cX;*)qZLIvC> zC#dyB9%ZvIW-LG!tlnW==xqhosaSc`G8jM!$erR8G^*z4xPa-% zVFadt1?^LK;^S2w>+4T*#=e-;&xyvqwDt59_?-O5c$UEul7|qt5F5A$Z8ZeF%v!jY zR|J+caW8k7qGqMk#)IgtA(wM5Jix>I>I_(7Dy&yAUN$qBiHyAS4s54PTZGd*iJH_# zN-kmUG_g+-uMgHWg49sU*&XK3zf~@UK%2o$V>^{0Xzto^Pyi^vTGNzM^o1a%foE>B za3C|JbP>fazNTG3jqPKg(Zp9*)nGpU^#i)QtE$gcm_-T703P520d7MsjEHgxjLKX@iro-Y91CzUr%3K^o87tIRMSbTt zKls>xfK=9C+`QDR!7LSB1qa?YwhJx&pRBZL9GB>haj~#I@e$9^zJK~VC5M=mddK+b z8|HiZ+ZW6{%Q~0TGg7aON;Eh1va)1?)%-vvbJfdmI==pbF15re@qcKF0nO9|Ez9|x z6CQhpb&%D|DA`$mJr|fbyG!6@+Sa?R%fZ`P@tc$^f zhEOk5638LCOKJmwWorf?yAhK%XZ}TohWrtB3hudznib~3&zV4OtpGS;y~-E}mF3Ce zvkFQ8;N^D=z%LCy#Bv)1saDvM-az5o=Qjz+8NsIaD0-PgzqBA0%GUUJhHV)IZ!pkC zwPB|N#BLUdg$qlox4&5<=iFEWSCV@@OH@RUEy5?0@l_q{Ak<7#aO^6qA);`~Am&Y? z(?8xW1evI43xKWGwRESAn}j+V0Nva7k2;g~b<6nM-mh9NnuWBI>`!4REg?W}nE zHP6!oq|bm5A0Z$V6 zNxcxg1h5>}nP!%|$pNak?uDz=K*+zmMSStg95@4HL3sX9JH_=f)hn3A3(4GK6U|C} zRqbrwT8V&GEyuuatDRrO469p9bn1`wh?qdC0~Ml&E;7WtRaPC+sQJh3Ds7COZOC`1 zFVIms4R1FXLtqV$iEA3Ddj9}(pg_jY9xHIL3u)`x?efElSYP%MgkE((G5o}<-3%TV znCY9Z^bs2E(@!hhqY;YVoj(gSqjHB0^Ozo6_=8rtfA~ls6eb&$oIpy+%ikM{n%t@V zVO$S#%VDA(eEwtN^@fYqa~^=(wGTTH5&^L*{{TR?weSA`i)?>C;h!*RxXmou4gCX( zyiBlh4_P3Naels(n$!ZVx{vn|D?P&SUBJav@ri*`2C<20g57zGbQh~QmRhX2f8@Zf ze@GP8&Y_a?;u+w>28gVzUvRM<{KcvZ^#HcNvBS)FN<4vyO2A%o{q7|~>=b?ZnV^e! zZl|Le+!a;YsBu`CUFc`Q1PJNp7>21*uUU#Y-b`E-EC@Ky#8+yCbrEMQQ!N7PIn-Ls zt?KyrnG%@W)DQuN*HVG^08+fivcq8x{`IMjpaDRwem^W#0fA-P3~(_H9`0?3E!Qwz zOHK|_`{Plv1uOVU%1yCFD>#<|)1-KmVOi5(q%bU(N(m2cQvUz|{{WDo-M%*(?5etP z)Ip;t+$mK-z`ZkYbCx;{HB)}ZO3lKa)OC$yTsp&>X1??=I02ve9;6yLd}FOcELmfB z$gI3VT!9=u-+0?Xkk%J|H^f5S0oFP%?_Oo7(Mw+o=kFRIIFjgeAG}$FD{Bd)LjM40 zl0;389oJ8t$`ENCD$|S4_MkurZD)huP*uj$HEta$WAQ9aTt%y8qs3?3egU+|IB>Nb zq!O)^t!I;enOb>+cX)h6FHF;8intRH%m#xx7x<~%SEtjxX*vyeMJ- zX>jsF%Ea`S!*IEi94iM^8c}~D2GVB+ol?YU8~Nul+M@-!^$}bC8cimVzCM^| znUR+Kf9#6ocvvqt7g1hjFGKXI`glxM6#>2&YkJ}cQd1GDfHa0;cp7whxEQxvYlv8x zJG7}%mfquqgs$M|DOxiZP&98Bo0bT9rKl*f{^SPlCi=`E2zx=O2oZbp@gChbghy91 zF^IZ`{yK~j!rIVYEzjmx>YzP<-b%OP3AM<8udH0WLwkY%!%i~@3fiP{bCc~cIw%TL zs^%%8$TycS6w9_lX9gGZ9bjqfy6LDjXuPjFJpRyVuPEJO{{Xp;6mjQG#WX7bv#a7Q zIAShIi#wMKYErJ;`IM~x0Puh$DNXo{;1C_?%u2`8EGZ38u9&E(?>K}goZ;)Zq?uqU zmGJ8ia@`uU6`$do{{RtHkyUT_B^PJ@norZ|k2A;8nD6LOwhPW-?&b&FF$Xw;{j*TI zFK{dOhO53H*4{H0V13}?8Ns!P6u8_1U8&SA%|EQXA&P>WmDTeL6HNCoex<=Kf^l6; zpkNz@Y^+y3#(|=Cc!k~K{mk2Ln;gImDB`aF0KF3|IUmftt(Lb}exQcec)^@Vqv72EozEfM`r7ZOEbKoC|U^O$h0Db z?HiLRV354mG2c=f!JNt{sHb7o!i01YgJmV-)Bv*XZtU@b0c5LpF!MC1gEGQ03W1eh z7=tO1-OK3gFb`PVa^>ZG{{V9unQG-5We7Ym02JO?gUG9O#xG5C;xA;hicqcbL0(m2 z&_3}i(D`D-8`KuK2Fh_>iAh@}hjoxBc^+U7WFQ047i1HSUHI;x^dgPgyp{dL*OsZ< zpU#=;;uMM5%Q4s`AgZhcr!-xT1O7pfF5r&9yRFOj*f3+(;(hfAR}%0wt2c*KUa^T) z78JCO0+%$xdqZnBoAtPxxQ(5hT%=qwqa(WN;k20oU~RuUsP?hYP1q|uj>p8Y^^P9@ z0Hmq30iCs>g%In3N?7{+BPD{2fbZ0|x~$W0Bf|iND*h9jingGj)JzP8J&*ukRZ=k7 zwy@cni(4QU{W*rS4K$~w44F*QmG*!dCoV_cTs0Yg`LnOt3`#Jf!ZY5F09->3I1fO`dFySgA`9vJwiOXN*Nv0{x zOaA~8x%$)p0FtYO(Rud-ZxV+q^uq+YU{(2>qpFzg$1uk^?3p+piD2fie9d{s=1_B3 z+-o88+@p~mW0hU)T}l8m>I?Mq01cPBn{|$EU2kE=V1Pg$GQpO2gYgFa^z;p8`LIrBQW*^1iw=b?HtEP+AGcOwz2-6Aj1yw7? zj1Y5@j!≪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 Kyt%B{>}7)E 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

w7tJON;=XwS$C>` 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 diff --git a/htdocs/install/doctemplates/websites/template/medias/image/template/background_sunset.jpg b/htdocs/install/doctemplates/websites/template/medias/image/template/background_sunset.jpg deleted file mode 100644 index 63c6100f9646ea4bf97db5494da0d26e2f015015..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 368448 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 *t*wru8UyS-Ivy?BEW;6vH@VChTi0 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 +|XIw%`F&R zXJ(n26@PGj!6W{D;^qg11jlFHa^P3#mL4|)VKi3Y!+ie7tjXsi2%a)0s9p6%VYXfI zBh~H8Mme|V&ipP^XKBks^?EJCTMYWXO{hjziMelp_g^3Jwh~b~hqa$Y$`yq^P>%hz z%vO!5ozwXX78-Yt`D-arwB+nvY(`SLw5=ZFnQ46jvVW4!VDvMVuI3x9t=ir*V|i2V zLAlRk9^@v32!0tTP4mzOCE-BY2Ho!a%~3tN!7uHNg)K6G!srbTPkswCC}Q9-X^4$|DyX*SeDqxZC&U{l(I4L(`l}ife(B093HVy zKw|3m<=b?93yzPV{7ji4KHWvx6|2D+@3Pbn!+y`?H$l+vwNgQAEHJT-Vfv+$y zx2i|9!WZhQLRzUa+B(8Rje%Sa)grm9qBT1mgDi$p#cw~~^^n`9^k!IUU*vFy&sJ!6 z&5h|}aB_hq`v#inz-4NP&}k0!%v$2Nu?QnAJI`9;0;2ww(a-Q-m)p1l`;! zcI*E(Y~}D0`GcZ%d&h4jCj-Q5n8Sk%Pny&G_;!`5bZm=32Up)nkIm`#6LmJk!%KDxIMocn#)}311kMkkq+NHinqGc=DQj z?UZ7P_oq$aPK<*>O!A>l^L_nxI`6aSHIfWYeMo;sRb69Ptx)1HXfN+l%^D-om(?2NS}Gu_4&~I_}Z0SmRagO`&5U^4^(b55^_@kz*;qx6G29>B7%od zL`vJ)F|i)gTf8J4pxt)=@?*}ZoU1et#^+u&Tv`d)3tYdq3pu93@ZI&PDT-edhbqX= zYsjk6uek_tGE)Ulo4auJ;rbrUvzn=?Lo1Bh=}^TX1yitSn&W&^nC1ihgQP z;Ps4BQ9_ia(s+N;ei1ti!F(GScs5%sSw+^(EiTrf->ZSbCC&=)# zTKTZ#ASOZM+Wrk+1r#wmC+;L>%?mbOl*wTItlJ--#?(+Dhh$mNCGX3@2J&bQbw!-4 z)_SgC*t+zC9=sW^1?`evc0@ei5A9JD&h;HCw-<{H-o~-xXA-4zDyNnuWT6hVcs*Ee znvbZrV(K%W0Qry8%QngnKs2t>lP8bGGlG9VdFt68eE=wYh{8_~YH&+|@VFa|X3rcr zHDW1*%-H|1-(HI}vxjJVZ7Y42OOa11QN#N}y~nAlu&VyH?3q7 zU0O`DY`Fqf=Qw|LHL45i>`b2%^~th4AmrQ^dVl82%0c~E9&ep>?-GA$g6Y3G004&3 zZ;0NXJM*?2pywHyROkJyoL0KW!O>fo2OvzOGWrIh#u93hd1^MaUW7wX#H(+3c4M0h zh{ocyV;rw{TkJbDzAyBJ+ijop{I#_S#c$&M!%8pH)2a97!FpGDZL ztl1A1FVpOlg)R|>acggdyRa_B1z8#Y3=OT^N_$H=N%{Lp`0~rwAAT;YXnoN?e5-|JB{RJ?Y86$qsA6R)_hF&yjOaBu~WR2rPGm6%xE)Wf-OVa1~ z6@m3Mm2PD9le!C}7v@mqoX$tSOYy=66s#a2mj!EvO00Xo6pIeSluf2BEH{-_h*xCG zq1OJn-ZpmXG>eNpFRR&-Zxej#+ue$3|08_)X-0}C8ESshbbVv59`GKbQKIf%ZPntdF)W;1HRz+6FxiW)4=>_&blxCp`0hngQxKmZI?I|Lo8CX1w%p)0S)Dw&0JVFSnsHFGOPeSkbl5`8 zk3ag2{aFd~$Jq}loPwGyC=48B)ckfi6rIV7G|x@(pQa#9z(=HR_Aa z^09=dE41QQwniNEIQat7NxRySyWGY%9NN601Jy8+cB^FC1J#I{F8i=%n`}?Y)rRFN z#YXvCE{!XaM%9+rxmPjT zwl#DYfc4%A5RT&Yrz-Pzi^iB4kd%DekcsH<6u|s?3!5d6!0rtnQ_#$9LOT3q?3g|7 z%2rfZK8W)MEs3<5qz?rM_AIHYjR7uLBreJdX1(cOsGOz5GQlvZ!o*i<`*t|^GEsCa)Bk>)`@7kow!=hO$xAa(sIS#sC0xEeTp3SzKD zZWd2XHj};-BG|zIM)%3fsADr)yg~qrUso&s&R|8k^wwYSMLevxoqDzY3l1)*G1?Vn z*N)GSvkm7~{eJRC{wemh{0Rldr)sR?km4HKs;7h%wtP}^c>IIAG%FI4&?*cUgF6?!h&y|WcAo9S9*VqXCk{OThr52_ z(dn*e0|4~#i&BjgPFQImsYrMEM; zy+;4_6M5Um$<;aJ-0Xo5;x)HzW`IMQEG@YTqct`&Ihoaz1rB3ylRu-4*`-b|Vz2bI zRD1`-p;?juvZ^$e$A`UbYxopy)l^~c9F$?v!k^(OD$<*ItUG@Qz?Fd7PWwM_?J=0J z%dYzu#*Fv8z^XR>LQ-wA|4Tx&R71eM#`~4MlQC4W5Jk)4RBPj+zJoVuR>MuG6I$Ft z(V;P5tw~Mq?655lTeG&9;kdZ^Y~pgl%`9Uo#VL^8&U#rPo6>saW~G3?p3Wvkd&1SO`gPOpX1k zo2084Lc9BznZ6E@h`arg5=D-6VU4S$V{AXHB1O!a&@o7+atLoW+}w=iyf zBw}ATp&WfUcU5+IR?rJva`@vVt17Dk6%#&v`r(Tz^$>+0ZZ?!NR;tRyyZGN#06T~t zca=8>Jn#d(^1^x9)Ck-f{S^0w+%>U?_vEawc(q|-QS4D}78RdMut{Kzk+tW<%3S60 zIMut#G5N3GUe5}i(0(YwQpTuCt96DbkIBXRqb_`-R46*c+BaEau;Lc02+L!FRBIL^ z!(rkwcxoxA5>2GW4~th_+Q_D7Jk?}j(V3blIb31_e#JwN=ik43=FrUZW*;1% zKk-gZJ>!(}1&DS6k^Mlv#-&-s2^EmbeL&bNY#0R6N2QTej=SaR_ZI;b8zdd~Y=w&< z+N&DQR9$Xz*3Luq6`xb8zF(9sOEl98vcWnv?V`Psl=WD&VV>+-3p}-&+@5_%s|)N* zGgo;tB_LBUxxN`zf^6T|fzuaMR@g8Y;0zLt zGtZS_BJoUEC0|v}3pXhwZ=+(3w=CBsG3GE#x^e&K$~duBxi_u4YJN3t?<}rXPq9M; zM@0w`Y%2`eBTwVw%>&T<% z)iEEV@}juHDHj5+#HM=V3;K&%B`?n;yA)l&KgihzLvFF@645iu)QZ(8?`N=CZQ6bE zWG!j5HTRrWcyqHOFT<)Ec_Qk^jd7{j)Z}gpo9nn2u7o+Gin$EU7@1XUhKk*0;Bnco zDR+Dk&QrbAnVonk=01KL!m^A}X3-2T7pWmDs>+|UyI{=4G<;{LJt{sE*ked-Zy}nVAIF_5QF!rtRN}+*XZ!qDJjCoIq=DHj&`ELLF+gjIQ59NiC9{{Goc3ln0^3)dzQl#`L!!8K68>h zw5VBCGy?=p9?uBlhJ2k-_@}h%4f&m&ZQ3L;)% zEOvuZ_pJu)E(MiCdN$>A7Y^&llnd$G_&QCPDnpWNO=1(0 z?zXE)WXS!{1y^`Zt$bSQ!}&h3dDngLL(j_yPHp_}3B-h%@QZgEf0`=#8-fCDj-3cp z@)3nD1Wewe-ML@KELFl~whUj6X)VmerVO1OHhLY_9HCI{)<@MW3sj;UVs;0XMlL+| zI3}MEG{vl1%w@Z{gyV(z5Lb;uVU>1ddb(;wp(dnyW0I=UWVUimCd^lbEA91Mu0bbY zyMkot$_0sAho;QSpqrB3Sb`EZ^6QI;WE=JG{$ZXH!DyLs$;hyKr~snf{Z$5D-vG@O zO3shKjvoV~p*moH3cX@yHY9Cf@U62^gocFT5 zMjNa%cOJc3IzG%ACOlMpfW(da+ET8fD8)_3mv(fS`W4a{R-cCrh5_!Nb9PP+1I2U5d*V$P56$d?(2kXpAGFy9E$xCzy6 zN_2QoHf46Z%`ktnth~eV-z%4Tu{|i|iXVboexTw(KJOiN^g7!y?80pj`-*-~{Ut3a zTRVa^YTo&qTp5rE5@~nLgqN(@Yia(FzomtMb2=6Ktz;y6^J2-t8dP*H9fQO`mtN)i1Uxx~wngng^ z$v#)n7;T-+H!|bB!9fIr?dZp3D-&3rw4qE@hqEzv#crQuTNypOhxIR@IZw9q;C36- ze1zS;Khst@JhOTu9XehAOd{h(?k`FncE}B6b?XPX#%s01vmUQ^Ie4q&hE9xZZC7pB zR#tZQ1+AnaQ~HJCX43N;i7!JEdVuPmx~1-?-l4;LCfQUKTilQq`soV=p;^TD^HgCP zM^=g(x5S`L8GIo4b8IGJ_BHu8E^)f5=^yF3%THARRn>YWE}=xeFI9CbKJ`H1pJeQR zd!1X;&*F{FN*NgoPC!om%-}AF8?h2k2N@?CQs*Q2*^AQ>2dB$B_H7L~NsU!y@K@4> zR~>j%wF~RH8;*KiEOC#DkwJ<`8SSs3D2^^o-{9vVp(!J$RJ78VQK4CoxfU?rqBs%# zZi{J%Alxm%MscEVLungiJ10|=D4xL_u|H%%o*YoO<$`Yrv5j~CIbw@{?{Qbs{^bYuRnf&tGR_lO%C}#Ln zxCbKgP)Zrq$?UG%-3B%T^@a%*Rnu{-M9Lcx)7waxl)n(@m;yNp|N(S55$7K** zllPO*B%G3=)(SSkwkY{|`!w=1?jtTS$IK|=#_sc=2lMkR=FcR#;{e?v%U+*yhA)Fu z^u>bM`ud&2t(k+*ALXwIf9!Q=b@(hF53$+tyU^l^9TE!dAbkM2a9neYESGw2Qo}t| zTJB6CL59T#<|2-9Bc$ee?aq=3J;PqHwVvmctD(-p=ueGT@g!9TH6CUl!NGP~%IXs7 zd2H=+;jc4w={A+;rPS3R%+Z(Mxw!OPV>zQx1GJm(-lRZiWy*)sM6} z1uvak=*Suf>qBW$w=g9eN)PY~dL?Py2ECvTQ3Ev->9YH3jPe!6XB01FOn)jrY6Wci zB&GqO5fyt#@9Hll2Z2J(lDC@Ng(*U2f{`{Rai4YEFej_o#Qyey_iiW;YAK{k=32BQ zy<}thRK%z##gx>4$!98$0!oj$;FUupf_O*GYJgu6yUiJ#^&&uKsc{+m!Zl%5WF`c2 zdWfenGR!EvG!&&=ElTyV&e@ocgX+&|GCj$`_GF3QPX_!>bYrV478L7Tfl5dgT(9S| zKufMsHj2+&m@MZs0!;qiaw3Pm)9LM6Ue0)6wG|0a*|2iVCiN_CVIt&ie1bb#yO^Qc zzDaT~P6Ec7AH0z>RuR@UFF?%6^J*sJ+6WCXRbN#;42436AlqRSGXu79vvE*`dKFQ3M)tnqMkVv^1L^^nB&4SRh=XdhSbwH z8Dqg$*uh?w(B#ulc#pCvZc(Ac`=Eo0YqwR`(7M-P9r2>g#;bXmBAp+Kmx z&$$E6X{3wKz(3}esF7DLb0Z%~8Pkm|`V(ZxR$*c7*!MPaJ+kp@_`HqFKSl`gDI>w?u6@5!d_@KKc}+9OHqBf|9W4f`c+ zi}|~>?BkgiS}q&+?utMm)(%@t1i~@a;oW?Tc)SAK`J^qDVJ-lAE8%vE`W*g^rSc3X zDQAEywyLglVx_^%>C@yK8)KP@qA{X>yFv!>Hk+_`!-)*-#2D?nKW2Ib5ml!FvyD43 z>@v%#j#lig;$O59w{BceweQc00Cp#?T^LJ!(YW?Qu4btny@{8`=jcD0!}v;rT;uxV zh)Xq5yX8(6HLYE571r_FVh0N?o@YtAxp}->{sZ@IBC*BHPbXH$fyY^>MsKxse98Pi zUIz%MUiKKm3Bom>MkapmMWrnv9WJyd)!$cZFEr;T@k_wYqD{fYYkIPrd0FEylZIzz z$_()5Hc?I}6Jv=Ki9VFoKbLFP#O^F#wLWQoR*wv@!7XJAE_cJYSje}Pi#BV#!06xz zO@t=c&~Ho#mD$9d<8d)YONc3GFK$nt3sd`bUtF;N=Mt$*9|lBBNQ+mgdqSdFxpJR{ zCfl$kZcwRim&3T}i=h|3?4@bqzG7lF#}%SNNf!jpTW~_Ea?1c;0{k{Bug(^!AGUh4 zrnEf#Fyxg+stOC#M3GY(=$Dr}&}JG@ z#(v3T3CPFv9MfO{8$CsNB+NZ>(rZU}PllhiPqipo__+)Qkc8d=Io&YHSBkf~6A zo(Jh2vm&N@zwO)^)w@y#>R4cQuoN1OXaD^q*Q?R*kHM961~r>i`t6tyOc{S8bvqvu zWrLjp=~;-gLp>%ri!J7U9vxYDJ+F-xRzp*4SWtNLfI&`agh`*LG}`6)+RmK(lzR?$ z;K3*jNH%^w^{k7|OevkZ0N#v$&J7nVrXZGmJ!CUd04f-1`i;^<4SewxLT zcN*H3owT;U)AyD<7dgUS+h_1F1MZ@2G0uDujoG3}sGjut1z=(AcsafQ3FFnkaJgXIQlq7n5Ef z&6)YN7s_`4f?^C$@afM7mda|h@a*s?-0~AE*eAfB*4_#0SsY6POw2lWot(a z4r}kok&HaaQ4Y{3Kp>0ore#}Yk6IAFQcW2&bq=mpp?LmQqXY&CFs-K+58ZGhwAUsY zeJ_I1PFt>>#LQx$LQzERY}u%9?b>oh65!@T3&)+A#dlRL;E1?XQn(NKTYWK!M=2)< z$EsDVGq~4&m|LNmY}MS@d@tb;qa}RL7;sT@DsIPa#eL3NZ-D7YEIu+xjqUs3Z`FQQ zZM8Fc3F2v1bpHMwlJtc5A88VVeloDV&keSoZZ`4>mI*Yo#wEshvmzFRiQ%fIzY30m zCB&`TyjDe1Y$(Tg zCi{yLGq&~F#z^>`bvH86oJ?$^dBw=K=yZ?wO02hyhg0m3 z93fzEP%CO^`p*n(cOd@|T7MU0$g&15Yx@Vr*5Nhs<-YD=x=(I32Px@7jqV9kmSW>W zjGOrcnM#?u4E(t%zW4xyHGu8nb|~yEQ)csP{~Pb>_Y>gg1RLW24zK%| zF{|HCk|KUTA={W*{tm{f96I~pXWLfK+}cI9qC)vS9mDwn?@t6q($JMO#hN*c8~5}< z{lgv8z`8OveE`<#AU2C@ogfPqP1V>AV)(19JYx7qJB*obHmPMQEdTk8p-ElGLx~^+ zXj@x;Q!6~LnxyPTa!mE|*7m+p{erRW&)9S#W^Mp_x8UJ@vfFJ zV}0N2x&U$8iy$thJeiN@Ahmzvk11=GeMjACY}K>YC)qYNTqEORq%s7m*WpD)@-XXr zY(pR(&KXg1nPck^rls=6xOFPoSClOOnbX@@xzZ}%pNQ%l0=z{Zsra4s zcKgQEC^k4#m`2am-$=82zblN=yOiQ5_*`Z$DgIgdc5IkRCpj?Z`DeAhcE7j7oK^t% zrL4Otxh&5zCVJ&zhezFqE0X=Iu`auWeOL<9C_MwXP6O2k<&r|+BxDWQ07Q4bv(k%vDEoRLGJ#G$GpQW7R z(qq$&c&Y$O(&%2vIpPS>-YNMC{iPozf6%8oAHGMe^yvg>-LiZ3O4gyH2ZYA(AA+Y% zCY!~mc{=-0)q^iOe7-cK9E4BL=u(p{oAfhSZpY>bxECp46H)WQQiFelie}R@n=l#(0R6H3YU9agDNL8u2cM9Fc zww1WJceGWj6z4Jx+-i`N7~N-(o!T#Gdbg?33*gg9bzpc>Db8@ zzE`^AK#?&1gRE<&@6GFjyFdLL{=K1q0#8zQn3(901Hp}U%T7V40(fS`IS3^<)bnt+xOa$Lk>>hARkc+$;~wYp)|~S`--SoUso;=ft9i{SbGjM;djZTur#1nQp=gM7 z@Lz_?!xm6~#2CT>PRmg=(!z17=No)wYf|&-;L96n@b4#oo!{H}xB0xXzEoYtx?uVb zWj_oD@u@d4=W=w05NVl>NJZZ=*T%xb-o_A4>HYPgqiZRjyQ)(zpJnZDgEzUQJ$P7g z4B3u<3XEQvY>wlA<@`n|BLd1MxBx?9+bYE~o@NC=lS-RWltp(-<_*~#!xGn#WgOn< zGDqNrdR=yKBIMy6qoPu35H{>_(E5}*H1+R&^Q6g^A;p61LpQHuaQP8f-_hA-c^GY^}$FZKI7zwDF z;qvj5)0)LANGi|B2HQcdG`8mKC1Hv+$y}!l?esp#V*rpS>-Cfn8T|d^fAR7E-5yXQ zpL(NSr7rhAZESk>r!r~Q`1K;1H={WN4efQ(P6vc-5Yt3c@ZWatJiT7DP#MJ!nvDrf zNo(=S+y)1|9m$g7S*D_5B^va4X8-5xrA;H%?lz$=J`R|>Fkj>14mmcBwZV7AvI6@j zKa^$7vy>e)p?gZH>DMqkT7C*Tb5Z`(^mMfm&ubobsfw4jr=3|nC-I=d|u5B z_U!{L*nOt#edj#`)nDl(4i`gHI41@oNSHJ zAIqyukCU0-1FOdc9iHvj%rgH+%53YK?+lkXhciLP1qa~fB;9H!oB#F7S~04^9>G-r zt!o{oBfrS^@ZG>P@TZ`Ga}U0h4BV1;B5a(f20E#eRBg>vRf_R;og!l47)@+DNck~G zjw5{KG1!Fm*$??t#fK7p-^(BSkDT^!A8JVI`_rpYz0n3Js5C<4y&`|g!HpjNX7euD z=BE3{m#1Kv{O8p}VtiBDJgQ`b$@)ui1>GW<=YU6!BexIm!twXR5%LBAP z9ye3re|n!;YTw$sE)jo7Da?a=UB3&P#Fc1dQ)W|csjRb6*!!ogWjj;hzef;Ru>bdR zQAe-4rfIk&aEAhC>-pa$g>l*iPa3Q#1a=+KeFybIv|jha@ujhQH_4_vtK~i-ymCw- zCi4&E)8EVwPjd3)nU!T2;fyJKQk-PTmfF7D>vW+}*;nBo`<%j@V!e#Y2mKkY?G&dj z>x-8EQ9PhrMm@cay6-&L(AYMJaRwtsA*L3&>MF*3C^(!KMH<*3>5=hM5G^0trEuz~ z>=jPH)cc451Kq2V0EYr?rn*fy0f?JNC5IfZC0nJsW2*Akdsy`)WL;iZ=U@TR)Tw=L zB*14$UZZi*LEgs7zp#^WpgJzbjB1NHu_;XTLi zCl{?CpV<@!LzMmFoiKkm6>;QKrw3}7vhCr+_2{knP3OT=zRl~5Q|}> z2>3#G)4A-FZ|XYZr#E1REO?hey556Uo7RdT9gnn;iC`o*l^S!9%q>JQNLu7itSbNa zFE<^Q55RFTb74*k{^1`o*9ie~nMLo`)L-bXF*NU7$lrG=Mi>v=Z~Cq|6*J=`Xg4*c z_q{<&@s-AJsQRxRyUL9Xb2{?!TqQ_W>2Gm{aE5R>OM!1PmUk@;L1Ncw`kPkna4GLD ziczDlC-V4I2TXD?1KK+5lyuFzhmUxZZ>H_h3`Kjgqn$@vO|qj--=oMjh0MWd z&k1|b)K8DBdNTC+%#uZU_o#R8eCPMKm3U71A;!4Pg;SJ!B2 zYT0ntG=~OV8=ed8;Gr~YbGNwXpiX>tV`Z%=jfE(W<0rXl!lLa9_Yw)1Cm-Brbouua zQnb9{4ler4n(ioDlgH{30=WN*cC0GN?*qI>2RqnzIQ+&_i-7N{MVdvGm!fPQaNpIv zC|FLRqAJrRl{lhrjj)-5liV;dEKt{vTCx4y?L7I5A$P9PPa2p8pAW{Hrg0y&?Qg`2 z8D*M{?fm_ufV;eyUl&tXco*fjkW%bgzf3q^F#~pgb2tO!IeoHE@RJN-+v_)M+x&o} z9|YtY%dqV}N(A8e=g4DPs;2+vp`u5m-@{V?JpS(+nKZSL#~%O>t^zK=Awf>z`1Cw} zczj9%B4z2&$oxJ|u?gsE^)%?*gWb*r30*$6J8zIffdB8eApZMFY)0|I*~&4CzQT`6 zs#%Jb@%^hDi66K_P$I3$^!B5&^prv=Vf04Y0F}`ZX6X+ugVFbUc-N`=rcSH{$_AAh zs=01uA40A42ef5J1rX>AWL`&Xng{v&JJo6eQ?3elp7$Wu=D(5*NVKzG(cnV? zAm3cFUxf6|ohM^72uG+^beMM7Z?#GuCR=;kycNF_yFZG8;pN-kPuBh48FyQ2*7RV{ zBvcq{8g(boM}W9*neSNWw*Qj&2PJ%ghslX|gvt+ZZ~+Rx$~`xuJ8sAcblG2^WwT8~ zvVaY+RZic-Cl1={XNm7R@sFN&D%?lBxkrm!)6JB=&DdPsrutEfKthU03eW8*nAoDL z-B{v^B$6bo-*0&NB}?H%;JX$_4InLEo$uukfk?}|bVs;RIedfy&sH|0vt?eLN8$Uc zPqM{D>l9<)qD;d^FQDpG=m*tnnVh2M>aNnI5Bbc#DYKam#@Gk9f2g#5dSt*#zlC;S z)_{$?PH>z-q@1j(3_%O8Bz3Q36PY?*idr#gEWkl^|I@ZmZ(^^{_#}>HD^qn?k;C&^{(FH-)PLPARp&p9yaA-!;p{CVa834uk&uq zWwu(uklA+r-PWYTg9*E&*mYzJ*-P}m=#e10l*f6ZbgNi9Mzh+3d@y~3OZ!13R#>dk zS3D!&g#1n<_B`1;q#V2<*Zz8NxSY>NuwCC#9a$sc?PFrjNbl zbxheWO1|^jf-T|Nn!By356A#N8i` z_-)1%2)w?dj2L^*_YKRj=M&e8hQFU!o%>%?YK!#V3{jmURrj=drcigoWx01fQ*|+^ zH&dghlsY=X&U*qhFejBtq<*tAa3!t|sHl3q^k45q_Y85lmhNN#(4hmWe|LfHr0_y)^s@Bsy z@XZ&ICwh>>TV3p;vGou2MPXNet}*z{L3yM^M}Q0gH%X@|Z#h+uR=FNd7gbpYb-wHY z>A$XPp3+3HUZzY^Q~gB63uea#R7utSMlgeKiSE}mNu+iKkt{q2pu-5~pZ5z7 z94#zkFmV;qkuB0k$K&EUt8y7MMYieO>s-LA?j0G|nbwmrA8pmclYa)LO5a$LM=4FZ z`rPH-`rHCeKY-!`c|pK707_48P}(^P6h6-T>y$Hk8RSXrkv`SnYwlL}z9vhm)UR?& z{{%mT)c56!_3#bFow%el{;QlMf9Bs$cHgz_zzSO&Z85-9@%|b9GcS?fPd4Qu%UBh*<>_E6YX!RQYMH^)c&}*{kVV;fwv-$_ zo{}@`yVARXneV4s+N2#tkWwjFd&l$xVzqktG=xf`UejL3n z-D2(gUis7D`nC1`+vL~dc*3kFv;z>uvneS;!k8;fk&of&y`~4Uo-C@JL!)mtLAB!7 zk-uVFO{S^5d&OCl8Y(=tkFkHLdDvh;_k4{UqDZjLrJ8LOxa$AzCkga{>iFnAx;IAL^Yh=GEeO0;}T1_=89OuuaNkhieSlrCV z^ljYLEzx-v=FM<_HLZg`)W4tTx>Ih39KDZ)u|H7cRT;iiN~$CKdcR@5`v7~FJdNKj>G+dMQav6a#{#mCC_v3^UvJVhdr<0h>Ea5Ds-jO zr;v5NFlbU6r{xeH=_GQ0H?>KtRvhR#u+iA>zuip%=006!L`IIA>w4tPvUR2gW(A++ zn|VhQ2co-}Qsb)HJf7c(y9a6U(Vp=3DD1EG$-UYMubk`3*1-wAX|!+|bq22&%g3PA zOr>~S;}?U6u?-H8f9ZTGQRg2~z}2f_JTvH|ol(~F(Kt7#qN^Tt% zwZ13%SpZ9!D4)zV^XOKo3uk27cMI3ji9ubd!@Byx-0#ehV_rC~cR(l{j*RNmq&JuREc>N9DGmVr#bUw^IY=Mb4 zbgr1b_n53g9zvtq5vWFa^Ts52BDi8h)op;n?`)#~ho#{?H|Lp)J%NyfYD=%hA7RUH z2S@NvN#?#Xz+3Dr0YM4nzIy_ zAy`ksLzLrVp;L@#L_JYEfO7=SL-r`sxUheYh7A&hXGGbdD_ZF4Ws80_+Mwg$T(j`Z zSsQdhUDe!@DxH`OxT1HQ(@ETs9y*xZO)krVs#R?mDsoer^a^8^*^n-Q(+gY8yS;Md zfV3CQ)YJT|#+P%0NM7khhT&r}#(mI98a4;_z+#ky>rjuq)K2-YsvZGraJgcdVA*AufBHf zVl>Vo zaG*YUnF}-r=mMo21s$h#Brs13Pe0=z9fJ*>5g41U7QYxLW~-v0`nhueY24vwuN+23 z*QCl}f^M%j3QMtSDy*kw;xeXQ{!wCXB0Kz`OH?z1OM5z2B9@@ZL2<(s@D?DpZLxF+zY5Pa67HV> zR$y=-Hbdp8$-|cvg<})D98`D^)g*<{8S^=qL>|$6bDtY*7&j)m+jH;)Je{V{Brv1 zoUmvq1|6sKjid^jt}yHbE4d2OS5R=L9^c)w*2Fv$22&;}z*dM#WfSQjLYxhSwXE`Z#{hwX2sP@myT(5J{l^Pn<2{K2wr zCrJ|E*K_j4M&8Lg{pJMbX0PRG*FjCT+VAwkl-lJfGRNWsP^re$#tPMV9HjLcJA4pt zZoQ^1<0gfq=V~oL1E<2c>&P@)K!9oGMQSdPVO0U^1an!dt*DTZjmQHUxtbRpWsb;~ zSLdtcOXBo*rp)2hu(-?Lh-U9M2{DZfXJwaZcYpqIQWf+uj1N~rD_Ns<(Y80pvQnq9 zA#_KeP|qP5QqhBPVA3>K#Xwm2`^mTT^805Bgbb7TuHM`Bg9#7C9tjuBC!A`js88UQ z=gw~vidk;7G1M_WE(WXrB_R=pbuLcMATJc)+HV1Gi%W=1S(NP?$>CD`l*1*vUc*w& z)k1pG4A4w=$L%Dmd$^!K%Z%+U&#%8g zlePm-q94Z^S+yBTvC#f<8?$>Mm}OrxXli=sF_NR8kNGYwUByv1KV@oP{x1=hli4)$ zAm?4W|Hsr<$2I+Z|4V~(kCB5>N)1L!ZDVwbgrdR-M@k!nQiIVONQ;b;@(lw-N+n0@ zCvf;h=>AyelL7~KHtX={@CDkUpLM@_udotJWnf9>|9=+b=o$@Qy%7m36q_+ zsIdb=X1ktPNVI5|UWecd9FGQ__;R)L#tJI4!mMU1>Mz3yQyS_v?wK0`@;L8%E$Rea zQv4KPsHzQ5cM5`$cJtr9UsT*BxtX+kBf#c$v}Q1==OwSV#SKy5S&RgJ{p22V%meZrr0St; zG1y{2!S_wg@EI|Gj5g+`&RaVme)=}MR;hA{OhS4mf9kW;fs_B#NRCBUokq9u)^j{Flhi&UPVj$4B zCs#u8Dzoah70b|8Tb=BLGzrTP=eqhk4*0C1qF(7Qq&|~;L!$pi>UyVr?~ixEbFtZ> zn`Ls1v1^q`=Y7%;#rA6ywY(lbQgNn8;0-FI;96T+!sYx~Dsb{Wmw`W*)c^oF0k})R zHU#FBJ$gwJ5dHJ*m1c9@>?(4sQQ9#GsN|8T(=Deuio#`t@vIgmZ;17roMS!AsBiv@*?glN` zEq93W8S*gx<#;FOXKOnR?fQdlFY@A5?v`7sck`peFP+xp9j$)52{fp+tDTdFuMkj- zyhC0IXM46H!{tFap=hO6z=BIA;+vbD3$f1x$#1w~$ zI`6m30GdV>L04>5zUV%w?3%venzrjt(fm8wqRoXkJM>S;{pvrydoHTk^3{MMS!Gmo zM{%+v05bZ|?XgPG$KuDeY0o~Bs!k{X%m>oqFTkl>>R+T&Qq^BVonVSST+|a#@W!G2 zuMr%d4I!n^k4)08337#u`3LuFd$x@_oC7d@_O7YoYwNCBiM1saOs3VM6S?|M;P z-O6=SP3zGIq}D+<)$6}1B}p80A3_J`!5`7^_vMJG7dYNJ zk-7%t#F-y!gykvNkMS4ut^=1SGVS=|&fF4x8CJU3gwJFCB?3DKI6V%c>IZHKywwy@ zbc~gA&(zv_SN>KzZ&EHCZC|qHJqWzB4?t0FQzvT@ z(-msMwQ~s-fDyGOS;G&=S!ctd1uWsbBa?q7Ew^Ty;)&nyWC@*ooPYa6Q}8er zaAAIK{co8oSN^}}K(VqPKqQ)DjV*AIZ2#4>VW8CV73Y780Q`6I3sj}@@M%4OT>H13 z!yw1*$iF?>dQJGZnG<&X%fSLCI^#Of8BIY=!80z~0C4XKwD7;fTfTDfe@%1#yQ=;! z^<;xz|8um)%>bkM>)8Tc3;ve^PnQf2e+TB{ z(CVu1zq18U{l6QFVx;QB`Nb2wUZBGnd3BD@gJ}PwbQg|T03bB0RL>rs0QCZNIO7i> z*B;l^Olm1co(8V*{~w!mJ@BpnI}InroSNR80h+J=cSkvoDS;otfcJ~jP9~u$i{!k3p{e!p?`4g|Cm0w?&{FyzY}@V`7_9?w{2C=*Q93ljkST0BGZX-}zs$`jb)qJ5oV_CI6_-{w39Rt@kyz{kJ;h@XIh zpXE74Psd14PshMS2mG7@et=8H5Ey_2E)^QDMj#oJ`*yxfy|?%HFXT6!5rl{`WX$j` z+L!r9+*>Jc$xE#z;yY5Et?q+Ble5a3xM1yav5(idu~t(fdeBWht9eO*2w^qXAzG`f z7NoDu>s+^xo7ij|1zY2E7?*UdSH0eAC5-E~&pO{>BSUmx7;Jlmk!TqZ3Xxu>FM zMvXng1*I3-dZ|GustLwvS$fN9b7HTu@c0AOPlZSe3L6AonqQ~1%PLVC{b|~XRT~w9 z)Qrc1Pg9}Z6+BZJKqE!cCh2gWYO*Fe#rS<*joLh6D_WS<+x4*vB*{35Qpd1{@%G;n z3`FQi1xWB1q)H{W0MPR)a1%c1!3%qJ0+~D}36hMQs$SyK=sfmKYu~}ZJ2R5!sbx~d zH)Zt>d48bnJo$Rwm|9*ml@d$BtQT#~2qDnnTOiG{q`+Tj#@dnPti+0RAOV&Q)llKH z9`oR<78Eq7aG!FESL0W@t9uenr7UQwrJTx9%o!s55iQozucOD6TfR~LJG*>A!+sH# zS)x^`#Ix$3{RBbrP89fXfKCQ&gT|G)%YWO)qDPYYwF1$hr9WVzo;pdCzNg&SxMVZq z-&9ZBNGfVR%_sGZ7UjTNNfShUSebgAK`1M?CNc72dr}E_o-&w`2lsM@Y-XEE6m#Yj z$(nFun53C-jd47#L@-Y=>cRrwj7);RIDAP4NoZaUEP%I+&RcXEI;fC|imA0APN}Up`*DXtW&!NI4 z_0_JIW>(=q-h=}YnF<$ zSWE{edUKPg8u2Y1OQ`p*_G|N^`N3GXh+e`u{f~idQOOm@m$XD`+wbdG9!qUc~NJdqKV1JyzQtYIc=;L zvRIN7#IdpgFwmYTM2PkRcIfp+Yd}=WEfe%Ac}ML!i;Vj zg5hOgF6A&xq@@&dbknsmR?NiR~zcu4IY1#8_SOGibo`OIP7k8?RTo@Io5vL0_6 zY5_uBkY*s#4nP%)S4QzaDsF%(XrjuTm(SdknZ?O*YJposN9Sye->`>Vhf{EVi^)VK zH*tBu+X>J?w0GRR&EiRQYkYKN`mS<|Gm_KwMG8FhH0|~XK%~U_#5iW$CA^lC;{w|) z(Se)F2^>k3Z4PWWvQ4(KoK~yBt1q|W>b%gRP48^!4e1DQTGWm&Bj7gkNBl<~k?k-N zgUP9!%x$-^YAdc#t=c4ZPEg8)pdn^X63;tAibYE3GrA|pEA~`0!m21(-Z+TEAz#sG z7s)Yi;^QxN`?elqb@*L=+FwGCLg!u7A!6N5v3i&I~dW6R-DnTx*vg$gEsoVe-)OP#6$6c4F?6*o}{It9P z=s6GK>Unpc0{?s8Cd#k!L;iE>CmiQ<0U)NpWq_Pvq(qu=ljpNqe&uoH#5kdm0Qfam zZN!qQsHUq%a;m@S?wX#SZEn?u$Y;?U$JLQoc~V>0xkp(JoGb0=xC}3JhjTKMy42LP zRXyhlrh|HhF}ow*wV=S&^AWL#1K>x*TNX$V50+N`J9COPkTd5GT77co)nH?*6eYuI zj(I2I!X+ghRx5`~d{A$8SOc$Fm1n*bA8yJVqA)Uzt`MOZr3E2vgyG1dR}pMw=`AS< zjC*IiC+A#6#2uo>!KI*s1lvTgJqL7oOjiLsAaXmez294TA>Px3Q4y*18M)7x zWlj)ShREC?kr@%k+yw^5*MY%c&@so5$cB<7vZiA1%7a~_2zjZ!xTVBRjcNBj5`;gE z`MyFdSNso=eB9s+nSSNdgksg$eqH+6Zw^i4U&ZzD=ajcs!gZ0e@|euKC0oHFb5d`Wl+!MJmZ{p{?VFCw!A|F!zx490YMmH{ zkn2R_uM6{fT@nM?yjQRYN&cJ_$grC^z9*0MZ>%cM+puR(P^<{pk#Sy!Hg z5sH>B`K;79tO0Cr!Q*uTKf>1IAM3p;SC2AExfdqX z-$W=4axuNw3wnOxkjHpq=c>26*P3^j`iH(A`+JIBvNtoY{*;pav;HkDSJ<-(CgzJ& zIM7hB!xpwuZyaL8MLmeg{k0Dqx~M<(Sg5hg1KucvKAYUJu~9d^VM?LCMmyCBXeNT!t2LpT+nsSAx@MM#;LSiwI7%`N;l$g;v5MR8(QO)`E6krfO4z zsGQ3}4I*^$v^zPwhT$l8gOiR6I6(`fOm1vcGTgu)I340kIWeAH8W~Xo3%f+qX-uAgIK%h zS5&!>D_FtOnGU21S#EN@G4&9P6p`^#DK`teuzr_fv^4R4flhi;tnW&eg-A8p;T^NW zmBPl>^*wUwK{_&WTTFqbXEqz<5ik|bV!RZ=-P9M1heonF2F$ib|EjiU4V9g^FF@s_ z*5#*;OT8F*WAV~d9S9rz0c>pL0Pik|GfvU5c?T8tao)WOxm2!a(j(LtDn+To?W9zD zN-cR&W6h`=dgu^Mo)Tmrq%}vgShtJ6-O`)+{ZlU5su1-D0pMwQ^EXKQ2apzxiQxJD z4YZcYRvsnM7Y7GIKf!H=56#CT6Bzu^YZwViJ2YC_Et9#?sy-sS{6hjAuhL8b#>BpP zDpR2uJAk<;#gnLl8M`pFhLlYF9T=egEpeF*#f!$_nq>4e5gv6Z>OKhH9H{5CR)YZb z)qT)5y4GtHqhydpiGV|3dy)c?$XhM)LMV1$-?7wTwL=&rP*6{K?BUXAr4D2>J!M{F znJM&n;#niKY>Y$1$w_KhxfwyUe3HnndZ_d5kXx>`Fr3W z1$w9uU_S)*xpI$LCFbiz%_5L73Kq9A&&L5C%M&EILy)sTbtY7}f6anucuW{97#Ez} z3`liaCnv6Om4TR7)rOueA(iRwaFOu1ZsDupea#jnGF@{3LITvIrfOBFrga10W)f^C5$e@pKI5L7yS>5tp7^TZC(Ts#Q1p zT4Ux!i}eNfPT%u&)%qwE)`7AceRq9mDZi$Y%)Q@{IZN3hfMs?9K^7GOX})+|BIJJIxk|K?i{}Aa}1rg^9BMX~)n0rutPpCZvope+qm-R2-*)3ezNR zbLq*@G*@OAjNg+wmbBxSBMezXs6SV(4`v?qBLGdLM{sRHUk9+)F&wVdYnFiTj`A> zzC?PQ*UN*F{LR9K!_CZwS+w4?<2qBj@<$*N8RLv<1;d)?bthtmO@>y z9Wlg?R6gZpHQ71>L&6jS$bUE+))kwUVbaHWOB3vi;JfiHcC#5nhL!L`y zY)P6#@;CG@-7Q1LcwD@{$aGrFN`@;fI46A!&Q|0DUJ$EX7`Gk}XV^djW5<%Q*BS0& zz;Kju{Jza@24>su3J$KgnR@_gi?FAO%5*@k zGpY~vkhe1eE%%L^sR6wO^_-Fpdm^bejG39xd7NS(8cPjuz@-x}@V-ZYhNhRY_m>gv{f7DzPY%E-)=o{p(XV42^= z-mF})@%G9$z4Mf}&cpbfITXBc52=tihUDW|L)?^X3wwYzhyjDesMaY{eVxya3(%iD zdSUU0l;NKc*&)v>rs6S!MxjA?4GxQkgxtVo4eTV%O14DBxA|d2l5IayD(^)r<{;j9 zC|?p9aUT!{#98P8r8-oqd{I;uRQQq8!G_$%ALVYEiG2;mxUwlY?N(N8NS=@9Sh?Oy zMPz6N7PX1C>)NZm9Zly1QE+X#^)a43;w&~o0}+UHk4qR)eVmp)`4L`3Aqfr+k)_$O zn7;)SCJ~~P7Q$(6qzsjfadhx32hOdQ-y9QNe2hG%_91X%BsIliP?j9D$G#ckaG;qk z04>jFXBonffkesqA0Ty=tDG~Dw<;HQVWe6~^+>eg@PWiiW-I%7=ro8|N{;_lUrfFn zYe`Dra4!IzD14VD1J5p;DplTmQR4vIJF_#Hx1}k+ES2^AkG;v zpR_OWn{3bc7C`*cuA*(~l2a5_QcPBEMT+rn2mdP6vZzUbg_i4!$?~^@{pTUDN-6~h zR|?Zf)RA=fA<9W$4NL~0b*8wzNA%`lNOHP}4c?n2%pKR7Ei833eGFmh&(| zyRIgibRe9>+uBVnLHZ%CBk106dc$nBQ!fo2N>R2Qxv;C4E`sASaK^;i5`F-}(=`SR zulk~f0a{{f0IaJnDzeb5g(95?Tdf}2WDN}3 z6-&toKwhkxBLTG(LCG}OLyHM zF7Zs5g_l|574JrChIX`&9=eDt$oKJpgs0kK(u(x#YgA6hGjAEDm`uC%0b(435Uv4V z$Jc>$&lR{OxU9~wXL2830;m=Xq*kP!&L`eMo|D_bhIyB2kf!ZC^X;xr@`F7z7|g?Q8@mMWo1s;9w5rO$LKm>zn5Tby3t^ zVTmXhd*3UI-%8QysEClOrgL~t6{EBLioc{wCZ!@0cTGyBDtBRDa`X&5Zf86EBjwkd z#oWVP`#W>MkB}IcLbqv^p8K`(`#G15DnfzF=+SGK?MT%wO3{#Y6e?>k^Xs>_{78)g z=8$jX%0Q*HHvN(;zyq9JATd}mFBJ!vlDNyWSm3=Yl}eoW5QGwQP+osgWKoM2^N6+5 z2;jTqC9mJFB*lvbv#jJ>rI3z;VvUGycO!Q_%tnI(_I)aYl{{0-Mvpc`2ajRr z1hj@)1ltV|TJ*ky+i9%iZscw8DT;zZLVm)vzniG>R3WRw*}!G?!1GG$9D!cGG%s&A z3`a1q@FPN4Sg|*0fDAi~j6lhEbXjzXw95xZdx`QH;0J3EU{1ymxkTp_s?Q!YosmrU zFrUZVk zzni)xDL)bHk0p#R;GZ+hzPx^?Q(vdwN`5hpa*TH-(+9sC=kSpq`2A)lO;r&?@z#98 z?Nqz=2f>5?wyoPqQ;14`-%Nloo&`0Y>dTd&*#u*P{$Jg&E?}-IlZm`QF+gM?)gd_&V5+$Mh z{uq60_@gCd@_2RMLeVjMaw=D#`A7I@k8`RAVvZ(WrxqiD%uoGl@|U?Bd9yO!3$ z$8Vx8c$&3|o`>p5HLT=RUwdrR|ErMJ^Dh0HFC*iCz~H+?abKba1Is1o&E6?SXQ5>g z2ARQEESSOlbkyc5Qyo5STl$do9+Rx~_Y@7ZGh6%BN`=X}88bEwUGHq}Tn*us2dyj7 zKVg^4hE-&tDI>SZ(ii!H6^L*hJ5N=Ng4fU(a$cGGz}GKz#>>10FJ@D4$i(?R{nc@; z+=Itq@?a*4xTX+`qwUo0b&8Rxv`^v=LVbx5h*%4wbBplF*f&onZ!nHU_1dlJ%zuMw z07B@N?J}#iKV^~w8-R#Vzxx6ZEA&`quQL?hz4wN1KxiIE36m!rX9307P>=>uxF+cw zy9nuI*W-8sa#emG`tarxGB?HqLO%$prTVKcMR;2X%gOVaUa$d!d{V5WVWxoW`YJBB zp<({HnkeilI*ub61VcqcH*zOJO+DgC70jB9VTQHTe31qYzwEkG2bI*I-meI#T>{p) zQ$=<=%?NSRQ#{FPiu5Zl@|k*vb)@dc1J)(}c$YAc929F9e#Yl0GeJ+mfD|R`dv24h zll~daE2(n83kBN$h3Y4$uV>ANH<_-kHF!Jq27mH+RgmkZLMo&4n7r8jh`}e&;#fN3 zLJXbHHy;=@?)X2anll3~eMF%fqn@i+F(F@A97W&ALY-$^7fO-ILfMiHR_bV^H4 zx!uzbRr@0D20koR09B&c=?9=PAKGek%!RzRtM29QqM2@B=i7Z$m9-^QfUs)b&HtR{2rqkqEXcrwF z8P?JP&F3Y`0tcXL8DofA-xG#SJq;zkr22Z-gvv8HsXQV+`6BoDZ*7EB{DNg%;r{%X z!o)3idKyT4>?c!M$*aQy=;*u{MFD_SS*5Voda19Gh;UR&UUnjWGc>+QKpki>)`Avo zvT0c3st1b8C_BRZ>5DOUR~ptL8%qC)SIprHP4FOSvvHkKV7t(Gwe+HpmdUYr7HbDs zgFHOae3eT{Iq+%kmkZ?H1qFlRQ(;nBN4-Pg9B{wZEY?ebO$c8R3?XRzD;XBIf&3BwL7CH;P^$fE{m>gO>l>%M(U8wMzl4&qCy zz_PID&PN`66KyO(JSOKzW>?llMRKc^Pf~JUc+9pYh-1ry-hnlBisruut5>G%0LCkT z$tbkDR$BetA|p@9lP4-JRLU&}06wX-Wxi_iL(*g#hc}T55}dz0gccwRs0}E=^{iyy zhcwP*rGGXOO8R009`{TJ&<_9*aL@z?<9l-;D|Hn%fz?0~p558P>JF;nh=4)76DJ*4 ziRgDfh5mEuZcWqLOPyt(*S&xr?|mgT77JJj``~fcQbtlR`YL^klO(ydI~SoXV1j2w z$Cvgof3v`!##xO092smX9ldTZu2@vj2g?2ANM;Znc~X|LrL~~;C;UP;H-TSRB+p9$ z`Mv3e7FV#Z`D&cjZl}w9Qfo|btl}Xlc&`3qaUHM zN3HZiKT<@y+L|nW?GeY(pNF4{%t~EWMvZJ;8$T+;@MBFxA#vO=P`#(>@wl7MLM+Y@c!Dgq_PNajWMeBmD< zY?&LU$flyul_vSXl!)sJ@gYJPFF55opDY9ys>v-qp693?&A}I1nmBH@>Ay*_1A9A9 zdjS42-cMqViVTe$SRAc9*_~WGQ`(A{5l5$Qso`T_TN-9x%uWrqWVm^|@(iP|$7z3( z90|J_mQ8pD7Tiwd9YODibBFb&KHQz3f^U(xCJgE^;&&csjGMI0Z>vW36m;VoP* z3ib>(PR-{g(sF`0{N1Y`=9xVFcsHRbW(9gHI+~r>ZG7**gOt9x8hmL%M0i)OOx%uZ|u_qM_Ut}~Z z<4;$peug@RfBnxX#*5B>hWz#>@pA{&dC#rQ2Qv}@-BNSKjvm_@|D1tlSgF36B$Y4g zRBk72i>k74N`Nv~a%j->>_;)7jDitU)2wX8mS@cChfP<8_aw8JKB9&bS#l^R^p*j& zIGM`S_et=s(RMYfV3`rI15SLm1Qd8ogzS^WM%;u%DS4N< z+RvL4^J2}(=Am@u`K~1X%llaHeyXV@J415!HP2{hCwp@@L2)D@S6#^IU_?P7Q4By} zGu?$hAP9c<7J>=AdS$g)W7TFyOYLDja!x9snZ22NCi>ISSIM-XZ{$4_9(T7`9-}_l z0p<(c>LuLUzza#0Jx!Ny_e=8MXLfq9*Zu<@LR zrzEG)n&lY$U{jJd~t&pp_f^uR$l8f!J#r| zi7z6i!rYJ5p8OctD|mt1c=DL>+A@lXBycRl0lB^CpacET+sZb2 zGcWX~j7rp7>I!GQkoWylereO==@Z1B6|1qm!Q%cXuWb>{UCW!1!DAw_I-dPUm7L$^ zkq55LVo&;eON5=%bqy7b6Nt?L?-=t{#*3S8N%88lmdInEmNgx_XFUUslhaBLy8fUz zzol`{qoyQYj)`ktyXEvCA<}g0xmo?l4b?p_{2rH?=_6KwrY-b8yQ`Y!F(}jXcJ*v; z0EGikD@!@ipjfl>(&hlH#AY31MKwHumu}iK#lq2bqkbq`4wlxm$06Q7287fO{I8R=u4C{eK7{CVTwMs^UA^UY%Qf1 zQ{L!O&NZc9xxZM=`?h#oSoghCM$Z=aRQsldkF;Ihy2GTSap5SCv|{2*hQfSEE|OwfXW% z*|pD-TCBXMj$w--;2z_{c95Jr^V#xjteG@|k)5X&xERNw_B;F0En$AFby7d8Dr+u^ z2ap`qX26&wOP6#I1;R~xUWpo5p1RxXY4MGa;Z4+F_LZg92_&48N?dK6p96!Y7@WK| zQL(HcI^HLOrs*TN}qPU?LS|1hPcwT;sgn&bLMPDBeIDY!7!Sg zjXEu`_r;Xqy$p?aQW>8^Q@!!k_^@K7=)!v&8LuPt9lIdD*)JfeEjNBU3r{B%Tc2L< zrSmq+`_jo7KF(hq5*Us&_pqAJz1PF4ROk57i2jX?np@Zln8cX5n+pDl>+>YWr)3F$ z#B%RO+k2->dfc);FnZ77RNQ{R-$%Q%k+7l;sY!{nsZ#3tsZA(m~S%bcd1-KltMCdpBB+hnnlW3vw4_Qc?w@b?p(lrjh zng8jTKE+vUm!O|hI&qtqZY$*Vt6`IXp9jJ~3`5PJ>2hOlNqWr9bCOTZ?Y?4@WXSF| zXR=RWTz}BXt3*{?z4V)X=Ga`#{LK^CT{@J=uJv1+#myp2b6q^+0ylzH2YR{hZE1aF;-OT+D0@Z~WZz%W|XVWSyxfR9(Wh_|i3z2Q+R`9z7c-(KKlA1Qtrs zue`LF2T6^E?qTT&HvPxB{k^jganP(0nbVB^@bTDMDp#l213IqA1qPF`y_-fiUrZCf z*rHZ_su0h^vMjVDN;D$(1cuus3#y^sSGMI#!Yrr9lZf)mDFLak4(av0+K?A~KxBg~ zA93Q*eyaMD;Pc@OgmVj|+Q%Ye`sOY3G&~xLoQOZWb$O&2UtUE2d@!KcXQM#X>CPRc zy+Dt}Uu`C-z4yvkB!RqCu8(yET&-d@4Nv2etZehz8Nsr$4|2YkRaF70lq-Nllh_@EwolR1ykq7Rokm^|lh;Lz` zm?kAqwnG`NS~zxJ_*_zrn|uV^9QFFz+CO&~idd8Y8CGjC;=?aqo5#~Pwg`(uO@}1W zgiG-UqJ+iUum^GmT6_gwj=x1i3==B{=*Ki{PxU?MaraY;ak5gQoe{4WHrBQ)yQv`<&H96?XWeS`sl@@ z68?fw_qDDllev_1cNuj?_30ko{yKGSutsHdOOMl}ds(VG-+k(I&Bocx45D?S{`J66 zUSWE~aG_fAYZa8$Xy3HZwp>+?r}O}O+C<*>NKzH$u?AVT<7|T}q6_ChXkhESB09!r zu=h*EWHdx*8B_K8iF`yI+a1c#k(Au$U5|qAE_u%}N3(?Lmt^ z9^RPYmpITB<0})#Sl>p1+V?%}cJ$8~R{tViGV|b#EjC=2|C4Mx7Xp%$(JE+dLt5jC<9dw)raW ze^a|c$C(7_hpeLf-k;WHxLwyU~ zIDqm3f@(7V>|^Z~)vmG|c@>D>xd*Xy$~Gusn$Up=rR2P-m;H10ph{wo=Zzj;ivxz2 zu6!1&HV}%ZP6$Kg`BN);z<_U3%CqE|vp+>6jw^d~8f}+6bQY}O0T?KtzhK$@X+s`9 z8#{0lDuu+gYDQY|GGS(sUdxI%oT6@9Vq%2YriIlKN1hELK9m`T`G`C{=sju_UBcRW z@~@A7-@C&7PL^o7V-;24akY6vNV20GEr>DdN?+F4cPJ#MeE(f&C;NojSkV0gbw6W& z&@jjj&u;F-#PczDOP_LXq^^?BJ*~OAI!~lU-P4Xa464&Hr(~tRawDJ1n(5Qs0%$U6 zgFGN64M1y#M(3+ve06bU(oP!uvcB9TJFGXGL_5sTwfV=f_x_ozi%4aq7ZDaVSA6cx zSARZ_y^}!Oohf^*2HVKW{W?@F6!4?#8?T7gIOz@SnR>)od-LgJHwO09%xg#Kw9YK6 zJLbiLyGk1Z8JA{Dy`-IFmC!E#Bpi3LmT|w!8STXB8Kvn4=R{BvSb6rLYnG_^v%RUa zSaq6hmHM7-o^Ya#xc${~FUgYM{1(uN9`K6V+YJn$iWyqS4`sxO-8`(68G4(6_2%Tb zW@*-^-byR z?qE`Ocy#4x%3`>#lE7ND+1aFX<>PX{V4dUSn2~b%Y8>>d8vHnc>2BP68FHLFkWK(tP-XT)2hL4G5^H zdP;9pY~D(h73U~E8Z?;tL?;h>GkQPNe$xz$%$erM+z=?df`RK z_aXRu7yhZ9v#`&RM+yo!vN84$q%0ey8O>#MDd!riZE<*c*81yd*O+jx3d8`hp@7Nr0MY)a9=b$ zHSu=%{qZNkq}`n5+5?Xjmr-U=qO(cEFUW{yNEb6}Kq`e?W#!I2`-sMPR9R_tgx<-7g(1G^t* zyk;_7XCIs~Z+{s?U-+Jnh*Yv*6;H&t7X>i~XR+n1uT^uZ)GKBZ;cTr*Sk-4Sv#aX$(TDCP* zO@7)wWgb9qO1^e9Z94o#e3z55`jWkK3VR~U9@bw1kR_i$T{ zA%(;pi>M%F`k!O{^`WlUG|cz!V73NUrjPLKNt&ymR~OX>Dd(jucMC>Ki}bhRX19!% z^8gGj1i0YWMa8BS3$Z8NcFUg=zuC*4Gn#pyvdsp$&sbHoh*wz5c=(3?)(;0F!90@g zF>yh3JZoSMx0xjbWl+#2%#VbTYn}mxSNm$ZmTjQ+})} z$f=qv{mH1=7+AGx195C2dWAlt5J0+SER!|lMRKT7k9eWK=*nr{sCYV(LY@WmK-~{Y z)W)n7@61v|0eS%>tOQX$4|!2kT`R?1hl@azXcd@yW(MyvBsAGX+QTaOmjqrk{6Nx` z%D)uYe(12D`2C!7EaYJ~kArKU?8xi;JZy?2=k-aUxBUnmGDo9jf6}vC$1_Y{vi6@& zpD)TP;>r!Eb0-YoFzBV)6`f)eLZ|$v0dn{(`lw-LkK_6aL%OEZl>2g;fjT~;vSD_4 zRuYrr{Y zv3CS+-r#T$U^A_wmoYi<(~NuO4~`1U=JK;v^wbij@T^J}pJbHOm%N8cC>>d2fc6=rW-Wt0iDrMV_TFzL-9pAJigan zAImSV2dnwo{O03T`ZjJWexVFFCE;~GEN>Lmr08WucO){VdEHw?q9`+9uAgmu-zjbQ zZDFX43(J=MRDmSF^i!i5c$s~%a0KkE-HTZx%&mu#XJp^C#p@l+iD)gbSN}1~VhX0q zK<=(n>H+`{j`?f9DUo*<49c>O&StuA>c;-()O(xE^T`NB#wLs{$}vaQSrBj)qVx2M zh>(IlY0T*wfJ8H=bByC988(eQ^TA~))J<^r$jc0rlYyUD!P+7d_fCq84g8oh zaJc*~%9;IEjy^NvBw;PZ5CYB2{F4~rW$57raBEp!KSqL`X+p(893PzbY++p2>3;RV zIB=TBq}>hw2J?*cSqdYtQyg?9lZZ^i&J~ZSb zJk`3vS|vNyj{A8l5aeqVF}x(pDDgp=5+yC*xj2C`kD;*4;0!Va0<0%#(Nz?JPm^7R zGbA^`rRZ(u!n6LnzGr>M*GhGA{HDEZkyb>aSnk@Q^;?Dw4%^xbE!#RTzvw7V2>$E| zgR-mkon`;EDg0gi+MBm%_l%ysKTp?57#Bn5uO3wnd{VCK5+4s4ji20%iA~umvX{oG zW!XOHbJ-(EuO;<+>Le&Ky+7}|qs%Pg(=lHpz4n|xIdyG~bSYZ%NomfpIN-`T4J#WUIr7n7a(jI(IjEP~7&B%CW)1PvHxN>1f#VHr?7d`ii zxXyXB`sl*cD`unkjDW;h02P_v0P8SkSP{&)mQGU3q8P|sk5eLZ{}Pv(QdcV4et~*1 zeVN$#ZSqSF2kZ7>jt62pwIxXxBWg_3cvS1e9oAe|;Na=$6Ow9Kcs%oSHkdz#uRGt1 zZfKls5Wh|>nUMKe6Y7P7lIf3~ZLTb*vEr8J7Z23Dn@3s-q$6EMAIq)sd#Z&7zJP|h z;0SKhov!D+o)Wv6I~Cz)@4c(MJEih~$RTmh`y#ACDJ=QduR4(4b#a&_B*XklFQJJ} zjEsL6iGg19JOr}E&wPT91ECauG&!Hx`Kx}ELKumDOHH?YUdrivX!q{WNbrg;H2szo zT#0=^cnz<3Wq`}RfP?T@xy}4-w&Z5b#Xs1WsUg~;xhp@Q);RZkd49HJQ_xL|M&6Zq zPaG(csMWt9+^za(X? zLwL4;oD_zQDR4}d?`B7|?9?TW7TKCb$k6$zS`u7XM_pbv75-uS1ZlId zCu+Ia0RSFG1dU}bW;&E6%AHiS<>^}`tX8rYzpT;hoKo-18f{+^=1S!O zX9B?!%@epIzLopJvPAw0#92!2DwR6G(LA7xD^{wx)NfosVCtl*^`y6;#3$6rFNII1%r9B6~!cnFa&dTvlRrfi}$qNuVWFIpY`s^aFFQuQpG-AXxgRgz>DUNZXp{to<~g{j6NdHZ+dst&|#<^G6KN#c?T6 zV2jzgh!1Qj$Ss?`p+kb`E^_FG_YVWbJy7ygjrY&hW#vbzNcFD#)x5JG&4Mnf9$BwF z?JNx}D_!Ls6=%qc3cculLfg4w-@H~0+v2d|ru7Ri1ieciMVxDU^9kukHM!AAj_;9) zC<0BwN(X;@xd=J^|9JWmXsF&dep{HVW8a3s*vf7q>oA5fwn-F9S%xghmaSrhvF}6H zGFggBwkTxZ35~6Wlx>KTgzWUczQ6zffA4#S8u+$;o4+-W&sZj-v$ew`OU*HrNPKZ{+??duB>TYe z<23ZQ>qAy>hNAkrLa@JFsaC z)-y|DjSe0eRgzfVn35E)Vu7ygtw}B>o-ZFH94(0%O^&|Qi$hypiZ$GSensDWLuNyU zi)+n$F4M%9oJ%=@qz#EheGa0fGqYAN#MM6#S~J?3^SCu`S}Vx8^mRk#Yc)`{wCb6c zjzWkHKpp`;YgLECLTwj73$?TJdr(`=k^UasqlC?O-E8?4t`WtWuvcVt2w z8L;9X9KJl%8g=>6j;J0qpSEMa`cs(H( zOKQ)V;95Y)2#1f*wp+_~7K7jCsNQ|vD*L7@4($RPl)oZT_?_cSt5*Q?;}&&!=HS+x zGAakt?^=DFc-VPeQaDH+lfH6Y z0;A)H2dI4r`+?-DVn@UkK4u=yKpin5i0)1%nzQ_ofnH~*< zmR{|_dIerSoE5i*lYtMBc$XqofMWL;Fl^1tRlde|905&ZiFo5%#JqCF^vbBIG?5UdsTZmKs2bCvD%q_W}=W66_abNpY)2K^KHHYl4<9?)T z;HdM;>$-N)GU?C9QD)$HZZAxoDRpqNjb-=c4C{~bh^X4Q>d^;P8F{NOLhra@p)ym$pG)Epuq6L93)*GzoD|lXk+99fDMcE z0xJMFT)B(AI*^Tx8LqzyISaqIAD&RQ>UB`%-hlhusfP)D1U^uXRK!|*;Fw4o~ zqB}M8b=yydwz^0io%i5h8xw^hS@mF=>R)^B%N5nMZ|3Qa@5UrT*L||}1@Z|yK}Y#` z1MZCGe2Hu1k$6ja4_4Lrycb+G&rQzTvbKvK3gQM7)y@p|Li$Y$dqKAmC|IIzC^5`< z*(FUU`O$T^4-7T8SS>v@FE&2y>+ludBEaWttQ+p&WhjR8p9dhMyD2PQ!I4Au;H9Ly zJ1ihLXvBXq1pZR@*IcaUHc|y5iDs6W!7Fl|EyHVMcNwZe0)CKHlCwGTx|A zkHzxm&{xMCt8F$DYp=J7J1)4EBCcgrldomO7RWoaKGe=B74qlX9A1A+Fv`|u$VTtz z9wZ_cp3p1Z$6F}7K0hR$xQ)GaSk3BLIZ7O%3w@22ysxTW-CHVXQ6$R!H&=C6qjWn8dDAVy+P5$}9k%WZrlM?SNX>Q)P;8A!6l;kb~2)}ZwAVfd!zYu6f; z2>Kh3nw6NeRE3%9KX?4T9ldKWJnj%XD|r7C!HQDy>^yr>d=m5XdI66kL;m8`&e-dM z_V2kW>!o%x-!fZgEtS^BM@QdIB#ce}h%I3uKj&l8h575m@;V zwGi9cY4@Y{Poh$h3;U1O_pcz1(E`0n8BHv)+zs3qkh-PRm==1*FxxC+nvh9y z;Y?e4Wc6PS349p~gt8VtBq&_zTwH>IlL+`T;f6Dp&qsFE5>5NQT^4&B`&RrV{;#|T zq>w%>R;Y6U-^K36#hxZ_y^&lPrzh+80L*GlpiChiwi?$Me%!rS_KW?TFO*i7ege^m z^^R1#|7V~3H3Pq*nH2JA?hA%f*)`xX5T%WU&@n@M5uAZ4%cI^i#D(Ke=B4W2*Vqo8ScE;s>`SuR9TK$hpd0^a zVE2yV>4zeRrgsR(prpv6vhCmUbBRbdOIzA*%Ci?`%b%7e#rpa8Y-0m%$dL#818%lk zbaE|FwF`bV;3QGlsyCI3sr^JC!uMyT)YsDYyHslN4BGhJi^;8(i)tl(%D>N7g2ewd3Ah&+wq_;W?5<2F}`F-@!Ym@Q1kV1kgk9wsq4pRB)Y79_g^K#M0 zBc?U{Bi=oRQpZ*t%#eTU%{g`p!jP1>E?eHAp-^Yja zPKqwH?NE#=Ej@t1`XqY)Fo^Aot8*1F*WLrUC&G@9(Cy?0I$)m+?7%BM%pZvlFKR{3 zr@9GiaO+ja#`c~2n>n7?Ub07bEEgLVPrR&pHv3D%`gNXq4b(+tABAy|^ODt}3%)j2 zHdQ>puNWU&-a`cpD94EhlV@Zc@IErvbGD95j?Z1%qO3y@_% zt0tgYGbT}?!vI=#z{UnzFwcVaS*5UDaW#A(F1Me-=x7&>{z$lIB)LM3Ob!AJcCS{2 zF6htoPkDZdrF+FLvMyN`2iU=leMIYm5qAg>0o~WRFZ>ox3U#fMbJmwgsQQ)Q3fqp^ znV{nBTSx@u?;%gnNVV&atK2)hIV1u(Z;quJrIseB)v{mfbjVcs#^w=%^Aaz@$$%cq zvR_T^WKU2x198kFkKVRu@vk=ktrnhr-@hke&l(NS$*>LH^k?Y%u3AG9v*iUuq#VR&YpS5CS4sxS2;0ccQtS3jgSl--=er8$_hMS zufgr**5M4F(dM<79xfNq2otT8D!%+=^vU~{60-Jrsu?Duq?Hxj*9h-1h<`d{$yxz3 z<`xymFt=A6djdJ^YHKh!=e7+01UT8y#J(Zancn5W z3IH%(4d8tP0H#1((W-6a%KgGe$L4>qua)m(M=Do+w_hvCnBwPScS_@PY8J!=L%6Xc z`6un8OX9GarGhDSvTmw|kozv{)XtTS4jpC{`#_%O*MyQ-5|XeWV(71WsYQ{vl1eMH zqr|Oi(!YL>c(P?h&=1*w-1Ha`Ux1?ccB3aV1(Iw);`4xA*3WKyOzq^gSd;pNSvQ{a zj}Z@R@;2>>9v0;@_w)Cm)p$$sXzrbOi!!z_YYF(CCU_&bt-9bvz^tvWYo%8k=Y~r~ zja?>El1<5QUH<&s9H=qzW}Wh!6S1XzC@YQfv?=rAHTA+fQEQT48YnRSb!pTLg^|ED@u}31?(@ z-?zOHhIsK4Tl5qCB9*zt{X4+wTAh~aSmPIDd`0`d+gvIZ&RfO~wX4hi63!altOZsq zoo4&~;xR1{!id&O&Zoz}ljwKMp%86hRTWb?VS>u4bmW^Ah?3kQNr7YK?dLTPH=km&LucQc-Yc=5`nq5Dise$+WeG-5e`pmimQbxfuR z>vr3`)nXoJU*vRjcAhcEP>eh_&SFgEX>YSwhEH`mgf{FyQ zFAx5sVV*vb!!;OWHlK8e>cwk;IM1D;<8UIrWCIYZ|jM4pz@kA;~a#d?m#$%mrQ9|azb9_ju(r)~sYcV22 zV}ocew?T2a_(}iUp{ICw5Rq(`w!hi;Wm`D`F1iHm&&eKry`ySv%g>r4GZQ8GGOH^8WX~Rt2-Ip_boVL834o=AmnUZdX%td@SHy-V=KPZh3I?t(*{@N@4pzqQj zG776*I;k=2e>|+CP}9l%StZ@d_j!I_1{Y`Cz3y$LI#_54Gqd!^!vdK6&t@~-E_tIA z{q;)L+`<-XW?Y zDtkg|lmR5wYDAD#Un)&7t>O=XCP>Cd-F^ELIb14d&!s9~LYs)W^A%>*PkOUKcyQUAXss|ZFdE#PTt zna!TG%owj+CYOsPq0?1{ADRGnb zZ8Do?HaHiykNb6?)a%%I9K!UADH?oqe&INcR|s-1f=>8jeBLhtn_~84(pYPuiCU@0 zVE)6+v`2qGr)%B_<6kX?2L>Pl?z31n+sb7s=~AR$ftH53n}vKV=f`(gL7fKb{O%HW zFxSldun#NAnYL~M9Gx3!$Lh6O#l%55zYEl#Zw;I|^YaHqK-aD_nr&t)v;Wa!Supcf z>2sl)B)pS#BPQpyu-zx&9sd}k@9C(5u6mxP0)a99{ijw z=Ov%C6qI&m+m;Z{e-&6W!)=ufm7=0#|BfF<9yd_oSnCNlhI<{W=okHu!L4w-exJEw zPt9?$hJ)r4J{~i^hF6l{!uj8>$_{lIF1;Qs!YQfYQ+)FoVH10czYch58I#yoX}fmB zXa3R9w$c1C#2WhxL?0RZI~~tY8k&4);5lurzm=Ls`v}*|lrDn=CwxLfr(obX@%0Wlb9* zfBM^yxR;Hu*8EWtjxO!%CRsrkxNt6e8-M?A>7X{r2bs|1KdFrj7tSi|#Kne0?zXUI zQmX)c$7zHcJY6Q4j$=Mx86a#aqvZOpsy4S2Te9Iwqx!8;$2?X*R9zx)2r(X#zd!yH z`(i~rTIG9Hl^x5h=WUotNttH|=Nkz;lyZuN{oVIu{;$W7Gb zfHs1%o)*2JB}uhV;D%eWHZnte0tyP!7*5Pfz;?hXA7Ds+Tz{)BQ@Kghd@BW&UwGFDFg%TxAVLFo4kxzsl@8Ow^?nMw* zv{Li&ojPfr(?wBxnN7xev!xKH7P-TcuF=PK6@tAb+ zm_0d`{Mptq&+tZMnyc$M%FNMu$1i2*0+oq>(NCz~GEPiW@RFMGtx~*9Cp|cGO4f^p zUop>P!TiPZ>jIq3PgMDnER`g#t6MHR6i?))6b=5$pgw#{;^KOdM|CWWe&^!d@&{|r zG;RP(HS_7=>lsQI1DcP`x8-|m69CP^h0VHmxS0l$t_8%zq*o;c0Iq->1@bI(awV!G zeI#W}X0)Vp_9}D5RpviIxIl036?Kif)kNb}byVO$u);8;7-?t9wFz4>!*GGXPrUKi zxCItO%N<@i&;InhSPG7V#wFXvl5y+0UJN#<=0e3Gr{|Wn`+VBFmCHF+N$>Yr%Fh;fv9vkS@mO~J?H8(D)vo53qR{o zMnaw1qd|RvCMLWWo^jo&wUw||=bXxyYHluLiB!2mN)woVTYe+NHX6coeN9_>YUQ4o zEH)TKvz!!GXKy$@n&5_g^d&zcm?7dq&`0+FX_M1WyLT&fDx=BX-ayvTLqE$@NUG-=V*6=oD6ZehGtHPxc!HD*8 z)gVUQp$Jx!ug5(uY0aiB`EnB6a<{Zx`n^F);>aqY1pc3+|KU9?%L?j98KX2LV!2Axk5runic!c;=GYu_*A zvRJC#Z1K_RF`8+8eD^D#m9tnTHtYQt;k71*Wm;y>knJ?Gjm)o=1vIq6?Rd?+@`IW} zS-&Nwp!&Tc`n3;QN>C*b&Tbf{#TRj+Tm9IX%19au=( z_jvNa)6h1RDg0L%FpY0fe)e|vW8Thimc>#&ZU+^A-T$Qj+I=joh#_3CbPtG7;ec&q zj0dXyZOSl?xpH`oXRKNwYLZy2e$M7-a z?MXoCwE*#F;asQI43>Goh;C@t<_G+n2 zCIdxf9|)`r#;vSWKr_jm4xo1uR72(VjFoe!CO`S3?@N0T{sYHM9IpUvRCThHe1o~W zQRmi+xO%;Se>7ny?~L)iz%PDBPxS5z)RI=|v9JC%46LOG>1{X145`dcA^LUy(ctP< z(sa0hG794@$0K6RLF}Vldu)#f+D7~T(Ht5qnSWPg$@@I9uXh`kiP^}Eu=sBSslbTJ zT^#0CcGm(k%3oC#LH3XEQD}gjC|q)p{q%U4hN16K?Ck#K%I`B_X#hg9!&E5-v*S}B zZ3y|X*;$=94aMaQq-Ux8FBahx>oq~RD>yFQ1TxQ1o1buY-agrfM0SJ=q6Xq} zgJUPPZRXLii%yfkN2Q||a)q#uKZq8t#IWZ?3mB zW_4nY!K4QnDd;d~hqidxznSTw8_4RtDZ{I9tjnTuf8;m)>`x1KqU5b!x0c^s9a+m4+Z_nY4@P{P9F$yvvcnHasf+Rq;U zX!x04@hle6c>&^$O^0G15*ditQ}c|0ovIr$aCKcdt;T6kezbntr; zA`KvTtU;&8%~xD_nbS@k8ffI4eM`;$pvP!0P!;yTN3ZI)b#dTG4$N5znSUYreqQ&N9M3ob0egb8+YX^B_SNJ>AB~n(KfKI5w2@T$lV@zz@tgDwFJQ`W zjGp+Kg=qI4hi?V_&JFcztU#j*lXNN0xJ%GSeQ|0+Q9ys;c^N98X1}r*_Nr`XiNqs| zLW@G*Z1qu_5!KX_=(Jad-2n@HGH!dCR*a6DhS~A|Xq=z}8_?rSs0bX-4!tON{c=pp zO^QQXgXQ>|OjNMmM!`dw#WmCnSc5K8EOgE21xs`h1otv#5tcQ z+9HfCqa?-4N*Y5%8a4Gul6QKpVu{TR^LcQ^h8oAk&V`1qdR*87_I{ zL(%Uog68qiD8sHCS%01b)l%@%)?8~6kY*eZSXnvs+5t5I&bajIr2_Mn$azvaLU;Zc zEwlYN-0_>*f#9=uI^r;7vc4B)!L*X)I{6 zM>4$aSd%HYJCw3NHed*-#T)PhA3oE1wac+qAMdIv$l4fi6n;^n+Q>001;}zKcd@Ge zS&c zIdMBPq_6&eBSJr{xU-|HW6CgW^66Pi?E_rHrD!^zfg%|-8@5=K44p;9BCV_N`pH{I zcs_D|N9NRX@#J0oUG!UfiZU|#RhK|0Z?P^7WT)Ow zjhQc8gDlpC^uq&ks9~xYDXs)m6|boLz%yXm`=&fL^xeb{i}1hMlFi1a(2^^D6nx*P?Ma@^;ZNJs@#o)uZ&l?y-8>r6OreYtx%#XP)GIE-_c%m!{N$wRGDHCkB37IL<#_ZxTe2F2b*;4gN)VDi_RPuXzAwkmdkFf|RVZT8T{%x&^S;z_+1x^EE%nbW5z@B;^UM*bx&@Nc5k<=ZPElIXxzF+J1`wzQ;vfpB zb1KPRy{@o$&PWEXQZP`nLWkjABrrvK6erw(0hk~BzYF@=&<5TMXH}+rAybx`(vc-m z%t#XqKoOoyYvA}0+Or3!%dW0y7Tv<=7ZB!E$lX`-mvSTlrM9IVcU|{;!!D$i#V2x7 zs|>XYp|9bjKKi(#7AoHVrY6GxPtUw3<^eyDSPKwTliAg52#^f~pY62v%~;l~y-9C+ zIBd_sS^X9_5?g25w<*I#--SJ(iI-bopt$7R>Gp_O_sS=CaS1DR{&80{BVjazS z5`hG)7$cBEksP8mk5vH@*TSU<@mFqj*8~=0GkjebI8CCMi_gq)8l5I!(I`3aQ zDf;i~cgwbSey+kK(QGAN5!WA4^D5ND=*Tw71zTd%rv~?q&blSf>IgTUhbXAY(LSxIGi2twZBdQ85;qppacU3fp9VtERue&D z(b zCBhKiv#Ck&%1oNbbN@}7feV;y1^9q37Ptg%xAR?7rgBB;e`j{i=0z#-&cn%Vet6r? z-#_f|YClfq)4hoc!3nQ44Zlt?_2&Sc2Q{_TJDJ^`>zx=XSQeOX-{e!x`Bos`H_t;R ziYuK+Z0y?Au=1X#jl}}BCg20dhVw>cmlCKPoF{#}i;>FGT#s3)je$CU+Y!?98Xe)y zLr%dAL*7@-SceXS^gR3u?j8(A=vH~-QWS4sm7nFt6b~-Z`T}(d?hB1Cc14SOyC=XJ1Lf$llu+NLS zH}7UrvE6h}tX~GDPR_%A0PZA{bzk;-^tnIwZyGic&4R61%7wpXyRwLcMByvPu=*o@ zlFlj#ZtNzHLNQY9z8F6`{vdMP_x3P8`B@AF%QLs}e*T)8^xSBCv(f12WT+C8P1v~J zJpf;0y&&}2%m9R{qD_)M%XRv`{ye-kwI0Hi`5l%y5BmhbOwt!20OjuGX`RhK7+Dw$ zCjS2vG(3C_9~RW&_>F0<74X>NRI3{VbWNqay^T{~_d%g(+zh7$?Q3?>vanBQ*X2(i zRK@@V259)L6Y7LldsrrEdXnz?yymYNf0ImF3Bycf=H~S-gYPT$z(&^`b#qi|DqJ7OOZoW7*I~Nwhrub?lqQ zUd&quDI1a|;GmR_VS(@q_<3q*y>S?_hbL%M<$e^183riV{{S`EZrZ?}1L-&YpV@1g zNf4!)&xfJTB8>DRY4!3OYDmWwu^(c;fqNYy);M`c`u1_f9k(8G^8N6e>#%mj5@{lB z4HdBoL>L(-RwtN~dneA5J7N=Q?v%9%T>WwC=N&{N^8|P z1n36r9uP6;ooNrtR}BM}Lip5giv$BQ^XR* z&u|fqyx_d_yF19IV5gnt(dPIC7X=7th z{14>%#~%C8KJ;=qP~!!4yJOEoNQkQ~iQz(IFI0VrE%0vaOv)L8RIxWS-i>$0tp7br zb@Bt4z0^IPnsE>Nazl!j>!HwO{?8SYpYZ(>fG2t=4D&HY;Dpz_y}iJfQ7c#S#Y3Cf zcInX7THgRCPi`;i$I0CDv(|=hyF~r^S8C^^Vm3le$Z6rG^Fj_PuNBxo%UKrOGOKEi zXb3v_{Xo^if+PLtKW&mWVF-5E#MESTKA&N6c=DNq{8vj=LL-VWux@kL?p){c4G zTheg&9zN{C21INE2etV-U$hqr^)O2mrxI40Ucrm_n4ZLQxp7}aK1_G$PwEEf(2+6{ z=kI9>UNnSuX4nAjRmQ}!_DrT=qcyb{m@83TrRhCuzVcy7QHs^s7<-rvuy4E%$w&P^ zkJGp}^eS&I8#K#st|$9dC)4nTMD`KNZ&5faq}>EnyN6wvr{|>`nP+_*kK7s=s5LlB zuiBoe{8*RUVZM!P=dWJsR_J-35A7=frN3T$wrZy)cmoxWZ6e1>j`sRf z>i>@hescS`r;$$(&1-8U`Tpm3+H?aOuM*S%edsxXpV$)Y46tp zak*EVoK8;m0@Z@087GPV0W`iHnHa$f88uB>D&#I)3$wHeT#IlN)vY)Bv7qnzqvJU| z)8z4}R0bt=`~FA!Z>bZ(CH0W{1-0~Jpz&6 zfuZdvAz}e|On;R5-^~qtz5#A<<9qiGH6Zwj=*LL0tbqh%BI3P7JY%^`e?;McLJ-RT z4d~tXGpI9FwY+8@yB(=@k$_X+e=z$=>AaN-1du7siZ>8zbEb%~GHDXQwI zs&a-ne$Nk^M)*6Okxjc%{AXN&xqzp(iBXeJ8v)gB2Hc zbiV?aF<`(><=8b4a4#=o1TT4K)EqIW>8lh~KZY+MV24N(Mtj&gBw^XW|1=xJY$^?#rx`<67=^KOwk^pwvk6fAbP`f@MzJPo1k*kl5yIP4-BX_B76&=Oy^C zJ-CQ34f2Elh92K%y9RjTl$CoAiH@JjbI^}eB#);~hW^pqj3_~TBCTO}`wk6{J5Kfh zTp%QT{BUOV@H_S^f=pV)Zo416IkrD({zqdOQG}Qw{bt{t32FVIv8`6JtJUT|`L(`d zS~~)F2tJOF=suIccztGmvI(p#_KSN7@s#MP$BHW(w(B$QO)jRtM#yGVlmWLtDLO|c zM=_Y_vR#yr;i08a9n4pmT5ti*%!Xj8z3!-*A~s9h@-^h$Aku#{d3kd(fhK~``jix zTLGLI54{UPN5ouRX&u!XumZP=SyA~tU&otaWrLUvyf=pR+6OOYHk$x;kKX=G3z&1Q zr=ICqW`j{9r^M438sISll=mG~uU?hb-d@Von#O|^iZAZIu&`kWEZ6{+xm`L?LrTQk zcE9B?7BF}_mG+ZD2)kTMu^=JSBxPgpdZ^O$WC7cvf;L8d^Is#v+CKso_#N(^A-XE9 z!0nCR0PWq^@ZbN@q{JG|#kG$W^`B5f!sGV7?-gIs2H%NzU(*y6@|!41dc6;UI7XFV zpPru;7_{k)qLqa8uM;|{{Nn08{feA16)Vszz>PEq%y5n23Q*fmwTrcOlojWv4Dj@O z2XOZVH#LgL8ex}!YAYBC*GynRu|&`4al|ynilU2C;X#vGqzN!mU0HO z5YP;PU8aH!OOkYn+!)ECU6F_(1F@Nswjr@Ojt#2VCW#uawnKjtKjSrEVGn)>9uMAa>;80Tgk#J-aRx92VQsrc&bGe|vUI zXy>T60|ct>uz<@C|^ zTiQuE;t&9|)}#N?jB+6Hi(_fAx@Y%OD7O8+ogZ$cf2q)zr+p9FW6M9G4^E4peYuzN zUg_aCZl{#lt$#F;Z~oCJ?P<9GE^33`>$?|sPb^U9W20!uOd6Camm42ZMwuo3-qHCm zJ1hBYuW$WH;~_8U8SEGYEZzo5H$J~684k7yVX_|!f*?b+VprMb$lM)Z4w>c{>8PHe z-77|Pr!t$5jTQn@@&eA=0?uP~eUe0DliuDB{asv*GHK){1RE)DqYyeGcz%Qdtw+0*m{HN*Hhd+rZcwxXfBDm&#>*g_umr>Q+NN(l(*Y;3*|e& z)+pX4rE#9{75J_qe&rucKtz=cP)K#g_1Re-8Q4FXZ7H6qL+buvT*P`XC~Oa#e5`q4 zUJoILG$UGQ%x@i-_Z-`QajeGxiVb1;znvCg+^Y}tM%arr&onGuDK{6;LY1?nPZpt( z%IOKAzMZ$>L4mH~z_jA@yVO12&fRVAlQCqot@S(=tss(8pZjtccneeUkLK?Q!U$24 z#?u)>r=eMUnEXX-_a^s}%m8c*hyg|spp8HrG!p1ON6#t57Ai&ybWUM17z+f2N}7l9 zfDf+5rgzELes~sGp&?zX9&9pm>{+$g_K!wfZAs7e+0XlqotRCRzhg(KF4YJz7*)(Q5@x?24%W+0-T~Y%2fF17K2@=WRif?zS1*2HDC&YB}Umn zsg09@TJ)AB#wFO}BvQXZQ`(5t`HVk|(&&*3jIW3 z#UoT%q7Dt}lvcJ~PR1h`F9FIsk2#aze15)=#dnbVO+*%NlrQoGyHdS_w~1JDN$W?u zQS>?$2j|vQ2=3}TDo2dM8-OsA^sMb)`3GE;{;8DhOCOmY*KgFU{)RCiJ0)(7wX=og z{bA2)@R@Bq)Hl3KVHaQtuSd)zZ>Wj6N}(c^4#`bxCv1F2DWe;vL_8s@S28UlVefE3 zN(ZyG4VHdI$*>!auTGC*mZ;f=Miw&*M8+YRg#`Mp0?{vkSod>r0ZIs%bLMy9mAgIp zVT&sUXZD^S3BK&H;xTS+)p4n@g8~{67&$=CsX)kLb;!u-H$*RY#Js5`Y?v@@_ZV8o zUvmfD|L(XWVwIVeptUE*Z>%ccui|-F<7z)Y_4v!2>4`x8Z6B@A-`~u1cUcXik{V92Y!4SHufqTlnsby5WB)xX6 z;xKpIJr+F~nSAE)Ti>PGM;-oD^y>=}q0Nrr^$9xMoA)0CQcgU*jsRCO+SJGciv(hC;!;)e69%-n^3 z=f*@nmW@r77q259()vW_x<*?^T5{CEo$;OHiz|1KPvo~@A!mi_P!BEo^-Feic_QB+ z!mJ&Cr;HtytR8jcqSr{WCgM4thCxmZ1p~_6Uc&2w47N%9P+qJeNSfi%(|a`xS)>_p zmRGTiVDAYcr2u zhnb8}bBzaiM~)}^jyZX8ow+r9VHzJT7X@=XI;sZNpX=C$nE#`h6PvNs-)mBS2XmyB z<^~F7DbYD}?67Z9!dNR2)$gfG(h2g73F$!GlLyz!q2jc(*%vx`X5Mx^J;*NX_QG7h z$nDG+AjzMx+q#_VEbz@95u=#ihT}XiZ!{2n$|LuH*`)F_P|BO9td?1_Q|HFD(#wqT z0xpaI_rke|5rDYT$)gMj@yOy$5{rH$J2s_&y+FhjN{;nL&0i|wYzEzkEdu${3H6(M z#d%s>&cAj8R;?8Zg^o%xGDyDW3RJC(y_gzlJud)T4@fFiaVTCAq z%N>@~U}1@2XXZ&Me{Q7OV3uJ@o?;GR12-~o)JM4sfcxp+SaJ2YZ}3xdbU$pXRGjyY zt(X9v{mC3z`+$ozKCl02DxJBkm4(58%$zgEg`lkbb39Xe&nTzl)`w(`{x8RKJ3VUw zwdxKku6lj8))JPPXi0ym$J&B&XUs+AXL?!u%Gw&mzQOY(qF9WpCwtk-T-TKfm<24b zb7zlLk3X<2SX-JTmshgij`JT%8jYWV<>x0n0M}+}e;(!cHT*cU&l?i<+2pvZT)6w= zWp$;wn+i&am%c~zH^;L>)d8czC=VZz1F2w1M$8>PE2-BCTn%iN z-1zj`@iJ~wdPe0Tx%>RISc_p=SW51jRmutW;cnhWI%z3!wlH8}>Q}B(weq>FHTm~2 zMMjxgUQ8D!j!<9tb5!`*!jYlAK^f&|`aGwaT`($Cr3s_qUaUv3+5>#Q&!>>y>4Duq z;F#BrG@$zaH!^JtjdK`?3~~m;BIk0KiU#LDYCuJD_bnH~Qu<^~?!qh_?7M}zrPXEh zeL$r}f&oY$BSoTfH|A~M42Kot-QIsLUoLeWP$g~?DzEv)I*pz5Gm~y>=>3$Ay`o5!Y-^Xb_~l&PdvExJ zQExymVukzF^VRU&E&4}~cns{fn+VPecYOak(-%kFUc@5kYcAiKN)V;rNbh>k95Hl6k{$gPb3_`$QjY}VmW^gN zu%sv)`j829;3<6f2WJFrM%veL^Buw1ePfO=bMHN|4q8bu*R&HR>ow%!K=O6b2E)Pe zk-Sh&0@7KvZN`{s?G~028|&-DvB~nIxke7i7zvET4squdJnp>k9c9OMPk&`n;OLq_ zpD|pY++~OaUa?7T-hbBZ)YFbPcCKv{Rabz-$rn33aS7EON%k=O#KdF&m16@wDsNj% zyJq3Zlj@nocBP0&kXJc(;c0t+mT9Q4XIhs_i}y!1ct8TQwKw-pXS0!;AtJ(l+)u9p{W!Ru)+0~oFO{^9XPtvx>`q`yk?b043{wg6E1?6u zywfA*lS6R{f!2O(s7;-n$&m+6`XJprr9-#^q#lS52U!FcGceZzwO2C&H95Bb-nMC1 z;FP{)X=(KCQ6MEn#%^FE_E%7#SmXQRfosPPe@{aM`XYgBpj3sLURZ7w#cM=#7&m7} zk1+Zlo$C~}Cy&C2(im901(yYgC@n2T{84Ib&z_EnE)QoSqv@YV8J@-NiI)8md@HnT zlx#VvvYJK58_gZ*5FB;qOs^?y970VmU??|qSLzm*Ol9*CE^3G|Pk}pljA(2^`%5oG zw%3~byUrLkFka|};0S9jG)>}DoZZSQ8Zk9i-x%hk&)0M3o9A?NLAvaVcRU0P6*AAq z+85~=&g&R5qF^q3w+5Z=Tab$)QABq4R-?Z~o){+-R*~6jx#f>qfB|6^R^XWiZPL4* z?igkB%{rQwHXs!G_G*3xo4BWhMQ3xutY(KgDs^5QS6y&TWyzEh`TIl}VPc5L^&c+E6`OXKookR5>Aa7dgcRwO z#vEot6!d!H2Hl8=mh64>9R{GD)OfA&04GVtUtz3~A&vKD)?p^~5vPPHtIL#O1A2;89iykO8PL%VAfgQN)HU6Y0avi(sW7~fD3CN{j3b9#I!J!T(7`=o z7BxVdE;W!SPM@5fz+@aNVcOMLl4*R#4Q(Q?T})?k$y1OwTHv!6e1L_KC9?5pJS9`g z!6f%e0E#bG=V4!I)E#!~>pKukd_gDC$p-vvUwo%g`PO&(+xHApLFSCB^qWxCYH#mw z6A@H5pB&2+$Ls!se>7YN{nU4o(zV)1?OvnnUuyiVBHjO#C+M?*7UBd(#lqu_V>BEgNArZNPF^oB&-TK zf`8w6^9F4=DwHS2ayz4krnnK*`AB{H&EhM=W&DmxRM@q*;ouu5cJH0`wd(-4is@Gu z@utJ`F-zP8pT{Zy(EjfVi6)P$;bN(RsgRiI9G^PvnJv#Z?B+OWcq&|jN4o5&>&kjog)S*JkeIT`Oe0?7iz~9)u?#R57;5C{C$oD@` zW?Ukgq)P?7*z-WhsnFSZ%tlf9ts|QE5069avOluR%6CnXu@Pg5EZrA<2YJBzA=Vp_~>L9N67o-F$QI} znF;c4B>Z&N&4NopBbm8iLAm+N!VQ~OkQMf$w~UjH#!-+mD-Ix-P{CfW!unHuiisoG zF*M;mswdb+p1Mg?-{9HVN-ce>u2faBs=OzERwc8!>-(#}c#LS_J{!<0{oi(e-T<^9r zU~C0|P>DiAdQ@CLP&dUn<>0yUsR8%W+0iD*A)q$5m*=;BsCh#JAk~0>n{`wJ7u*Y% z=OuEiAdF~NjP}aiCT=yl(dW8nUwR-oZWoQv#(hj1x=Q=ZHVw4>xaQnKrZ?en>XmV2 zr0GCiDrEHA=oZj9gjy#~h9vaGF%FL#(MZ^;Pid9?mFS0L7DpWJA$j!;YN5W+AaAgt7$zZ)&{()rX=VRy}X zBfnNH2`YiSly&*B4@5`>-xzyyb~A1@v0#|WX<);G;LNVT0x(f%}vFFU`yv4a{?P81yUyAT(nuOcGLyUVl3v+OkZ zdVEqL?gf=)Zb|0t7u}RcY0v&8QJr{x;mblJkB}q8hQu@1xZ8~1>qPgPYL>W-cRwnx z(W%h(Q;Zv{_xTIby$gMIx?j?IN5aH8-s4mO+hx=Wt7Sp#NLx@jH?8z5>jT+bnD%w5 zTw7U>ypcrJopZ(s(e5%O%RSq|uJ>b&$aEZgMi)-mOu=0I95Sf>qsowNG4cr&ADc8X zPCrW=V&~BIwzceqWU*T-t~{R-79G7omN>% zFWdQuzV~~)e?dIbu!q-p?pcGJjD-uuaLk>*wOK8fcl}R;4fT zGuZiJ)L)QIa+Peh_P!0;5s#JpPb$j;t6ok#ZT7drdtlm5Dpm`JBGUQ3BYURdEXjz< z%>Fhk^ZM5o(!sUqglo(p4N7j`jG0A=DT>NE4(nC=+DuvY?#gM_e2chsd`gx1inXUOPb9s;gXa}L_Z%*D$!@w%s{^gIU%|t=a(tT{I;b%+pY)XR4OgX7t4rT$Z`16M`F7-!(_Y8XQ(Ky`#qORFjdFiM zA}5#aqSre{p22wa&Vum@4mf#&Xx$U>VYePUpP9C$=A&uCtjGnjPK`ewZv0K46rq!blS$^(d%<7x4BhRp1Lv$GNRpt7)?*XD4 z2o$nZbmR()WfZ;eXt8R=@qOrK%466LtN(5&pw+OJxWpp z9y#k@Z=nIB6nWjMIc?lc+mE7e#rf8Vt3%4h<6blB87S{%?1VS_rXPQ&^Y;8Y?_gJ_ zj@|qcLN}1(_bf4<)*Hs&98YXXeXE$QjN`3CSuVK0og z)MYL3skaShd1=ipJhkl{>n4H>h_1}RmpyC~G*8_)@!!n#qjw)4Rqi?_(|=~8^f<DePjjZL{a+SQuXvV-FNQo-<^gJXgm{78Y}M3ft7 zoO5OnwpU3vVN;=3I-;GpLK+pzos@*g=Qmui?N#P^obZ04_$hkK6a5j9Qf4mY|BbK3 zw?ReL2pQF9Dv)*fz!4IWoFqN?N?}w4aCvvHV|gV4TFJ0PSNiWBD0T`GjY;d-<##9P zTYYG;H{qF649K8uZ76hLRC@VaW-vyHc20?@lkbN%&r;iscI2`1;a5uBOOB7;o-mG* z2evZb4<&pI8@sj2v>D~hxsV=b%TC6Nk+*YJ3KQAk%S8rH(n}G^Q(=mQA_S;87mQE< z(XK{D8jbp-MGHbv7cBxVx+@4!39Zg*$gUPb1q%*`(`MPYTozraQJyypfbzx2`YzDC zAGY?c{_v4J>7^0sP1A+&K+WDw^}b#Ov6_GT53{YTd?`iYLH64-mKx!s-xDpPWx^ zA(Ck2Q6U}3h1G2qj{GsuymO}7Wuvq2oE-yH@Xlo+hV&D&4T*faSoR;l3I+W5!bw?=1uK+7zXLC7jHfh0G%gj zV=qnDch?4q+!t_92L~en1ZKAr1zYRhob+06{z!}f)jKU3CRuR|sTlLbUcn2#-8`!b z9|?|`B1Lr=v0P}IN(dCY5>(}gU660J%v0tW;Zv*%Q2YxDZdIHFH~C9CW)cct>KHYM zS$=iTS5Hm%#hCVn#isOpChhe71$|LYUw*N^Gr!#4)K|U0oE<;9*3?PHUD z_9$;eTML%8K<=P91Kf zk0USVqL0yigIcG}wZjQxq1b=fDOWPS+!@#p9)50#kD&QlKPR}X1WVB-ZxfDU7s_1S zXCkS*qCgh2?%(4Mhjpj4@$IO>I1*a@`E_R?`HAgpe?eWvP7RyL2%1&W_9Nzel^LaL zN1PIv%1wvT4d-y=*G_VVWB51e?prMve7lf*pidZeE6_8JEbfeU@I(!Xyf z0CO!@2J^XWUz>3Mc}4{U2;jN|QVrh9d#Ex?e@#tPp!X_Bt9Xv*Y3yKn#x<vtjHYb z(Y0xE%e3KJr;c!KfJF7E)?WD=Y|_E01nu9X&?SPo9=9RBmi(_oqJpHE`01j~k}#4e z0u;aN-G^~${}QCVdmYC1bdRU}i;l|9$o#ZX^bCvgA2%haKkh>EEV5#u5Gn4c>VEyq z#okG69&H>ZLnY4J339;;^HXpq{f7ph|H_R-~7r)%ho@#huQ220Ii690m>POt>Fi@g<&sKUAl zml2EGrpXfDWD@*EuXa=4VOKq&%p_I?BXi+i>eyOc;mRZ$8^w%d;So=E82NK?mhBN;-haY-Xh;&d+cYlWycUk zgDr-#87NkTr%JCLBU-ztmS*+&FPs~BzH2lDYS2-*#?pFao^wGekJI;v0Psj-p`T8- zoh9I6!XI6g1t4Rrw16(g`1U@woKkY)f0aJ#TDTviXBKt%`>HlKU-^W@Z68Lrh66R@ zvya8(#_w$hef@o)qIraP&OMNM|J)-~#y_~fwzN$bONP!Z9CQg6lA;|~zKZPyUhCKa z_al4oDu1A|1Kipm1M4v4H`=f%5asZo+!%RJ3+emW<%?~DlVa?;)u%l07hO+<6vj&Ci`oD{jMq`6Bea9Eq=bO#1_v#PM0zwA{iXDb&|ZdH zrrnoPulEroTPAR-J+1PCABknO!-9os)IOXlE66bE9ryaZv_E@L-g(p4b##jD%mF1* zVshrOovY*QGrRoDG_M(<1#EASV2yy#SYbR8@2tcD-F>;Xnvq!g6uRNZ{gKKbfcSmyY^9l8u>epac*j0h8crLc!dbOhFT`QubYP%o7F1L?*Q;U&CAXWL>&hi%rEy_r#SJ7IL&(zH?fb@l*^#6PC|>LxuJv~ed0Bm z{mEQs6s?BuXt4YRE$X@b#9-nwVsLkiU?zzhTpKBx1`Vu^8SZD`7SOn^2y`+&(%8GT zUX@nV=X~X@#h4Y8-Ejie?Ep_`9{E!7`^v(_QPuLOrwz}Ye1@8ghS5im&xH3n7vLL8 z$;g-rAIAE3a}G~WUbmm4S=hH4S)5`C&?`mhJr-GRpg9M3RvlT10QHUr`pOs{@01_8 z=JDC27ijH!c_#CD!WNEnKDfbmXfGXCY7o77prxL$u%o;>*qH~$lmMr4FU2_Oaz&jC7ihl@ z7T8%$5TxzL5B6_b0Ljf#75Z?-k*@~0cM_ZjOTia;?x+0P;rR<1TrthcKG8FLE&cG% z>4}@?;3HXtrw}e77LjF*GaWG-Ztr7+mS=BrCcRWv2~B~`Dr81Mobj%+bdpyY)v5pLWZoQ$kWY7FU6%S>#%Z z7g@zFsfqw9U7?mr&lB%~&QHC^yu-2B3bjEdst*WI-WhbK-WPVNUxl4M8`X!o$r-n! z;wutNyJ&C~6gBXd;Zyt}i)B93ruyXV;hz+S32Ty&m{i6GMN#|H@icdTc(_w;@_Q?Vl>-xe7NKXX6!>-gP*b{ zMEx`sl6{hqK6(ChfO8g~OuBtmUmfb|55UR2A)GNYuw;zxU)vRGD7f=7_UOUJHIj#t zK{q=6wE_##LRaiTIrK$Rn9c>5qUP3DYZL)+W%3NsqzG-!7-0!)uYy6#VanmiAscp} zrT1FH4xhi$lE>gaK_=15Ox%5jSg*{+MM(i~&BwI?70;TPyeiVes&bB>>F*08#uc#x z5+hC?U52-C;>(^ouakI>OKn2K-==ezIf0K%WT7%qbMn^9k!fSJB4o_Y#vsq(xj&lMvt;{viTP z^h|Bwxcp{6uDd>mtby`tsYyR0z4CVIIBqAZtN#w(PPo1}w)V2rOnHSxJE#VOM2gej z0w)6w^@b>N{y3aO4`8r_uN|M!D4~rLpE&9FQC{~Tb#IJho^skc-|cFVd-TKfm35W! zEgNBl2Wn$9o_>w89712;xnVKVd8`UI^bvYgK>@BGSCRR%ZkFq!`oskf^Rst?)Q{S^ z;-`!66gzzis|irA33AP*c@9#m0o5x=4IJDQC+_fVDna^E83KgwG`Gj(dwS|2dO3 z0>wO<&;VoQddy-tLXNrwxd4OU%D@+p-F!C+{=w892>~Id^ben(1I<=2upua|>9ut9 zgCsF?R-lhm=e9Ttj!Ay1IP&vNPbV9GWh3#S@bh*Nrud4)gsY^`Z;!Iee)ixWJ3ej1 z7#qG44(uw^d0wv-h@`F?S_EkJN(K{-*|-IuJKnXhwyKzu+!W`9NH!Q?DWmmwC79x^m`XZzWk0A zI_GHU$5o$u9G88MBuCjQ^9PWsZ6ALBdXT?aa zB$Qq^Djb;43_lxlOLI1c8P+p%S#)U^sBVrIx%Rw7DG$! zAdx0|GG6Dn{(?pd!Z-0Ts%+WCZ+-oCmh(4_zZB+IyeACAK6>f2{BwD*4akNai3hAp z0W+b>Y72wQ+!NtqPc4=er=Qt z(|d=sIN#6fgY6AB08}mAxnE3q$)#;d**H%T@@0{SwLl?rAf}#=LnS7Vx2`8|_zfHV zW29CBTwl}yyde^G?{uT+{N<7CsDQEzExFU8sDC0loj!6DEcd~XFOA`renEmN^Mz>$ zK^~Stm=>-6^a?j@dKNmQ@U)?oozM}gVDM{T{?Eb(tcSz6=+=$gE$7MGxr$<9rodBB z@K{(7o(p44yaj}&NMhpi6QiV}JJFgO`Yu9EBEnyW;C9iMvriyCWd`j$n#N(y&d4Q-O~vY=%`n(Bc6&iwPjV?GmEgLAgU{s?R}mrUYoHeAn^dc?H5Oh zi0+ql2 z{MkPHfy7|`-w|kry3ajK$LdHwe)O8HOk;I4n?pkcqiF2LntP`;bpIHjC-6*#=xRq%SEh8IfObV$Q@nzlLQfD#>JN6q@wIu zD`CsB(LY4z4bk&@S0bO3L`w;mb~1JpUz;lX3o6Zf%4EHXfg)L!tXUz9Pf}3vT%5-c z)7KZ-9LVzLV^>df0H32x&MbiX+h*S{z_9i>XxllDkDbW|E=u9Ac?oS#&|gjzs{wj; z)DW+kTev5pN$!2B5+yeqxYz@OV@c2Qk=0_p+tArJ?_s z=r#z%x-5p}Cs+4KK%uzS2(ZX|P<&SsYYEX@m=4T^10aRpnh!S3BE$M)Zs}Y51FaR4 zuF_xEc3?BlzH&L+PhJOmIVB!q4`s(&KIG2 z*Tj%mT`C;<%mhvTjjwp0R|d^Rp{>fqNM^%m;yiw%%&C^Fy|)pipPb1eK<6O6j25*h z4OB<9T+|~Juvl|-yV2hy_=(Qjazq7O)Gc5w0X8EnQExs0*op?r)jx;BL)})WSh|Ew zU5~*x_u+#t8g3>-^c*7ZX&^10_t_3CS;dWDDSVsMCY2EW4ZE26)h4sNaLHM$XZg41 zM!8Rfla;QUxW1Iejj}Uq&H}4e0NSxxBy1Qj6V=QW)JRmgxCALwy!#Yc4+wA265(i) zInXqb&!hqGYhYf~KR<%u8bi{wmM`i}*m4k&mjKC|f(r!ce>_N#jW!2!qfzJn8I9_? zN)01Bosa)I1b%d=`ADq!cWB}V({x!`^;po*FNTU47RGKT21*s@>1N{;T4ukJ{mniN z`+k|aWMP)%SbY22Nd$N2Xnt@6IAiIy5&+v@&C;m^U$%9RzBK+Anu{ixLh2sBk9Hna z49%!1M4RSv&Dy&MNCRV^9|i}FDOh*CtO?OkoIL48H1k9_?if+Z_Tdvj_>Li*%L%DOTMwj=iIFpXfR0rG#pvdnh?q$Z)?f$E?$kHi2ZLVbzed*!>HIalP^zE0~ zz{Q^9(M6sro4_Yk6oW^v!FA;-Pp5yBt3;oW@LQrahn)3?oGlZEuQCdwThG7;3&ADv zx6c_@JU>pqpiB)YZw0)qhWcXk*wVPF?75vFA>Y%*5Z(tzLPxI8zhZunfazjZ0To7a z+AOFfd6A*ckt$>JyTt3deYE0x#zh{JoFosFqobPhUiGyf#oSj(-d3A-N0Psb$EaA{ zgx*!9CE(cw%S}zYd0A~vH`dV07Q$XtL}6Pl#MnY(MDi=K4z0?{;#U?GO`P|C=Lf%c z{&;nNt624EgK>5(3tPvcbp7W<7b;6h5(Ec~;T;Qq{uoWP{^GI+|MglJsI$Q0r!XzK z>U?NzEt~mfY?{&Sfd{vlrpdo6U4v1l+s1XSeoUOiDvPz(l-P=sbUErCj^j zPXW$m(SSSbAms16y(vDJlaoU@go^^wD8w3*s6Yj%`>PLJXd3w&S#MVC`NG_?_#6DO z^cY^et3RvpkWFbREG`yV@xeWdn;A(gk0H3Klh}^(jbg}e?Z9P|1Y<1) zMf^MwhQA18GNOHq;d-n3j~^-JaG@N_0*tSkw%@NS)zA-h>%Dc}^e6gp(Vy9?Oh6w( zzVwzu!SZ!61NZvK4BMW`*Nlkg^);$-VSRDRy$;XWKlk^B6JXIbL$&?lRohRdMuX5Zg4`T+iPecJ-{2-uv{&IQZ^D*>*8xWK!C3bD zY)hdKxO(CXZ<{2t@s02OG-aQnp^Hakt9JSGFK-v#sH;>T<%+Wv<8=&WDT@|-RR2O` zVD3i;_Gts&d9|o-pIa0r=NKYJ3IIx)8jW>#&f#LyA!SJ>+}z$)kGbKsA8#p|{cD2# z@XN_(_FW!N>Z<%dvu_IAZO^>x-T`{-PrmDRuy*u21BG>NOS!Ifp1aYW8gt0cP790c z4O9`s|NgTbw)f_7?Z?s5ZyBL`4}QN;ztJhl&+8IrdGCs4wY3xX&m6uJNVUEG*MAkybB0n!QoKALU^Lkd4VQq67Z7;Fw(*U*ni@KqZ{Es zym+7mklr|P7l`SE^;>FF4IkfHTPj}*OMD_S93U%BX@LP&-(w=wqBBDGV z-}`=1_N_%|gFn7X60=uP^h!1$Xi+K8Cm$8R_iIKe(*Yv>LEC(9cD>i!}*a!oS67syZGudC4 z>gZe-kR@g~t0;C4#SP~|1&L8`If+j>o`RuKT);RFW%prhcn47N1*4?TXP4da*A*{cGF{ri z6_C-?e;C9a(-ko)T#+DVY=Qp($T$?8iN}hp>7ENIT9j22zDo;>r-h}B?g(uv0$eMs zc0Y8^rxPeB-E!%5rLR9zW5X;cIpI_;roX8&!|O9d6)U{KT|6?=e{y~i{b%9V>-{&C zS>$vFXDnh$t5IFuUS%4I|o-+e*m6%MG)J^YnoYWx=EX6Agd-QXxzhUopN! zWHC)lCcM*Dt^<&vLff+Q<_ z_o3E-Q}M~8RHpV+rb`XYm^X>yoe=T&^SifJ#5{ig3Bru7KVKZ(+Qv#L=#=%gIK&CZ znI&!9I=WG8XE=uk!m+;JQSdo*Vkwr2HY-)Xn!8-o2YeYXnUYMzNGSIuD>K7zp|fr3 zKSGF0-$E=#ye58k4{Nf|5~=fn{iI zPi^M}GRC+G{O%{fj^eB5Drr%)SovWEp|OzkcFu-Xtd~Qv19@GXxWU=Z)-3xirbL7o znnpRbl#ZAa)qvjCV%;F zA$#~uyQ*fwF=w=Abf{ZhCHisg^FEjHfLUO|lEF2=$-O2aoMAv+jVR0OEY+|!3iIgz zOe7qxW9|}LUyO1LJx>${w-#+L8RR)oA3|lMQO+Tpt&9|b^!iaRKx6NiivX6pXgQCg zTc_T|^=*`EOk;;y+Gx}-H&33O{yqLp<)wV#Xn+sf;wuNwUR8I8S;>6|n(@_@gzZJ+ z!{vY=rJiXmN@~?HI5ky89 z1<;?%8y=|%p$%W3wK67=V)dT{r~v5ux;TlNR{RnpJe*<1J^}xJRSiUy#qZk+pgFEnlNBiiyVM^3s{&FtlBj zapw0LF0C3*OT&R(myuYz*0s!+%4(huLOqe~x_b)o1GPq!%RPcrrIkQ2XIu6;@2s_4 zwTMmKCMx>)K-2mqUitdUIvd4{?L|SLSD@r+A+t40HF#J{*ovtmeDmc?Q(npR*q^+c zMe5i-*2@B)N4Dx?Ndw<hP;u?lzM)SY2~mzUEvKk9RnBf=*L|wl?fTJcY`Hplw@QJX%om%5$QdK zT*^GUwM{9wsMH|ack`>djjpFe%}?*pspO|8o6$7(Ul;v(UwT(I%~{W@jZz}uZ6Y7< zK>OE!enj%Cm~I92=eYj`rE}rtpJ)lIre&eX9z661lSf-1kZ zJZpM`aULA+B0oHg!Iw&&Yir^>1gdtkteo(o&A=N@#&}8y{4eOBDpw0pJu_UdQKc;^ zvoorcsmb6v+IdH)%^@)&#bU}pTUc~n@uHN3Z9yeX>3eT zd(F2Jq0BrJ)<~Ih!dLIkkUR^Qn-DKwwC!iVj)HnQS>CI=00h;GC4Z|~GRpk2*%*#s zEoTTnf7NIC`S!0T@4pR9zu=+f+993%K8B-AILc-Tp{#RFppX+tpK|Sen(|-JFG>JS z8?W*gG(+(nTQko&{~`5l6IHW!_xiIyK@F1=+WAmJW__uA@s8~C`8OjYA8GAfciUVI zd%=5i^0u|h1?TujWb}G@nPNa{#X9|rn7q`Qv_8rEiKQ99ldY@Pr@WPRXDXX_-esEz zuW=KdTOgGn=q&Rc@8M+PI_6h-31mLUy*c zm)u;9UVU)hAi}e*)H8CO{`5MVTb}@Ts9o;PmG6?CO-mi&q&<85g1m#BqLP)I@yBfvyGLa1Vb5guncd zvlB_h%N;y8$MQ4&xJc>`^PR5sx%{C+>qvR5xZBRO*~`$vETh{%wfiyUjns6{o85gs z1r>PrusqNGm7mYVccSuw_!yH`SK1;+T#?v!d0&Gs^peT|EXIYP@*dl`hIqkt7 z^VLnLoqg;;5fPkp6%xvuy_4!K!v4!S3t9x!kJp353*!?;yk)!5@zt^+71sK4W{mG9 zNu5kF*4!;M+L?tyw4wD6xdSP4KGqZ?qfPL+7rwpml-scrvkH+mgGhYSQfg;A*Yq`r zs8mMr@YjhFoirQAT%%Qk!gy~FPGMgiD}8IaW?RpG>~7KgJU}@Y9Q$gQl$olsPY^$u z@xq}aoC|mxmGpKF!!~a~bHW#bx)sP3I*gy?+CL-2hx-mze%$p$XB{WObc|(&r8H>o|QqKXEC6=YWo5nTd|nMbo#;s z8?Wzg)n+aK%G<)L8DRPkbCwXu3zt-H)J(?bxhDr6K89Tk9lOW>D9;?5vqGK@H<~jg z&;I#*W{te-zbe1N-YfJIdN!UL7CUhqI4^>^oY9thhE44ZZT;A{UR8P5XTVWJ`)#{xpsdb&8HBZRl+2 z#>L15z0PkTuN%~Y_HM#%)`NWL79TBGK8<)DGVFQRXZ6W%GUhL+dG2UBq9Q+{Vp?;k z)5Bk^1lBcSb8@s6k?&of@B0_@?|XO3aQVHvMM1sY>o5_AVe`YabUiPA4)g_3H1ytk zJl(5VWe{*Q$YV!_fkSW8&Q`=f)a%K!y35BcQlT>uwRtvJARPJ^Gz^St@Z%`SZhqsX zY530JkIP@sTm-=S<`cfZpt1|9!G@|l9vrR~3bze2B81c!d7p?S_5X4*{Qz1h3N`Dr zLjwtpmk%mM{HGd=)qT#d9d23{wpr7wc|UgssLz;9fv?m%H=pd{eN)U=5%JJf$Y4=3-;sE7^UJJn}(G8vv{>qClo zy5&K=o$Kqid5lm5PMr^Y5)L<~LCL4HMwN2gDf{jJ5pVtp=l}BVi@WuER4sjvTI`02 zYhzJJ=M8H@sJT&~$fK#lsj$s(x~3Tw@wKV6U90x2lNqa%F`M>76RWK!BWcFd(|}k` z#_x_A`4=V2&w@mzWx}M-Z+@Nw{yO8^x&H_@dg$$OdtDaH;=U~Ka^{n_xa8CBU6^Dt zCLm(?>z*35B5~#~XyslHd${3n=%J52JqDG4#U~fH`DlI0K6AP+|RqjwFB!* zdJ^G|br5a01OD%S{P_!N^Sb16X;%`+%v2G`aX)7*to{@WYez=2(HW{?hurr0rz#R{ z{yatB@Lg*ISlT&bU6i}lf*#u4lzXFLSY0o-^W(Fc3N4oGBKJN}zl`(K9z#%}fyn!c?xYssp z*X4VU#oN3KVS_7QB;%OdhNF8ltGc~%UlvCH1jw&7&;8n22~oW9sU=_q#Pr1OZehLB zqPl)L^PIN>0~{j>=&$(3YpAw&_#El*gZ0M}jUFbNXJpU)auAORg?Km3 zD0NCk8{xx0X1(8?!9auo49Z-p>u`AX%KN6bare>Ot}*tL$DQnBNWr+`}&C6Rz%tsyw{{_W5oQDclPRXrPbKbj8D?8>$ z%yVI{4j=2_*C&^4J5~c}uQDKDcGu-Xahz5$6U~eqzJHe=j3yg1z3vhCNj3s(&v?Kq z+Kpj`#}J__y*EVcIS-2FVkOSPPM6LEvwDFXt(gvgH75eDAdK^HP5N-Np~I=^m+0=> zl+l?C$R-Sr;NIqb6U1lfpY&@|A~>x}+aA#+k?B>o+H_s5QUiahJS{*?4eGEcKq!mhNh!}RxlLMh?RZd@`Ij# zaMCJ!Ip?d(;^5-!rYjLAHZ!FX2vh)5c}c$a`-CO_Tj)coO!K1tNXZ#vl-Ew-}Jh4u{mtdsyd8 zU8{Garf_xV+Q}&B&E(4J+z9i|5s3~#Psa&B3DA*17DMa*QOBMCDhWp;k0t0i2iK<* zWL6zbF6kuz4$noMW6|Xlvfa%s{ZNifG4IXBY>(rUnWuYZjhg&`C8Zt_5uJtoZQsL1 zc9!kg(a{jKwciLR1Rae>`v?F3@1S~bns|GYDo1S)=En=oD`r9H3>(C{9(G9($xExt{fYP?s{a`6X&+Caet~ zfhJ{gXKJ!a*PTp}AP6W9+^@;lUXQYC1wjGg09=6+{Xe#A_IET#d2GzC+ZhCCH6_0A zJCn`raa9#)67^CAAzqR>b(2;1$DU1j_;B^1zcM*6#=9x*##Jc1w+=`)`rr{H7SIJv zv`x3jeu>au&_0?ThbHNDI%@t$A9#;9(Rzu;-fQ3R9ixkNs=g_zr%@8qL>5i!Z0=!kKxD9hfcA)~Z7jM1K1*z*2u?_fEej~8%|qZQ@}g*RPNFlE@y<=ub92_W6>iASwl#f<)&$rAX7K>A zLBPYBpzHpE>vR{{{*N-AUGd)=MC5da%Ffr&WleZx!9#h}&f9`&@et(J8Q;2)hbMsh z;G9J>9k0qcGb4ep5}7+bYJ!eyk()vuTo*c%R zDjG544E};X+4_MqAfRXn2*d(Dr3wD5i5?~L1L@lg3lP!dG>NU`;VT6Dh*Gn!&8DSr zom_~hG-dQxUp0<22-tGY*)<16>UI;u)-acJ{@U*0xZ__?5nQX^(*m+{WX)?`&w`Gm zLu6=yKy;uC9GaqqR>TRD7wqZ(+$6anl4O8d@sC=}NR6H;RdJM>vJ9zfd0C^D6mH>R zWN_?_RJ6I5MYpxW;8GmXe8}Y)G3B*(3wbW)cm}c*Gy<9n>qOH72M!*TK?g+JP!xRI zS|SLfkMVFY?`+`JTV*mEkTGNJoz$pF`iH zEYb$dTJr|HrO2%Pb5Wdg2Do!PDD79rVJNU}JUSABh{hp`blvW?6R3lrs2#enDXJaY zqZhLK-ZzU$nuxV}5P)Nt^m=>)GzR!70G!yHaQ1=slpJ9D3bHabV9mSv?s@hzCqHKk zfQnwp;n&PalYGHqUmnlr9l zGhP&%(vJqL1cMa2JUa4P)#jj+QhI z%6lOsJ-v(HkV3q&cS>?FQ^%yY?rV)K=!_i6h3!ZqF+i`Sn`S(~&f63sqiFn}lw|9G z3Ev zE6o#;x|wcUKoKzw^n3zKRE}txp;?=Vx}!rmXP}cq-Vt4d`ou;Y7<0;lfA5Ty*yOKc z3VntI)ml)o1L+MSsu zdsidXiWweb9e_ZC`XjRe|G)jA^#r$ z_W)?$e{02~VRUGJkN>?-3oIcc8WVmUL|1Rdv{-TFUC%&w0^^L2IHtrM*ll)Kh$kPf z?H-2h9$>>Gh9)?&LP=h(nBqbS9-j7k9-hb<+8k(aCK{_Ayi< zX6~0$GE-A2y11Oa-59onO_8jTLc&KzNvUQio6OelS?7HJ`2GI)Wx4M2e%{af`g*^g z=kt6<+-;@I;J5DR*67Xk;x7j(_y0@TJsa4DjvRXcVLKuBqY!aZK&Mpq-FiFYc%_3u zeH2jN-HKJYZD3)``UJ1Z+;o;x~9T3z>b-6l|sQZlrI6QT0J)qRHV6rvK9R z=>V`2>^_#$#{NcTPY77P=_&}M`$X|}442L4#U3PE&5xAB*Dm)cZun4wZYgGo1Wm3W zRKtp@5{_tGarZQ|Ss2R~2_B}v><*g$o&O0$nWlkQlE*2)wq=YcgjXa-_u%Bx+6O8u zMsP`N0%Rr9FNLYEr}gY!8>8npM<6h(Y2u3>joG9k8M=Cx7$^OvYecczLI4d^?#(Pl-K@c{;)i} z4f2JSx3;L=Req_mTppMCP(o@3&4qjX;z)@wBHef3u7Jr83gHND25#a^{>zx0o&(LZ z(!l2*+9-Wr0vCP$-@i8P5sG?ZVTjkjloIGdbN!QSV9sxxpbbE`5-+ZJ9LEfn?WzPy zl?ayznS1R|*2gXUU&M_*?he^C@KXrxh)i{5s)qdgOoVcA1GiFLJAekk4K#AJK5TBV z0F2|h>*0);>*D+rg1n}e6jK*tHDpj;hf^M2px;K5FlZ=fA}pmI%#)26`Yf7FE)MQxdy3DscF8Wz#Yp8QE$SuxIp z>W{QmW6@{WzgaH20>}A*0Q!GNbYFRNZ!>KlR(h1> z5RF18XJ?7~^p>Ilp!`mrH6UB{Ibcx;4TQ!&65sQuSN%1B)<8L#u7OxnYnZNF1~uN% zV1h2I`-sJ{*j+dBNOQ*W)|ix-KICRPrp#AVoE8wZ&^~BI?Q6v{k-fH#3>2)}8Xu+vxEaTmxdlz5p$*dtA=)%|bQQA$5Tv>(vC=`O8Dv;@u$WjMgpEuw z1osi~Wgnl?S~fF;&S7TDDZ2}?Gn4=Fi~!&SmFaE#7K>8zfuY99Of_C)b+=|!$pKXG%B9RoIc=X>3MlXe zoTqQy5$SFSeIOZc<46VNt4=T^O{XGZX!Tog&^-jq44@E+z9;#aYkBn6yjA?>d!Rz` zVjNv@U}kX4p+ui6`+@NNHCig>O92}yte@nuJJI$`GTTD=;B4#z-2|*k67kxtb8QuM!y{l_HTfS zA{bh`?=QYz+U#f$ndXcBZ(2#TmG^X)V$e)qbj>my8#5osA8Y(auX1wAG&e-L2AYOI z$bDZk=$<+<{}>E4RO+h)K^wyL>|h{mP#1_n`wTvHEZF8Ry^mYQW%L2ccf#{>t|J-} zSZ1@TXz)5C?r#TioUyEbgaT?|00(8djN6X?Pdva2F?K1CGTho zWfF=^Wa%xk`x_6Y&S-}3?zS(~LMz(AbQnNfaAJ&j1PJgS))D$Z7(mz> zD18JP2?DsfoBmPoxNYz&j9vz+A+n8xVX#;|l@-%geFVYUg8{?0RQjfFNse5LT-6uF z#Wq7&!rv4rZDu5eyubhx{DJ8G*A5l_XC_b9pRYY;)_v6#AR0)> z8(?b@e;A#f_WaS<<&c_|Yot9DsTZ0m!+U%*Q%JVWLWzVTl8{7jJCl`nXTMwH|A#Vl zga9(%DM>>gut}g@I6^cCqpQF4`7J4fEFb0-JE^T)E|b9tl?W7c)K~x6N^Dyx~i|Y)*Bvul2&be#$3ti(}Rc4r`CI(Ty{9R`o3ffpe};RGB`@y zhqJ9D$>1UFYtk4u!FX~ee~I`t(#mHY_NXgBS0HXMC1gOI#;gjX7!-dRJ9-4v!oTwN z_1x!_iRq`LvLy-~rhvXL30Rd-%BHaA0ePWZ=syFafGxsC(D1f*9lWEn&U=UXC#87? z1@7%3Dn)Pdstk(c3qcIRfw-v1nl>Xo)H!p4F11>Io4QpDI@mD80*f$wsazBi`BH=Y zLqcJS(S5=H{2>1mXAld~aS??~@Q~2?(@{HuT$CtDdj&H(&{It1@LpIUN+bj`2?R3% z?gvSPzz;?8g%mjnKAFiUgYJ&}dkO&FA{YV_0jx_>dpn6VEQ<}8kV={J&o1q-#@wnL zo38<cEqqY^;uwVhu0$^~6DUn|-0f__XW?l%G7sDjLB*5PP^3Mkm z7nXvzNyM9{a}6hHewLy>DeF5VoA+=tqY-aaU#01BJ|fk|zm$oDUyrBLpWHp#oN5&* zl}SkAkt(1$IqTIDvK3Gd_=ydJpk|{m2oV^yAFw84a72f50?1 z<6*`hzot-P&36;@{kO6NM88|ZP$9w{rLRdLA`1$4?`R#`DQs9on_T>5?cUP)-@|R$ zsl5(K>H+4gu`$V^4}J@c>CSXXg-w4~E#HXbtW|TT`hSXiT0R}3#Akvo7*zF08 zvS}$m0viP6ab-oUZSlbre4UZDY-V5UQ{^3@rn~WqYVptCBsm^vqK4P2zk0#6-Z#P9 z7Q0c4ykpZdoeNsZyb~qKP(;OYSt6C@P;}((OFHL0p@MvH&pLNkQk{J@9bkp;D1A5E z44iOZG@+g|L2j`9^5o-~s!G<4Dx;5{BU3t^4f`ziMvYr~=g-?iFOCm|A1tpRFYP>N zm1MfT3nJ>^kP2-`o4pAvbzqW=q+c`nA=!@cEotLl9fi*vMux0@5U~@~!Y*mr?7oQx`YzJz%|lGRRtpoI|Pn$^d#et zkwP?l+l&NEzOH}b8i^?Tbmi;+xGgSEvuM3tI`9hx<;o9vk01E|rh<(=*EdYykQP&( z{zuc5XjobF<6U!WW|lMc*5#lz9Tnl0#t-c<8Jh7TJ&K^1uUfLwl3< zCx5D9V)cc;`Q{pe@5U@PUnrKP56~M*`|!W*dDK`N;LR`K4XZrr$9H_`RI4=HXmr}M zW_!DzD0BW(d4-_mJn3O{6;$>EQSXH(UO5q0JT(Xl#1g%)zLR|iX-fV_NALH4RMICJ zOIHJb7B6LLhTXT~OJ%LkA0}&FD6ksTy{}*Iz5bqs@iofdZfJyU>MqIh?jMM;Hy$*w znSVM$c zmaPbQq}Ish7a!%mHMl}bMSoU@WW_eu@O0tPU`r++0K~qibciFA*jyKv;c|@Zk(Z+z zE-E-&_KT$vK=Ki=VEx@M1*IK0s4!qpVWn5A;9)dZ^t!TGKkN9Lydb}1aQg!1T4^*& zZ=nD@1}vpIp;{^}s}V~SebAX+qW}fYZ5yRm^9QhGdit-})Qh&&u-~1_1S}|*L9RvY zo+I%mgCg$oR12!Tnn3>}h}pk|N<(z264y6Qj3pG0pteS|S&#h}v3rN8#6-%GKx}@% z<>;A4zJMc%dqPCnRMkm4fXjQX>7*IV4O$-H8OC7bR_8B zDq^krvBJ6v9Htg(1mW2Gd+g}75;iPk@>^8O?t(kr=>pbzhn4<^vtu9PjGT#zN= zqR%=|I1&o8^`gXJXdJU#%a@&q;$(qILPN?Dg zUHzNxXr{3D^{@ae1C}9&B`mHKP1l(3LDQl^3j^ZtQ!fWnR~SnE-&DW1=()ZKq2CQolKsJ{4+Troe3F#ydY zXe;NZ>Ayk_CDFhn`BDaD>sV0$$~O3X@-nh2#?qUdpCXG4;@z zw)*Q8WK+#s_gg!zgQu(+z@+HyfdISrAq44X0JkaI@ zZ^03nR8R+923X&(vJXP=0ovkMdH|Q=P*#|V9Ez9`o6uhy>D1@B4(~p=om{zv4huI( zegbnTkd7Rm0W&9)M%Tk|L%$!h#0z5a0gh`>Uwt2B6&!*21))5m8xe!IKsp$D`6=7J>lO<~|~!9o)7nn4Mf1p{Y~)vzcu4g)M# z(xNL%LIhwaHoRLM^?sQH_F*r(p`Iy*44Z3Imr$w?P1mmBWEwi`=FI)e#8z z63I$JsVtz}=R$KBN7?+$wbk3{qC82Ezhe9rPV#wo$T-PHQPD38G(y2fWQf87v1#5{ z3=D?Dx2~&nuQLW4t5SfaN%SvAGhZ5ms4A}?qU*hG%D$%Z+qTNRcjqt3b&kvj z&-@Qo##UYxr+ia%ujmgxas}vbYcnq#yETj=WJ?4x2}L9t0Y%6L7@bhKe?FKzpCS}V z5T4Q1v_uH_znl*WRO%SjOg1+I`r`*G&vC;opKWBS$}X{%E51ZjyqbGR$r}?i*+?;* z<;w{{fcFfh1nk4W%bDSbPBzqH3rUrYtwM=k4X{tv1AC;eUjxk_IIvJ2%sxM;vSUEe zu3zXCxY%i|&E~+B^etKiLLjfymQq}k{npnb&^M4oiDj~qV4NK+lnX@0=h^|g8eC{x z7r)jzkChC4jjj?&8tV)cHIy69(?L{_2-z^iO5D2Mo!qp&XCg6ce#^{;H!O0Q;Nijl ze6tx6THhr5C^P;+ehKd*28rJt? z3PnJj3k(vQzlHwycuWGkQ0YAL@SxVwd zrP+#xe~-T&`>9xwAnkH=Whs|QMeDB!+0vg#wu6z{bjnhYbb&z@!&9Z#_pV47Zd^r9 zI`kfdil``9HiDx-%waSgXVv2nN*D|B7!p_@zpudu4L34Y2j)6@>&<3k=-y<&SaYKtoHjVc0}UBV2KXEVICB^wfQ3`55x;aTI^{R`7)EV) zgS^W2lSzaC;#*yYw!k6j2xaD=Xbb2nf$Ip2ATgNX1{k&y32f=uV_4N;ZJ~%E2fvsK zyd@0_F<^*J5l=JwKq8E8C?QmB$8W0s6@U_8>5Vd&0&F?UXb}v96u;!R1?RO@ zGziu!XrTM)jwUZN1-48e%Xu7{1`{|G6e^R3#R66YEV&H7;VkKRTLund1VzwDGC>1> zS{XhScqAhrH-Sq6!r%*q5}r(g2N4GBqQY)bB(Rtwv^wa4f*nn0VIvbH2yT>!Yg<8D zrd8tn9Qr|4bCCcXhHs!6VVGP34M(KG5p*EcLHzs?8sp?|PiO*=&*TI_xIQI!5e_V6 zf-HnUSIqlrfZi<{p{@*eIY=95!=R}YI}a1fB_!nbYHZ}Prfh=VFY6s^lFKK{W4rEm$c!@9cD&ph=Kgi@(;OwSbV7n7F);M z1)-n`g&55iSh!Jrlo4R90t6VWGU$>9*~-aK2xUUC0ALFMJuZl0A(1A;&~ZSk5sZLc z9GF=61EJ&j!S)3*#9qqeLm-K9VBmbGKJ`S1B=TK!qm_^a0jy5|nd^gnLI^a)l7SoM#cDvn!O;v{1f6FsZ_+h@etsF&Q3go1l<`FK zK^x{_44rpxFq-66U1{uSEfD}QlSF(FQ9)x3mK!BNM*ToeTtqPn&v4TRQc*ypW6?mj z=?GiF0&O_54;UuJ4tNIN>N2*n4_j5AB5W)Z$oOz0BOoB{50#SZ&ww_;Bp(Jff;Oz2 zCdiTiQV3-g&;y%vtTqlz33@5Rls-x0N<*%fJE|aQM|DkX5n97Md5D?lm;l+`LS^MjOy(0Y{KCERRWm z=+A5ft_0x#Y#=WOzpO>!#C)h8TX|8rQe8P63l0D*1+ zD`h2+6)n1!Q>u8dGe0aa7M(Kw|Np>-c{0(?XTnKixK2dyfJ-f|^_-kuO{`b+tMnG`@FnH6A%sxEP> z3f%^#1BzHMm&Qtcb!9LD6@dc0Bf#N67VF^D<$qprT1Q%gtQ@}Av85?A~LCnO0^1jYakB$JR)+BAf1G1Q#q zW()=c%z+>}grNC=Erh@-!LpiigQp)T{(f{Itn?JXKZK&9lKcz!git`}AyMWVH@Ug* z|2;H5B%}EH1h_F&T><>f70JUeM1}O-hj0ARJZyOWe4fC1W@IZ=c=t9mJzj$Binu^M z?`!Qd)SbQd@83z9L8z9$6Cc)TecKm>P1Up#itP>HYchyT^+6QZcrl zp0DV}We_)&TevGwpI2`k-`HWJ%5w@!Ry#9injE#VXZFw1o_XGOEkRXI8OA=cv14lg z0%c}}WglLH(_xM|^y(9SEnhJ9zULaJdBRkI-iR*&OfGftUKIz;V6|h@?vV=UV;g#!xU38$=2;S zg<(ymu70%BOq&U(uIwrFw7~ioMBEU0P`O>dQ>ia+I{^{T1)(?pJ)DnS*ML9$SD1gN zmZA1dXod&n@-*ReCk*Y3zWva}_WWB&bL0J|9%N)pNh}q+TP@BLvXN~eEipIRzT$ZY zFcyaNy`dp(8L`hRcj~XYFn!c(bB9G)p?ieUt2^}uADY8f>Y#|MH^Kqhvqtk!lj;fB zl67aP7K20u)LD79Us(y+e!^Pw=qD48a2&w4&)V-1G&m)r*aD}dtGcOYS|wERmr9JP z62yc_9wxcY-JX_ts0dp8PQfkpT+dwfH_gNyFB7(=kfJekO}vIi4}I1~#b!mHsyVy! z@iTk8f72#RvD3l|PxQncEswtp+D{YOiSI2}Iyw!|@H_Q`W3X8NuDw=d&lUKcDqD{Z zhh=ugxLo(h>j+^C*#{7hFp-{yX9Lh&Lj5nXqfUtz6Bl*N;-3sGzr%c5bUj<6_aI|A zYBA&7*=?kJc-)fOb(zMqG;pZx@@h>SG~8|dh7LnaD&CyNEx|Afb`{>zAliGTw|lr{ zx0=tjaJ94xEA*=}Y|ox;&-L+C*3O*Y$WO#(WY9hQN53^#P`xUV?jf5V5eyAYF*pn^ z)Z*$j!+?#Z=F|}%ADksFHH?Z;{Wb*ITAlZ4zoJ7m&uojlc1dyl;cB>Zf;j}`!lAk5 zXnO;sp69om(Cwoave*x_K0YT+mhdHV1CL~3n-u38z?0;g&vU%An)tTou!@p^!& z;p2s@-B^@3G*LJ+C^j!Kr#+6_zwT1&NSnLITU8}w*vdCE9)V0jfmVY4$^viGyFLVq zy^5VTGj=iiG{aUt(&)L=S^P;4UAb}h&4Wya7G2dyL!;@~P+V84kB6SB=V}91e=e1q zinO_{g?t|QshhdV9{TvKFR;76&^#-YIh3@6xUs#f%X|N@UuX2&wb;uy@K!il+`C!p z=j;t1{L%K@b@V{AwRwWJcFJ+%(chrFW{5dwZx~X#MN~jIyYH3;*5ZuCuPUJN8}x$a zm5Yo1ZQXfhz*U`1S~SCr0otOVAf1TpQMX4n>v-tBrzijRb!*E|nA{JxO=e`AKTr3$ zvS4`D2isw&rB;6nxl=*0^EEBx=}}eHJ_+^t;&rq}*f*~Y8{0zcwPs>&G4PlRPMzOI zcrI%D6t^eoz`Cw+MLKB{UESdPY@VCs!cq49ro~|E_hXxqJS}rQSAUASo1JX|f`?m( z1FX~D!yF15C={ll9V{&pmj0V*Z`09>Tz1-M6meQ zR;N8Q8#r8lHeX9$zvR;9>y`F;>TmT{_^%l5+@o%3X<6bNXJLd{7h1T>E_ziPk!bCl zlADx?yhyYUn7nXwV#O-j0k3%-MBA&jy36eL<&dk&Ih_QIADr=k{i50zK3b zy~y?fW})G<|hnRjN? zDXpqR{AheO5e{3ez4ZH{zTbS>pW}(f(D-q*5Bw^(T}gSR;oIZHMsTh_O-ZHj@hOPa z)+vhr6i-?jRvv%TIDz}@+v1W3Y<+A z=MnFSDa^_BTuU7#b%@Sq0#m-z-TIiyJ#A^eaVRvD=JC?<6463WXS-RaU4mvGki^FO2$9Ba&76_Xv{xq{I8OHpbdr~w~MrV&54Dbw+U z8-v4^XPvS<+(J#EyTG9NdiGA0v;zO<_DglhAzgWmV0tIWg+_IKiHVvotu8Kki|N^k~Z(9{98)0BLDZNg#MO8e&xSYH72B`^|}s zPD54Zh&GbnnSk3Dj#m8MN!(_q*WNbK-hED6ly{GVO&Om(RW@s9Ry-R7%>Ze-fe4@1 zed-bGb-JXM))kWRaRSo{b$P9-bWwa1vQwKWPQE+yS8}hQ(vsMVB-Za(+QDJrFbIX-3cXsKi=d3UcTR9@?s=7X& zedF8JsoDap)2fWR(}a!j@!MJn%)wRkD~R^c+V)2sQ}G&6Z4={h6H`fK;jQ7*rEINj zkEVb{ij%$z*t&<>p?L%UXL?%a-?~3eiGz>WFBP2)_)8O``s9;GDyj}^sek4T!$>Q8 zmzKdg9L^T7cn~x@CiJ9Uiiid+7;Dx>2V(~K;mvA%qPrt#uz!+i-L=#${2Jsp;rdpeHUTkEVnwNW>_q9vaI&fWmG~Dv) zaJ#9lQg+-q6Bmme>Jm0>fqeI4`=i;hv|{nwWzt_*_BP;{OIq;};5@d!)B`YU4#vd9 z4mid8`lq-P9gMVcy|hdY4-FG-j%H@&U<{N}yqus~UQEQzkRd{?8xQ?9K03N5Op*S$ zTkDw3UQ5YEI!;MV+1lRPdE4J!v^YbIXI%SHE@9(N(|D&kR^gDpk>(984~d7p%~8r> z6JJ|=PiVXOtoiNLx3u!Eb-r)XG0Ag#Rk<*p3LYTq6!&#)j`%E@kDInj^CWKkn!M!A zKQjT6an@vo#^afj(U@Ba1-l9`>4dWSIUO$>pTo5wwZ^LZj8Fb|KjwTO{l=wS&-Av? z>v!53-<`&zpC%X{u`#zqN84fZ6TGwxwbVD}mygC@#fDBYR$aLC$QIy>%Gh;=7?0DD zO6KE?f{4PFt{jtMca`*!BbA%)*{q`nj6Bs}Rk>BAcI-9F(l=*EPgi$j-|_LdxwUyp zs9AN#OX0e43p{qIFwZ-Sq?VFaBjkR6J#OJYo17I{r57=#+UCXX9{Ct8&!=VW#MXd_Dpc+G?xn!^JL|kG_97m4-k?s1kG9*c&3tCL zvTSoW zxJTq#&N(F&w`Yv6(fTOX{r$sq+G3Kf_qGh*U|=Msc#;&=uaOh0%(2*E`1@ zXnlChlRYtI-X7-Ei4Lt}j$EIbF-4uwP-?rbvgMkvJ_9|ibb0{lFK{1VeUv}dt;@&v z%5g(~10$`{0-X+fExLiRM)y=0L65j@|Im51NGsR#(fcbynQvXL*Jn*SotRj&(=#tU zh23(hPdZFEaXLvuG?&Wc|5CbxxtOtH6_PsI7!>g(hgC+>&6o964Dr8oUk)7k8vemZ z=a+ky?V)wPdl$cq`^KlVZgYy&Gs?*9s%>Z}c#u-?<_=I8tsu(maBRnVx}Jg}5KfC9 zt*z}DZe2tCf`$?DHd;L+glXrGccAgsv5ro)BXewgW7|{qgdces-ov5`?JTyRm^IZI zdzjSi9N#;->@`c?$Ik>R{9f{oxp>3#`JE~x(!^aMCnI`1^`x|?ckKQ7*b_XQt@m=A zWlf2hi><9KrZC&XA_vJ=sItmxH+pj0Hao}MB*?r&OMMQi&t@2g64BQBXSOexUZ>{! zbCEggm|Y+q=qjHFPD{UXMl0KMZM=>VWTZvc!6ZlGBknkLAD~`u2#Kt_Z^BHNUt6>H zTwId#PTdFX1JXEY?>YSVKD7bqLIe+5#4ZlKrZafwea{Cqnp3;Hypm1NX9Sgt+9`V$ zQg*bpvIUQaqLd^>?~WSVEUb_k(CL=D1u-bYj{unt) z+Vp;*k6ir3z$5E`g;uVI^pO+}Oxu75L9oG->0yy_r0h`cygu)Mj@8IxbL5TldVf#4 zL-@yi)LI{3zu2fPz z;YNaefYB|*UvB&{wZ_+tWt*F^!z`3mhWa_tDVLd=o}_m{w{&VcqYGCej;zwOm5n(>!`m%(1|=sVhA9 zZ>*&~Up8=m%=^ixseAX^-FkNSTn0~J>br_oZl1%`JCC)R{t{Z7pCFEbYC)K3c>e3+ z1jQaJVkYt9)bgK_8ZmGG00(i@9rL_PjiH{bc7MHeR9uvJs|v2znq;d8!Ns)(<`2L%z>dg*%1!wzMyD+pj(!|x_{Hf9Op$vEmf5> zxZOQheF*V?-10xOYeuoZL~n)1`^>pB{h`}0cHTQ4<>+Lt?!S7hr~YwMZmLq=-r}|? zFC(>dFT4AipX=1@d6@Z~x+U{27`I35<{g>}nR8$U%!ujVw$6pVGpp_p?QRyaC(J}} zC()eUwO8ls=XInc^>5&0&FV+J)g6X`)TOnWW{r$3?ECESrvpol%_Qd|cUnhUzUfp6 z3>RG3O<-eT;CNGd*-_bss9d#AuO-`MUtF)?DU4`h4jrG;XpX$@nYXHP1OND0Iw*-V z-BO|Dw|y6CNRquVZ5jVO@)v{m(ArC`flPmp`33G^dE&qPhJis9!^u7sU`lD%DM5xO7g z>v*)#OBIp-aV{~~*Z-Z;Myb8*@}R;1p6q3{E15S07Jbk9rQ#L6=JWi1lqsgWGCJH_%jH7k{cl z5`WM$>s)UY9UDPEc1Jgg-3|6H*e$aS7zF7>0V*r$NASsK`yWYg%&tlCy70@E&8P zfDy{XS7aV;)e`4! zhHknOb1CBX$}*zIsvL8V&dsKxrnBF#%4NC6LdSUeIsEw=KFUMqefi17;0nMWG@djT z-hu84-B}Tps~@!T)D|?uZuoR?qQ;C_%DTp;F!G}o@>i!1BRou_i@>PP0>s>63yHD! zCqCXZS3K}^aJampO(Ohk%YJu#lcZ!s>X!E9=2E?O^rDNPl`oyEm{03?SxDYcedYM2 zl<|Cmy}6Hn$w=Qxi!iIY1Dm&9>VZ7hZdw7J!e`w*y=HBV&-9v&f~8Wm{50F|3o}WD z0EM(9NtYGxl95fKogIYSz8=t+SHqfKbibq~QhcZ6G;kCSJ{Wv>lgk)dF+O4j8Qa!I zek$^S9f_ye;|pgEo73K!{k}8=eRiBxS!0`Z-z@F^C}mr1L6>r?-Kbea%f0)YW(rRC z_48Wep|tyy<%_RqRR-w0x07tt0i*3H{KP#mfv;DdBO0_Do=u2zo;TU<4Y*ueQ7 z-y7U^k2fo51wF#qZcQy?91a&M2Tnz1oQ)E(Y3awS9YJF0Q}&Z|moFyL<)nm;G8yr1 z*(XgUkI*l58Al7DyFAl-!vsW|6rYm01sbkX`{v;(n{c_PRS`SZdrJ~PR(&3I7xcfC zASG1P#^>bLxFE`q_otT?nXVP59+HO|2n@WvRbvr`VV78maf%-`yo?XyZT;GFp0Rl4 zUru*FcJ^vYrpLK#U*^4M_U2X%(Rl>>bzxbMUhcw+-kPUhW<148r^bd%$0>19(~J1< z%;Ygb?vQkHE9^Y{rM{b?T{m5HKmcQEQ)r!!b;VX@Um7Hh(vh@xABzqxpN+^u6&mb0 zereJ394tYTogbSl)i!RcnO}(3pa?0a_-$@sr8t~Zc;GAjyQK^$`iny9Jw3sQrv?;FkU>8!I)dXtl>lz!&0YUrF~``S-n%h_%5 zJn2q0w@2~#SkSrD2R=!brNk4pX;q{FvtervqiyK*tD*vZ%?P@K+3&6ooG6TyUvd?x zvpKTC2GPM6SI25VaDO6{RF;Q{hWPo2TwC* zbF=rWVtT9fXN#6za(-#vNH-Gs4ylbk*rW~dKHojZIA4V_G${Q1sIl4UkV?x?*s3b)dkMXl z+5tOj)@HP~873TItKz2?gSA<+qA|xd=+omzwOkta?c+u16`1_t`>=VP)$jr`t`ixK zY9oqc$4K7JJoXnx*Q?S8cB5K$!)hWwCGy7DcC+tVD;L7}Cv|7&DbMpp%b*RHqm!orF`pS7;fY_4IHk zy?3gb*Z%HH;hpe2Nzc?WzBd)7tc8~EnD#}a-G#50pzbMR?d%rO9@b8WX_7~jCOLUS<;3w6{uDpRLePe(0# z2OS@k@Z9xa{kmv{?^~&(cGJEK zhzgZ|PT5@DJwM-RXR6l@;*K?p-r19-JIB_QYsDN|fB1oyM(jXrs>hu?in2pLcOdzm zXZ2Nnd#~;C70UsXtlQyDG63t8$bzkZ#3VH^X}W92#jIwk)@6>0vGkIEdvPy@@*s4*D2u zNo0&+Wa^=nDOa}I=5emXFQyAQt1>rpC+fb8rL@ZQ*Om&miNAM6-07V=-ClG$JJ-{i z?%d6@Zq~lz-kt}HiG0VXh|==3xG?#Oyp2q&v^AoE(b5;y60?+5^n5b_Ih|zBR zM7U&K)Y8jia_8jsB?p0DF;0=IYl_}{KRu|mFvTwYZYo{0dX$?)J~?%qpUAiTGYb_D z_aC}@rBtOTYSHS?TfGj(BfYjUzkaB|Z*J-VJF0B zc{t{3qSLBz4{F?l&k8xUL!qWFJ4oaAfqTt>+XxqPqf?TaTI*FbEGuQ6(km`9j}!G~ zkM{Yv=O(Md3-f02ncqM4=DDuk$>OCo=?2_9r(*6K-?!j2w%mMiu!ZqF&%rnhnPa{w zc8JI%%szS6NV?f`|EzlQG<(%-r#MFQ*nt14o0gXJzW$wmt|_|+K~y*pvuNjrUC`R$Ln-LqIE6%QEcdY`&K!AanmJn9>;-*$dLt&MtSO8cOM z_v*9tYqq2n2>JWHq|9=zSn$=k9Y05UZWcT#B@dThy1!-*&%SHw|?kTHfB7n2lt;rf)XJbj`po za%{T3SoB)wT-8L4L3PNvr23UlXhQ|%J9#_#PtF)%0_q~46sgRnc~9^(HPoEytvUu< zhUT>9C24^q{w4BgYv=b!_~~ezgwAd$B&YcV3pSo!UOD~huGo7m$KWfb{!wA-N`MnF zQ|%@Dw9(#5BApDkX*R^PO4u}fu#QBPO z|F)ZS->iO7ts4HmmQGH-k1V?P;oWZr7dzvY&4&3$L=}eDj=!0TFFF%q0*5lUJDGHO zXt|*9YDVQIHYXMqy~j__&GOGLI+j7qZ!k15=`lRl$#hNBux>uJi?gpNb#nzfoIJ!o zJVttZHma;AZFkDD9iN;s7GDm9=5bdfI9<`yMW$}VoFlBUFjqfm(m7VY(`hM5H#j@d z%<;aN_V;~Rrw0ee9Q#4n8+qWJC@F3u&soS5T`>Q!V5(LVaj!zrdfG^r-z#2pjmrBq z&C~4guh6QeW!!@f_;+l#x5sy`HNX=L@ckG@*O}znr>bVZe0DuJo3tok!e2SY9rH#7 z^ESSFhLW~B@R4c3QTZ0%Vy!sbICzx9>MHv@p4PMQm2CV0^I(3DtL{skwJ$7ACOcvF z7MD1sv9*>}myWMZ8EcJy@bT$$e3VjE9q>55LM?#pT{St#ad+KAk7o0V#szG<&i2VG zR;i`yUrmRH%e%Oqwc{~d(aiBJ&yT+T>Nu;muz0Rzu-&{bn zt>eY%>6)f-UK)E7dD~}hMHTaH@E@njU16L~Q4y#&K`IR$pEg%Txkp@?I)%A3AI0Xc z`ntB6G`@K;pg2r)d2r{*>)ZYgMHeJfc!dNqVadUH`q#49x4YTb&E_30Qc}P6wbyjo zESTZ->G#;K@t=&WH*O)i2TGGT2m0Ug7CM)%J+R%PEQ@1iOvq-eelXlJK!3Z(SRGajSHk|{x0!W$)f7xNdBPV zm{q8h^IpPBu6|EH{$@s;0wVG9!qc5PNBIStXL_kI1GVcpqJG(>*|HPi?^MCmz$+@z z82ac3GCt$EGLocdp>6>NFKxq_w`_L(i>`vWq<^CtgIf7j^v)mLxKh6g{vSv%XI|Ac$Yg>%10*!h7W7khZU+y(an~{?tciq^61A3h4W}K-v+vC*GB3(jf~Fa~ z(~F!`cY4enY4AZx8DQCYOv3z5a-4XSXEN@0vdhfT`+AYKQb{j;*3P}?@SmrgDwK`> zo!x<(Q`;U*=&5_GW17~FC!o2<&n*7-b*Ibjo#c_m)%)LHe>*q)F>@9_@=UBXpp z;XmW|B9`Xc-@fkqt~5Qn#@Ssrf%XFI&$0esSaW;2>GW*r?mk-}3>PI1;n~Qo9bNWhTB*dCn%l)*h*)|0)?s)X^n4stN$z!L6$LqyCr${MvH``pm z?YLwocU?;Hg4t=<+ivIwf;YBlT63`T`mbA<{j7dST+tlPf7`+}e5*Dp5han%Me%Nu zr9qrs?cwAYs&JsMJ}jF{{D`3m;LnxFun=z4 z+D{ShAh!7gb0INU<=w0cA*m(mR`Kkkx+^>l4SRG^hHGkgKlA9>a>gFxrIHhpABbN( zVe-S?r)r|oY8Bag(OaWQL!oLMNznDu@aZTyN!Wj>>QF*DxS^+bVqs>X`y6>Jtqh)K z!aXctZ}_NGMsNCYUMSO)TBhZ7;@#$zI_;6V2X>~ZfcE(85suP3x>r(5Ss}B6L zh~WsAF{B0h>uK?S|im)JWo?sEL&whdwRU>AA4__5_vQQ)m@xldo` z)lS+QHUzwtoL&$sEFeF)%$VK}rvAFvtk-1g;-isLTlxs5^xKju4skiu_2JNnvPVn+pKLcHwO-|V}QSmG|f6@NAwT}9n zY3kV%CWfgF!$71q;rL~zx-*Mo<8g|v@CoqbbV9Tr`Fqsy%fD9)3BZ}3_qFE8$)qzM z$WNm$PXi&g1Ju|GC++AD1wD|wtZ`3W@1p$4-r(8)L)Lr8HJNnp!!!XUbT)uMLPvK) zUnvqg3J8MYK1x985EWu53ZeHVy=(x1uqui^h(M5_LLd;Tp(rB7P!gJg0-<;I9elpO zzg~S(j!b5^zOqA--0)hbIqiwq44Abcr&aejkI%H zWWtJjW$nX{o_}zsmdU-jUG$@{O!32rfFoDlvYQeg{p?!=4F}GGkfN?#bCnaZD$SC@ zB#q)Uerm8hWRhD~r6u=%99?C3mma?Z*m$CqS5%X$V0EQ&a8&hVE1|k!#~8D5q!z>n zBqA8nh#_%`0n#B}uyp(P_E-D&!gtJ62rRyp;l0s|pTV8w2r8Al`#YC`{cGq#ETg7@ zH89OadC3TH$?#?hc?tJ6JZ)XPF$j;)+KeceiO`uUTt^=7K>>Q_gcgw(b|m2pzxN&rr3i-5y7f&BYlG#)jFeK(_waObta23AYy@;QsTpe{46B7 zr1gr_p?WCaNbHp0jh-mWSsF4+n}%7ZM-brE;ww}|`bz9dw0@wW>B>Z;YxXC_NdF81 z$aGHB3cs5*!nSnn>2;YNn`YqC(qU5A)TJgFa3xUXhY51a>sdl^di2Gu?#br&4X>h&L*Czl|I3DqIf7?K>QQ5$;J|VNiUf}W z>U2MdiuwNSqD+#!LP9`6eEOl~Ta_&FdBNCS5TL^PigoU|O;)>bJ7WVQVd^{VGv!%E zlg8+T{pxqSq3HRe{kOD5F#ELu4X|S0u@o4WkcBX}>G1Vcd{i|qpe!|lr{mySyW%QM z)oDpct+)ZE@6!toSw@(^R@rm*m4@=mrC3ImWA5g0*7D7)I@n-^B2DOW&4#o>aX1+4_aTFcYSIa+$ZZqz>fHL3-?&? z*GoXQ|9dnWfEQREu;sEis}aH2uUtYH@W->98P1s27P8wGG+_z151nZiPJzq+;^L<8Qtz{s10VeX5hIjVfgI2hi+77Rul*0>BD#5)Ic!*Uu~OI1}XI>T4D zeU|~l&F)A{RP~dnoxKZvSzT;e0~%QZ`uXK@0trRl0~`%5l4WTa7Sffg2l(TtVmTzOvW@|FB>~1L`Nd<#XtB-Gh+92)1{g-KXpC4n1Xb(>HS~UBY`w8{R*63KsWf zGAw40pOGy<;rtwHIZmYL$U4?}42p<+E}|v}3dnFN%O&fDhMVW$(ToUl*nd?;{<9}R#tF}9(Vk#ioy_TJb1n{!C$@M{PZI+ST8u07TMc@*YRTm7| zl|305jGaD*;M`Sz^F}f%yXH+o*^9?32hrs_kw=X9ZvEkj3_xC1qx79g? z=l-8gVRKB%$?6lW`5|=^hD6Er+bsEw>4YMW%TtK-4{{Qze zpoicQt+`hw*g`o!D76W7wU7U@vF7Ev8*2Z$%x2Iv&{`OtBtwtj^$<%Oa>zVu=ea;0 zCzo)O!e)&1dE!~6ygGb{y4dl$cV1CCpQbo>U`M&FZ^AH}H7##xHXJ$oli#fslc>*+ zbpD_Aljz3Rm|HtXWrClXd$_V2Szi`szZhQ=h8Oy0rW;DQGgwSDKF8hxo`=@pun4Uv z#3ixTjujL<^vY5USuL@}%Kho!mwpXDQ$kBSfE-Yl`dD;Kfr@`~3%9FlJhmdaX|D-e z!SklqBFeo@?mP8Ul5~=EX0yFx7?S`tw!Q3*=sPbNJ_N%n;{P@aYl%4EDs*%zd7OL7 z`8J)sVRisgR|I^`|6Tdla}SVH19f9&b4O=y?0AnE(HCZ-4zT2np9eD(rjUh@h3ScG z8)Jt}nfRf@UY0Wm-|p(sj1YB26yiXNY&SBn|M{+9M~gr-&l&rlu2xi%amX0Pa+iOL zWi-QxYCgXgp)x{Uh@3n;5M9sWOt66Z13w+o{B3cMWmNrUfG2ZlsRylPZDbqA4+O%% zaS8dsIRcLTu|_OUPZ@C!Cb+*cbhrZ#U?Gjl*b6>0_R3rZpKXO&Fb_VrJ7c~>U>r{V z0ef_FJMR)nU~J@hf)WrcmGi3+It*73n77URP@w4EIfoW&p&z9J0jB`?e=%{Nd9NFj{6B$j9x`E&vYD4z1%)Ie*9WCE^>f!$pIG`Vf=hw zDalwvPxuqFD9en6c($L{9<>tu*xAqQ&-gQCF`3Ws5zOpRm`WR%Q**cKyTzU@Q*p);Z#>Ga&Ma>4t?@<<3KBxL-|G9^+co@b=( z?{bc(+rAom`K_RS(ePHaYxywwWyFoej;(DkxlLB|>wRUR1KVFpd){>LnwB+}8JE!P zwbE5Ss1m|iBf%Z=xU3S_?jLn*?ah0aQE&mI$*(ahhQ(_gVSHemavS7_y*3J98QbXE)Z4q497Xsus+`x~7y(9XkDBq;dl_cBa*1PD9= z=@D9_$)7swp(LuG&KNp&9_O9I;sQ34x~;ScM6@ROrl@w`OO!fz|40`8kYFz4#*{vf zla>e+x$k6490rKoNf0>r>2#%p5+uE%?i$~;(_PMW8|$?n3g2iQm0FHOL^}V=)_#a1 z5X!>8M}@K~0{e^57v(6JRXw2u1(}`P&=R?MDt`@KAPAFua6hU^H?7&=-a%uZ`gOc< z!=XATakeZ)19~UWGw*vejF(#Oh>fa>MnvOV3J$7woDvSLBC|^cFSc2mV}Q#Knly$~ z7QvlOHt0WU3RF~4iaIBX^&)%Vfstv-Q2Ijd{tDp~Xw~uLispmU;QjhzwFfP$(ev%S z1E4*#ckj@3=lgcn)AfNo1c{Cz@*;IcaY!j}-%X4@skg~qA;AE0JYOoNhJ|T3aF`lf zcHuN$GX`;Gw=3w2D7FV=QEJ;q^ds6)<5Akt{!!%-&2B`dZyHJ<3N4Kb*+Vo-i>bSTI*VCqXK?_!@A9b^;KY1CwXGOYf?m~=MjzG z1Ox`1AjhIfw8ZO`aU^Z~ie zo92i0&d5m5C_9i^YHk@Y77Ej#V>w$XvweZMs8zDgXxK4wS1^eVPA;&b;2G@SV^{58 z(04cmHQqVnMV`FVF}f-9R*kwF%X&0}VHpX}V8|CkJUf7|1+qCH0{}i)L-j-cQVWf5 zAh~v&K;Bi~RqO&>bacB1Vz#Qucearooy|U|wFD_9zA7NIs7^MA$`m*Uwp{SM_ph(Q zkbp-H6bne1?sqJ3LEZQoI!Gl8Y|x|G$<`}O^8o~~As`7!c6o(RZRp5KlM=6>@RzGL zK?jdMmNj2YJL6nXuB9(HQ5t#KH|%mRxrGx`Q&WFXe{=y4`oa*hk*1fTk5oZl3}C)?PeE!bu=Q_G@y-Q#@7xAR$4<-i5aZ zLjSU9BUWYT4NP5Z7rT#bnvTb*0F|%q{!h-GvPs(*jjkYktPX;B(^t0dZjJhzY%BQ8 zBF4t2ZFhn)qE(~iYFe`YWy@}~1nVz$8vfy5w)}4s`=pzpN2W&s3wtRhb%Z(Bo6$3r zbVt@xJujZ$Un@)`rfGdENxv5aqKauGkT8IkACIm{3LwofNm2lHr#*ezY4y<{DBh+; z+14>=`oO}(fQ{E~3W6_QK0aB0LL!g!{fWk}md$iqz1}_y2A#+PY5v#ymM?=1&4pYo za())PP)MHmemJJoJl{J%`OhTSUiAbLn*EFPRNDp2hKwh;;kN6%YhUG+R){{PI%Stf z@X!>r*oZg!bjZ_N5{9F>Gw(X0Ef7Gk9O zM*W!mMEZVb2U9@E%U_2+Yq%NqrjGLiTj)=}Xi$m$@~mtON-d~(YiZ~qG5n?RdO&uM zmkw0BXmbW^hIJt6RtB|(719XwdI_Xz>U#7Vs8%MPH&N&$DuSjm0p8Wm)2!Mg4IR@l zbjI?q&jdPq$G4Y61__r+;3NHS)uo&Gbj+w%N{YH#HK=|h0B$59!u++>b+M;a;mG!C*>n^E}DRwz-CPeP# z^p%!)MW$_cUp=heN6mtJ2!hhrdVXu|Lw4%?ekrx% ziqJ~6XzR`a+ktdu!+6x4WLJJy_iCdgqeY z>kB(rFZO!q#K$M8-H6qpMIFE0=JzccY^;JO4&Aqj^HNawDNN2Qz<0e_L`ddp|}+8g+=-?<1=RaUum} zR7sy1dO-rnn6RKheG2c~d)R=wa3nL3BZDRJPS< zDg1QYo~xV z08d$0J(1aO{<{AussY`osqq4~Bwe$#f9DQGG~u_hn_Co7UY!#aL!-JiZqlb}2CrS~ z)uCkDzOwQeGNfxs2zM()^?g4>SV0y1x4t>|hLn4I-3pBF}S?JU<%sZA)bf z>!r2HXXUv}(|N$Y%%v%kvpf~`^eD~QCKQh=@E~Kh|b^ zBiXBG8=Fj5|6CWbx#p;Un_${MowXa`-&W_Js)mn@H~7fuAc{934_f1s-XxwFEAODzPJuU>I8bnd5Sp47sG0 zboZe&V+>Oq^40(qGa+YmVUpPJEBRR;~W$Awk*Q};pX&qQW+;l%)m1Y&n zF5;c`IKwm-n}lkg(E@%fL|Kx%HT}=WZPHnd4|3Vj{?0#*o~|mhlDAwZl80W4!h`FU z$H|X%mi3c$_8R^c6$`&#B=QgJ4^N+|U`N&@KK-4SywNk)2$a7m2lbClwx0sSc`f5L zX;67D#pH|reRYV2^P$qT^H;Nb3ZDplKOL6tWZo>diVQ7>PM-EUOnepD9n1f;z?B;u zxc?h7c%C1fmK-X7+8ZSjF*ZX*%m|9*MWB>wGkFU6r{duTt)79pJ%biI&Rkxm~+ zV&}(L5juuYeeXG;(t7*EBacpytgdmAMw?_U+ud1`sPkxN{pX#ded6h-&RC929!^cI zejzGBr43ic{w?p_$O(kag?z6c3L?Wsw#3l-%BTe1eW`nFhEtVeJQUhfh7_jJ8}!>O zTE)?Fv0imXGhb@HQS6gYow(ItD_0lm**tBzmqAM9+X(!oqvLL3%7`@$ur`!Nk}6^f zTm7VLtOC0v)vuUCg%mkNE~K(f5D&~6iUz-U^`zZtV8&9p+a21iXdKov8wt>dy6GW!*8OpA?r2MR5P;#;J~V_gbR8>;~D(>d{MI8%$Li z{e1yXMf+x%9O8#cAc&RvOJ=_aC1G#Euc9#cw+-fL%cZe3vT&g+ZGh+LRv^L_lZhug+H97k76aGHKWQVO(!twaW zf5+i6Y0T&v6Dc6AKmorj(*@f>8k2>zS8!rIKBW&qKn=$lzEsk~^E)89Cb4eclycG{ z>X~F~1hK7+9)=+gYISaZ?0Np-P(aG=*&3YUm51vW+BAZ^Sua!3SciNchzX?ofmpvT zxgC#EwqApu1pQJl9s;U;4W6*WyTHH^F3+2Can+La&oyv}Ke3k04!QQ{^Zzi;(-4#1 zrF3TuaU@=k#>Zy>bFP5j7K4v-i0DmG=@AZgy6!W}M*cLU`6>;u8`wWrc9wCUC6P(6 zq&2}snMOBRXhSD+dCQ6Yv5_GvMg;cLW$tVK*T3)55VWA@Ku9~Dx1A{(6D^g{USq0&wjUD@vNUY0G z+@IJNSWp@BT`528<6CsCDp!9C^%||e3x?iBad-FAx@22DM6O!uH;&}xq)erO(k#sQ zl(q2b_-If-;acde>yX{a%mD+}^LHP}CJu-u+htL(Ql;0>WiA!(jQOQ4L+uV@v{ z{+Yu31WHF~AZWkOlESQRoy)k{LC2pXuj|RZ$W*u1>Psk=i%*i=#p`nOr?*{qBQ`%% zt@ib`z4xIb?URh4^s3$feSMbSN#XG;2fF8fMUUeS4irFxeRXwT4OSw;XH=+XkU2A@rW zZ>&wF#@Qft&CC5WVFtd_Jn`k*AUyKye1OpUnf>%_uY)xCCln2xxPx?jP?+)AojXS`KoxP4(JV{sCO=*aJSW``y67g4%!a$b zEt~UK*Tg}Nn?Vm>Mo9hN3r^iN?d2>m)FTIVQ!a1B^5=K)x^#^6uoZg z=Edz4wCf-xSL@bftPPsd z{PDd>QqEVIgh6alkOD0Tkvm2@k?c({>Dj!am~D%$=00cp()~j{i>6SMKs#@_GnZ~A zHdpi!Z8w+Ie}H~yt=S4TQ&c24f*J-etNM5s0)O^q&%ATV#sX>J?a&LaVh9N7y3fmS z^%c&e!pUF1`e7^~&=V!x?DCcu0k(g1`SNkqn}%4x4k%6j zU%qWx)JTv@G@~o!KniQwyGKG&_3;)^lwh`(h^h3c z8!uL)pcdVTT)KduR{yR$qEjv?_%VxNY zmlD!!xcC>ud}=ec$xWbGIsgK0*-ljzuUgkCP0UarbAFYbt*Fo07J27!H ztT)Jrtt&!NUyqK(g1LkouQPF=01>}B*&=~L+m0rj$WwN~vzoliB-b!xM;s0&qtb3< z$+T8UlBj#NLSSbYe4rLN2Aq8`J0o7d1e3)3Yk|v7a}0K*eNO0CuFrUIzHnE+$*(LG zAIdYg)Qkdk_M8VoOa0nAjbI|`aR)rHOiZnj&1#FNMqx_4kbm8Cdu~%N(Ln{l6CFRi z@ehjbf&BdO3i>rG1L)EEc41}k(t#W>R?;@dln>g0$Zt^HAX>5>*`t0<1W77Nq!1*9h+GdB>nJ@{|0;zM`(i2_lAc6hxf^ z`?8vMXDW84tD^dmwIb^=V{UsBz{@CLIb87HbOr}IQqw(yKB#o6`l5gXV=xPkvF0h> zO-`cEh9Kf2IJ(}QG7Fo!PCq(12Z9x_PXha!6lS7$vLt4_^H}99jm=A;Cb;;?i4xpJ zHDviny0+i0Dfbb(A`CkZm-HsEmwtHgO*ae6->^Qw-@yD;&|lTtDT#m?Moe+dtSx2F zUbdEo*fn!PJehg%oxP6U%P8*>fgBMqY)M!(-qKI1CKR^kYc! z_=OUhYG9z8eS)z;D>#DfTfry8NjqS4J2OM8f{DzviqzG%V;uk$$n)6|Or9McW^(KT z(#{68?ou6@pGEvt?NMe#7;I$*AX{UBe`2+^6k zX|>r~PYWPeatN*QHynzBT$4Nz!E@dFu>J!dRK@@1l2 z?>B-L9}ZlJX8cKKa*0I$ICHF+@NRlUnfQ3v0SD`V3KyQ$_*S$-$7UXz(9in#$2(ft z<+2X|tIVB|^<)-l3RKEvyO~F#vpa-uBmFY)D@UlT6c!z4gl1yM^lf?3)fSBFZ);#%&R?mFGj<~_1>Yia zg)_+Q`ipj#%!>-!gTRsfA9N3AdjSfS+3Es7z?|%i15W^*XaE^MSFo~}#h)PC3Y5HV zm0FD5%epZg21R`u#o^!rC~CXhH@$hYHwkBX&q$=skd8QK!1SL2EEEwST7gHO-*RwP z-YpBH=_6Tf;GFJ!&vh?U?Aduv8s^~XLDe!)TKWu7fc7J2P^gF(gkN0-n3#ybZX8V^ z`N>D3+{pwV$UF`(vV@b4+}DELkvSvKmPZRlp>O`<9xe*WX`d38Mf#o*V0A$y119#-9zxnipkd!pOxY-?(v|Dp%qY8=G+v6k^|rC`8)sl|5Tfbqdv}d83vq zq?a0-B((f5TOfhy?)MFW)^?8Twg`CINnuSi+H&(0btQ_j$C%)ClsS3(wHzIBVmb1+ z6Q1g0rKDoUh;nY8%pgR*Pj?bSvr>=e%@wG)P5Cw9w`oM7R?S(>DT;+9`}CndfZYZ5 z>$Zd4H5(`|Qo_jxflA5ZWbF;Fs&8c1)OsfnJDR0@|gOR}?!tR}yA5VGwD}HJ;R-bzrxSYi6+}f7Z(7=2G9x=>Bn!rm*Fj z8kX8)bwv*;*-zJ(9Tm4a=7w?ejDq~v>EL$R^*|9Qw28am=40Lx!dD$#X>GS>A=;m? zi=7U>E)ayQjfJRGN}-h96|b5aQV?ER!DCb6p;XG?@E}c55}`@VBk)T<6iugF>8Oio zXa>GQd0et`?ril8UP^+(q9tvvT&=qJ%^@8>I4H_rQxnhC0;*akD{>|7FeGXL#k&63 z^gh$ah>al|?^lW*v~}QDYkI7Q?Ra@13Z2?75fH!jgz_hz z1`TT2JxPH^vTi>8y%q@DJdsq3aoRiUP7g`Z*Kb44jazr-=1Du^Q>{}*C4{(bKe^$) zI$S+{%MUT_W~wLIl%(Sk=rFXPjri+fuLM`7zVZz6vg zXLrh8%wEfDS6};}-4%OyU7YCJ*ls_Hil`xtl&Y#u%R5|E6bdxJXhA1wABDT*?40$U z;e*mDD^)SMxg{1~ojM;AN4>3Pg|Z9BiEWE04xdD#Xilw$rNM zLvgO@^0R7LuNrFST;gD>_qbR>t!9m*-&m@9M1WJPmBoRR$?AAKCqz1~=fd0BSNGrK zyCtMRt`_)wm5Yh}BgD6r(F>?VZ9Q{E6s>bS;C5{4V+=K zf^bhNZsurzcFjO+T@t@>UHv*ZA|_t3q|?n50j*RLCwrsIEX5tyaq3?-zQeIPs-GXR zJMhz4In{Is1S;Hsc0fTc*Z&lMk)3T$WN+=82^5yduT9Mq;l!S{V|scM#80-f!V={~ zq5em0ZI+^vuV>tSvh!{9A(!j|&Y!tAQ8<$GCZWJtODtKkjney|zMc`PDBlW=kf%`G zBvqH`XY2(9NFMRJ`_P|{sU66>~rs%c8Ed2cgBMx7w(k?ua6tLOH zwyMnPPE<6qRxW7j|LHoDgz_#5tLsvG)u<}eqeS3!b`co4BUV0j{is}4E4N>gVf$w0 z%dj+8oj>QD6OAa%!)KR>n8d*Ok`e zNxUk_$*n~!bgN2En9Jue8P6{yD;D?CiK3h4&Q@y*@$q>e1mU7%W)S3Cs=2wW5^hfR zj7!X7{l$%IiqYzu?q2;;{W>VLlz>=yxrT2!*SF(7LTbazFIf7^cSxHUM zpW1~W0(!%%l;O+7ZblZ{Hw1$?kmc;?*?#sURz{@T`cLze*lmoC_jjd8^LRwPHzCsL zQotB5-oZsEG37E{$H9pg;iZ(9X-gaof1mRCt%crPlkHt)*5ya#^$n+TQ`?8{6T2NG zIiiFxo+19Wck}*Xn4!*1TXnImUu^HtMRS=^Iosw2eg0vjJ_aYD7+MmM#Ovp$idWRS zmg0OzTA!0sO4P0K@ic1(iPT2cF$=1`%#gd@K2SN?iSoh+l(VomON6^a@hD2@k1gtE zLkzl6k=RKO9h?kN70E5(Gmq&k>=(LCigU5 z+3Z)^paSuF}hd-TFEKyKMo?IwB zy0q3~ZEaDP25cIcwb)wIASaZ1Qtu+)iAMiEM)?Z~zvoJJp>4J)DLG%C%H@IdDL0>Y zt|Uam@zP~qX~5eE20x>tEA=MbYdXn>OZ3BKtn-lknc0suicp!lhh8=2tqIe;>892Q z1XOJxP|nS*w(x#F>9Rf_dt(4(6&C@MoFl-wiXW?e6IzzBZu25|X}9z0#xwMc*y8wW zx=!+Awup}p$p6_LcA-6;Xqm|K`9p2ETy3dnNJ>Y7XAG|dAOiETa(BaBIAvx! z)J}VSIX9^0gOyDuxF}z6t)HW}2}^yJ@1$PCA(8fFaaa!%ZjgPOJgKMPd z6)XrskaPozCxzWBf(mT89aekq{Yrs1giwWDzLK`u&O zQA_e(fs17lE)<8xhoZCW*}}CvweD2*8AvovNtE&fu&6`XALlTIF+72c&apdi2W5A=7NY z7nPXNxkP$^^pwx^R#Xyo>MvJiT(K0kxji~0p1J#*!g{uuS&&{~wxX7U!?4b|(;0M< zx)@QyPLNg_n?Q2KPB}o0D2{7{6I5ZoN>LBy)~QK+O@b z&9G0)8{ZJ$6hWeH-=!pH1|L)cXJ`HN(B?~!jiX@HJ|iFz`bybt-JwFZXY!o@RSG)6 zt)@mo^=n^Ew;N8x@yau+)x?6=I{iEfBDq55oScxS;nR3?K0e?Xfgu*9DbWHY<<4@6 z7`wmT`iZ}6%l{_fSl<)hT)Je=g-}geXk?Brb3?7crq|EKOLLxxnOOc=t2zDZ$<;IY znR=AmPTk=CB|mq9x;muEh>yTmLZs&{ZclqMqvR+^0RaIU#JZp=z#)wW_cg?%c*#o& zpzazTgykS;C}#PaHyV!CfNo3nu}JsDwy%LFpStJcX7{?qLOxzjP7yFndu%(>NDtXoVbK6fSmfpoKVXMi40Y-?*z zKWa5u5}o1|$U4(J<b83H7t*@UzFU6p4-!FsPCeBHy2;xZY%MfVv84 zKV~ZproDUV?vA@I_V;jr3IyYxn;Y=^Ur^z>@lS3^Z4Q9{M1J9{T)U74N$PoUPZp1L z;4?r>I4t}DaBe+l9a=wuzbdbj(tGP*1u}r>1;&GBRPkjg%H`9KS!qIxBm>92<6W}Y z5A-}}s!OFUmn=>Sp z#Gho&$#Z7<>TN&+^G@_?Fc1Z|&4&k3+^pWU-d+}~30b!od8_z5x!P)Br%l>0f&&DC zdFezwnjVDMAJ{VupDhV%5#gD8I_8d+)B;gi_#{F9{>4(tq3gE7;b_#Y=o`@^Bc|Cs z?rsdTJI@i%(xLYi&!s)bi7Jc7T3g4zR_FF3J5wy=!zCmnAkd}Y?ukAdPCi8W6Ej?0 z%&eBj2Pm(U>euDq%cYkkBo*^*5Ev`-?sP~B|L4WFe)X6WxmSao(mOrk#<0QC5{o_> zmXFqY2jcv}*e^x8tR?yt3KToW=G&j zwN#Ro7MQBuO*^$|bG_n}yGy)X-C)FCdD>K3*^QR7i-tQG(i+P@a#7d<>eZSD_S4Rz&FRxb2wS1j= z9WR$l>0xqRk>GO;B(olE%1l75&u6y*X0qR}s!d5dQ)+rnS}|i2;y{<6hIIGv?KGz3F!)5v7-YwQ1$SmhC%6khLA7 z<%B(Qb$3WuSK2HXb}b_?0^R!M*|W693q9KY+(2eRw zwBi`r+;Uvc;kwjoJa~ZA*-ELil0b;(gILyvEAzLKe&q(eyUW6mTpKHiajE*DrLPuv zZh;H!)4unevabL#PCiPSHjudulKbr}V9ork+~JOgI}4&`K)r&M zS9!S*^-`_G1Z&avmI>>{-)Hc*{1Sm#HV0`2%tW3OAT>bX?XNdoGUMQ5>+QRzX9H*ElYd#W#c1N&C57I`+%0TcvdN{8F0_U-xori5f{4 zbWeY)JPE<`!o(0br{2r$Z%j6)3KcI0 z-Os<3or;K1Q_44C?4ai6a5&UjFxF;pn+#%s;~WtQ6_j*H)~}b7 zVr4=EjV-{%0Xr+sLTEXxyNh&J=t0?dfjXr`KMTE4Tz19d{k>(p+qPPNm0U~Xr>@P+Y3rXrt9eBBc z@YAn5>5k@Ze1zn^gttKofboL~@UbVP&oM*J=bWx#s^FH-!Mb zq4yQ(b#`WJDoe>E`GJcHd8$dVexs8oZ)Xv|oTfPw$AYny)z8n}bJBgg*mrM0&yiVq z9T)ui&V#Cudo@}%4(Q9N8i8Fa!{LCI zR$QJZjNe8sPuWvqCOLr3iuEXC9Wf?Xaf}%yrWK>AMC)mJVrQS6y!LS-OFH$o_?4N;)~kfjJKz8Pdw?Du zcrN8-W}wthVr*cr7q**eA@lT>eR|YX0ZV%mb;T&c8Uej zKSfunzMkHbMgH8yZr}w~%My5%XD4X$G*5Zeb8KExStO zpLHu33C{#V0p_J|62f@~4<^vLdQ`4B^I*}$8gCwi^`-x)t$kmU=RT)H_ruA_<#yww z2ZS^3d7b4=GGlOxCCajTytH3JMnuzsb)FHW|A;cc@~6iMCK6Bt$ugeABC`6u=% z2L}{l;`mpMAjHcvQZV2+D#dbhb9O|jS^PE(VUG36)bQ(WnFPI96tS+YzNx$Pv?N`{ zBk+$U(b9qTvS@+x@>}iU9b@5y^?f~q_gr;VL>d43OpURdp6-9{&XwExQ{j_uxihgL>S7k9k!J)QfEUfU>t3UEFG`gK34)+$fOcS<6P zb!n$P&Z#Cv*sifyy}bkKMop_#Ey6_%m zMBp&gfE5~#={ksY3XgS6RbKmVN5UV9n(6n13X zQ`(?YL{h}ditxuxoAGJhK!aRKj|0`$ zU&B_RNYD0=K)4tP_N6B9I*dw=?))Xtg|9IxR38-#na)`ed89>_GJlh1EsAQ?JbcWE z4yf?FqKelFv$*Y4Y*^t!Gy4(c)nLyic&pXN(m-wGrSD5ytw5>I?(Yn}Q~7+8R8?6t z=|{DBww|?Z^urd(W&S)w;$i$q*WuK1+k*SONHJR{Bzqh;RRVNab!j_w^s7K=MDf&= z1dy@3gDH_%$8z%G@)*6Wfi!Ip=!Q*x)?75~g6u%L6a&k2P^*s>&K%&Q{Aq}9AYz~X zH3uEOce<6gWC^8~5m_TM!V6iZ@rUt0V;AJq2&OfD%524M%STn^#&3^)z{g2n-{54* z8Lm&l%#@L5xRMP0*|u5)jNiWhnV{23AKzd%6w6f&QH8$s_}qo?|56FlIW4TbeT%U< zkyw(p#L@S3{d`Zun~=NaNmkZe2nWxk36#f!^LgibM?}M%vb(*^#2&fKpX9X=6p4@| zNUr*zlh9cyBX#TGf63XVXW}ghrt_81#1wu<%rVA|} zl%F+6evL3Vu@G~ZHE2G@yJ)}I?a3Qjd}pw)uu;%|e`*QyiGyCPQcHc3nUQ1E+A7@9 zbML!Bg8xn(19yF`I?Hs_;*xfLiO%;cG9m8glxF)1-z2i+>IXQ z+dq96hhF};Ma`R1nBu&1?<%6+^LIxoqmzqQHR%(vqaZZH)9IyGqZCov?6(YEgLKf2c9@Rs_+}+~0(PQN2ziD%!f1z)I#)v}dnfq;By( zX*(MNdQI{z;Lmxs1RM8Hs@b>qXrn)0;X{Z%6r^vBrj015s>Cohavn{Ulbgb$o`kh; z{ZCYoEV5)KpM5gCwTsX4vJ6JqM`-T_ ziYmnjOT2$Ldg6Q9wnEqQZyWC3~@?#S8Dvg*jd(bzWX#UZ0+%i)iw zZEV|}=hGX-nNr?wTm7W{B>cap(0D(|Z@F|vDOTTOyFKyqpTgXaQ6JFz9*6Z^*Ia+J zEOzPG&J5Bf9+d)WWd2gqCdJ$D{ix>&7QwL`=lYtwQh~*h)OKWjuaz^C>yVr29Ygb? zxk15{8;6Tr95F|_~*g_l>B)E=iVcx&Ypm)I=T$ZaPqJ@s2s!APPFBg0+ zxWzXy+6sRx;5IwlYN!LiB)hzfrRB&~O3nggowgp}u;_e-wn54suh9%w&N|@WfZ0`H&Kb67@ z_EkQ!A0B&{BkC(5C3Hg7;Xr~U)Jnsk%H2v&pw*~J?RHoFVt;$p3Cg<9-h=KcQ?j> zTKDXaZ5dh*5T5l-?jAIyTDiP)uf1u1d){@D%i%REsmc`bq?k#t_yaL@ z6yj>0M5kst4bge73L9(~x{o#R!^A0|=^lE21;N{p5 zGwh0LB1$hc%Pc5#l{PG(@rOC~SE34yM_p$2g^rlf?va{MvboUYKd}o*Z=zh*p{v}l zxH&mE@3?nfE~)aBeD~ja&yZ7^?ax5TvLnSKP71^H15#Oq-bVb$36_i@yM-v=cTDVRa?>}dIZoK(z$|8q@!1hxk57zi>u=E*6Hi(~c=* zl4z}R6r4`8W^d;c+al>T2WXl_X``@Epfn8KbG)Sh`zvVP;sXj}>+^&ga%4RIlW&IL zX>9Fj|Kw5HuHmj*&i)bZ`Pdv8-3SYUy!9)cZ5lii+k5$T?ZJv0AD$yN~`iSe2zfmA|J7 zH_UV+lY{3Va(jI#Bhs2=XI1Llxj8@53ZIts`O;qBo3=KHQ0~sJ z;Aj2Rklyvj&KP>)z3~8_zCs)YffLRDt(w6~2)_0IG4&qsRR7WcxD}N>GO~B-+GXTg zWh6q1TzlV&YlbV=-r3|LH(E*|adQ!w*Iu8>>>Br)rEo9dn*Cn-e*fRc|9X47!+nkO z+UGpa^Vmh`M`JFfbpnRffP1#0IPwhU2f!sEqa-xxfnCx4F-rCI)$ws zLO@I0hYY=MUwe8A=naH4;u4q=^ZmHTzYM7ob>EbfPAI~mk2QyO^08&&vx3Cu+jgIg z8+dgMm+$(Y9Zzyl8ErItp#g9#I6@z}JEp>$e@s%6T)qxY>Ua(hZoWF2_U&R?MzW{@ z5z5X2Ajkj~46uI3OGwC!l+Xq1Uvm%l*k7)mFv!%Fq8Qf+z{gZS(!WKw7%qRI9nBR{ zPp?2lq_2#LpSH?X4gtdklGB@pv>Vezn^~{?Tw(}xix`eu6C>^!Gtmygwn5TEW@KAO z+(IejTavYsI7kbS0@+sj$M`ZcG{jF_zKTBX1{zOc+E2Jkb%i;^@;L-O--KVp^Y3 z77ovS31g_1(NHR#_GFj;#UAlYVM+sW{Fl;O(h;JlLKYEJ6g)o1L@LLe>zMbEcAQs2r@)v=0M3;1XTagD=L>H@aHZjKoRN+3 zL~jtBeS6w#y=;BFC-~Rk79ZWi-3-z~#z<7qg7&iDVhhKJgnk85y$~M6S#@>zmjK6h zBN_f59IxQG$)gdkVXhj7$nS*ISa7)ac{#BQI>~0$^ec*cVmMp3I+HVBarpQni)Ftu zFv};hGu=R&rK)ID2botnbC1jJ(!kzN7QcV2L;5zb*HSmzf%%{o+I2uD*|i|GE-u;K zV&w?9fH)@l?`xYsIvU&YLb-&`SII<>)f2o2yq4Udez6*CbePV0$RgAV$W>XYM9eWi zM>03=SGxw(B8>vIc-E8|{rqYIdrHAeS3_~y-rxmof5!y&zcijduN~+%klCHqjc~y& zc*dyFrTU~D?XYl){!c|SJ=JgB+YG6&-ye(sbJ8E5!4tEQ3Rvy2bO)v|dc zZ&6OqEDEl>_|y{G2as2J+l}ck7|Sw^$NT#WVLVG{=a40rshM%m;M%1TEz3FX;0cPh z{YlEWfa}_g9hm~cSlCWz7eG$6$qYv-EL&b}VcpnSV9E@v@@oy39A6jN7|81{h}!Nu z`W7BQ2nddG`-UNbey*dm3Bk=U9v|fqID4QRI&NwcsRgk(B%A4b56(Yq=2urdbGyKP zfkIoeGQm&y{)eLNA2N1eYE%;NJIl62ee_#x(qc68*ZGHyC+grcW}%awm{9NlN$z}M z{x%e}0_#SFDj?aWQ5hL5qApQr=Rbv7HERuf$yONI6b@!V-OCenpqElKS$PF*^gsoF^a9iVl?xwPCtb&;lH>LCTvQoGkO#XmDl zY4Ah`OwVfhp(!o&NguL54>O`)R!D27=@!eMwP)vR21bDy5l5WD&K$l8Kukm#842uY zLf>&5N98m(6JS3zmK+=q%M_}C+CvsH%-QK%!`L~gYQUx5Rqj%%3S{Hg(*~R8X`d(> z-)!jp?1dW;E$|U7zv&1Q^MjCIB~D1KVm)C|`jnNSL*+62$yvDl?4c9&TMNf7w#P4j z*YkLn813bGepJO>CkrPC_pWp3*@t zHNoT3e)KbVpWX~x5jQqn2U&{>XGX{NTRm4u3uPHE-~IGo4Pe^YF}X z3)4f)Qz%oJd-nthWEwDyjwsSiVTYhzZB2-DjGYEh57)X#p zQqB;&I2c5v%qI{1e>jo#Ise3JYO=pLpaNDSrgEz*8r@agF%Lc$u4q>`Zb9w=UIR&n zoh*D)%)+f7o<0S-K)peFn1a-$<@dIVBML0JL_@_CBPK#K6FSKk4D|e zMI;*@kJ^4IQcxZm22LF24$FX(JtdqNUwjXsc!@~S%ZE^Y%7JZxetuO-7c5+*f5$aV zHvyS5Fu12DQgOWFREzQj9gZvvUmWkQx%DLzVEY=XN$Wk^05qwo+_%BMq0*x<3E)#< z{2&}+qNghKL#BX-0IP3&IB^l}&kK|K7gZo4q7JR2J2k!ARyNO`a&RlD0h{UIx)ta5 zv)x+ejUkH{HO|&F^<|o%=!zfHUz#vLx;zslkDFCDtJWw6oMZsfs@bopGQ|C~5Gc4j zbAahem1tmy>pr2g%U%{3LEi}|_Q;?s2TR;Y6>%-d6Ph~QBLzhnq&rWdS>@GC5>nTqngpjT9Si9R-Wa&Ob|>%ZnAYqzK|z*_Ra)S_5LjJ3 zSv`Gp^#CYWJP9jD1j+>jV3jx&!ops;QPrDe6Kw-MlfX_%Mh*0L;KoJpW0nUen|^T0 zDnv1g#k!ts(>a+5!Tu1rI=8FXO5Q~@ODe{2&jmj5ObcEa+8$V&*4l4<&q>JFJ-oRu zqPs`_-o6ev8WsDC7Gg!6J@=s*tVyJPfW$Y$_OQ6C^g{||6VPTk9wZ9ewf>P8VwusJ z7SRj4B7B|z9gfLwO`+%}{-ycxM7FqP$MKg=eIqZKSASaEb>qszeTA<*#ED3MdQdY2 zg%<|4Of@D_y&6yv5do-iEZ5dKFkpr(vPno$fPwGLmAPU2Z!0=Faw7guW>ouUBjMi^ zkoKIP=wUwKx0nUrAFd#O@ZmZh>z)l=U>MTaqsBe+6ABBx9P_h?ve8MQS7SJKoh4(T z>}Tc?yW6t>Unmtc-$N&F%jJF`*I4<4xuv&0SaI!@o?}!w_PwnZ6(2Pb8=STLN=$U^ zFbv(&HSRQ4lzZ5c7sf{B&IP+T#R3-WJTK@Fi2UBdLL>osQbsJJ?p6!~sw%q;INcEd z0`_u3FQCmqiPMjdsu2)-4a$cQ?H+9ayX`Xm?Blon1osrx&x+0T4FZfn!UuwYsdL?Q z3;-~Wb&NoRfdp~}FaF0aLsBspC@jn|(YU6;l5sL^d6w=ZRb`k7zd*eM-G(g#zCDEe z@qc6SkcEdOQFs1*^Z5IX|NA%=H*V!uMsw`FwDpD%r8I2AwE5Q`5h&~+Y3E_Uepn)i zx3Gv=1TsX!`i^fh8@Z|g$tPnX#WBOgAU?7jo&3L9=A-VU&x0%@i&nG`E9ViE*`oi; zPhsu&vF;7Et#<1yjv&-}w^rKKy1V~TfhW2B-i>1i+-Im(s3-$TJw7)bgfs@B&fUb} zI`cxA%_k3J6&164D91(Zuc7LA*MKL7cSgeZ{K|fF-EjXFh!+l}e=eavojI-Ef%@D` ze?j+0`>Mju6(mG%CZZ};zm%; zWbq<%o`TYuJz~_SusJzPW>26(CQ;6pcAXz@=^Q;DdE&9{Q4~(H9{W9Ec_h3_>}4ea ze&zMO&7}dI62{!Dwy*eDN8icslPo)aaVzlR;k3f_`TaUT!t8Jc+(K4uCnkmlD**@9 zK+OP%2ttO(O!-#pB}-zkah)6D%YY+)@?U$*W+KR_z+u&q{k{0#yeT$PuNm@d#<$!h zqBz1Sf2b$(OL4tT;V6OJ^$vS`OAT?~>!JOsJ=j)YNr3Vf7U}2~%M}YzLtCQViAF%R zXWON;D6pWA?IRY~0U=VtoWRsI69QxiCL2J22!ucaSmdkV6fzutxwzzQk;>PtM!%;y zs#_c!@HRhzX@7BO*15N74yAVZslz3c^B z)arCpi0yQ~^~mQr$qq0SaFZcUAiK^qKWRm{=1lCDx0p_HFl{IsWQZ-koq>&Ol zNo8lP>jl~5cY{sgiG8M)5xW8Rp(UO(zj)o*^=U3AMu$r!;-mQXxmEW5zpQWsALFD~ zD5qI=?Bc%a@EggbHEf6MsXh;Y@idV!(Y}ggx0+$_Hw9B?QO6=~6SvVYw}~TDnuTi#|6 z_^*ij(GoNy;TE^v>fSu{v;<$=BZB2A<@8(F<$_}L%aA}2YngH;khH^2+4e7Z2 z3LI(YR>Bwfi3g3qSB0zqWKH!^1HMAAh48;LZQ4-oZsp4ga$5ym_4NLK+IvTUxV>Zd(JLv7$NsA_95Y z>EOoyrVCmZc+>n~FxK+v1kVyrl10t6ftmo8CY;`^)?~0@ab`FHiQ4EjKt&UlaTL)= zrvLElE${2#4!zFlg!S+fS6JKqSZA^0gX5z*A^(!29N)wKC*=eR+ewh_Jk-$xsX!TL zs4>IYzj}?(Fu!0IsF+MZI`JW$PoN!0)Z5B^2QPt+t0|y^7vkTUsib^wTaSk3#LuV- z`j?Re*PoB~clGF<#6e=m*Z1Q;|5gC73V>JM;CUr@$8V=sgnjbZQ8s?Tm}TIAon^rF zbC`){FH}E88Uu)pNo3R*0p1zuikpd0jDk>Ak05(#$r_T7&<;#C@zAkuUW6&Vu182! zb*`yNb)<&Mnnr+-K=+fCF;Ui3O={bK1rp$Gk#9;@7yN(Qeg$z6xDyu`9w4UUY>x^6 zFBJbU9W-#b>;SmWfii9s^^naLGwEBs&tApcvg{ZlC@P+knUqGuq|h+1x_0#I((dWx z*9`?v@7J|}Hv|QpN2>tVh50~n19#9e*zyIqFz>g3iQ~?Z^KYYRFtuJ}iDIDOk3?vEmRU)uTT8 zYs3FjgoV?B-emh-j2W%vOZTt<=BPQ#1km-Od$(k8ts=RN0#lBuoMI%&}2Wx zO5cit$Y~9@EH86Z>0cUC(b4fO_&$6;*cHC->Us$9a~1?$g3O@2E(wLDF4=qHhUvyr zd3`pwh!juE8vv!pNRh$m-!sRoSH=TvLFW%P1j~Ouzd1745vpExNNuJsfl;@?rV>I% zed~Z=F<>JImQHZ>LKb=<^HMc{45A+#RUkE{QaSxnIm7Qn@;?GvJ<5EF3RuX9UsBSq z01n@QLnZOHO|#smMC{PY@W18v7~G=)DhARr0r!93K7Ot#`eN(zUz!r|e6+mL9{U&J2n9W zpkm7qpoJPz`JXz0Wh^bH7lO?OL6cyABK)G3AABV9SGx_Ss`-SuR!lb@Afn_;ALT93 z@4NKuBcek0XV<;=qrARN4Npb!A5>kHx~wPc!7$*`0$OLQ><4h_`@+6n$euhmSjgoi z;%ShgqETn!IJ`5w{XKH_XJ->IUL75Du#2%Xg$8sWB`k%+M4l@=PZujCs)qo`~<`6sm5N@*O)zH!PBmHAnFW}+`J3tf_lZM1y zXH-kpVMw?gp(4aKzJTwlm*pqSMRgsnuVC0;VxRu7jOFQ4p?E|zO zol;=#IWA!?C?SxhDUj^0u{=c0!{iBBxx&q)56PtE7rP1cJ`I-obF9JbOYK)WQy>Mr zkiv_fvT4Fx*$e=$jcj8Jz3Wvxu(d33ncc{;V85v<-y<%jE2*8eaG)9Ely+u+?Y(he z0Q5m}U|8tc?A;LS@;42cEBL|?w*a&W2_1x+bSJXGNa1zfQX*C6BoFy7ZWDYqynHsc zIej4BddCMp4cHv!O$H30v^>xz?Z6@k?*_J;6oVVdWF7vH4KH$zKgX2;O21fcT3o)l z$}mqXpvoOqHl|k@QgI9DB6x@NA&|CeYfQh_rc~~Yz7paRSR2G#G2{$6(reX2 zb3Pmf#B9cY=3#f=7Gkkqkv=lzaR3e5vO!Zn6->QR zS%AJ$n*1;votqMrH|fTjD_g}9drG!Lo&=@$l0(t^FslR;Pw{8->T||rDILmkEHpyC zwa@}6uV;GY>wq>D2+m|BgrF|{@W)K|>66>ldznUTv0lET>dnt)Ym~Eh;rvE(n9A#w z@`bKjJ?d0PT}^GcPvd-J13?ht1Gd((Keci8+kGef;~00I4dPHw{Ar`pc0_+O(hu4C z7kVBa=h_2{x?sR_(<8_4SkQEn24EfUfTf=N)iXeaY_Yt;MnB3)mCk|3gki#KrjpG9 zAZmQ?*->l(MXj14(GyOU1fL0gw?xCSKA-vwlGK%pBxSs+v5ngoKf%kf0^&nBgRE;V z9S<{34lThV{arrwO5gI^nb5|EyKCdW{gfQ=Qs#Nm=M@YW9LWlr9$_Rz3IUhrOhu`! zM~78=CMm6CPq+&b%AU>QA!W25AC2&(g5C=d_Wvd;5OkA!*>atMpYkxV$49*Q>ioKE z%ZUaSK{(sihY2NeuCG6)sL4UR2VZZ3nW}QoGIFiq>ih)rkJn1UL`c7<6*hWv%YrsB ztMUy`e5i-d#IH0sbJvG{WoWc(Puty(*T^M=&Ir>DNQq75HGEX%(a!cON5YLgOPw#j zuN5o}%vVk_BhW3lqt{O!=D49WkNYd5Ms8AmCWXHdTfMk5BYH8tk-5@^#&QfqtA-jS%dBJ)U|QX>M%8t?^;PXT4lC z?+sIDorvetDkeGz)1{w=FC zjHnRrzo*}))S+M$R;~ZEo=L(rC79R`sW7K+1}u6W8iQ%oRzjphE|}9QTh*ZFYXpTsj*Qowa`g03hN+DEB+*y{bTpuq9Wl*2mel6~9HoEFn zJy(hJRF%B-zy#OtXXaTwjS(1PjejTpp|Kx3n#9aP)wcB)`CZc)pY~rD+1>L&V`JjI z?2ps800PFA$kH0CCn4c6p+T^Rg*eA7qOZ7}6-;|n62)=@y8Vr$u><+o?y{5Co&0S* z+WM{sHUz*w#E++uFa}M2BC{zo!ebts!(VgwF{KwDTR{Yoj@cdXft}VY`aD*QoY zi8ohbWQtNL`h-^E5MsSP3C8)a6OXIxTQnl2K;(-~q(Z~+JpT2F^4722(bLma^w;wm8v#7wMvaL|zlKkah!ubp z@%2)jnTAb0#RtU^ib3N&5wd9&yXMR)fdOkw4Q(zvQAHPv>yzA05>>z)itpEC#LERR zN-{Ge&#J;+2!-j&&Dpo3iddUmi(iJiyE8{GViY@lXO$8%#o}neHbzS|PD;s?nVFZD zjlV>hKy+_a1)A_<)i)IVb+Ux14W%}tG8{v(h@qgI8IfZ{?J_JKJdz{b%&OC)sn8*F zUNugfws?D#C7-{Yx(x_5?pgUt|7uDBrwJP6k{?y0^ZPSdh#YwfpQvGx>zXY7Hrs0; zr^_t)iJBSFLtogmqtWL3f@b2AqAE^gA&$zK1XMx&5}ue<9Dw1>)ht7(P)N;kB7uYs z(~-*wYgSAp4k!7~3!SwKZ`_|(2k>fmVQ+iy)9W2-@k3j!4>T+*JMsE@(I4v)p}s-5 zU95a0l3%B(7aeFZ0DZ$mPv*dDD1$aqMvBmEd_TCriX%k&gSab^SYo3hJIgRT0GG?g zkz44=&2l{p?vK@2?y@Z4mjZ%aCLHa9FUQn=B*GTfOzlN%`=ML+`z2FVrbr2?ruN7u zr7BtCbHXU8g9ZQW^=zsd{{m1G0GB>5!u<4X2O8A@h;tJOf1FP&k_t(S8w8{|cRneS ziG&JzN`Ta6q_bY~ zhJ-*)uTBIgdgv-(+4Spfp`$i6L7`187o>9nsXD+jsGo$}Y?^m>SGZ0&E$hfnNSbL0!SM(b|t1&&1HCFT43cEcwW6PS0W{!B!JES@AodC!NhiI-kjh zIys4mI5`(Va`W5BDDW)7SR*Fc67pzEcHw8c+X=HS&td^!jX^Z25#+C2xtbxS@2G(0 zMJkM+DG{Q;e_)DF4H1Oi^aCaHSxRYBdh;oYV$l*6x>%yMj3z8&K9QQGgsv1br}8qq zd_cUK#jNRm*~}oJv=sN<$Nsi-*-g^|HD+c61*qO5!Fi?RRPQ`GP-(GAb~9`UkSAw8 zqE<94?KZP#02U1FGEfxXDzJJSKUh!?`B**BrThsvZN(z8_*s%-3|@@Z`_Iv}(aJ#x zFmR|4JXTTHby9&yHX~_f*kcx46FnA+5PMbRA|ItiU@|PCRI#%k>nCu>3Si74pjhWx zn-%$D7G}z9QlzLQWQMe*>}1gBr{npPQkC7l+9PUfakDQ<&ZE}b1w`qI#sabohoRH} z>TF6F5_lZ~VkQ`ZsKq#W%;sS(6bM)-nplv z3IUKW{9RDi(PckWlcJzgWTj&r(o9C^9EXQVw4Ou(mih-LK+612RB}N}bt`1H1@z7? zV{prbl%fefWEBwMpjE6VDLYd+OttHKpnHZ-P-rc}KAw=+;i4Z$CznZ^3;0%e$(Y}b z%G`E`=TMoFt;;OEy8Zt4g8tW1XeoWNmMCB@Obwu6I5(5-Aeop{sjzIf^y*qNTI2?ht_hSYEY<5=}L z>;=uqT9*z&x5z***EZJr3fEiCWpTJiziRIQ`aMJ)xP`%X<9;ooJ-?;0Ns2J7vX>x; zsG!HY8^cg626U4DyN+MU*I^)<1cW~UfhL$D3O3ayD<>lX=MJI6-Uq}XXukF2{G!a7G?+eMm5;PZec#qfU|KD{SKIc#s1bbEMrq4p% zBI~;B4d0w9>O#Tbnx1G>qhCAtcaWyfzc2Z8x7txwyt^xL2Tboznp4=6^rQ8~On5PC zNVVA)fXD$PhFwBFnZ6+ag{Oi@&6ExnY&(##CuX694GecI0(U?o!dlnSQNZ zB_KY1w+lel);4}5xB~ET)+-t0Dvm$_zlfUO;MTO-a&wnG2F$*dsAtAmyDH#BOX^9A zpN%_~jZ+8!R1i>62y~dBA7G?(9~##o^nnUO>=BJ2wfCW_NA1)c(6m}U zEy26&XNq~7!VyiLm?WmGefHLf9R9%GlrH=K5e+%|-(ND7-Z?(%U%i)PKBz&1*)!^S zUde4kKU@M7(c{Zsn^EP?6&;&+gEkl5(VkG@<49ksNsa)wHkRgs>563ev z(RWef!Y@X+krweu>Rk#6fo3 zS*f$Ct7)1(QL5WEPf!_1tUgeFQ5uNi{GgBpjttRhK|*TL=k=~9%VKm+YcEgO~8>BnD+Ml zrXnMbJ2m1Xh3!ZH-fB^_fFo=N4#$vneo$4VdQW*23<7C~5H#+Oi<1n*NeeQlazu;u zergTS-0p+`s9vH>6ZW>a)-?7dv*B|0Y@1^mH6uR?%r1`wC? z5+dh!N>W|O1g~ZYY`+06$28inNr+6|5am5|T}Dujjj>?KdP@G+Qo?n4`|C44HT~@J zln|_gC{b;eC+^20+BOiR_9t+7ahrfRy0M=E*X&v-mN)CtHAF{9?S+B<56ZvU2>!|M zcp*|a^!c!PmQvSLm$9nmcj`a~wh7X(_tWy*4EO76l*b(!5u#H2b-=MulVIw>-A=i* zFZ)XcaNpr(xdnAg2$9x%>lDr7VFjr2lC&1oV=}q5+qxq1sf^$aP%(5=N3rOK-UEC2 zx)K{obp~T?rr=J}WWNsR;RsyU@IpS7Dd{&OAN7- z*ls-~Mhan%nc6VeBYv>v4rhS*WC@c~375~8sRqDWGUCHu8hJ2Df>GQPfR4h8mLQI_ z(~z5P?mPr9?+!p#v5>Tj0w-c1%)c~gx;o&jZZXvl4fSh%jdW6L`o~z20Z#G$_4Cm#jLom-&$)k z&%WPj@GM~knq0<%sxO*OOuJ9())p~8fvE^EX#oI&XI-Lf3^}BlNQfdn?}7n)Is2Gy zJ|Xgma4cysd)0t$T1|8haU;xug{BzP`P6Z@M2S{JsU37~9Fr>jGirj^Bk~zqx$V;$ zmx!~ksJREnZ2*#kD~|W;7DX}wYs4{`S}$&>NrvE4Lk^Qi0{T9N22zO$MRpg8oj;bA zX5@#c3xJvG0>?2g6&)=DAg2NxRe+ZYFjI*u>)&+c2#CpkUfo6(`$8cp=~=q`1 z>vDvdNxK&aTb;DhaWbrQiUp&`z&a*sTh$`T?ua4?g)8sq#Zj)enAJ*x(#1;9| z0ETjal!c33?7wi8(Z>ncNoo}E<{t(w2~NPcaf%WgW_C4t(;{AmAk3FGI&H2exdrMa z&9oMzviRz&>CXp4tOL)m_T(;X?FUo$`E z%YAC79KCjXOwQrFh#PU=H9<76Txb{L7U(gjnju3z)PJ&lbqVGl@j|c)kiPYv{5eIg zt}<}qY}5X{5f*Tvg$G5J%pH@WDI8t5p9p*~6fR7gV_ zALscyB3?7+k~T{Akn9(dF&veq6;~cSbWgZuZ5*q7*BIK+ql~IYuO94iU}l$Gq!Z@| zV&CIe)a{-oJqxP;<;Jq)!UN%BdQ6`hTL5AL6z+auWT;`?&$xVwo%shytb0h1jq z9NiTszW7@X_;)c?S~geQ%aa;?kat&bO>%PcT;E~aBZ~r=;lk|Ka2L;>H+cDprP6t1 z!%Yf$W!%dx`TXdU#|mG@RW#%)yKptvjxL%iJFJvWC>7O*J-#xVcAZYxOvL2*%iDd8 zZTZS#_sq(L`$idPusf&5*Y2H6G7uG~^MT{%l5ecHUn%;mUt_a%K@GPgaTe$JU~$Q- zk!$wu}@h#ILMa?1|~!*=yFR{Q*Lq z9Ivn3a(m{-m3C=QPv)OXlqjal7?M`&7@_WG|jM9|VV+twfO#i-v(YNWBNH55)m@T#P8;uD zzZ1c#@OwGf=dJH1KUl24cQ0bFhD*ISFJGSs<@))q)0Zx>?t=W6=F*e3j9Yg2itMCel}e*ObsYJb_3t|2np1Ktq8^-b z6+vw8;@j}$;lA%-P4YoP<*z**5`wL;DC@s8WpQr|Xe)RYmgpS<(|?KzxP4Q+97D?F zJaNg}+SldMC&`YJXxe)^FNBV~q$_L`18d@nrRnuC(!NqXn%_9p?D$vs;yg)Tg#WW% z+K)jrs1HfpAJIro_%bKwKXa8+q2FBbW|DhJl(GUfptFlx-tAFpwVt;&HN8E*WdFR{ z7xm=Cd-uO52O)lacR(lm%#M8Gt#^QaaPoccXr<`~DD}186eQp8EN7{jRweG%bM`LX z6tf5`79N1|wXs`BrM`NT&(XMv%zMJTs{C7&Kkl=)sz!*6+E~!rCUG;rTO0gkFCv}` zY3x(f)FNJdP*xjhV|ahwQ_gPGP1|L6Q_ax7$)L3*bigimGvLJ^B_$3vmA2rBzGsm{ zhW+QZSqw~K{A}_0I7R&Mft+Dhla!m$H9E9p+egpjqQ93{CMG;Yd%{k(;4$Ry2K*Gt4*K81DzY!qkDT6o$)ElrZ#ns*M1ltD`t*?m z%^MxB(6q66EI*gbxFjbOGAHg^K5IGk`s;faM|EuX6lYk4o^6M}Jbkbc>&QDB=Y1t5 z=&Myk`Q&SoaMM0cNIC6D#I=MJstTQrvOq?tYY z=v{f0a%*pc&&H*q-IP1scsf{rDw;8X=Dly=g-e0`HTwg1FY>(aDY$TFwcv==DY=mD zC*ib>vUL@{_EUJqecKaWmuEK<@`GM#~Y(@xTLAnMGH=|`2y?y z#)P+!oq{^7y5`wX7CGu}a(Am_y0vxE{v((dQpP&LJz(R@?{2*Z8bgbQdCJW{IN{ng zy|A0{cj9B-y)jgm@mHM_uAN#_nVCW+<#PF7r2d(Q3CzL2ZJnf~Wj*^5-EdV+`?q@= zNv>b|!3D@cM{t5mM_xdYQc7p(+^MHO-U+_Jvxk0UwK=e$-#SN=NcV6(NS0?e?_CIKcp{G zY>syHM)lDfqXLEwCR4ien!&dK$mOvzE|}S~`FVvO-v8TP{)5bv#=UOlq?GGjcT!?` zPO)mIAoQqd@~07%m9ZuOAB>^FUZfl$DWy&g}i&GXQ=!#KLvMoyKt%YJ?Uxvc_if9 zI<0<)?~?H%MD6qK7WxUd_rC)A8pqtJ^vq{xlTV)x=2%OcO;+@w7Qmd8dCujZYxNI4 z+Z5x#H8Q5yb+R_liG0QX?1owAr9oebGQLkwE5Bvx`YZinl=!%?^n%`IT(`{LE~=rX zrsxHyD{>%VqWH%b5j`!*=)RT@zUNQ2;CGeIUE*;&Xjf4jP*HL&;5|ct)P`&x-cp~6J`m(``q`LXnqo`yd9OL8~(`GkJy zxTOggY3{e1sV<#$-?aXh~$o@A$4@aM}zIKH{m^buMJWpsPbi1l`r((9AD zymtyRW>+9~Wom^LFT&eTia+tlfAO*lb9-F>w=TzjPoe~fg_laW=5l=}hc23(em>A@ zPov5=z%jtB&Y^mG#DXhBg0oQ&sj8*NSUE zRhs_Lz2&=d_nrov86D;rc!TG;gCh=FE~C$tF6Pa%n*~)bEA{Zv4)S^@TP3Un--#-- zRMHvpr2E9JQlb9zgF;QnB^p1cElx(auIf8@Gvx@p(7N3te;&4H$ZfQf`d*588s1DH z*bEUzXDKdcY_4^QcOPo{sGJ_7F9dK`w$ID8Y#S<_JZZz22lXzx`-U>7&Quo`|LksR z;CEV0@OIkxX!fKr9TIu+0(!M$i|L_%8?y?AXMX zu;}}w8{aT3H`}c8oFv7cWxzz0TbrJCJZYFJzwo;5oI>$$9#tKeC5u9AnKf25$%$N1 zqUROv_QFNiMs+Ym#U@Iidv3~mgOawZJr$} z-69YQa98K}4)neamzgRAv*jU+L>xNF;l5T4{+*$%D6?@se2`ZFkIGBFfQL38yf_&z zDGmtc(7Bf=4V?OR^Oxxb)wm@`YlZvys_8G|T$f69sWHyK)aP%m)9n^hF?bka^DMX1 z#IA3BoZ;)mOQL}<*&ANz`cJ9Mfc|{N@yZ~_p5mM)1Axj3R2Zk{$@8x$+$Sz51hM$( zq?KcLF3zt75t3A7PV#1&3wF=>;T`hMP4dMm-Yj|?%s<4L2MIp&IBUoyXUt8K8aG1j z*6`Z?JbyOxq0i*24{KdP7ef76uWQBd-NbOf83tZxUH2>>uCK3GLeTZZi7n9RX)-XU z7+YmXj*29&mJzH)$}+S$hYcR4w8`YjBuEQMKqWUVVtFO)<5K+0j6cNn8IlQe95l2e zmq5^}-$6|VXV{b9%X{EIzUX|GWnOpN%~4_UUCOEW<=`cc^4&E{iIvmu>y}&%=L*n7 z1=^_8LZPvofJjxk*L*1B#xV)Iv4)Ir`#BjiPs&Z!q^O%J@b+5|yly6 zU6@u`v9)ys{%b4mc)<0bBhtGws4bO#^%xB=Tfq}cx9&xUhB|I?Qu|NCJ1GNKWu>ME zUpBG z@L!sE#F>rrEnI027pu>XI|mk=zm*30zG^+^uvnGjSuJ{3#;`c0rHG;`e70+zk#(An zv+>&{yu(gQvN2nt+`BKSk0#tpSpK{7s1l{;>N4r?_`+8%>y#7h-O}@-+kx$U?w|YP zF03=i1$3M^tG>i|Gtz5NMpR%^jwIfjJ;!&0`eYf`<>M51BSpANGBNhkYo}+<9lx?;%kdBhJxJ##xjcd2MoL4XsuS7+9@f!Pn32Z?+H0PW8G1y zSPT~0%~RjGQcJ~f`OF1~Cf{;%{z*r;{pGvw_od`c!tfcUz_Jm)fp&!z`6=ZKYTM!; zz}l-cc8Re%H2Bu#h)@o>2k-*&&C%)#-HUIr8+|2{7me2hUwuAx`I=GIK}v*mV#Yp1 zzJ%*gkfLxt6Ys?SD8(Adl!X6qqtn0C>%zy|b^J*u8I4}@+psL8`1qG$?%NU%3~^Sp zZ9fecMY(>zvK!&8`hH_g_K6S`1WudDIucwSxlpn>yq{CWFha`TMIaKr4t1ErQ^lf}f za&u#eSz?%@rO8{dR8~ubb$t2wRr;ZXL4CINoIk$oTrxhn&A@fl!1rDN$I==}IW3sx zn%S9G%+eUa6`0#>a>S+Z>y+0Vr%~Q}`e*byZ5C6VPM!O2SR?w4UB|gaGbU??mNoj+ zAqrIBahES8uAnY=w(!m%B{zVkrtjp~BfF7++n?R!8?5fQcqA7KmZjvT!0xZWVuBRy z>*sDIa&k&q)1EKkWEU2mx`)BE-yAklrOUo~|7T@~k-cka;O-iO%dpyg8nug)$!E$f zhM+^x%L9!HyU4uzspp0~Cwbo$;+lZkuyA(f=)^SYoGm{5DS&+7p;goD=HP za|}JNKU{EckZ@r$r~%7up8eHqusTxuT^>d8EuF14r07YbbeSLO`BcIk%}Ca?V4hD0 z?#(|Qlc#7>TjrGH&2Hax-4T*x6f5GgiKd-m;RvZMAVqPXkza=dBQ^7Q!S=$*Lg~=; z#Oc^@{)OAjcjlaI_wsLWE+eNtIi0s{-;qq`3>C0CtcEO}{p3Ao`CW{JKMP3n%%rQ& zZ9Y~z=sIU&(!1oEeg4A}3JXc1i93)xp?@GkhDibu>zBbteyY^OHeq%$`--ZFPLD6; z{;e4|uBs2HzTYxwA4uACtQ_&L<~UO=ZD((I-JX2xTUyGAF?@8C6FbgXO`BCHdY+d7Wk?hf7_f+H}=j8fwmLKjE^gVwvTXmj8@fp zIGWieTKfEf%N$vFy3@TY)o!0pV=b3l;trB+|KK~JEfws z{TLa$2p7z_*)DCtz~?z&8UN7*fuTNnq;vjuk}jv^N5@mtLIxSJvjMR;OQMicAF7sa zjyV@4-z=ZLu4bjMn~*u7*Ogr8LrJuE;~g)`ONv>M;81*O+&uJxIs3*O-A8~`cM3Ec z^Y?@5J3PM6{EL;En9A6gkF`}^=THj@$>yyNToRI{B+GkKgz|IL>1VbwT)s})Lh&`| z^_$8t>AH81&lsN*Oz@p$e4bTMzWsP%?vJ%89-2(gtomMt<8{!Ih(x8I3OYgU>|+nY zC;nDvWWOa=jNac;RCC2<@--G2%j2S*AAC-koM4qdq0;R^PQCrvG0Q-5kbgd5F^F@@ zL4I1%=}5dm!RCThLf`b%m*DxC@M8B1eqqhe8zQKK_;-k*ll5xBWp87I;SKdC)tii( zE^YBLeh5-hgp4zIB#(AMkh18=dklO;;L z3|H~0($H+U_`;)wb*`@bDfIR?JnTlsv++FxirXpYjXXKb8%> zGKsx2A{zO8^vRWx!oM^rXvU9T_A=V@&z>2Qt9fR*o)83i`^sZeMg1j3>um~)#wFEs5sff}rF=BA*K%1pW zImf!4zsulzP39`o^V=OJ*!u4>1#xrIyta$U9(c<={$c^lf||5kn?n@mS!p}Pxl3)q z=jSe)X+o|PydI+;;44s6a+7>z)EmIlr018sL?_q5FwYTs{lZ!4tG!C;H^j_!JatJT z8FN8gFZ{dxVZsKa6w6ybOjB-3+@`^ve^Z{`@t8X#ZG`&xWZ|P^<7p)$ZoH4znQK?9 zN}O^|ztY0@-w%3wrzxn z|89!@Y`5?Ygrd;ol*ztWmb16&_32Rmth|q(^}|lgh#T%QPhE}aY&Ux2?Q;DI|L3)f zmP6`0r{znXR21m3+O1Wje1$vVmOfPnbk@=l2hQ^ zZF0g4U`8{K!&!;uoHPSZsc-yZbp^T^VRGgg#LknF8_E^IQ;T?+3qkEuaAB;^`jc{C zI1`jT3fULnjT}80QKAbqEk7woDRdyh{$(Cmo>izSw4l$t*D}pCPHv#yH zaftlsE71)rMX?CxT|jw+^8o8IshEAn(Hn}z8H%(ed`j-+6duxpP&t8KmCZ_Gp6GEC zhC7MRqqv?TTj-TEiQx1~iE%0?iMCUFQ!0WxMGclPPh^;pgt)7T7`Cc%M}$k3LNt>N zE%6tpSD0IPU^Xtda1&|fu2+qIBbSbuShR5h&*`~M^A?q9d+{vh`ObAR@8&dRbYrNL z)?mqu*Y%VIxAx8&8Jo3yVhVCx-kQ&H;@lhzKCKl6D+eDl12w%tZzaUYstpNTOnVyk zAyRoL#7b*F)U}+utq}}cEUqFN*Ls5f+JgDut~^WEZEm5pXBM@XCm=frN<>z2!O*U8 zxX3i$9wAtBF^7n*1*1kuxqhA^l+PK(wE+bj>zLJ!7j?gxpjjN4d`!@}=RY#Pag#N1 z67w&2nP#I{xKYd9$AxdsphcVamBk;Kfm7yhGIdM|fu7;{vDq}|=#<)ToX^P75w%Ye z{+4-)Zw%(9TMW$oA(vud!}Acx$5m6o@!^?kI$e?M&fGTuzoIE(X1(B5YL+&&T=f!I z+7*UmOi=1B8iU!{yur&9)@bu6@zw4EVfO{9u&c5Gre@faKtgh#64J={BDYNHa+kR* za=|pG#K^g0>R`r^0?a+9zK6Q<)G?33Rl)jj>R9E(Sg-;i&JLqHN{x;WFw*}3 zDZ{?~5>}aM4NyOrUA%Ic3h+sn5SW zMzXO9hx33G<}_LRnqf78fVN6~M};_oap=8ANYqmnmmj84_-c4(SxmCrxr_FS6rz=E zMS=XF1UBUPgyZs@^cR!R=_ANX!Vd%$;tO#`*Hbe@7C|7qU6DY&LhTCz&LQ^=s8=%1 zWvI3&h$0L}h9^-v+%Z{>vjWY-V&QFJU0g=?fO#O?#1{={fT|^7i9`i|i+RFnHva$y z(@6IdnCfj3;&UFNMB$F(rI~QDsez`-ujg|Racb@OG_37)y_6o;?ER znPc{WU2w!KS3Jx-YkkzBQTdrR^Wu8~1sBJDCOH?{A?!EiX_o|a23$2C&i6Aj`oR@Q znj0$PjClK-uw17L1@XRWA)vL0t=?%nl)7!-V;pA4YiJS>4xiK$fTPE8?YibQd%A^N zv>RN@H6zIgD@sZuEK^KlnQ&I@VG_@rQ8X)kaTRUkm?2qa-l7EtrMU^>p#@RmWVxq) zYGzvQsDR{Qw-H8D(ic+}N4d|Lw1ME5idBv^P>kWVH;AExUMlVc+j|#!>Unk6@iLEd zk_5t2RT#sgcEj&$Igjmv*uiyfuZYohzHV?&-!Qy3`GJY{N}FhR6NVsp_)t4b*h@y= zh&!j)fVle@jy-sRXe2B$wjWpGV$Ef43WQdwzcF3p4kaaA z=jCw`Gy9anqk`}AD=a~^%ml%jCR*k_NOqG*Js26Hpj=vRuQ+Y>Ezz$LDXk?V&vKSD znzg;oQHe$iFi#O zB{)sqAps6H^Bz;h^)saiR$vnq5M7bGwVBqV#!fd1^G9-xRR%B%W%h*||sI$UA*^!8qn%*Id*7K594uX{d!uLdT z4XDqUh8*tdVJ5J0-M^v83|Z(HN~+QjRZJp<~plY^(g1T z;toOK(#CWHh+u_{USpu9oZAB4yfMLHb+|GCcbq{^{{Wd#{zz$U4a#Sz0|FO;6F%44 zU)|(F%AX`L!u2dZhGSr*Zpb+WJWDr>Gf|fmyphqf^#BpED!M2+nS~s5aU4pTwPHF( z_vRW62(^m2Di8%*A|_KXzj5)i-c(upg9UTu52xIwvon;3B#xy+G&6D~{u%KYW}lgu z3V4@S_(v>P%*l#+o=`+Kmw%a_+_%(ysP_HEt!pQk4dC!f6-%CF$Ss~?`{HljURcn6 zNrZk$TW8Ft!VzGa5%&nM;t#2}64s7mu83@b7TTj6u2G{=oC;TvuHfEAUyE2+=GgNq z3t7aZxAO-CXz%ibn9BMRn6g|MwuFBP#346Sh13IY>M6DLGeemxG}my$%-t>`nM^Az zMNu{eaELKi1c;*CMw*G@4^a&fjv{qafUZ3wyJOjB1;ld?cL6s5@en8Q{a(Et#m>DQdOB4U0jq(lBKxR@ zE+NJ+j6;Z%-6)>OnTgCn3b~1Sn+x6C!2qjs0*f2ZQ8fN#6=v6%fLQD1VT0mO?0en8 zTi@b5lW_*q;$uZtA-4n#sh*&6=Jd_+jP)p%c-25V-|iOJti@(p8YcZC{UU{2XEnsC zR$N>Ks1GvA1vjpsN&p|Y-l+p0jmtP@v)eZcaNMc@q|Z|AhL+SBY6ezd@=9Fs2}Zlj z7^mh_sC>gg9vXrcuc{#Y-cV)IXR{OP8pM}1hZIYzHRTfU#&e_$fa@86=$D=`3a%7Y zftkZsP=%WLfwl+CTEh5aBS3FySQU|!K=Ulj0ccxJadMoa7Pd-yJFyvo6bX#Ll$>Io zB82)y2QjK}M{plIgcstBXV`m!7GEXHdu0^|%%`*WD~f&1ibHP58G)GV(>Dv^b&n)o zw~foD&xvPg@=IFZ5b2^3m>Z{#VJ9Dn#^h@gEvvhjZk{OWRfc&?x2U`fa~)Sxq~oG! zAKQol!JW$dzV#@DeaFSWaAAKbTvzT>W0}T2;QC6*WO~pHh;wEP(fF5a`6iAeS1OKT zjeZ%kgbp&)uN);N52#DYcLKL*q8vj_d}nhAaN-MirA4xu%r$NImDf*rWukEi4TXmw zl%SfNB5`;o1YQrs76S~n{-*9e)BB0TP?tp058M;BG8T;0vF2A=AY$WSb1QM0K{QOZ zTNAL4xW2|%;S_Az3jVQ7vzj`{=NByV5UYL1vayP`BMc@r(5G-hQrQv2%rqc8#6+PxiyD~-yu<|51_Ke;r{Yv7lt6X<3vqg^^nLHu?lsJN z^mQ_N8spIK-YOoIKNBFltiJ;(Va%w`rUTTM#M&kza}@UyquMZU3l2|+E7uaa+NI1t z2Xd~g%obT&+*<*PEao?#%CH|TUSg%;P`=<|t?p$^oEAh<)7iKxm&WQX*eW0uG{31p zZ@*?#&NKb^m2GRgh)}n&lG)T<%z z_%2c#iFa_7KX4-<<`@ZQGLD1`s278N^D{cGPQ_KPa~qlQ>+`=sb#jha9Vgso&esfP zzTzl5Jhuucd8ZNJu+^--RC(cz!RNcUO}9Zvch)EBAX#0m=4yn>j0)4JIao7Mycdh& zElKw%3w(?y()pFReaei`yHn;9RGnfvRTap7CQ8S36xm=Gd-o>?_DgCvcj|CvXUek9lIR04ibmEw;vR0F6QuW>Qfu&woOp^*R9%Y? z<|BpI+~xAB+-Ohk7(Xj3?93%*X1RiFo#^$Z$TNaYKlLmqRJNe*18xGwP7c%ahHkU% z7REY`xc$yqC{<0;`m8qJybTTNRDKwKJMA`fGgP;;QpaRuQD zbt{|2RZOibTZ*nyu*K>&usQjONIY{EF;^0{HGGqS`A8A6-VgT>5Ca;cP!QnzfV2)j z5YRxO<1(&`!IJJNfN)+qmJ;2DIt8e=a%?kWyi-l4Za zIPV&OwiGjtCH#P5?|;NZ4638eri;`*&w<3c$y>~%2gfm{$#c0}H5MO9Yon;Pu-<)m z&#$}br>*&xoWr@ACRdsG>Skxo3oG6wtN;u;b3AaBCTS~$zxOE`*BNmEDG+H)EGTe1 zpb7`sm_gr%QjrpOn1!_LE?2gc57{fJ$DPDMA99ly=2PT`T_Ech9V%fNGhlwEOs}*D zcg(iLGbp@xnO1#3kaEFZIZU)o8#m%vj?s+m#K6N1$`~+3CGirn#F}EMQDIO5*W5zw z`^P@zz;PHpOd_i^2QVfQEjTYuT;ugK1%0OYHSIP}>Sd=n+cxafZ`u-9E#haZnWBXz z*qsmVVJ>rtv23slDG$p48vVoYVYfzd#LKC}L$w5|eM`p)PLIU8;R?&oiNM8fqL_kw zKU2<_OK~;|ZJ)eMT)%#TP*D4dK4kIRa+) z6Hjnf*E*DKtg{<=Wg}E8IDw3*%;z%}2enHCX8g|ykeFIk)(F-r_cm`d{KlcDea6?r zpDY+o^A*;~d&b;f?qIi6%r++xDRN_R#b*Uoa|LSd89A;TLCTtQxm95hhGW(727K&-WWOe5LUy&LcG5l1WM&#I5{q^th`4`crTfb3>P4`{`aI)(%_#6DiG*-cPz zcL-#8SQ4Vl=P@KPISO?L8+i~7KV^1>+J{VZwW(fcu4PrHi-w_e=W@8C#mXT$lqDPU zHbI?7UKv-Yd`+6j?~w zZs4-j5e4MLz^lwe7xx^i+fBuV@a_XhgcwdQ55W6^@<**Ok;P{8{X|_#7TyQE#;!Jh zgbCn{#+THiDNnStQz+m@8FtisrF}-rbWNw$yX*pJH7F;5*M5HBrCrKB~%2{Mb0~N$}hphS@o4A*ojy zg_vR$aY_~sEO#+nkb8w2mOjuJt|bZJi5~R<#2+uzPq}k(Y(cK`T9=BBCXwHuznRgB z)4GO>t9-z4a7=Dh z53hKPa}&W%dWy{t`-y6Ay17L*cPYb!YjH7qFy6~G2329x8U&)M)-);4m^!<@V`eO| z?j3_n`$w|O?-4z57+AOCbCtglRo3+!+lpeylqV0VzkEbw72*QHQy%cDpS;pq`IS2u z`HH=IiZ`R4r5rbGYmfIi&C;A>(+{STjKR6SJ$c8j@Upn6wY5_kC@tfl-4daIuK%4s{$wr`0i~m4Td1aLbfdV1!5gTBwG_ogHFA#N z`;ac40$qyMmIB%pN5dQP$K4M59EtL^&*}SV{zYucPu!Iz8lPG`a}`ZV-&hdK1FU`JkH zE}Fmn)W|LW0PGJ?yRYV87hhS3ifT}-M9uAhx+|^RtE&G1)N*0x+B;!G_bQOKqEmM3 z+5*9`!sQoN+yLIYV^?*9Im9cV-z0nHpycMrt<}6{3T@BeSb(v0@2D9S-%wRwwLr$( z$P;H;@)4zb;^~L3BB>HAw9>B-7MAqVoD1)b_tH z$#dQR04F&A0O6mxgqFZsSctLWkwK)^^lmjR-TxR7MiealV47Rg` zZx7*RJ8){5Q+m6Y1ow&~O@EZA!|rj%<`b;Z2p>_-LUBoNjL{#6F`_PSpQz?g)km~n z`kas9I(C?P)U>~cbDUy0>5dh;;EQeJGL{PNS5ltYDJ|oeIEE!Nh5f*_nsW|OGx?7i zcm&%CwJpY7R{E5zKFIRt2IX#ik5rL4KrA)MHuJepkt;0!0CDPGJi^fzg)+Mzxvw`k zMI| zh;E5b5&HZ@&5@>MTEy=_-A^+t49X_qZeV$t#+VGK#1Jq_fvv%eK(AL(!EbJ^-l>Lo!fS({<{ zAxlELcPjBYEPvdsWNSIxGhR8UYQ8=u4SU1`8MaVqgOo_<(KH3t(8w zQsCb&+}7rk8uT0_9w)bML0-9z(`NRBF)5bm$W`4Vt@5QG2_V239{rUU2IxikLpj7d zewm3@%~RwmEd$t6e0tltqR;cl%<34|qWhPeY9Dgmn@jNe9``xi$pF(Tm%J$iG$mow zOtV-km0%uniKaPd=>|Gk%0Y(T#e)@J4P|NusfO8rcM7~c++9Ml@`IO0yujA|;J7{^ ztUl%RLA4c9CuzQ>thi+MgvcLLINQWF(eXY+x&`a;5BH0A@WgEdxRGm!w+n_ESB>Ul z2vKE?=2TmhML#fFxHl$LW1llpb2tP!(w8xQ34o3fIH%O((%>x@@fd>NpHioj?J;SH z#?SnKx`ec-aw>8JXDU?+mVYGT9+WdkzDPeaJ_yZxOKe2(EYTFyIOR$>h;ap?RLA0S zOr*FhtT${_6bC3IqcGwv#9I{&%|q&S412oNZlW2?3=*xulYB5AFG{`2%mBnJK(Fz9 z$C=G>G@j2_aXIv8j^bQOf+Aug=}E)U)1L@spz_B~a85)&5$JD^N_&>~EyVZ2^RM#} z7g6^sc+{s7v?^RI#R*vaN*o!?0C45aK<<`Au`BLSZ8eXXRMzu#5E>6;R`ks%tQnR@ ze&(LMW?74&y2~x&LXDOO#8HBxD?nk?JH3ig z4b#NZyIhZT6w*~%4j5jDpzQNf<8WQc#yFVT5%7#}g2tofr!*wiKMW}-)g+DYmQU=P z8eDJkA!F=+*$tSR!u_6%ulTvot3Q5)b2-GodOS@ru4lKV_dVgg`rC#+Bz!d}YYhXK zV`wXt!Ezn`W1%>+N6Qnlg=!ioO<*kNPr)jaD~*Ax{G&DdW89y)un@`&cj?8*mP>t4 z5^#ySjwAIMs!W80;=*lxMKJyo`w5vpNEvE%8HUXy31Nv%RQkld@1aQTH0BJaIO&Em6yu~p7GduiY-BTOdaGs9`Xuk4-{{Sdz zv_|5NjG)4D(~_1;BAi8VM{zG*M>Izv#;PphCRHiPbFhyYW1D6`SZ>%)FdZ-~5teEx z5d)}wRHE^yu(NtJW8y)Wiv^VgIJj&49Y-IfJr<(!$8mV{+B@}YskBR;eRxGqUao9H zD>)?~)UAEJ3P$+!+G*&s*%qU;T*_YIy0Z;C`FFR}S#8qdxtFu3BC_BpzF#p*%e}E~ zhj*-}nQAC&@wik)LkCWah^zvtQT@HaV7 zbjRICVOtn~KBh)zUbg=L4{7FOS212DnVrk-S?TfVqaK2i+(bnq;i%z&(71?|*Z{xI z<*{`G^w}J0Y_@(%VuH4ezhIDtsmdIEH~5dK2Jrl)Lqvt2s~e7Ng>Sg35%(!loTIoI=!c*R%qp7N9i@=a`#S zgxdob9fEL(o? z6;Lg!&zYYW;!&jF#Golv?;ICyCQMOcC^&ti zO2NM1t(xW{T@#Yqzr?L%qeZ~kXR^w{!mz#}9iDN!lrFuiiIXn7?f~qDYCSe*80(+J z#?phwFaVy%q6kP`{6x$NdF+*sE*?lQc;-9eX)sQ81nOjXV#$`72)R+rP_@Gv&80WX03Y@V=ZJmiN{_lG2C&=j z4__0|Z1aWrWAJ*#eZyH*LNI0cZINur+6RoHqEi=5if;1VOJRg`A-EYbdV{c< zr4YHSVp&6~)0Y)8iDS|aJrwWZ8$AR93!Kd8#&hE8?iDy#i}Iu%P?x@K2 zW(O4ZY7QH3y^9o7n;Sla&iy_;57hHh%sQVROXD;OZHPADtiyAC7X;GQ{^efjZ}XR$pEWb)PB#zwJ|P_BW9@o^t6kE;?T6~djvl!#*V3FSv))pMM z6LW%4+M5uIf^Y%%0RI4at20pp^#N?00XS*H5ql8?lXO5{E)RG{w$wufB{`@Iq6o+C zVC{-+n}ajug5nfIIU&e{OD(xe<|Bx%A~R4riPTeLJTXXwJD^;!3Ro`S)bh-<#KpKI zL5Xz<#DEM+0vfMXsc89*DrfSWMY*I{v1%_YT*cxoMY%|&k!+6r7Nru&GneLEzi=@| z4r5$RUeQ{X_ZFq5T95oodzNs=F{_Ia%O4L(Qg{4JKSh>YyzjY|1$#v3$LdvK&B~^p zu>*OPgA3;})Ui%t6swMNDmRPXAlXJtM#ZHH$r{;Gha-E4v#eYTq_vGcpsf=E(QzCp ze36$8*}e%U zvKt!lQoI|?TFo(n;s!4rks~6ZV6i1({aod%t|ew(aS{=I?yeHWs(FIF=k7b#r{WF8 zdY{e$=n|FM7fS9RMgveTpJw_CI^HnV2e(vJAw?G4sF$!vQ}#?qdCe{ zeKxBXG}AKbZp5461hmDYA7V0sR)pV(*brM!V+?!?smIO{)-523@Wm(0qI-H<*RPLS zKcxBJr^;WMS z>l3%|pO}COc*$S8@hD7!hw=dY!*3ZIZ>58R-t0ikVEWAffwpE_l(a!KONawV?NOPr z`h|HwLL1}MFZ_B%+CVypXq;tz=Dy0Bmt0EAP+2xDPN7BqfKK!ARu92Q>$&Mo62erx6K~ zSlqvGrrBD%hYR%4=4La@!eU?`@_O6ou~BCeY2^y2_>TPx<}Yl#++HK7z01YL>Nmt* z2(=XMEL=l9jK@ydj8eJt6`XDw!}yO6X@7}^*!fE)5DurpTm5CG1_-lOYf$HmN}7mp zYT=jh0MmGZ!n3HB>bm~`QR7rN4+_k+3Q?+J)3xvBA$XzYS-;C3`PLGYF?_=1 z7R}syx9tIvQgMyzFy0ufv66o7R%Krl zlO5)B`*XWcCXWybMwSQC?v~OL<;k8L@&KKTxqA z8Ech}W-aO>F4*l{d0Zmk+W{)hbdr}?4yH+1yxdh=e#{YV^Bzi8 zqGuX)IcHL}bQyr);)8gI&H z)FFAi{$ME{c!4Mw6h~%*=ndDPsXuw^1yd zGDnc}1#7-v<|V>1%IDNNTP;y9Y85+xC@8n@(~SC;xZ;4c)E>NHW^Lr-DJ*9dm|%#l z0H$1VBZUJj6Ddlb$l$jP@JwLtiP*}(@#sd0L^m57WnM{InoUzBrxflA3A)+bbGlGG(L{+u&z1O&M=%iwHj>+>f`iFX6JC_V z?80vHgpZRj6)h4z@c`f!AB&dB=GuQ@F#hBI(vRuty^zjSfs8Lsb z@!uU$)X}`=6+!6~*zvNShjw85-!5^vH3T6;>7I=W>QeqwGM7A_G3(PM~z}_L} zDD@hMJC_=r1P+O7h?Nw~YMJ_o1|}j3EBscXJB!TQ(6<&WyNhvni&1%E++HHZJBygD z;fogH)Ok))U{0g9o0uy%4DbSO#Z<1DL9h87ZoI9iVnjUI`VmygNr*@; zrNt~%msNIPdX@{vF#Y&}+%F^-s_IeXQBvdWF>8Y#CL}O1`iT?pD8iQUMHiI}M+Bwf zzZX)4iwgVEa5mSJ54%G2aZtY%o1)`G_KJ2euKOYdiYMlKrn0a*^!Gh4vKZ&m@8Wft zjimUP!=HJ-czw;YEXd14bAhjz`IXwI@e!k%1U{RNh_uBHJe3yaFgE@z8xb&p{J)81 zdCs-=MPWQFeKGQ_U;+ANDQ_UoXn|t9!{6GDh%;#Ud_Ms#$ zFDzWe?G~ckT8kD^uVt9cZ}Ab6eWZ3(lW>;T1b8y*h_~q1Q)s1$rdh0hk?k13$9$It zp8nt%`rHwcoK6s`u4O8+PGt=#_>X~ZV4`o5K36E#q9SgpB5m>QG>*1rBHTnX#%PF& z0i4`(&F3(k?~9Z?CU;OGD~tA>BD$Jgz-zq53~7wF2YO*37*G6+HEtWf`4pEu@OXy= z^Ogz*)kW91+$_E(XA9+&*xo^&Gw&T#{mwDg;n#7k&VBQUaEG%t#Q6qLNT*TJAS0ru zFSa82^zrE0g&&!NaLQ>-d`2EYA>s%}qag7VhN0YR)4ZW^m2Wn+H z=WWds-Xj@ltqM!lSa?&Ip+>YRB|rhv<^0sixPi(d*bZe3ve+iB6S&TKaF8RLoENw> zKhsRLO+#gQfVT=kTv`%A7F1izOrw)4p|~%EiV4z)@SGqgeN2;qK@}!y84fL)sPG@C z4llXvFTf}6VjS}xmB1DW;q}umxdo?uPOI$AYCXd)G9A)WY>vXe%0glaQjC##*c@C~ zi`VL1EDG1!g=xa}n7`r1=xB7q2m{rNA8RK){j>H4=QP3?`NAv<+JyLLpWF$j)7#NJPW^7`U2{13m(;ve z=WMsRWX7fGmYP{_3zG?+_+!=+lZkYS2&67ypAAJtL7u`T@ba9KQIT1 z=E%Cy(Ni4p7HHEfHM{c;?cRBv(7=!^B6nM;EoQv2Qq!B6+8h+H z6M9=)h6i{WOX^l^Jurq!+vcVQ<1a=vex-@h!ie9*P)SV}ZmJ^_5R@JxTl+KgK`sNV z{6aIew0ChNtZ5Y`--!b%uN5q9%7Ai^VXegH0%$twK9JLHZ1pmS5fC;_$Nqs(wxjPvSbtb<%`yJ~7#lO92qs!X ze9HuN*Wi^Kbzzb7Q-+`Im^QqPT;4CpdH@W7eVrl-27z619GkQqdFUBrH#r2VPs?>I5z)81BY zafy|cx$`mS*7KQ<9)(n@(LaR3?y6cCY5?Jup?L^Wjp0ghwwskxD$^zgrsB#(8sSiV z!j0arf`PiBh2X#(YG)S2QgVQb%sYsAV+IJE$4HUkSn4rGCbmchmlI^p>lE7s+Z~&T z<_nk=s0LW(QHw^XE@~%&cw%&sdW$y#8jAPnP=q>5nwD!YVE+IM7ahgoDDf213&dKT zBKj{ZTZ_a}_Z7(&;_(;EURba<$$6+l=XuPu7jk#jS z@|1a>!Ygve#49Y<5h^l|5NC%TV8x#>(>^sQd(Pu-BGdCaV=>L{znHI{rEz(Cl~$X( ziJmo?UNl}mP&ZWj#JZ;$n{^th>Lv|ihcef)0NCF$lARj)g4QkfxmUX^&^{}Qm<{|u zAMy>iXccw1s?9Is61BQN5U3vr+@kS}ea71r-ME-k~VxgMV=(hR#>w5-sf7{7(F# zihykhjedSwaPgO@xkrvSxh8w!j)wSY=hR1$4WJQGu+$JUfS(S7#y$?6O|Q zEU3{)_=Z78XBQYWgE;99qcHhQ_9Z=ZQBP@NnRJ*njp0yB1GtCt#r~!PH$fox@Q5aZ z?D|mbg;%{3U_RKExVz23niJI!QiDVXG<*d?NkQDg7SQalnFB;#e;bI+gM0CC-Z_J$Amq3}>xi+J(-^l|uSK||Ll=C_ zE-y0-M#p4!FuOZ}zAm1%6P=wvzVHM(=#CLA<1;MN;Fjq3iFIEDr#Z|_(J*iEQL~$| zaT9A{juOnDH7eeJ+!#>r5icitJBg6gc3=-OhL;^mCgmB<7>!m_xkG_#wl$C};tH#L z)Ezxxpw0N0S050o^_k5twkFyb`GA#;)l>_z&k?ww?JIu-fNHvz?RpI* zX@n~gQK$NNoT^knmHbA6kye9r3^?f|Y+|?&k)W0+Xgoc_Fl)%gwD*;Qa;}FP?j%fD zptL^`0zs1lsGA`B&*p0y?I;|4$Ml#_y8Wl%*ufnm=!am>%|M%Sd#VF~_sq6WbzjuW zOUcP)N8W@2+P4<>8wWN0I7+85Q0%ThFm~%Su;6)`itb|&>m{{< zKF3jH;k#d&i&exB1(aJ*FNEpGgYq+n@Wj3na*!ual@@O?`ywcyCl99@gMZ<8^=iE> zEj@|v=~&;yUg@zNFjw;Mt_6VXK&~L`aZRizaF}MT2P-0=hTyDAA|4`~MYxFK4dPQ5 zsJ%v#{1S~pFdKl}Q<-Kj&5;36GVv6N>Lua_2}NQWInUu1=96zt zvFNQuxV**gE-~n=cbK?~#9YOwtb3FxUsXiBu~&lPOeIu4=_mdX&wm5)yEzfzgnM<;xLwkaS23oteXb${;W>3m8@kFWV}Ub zU|H=q`M2-WEaM)P9|!XEWzU0>Ze=Lu+O0a_5`g?kUPO$$^k$=%%px4~L6G>5a$F)^ zkv_O8QlIeI?Kbfw!@ zz3&kK3<%;oU^Io0(lo<`JXjOrPmuora=~<*XPAV*(r13e5U9fjbM{b=FSvyr%ld(k ziIf1X&~`!7am%5Q8heE2R>|zk()W? zF^CfdPzzuA0uQKAJWVuA%dcqAU#x)p(pQpUYCap3j{^XmT~4s2lkBO{ZOHHq#u)CT z`wET+@TGk};BI?+&b?2G?>P9E+=_a5JcGj4tt%>|VI+_KTYhZT7?gL8+;R&qb zBbWwRrdo(TlFUR7qB@Jy6RU~VWx9%#oXZ{{&BQ9%<%Qg`mryR45&KS(kXecx52l&y z^jNhNUYmL?MHb@JSAr=Qn7Q0uBJ&r_Sg~#`#o{X{QvqpYMb-A^Cv5o!C0izsXtgwE zUvYDaj|MG8ZevaJ7P*dy<@V+$H5=8-H&7k0GJqG~a4Thjv^=md-8aiCIL0WR$dCPn zGuEXwn(+~zJ@XTeDhyuwh^Ak}OBUcc3S*lLVmG_R=M!rO3%(#sHC|Jj6OOXomtJF6K=Wj#i{*Yf(KRUKUbkk|m007))GF*Xf9 zaMHjf&C|kb&a62>a7yB=14a<*+jlikNDu(OKASzJ-*hbU1EEY@SV`Lka#rI10A}&l zM~HZ3U%5 z!T9!VbP$|KC0AOHO@PFD)MW}4%%0w63RDz6FkL{9Ozq0ck~cB!v9B{ZYCGE602>I6 zHozNNgSWZDR$=?4+Sn`?;tbM>cWgyAV<>Yf=vuNe70xe~nUpA($8iC;s6^aA2NX26 zOzmSWbt=qY3L49(VU$!*D(k;6AlX2&gx1@_w{1>J#B*vZunrYGc5VM9flcBdNA zR!6eyxY4U%vRGU@Tl;Msr~d%q)qW+R?NT2Um1CdC5A>ZGP`phlrk{c_Wllj$+LbE+wUiw+Gz3uP$XTbqN5$bi=5qhqZcZ(P}8VihDgv z7NXQrEk~5LFA;l-QDTu)T8qWSs5JpROmNlXPzBcy@jdmNFp!zf9xuGS01PQ{{gBUpVwN=1)@4Cw2bOIW43^7`2|k=s6agf(KxxtJ{fLgQW7L04Vg? z?Kk_QlBGoiV~fiQY83$lAGc&K>ikR+Fo3Dm%%I~@7}O)Xu$<6px`m7aQt$r&pfqQa z;HYPIzlfWckza_XAW2B73!$MyMbzI9OSY6bPUCO2IRZFW9lQF=*#$6?t$R(PdCrV*`I2}hQ ze_U7s#!Y8tgEzP+7;3Hk#J8nUu*!{_Ut>|Rd~Y+{TdAc6?JI)gquM*YyO~Qc_=C*6 zd{)xJsNl>YMz0ig9l6{vkl8EfZXg3lnt6yt&oqj7j7H^LV`Qft^=O^5#2_a?L)Wr# z)wE~gZSTHldxkS!Z&*O@+J~YJ$-2JqGAB61&b6R%U8TU9(h&U2ED2$cBh+w+Y^n7Q zS}!!ss5>StUgJ6H$C9C(FVCy2LPoy{G@mhlkTb!HgWw1?KvY2TraU;70a6-(7m$67 zFpy$wAVp@86T>rE`G9N%{9`+GitLNL5xA+qh8#k2f-*(I$5Q4cj>so>4e7}+4P1WV zyuo>Z^8>gR1$&k=9wHHFo}e+2c$8`{Q4%B=p}3LWC8&c~^tY{%d5Sot=I4$ses|KBBa9_Dmv0+~Dw%|TyaC72WZEJ`)rQADA-*5p` zz9rs&+;h%I8A6KBl~@`2PUuv)XU>KxhYS9>{oZQM&a(*%|C$ zlx7B=O80;H0MkG$zbe6aKiUQpZ~U=ciX#62h#K$3KA5Sm!|?+&sWgc$6fG5wrf6|n zN$m+CA%W9~Y@0R%x46_)y5xtv@inPp!F{3%g6I&GnP%H?%d`MuwBkG{#JauiDF76e zBQ0;6+;kfU@tAJ+3ipNxfZWiVC(6-GmG))NWmpR85>PU*=_efA3z&(FwM!W;d1jWL z)NtDA@d1iAUCN~0uWSfYyvZ*y`4pKd8YcA1iXr=& zX=1H1ua?WGKJI0~?Ii;9QNVNRsIbTPX37aD>=&-0>@96CtF1ubt4cORg|HsX;!kLWsShkt<>AC` zv2t{u?10oMEE5WSN3^njJt0jBHSn+$G8vS(JhaOq+)ji;qHRCvRlw7v*nE03& zFK|ewhFa`rIgeGIC5@MT%p6nWsaQ5~oPHp&V>Sdx4p?j2Jf)uE!YbmYJdY*bcMpv! zE*Mg+>R>$EpFW=+s?@5}x`u+6X<&wcUYA79d8O!o@!9P+d!lX?Wk`F=6}3U`^O>1= zXq!ieoWRT*Y(zeJiB;SOMRgv#5xB;V3nTEzIFqLtfe~x4dZe{z4RT?~2TJH0E>ykj6NvE9l?S#PJX(Nf!eN^Veq3XHn$XeQ`aE8XY~L)HQy)%=-| z8~stoD-qA49l|4$4a_?ro0KsOOT=4IjAtt zp=1lp2JU6dZ_H96rZ3E)YNhh1D6jHgF>l0Ki@!mrxSV{;^A_Us7l^*`dSdYwqSRRU zMdgp-J&{`$?=q?&0eH-@rvgS?8@{0{jp|UlsIKF}S~f8*;RLi=i{Ei`a`DVZh_6I; zZc!X=8@e(|t_qlBbt;@k4okR&4l_NsDcaoLW|!A-@UCSR{{U_WHT4ipMeV+BWT0vw zwfP{$YP?L3iQxP_!428s<7sQ3Xn7QbFdvwy5L1jwy1sdc0QeowgS*Ae9z@WBG;Z3PsH;fQH{lWaaH? z@O6j{32aqz?pmgmI&m3{Q%MLLmdO!-Tomoy^Hvob5bDq zWv7+FIz7g{C3J;V#e;Y~_e^f)jYlXGE>*1|Na9=xFtXBd(A?v(_DVFP*&CBqJ z0W9S3#33<`rvPF_xE1t(yn^B$v0CsjxFL1gf4GLP7@h$AkkB`b_K2hqdGY9nZJQ$C@Lmw%A4Atqw z{4d@+i^NfSEtHFKc#F##f4KIHD~P;B6eb9#p!iLtoJFXpTl5RlqS<#Be8Lx(#}Hdq z+0f#B!M~a0h%zy2F?@W+n2XIsaU7|SOvUOWS8=tI5m|P^T^qaf3~HrYmLaUfwpVA= zqGxpz5X(t2`5}h>Se3i;3F6LTSGO_U^HSRHrV7s-Q@Psi4m9^J*K(nJ_=;XN$C+#H zdrkqr0UFzVh+p;d3pSIPM9pW&_KnQKjML^QX-^TjQ<&o5r^KgXjd3k0BB=nl-I)CZ z2m=dDlQ$}|e=%)sx9({g$EmMWJImagFQy|;*vh3pkxQH}d`?fdjuG~5G@>aR2^}!4 zDox(#^&&SoWP@sb!4SV8g|S+p;(LOh6$*?eWmPOc4&vUEs*Vuxk^UCIG_VbO;4|~4 zCGykEhTAw=a8037a0$e8?Chp!;M;8ZmRpC^Oc3Z&g8lbd_{mr!ksojW06GrAi2%Dl zXiiK?xA#-HFctcW0PPQe&Q$$4G+71onL_XG0P9uSMHGf@FhG2SK%n3AL>oXoELOiM z)eoS@{{X2^KT^&Q{-LscB7(`rQkEk_hzQt=kz++y(-;}2-tn8Fy>afP_>m~#{}C>B(b zr)}{ort#NNVxMdC4L=D$`$n0cIM*}5DOVdstTNd-CRdw|hN92K%ukrV9%D0d*I&c} zwoG^D+H8&U_Ce?I5zZxE<}ZvfD(nb|)oY$1g|1!1Gsh9l?_9?{JV)@9rQhNqYlVKL z+QoazWyjPhy~|ayJVGwb%AW$k$<68`RfiV_D==%S`qDRN+AE4)Fp!#GW^KMQX30lr z@6&cf@BX8ExoSVcIOi#q>`p1j>BOP%+yc9nl!rW*0(2(|M`QS}qE^a_>xTz@Kl8WsSseV_jTI5dAi#OT`>{6g&84SphN zPE@anW^K>_fpp^k03sx`h6VeHpnVtd8dq(v_={Q1pSUOePekjifBKIay>bme$vk30 ztFn-CvsAyBFsN}`^9}+}c3Kc_D;sKX(S=JY=`TcS=2j8q9#bt+o&d`uGuOBWx@xaEcT ziD}o&Ns@fRhxe2SeZVr4cuSVo+)2iK41bCvoHybXm50o!kGvCCirrr$EU)03BBzxU z4nD{uIV>lNoU7aS>6P@s4@a+H;E<&BIJ(GH$+936Kw<^$V)NW7g#yIJ1vr=nTQ*uH zP@#h2<~3OT3uFm!uB%yK?7p}cr%{KM}1p@7&YhyMW1 zkaMsGkt$9<6%B83i1fWuFyv7^XV1F?p?&k!aMsU>7wlC&h{vX9b zp|O_~JjFPVMCeY0=|ph`^*RV6QA1EpqtPhFNxtBJ5G-d9T-;NiOden!U|wZc4ERcR zL`ITXy3;W)u42{`5z42F9PrEN zm%6yyQ)%Ne=TXWoF7dhTW-l2%Exe#}h829=46`)QOgXuRHp(l1QkNw1H4>d3aZ;P0 zpR zXnrR2qZo~20|>|21HI75pd8$+UHzfZ)9xh{{lsRza}CM+o79^aG%N0Kgh@-XwJTnG z4(2E29Pu0CZ+@B#4S}02kLZq@gKeqklDiMgr}iaI6Wo+-J(*tLhGVDk4n;l4K7c_{ArzGuD&nO-jC}%IkPoVlLpW|cEAKKxO{M*r z`c_4Be-q6F(tnM;$~j@w7m&}%Xo=d+)AW~ZylX>CO$cE+zA61pcATP%fo6~iMM{EX zD)lPC4CS`)+&8mF@*z4@ z2|g(sHYx|RZHF#8ILp#7l^e7?w7H zV&GVaV&_W%0`n@J#IY3$uq+^BGU8GJ0?Rf}9D1c9dLlZB<{pp49={MB5IX!zSO|xN zOe2gdU#R_#^%2MFFaH2Cfkhr=`W3ih7`Rcb?-O;N^4Za-U#YQ}RT|>NwkEV%h|KoO ziGVA6xGHG8Fio9zE6SOcI*Z&|ly8qq+E_8>H&es8$Q(wT&vc_J#YW!J-8z^saTYj^ zA&N8lnC-Y=sYPUWDwt=D?l)SQ;^ti4aWiy&A+q%o!4b=dD}2Vw*NK4hm_%w&8QH|S zpj(`^RS|RiOpa2fd&({d0M1a&erIRp3I71zbMl^wk?91YSqSD1o8nVsR`m3TpHIw= zr{{ewHqx$$V35qN(5Flz@4V8CMsV9oc?tMGOhQ*pr1IufPXX9(ConJqm<6jlZZ88j zRIgIBVuZj=k+8)EqDLN4!TSDtoI9A`|xiLC1tp<>$#3s z0GX6GiW~W#m4ex|rzpbIhdGbLdYk^HA~c)D58O7#dSCwe0VT8((py;bbb18*gK*KP3whxvHcQD} z50!UteWaj=boQ0YDTj9yOhD^XE^x8Oyf3-orXu-eJydTA%Z$XcvQ`4TMEj_U!S^b? z;&B0Pq7`>s69}F&;trgfs)z>IXvdyodlxaZydA}H{{Uf1&1KXrpwp-kwy(??ZPv(* zS(T#3aM2pM(xpWzn1&5Ilzy=-&&~|uC@L>h6?101J|!!`JVl}`2RW}50JhW!Ri68l zl)O|h?PKB^KQB&xeKNr0`QT#8pO;RC0-Qbh!aQ#fYInaukX`eKvlOz zqH0u8mLGDJ3?vXsCg89F=i&a7@mWIEm>KF=BFdDUCd3?OQUdC|pfn1lhpLB)KDOzc zz@~EXF9W53!-sG@5#&gE`;Y>&m@m4^EQ2+uWM;$d*cO+hOM`PtD=6VV6(=l*17QCE zH6PRrNARF%4 zDgD5&+lC0_Z~RmRbVi8lv$i>cQAZau+VbuEBL4suo?|Fvf~`YX_o^l=9oZcP$^I_z z{8Up>L=<<&N&`eoq*d(@#PMnc3Tjuj4a*12>`yEUxDPPyfq8*>&%C248jU%*N{NW- zA>tw82Lv9bd#IzRhY%*BH5(s3@Xi#A8A=%F46cB%W}rbhMDTNkrJ>-9E;_?H&` zCCw4>h|_GuJ8pR<_P;2%;d24gnL`6Gn?#-)frs9rIK{(*sOPLRWi!Y1l-1Kvp{JR4 z1aN0kn$g=G%V9^vTyFTp$-Df)MTUK*9NOg`cPKouETargYySWxYRjm~tg}kb@f8Xl z?iFlH1=H50#mSkYtMxCxz=)$lJenOu_y=7|>^@>Q_Nm^l%s8e_W0IeQ(+AWtaQCR& zAyFD+BOR^YS&i}N^5@V+GHk2)q8p?;ZGk*PwIGTc$x$V-SzlR!WH~s??FoeD2y#Vs zUx>cMctrMP4L_Mym&rJZ?+|FyvVM2afV7K>96gxgttoUKh!sX?wGy(<@)F9x{pC8} zXtiAhJt{8U8q5*5J)jJy&S9wDNN;;4e;P1~;MwSLRhnShPnl+e^BTlK0*A1PGU|=q zXsh)67|Yvd;D0`XVEWRNOYti8NtA42z^t1ic6f$PTG-(o zf)yd|d&>kpENzQsho8~|Il=^cK{rf9SCv(Ox5EyCE07!VVeF0(w}?{?k^}JqEztp9 zn=|n?a!=qH!|;F3LSoJjL>+^k=8gPCO)qkI)5w2?y~{gp8AbS6$~RSx%l*t6G#Ugy zGf4)6jMXlYuw4{${@8r8Nd6;~eWe|?UKKx>VQuLD0C36#QP%g&;z~FDTT>Hn+B9D8 z7?>b@;u}xqR>-bsQy1dpoHzLjh)JaSJqXM6=A*=0iDwZLq38p_6Q(3Xh!12!@~KC} zvD~XlIAB?}a*&d8%OD!e1Iz_VGLpw|u47!pIE2HV32Ue>$Q% z6sG3>AEa^^WO$596mUM+D7YT#SPw7132 zD0BQrzTVUJB7rN=Sy=6XGXec_z&th(5eWx4JaVM3sq)kgsTQ ztUOdYFXAQIejxJKwk8}Q(47G563Cks^*Pmc{rY2mtZQ{+f}Xfs4cY#bYHD%HHF4YH z-k)!85g@#@o&NxvrhZe?@DS8QigSqQfFRodhY=zN^$(b)5|sjRQHwlcuY)i0JuG6w zo{>hG!&o;8mOV64i`fOxT7i*yBL?8=SppxpD)d5&DbYD!QbAu?14`U?xdW0HbR3T1 zQZ|gTJd7i!xg7v>mPcMb2NYH6So0lC-tXKt^%r_WQ!jx)*RSKo>%-FQ_@PVOxGgM2 zIZhd_ewzkZK3j>vCEdi<@c#hh?HA%~U&P}_v|j%JG!8es4)?h<-pQLa?LSXat=aBN zxJw;B;YTpaAHd6O-)1ptyHC-BudUGgkJ>9hm})`XKTtoGRrw~oO{PIMo^d|ORhIDY z`I+0k_vwKx#9r9%YpCIwf3>=p@hF}lrINMr0o*kV3(NEiQ2e)vU zTb`of9DGHk?fZ=uZ^mZG`$VYcscTk;Pfv)iPiT0QgK_sGt!jwojdc)qYplRKSF};n z;wSziY*8`H9W-d_Ae2VOGxDFf^Zpw`;OPNJ)f@`D9Ylyb5n}6@Mv-<6?aVP_Vuj$B zWzS|+uLI=wB|2}3M$_6=v*H~O#A393lUvKv@Q~5zKmbtfhkM|d7r*g}bY5*T& z1rYu*{2^RVCJC38;E4SG;6d&S2Xqf`XK+bmvr>&>BdDID8^lFw3yO(&h`m6E!ds}L zh^MhKB9{A#$&^)pC>{w1`)3PZ znDXoQH6P9axZ$VVF4yjKKXEvx++K&=A4l#MYxf4@_YJ4n1=0J0?ET8Ne&b%haGCs* z_W>ROS!+VLA&o$8{-!H9h-T_n%wgxmOfxyAxrvR;Rv6~vwRaFK4Z-5PM;ZPiahXh6 zitZq2cPu-Os0ZFUu_@q|Zt)znV(}Ha%uCNz%qTa{oJA}0LxH#M8y2$(k)DQpHWH;nzc6R5Z8UYz-1a( z4T(2yyjdCdm*GLH>3UqT9Fh)dJ;k$xQ|mRBUb|$)JFoDgsL-@(Z+UuPXrPNwf{wX{ zhusKzU17;_o=CP0;p_Zs_B}x4WocCWJ$HMbxuNYZCgc`4iWfK=cZp^)tt`|KA`;{W zVF0?uSRoYqh}uMlBL3h7yQ$Wv<1+8?cvFnbo}RAzeT>71En=-cCF|5O?U#%-w0MI* z9?G{-Hfq3J!80cp9)T4%qG9rbdvzWu_GbqDqQABfhWl~l8Mcj&OaouIfywxyAAn~H z`!@o|zC-&Es@FgMFg#Ovc_YLa7?+4u!F~pdC6bt?F9P%aF2H@swLcSLUeojmoImfF z9q)2zJ|=8e*}0%llVW?2eF#+!;2G0x|tfel}{9AF<1PS_3?(I-4l zBp&J`m*j=kYmsH7JjW2+l# zu3VL!53xH9adQ^ib9XB?D_&-f+RQjn^D+KQhAG*(S_?XWgLmDTvi{*}+wK-&{4gpY zmY3W}Pt7RBA21frx){qVDZBfin(|94H?tNgUokR$zcSHk!+1SD;$ACcu79MZX(zuh zJ$uKAS-Pv9&oQp~k6+9l`ngbW5qNVlsacvF5w{tQWa~2{DUK(T&$Y~*_<*W0)B;&V zlymt&)mbnNm?c|b%&kjV<_5CRCQtn}nLHHy$FJuWgBRlUY+V>^EyLji&Rg?rjVL+Wd$T%jq zAZ<6yqokjhe&%D^3KROTM}Px7wZuzC&LXF=CyBwbDEq%mQ_5`inm?vvfP?QC!2oq` zqFRQoHq%jPkr_gFQkhy;hqOmqa@%Ge_8zx|^cNh`K00pBh*D=5>}oG6j{tQ75X^wb zWy*vXquqwctt9=ym{T?=wAYxJ99JclVT+l9@LWMmw}RTaU*MSM6u*D}03D?qUKr4m zqTUBkZkjCHgUn5#uJ~X5whQ8a8s>=##KQOb9vVkWIP+02u!<14PEMlwh)1d{H7s!z z6lX-MmK+!tF!R8ME;9cyIpPqFU0`Cpat2F~^C#eC`Yoqay$?0NKR-jxx$z9XAG zP)SF_*N3G)J?n2*lUaP4W1v3dc~IJlxNq(KvrqQS9ttaV8x)ULmqA5L2<2sv1F*9U zY8NZI2FBkpGHHtSO!_%CEbay9TH&eV0lePKqx2W>{{VzWmOVeue&u1Jb`bBT0-hox)gGvmh^G^zM7&0keQqn_Jreyz z)VU~ykl0)n;dR>w%p^Kzz8B5I3GS9uTOt#Z2T%rMoK44g9YN|7pG(CPsHASU7NJZx z@hx5aM4QC?9wU#o{KbXniwlUiS;QMRo?>&Ao8nTH-Qj|;USOgp`-f99yqV5!Gb+=A z4sjvk@3?t?QiACCoK`>bHF?wAXdOiDiJQGl@hhL=8m0Yq>t@FLjx4!0|aVu_SntaSMUY;fexPt7+seq2JiAP%?#jbx*V&WY0 z3v`}-VQN{M`-w*!xAz0lzMCOjF$DoSnU zqFPvdkXAQs#<`jC>Z=^T()ovJWPqJEvA*B1wrUNqu>_A%n5&6y0gDcBpl<^nY7FtuNVa2xdewhORZMNdG5ogFo zZMF#WP$j@8G4mP)@R&@_iAwTS5%^I^jCS4#p#_vWEgos5i$`AY28%yXq30h=;AV3} z>gnhZY}F1>?ft@Vz2Pix=T6b=%C-I@LhPW%vZ$90PqG?~^910Asy9pRe!th|YX2k%!e;x7i(07Qi(U0C%&WS% z+juyLy7`QM9K?{hTzhTc>&zJ0Rs=Uki_A64<$<8Dh?Qzzr@dt2VQ=PA87ekn@lRTv zVgwXZ6n89sA(vdt9A<0UQLFqw#@{fl)?jya0C{{utpbiSD52+=Ui@NKDdHV|KunzjRRDlXPPQ37iq3aZYf zGf{od@fLO}U-b<#d@qYSRzn63`ZhFL0rryUq@64O&H!%e-X19D%>3o*tb)`^Hdm}upCRFTmlzt#_LEg zhwMS$Sts%U!4YG1azRX?21%i)VbnPU{`REs1;SYARNB% z>U)x+{>?6lSBU=rIZHsIVHOWP0psSB@_RD9KZtV=#2SWJ+ zzx0;4xW2uAY;VM6by@TUW_&$4v|eR%D>E@E%K&1aUZ8)-2QWB1O~IOJ+3QmH3z{l9fVRX6|L{aVPFTe7(W?@MZrd5B5s_R#PL-yE*OrgAmjMdHJ&H! z;-Rd-d2Us4s2IX$#4_sTUpi%XpEFs*2M-dt(Won!8h&_3IhAfd6MK#^QA|sCd5$96T*`f7B9o9XM;f>&Ok=1yFya~*uA|vmuX)Mb z2Kn}hW=>Wcf7HW=m>aBkjIn4P2j&k7eWieh#7{orrGrrygA-oSRj6UDOZE2!s;_@Y zg0p8)Mx(ol+`O}>*E7NC&fuW_w3Z>O^H){WZfRoG$q6GefPR?BFoBb^h^GG3VR=Rb zNT780u|*gOOLKqV>JPQ)P!<~w;84WI8HS(4Mvyp079*tlOkNMN4W#*uYe)Pi(!4nC zGXCRRGIZyZ&Wh)MBkTVF4L=?F^-6q-puc3;n8PQurL+>G+`&8Ujw3aE;=s|D1$VTFTa z`63P(dhycMt|fP-*0Jfh`j)F|FpM`MxA2cGMhmf-X$Z3=l<|DbS-EUoYF1da#fx(+ zZfkkxiwU>nnI*3B`d%@<$iEZWhjGHYD-VdxH3B6q8{rb4G4^80Bz=040+6fNNMC~kr zIe~eA?p1(u2a;uFr6G8(ruy{Lsh){xq+RNJBjY)!9n~ppG z08-2ErXu3wh~m66+gwD(WjN!Qn==xy`()-eMowixi>8(gmebpxs3O05(F_LZ3cfq6 zLcNmZd5OSd#C59XIBWTjTa;Q2Vgpay7fnEW`jpCBrS^f0-aN|9gHoxw%%g>=ma8)g zvf+DUH3N#M73bay$kPKEHp;DUQ_m8(=QM*+Nn_+_}+_8#@;^I>FhhSOe zQONT)jB@kKmEneyS2k(#O!qHxEVJ*6>+_pIXz+az3>Wtx^r%6|R_-AUY`d&L9^yO9 z!6`A~3O#<5Mu{&en%Zqw^#Vsg8&0NiqLOnwwu=$ky`g3fCWVp*0R;|)e}k#1mbf61M zm-L0M$}idprumk40BDtim1B+i?z|(Y-Ikt}dz^>uAHu8vkRyqSqvJ*4_cTys;pTxtQaP6@VHjcna$}jF zypH{csWd1P0?NV#CIeYB5UW9Pkt9uHOJ@)x0cs1Ty)aKt(V~WJ0n6H5$(8IjQGkm` za|_~wt(9zw{{ViQep4XwfSxEU3z#R(qoam2IC+V2r36Ia-B`>wiFRmfn!;Rpcbl1(p8)H}843@1Bj)}og0lh?Za?Gt^m>iKij#m&V z{$Obn+9iMNp|AH>DL)DFQ5=+*nO$a~yuhod94RyZ0ARVi!25t+Tk3KC)=gZ) z^{Hcm&(zM5-p=AVvKQR!j&oMaqqKNBXDGxoYpw4RkZzPXFU;hWPX*kfHX~5C+-8UJ zg^6AqL@nFNJQ8j2L@XT%?W(;huVANH)mwRuA=Qqp<8(*Y0%c6U;&*G!koYxliX5KVc;PTZW2!!8W~_Xh(72XR{yHQBI%C=P$W9 z9^i)Cfjt%$SR9h6%P~j1F8zqBTUcu^%r%4aKN&H9FI815fDkHk$F4us*P(s`(Bed_?Ty4Ts`UZ#9IB3{B@LdDJ#sQ#IIA@N2+jCMe0|n;h1_?>J!>Tih3Zx<@6i$ zE15*1Arj&fnR%n14VPnh!^Tai7r3FVH`zfudxl~(;?vLWlrX=UWp#Z-Ij9~jgFL4ZaOMQfR2yj^K|c{j z=so3!I@C8uzo>><)U9p#lq)^&FssTN*YyHw);fXwryzc1ss^fXHsQzICVtUMw8wnF zxkW=8*SttA<{xXgOsZ4D*Kx18MpzY>?mb+?FhHqM1Fyr#~01RA^4O~0{daNCn1 z)q6#sCeQ~S;6^LnLQ&Gc4E%iw_>Tssl%%WLbr_oIT?}q#;Kl zc$K?=EELUr#3O@Z6(gflFdSqp?lK!W@Qc_dV@6kDl zaX4aeJQH-ch-o}GEaE8YRSCLvEU|{15Sy7d1H+rSdb-5Pmv<^!9^!1`A?6!8cep3Q z2FSS7fV&;dhmNWR=`UF@L!Cf49sA6e{kWBi&$L3@)J}CVck=+d+&!)XmA9LeaBg@A z*tGV6Ry8UsH7eW?Gmd2|!~@y~vj7VPtiZgIvzhLddHu|@&zbKirm60GMQog1{{ZYt z`-xbIdty^D+TiHPh%ep-v7^SAmHUn`o0bae%vgGhuUg2+Z@Nf ztjVZe@bNE9SHuy!N{Yh#L0wh+OcIPO6(pgI=bB8_ACxo0pWg0raLgyc#s9zh_c zD3p(1;_7}*UmovJt+aqRSExv=(SI$J)A|8>Vo=HoLr;l}l-O7ay|BTq1Dg&>hy%eZu3}9pV*ZSC)bca(Od#9GK*5jUXl>B)+8Wi|PtL&@KHbck z(e^sWM*b&tyQl7c5sds`78^_1h&u@FKg8H5SBu*ckJM8c593wO+(@tDX*r(Ke~kkz z{D}|T3JbdXi48Bh4yWpm@b)XDdokl)(O>OL2~E|1i-2gaKtHLXD9>=A=9Jt<+TAM{ z8(1|pxgScmpnvg$W5qiDA z%0D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 XTdN}e0t*0GsX|4%|Bk)(zlHw;vn+8r diff --git a/htdocs/install/doctemplates/websites/template/medias/image/template/background_rough-horn.jpg b/htdocs/install/doctemplates/websites/template/medias/image/template/background_rough-horn.jpg deleted file mode 100644 index 662ac02f25ffa00be8a761b5a1534905d7c1a0ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 395520 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

',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip"},u={SHOW:"show",OUT:"out"},d={HIDE:"hide"+i,HIDDEN:"hidden"+i,SHOW:"show"+i,SHOWN:"shown"+i,INSERTED:"inserted"+i,CLICK:"click"+i,FOCUSIN:"focusin"+i,FOCUSOUT:"focusout"+i,MOUSEENTER:"mouseenter"+i,MOUSELEAVE:"mouseleave"+i},f={FADE:"fade",SHOW:"show"},_={TOOLTIP:".tooltip",TOOLTIP_INNER:".tooltip-inner",ARROW:".arrow"},g={HOVER:"hover",FOCUS:"focus",CLICK:"click",MANUAL:"manual"},m=function(){function o(t,e){this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var m=o.prototype;return m.enable=function(){this._isEnabled=!0},m.disable=function(){this._isEnabled=!1},m.toggleEnabled=function(){this._isEnabled=!this._isEnabled},m.toggle=function(t){if(this._isEnabled)if(t){var n=this.constructor.DATA_KEY,i=e(t.currentTarget).data(n);i||(i=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(n,i)),i._activeTrigger.click=!i._activeTrigger.click,i._isWithActiveTrigger()?i._enter(null,i):i._leave(null,i)}else{if(e(this.getTipElement()).hasClass(f.SHOW))return void this._leave(null,this);this._enter(null,this)}},m.dispose=function(){clearTimeout(this._timeout),e.removeData(this.element,this.constructor.DATA_KEY),e(this.element).off(this.constructor.EVENT_KEY),e(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&e(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,null!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},m.show=function(){var t=this;if("none"===e(this.element).css("display"))throw new Error("Please use show on visible elements");var i=e.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){e(this.element).trigger(i);var r=e.contains(this.element.ownerDocument.documentElement,this.element);if(i.isDefaultPrevented()||!r)return;var a=this.getTipElement(),l=s.getUID(this.constructor.NAME);a.setAttribute("id",l),this.element.setAttribute("aria-describedby",l),this.setContent(),this.config.animation&&e(a).addClass(f.FADE);var h="function"==typeof this.config.placement?this.config.placement.call(this,a,this.element):this.config.placement,c=this._getAttachment(h);this.addAttachmentClass(c);var d=!1===this.config.container?document.body:e(this.config.container);e(a).data(this.constructor.DATA_KEY,this),e.contains(this.element.ownerDocument.documentElement,this.tip)||e(a).appendTo(d),e(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new n(this.element,a,{placement:c,modifiers:{offset:{offset:this.config.offset},flip:{behavior:this.config.fallbackPlacement},arrow:{element:_.ARROW}},onCreate:function(e){e.originalPlacement!==e.placement&&t._handlePopperPlacementChange(e)},onUpdate:function(e){t._handlePopperPlacementChange(e)}}),e(a).addClass(f.SHOW),"ontouchstart"in document.documentElement&&e("body").children().on("mouseover",null,e.noop);var g=function(){t.config.animation&&t._fixTransition();var n=t._hoverState;t._hoverState=null,e(t.element).trigger(t.constructor.Event.SHOWN),n===u.OUT&&t._leave(null,t)};s.supportsTransitionEnd()&&e(this.tip).hasClass(f.FADE)?e(this.tip).one(s.TRANSITION_END,g).emulateTransitionEnd(o._TRANSITION_DURATION):g()}},m.hide=function(t){var n=this,i=this.getTipElement(),r=e.Event(this.constructor.Event.HIDE),o=function(){n._hoverState!==u.SHOW&&i.parentNode&&i.parentNode.removeChild(i),n._cleanTipClass(),n.element.removeAttribute("aria-describedby"),e(n.element).trigger(n.constructor.Event.HIDDEN),null!==n._popper&&n._popper.destroy(),t&&t()};e(this.element).trigger(r),r.isDefaultPrevented()||(e(i).removeClass(f.SHOW),"ontouchstart"in document.documentElement&&e("body").children().off("mouseover",null,e.noop),this._activeTrigger[g.CLICK]=!1,this._activeTrigger[g.FOCUS]=!1,this._activeTrigger[g.HOVER]=!1,s.supportsTransitionEnd()&&e(this.tip).hasClass(f.FADE)?e(i).one(s.TRANSITION_END,o).emulateTransitionEnd(150):o(),this._hoverState="")},m.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},m.isWithContent=function(){return Boolean(this.getTitle())},m.addAttachmentClass=function(t){e(this.getTipElement()).addClass("bs-tooltip-"+t)},m.getTipElement=function(){return this.tip=this.tip||e(this.config.template)[0],this.tip},m.setContent=function(){var t=e(this.getTipElement());this.setElementContent(t.find(_.TOOLTIP_INNER),this.getTitle()),t.removeClass(f.FADE+" "+f.SHOW)},m.setElementContent=function(t,n){var i=this.config.html;"object"==typeof n&&(n.nodeType||n.jquery)?i?e(n).parent().is(t)||t.empty().append(n):t.text(e(n).text()):t[i?"html":"text"](n)},m.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},m._getAttachment=function(t){return h[t.toUpperCase()]},m._setListeners=function(){var t=this;this.config.trigger.split(" ").forEach(function(n){if("click"===n)e(t.element).on(t.constructor.Event.CLICK,t.config.selector,function(e){return t.toggle(e)});else if(n!==g.MANUAL){var i=n===g.HOVER?t.constructor.Event.MOUSEENTER:t.constructor.Event.FOCUSIN,s=n===g.HOVER?t.constructor.Event.MOUSELEAVE:t.constructor.Event.FOCUSOUT;e(t.element).on(i,t.config.selector,function(e){return t._enter(e)}).on(s,t.config.selector,function(e){return t._leave(e)})}e(t.element).closest(".modal").on("hide.bs.modal",function(){return t.hide()})}),this.config.selector?this.config=e.extend({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},m._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},m._enter=function(t,n){var i=this.constructor.DATA_KEY;(n=n||e(t.currentTarget).data(i))||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(i,n)),t&&(n._activeTrigger["focusin"===t.type?g.FOCUS:g.HOVER]=!0),e(n.getTipElement()).hasClass(f.SHOW)||n._hoverState===u.SHOW?n._hoverState=u.SHOW:(clearTimeout(n._timeout),n._hoverState=u.SHOW,n.config.delay&&n.config.delay.show?n._timeout=setTimeout(function(){n._hoverState===u.SHOW&&n.show()},n.config.delay.show):n.show())},m._leave=function(t,n){var i=this.constructor.DATA_KEY;(n=n||e(t.currentTarget).data(i))||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(i,n)),t&&(n._activeTrigger["focusout"===t.type?g.FOCUS:g.HOVER]=!1),n._isWithActiveTrigger()||(clearTimeout(n._timeout),n._hoverState=u.OUT,n.config.delay&&n.config.delay.hide?n._timeout=setTimeout(function(){n._hoverState===u.OUT&&n.hide()},n.config.delay.hide):n.hide())},m._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},m._getConfig=function(n){return"number"==typeof(n=e.extend({},this.constructor.Default,e(this.element).data(),n)).delay&&(n.delay={show:n.delay,hide:n.delay}),"number"==typeof n.title&&(n.title=n.title.toString()),"number"==typeof n.content&&(n.content=n.content.toString()),s.typeCheckConfig(t,n,this.constructor.DefaultType),n},m._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},m._cleanTipClass=function(){var t=e(this.getTipElement()),n=t.attr("class").match(a);null!==n&&n.length>0&&t.removeClass(n.join(""))},m._handlePopperPlacementChange=function(t){this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},m._fixTransition=function(){var t=this.getTipElement(),n=this.config.animation;null===t.getAttribute("x-placement")&&(e(t).removeClass(f.FADE),this.config.animation=!1,this.hide(),this.show(),this.config.animation=n)},o._jQueryInterface=function(t){return this.each(function(){var n=e(this).data("bs.tooltip"),i="object"==typeof t&&t;if((n||!/dispose|hide/.test(t))&&(n||(n=new o(this,i),e(this).data("bs.tooltip",n)),"string"==typeof t)){if("undefined"==typeof n[t])throw new Error('No method named "'+t+'"');n[t]()}})},r(o,null,[{key:"VERSION",get:function(){return"4.0.0-beta.2"}},{key:"Default",get:function(){return c}},{key:"NAME",get:function(){return t}},{key:"DATA_KEY",get:function(){return"bs.tooltip"}},{key:"Event",get:function(){return d}},{key:"EVENT_KEY",get:function(){return i}},{key:"DefaultType",get:function(){return l}}]),o}();return e.fn[t]=m._jQueryInterface,e.fn[t].Constructor=m,e.fn[t].noConflict=function(){return e.fn[t]=o,m._jQueryInterface},m}(),_=function(){var t="popover",n=".bs.popover",i=e.fn[t],s=new RegExp("(^|\\s)bs-popover\\S+","g"),a=e.extend({},f.Default,{placement:"right",trigger:"click",content:"",template:''}),l=e.extend({},f.DefaultType,{content:"(string|element|function)"}),h={FADE:"fade",SHOW:"show"},c={TITLE:".popover-header",CONTENT:".popover-body"},u={HIDE:"hide"+n,HIDDEN:"hidden"+n,SHOW:"show"+n,SHOWN:"shown"+n,INSERTED:"inserted"+n,CLICK:"click"+n,FOCUSIN:"focusin"+n,FOCUSOUT:"focusout"+n,MOUSEENTER:"mouseenter"+n,MOUSELEAVE:"mouseleave"+n},d=function(i){function d(){return i.apply(this,arguments)||this}o(d,i);var f=d.prototype;return f.isWithContent=function(){return this.getTitle()||this._getContent()},f.addAttachmentClass=function(t){e(this.getTipElement()).addClass("bs-popover-"+t)},f.getTipElement=function(){return this.tip=this.tip||e(this.config.template)[0],this.tip},f.setContent=function(){var t=e(this.getTipElement());this.setElementContent(t.find(c.TITLE),this.getTitle()),this.setElementContent(t.find(c.CONTENT),this._getContent()),t.removeClass(h.FADE+" "+h.SHOW)},f._getContent=function(){return this.element.getAttribute("data-content")||("function"==typeof this.config.content?this.config.content.call(this.element):this.config.content)},f._cleanTipClass=function(){var t=e(this.getTipElement()),n=t.attr("class").match(s);null!==n&&n.length>0&&t.removeClass(n.join(""))},d._jQueryInterface=function(t){return this.each(function(){var n=e(this).data("bs.popover"),i="object"==typeof t?t:null;if((n||!/destroy|hide/.test(t))&&(n||(n=new d(this,i),e(this).data("bs.popover",n)),"string"==typeof t)){if("undefined"==typeof n[t])throw new Error('No method named "'+t+'"');n[t]()}})},r(d,null,[{key:"VERSION",get:function(){return"4.0.0-beta.2"}},{key:"Default",get:function(){return a}},{key:"NAME",get:function(){return t}},{key:"DATA_KEY",get:function(){return"bs.popover"}},{key:"Event",get:function(){return u}},{key:"EVENT_KEY",get:function(){return n}},{key:"DefaultType",get:function(){return l}}]),d}(f);return e.fn[t]=d._jQueryInterface,e.fn[t].Constructor=d,e.fn[t].noConflict=function(){return e.fn[t]=i,d._jQueryInterface},d}(),g=function(){var t="scrollspy",n=e.fn[t],i={offset:10,method:"auto",target:""},o={offset:"number",method:"string",target:"(string|element)"},a={ACTIVATE:"activate.bs.scrollspy",SCROLL:"scroll.bs.scrollspy",LOAD_DATA_API:"load.bs.scrollspy.data-api"},l={DROPDOWN_ITEM:"dropdown-item",DROPDOWN_MENU:"dropdown-menu",ACTIVE:"active"},h={DATA_SPY:'[data-spy="scroll"]',ACTIVE:".active",NAV_LIST_GROUP:".nav, .list-group",NAV_LINKS:".nav-link",NAV_ITEMS:".nav-item",LIST_ITEMS:".list-group-item",DROPDOWN:".dropdown",DROPDOWN_ITEMS:".dropdown-item",DROPDOWN_TOGGLE:".dropdown-toggle"},c={OFFSET:"offset",POSITION:"position"},u=function(){function n(t,n){var i=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(n),this._selector=this._config.target+" "+h.NAV_LINKS+","+this._config.target+" "+h.LIST_ITEMS+","+this._config.target+" "+h.DROPDOWN_ITEMS,this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,e(this._scrollElement).on(a.SCROLL,function(t){return i._process(t)}),this.refresh(),this._process()}var u=n.prototype;return u.refresh=function(){var t=this,n=this._scrollElement!==this._scrollElement.window?c.POSITION:c.OFFSET,i="auto"===this._config.method?n:this._config.method,r=i===c.POSITION?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),e.makeArray(e(this._selector)).map(function(t){var n,o=s.getSelectorFromElement(t);if(o&&(n=e(o)[0]),n){var a=n.getBoundingClientRect();if(a.width||a.height)return[e(n)[i]().top+r,o]}return null}).filter(function(t){return t}).sort(function(t,e){return t[0]-e[0]}).forEach(function(e){t._offsets.push(e[0]),t._targets.push(e[1])})},u.dispose=function(){e.removeData(this._element,"bs.scrollspy"),e(this._scrollElement).off(".bs.scrollspy"),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},u._getConfig=function(n){if("string"!=typeof(n=e.extend({},i,n)).target){var r=e(n.target).attr("id");r||(r=s.getUID(t),e(n.target).attr("id",r)),n.target="#"+r}return s.typeCheckConfig(t,n,o),n},u._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},u._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},u._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},u._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=n){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t0)return this._activeTarget=null,void this._clear();for(var s=this._offsets.length;s--;)this._activeTarget!==this._targets[s]&&t>=this._offsets[s]&&("undefined"==typeof this._offsets[s+1]||t li > .active",DATA_TOGGLE:'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',DROPDOWN_TOGGLE:".dropdown-toggle",DROPDOWN_ACTIVE_CHILD:"> .dropdown-menu .active"},a=function(){function t(t){this._element=t}var a=t.prototype;return a.show=function(){var t=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&e(this._element).hasClass(i.ACTIVE)||e(this._element).hasClass(i.DISABLED))){var r,a,l=e(this._element).closest(o.NAV_LIST_GROUP)[0],h=s.getSelectorFromElement(this._element);if(l){var c="UL"===l.nodeName?o.ACTIVE_UL:o.ACTIVE;a=e.makeArray(e(l).find(c)),a=a[a.length-1]}var u=e.Event(n.HIDE,{relatedTarget:this._element}),d=e.Event(n.SHOW,{relatedTarget:a});if(a&&e(a).trigger(u),e(this._element).trigger(d),!d.isDefaultPrevented()&&!u.isDefaultPrevented()){h&&(r=e(h)[0]),this._activate(this._element,l);var f=function(){var i=e.Event(n.HIDDEN,{relatedTarget:t._element}),s=e.Event(n.SHOWN,{relatedTarget:a});e(a).trigger(i),e(t._element).trigger(s)};r?this._activate(r,r.parentNode,f):f()}}},a.dispose=function(){e.removeData(this._element,"bs.tab"),this._element=null},a._activate=function(t,n,r){var a,l=this,h=(a="UL"===n.nodeName?e(n).find(o.ACTIVE_UL):e(n).children(o.ACTIVE))[0],c=r&&s.supportsTransitionEnd()&&h&&e(h).hasClass(i.FADE),u=function(){return l._transitionComplete(t,h,c,r)};h&&c?e(h).one(s.TRANSITION_END,u).emulateTransitionEnd(150):u(),h&&e(h).removeClass(i.SHOW)},a._transitionComplete=function(t,n,r,a){if(n){e(n).removeClass(i.ACTIVE);var l=e(n.parentNode).find(o.DROPDOWN_ACTIVE_CHILD)[0];l&&e(l).removeClass(i.ACTIVE),"tab"===n.getAttribute("role")&&n.setAttribute("aria-selected",!1)}if(e(t).addClass(i.ACTIVE),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),r?(s.reflow(t),e(t).addClass(i.SHOW)):e(t).removeClass(i.FADE),t.parentNode&&e(t.parentNode).hasClass(i.DROPDOWN_MENU)){var h=e(t).closest(o.DROPDOWN)[0];h&&e(h).find(o.DROPDOWN_TOGGLE).addClass(i.ACTIVE),t.setAttribute("aria-expanded",!0)}a&&a()},t._jQueryInterface=function(n){return this.each(function(){var i=e(this),s=i.data("bs.tab");if(s||(s=new t(this),i.data("bs.tab",s)),"string"==typeof n){if("undefined"==typeof s[n])throw new Error('No method named "'+n+'"');s[n]()}})},r(t,null,[{key:"VERSION",get:function(){return"4.0.0-beta.2"}}]),t}();return e(document).on(n.CLICK_DATA_API,o.DATA_TOGGLE,function(t){t.preventDefault(),a._jQueryInterface.call(e(this),"show")}),e.fn.tab=a._jQueryInterface,e.fn.tab.Constructor=a,e.fn.tab.noConflict=function(){return e.fn.tab=t,a._jQueryInterface},a}();return function(){if("undefined"==typeof e)throw new Error("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var t=e.fn.jquery.split(" ")[0].split(".");if(t[0]<2&&t[1]<9||1===t[0]&&9===t[1]&&t[2]<1||t[0]>=4)throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}(),t.Util=s,t.Alert=a,t.Button=l,t.Carousel=h,t.Collapse=c,t.Dropdown=u,t.Modal=d,t.Popover=_,t.Scrollspy=g,t.Tab=m,t.Tooltip=f,t}({},$,Popper); - - -/** - * @module Regula - * @description An annotation-based form-validation framework in Javascript - * @license BSD - * @version 1.3.4 - * @copyright Robert Nyman, http://www.robertnyman.com - */ -(function(e,t){typeof define=="function"&&define.amd?define("utils/MapUtils",t):(typeof e.regulaModules=="undefined"&&(e.regulaModules={}),e.regulaModules.MapUtils=t())})(this,function(){return{iterateOverMap:function(e,t){var n=0;for(var r in e)e.hasOwnProperty(r)&&r!=="__size__"&&(t.call(e,r,e[r],n),n++)},exists:function(e,t){var n=!1,r=0;while(!n&&r0&&(typeof r=="undefined"||o&&o.test(a))&&s.push(u);return s}function n(e,t){var n=e.getAttribute&&e.getAttribute(t)||null;if(!n){var r=e.attributes;for(var i=0;i0)for(var s in e)e.hasOwnProperty(s)&&s!="__size__"&&t.put(i,s,e[s]);return i}function f(e,t,n,i){var s=o[y.constraintType],a=W(t,s,i),f={group:n,constraintName:e.constraintName,custom:u[s].custom,compound:u[s].compound,async:u[s].async,constraintParameters:y.params,failingElements:e.failingElements,message:a};return r.reportAsSingleViolation||(f.composingConstraintViolations=e.composingConstraintViolations||[]),f}var l=[],c=[];for(var h=0;h0){v=[];for(var h=0;h0){v===null&&(v=[]);var T=0;for(var h=0;h0)throw new r.Exception.IllegalArgumentException("No constraints have been bound to the specified elements: "+i.explode(p)+". "+r.explodeParameters(e));return n=M(n),D(n,e)}function N(e){var t=[],n={asyncContexts:[],syncContexts:[]};for(var s in a)if(a.hasOwnProperty(s)){var o=a[s];for(var u=0;u0)throw new r.Exception.IllegalArgumentException("No constraints have been bound to the specified elements: "+i.explode(t)+". "+r.explodeParameters(e));return n=M(n),D(n,e)}function C(e){var t=!1,n={groupedContexts:{}},i=0;while(i0)throw new r.Exception.IllegalArgumentException("The following elements: "+i.explode(n)+" were not found in one or more of the following group(s): ["+i.explode(t,",").replace(/,/g,", ")+"]. "+r.explodeParameters(e));var m=_(o);return e.groups=m.groups,o=m.uniqueConstraintsToValidate,P(e,o,s)}function A(e){var t=!1,n={groupedContexts:{}},r=0;while(r0&&(n=B(e));if(e.asyncContexts.length>0){if(!t.callback)throw new r.Exception.IllegalArgumentException("One or more constraints to be validated are asynchronous, but a callback has not been provided.");j(e,function(e){n.length>0?n=n.concat(e):n=e,t.callback(n)})}else t.callback&&t.callback(n);return n}function P(e,t,n){var i=F(e.groups,e.independent,t);if(n){if(!e.callback)throw new r.Exception.IllegalArgumentException("One or more constraints to be validated are asynchronous, but a callback has not been provided.");if(!e.independent&&i.length>0){var s=i[0].group,o=t.groupedContexts[s];t.groupedContexts={},t.groupedContexts[s]=o}I(e.groups,e.independent,t,function(t){i.length>0?i=i.concat(t):i=t,e.callback(i)})}else e.callback&&e.callback(i);return i}function H(e,t,n){var i=a[e];if(!i)throw new r.Exception.IllegalArgumentException("Undefined group in group list (group: "+e+", elementId: "+t+", constraint: "+n+")");var s=i[t];if(!s)throw new r.Exception.IllegalArgumentException("No constraints have been defined for the element with id: "+t+" in group "+e);var o=s[n];if(!o)throw new r.Exception.IllegalArgumentException("Constraint "+n+" in group "+e+" hasn't been bound to the element with id "+t);return{group:e,elementId:t,elementConstraint:n,params:o,async:u[n].async}}function B(e){var t=[],n=0;while(n0},max:function(e){var t=!0;return g(this,e)&&(t=parseFloat(this.value)<=parseFloat(e.value)),t},min:function(e){var t=!0;return g(this,e)&&(t=parseFloat(this.value)>=parseFloat(e.value)),t},range:function(e){var t=!0;return g(this,e)&&(t=this.value.replace(/\s/g,"")!=""&&parseFloat(this.value)<=parseFloat(e.max)&&parseFloat(this.value)>=parseFloat(e.min)),t},notBlank:function(e){return this.value.replace(/\s/g,"")!=""},blank:function(e){return this.value.replace(/\s/g,"")===""},matches:function(e){var t=!0;if(g(this,e)){var n,r;typeof e["regex"]=="string"?r=e.regex.replace(/^\//,"").replace(/\/$/,""):r=e.regex,typeof e["flags"]!="undefined"?n=new RegExp(r.toString().replace(/^\//,"").replace(/\/[^\/]*$/,""),e.flags):n=new RegExp(r),t=n.test(this.value)}return t},email:function(e){var t=!0;return g(this,e)&&(t=/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i.test(this.value)),t},alpha:function(e){var t=!0;return g(this,e)&&(t=/^[A-Za-z]+$/.test(this.value)),t},numeric:function(e){var t=!0;return g(this,e)&&(t=/^[0-9]+$/.test(this.value)),t},integer:function(e){var t=!0;return g(this,e)&&(t=/^-?[0-9]+$/.test(this.value)),t},real:function(e){var t=!0;return g(this,e)&&(t=/^-?([0-9]+(\.[0-9]+)?|\.[0-9]+)$/.test(this.value)),t},alphaNumeric:function(e){var t=!0;return g(this,e)&&(t=/^[0-9A-Za-z]+$/.test(this.value)),t},completelyFilled:function(e){var t=[];for(var n=0;n=e.min&&this.value.length<=e.max),t},digits:function(e){var t=!0;if(g(this,e)){var n=this.value.replace(/\s/g,""),r=n.split(/\./);t=!1,n.length>0&&(r.length==1&&(r[1]=""),e.integer>0?t=r[0].length<=e.integer:t=!0,e.fraction>0&&(t=t&&r[1].length<=e.fraction))}return t},past:function(e){var t=!0;if(g(this,e)){var n=y.call(this,e);t=n.dateToValidaten.dateToTestAgainst}return t},url:function(e){var t=!0;return g(this,e)&&(t=/^([a-z]([a-z]|\d|\+|-|\.)*):(\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?((\[(|(v[\da-f]{1,}\.(([a-z]|\d|-|\.|_|~)|[!\$&'\(\)\*\+,;=]|:)+))\])|((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=])*)(:\d*)?)(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*|(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)){0})(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(this.value)),t},step:function(e){var t=!0;if(g(this,e)){var n=parseFloat(this.value),r=parseFloat(e.max),i=parseFloat(e.min),s=parseFloat(e.value);t=n<=r&&n>=i&&n%s===0}return t},html5Required:function(e){return!this.validity.valueMissing},html5Email:w,html5URL:w,html5Number:w,html5DateTime:w,html5DateTimeLocal:w,html5Date:w,html5Month:w,html5Time:w,html5Week:w,html5Range:w,html5Tel:w,html5Color:w,html5Pattern:function(e){return!this.validity.patternMismatch},html5MaxLength:function(e){return!this.validity.tooLong},html5Min:function(e){return!this.validity.rowUnderflow},html5Max:function(e){return!this.validity.rowOverflow},html5Step:function(e){return!this.validity.stepMismatch}};return{Validator:d,init:p,wrapValidatorWithEmptyCheck:b,initializePublicValidators:h,compoundValidator:m,validate:E,runValidatorFor:U,interpolateConstraintDefaultMessage:W,createPublicValidator:v}}),function(e,t){typeof define=="function"&&define.amd?define("domain/CompositionGraph",t):(typeof e.regulaModules=="undefined"&&(e.regulaModules={}),e.regulaModules.CompositionGraph=t())}(this,function(){function n(n){var r=n.type,i=n.name,s=n.parent,o=typeof e[r]=="undefined"?{visited:!1,name:i,type:r,parents:[],children:[]}:e[r];s==null?t.children.push(o):(s.children.push(o),o.parents.push(s)),e[r]=o}function r(){var e={},n=function r(t,n){var i=typeof e[t.type]=="undefined"?{visited:t.visited,name:t.name,type:t.type,parents:[],children:[]}:e[t.type];n!==null&&i.parents.push(n);for(var s=0;s0&&(s={error:!0,message:n.generateExceptionMessage(e,o[t.constraintType],"You seem to have provided some optional or required parameters for @"+o[t.constraintType]+", but you are still missing the following "+u.length+" required parameter(s): "+i.explode(u,", ")),data:null}),s}function d(e,n){var r=t.getNodeByType(s[e]);r==null&&(t.addNode({type:s[e],name:e,parent:null}),r=t.getNodeByType(s[e]));for(var i=0;i0&&t.successful)t=c(e),n.push(t.data);return t.data=n,t}function c(e){var n={successful:!0,message:"",data:null},i=e.shift();return r(i).length==0&&(i=e.shift()),i=="@"?n=h(e):n={successful:!1,message:t.generateExceptionMessage(o,a,"Invalid constraint. Constraint definitions need to start with '@'")+" "+n.message,data:null},n}function h(e){var r={Between:"Range",Matches:"Pattern",Empty:"Blank",NotEmpty:"NotBlank",IsAlpha:"Alpha",IsNumeric:"Integer",IsAlphaNumeric:"AlphaNumeric"},i=p(e);if(i.successful){a=i.data,a=r[a]?r[a]:a;if(n.constraintDefinitions[a]){i=m(e);if(i.successful){i=n.verifyConstraintDefinition(o,a,i.data);if(i.successful){var s=i.data;i.data={element:o,constraintName:a,definedParameters:s}}}}else i={successful:!1,message:t.generateExceptionMessage(o,a,"I cannot find the specified constraint name. If this is a custom constraint, you need to define it before you bind to it")+" "+i.message,data:null}}else i={successful:!1,message:t.generateExceptionMessage(o,a,"Invalid constraint name in constraint definition")+" "+i.message,data:null};return i}function p(e){var n=r(e.shift()),i=d(n.charAt(0));if(i.successful){var s=1;while(s0&&i(n)==","&&s.successful)n.shift(),s=g(n),s.successful&&(e.put(u,s.data.name,s.data.value),r(i(n)).length==0&&n.shift());if(s.successful){var f=n.shift();r(f).length==0&&(f=n.shift()),f!=")"?s={successful:!1,message:t.generateExceptionMessage(o,a,"Cannot find matching closing ) in parameter list")+" "+s.message,data:null}:s.data=u}}else s={successful:!1,message:t.generateExceptionMessage(o,a,"Invalid parameter definition")+" "+s.message,data:null}}}else i(n)!==undefined&&i(n)!="@"&&(s={successful:!1,message:t.generateExceptionMessage(o,a,"Unexpected character '"+i(n)+"'"+" after constraint definition")+" "+s.message,data:null});return s}function g(e){var n=y(e);if(n.successful){var r=n.data,i=e.shift();i=="="?(n=b(e),n.successful?n.data={name:r,value:n.data}:n={successful:!1,message:t.generateExceptionMessage(o,a,"Invalid parameter value")+" "+n.message,data:null}):(e.unshift(i),n={successful:!1,message:t.generateExceptionMessage(o,a,"'=' expected after parameter name "+n.message),data:null})}else n={successful:!1,message:t.generateExceptionMessage(o,a,"Invalid parameter name. You might have unmatched parentheses")+" "+n.message,data:null};return n}function y(e){var n=r(e.shift());n.length==0&&(n=e.shift());var i={successful:!1,message:t.generateExceptionMessage(o,a,"Invalid starting character for parameter name. Can only include A-Z, a-z, and _"),data:null};if(typeof n!="undefined"){i=d(n.charAt(0));if(i.successful){var s=1;while(s0&&s.successful&&!u)i(e)=='"'?(u=!0,e.shift()):(s=k(e),r+=s.data);u||(s={successful:!1,message:t.generateExceptionMessage(o,a,"Unterminated string literal"),data:null})}else e.unshift(n),s={successful:!1,message:t.generateExceptionMessage(o,a,"Invalid quoted string"),data:null};return s.successful=s.successful&&u,s.data=r,s}function k(e){var t="",n=e.shift();return n=="\\"&&(t=e.shift()),{successful:!0,message:"",data:n+t}}function L(e){var n="",r=e.shift(),s={successful:!0,message:"",data:null};if(r=="/"){n=r;var u=!1;while(e.length>0&&s.successful&&!u)i(e)=="/"?(n+=e.shift(),u=!0):(s=k(e),n+=s.data);u||(s={successful:!1,message:t.generateExceptionMessage(o,a,"Unterminated regex literal"),data:null})}else e.unshift(r),s={successful:!1,message:t.generateExceptionMessage(o,a,"Not a regular expression"),data:null};return s.successful=s.successful&&u,s.data=n,s}function A(e){var n=e.shift(),i={successful:!0,message:"",data:null};return r(n)=="true"||r(n)=="false"?i={successful:!0,message:"",data:n==="true"}:(e.unshift(n),i={successful:!1,message:t.generateExceptionMessage(o,a,"Not a boolean"),data:null}),i}function O(e){var n=[],s=e.shift(),u={successful:!0,message:"",data:null};if(s=="["){r(i(e)).length==0&&e.shift(),i(e)=="]"?u={successful:!0,message:"",data:""}:u=M(e);if(u.successful){n.push(u.data),r(i(e)).length==0&&e.shift();while(e.length>0&&i(e)==","&&u.successful)e.shift(),u=M(e),n.push(u.data),r(i(e)).length==0&&e.shift();u.data=n,s=e.shift(),r(s).length==0&&e.shift(),s!="]"&&(u={successful:!1,message:t.generateExceptionMessage(o,a,"Cannot find matching closing ] in group definition")+" "+u.message,data:null})}else u={successful:!1,message:t.generateExceptionMessage(o,a,"Invalid group definition")+" "+u.message,data:null}}else e.unshift(s),u={successful:!1,message:t.generateExceptionMessage(o,a,"Not a valid group definition"),data:null};return u}function M(e){var n={successful:!0,message:"",data:""},i=r(e.shift());i.length==0&&(i=e.shift()),n=d(i.charAt(0));if(n.successful){var s=1;while(s0){var o=0;while(o0?h=t.deletedGroupIndices.pop():h=t.firstCustomGroupIndex++,t.Group[c]=h,t.ReverseGroup[h]=c,o[c]={}}o[c][n.id]||(o[c][n.id]={}),o[c][n.id][r]=u}if(i.constraintDefinitions[r].html5)if(n.getAttribute("type")!==null&&i.constraintDefinitions[r].inputType!==null&&n.getAttribute("type")!==i.constraintDefinitions[r].inputType)a={successful:!1,message:s.generateExceptionMessage(n,r,"Element type of "+n.getAttribute("type")+" conflicts with type of constraint @"+r+": "+i.constraintDefinitions[r].inputType),data:null};else{var p=i.constraintDefinitions[r].attribute,d=i.constraintDefinitions[r].inputType;(p!==null&&n.getAttribute(p)===null||d!==null&&n.getAttribute("type")===null)&&y(n,r,u)}return a}function y(e,t,n){if(t===i.ReverseConstraint[i.Constraint.HTML5Required])e.setAttribute("required","true");else{var r=i.constraintDefinitions[t];for(var s=0;s0&&!t)throw new s.Exception.IllegalArgumentException("Element with id "+r+" does not have any constraints bound to it. "+s.explodeParameters(e))}function w(e){var n=e.elementId,r=e.group,s=e.constraint,u=typeof o[t.ReverseGroup[t.Group.Default]][n]!="undefined";if(u&&typeof r!="undefined"&&typeof s=="undefined"){var a=t.ReverseGroup[r];u=typeof a!="undefined"&&typeof o[a][n]!="undefined"}else if(u&&typeof r=="undefined"&&typeof s!="undefined"){var f=i.ReverseConstraint[s];u=typeof f!="undefined"&&typeof o[t.ReverseGroup[t.Group.Default]][n][f]!="undefined"}else if(u&&typeof r!="undefined"&&typeof s!="undefined"){var a=t.ReverseGroup[r],f=i.ReverseConstraint[s];u=typeof a!="undefined"&&typeof f!="undefined"&&typeof o[a][n]!="undefined"&&typeof o[a][n][f]!="undefined"}return u}var o=null,u={};return{initializeBoundConstraints:a,resetBoundConstraints:f,getBoundConstraints:l,removeElementAndGroupFromBoundConstraintsIfEmpty:c,bindAfterParsing:p,bindHTML5ValidationConstraints:d,bindFromOptions:v,unbind:b,isBound:w}}),function(e,t){typeof define=="function"&&define.amd?define("regula",["utils/MapUtils","utils/DOMUtils","service/BindingService","service/ExceptionService","service/ConstraintService","service/ValidationService","service/GroupService"],t):(e.regula=t(e.regulaModules.MapUtils,e.regulaModules.DOMUtils,e.regulaModules.BindingService,e.regulaModules.ExceptionService,e.regulaModules.ConstraintService,e.regulaModules.ValidationService,e.regulaModules.GroupService),e.regula._modules=e.regulaModules,e.regulaModules=undefined)}(this,function(e,t,n,r,i,s,o){function f(t){e.iterateOverMap(t,function(e,t,n){typeof u[e]!="undefined"&&(u[e]=t)})}function l(e){var i={successful:!0,message:"",data:null};if(typeof e=="undefined"||!e)n.resetBoundConstraints(),u.enableHTML5Validation&&t.supportsHTML5Validation()&&(i=n.bindHTML5ValidationConstraints({element:null})),i.successful&&(i=n.bindAfterParsing({element:null}));else{var s=e.elements;if(typeof s=="undefined"||!s)u.enableHTML5Validation&&t.supportsHTML5Validation()&&typeof e.element!="undefined"&&e.element!==null&&(i=n.bindHTML5ValidationConstraints({element:e.element})),i.successful&&(i=n.bindFromOptions(e));else{var o=0;while(i.successful&&o0&&n.extend(!0,t,{elements:this.get()})),regula.bind(t),this},unbind:function(t){return this instanceof e&&(t||(t={}),this.get().length>0&&n.extend(!0,t,{elements:this.get()})),regula.unbind(t),this},isBound:function(t){return this instanceof e&&(t||(t={}),this.get().length>0&&n.extend(!0,t,{element:this.get(0)})),regula.isBound(t),this},validate:function(t){return this instanceof e&&(t||(t={}),this.get().length>0&&n.extend(!0,t,{elements:this.get()})),regula.validate(t)},custom:function(e){return regula.custom(e),this},compound:function(e){return regula.compound(e),this},override:function(e){return regula.override(e),this}};i.on=i.bind,i.off=i.unbind,n.fn.regula=t,n.regula=t}); - - -/** - * @module jQuery Count To - * @author Matt Huggins - * @see https://github.com/mhuggins/jquery-countTo - * @license MIT - */ -!function(t){function e(t,e){return t.toFixed(e.decimals)}var o=function(e,i){this.$element=t(e),this.options=t.extend({},o.DEFAULTS,this.dataOptions(),i),this.init()};o.DEFAULTS={from:0,to:0,speed:1e3,refreshInterval:100,decimals:0,formatter:e,onUpdate:null,onComplete:null},o.prototype.init=function(){this.value=this.options.from,this.loops=Math.ceil(this.options.speed/this.options.refreshInterval),this.loopCount=0,this.increment=(this.options.to-this.options.from)/this.loops},o.prototype.dataOptions=function(){var t={from:this.$element.data("from"),to:this.$element.data("to"),speed:this.$element.data("speed"),refreshInterval:this.$element.data("refresh-interval"),decimals:this.$element.data("decimals")},e=Object.keys(t);for(var o in e){var i=e[o];"undefined"==typeof t[i]&&delete t[i]}return t},o.prototype.update=function(){this.value+=this.increment,this.loopCount++,this.render(),"function"==typeof this.options.onUpdate&&this.options.onUpdate.call(this.$element,this.value),this.loopCount>=this.loops&&(clearInterval(this.interval),this.value=this.options.to,"function"==typeof this.options.onComplete&&this.options.onComplete.call(this.$element,this.value))},o.prototype.render=function(){var t=this.options.formatter.call(this.$element,this.value,this.options);this.$element.text(t)},o.prototype.restart=function(){this.stop(),this.init(),this.start()},o.prototype.start=function(){this.stop(),this.render(),this.interval=setInterval(this.update.bind(this),this.options.refreshInterval)},o.prototype.stop=function(){this.interval&&clearInterval(this.interval)},o.prototype.toggle=function(){this.interval?this.stop():this.start()},t.fn.countTo=function(e){return this.each(function(){var i=t(this),n=i.data("countTo"),s=!n||"object"==typeof e,r="object"==typeof e?e:{},a="string"==typeof e?e:"start";s&&(n&&n.stop(),i.data("countTo",n=new o(this,r))),n[a].call(n)})}}(jQuery); - - -/** - * @module Swiper - * @description Most modern mobile touch slider and framework with hardware accelerated transitions - * @author Vladimir Kharlampidi - * @see http://www.idangero.us/swiper/ - * @licesne MIT - * @version 3.4.2 - */ -!function(){"use strict";var e,a=function(t,s){function r(e){return Math.floor(e)}function i(){var e=y.params.autoplay,a=y.slides.eq(y.activeIndex);a.attr("data-swiper-autoplay")&&(e=a.attr("data-swiper-autoplay")||y.params.autoplay),y.autoplayTimeoutId=setTimeout(function(){y.params.loop?(y.fixLoop(),y._slideNext(),y.emit("onAutoplay",y)):y.isEnd?s.autoplayStopOnLast?y.stopAutoplay():(y._slideTo(0),y.emit("onAutoplay",y)):(y._slideNext(),y.emit("onAutoplay",y))},e)}function n(a,t){var s=e(a.target);if(!s.is(t))if("string"==typeof t)s=s.parents(t);else if(t.nodeType){var r;return s.parents().each(function(e,a){a===t&&(r=t)}),r?t:void 0}if(0!==s.length)return s[0]}function o(e,a){a=a||{};var t=new(window.MutationObserver||window.WebkitMutationObserver)(function(e){e.forEach(function(e){y.onResize(!0),y.emit("onObserverUpdate",y,e)})});t.observe(e,{attributes:void 0===a.attributes||a.attributes,childList:void 0===a.childList||a.childList,characterData:void 0===a.characterData||a.characterData}),y.observers.push(t)}function l(e){e.originalEvent&&(e=e.originalEvent);var a=e.keyCode||e.charCode;if(!y.params.allowSwipeToNext&&(y.isHorizontal()&&39===a||!y.isHorizontal()&&40===a))return!1;if(!y.params.allowSwipeToPrev&&(y.isHorizontal()&&37===a||!y.isHorizontal()&&38===a))return!1;if(!(e.shiftKey||e.altKey||e.ctrlKey||e.metaKey||document.activeElement&&document.activeElement.nodeName&&("input"===document.activeElement.nodeName.toLowerCase()||"textarea"===document.activeElement.nodeName.toLowerCase()))){if(37===a||39===a||38===a||40===a){var t=!1;if(y.container.parents("."+y.params.slideClass).length>0&&0===y.container.parents("."+y.params.slideActiveClass).length)return;var s={left:window.pageXOffset,top:window.pageYOffset},r=window.innerWidth,i=window.innerHeight,n=y.container.offset();y.rtl&&(n.left=n.left-y.container[0].scrollLeft);for(var o=[[n.left,n.top],[n.left+y.width,n.top],[n.left,n.top+y.height],[n.left+y.width,n.top+y.height]],l=0;l=s.left&&p[0]<=s.left+r&&p[1]>=s.top&&p[1]<=s.top+i&&(t=!0)}if(!t)return}y.isHorizontal()?(37!==a&&39!==a||(e.preventDefault?e.preventDefault():e.returnValue=!1),(39===a&&!y.rtl||37===a&&y.rtl)&&y.slideNext(),(37===a&&!y.rtl||39===a&&y.rtl)&&y.slidePrev()):(38!==a&&40!==a||(e.preventDefault?e.preventDefault():e.returnValue=!1),40===a&&y.slideNext(),38===a&&y.slidePrev()),y.emit("onKeyPress",y,a)}}function p(e){var a=0,t=0,s=0,r=0;return"detail"in e&&(t=e.detail),"wheelDelta"in e&&(t=-e.wheelDelta/120),"wheelDeltaY"in e&&(t=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(a=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(a=t,t=0),s=10*a,r=10*t,"deltaY"in e&&(r=e.deltaY),"deltaX"in e&&(s=e.deltaX),(s||r)&&e.deltaMode&&(1===e.deltaMode?(s*=40,r*=40):(s*=800,r*=800)),s&&!a&&(a=s<1?-1:1),r&&!t&&(t=r<1?-1:1),{spinX:a,spinY:t,pixelX:s,pixelY:r}}function d(e){e.originalEvent&&(e=e.originalEvent);var a=0,t=y.rtl?-1:1,s=p(e);if(y.params.mousewheelForceToAxis)if(y.isHorizontal()){if(!(Math.abs(s.pixelX)>Math.abs(s.pixelY)))return;a=s.pixelX*t}else{if(!(Math.abs(s.pixelY)>Math.abs(s.pixelX)))return;a=s.pixelY}else a=Math.abs(s.pixelX)>Math.abs(s.pixelY)?-s.pixelX*t:-s.pixelY;if(0!==a){if(y.params.mousewheelInvert&&(a=-a),y.params.freeMode){var r=y.getWrapperTranslate()+a*y.params.mousewheelSensitivity,i=y.isBeginning,n=y.isEnd;if(r>=y.minTranslate()&&(r=y.minTranslate()),r<=y.maxTranslate()&&(r=y.maxTranslate()),y.setWrapperTransition(0),y.setWrapperTranslate(r),y.updateProgress(),y.updateActiveIndex(),(!i&&y.isBeginning||!n&&y.isEnd)&&y.updateClasses(),y.params.freeModeSticky?(clearTimeout(y.mousewheel.timeout),y.mousewheel.timeout=setTimeout(function(){y.slideReset()},300)):y.params.lazyLoading&&y.lazy&&y.lazy.load(),y.emit("onScroll",y,e),y.params.autoplay&&y.params.autoplayDisableOnInteraction&&y.stopAutoplay(),0===r||r===y.maxTranslate())return}else{if((new window.Date).getTime()-y.mousewheel.lastScrollTime>60)if(a<0)if(y.isEnd&&!y.params.loop||y.animating){if(y.params.mousewheelReleaseOnEdges)return!0}else y.slideNext(),y.emit("onScroll",y,e);else if(y.isBeginning&&!y.params.loop||y.animating){if(y.params.mousewheelReleaseOnEdges)return!0}else y.slidePrev(),y.emit("onScroll",y,e);y.mousewheel.lastScrollTime=(new window.Date).getTime()}return e.preventDefault?e.preventDefault():e.returnValue=!1,!1}}function m(a,t){a=e(a);var s,r,i,n=y.rtl?-1:1;s=a.attr("data-swiper-parallax")||"0",r=a.attr("data-swiper-parallax-x"),i=a.attr("data-swiper-parallax-y"),r||i?(r=r||"0",i=i||"0"):y.isHorizontal()?(r=s,i="0"):(i=s,r="0"),r=r.indexOf("%")>=0?parseInt(r,10)*t*n+"%":r*t*n+"px",i=i.indexOf("%")>=0?parseInt(i,10)*t+"%":i*t+"px",a.transform("translate3d("+r+", "+i+",0px)")}function u(e){return 0!==e.indexOf("on")&&(e=e[0]!==e[0].toUpperCase()?"on"+e[0].toUpperCase()+e.substring(1):"on"+e),e}if(!(this instanceof a))return new a(t,s);var c={direction:"horizontal",touchEventsTarget:"container",initialSlide:0,speed:300,autoplay:!1,autoplayDisableOnInteraction:!0,autoplayStopOnLast:!1,iOSEdgeSwipeDetection:!1,iOSEdgeSwipeThreshold:20,freeMode:!1,freeModeMomentum:!0,freeModeMomentumRatio:1,freeModeMomentumBounce:!0,freeModeMomentumBounceRatio:1,freeModeMomentumVelocityRatio:1,freeModeSticky:!1,freeModeMinimumVelocity:.02,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",coverflow:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:!0},flip:{slideShadows:!0,limitRotation:!0},cube:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94},fade:{crossFade:!1},parallax:!1,zoom:!1,zoomMax:3,zoomMin:1,zoomToggle:!0,scrollbar:null,scrollbarHide:!0,scrollbarDraggable:!1,scrollbarSnapOnRelease:!1,keyboardControl:!1,mousewheelControl:!1,mousewheelReleaseOnEdges:!1,mousewheelInvert:!1,mousewheelForceToAxis:!1,mousewheelSensitivity:1,mousewheelEventsTarged:"container",hashnav:!1,hashnavWatchState:!1,history:!1,replaceState:!1,breakpoints:void 0,spaceBetween:0,slidesPerView:1,slidesPerColumn:1,slidesPerColumnFill:"column",slidesPerGroup:1,centeredSlides:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,onlyExternal:!1,threshold:0,touchMoveStopPropagation:!0,touchReleaseOnEdges:!1,uniqueNavElements:!0,pagination:null,paginationElement:"span",paginationClickable:!1,paginationHide:!1,paginationBulletRender:null,paginationProgressRender:null,paginationFractionRender:null,paginationCustomRender:null,paginationType:"bullets",resistance:!0,resistanceRatio:.85,nextButton:null,prevButton:null,watchSlidesProgress:!1,watchSlidesVisibility:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,lazyLoading:!1,lazyLoadingInPrevNext:!1,lazyLoadingInPrevNextAmount:1,lazyLoadingOnTransitionStart:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,control:void 0,controlInverse:!1,controlBy:"slide",normalizeSlideIndex:!0,allowSwipeToPrev:!0,allowSwipeToNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",passiveListeners:!0,containerModifierClass:"swiper-container-",slideClass:"swiper-slide",slideActiveClass:"swiper-slide-active",slideDuplicateActiveClass:"swiper-slide-duplicate-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",slideNextClass:"swiper-slide-next",slideDuplicateNextClass:"swiper-slide-duplicate-next",slidePrevClass:"swiper-slide-prev",slideDuplicatePrevClass:"swiper-slide-duplicate-prev",wrapperClass:"swiper-wrapper",bulletClass:"swiper-pagination-bullet",bulletActiveClass:"swiper-pagination-bullet-active",buttonDisabledClass:"swiper-button-disabled",paginationCurrentClass:"swiper-pagination-current",paginationTotalClass:"swiper-pagination-total",paginationHiddenClass:"swiper-pagination-hidden",paginationProgressbarClass:"swiper-pagination-progressbar",paginationClickableClass:"swiper-pagination-clickable",paginationModifierClass:"swiper-pagination-",lazyLoadingClass:"swiper-lazy",lazyStatusLoadingClass:"swiper-lazy-loading",lazyStatusLoadedClass:"swiper-lazy-loaded",lazyPreloaderClass:"swiper-lazy-preloader",notificationClass:"swiper-notification",preloaderClass:"preloader",zoomContainerClass:"swiper-zoom-container",observer:!1,observeParents:!1,a11y:!1,prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide",paginationBulletMessage:"Go to slide {{index}}",runCallbacksOnInit:!0},g=s&&s.virtualTranslate;s=s||{};var h={};for(var v in s)if("object"!=typeof s[v]||null===s[v]||s[v].nodeType||s[v]===window||s[v]===document||"undefined"!=typeof Dom7&&s[v]instanceof Dom7||"undefined"!=typeof jQuery&&s[v]instanceof jQuery)h[v]=s[v];else{h[v]={};for(var f in s[v])h[v][f]=s[v][f]}for(var w in c)if(void 0===s[w])s[w]=c[w];else if("object"==typeof s[w])for(var x in c[w])void 0===s[w][x]&&(s[w][x]=c[w][x]);var y=this;if(y.params=s,y.originalParams=h,y.classNames=[],void 0!==e&&"undefined"!=typeof Dom7&&(e=Dom7),(void 0!==e||(e="undefined"==typeof Dom7?window.Dom7||window.Zepto||window.jQuery:Dom7))&&(y.$=e,y.currentBreakpoint=void 0,y.getActiveBreakpoint=function(){if(!y.params.breakpoints)return!1;var e,a=!1,t=[];for(e in y.params.breakpoints)y.params.breakpoints.hasOwnProperty(e)&&t.push(e);t.sort(function(e,a){return parseInt(e,10)>parseInt(a,10)});for(var s=0;s=window.innerWidth&&!a&&(a=e);return a||"max"},y.setBreakpoint=function(){var e=y.getActiveBreakpoint();if(e&&y.currentBreakpoint!==e){var a=e in y.params.breakpoints?y.params.breakpoints[e]:y.originalParams,t=y.params.loop&&a.slidesPerView!==y.params.slidesPerView;for(var s in a)y.params[s]=a[s];y.currentBreakpoint=e,t&&y.destroyLoop&&y.reLoop(!0)}},y.params.breakpoints&&y.setBreakpoint(),y.container=e(t),0!==y.container.length)){if(y.container.length>1){var T=[];return y.container.each(function(){T.push(new a(this,s))}),T}y.container[0].swiper=y,y.container.data("swiper",y),y.classNames.push(y.params.containerModifierClass+y.params.direction),y.params.freeMode&&y.classNames.push(y.params.containerModifierClass+"free-mode"),y.support.flexbox||(y.classNames.push(y.params.containerModifierClass+"no-flexbox"),y.params.slidesPerColumn=1),y.params.autoHeight&&y.classNames.push(y.params.containerModifierClass+"autoheight"),(y.params.parallax||y.params.watchSlidesVisibility)&&(y.params.watchSlidesProgress=!0),y.params.touchReleaseOnEdges&&(y.params.resistanceRatio=0),["cube","coverflow","flip"].indexOf(y.params.effect)>=0&&(y.support.transforms3d?(y.params.watchSlidesProgress=!0,y.classNames.push(y.params.containerModifierClass+"3d")):y.params.effect="slide"),"slide"!==y.params.effect&&y.classNames.push(y.params.containerModifierClass+y.params.effect),"cube"===y.params.effect&&(y.params.resistanceRatio=0,y.params.slidesPerView=1,y.params.slidesPerColumn=1,y.params.slidesPerGroup=1,y.params.centeredSlides=!1,y.params.spaceBetween=0,y.params.virtualTranslate=!0),"fade"!==y.params.effect&&"flip"!==y.params.effect||(y.params.slidesPerView=1,y.params.slidesPerColumn=1,y.params.slidesPerGroup=1,y.params.watchSlidesProgress=!0,y.params.spaceBetween=0,void 0===g&&(y.params.virtualTranslate=!0)),y.params.grabCursor&&y.support.touch&&(y.params.grabCursor=!1),y.wrapper=y.container.children("."+y.params.wrapperClass),y.params.pagination&&(y.paginationContainer=e(y.params.pagination),y.params.uniqueNavElements&&"string"==typeof y.params.pagination&&y.paginationContainer.length>1&&1===y.container.find(y.params.pagination).length&&(y.paginationContainer=y.container.find(y.params.pagination)),"bullets"===y.params.paginationType&&y.params.paginationClickable?y.paginationContainer.addClass(y.params.paginationModifierClass+"clickable"):y.params.paginationClickable=!1,y.paginationContainer.addClass(y.params.paginationModifierClass+y.params.paginationType)),(y.params.nextButton||y.params.prevButton)&&(y.params.nextButton&&(y.nextButton=e(y.params.nextButton),y.params.uniqueNavElements&&"string"==typeof y.params.nextButton&&y.nextButton.length>1&&1===y.container.find(y.params.nextButton).length&&(y.nextButton=y.container.find(y.params.nextButton))),y.params.prevButton&&(y.prevButton=e(y.params.prevButton),y.params.uniqueNavElements&&"string"==typeof y.params.prevButton&&y.prevButton.length>1&&1===y.container.find(y.params.prevButton).length&&(y.prevButton=y.container.find(y.params.prevButton)))),y.isHorizontal=function(){return"horizontal"===y.params.direction},y.rtl=y.isHorizontal()&&("rtl"===y.container[0].dir.toLowerCase()||"rtl"===y.container.css("direction")),y.rtl&&y.classNames.push(y.params.containerModifierClass+"rtl"),y.rtl&&(y.wrongRTL="-webkit-box"===y.wrapper.css("display")),y.params.slidesPerColumn>1&&y.classNames.push(y.params.containerModifierClass+"multirow"),y.device.android&&y.classNames.push(y.params.containerModifierClass+"android"),y.container.addClass(y.classNames.join(" ")),y.translate=0,y.progress=0,y.velocity=0,y.lockSwipeToNext=function(){y.params.allowSwipeToNext=!1,!1===y.params.allowSwipeToPrev&&y.params.grabCursor&&y.unsetGrabCursor()},y.lockSwipeToPrev=function(){y.params.allowSwipeToPrev=!1,!1===y.params.allowSwipeToNext&&y.params.grabCursor&&y.unsetGrabCursor()},y.lockSwipes=function(){y.params.allowSwipeToNext=y.params.allowSwipeToPrev=!1,y.params.grabCursor&&y.unsetGrabCursor()},y.unlockSwipeToNext=function(){y.params.allowSwipeToNext=!0,!0===y.params.allowSwipeToPrev&&y.params.grabCursor&&y.setGrabCursor()},y.unlockSwipeToPrev=function(){y.params.allowSwipeToPrev=!0,!0===y.params.allowSwipeToNext&&y.params.grabCursor&&y.setGrabCursor()},y.unlockSwipes=function(){y.params.allowSwipeToNext=y.params.allowSwipeToPrev=!0,y.params.grabCursor&&y.setGrabCursor()},y.setGrabCursor=function(e){y.container[0].style.cursor="move",y.container[0].style.cursor=e?"-webkit-grabbing":"-webkit-grab",y.container[0].style.cursor=e?"-moz-grabbin":"-moz-grab",y.container[0].style.cursor=e?"grabbing":"grab"},y.unsetGrabCursor=function(){y.container[0].style.cursor=""},y.params.grabCursor&&y.setGrabCursor(),y.imagesToLoad=[],y.imagesLoaded=0,y.loadImage=function(e,a,t,s,r,i){function n(){i&&i()}var o;e.complete&&r?n():a?(o=new window.Image,o.onload=n,o.onerror=n,s&&(o.sizes=s),t&&(o.srcset=t),a&&(o.src=a)):n()},y.preloadImages=function(){y.imagesToLoad=y.container.find("img");for(var e=0;e1)for(e=0;ey.slides.length)break;a.push(y.slides.eq(s)[0])}else a.push(y.slides.eq(y.activeIndex)[0]);for(e=0;et?r:t}t&&y.wrapper.css("height",t+"px")},y.updateContainerSize=function(){var e,a;e=void 0!==y.params.width?y.params.width:y.container[0].clientWidth,a=void 0!==y.params.height?y.params.height:y.container[0].clientHeight,0===e&&y.isHorizontal()||0===a&&!y.isHorizontal()||(e=e-parseInt(y.container.css("padding-left"),10)-parseInt(y.container.css("padding-right"),10),a=a-parseInt(y.container.css("padding-top"),10)-parseInt(y.container.css("padding-bottom"),10),y.width=e,y.height=a,y.size=y.isHorizontal()?y.width:y.height)},y.updateSlidesSize=function(){y.slides=y.wrapper.children("."+y.params.slideClass),y.snapGrid=[],y.slidesGrid=[],y.slidesSizesGrid=[];var e,a=y.params.spaceBetween,t=-y.params.slidesOffsetBefore,s=0,i=0;if(void 0!==y.size){"string"==typeof a&&a.indexOf("%")>=0&&(a=parseFloat(a.replace("%",""))/100*y.size),y.virtualSize=-a,y.rtl?y.slides.css({marginLeft:"",marginTop:""}):y.slides.css({marginRight:"",marginBottom:""});var n;y.params.slidesPerColumn>1&&(n=Math.floor(y.slides.length/y.params.slidesPerColumn)===y.slides.length/y.params.slidesPerColumn?y.slides.length:Math.ceil(y.slides.length/y.params.slidesPerColumn)*y.params.slidesPerColumn,"auto"!==y.params.slidesPerView&&"row"===y.params.slidesPerColumnFill&&(n=Math.max(n,y.params.slidesPerView*y.params.slidesPerColumn)));var o,l=y.params.slidesPerColumn,p=n/l,d=p-(y.params.slidesPerColumn*p-y.slides.length);for(e=0;e1){var u,c,g;"column"===y.params.slidesPerColumnFill?(c=Math.floor(e/l),g=e-c*l,(c>d||c===d&&g===l-1)&&++g>=l&&(g=0,c++),u=c+g*n/l,m.css({"-webkit-box-ordinal-group":u,"-moz-box-ordinal-group":u,"-ms-flex-order":u,"-webkit-order":u,order:u})):(g=Math.floor(e/p),c=e-g*p),m.css("margin-"+(y.isHorizontal()?"top":"left"),0!==g&&y.params.spaceBetween&&y.params.spaceBetween+"px").attr("data-swiper-column",c).attr("data-swiper-row",g)}"none"!==m.css("display")&&("auto"===y.params.slidesPerView?(o=y.isHorizontal()?m.outerWidth(!0):m.outerHeight(!0),y.params.roundLengths&&(o=r(o))):(o=(y.size-(y.params.slidesPerView-1)*a)/y.params.slidesPerView,y.params.roundLengths&&(o=r(o)),y.isHorizontal()?y.slides[e].style.width=o+"px":y.slides[e].style.height=o+"px"),y.slides[e].swiperSlideSize=o,y.slidesSizesGrid.push(o),y.params.centeredSlides?(t=t+o/2+s/2+a,0===s&&0!==e&&(t=t-y.size/2-a),0===e&&(t=t-y.size/2-a),Math.abs(t)<.001&&(t=0),i%y.params.slidesPerGroup==0&&y.snapGrid.push(t),y.slidesGrid.push(t)):(i%y.params.slidesPerGroup==0&&y.snapGrid.push(t),y.slidesGrid.push(t),t=t+o+a),y.virtualSize+=o+a,s=o,i++)}y.virtualSize=Math.max(y.virtualSize,y.size)+y.params.slidesOffsetAfter;var h;if(y.rtl&&y.wrongRTL&&("slide"===y.params.effect||"coverflow"===y.params.effect)&&y.wrapper.css({width:y.virtualSize+y.params.spaceBetween+"px"}),y.support.flexbox&&!y.params.setWrapperSize||(y.isHorizontal()?y.wrapper.css({width:y.virtualSize+y.params.spaceBetween+"px"}):y.wrapper.css({height:y.virtualSize+y.params.spaceBetween+"px"})),y.params.slidesPerColumn>1&&(y.virtualSize=(o+y.params.spaceBetween)*n,y.virtualSize=Math.ceil(y.virtualSize/y.params.slidesPerColumn)-y.params.spaceBetween,y.isHorizontal()?y.wrapper.css({width:y.virtualSize+y.params.spaceBetween+"px"}):y.wrapper.css({height:y.virtualSize+y.params.spaceBetween+"px"}),y.params.centeredSlides)){for(h=[],e=0;e1&&y.snapGrid.push(y.virtualSize-y.size)}0===y.snapGrid.length&&(y.snapGrid=[0]),0!==y.params.spaceBetween&&(y.isHorizontal()?y.rtl?y.slides.css({marginLeft:a+"px"}):y.slides.css({marginRight:a+"px"}):y.slides.css({marginBottom:a+"px"})),y.params.watchSlidesProgress&&y.updateSlidesOffset()}},y.updateSlidesOffset=function(){for(var e=0;ey.size&&(s=!0));for(a=y.activeIndex-1;a>=0;a--)y.slides[a]&&!s&&(r+=y.slides[a].swiperSlideSize,t++,r>y.size&&(s=!0))}else for(e=y.activeIndex+1;e=0&&i0&&n<=y.size||i<=0&&n>=y.size)&&y.slides.eq(t).addClass(y.params.slideVisibleClass)}s.progress=y.rtl?-r:r}}},y.updateProgress=function(e){void 0===e&&(e=y.translate||0);var a=y.maxTranslate()-y.minTranslate(),t=y.isBeginning,s=y.isEnd;0===a?(y.progress=0,y.isBeginning=y.isEnd=!0):(y.progress=(e-y.minTranslate())/a,y.isBeginning=y.progress<=0,y.isEnd=y.progress>=1),y.isBeginning&&!t&&y.emit("onReachBeginning",y),y.isEnd&&!s&&y.emit("onReachEnd",y),y.params.watchSlidesProgress&&y.updateSlidesProgress(e),y.emit("onProgress",y,y.progress)},y.updateActiveIndex=function(){var e,a,t,s=y.rtl?y.translate:-y.translate;for(a=0;a=y.slidesGrid[a]&&s=y.slidesGrid[a]&&s=y.slidesGrid[a]&&(e=a);y.params.normalizeSlideIndex&&(e<0||void 0===e)&&(e=0),(t=Math.floor(e/y.params.slidesPerGroup))>=y.snapGrid.length&&(t=y.snapGrid.length-1),e!==y.activeIndex&&(y.snapIndex=t,y.previousIndex=y.activeIndex,y.activeIndex=e,y.updateClasses(),y.updateRealIndex())},y.updateRealIndex=function(){y.realIndex=parseInt(y.slides.eq(y.activeIndex).attr("data-swiper-slide-index")||y.activeIndex,10)},y.updateClasses=function(){y.slides.removeClass(y.params.slideActiveClass+" "+y.params.slideNextClass+" "+y.params.slidePrevClass+" "+y.params.slideDuplicateActiveClass+" "+y.params.slideDuplicateNextClass+" "+y.params.slideDuplicatePrevClass);var a=y.slides.eq(y.activeIndex);a.addClass(y.params.slideActiveClass),s.loop&&(a.hasClass(y.params.slideDuplicateClass)?y.wrapper.children("."+y.params.slideClass+":not(."+y.params.slideDuplicateClass+')[data-swiper-slide-index="'+y.realIndex+'"]').addClass(y.params.slideDuplicateActiveClass):y.wrapper.children("."+y.params.slideClass+"."+y.params.slideDuplicateClass+'[data-swiper-slide-index="'+y.realIndex+'"]').addClass(y.params.slideDuplicateActiveClass));var t=a.next("."+y.params.slideClass).addClass(y.params.slideNextClass);y.params.loop&&0===t.length&&(t=y.slides.eq(0)).addClass(y.params.slideNextClass);var r=a.prev("."+y.params.slideClass).addClass(y.params.slidePrevClass);if(y.params.loop&&0===r.length&&(r=y.slides.eq(-1)).addClass(y.params.slidePrevClass),s.loop&&(t.hasClass(y.params.slideDuplicateClass)?y.wrapper.children("."+y.params.slideClass+":not(."+y.params.slideDuplicateClass+')[data-swiper-slide-index="'+t.attr("data-swiper-slide-index")+'"]').addClass(y.params.slideDuplicateNextClass):y.wrapper.children("."+y.params.slideClass+"."+y.params.slideDuplicateClass+'[data-swiper-slide-index="'+t.attr("data-swiper-slide-index")+'"]').addClass(y.params.slideDuplicateNextClass),r.hasClass(y.params.slideDuplicateClass)?y.wrapper.children("."+y.params.slideClass+":not(."+y.params.slideDuplicateClass+')[data-swiper-slide-index="'+r.attr("data-swiper-slide-index")+'"]').addClass(y.params.slideDuplicatePrevClass):y.wrapper.children("."+y.params.slideClass+"."+y.params.slideDuplicateClass+'[data-swiper-slide-index="'+r.attr("data-swiper-slide-index")+'"]').addClass(y.params.slideDuplicatePrevClass)),y.paginationContainer&&y.paginationContainer.length>0){var i,n=y.params.loop?Math.ceil((y.slides.length-2*y.loopedSlides)/y.params.slidesPerGroup):y.snapGrid.length;if(y.params.loop?((i=Math.ceil((y.activeIndex-y.loopedSlides)/y.params.slidesPerGroup))>y.slides.length-1-2*y.loopedSlides&&(i-=y.slides.length-2*y.loopedSlides),i>n-1&&(i-=n),i<0&&"bullets"!==y.params.paginationType&&(i=n+i)):i=void 0!==y.snapIndex?y.snapIndex:y.activeIndex||0,"bullets"===y.params.paginationType&&y.bullets&&y.bullets.length>0&&(y.bullets.removeClass(y.params.bulletActiveClass),y.paginationContainer.length>1?y.bullets.each(function(){e(this).index()===i&&e(this).addClass(y.params.bulletActiveClass)}):y.bullets.eq(i).addClass(y.params.bulletActiveClass)),"fraction"===y.params.paginationType&&(y.paginationContainer.find("."+y.params.paginationCurrentClass).text(i+1),y.paginationContainer.find("."+y.params.paginationTotalClass).text(n)),"progress"===y.params.paginationType){var o=(i+1)/n,l=o,p=1;y.isHorizontal()||(p=o,l=1),y.paginationContainer.find("."+y.params.paginationProgressbarClass).transform("translate3d(0,0,0) scaleX("+l+") scaleY("+p+")").transition(y.params.speed)}"custom"===y.params.paginationType&&y.params.paginationCustomRender&&(y.paginationContainer.html(y.params.paginationCustomRender(y,i+1,n)),y.emit("onPaginationRendered",y,y.paginationContainer[0]))}y.params.loop||(y.params.prevButton&&y.prevButton&&y.prevButton.length>0&&(y.isBeginning?(y.prevButton.addClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.disable(y.prevButton)):(y.prevButton.removeClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.enable(y.prevButton))),y.params.nextButton&&y.nextButton&&y.nextButton.length>0&&(y.isEnd?(y.nextButton.addClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.disable(y.nextButton)):(y.nextButton.removeClass(y.params.buttonDisabledClass),y.params.a11y&&y.a11y&&y.a11y.enable(y.nextButton))))},y.updatePagination=function(){if(y.params.pagination&&y.paginationContainer&&y.paginationContainer.length>0){var e="";if("bullets"===y.params.paginationType){for(var a=y.params.loop?Math.ceil((y.slides.length-2*y.loopedSlides)/y.params.slidesPerGroup):y.snapGrid.length,t=0;t";y.paginationContainer.html(e),y.bullets=y.paginationContainer.find("."+y.params.bulletClass),y.params.paginationClickable&&y.params.a11y&&y.a11y&&y.a11y.initPagination()}"fraction"===y.params.paginationType&&(e=y.params.paginationFractionRender?y.params.paginationFractionRender(y,y.params.paginationCurrentClass,y.params.paginationTotalClass):' / ',y.paginationContainer.html(e)),"progress"===y.params.paginationType&&(e=y.params.paginationProgressRender?y.params.paginationProgressRender(y,y.params.paginationProgressbarClass):'',y.paginationContainer.html(e)),"custom"!==y.params.paginationType&&y.emit("onPaginationRendered",y,y.paginationContainer[0])}},y.update=function(e){function a(){y.rtl,y.translate,t=Math.min(Math.max(y.translate,y.maxTranslate()),y.minTranslate()),y.setWrapperTranslate(t),y.updateActiveIndex(),y.updateClasses()}if(y){y.updateContainerSize(),y.updateSlidesSize(),y.updateProgress(),y.updatePagination(),y.updateClasses(),y.params.scrollbar&&y.scrollbar&&y.scrollbar.set();var t;e?(y.controller&&y.controller.spline&&(y.controller.spline=void 0),y.params.freeMode?(a(),y.params.autoHeight&&y.updateAutoHeight()):(("auto"===y.params.slidesPerView||y.params.slidesPerView>1)&&y.isEnd&&!y.params.centeredSlides?y.slideTo(y.slides.length-1,0,!1,!0):y.slideTo(y.activeIndex,0,!1,!0))||a()):y.params.autoHeight&&y.updateAutoHeight()}},y.onResize=function(e){y.params.onBeforeResize&&y.params.onBeforeResize(y),y.params.breakpoints&&y.setBreakpoint();var a=y.params.allowSwipeToPrev,t=y.params.allowSwipeToNext;y.params.allowSwipeToPrev=y.params.allowSwipeToNext=!0,y.updateContainerSize(),y.updateSlidesSize(),("auto"===y.params.slidesPerView||y.params.freeMode||e)&&y.updatePagination(),y.params.scrollbar&&y.scrollbar&&y.scrollbar.set(),y.controller&&y.controller.spline&&(y.controller.spline=void 0);var s=!1;if(y.params.freeMode){var r=Math.min(Math.max(y.translate,y.maxTranslate()),y.minTranslate());y.setWrapperTranslate(r),y.updateActiveIndex(),y.updateClasses(),y.params.autoHeight&&y.updateAutoHeight()}else y.updateClasses(),s=("auto"===y.params.slidesPerView||y.params.slidesPerView>1)&&y.isEnd&&!y.params.centeredSlides?y.slideTo(y.slides.length-1,0,!1,!0):y.slideTo(y.activeIndex,0,!1,!0);y.params.lazyLoading&&!s&&y.lazy&&y.lazy.load(),y.params.allowSwipeToPrev=a,y.params.allowSwipeToNext=t,y.params.onAfterResize&&y.params.onAfterResize(y)},y.touchEventsDesktop={start:"mousedown",move:"mousemove",end:"mouseup"},window.navigator.pointerEnabled?y.touchEventsDesktop={start:"pointerdown",move:"pointermove",end:"pointerup"}:window.navigator.msPointerEnabled&&(y.touchEventsDesktop={start:"MSPointerDown",move:"MSPointerMove",end:"MSPointerUp"}),y.touchEvents={start:y.support.touch||!y.params.simulateTouch?"touchstart":y.touchEventsDesktop.start,move:y.support.touch||!y.params.simulateTouch?"touchmove":y.touchEventsDesktop.move,end:y.support.touch||!y.params.simulateTouch?"touchend":y.touchEventsDesktop.end},(window.navigator.pointerEnabled||window.navigator.msPointerEnabled)&&("container"===y.params.touchEventsTarget?y.container:y.wrapper).addClass("swiper-wp8-"+y.params.direction),y.initEvents=function(e){var a=e?"off":"on",t=e?"removeEventListener":"addEventListener",r="container"===y.params.touchEventsTarget?y.container[0]:y.wrapper[0],i=y.support.touch?r:document,n=!!y.params.nested;if(y.browser.ie)r[t](y.touchEvents.start,y.onTouchStart,!1),i[t](y.touchEvents.move,y.onTouchMove,n),i[t](y.touchEvents.end,y.onTouchEnd,!1);else{if(y.support.touch){var o=!("touchstart"!==y.touchEvents.start||!y.support.passiveListener||!y.params.passiveListeners)&&{passive:!0,capture:!1};r[t](y.touchEvents.start,y.onTouchStart,o),r[t](y.touchEvents.move,y.onTouchMove,n),r[t](y.touchEvents.end,y.onTouchEnd,o)}(s.simulateTouch&&!y.device.ios&&!y.device.android||s.simulateTouch&&!y.support.touch&&y.device.ios)&&(r[t]("mousedown",y.onTouchStart,!1),document[t]("mousemove",y.onTouchMove,n),document[t]("mouseup",y.onTouchEnd,!1))}window[t]("resize",y.onResize),y.params.nextButton&&y.nextButton&&y.nextButton.length>0&&(y.nextButton[a]("click",y.onClickNext),y.params.a11y&&y.a11y&&y.nextButton[a]("keydown",y.a11y.onEnterKey)),y.params.prevButton&&y.prevButton&&y.prevButton.length>0&&(y.prevButton[a]("click",y.onClickPrev),y.params.a11y&&y.a11y&&y.prevButton[a]("keydown",y.a11y.onEnterKey)),y.params.pagination&&y.params.paginationClickable&&(y.paginationContainer[a]("click","."+y.params.bulletClass,y.onClickIndex),y.params.a11y&&y.a11y&&y.paginationContainer[a]("keydown","."+y.params.bulletClass,y.a11y.onEnterKey)),(y.params.preventClicks||y.params.preventClicksPropagation)&&r[t]("click",y.preventClicks,!0)},y.attachEvents=function(){y.initEvents()},y.detachEvents=function(){y.initEvents(!0)},y.allowClick=!0,y.preventClicks=function(e){y.allowClick||(y.params.preventClicks&&e.preventDefault(),y.params.preventClicksPropagation&&y.animating&&(e.stopPropagation(),e.stopImmediatePropagation()))},y.onClickNext=function(e){e.preventDefault(),y.isEnd&&!y.params.loop||y.slideNext()},y.onClickPrev=function(e){e.preventDefault(),y.isBeginning&&!y.params.loop||y.slidePrev()},y.onClickIndex=function(a){a.preventDefault();var t=e(this).index()*y.params.slidesPerGroup;y.params.loop&&(t+=y.loopedSlides),y.slideTo(t)},y.updateClickedSlide=function(a){var t=n(a,"."+y.params.slideClass),s=!1;if(t)for(var r=0;ry.slides.length-y.loopedSlides+l/2?(y.fixLoop(),o=y.wrapper.children("."+y.params.slideClass+'[data-swiper-slide-index="'+i+'"]:not(.'+y.params.slideDuplicateClass+")").eq(0).index(),setTimeout(function(){y.slideTo(o)},0)):y.slideTo(o):o>y.slides.length-l?(y.fixLoop(),o=y.wrapper.children("."+y.params.slideClass+'[data-swiper-slide-index="'+i+'"]:not(.'+y.params.slideDuplicateClass+")").eq(0).index(),setTimeout(function(){y.slideTo(o)},0)):y.slideTo(o)}else y.slideTo(o)}};var b,C,S,z,M,P,E,I,k,D,L="input, select, textarea, button, video",B=Date.now(),H=[];y.animating=!1,y.touches={startX:0,startY:0,currentX:0,currentY:0,diff:0};var G,X;y.onTouchStart=function(a){if(a.originalEvent&&(a=a.originalEvent),(G="touchstart"===a.type)||!("which"in a)||3!==a.which){if(y.params.noSwiping&&n(a,"."+y.params.noSwipingClass))return void(y.allowClick=!0);if(!y.params.swipeHandler||n(a,y.params.swipeHandler)){var t=y.touches.currentX="touchstart"===a.type?a.targetTouches[0].pageX:a.pageX,s=y.touches.currentY="touchstart"===a.type?a.targetTouches[0].pageY:a.pageY;if(!(y.device.ios&&y.params.iOSEdgeSwipeDetection&&t<=y.params.iOSEdgeSwipeThreshold)){if(b=!0,C=!1,S=!0,M=void 0,X=void 0,y.touches.startX=t,y.touches.startY=s,z=Date.now(),y.allowClick=!0,y.updateContainerSize(),y.swipeDirection=void 0,y.params.threshold>0&&(I=!1),"touchstart"!==a.type){var r=!0;e(a.target).is(L)&&(r=!1),document.activeElement&&e(document.activeElement).is(L)&&document.activeElement.blur(),r&&a.preventDefault()}y.emit("onTouchStart",y,a)}}}},y.onTouchMove=function(a){if(a.originalEvent&&(a=a.originalEvent),!G||"mousemove"!==a.type){if(a.preventedByNestedSwiper)return y.touches.startX="touchmove"===a.type?a.targetTouches[0].pageX:a.pageX,void(y.touches.startY="touchmove"===a.type?a.targetTouches[0].pageY:a.pageY);if(y.params.onlyExternal)return y.allowClick=!1,void(b&&(y.touches.startX=y.touches.currentX="touchmove"===a.type?a.targetTouches[0].pageX:a.pageX,y.touches.startY=y.touches.currentY="touchmove"===a.type?a.targetTouches[0].pageY:a.pageY,z=Date.now()));if(G&&y.params.touchReleaseOnEdges&&!y.params.loop)if(y.isHorizontal()){if(y.touches.currentXy.touches.startX&&y.translate>=y.minTranslate())return}else if(y.touches.currentYy.touches.startY&&y.translate>=y.minTranslate())return;if(G&&document.activeElement&&a.target===document.activeElement&&e(a.target).is(L))return C=!0,void(y.allowClick=!1);if(S&&y.emit("onTouchMove",y,a),!(a.targetTouches&&a.targetTouches.length>1)){if(y.touches.currentX="touchmove"===a.type?a.targetTouches[0].pageX:a.pageX,y.touches.currentY="touchmove"===a.type?a.targetTouches[0].pageY:a.pageY,void 0===M){var t;y.isHorizontal()&&y.touches.currentY===y.touches.startY||!y.isHorizontal()&&y.touches.currentX===y.touches.startX?M=!1:(t=180*Math.atan2(Math.abs(y.touches.currentY-y.touches.startY),Math.abs(y.touches.currentX-y.touches.startX))/Math.PI,M=y.isHorizontal()?t>y.params.touchAngle:90-t>y.params.touchAngle)}if(M&&y.emit("onTouchMoveOpposite",y,a),void 0===X&&(y.touches.currentX===y.touches.startX&&y.touches.currentY===y.touches.startY||(X=!0)),b){if(M)return void(b=!1);if(X){y.allowClick=!1,y.emit("onSliderMove",y,a),a.preventDefault(),y.params.touchMoveStopPropagation&&!y.params.nested&&a.stopPropagation(),C||(s.loop&&y.fixLoop(),E=y.getWrapperTranslate(),y.setWrapperTransition(0),y.animating&&y.wrapper.trigger("webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd"),y.params.autoplay&&y.autoplaying&&(y.params.autoplayDisableOnInteraction?y.stopAutoplay():y.pauseAutoplay()),D=!1,!y.params.grabCursor||!0!==y.params.allowSwipeToNext&&!0!==y.params.allowSwipeToPrev||y.setGrabCursor(!0)),C=!0;var r=y.touches.diff=y.isHorizontal()?y.touches.currentX-y.touches.startX:y.touches.currentY-y.touches.startY;r*=y.params.touchRatio,y.rtl&&(r=-r),y.swipeDirection=r>0?"prev":"next",P=r+E;var i=!0;if(r>0&&P>y.minTranslate()?(i=!1,y.params.resistance&&(P=y.minTranslate()-1+Math.pow(-y.minTranslate()+E+r,y.params.resistanceRatio))):r<0&&PE&&(P=E),y.params.threshold>0){if(!(Math.abs(r)>y.params.threshold||I))return void(P=E);if(!I)return I=!0,y.touches.startX=y.touches.currentX,y.touches.startY=y.touches.currentY,P=E,void(y.touches.diff=y.isHorizontal()?y.touches.currentX-y.touches.startX:y.touches.currentY-y.touches.startY)}y.params.followFinger&&((y.params.freeMode||y.params.watchSlidesProgress)&&y.updateActiveIndex(),y.params.freeMode&&(0===H.length&&H.push({position:y.touches[y.isHorizontal()?"startX":"startY"],time:z}),H.push({position:y.touches[y.isHorizontal()?"currentX":"currentY"],time:(new window.Date).getTime()})),y.updateProgress(P),y.setWrapperTranslate(P))}}}}},y.onTouchEnd=function(a){if(a.originalEvent&&(a=a.originalEvent),S&&y.emit("onTouchEnd",y,a),S=!1,b){y.params.grabCursor&&C&&b&&(!0===y.params.allowSwipeToNext||!0===y.params.allowSwipeToPrev)&&y.setGrabCursor(!1);var t=Date.now(),s=t-z;if(y.allowClick&&(y.updateClickedSlide(a),y.emit("onTap",y,a),s<300&&t-B>300&&(k&&clearTimeout(k),k=setTimeout(function(){y&&(y.params.paginationHide&&y.paginationContainer.length>0&&!e(a.target).hasClass(y.params.bulletClass)&&y.paginationContainer.toggleClass(y.params.paginationHiddenClass),y.emit("onClick",y,a))},300)),s<300&&t-B<300&&(k&&clearTimeout(k),y.emit("onDoubleTap",y,a))),B=Date.now(),setTimeout(function(){y&&(y.allowClick=!0)},0),!b||!C||!y.swipeDirection||0===y.touches.diff||P===E)return void(b=C=!1);b=C=!1;var r;if(r=y.params.followFinger?y.rtl?y.translate:-y.translate:-P,y.params.freeMode){if(r<-y.minTranslate())return void y.slideTo(y.activeIndex);if(r>-y.maxTranslate())return void(y.slides.length1){var i=H.pop(),n=H.pop(),o=i.position-n.position,l=i.time-n.time;y.velocity=o/l,y.velocity=y.velocity/2,Math.abs(y.velocity)150||(new window.Date).getTime()-i.time>300)&&(y.velocity=0)}else y.velocity=0;y.velocity=y.velocity*y.params.freeModeMomentumVelocityRatio,H.length=0;var p=1e3*y.params.freeModeMomentumRatio,d=y.velocity*p,m=y.translate+d;y.rtl&&(m=-m);var u,c=!1,g=20*Math.abs(y.velocity)*y.params.freeModeMomentumBounceRatio;if(my.minTranslate())y.params.freeModeMomentumBounce?(m-y.minTranslate()>g&&(m=y.minTranslate()+g),u=y.minTranslate(),c=!0,D=!0):m=y.minTranslate();else if(y.params.freeModeSticky){var h,v=0;for(v=0;v-m){h=v;break}m=Math.abs(y.snapGrid[h]-m)=y.params.longSwipesMs)&&(y.updateProgress(),y.updateActiveIndex()))}var f,w=0,x=y.slidesSizesGrid[0];for(f=0;f=y.slidesGrid[f]&&r=y.slidesGrid[f]&&(w=f,x=y.slidesGrid[y.slidesGrid.length-1]-y.slidesGrid[y.slidesGrid.length-2]);var T=(r-y.slidesGrid[w])/x;if(s>y.params.longSwipesMs){if(!y.params.longSwipes)return void y.slideTo(y.activeIndex);"next"===y.swipeDirection&&(T>=y.params.longSwipesRatio?y.slideTo(w+y.params.slidesPerGroup):y.slideTo(w)),"prev"===y.swipeDirection&&(T>1-y.params.longSwipesRatio?y.slideTo(w+y.params.slidesPerGroup):y.slideTo(w))}else{if(!y.params.shortSwipes)return void y.slideTo(y.activeIndex);"next"===y.swipeDirection&&y.slideTo(w+y.params.slidesPerGroup),"prev"===y.swipeDirection&&y.slideTo(w)}}},y._slideTo=function(e,a){return y.slideTo(e,a,!0,!0)},y.slideTo=function(e,a,t,s){void 0===t&&(t=!0),void 0===e&&(e=0),e<0&&(e=0),y.snapIndex=Math.floor(e/y.params.slidesPerGroup),y.snapIndex>=y.snapGrid.length&&(y.snapIndex=y.snapGrid.length-1);var r=-y.snapGrid[y.snapIndex];if(y.params.autoplay&&y.autoplaying&&(s||!y.params.autoplayDisableOnInteraction?y.pauseAutoplay(a):y.stopAutoplay()),y.updateProgress(r),y.params.normalizeSlideIndex)for(var i=0;i=Math.floor(100*y.slidesGrid[i])&&(e=i);return!(!y.params.allowSwipeToNext&&ry.translate&&r>y.maxTranslate()&&(y.activeIndex||0)!==e||(void 0===a&&(a=y.params.speed),y.previousIndex=y.activeIndex||0,y.activeIndex=e,y.updateRealIndex(),y.rtl&&-r===y.translate||!y.rtl&&r===y.translate?(y.params.autoHeight&&y.updateAutoHeight(),y.updateClasses(),"slide"!==y.params.effect&&y.setWrapperTranslate(r),1):(y.updateClasses(),y.onTransitionStart(t),0===a||y.browser.lteIE9?(y.setWrapperTranslate(r),y.setWrapperTransition(0),y.onTransitionEnd(t)):(y.setWrapperTranslate(r),y.setWrapperTransition(a),y.animating||(y.animating=!0,y.wrapper.transitionEnd(function(){y&&y.onTransitionEnd(t)}))),0)))},y.onTransitionStart=function(e){void 0===e&&(e=!0),y.params.autoHeight&&y.updateAutoHeight(),y.lazy&&y.lazy.onTransitionStart(),e&&(y.emit("onTransitionStart",y),y.activeIndex!==y.previousIndex&&(y.emit("onSlideChangeStart",y),y.activeIndex>y.previousIndex?y.emit("onSlideNextStart",y):y.emit("onSlidePrevStart",y)))},y.onTransitionEnd=function(e){y.animating=!1,y.setWrapperTransition(0),void 0===e&&(e=!0),y.lazy&&y.lazy.onTransitionEnd(),e&&(y.emit("onTransitionEnd",y),y.activeIndex!==y.previousIndex&&(y.emit("onSlideChangeEnd",y),y.activeIndex>y.previousIndex?y.emit("onSlideNextEnd",y):y.emit("onSlidePrevEnd",y))),y.params.history&&y.history&&y.history.setHistory(y.params.history,y.activeIndex),y.params.hashnav&&y.hashnav&&y.hashnav.setHash()},y.slideNext=function(e,a,t){return y.params.loop?!y.animating&&(y.fixLoop(),y.container[0].clientLeft,y.slideTo(y.activeIndex+y.params.slidesPerGroup,a,e,t)):y.slideTo(y.activeIndex+y.params.slidesPerGroup,a,e,t)},y._slideNext=function(e){return y.slideNext(!0,e,!0)},y.slidePrev=function(e,a,t){return y.params.loop?!y.animating&&(y.fixLoop(),y.container[0].clientLeft,y.slideTo(y.activeIndex-1,a,e,t)):y.slideTo(y.activeIndex-1,a,e,t)},y._slidePrev=function(e){return y.slidePrev(!0,e,!0)},y.slideReset=function(e,a,t){return y.slideTo(y.activeIndex,a,e)},y.disableTouchControl=function(){return y.params.onlyExternal=!0,!0},y.enableTouchControl=function(){return y.params.onlyExternal=!1,!0},y.setWrapperTransition=function(e,a){y.wrapper.transition(e),"slide"!==y.params.effect&&y.effects[y.params.effect]&&y.effects[y.params.effect].setTransition(e),y.params.parallax&&y.parallax&&y.parallax.setTransition(e),y.params.scrollbar&&y.scrollbar&&y.scrollbar.setTransition(e),y.params.control&&y.controller&&y.controller.setTransition(e,a),y.emit("onSetTransition",y,e)},y.setWrapperTranslate=function(e,a,t){var s=0,i=0;y.isHorizontal()?s=y.rtl?-e:e:i=e,y.params.roundLengths&&(s=r(s),i=r(i)),y.params.virtualTranslate||(y.support.transforms3d?y.wrapper.transform("translate3d("+s+"px, "+i+"px, 0px)"):y.wrapper.transform("translate("+s+"px, "+i+"px)")),y.translate=y.isHorizontal()?s:i;var n=y.maxTranslate()-y.minTranslate();(0===n?0:(e-y.minTranslate())/n)!==y.progress&&y.updateProgress(e),a&&y.updateActiveIndex(),"slide"!==y.params.effect&&y.effects[y.params.effect]&&y.effects[y.params.effect].setTranslate(y.translate),y.params.parallax&&y.parallax&&y.parallax.setTranslate(y.translate),y.params.scrollbar&&y.scrollbar&&y.scrollbar.setTranslate(y.translate),y.params.control&&y.controller&&y.controller.setTranslate(y.translate,t),y.emit("onSetTranslate",y,y.translate)},y.getTranslate=function(e,a){var t,s,r,i;return void 0===a&&(a="x"),y.params.virtualTranslate?y.rtl?-y.translate:y.translate:(r=window.getComputedStyle(e,null),window.WebKitCSSMatrix?((s=r.transform||r.webkitTransform).split(",").length>6&&(s=s.split(", ").map(function(e){return e.replace(",",".")}).join(", ")),i=new window.WebKitCSSMatrix("none"===s?"":s)):(i=r.MozTransform||r.OTransform||r.MsTransform||r.msTransform||r.transform||r.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,"),t=i.toString().split(",")),"x"===a&&(s=window.WebKitCSSMatrix?i.m41:16===t.length?parseFloat(t[12]):parseFloat(t[4])),"y"===a&&(s=window.WebKitCSSMatrix?i.m42:16===t.length?parseFloat(t[13]):parseFloat(t[5])),y.rtl&&s&&(s=-s),s||0)},y.getWrapperTranslate=function(e){return void 0===e&&(e=y.isHorizontal()?"x":"y"),y.getTranslate(y.wrapper[0],e)},y.observers=[],y.initObservers=function(){if(y.params.observeParents)for(var e=y.container.parents(),a=0;aa.length&&(y.loopedSlides=a.length);var t,s=[],r=[];for(a.each(function(t,i){var n=e(this);t=a.length-y.loopedSlides&&s.push(i),n.attr("data-swiper-slide-index",t)}),t=0;t=0;t--)y.wrapper.prepend(e(s[t].cloneNode(!0)).addClass(y.params.slideDuplicateClass))},y.destroyLoop=function(){y.wrapper.children("."+y.params.slideClass+"."+y.params.slideDuplicateClass).remove(),y.slides.removeAttr("data-swiper-slide-index")},y.reLoop=function(e){var a=y.activeIndex-y.loopedSlides;y.destroyLoop(),y.createLoop(),y.updateSlidesSize(),e&&y.slideTo(a+y.loopedSlides,0,!1)},y.fixLoop=function(){var e;y.activeIndex=2*y.loopedSlides||y.activeIndex>y.slides.length-2*y.params.slidesPerView)&&(e=-y.slides.length+y.activeIndex+y.loopedSlides,e+=y.loopedSlides,y.slideTo(e,0,!1,!0))},y.appendSlide=function(e){if(y.params.loop&&y.destroyLoop(),"object"==typeof e&&e.length)for(var a=0;a
'),t.append(l)),0===p.length&&(p=e('
'),t.append(p)),l.length&&(l[0].style.opacity=Math.max(-s,0)),p.length&&(p[0].style.opacity=Math.max(s,0))}t.transform("translate3d("+n+"px, "+o+"px, 0px) rotateX("+i+"deg) rotateY("+r+"deg)")}},setTransition:function(a){if(y.slides.transition(a).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(a),y.params.virtualTranslate&&0!==a){var t=!1;y.slides.eq(y.activeIndex).transitionEnd(function(){if(!t&&y&&e(this).hasClass(y.params.slideActiveClass)){t=!0,y.animating=!1;for(var a=["webkitTransitionEnd","transitionend","oTransitionEnd","MSTransitionEnd","msTransitionEnd"],s=0;s'),y.wrapper.append(a)),a.css({height:y.width+"px"})):0===(a=y.container.find(".swiper-cube-shadow")).length&&(a=e('
'),y.container.append(a)));for(var s=0;s-1&&(t=90*s+90*o,y.rtl&&(t=90*-s-90*o)),r.transform(m),y.params.cube.slideShadows){var u=y.isHorizontal()?r.find(".swiper-slide-shadow-left"):r.find(".swiper-slide-shadow-top"),c=y.isHorizontal()?r.find(".swiper-slide-shadow-right"):r.find(".swiper-slide-shadow-bottom");0===u.length&&(u=e('
'),r.append(u)),0===c.length&&(c=e('
'),r.append(c)),u.length&&(u[0].style.opacity=Math.max(-o,0)),c.length&&(c[0].style.opacity=Math.max(o,0))}}if(y.wrapper.css({"-webkit-transform-origin":"50% 50% -"+y.size/2+"px","-moz-transform-origin":"50% 50% -"+y.size/2+"px","-ms-transform-origin":"50% 50% -"+y.size/2+"px","transform-origin":"50% 50% -"+y.size/2+"px"}),y.params.cube.shadow)if(y.isHorizontal())a.transform("translate3d(0px, "+(y.width/2+y.params.cube.shadowOffset)+"px, "+-y.width/2+"px) rotateX(90deg) rotateZ(0deg) scale("+y.params.cube.shadowScale+")");else{var g=Math.abs(t)-90*Math.floor(Math.abs(t)/90),h=1.5-(Math.sin(2*g*Math.PI/360)/2+Math.cos(2*g*Math.PI/360)/2),v=y.params.cube.shadowScale,f=y.params.cube.shadowScale/h,w=y.params.cube.shadowOffset;a.transform("scale3d("+v+", 1, "+f+") translate3d(0px, "+(y.height/2+w)+"px, "+-y.height/2/f+"px) rotateX(-90deg)")}var x=y.isSafari||y.isUiWebView?-y.size/2:0;y.wrapper.transform("translate3d(0px,0,"+x+"px) rotateX("+(y.isHorizontal()?0:t)+"deg) rotateY("+(y.isHorizontal()?-t:0)+"deg)")},setTransition:function(e){y.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),y.params.cube.shadow&&!y.isHorizontal()&&y.container.find(".swiper-cube-shadow").transition(e)}},coverflow:{setTranslate:function(){for(var a=y.translate,t=y.isHorizontal()?-a+y.width/2:-a+y.height/2,s=y.isHorizontal()?y.params.coverflow.rotate:-y.params.coverflow.rotate,r=y.params.coverflow.depth,i=0,n=y.slides.length;i'),o.append(v)),0===f.length&&(f=e('
'),o.append(f)),v.length&&(v[0].style.opacity=p>0?p:0),f.length&&(f[0].style.opacity=-p>0?-p:0)}}y.browser.ie&&(y.wrapper[0].style.perspectiveOrigin=t+"px 50%")},setTransition:function(e){y.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e)}}},y.lazy={initialImageLoaded:!1,loadImageInSlide:function(a,t){if(void 0!==a&&(void 0===t&&(t=!0),0!==y.slides.length)){var s=y.slides.eq(a),r=s.find("."+y.params.lazyLoadingClass+":not(."+y.params.lazyStatusLoadedClass+"):not(."+y.params.lazyStatusLoadingClass+")");!s.hasClass(y.params.lazyLoadingClass)||s.hasClass(y.params.lazyStatusLoadedClass)||s.hasClass(y.params.lazyStatusLoadingClass)||(r=r.add(s[0])),0!==r.length&&r.each(function(){var a=e(this);a.addClass(y.params.lazyStatusLoadingClass);var r=a.attr("data-background"),i=a.attr("data-src"),n=a.attr("data-srcset"),o=a.attr("data-sizes");y.loadImage(a[0],i||r,n,o,!1,function(){if(void 0!==y&&null!==y&&y){if(r?(a.css("background-image",'url("'+r+'")'),a.removeAttr("data-background")):(n&&(a.attr("srcset",n),a.removeAttr("data-srcset")),o&&(a.attr("sizes",o),a.removeAttr("data-sizes")),i&&(a.attr("src",i),a.removeAttr("data-src"))),a.addClass(y.params.lazyStatusLoadedClass).removeClass(y.params.lazyStatusLoadingClass),s.find("."+y.params.lazyPreloaderClass+", ."+y.params.preloaderClass).remove(),y.params.loop&&t){var e=s.attr("data-swiper-slide-index");if(s.hasClass(y.params.slideDuplicateClass)){var l=y.wrapper.children('[data-swiper-slide-index="'+e+'"]:not(.'+y.params.slideDuplicateClass+")");y.lazy.loadImageInSlide(l.index(),!1)}else{var p=y.wrapper.children("."+y.params.slideDuplicateClass+'[data-swiper-slide-index="'+e+'"]');y.lazy.loadImageInSlide(p.index(),!1)}}y.emit("onLazyImageReady",y,s[0],a[0])}}),y.emit("onLazyImageLoad",y,s[0],a[0])})}},load:function(){var a,t=y.params.slidesPerView;if("auto"===t&&(t=0),y.lazy.initialImageLoaded||(y.lazy.initialImageLoaded=!0),y.params.watchSlidesVisibility)y.wrapper.children("."+y.params.slideVisibleClass).each(function(){y.lazy.loadImageInSlide(e(this).index())});else if(t>1)for(a=y.activeIndex;a1||y.params.lazyLoadingInPrevNextAmount&&y.params.lazyLoadingInPrevNextAmount>1){var s=y.params.lazyLoadingInPrevNextAmount,r=t,i=Math.min(y.activeIndex+r+Math.max(s,r),y.slides.length),n=Math.max(y.activeIndex-Math.max(r,s),0);for(a=y.activeIndex+t;a0&&y.lazy.loadImageInSlide(o.index());var l=y.wrapper.children("."+y.params.slidePrevClass);l.length>0&&y.lazy.loadImageInSlide(l.index())}},onTransitionStart:function(){y.params.lazyLoading&&(y.params.lazyLoadingOnTransitionStart||!y.params.lazyLoadingOnTransitionStart&&!y.lazy.initialImageLoaded)&&y.lazy.load()},onTransitionEnd:function(){y.params.lazyLoading&&!y.params.lazyLoadingOnTransitionStart&&y.lazy.load()}},y.scrollbar={isTouched:!1,setDragPosition:function(e){var a=y.scrollbar,t=(y.isHorizontal()?"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageX:e.pageX||e.clientX:"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageY:e.pageY||e.clientY)-a.track.offset()[y.isHorizontal()?"left":"top"]-a.dragSize/2,s=-y.minTranslate()*a.moveDivider,r=-y.maxTranslate()*a.moveDivider;tr&&(t=r),t=-t/a.moveDivider,y.updateProgress(t),y.setWrapperTranslate(t,!0)},dragStart:function(e){var a=y.scrollbar;a.isTouched=!0,e.preventDefault(),e.stopPropagation(),a.setDragPosition(e),clearTimeout(a.dragTimeout),a.track.transition(0),y.params.scrollbarHide&&a.track.css("opacity",1),y.wrapper.transition(100),a.drag.transition(100),y.emit("onScrollbarDragStart",y)},dragMove:function(e){var a=y.scrollbar;a.isTouched&&(e.preventDefault?e.preventDefault():e.returnValue=!1,a.setDragPosition(e),y.wrapper.transition(0),a.track.transition(0),a.drag.transition(0),y.emit("onScrollbarDragMove",y))},dragEnd:function(e){var a=y.scrollbar;a.isTouched&&(a.isTouched=!1,y.params.scrollbarHide&&(clearTimeout(a.dragTimeout),a.dragTimeout=setTimeout(function(){a.track.css("opacity",0),a.track.transition(400)},1e3)),y.emit("onScrollbarDragEnd",y),y.params.scrollbarSnapOnRelease&&y.slideReset())},draggableEvents:!1!==y.params.simulateTouch||y.support.touch?y.touchEvents:y.touchEventsDesktop,enableDraggable:function(){var a=y.scrollbar,t=y.support.touch?a.track:document;e(a.track).on(a.draggableEvents.start,a.dragStart),e(t).on(a.draggableEvents.move,a.dragMove),e(t).on(a.draggableEvents.end,a.dragEnd)},disableDraggable:function(){var a=y.scrollbar,t=y.support.touch?a.track:document;e(a.track).off(a.draggableEvents.start,a.dragStart),e(t).off(a.draggableEvents.move,a.dragMove),e(t).off(a.draggableEvents.end,a.dragEnd)},set:function(){if(y.params.scrollbar){var a=y.scrollbar;a.track=e(y.params.scrollbar),y.params.uniqueNavElements&&"string"==typeof y.params.scrollbar&&a.track.length>1&&1===y.container.find(y.params.scrollbar).length&&(a.track=y.container.find(y.params.scrollbar)),a.drag=a.track.find(".swiper-scrollbar-drag"),0===a.drag.length&&(a.drag=e('
'),a.track.append(a.drag)),a.drag[0].style.width="",a.drag[0].style.height="",a.trackSize=y.isHorizontal()?a.track[0].offsetWidth:a.track[0].offsetHeight,a.divider=y.size/y.virtualSize,a.moveDivider=a.divider*(a.trackSize/y.size),a.dragSize=a.trackSize*a.divider,y.isHorizontal()?a.drag[0].style.width=a.dragSize+"px":a.drag[0].style.height=a.dragSize+"px",a.divider>=1?a.track[0].style.display="none":a.track[0].style.display="",y.params.scrollbarHide&&(a.track[0].style.opacity=0)}},setTranslate:function(){if(y.params.scrollbar){var e,a=y.scrollbar,t=(y.translate,a.dragSize);e=(a.trackSize-a.dragSize)*y.progress,y.rtl&&y.isHorizontal()?(e=-e,e>0?(t=a.dragSize-e,e=0):-e+a.dragSize>a.trackSize&&(t=a.trackSize+e)):e<0?(t=a.dragSize+e,e=0):e+a.dragSize>a.trackSize&&(t=a.trackSize-e),y.isHorizontal()?(y.support.transforms3d?a.drag.transform("translate3d("+e+"px, 0, 0)"):a.drag.transform("translateX("+e+"px)"),a.drag[0].style.width=t+"px"):(y.support.transforms3d?a.drag.transform("translate3d(0px, "+e+"px, 0)"):a.drag.transform("translateY("+e+"px)"),a.drag[0].style.height=t+"px"),y.params.scrollbarHide&&(clearTimeout(a.timeout),a.track[0].style.opacity=1,a.timeout=setTimeout(function(){a.track[0].style.opacity=0,a.track.transition(400)},1e3))}},setTransition:function(e){y.params.scrollbar&&y.scrollbar.drag.transition(e)}},y.controller={LinearSpline:function(e,a){var t=function(){var e,a,t;return function(s,r){for(a=-1,e=s.length;e-a>1;)s[t=e+a>>1]<=r?a=t:e=t;return e}}();this.x=e,this.y=a,this.lastIndex=e.length-1;var s,r;this.x.length,this.interpolate=function(e){return e?(r=t(this.x,e),s=r-1,(e-this.x[s])*(this.y[r]-this.y[s])/(this.x[r]-this.x[s])+this.y[s]):0}},getInterpolateFunction:function(e){y.controller.spline||(y.controller.spline=y.params.loop?new y.controller.LinearSpline(y.slidesGrid,e.slidesGrid):new y.controller.LinearSpline(y.snapGrid,e.snapGrid))},setTranslate:function(e,t){function s(a){e=a.rtl&&"horizontal"===a.params.direction?-y.translate:y.translate,"slide"===y.params.controlBy&&(y.controller.getInterpolateFunction(a),i=-y.controller.spline.interpolate(-e)),i&&"container"!==y.params.controlBy||(r=(a.maxTranslate()-a.minTranslate())/(y.maxTranslate()-y.minTranslate()),i=(e-y.minTranslate())*r+a.minTranslate()),y.params.controlInverse&&(i=a.maxTranslate()-i),a.updateProgress(i),a.setWrapperTranslate(i,!1,y),a.updateActiveIndex()}var r,i,n=y.params.control;if(Array.isArray(n))for(var o=0;o-1?"DOMMouseScroll":function(){var e="onwheel"in document;if(!e){var a=document.createElement("div");a.setAttribute("onwheel","return;"),e="function"==typeof a.onwheel}return!e&&document.implementation&&document.implementation.hasFeature&&!0!==document.implementation.hasFeature("","")&&(e=document.implementation.hasFeature("Events.wheel","3.0")),e}()?"wheel":"mousewheel"),y.disableMousewheelControl=function(){if(!y.mousewheel.event)return!1;var a=y.container;return"container"!==y.params.mousewheelEventsTarged&&(a=e(y.params.mousewheelEventsTarged)),a.off(y.mousewheel.event,d),y.params.mousewheelControl=!1,!0},y.enableMousewheelControl=function(){if(!y.mousewheel.event)return!1;var a=y.container;return"container"!==y.params.mousewheelEventsTarged&&(a=e(y.params.mousewheelEventsTarged)),a.on(y.mousewheel.event,d),y.params.mousewheelControl=!0,!0},y.parallax={setTranslate:function(){y.container.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){m(this,y.progress)}),y.slides.each(function(){var a=e(this);a.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){m(this,Math.min(Math.max(a[0].progress,-1),1))})})},setTransition:function(a){void 0===a&&(a=y.params.speed),y.container.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){var t=e(this),s=parseInt(t.attr("data-swiper-parallax-duration"),10)||a;0===a&&(s=0),t.transition(s)})}},y.zoom={scale:1,currentScale:1,isScaling:!1,gesture:{slide:void 0,slideWidth:void 0,slideHeight:void 0,image:void 0,imageWrap:void 0,zoomMax:y.params.zoomMax},image:{isTouched:void 0,isMoved:void 0,currentX:void 0,currentY:void 0,minX:void 0,minY:void 0,maxX:void 0,maxY:void 0,width:void 0,height:void 0,startX:void 0,startY:void 0,touchesStart:{},touchesCurrent:{}},velocity:{x:void 0,y:void 0,prevPositionX:void 0,prevPositionY:void 0,prevTime:void 0},getDistanceBetweenTouches:function(e){if(e.targetTouches.length<2)return 1;var a=e.targetTouches[0].pageX,t=e.targetTouches[0].pageY,s=e.targetTouches[1].pageX,r=e.targetTouches[1].pageY;return Math.sqrt(Math.pow(s-a,2)+Math.pow(r-t,2))},onGestureStart:function(a){var t=y.zoom;if(!y.support.gestures){if("touchstart"!==a.type||"touchstart"===a.type&&a.targetTouches.length<2)return;t.gesture.scaleStart=t.getDistanceBetweenTouches(a)}t.gesture.slide&&t.gesture.slide.length||(t.gesture.slide=e(this),0===t.gesture.slide.length&&(t.gesture.slide=y.slides.eq(y.activeIndex)),t.gesture.image=t.gesture.slide.find("img, svg, canvas"),t.gesture.imageWrap=t.gesture.image.parent("."+y.params.zoomContainerClass),t.gesture.zoomMax=t.gesture.imageWrap.attr("data-swiper-zoom")||y.params.zoomMax,0!==t.gesture.imageWrap.length)?(t.gesture.image.transition(0),t.isScaling=!0):t.gesture.image=void 0},onGestureChange:function(e){var a=y.zoom;if(!y.support.gestures){if("touchmove"!==e.type||"touchmove"===e.type&&e.targetTouches.length<2)return;a.gesture.scaleMove=a.getDistanceBetweenTouches(e)}a.gesture.image&&0!==a.gesture.image.length&&(y.support.gestures?a.scale=e.scale*a.currentScale:a.scale=a.gesture.scaleMove/a.gesture.scaleStart*a.currentScale,a.scale>a.gesture.zoomMax&&(a.scale=a.gesture.zoomMax-1+Math.pow(a.scale-a.gesture.zoomMax+1,.5)),a.scalea.image.touchesStart.x)return void(a.image.isTouched=!1);if(!y.isHorizontal()&&Math.floor(a.image.minY)===Math.floor(a.image.startY)&&a.image.touchesCurrent.ya.image.touchesStart.y)return void(a.image.isTouched=!1)}e.preventDefault(),e.stopPropagation(),a.image.isMoved=!0,a.image.currentX=a.image.touchesCurrent.x-a.image.touchesStart.x+a.image.startX,a.image.currentY=a.image.touchesCurrent.y-a.image.touchesStart.y+a.image.startY,a.image.currentXa.image.maxX&&(a.image.currentX=a.image.maxX-1+Math.pow(a.image.currentX-a.image.maxX+1,.8)),a.image.currentYa.image.maxY&&(a.image.currentY=a.image.maxY-1+Math.pow(a.image.currentY-a.image.maxY+1,.8)),a.velocity.prevPositionX||(a.velocity.prevPositionX=a.image.touchesCurrent.x),a.velocity.prevPositionY||(a.velocity.prevPositionY=a.image.touchesCurrent.y),a.velocity.prevTime||(a.velocity.prevTime=Date.now()),a.velocity.x=(a.image.touchesCurrent.x-a.velocity.prevPositionX)/(Date.now()-a.velocity.prevTime)/2,a.velocity.y=(a.image.touchesCurrent.y-a.velocity.prevPositionY)/(Date.now()-a.velocity.prevTime)/2,Math.abs(a.image.touchesCurrent.x-a.velocity.prevPositionX)<2&&(a.velocity.x=0),Math.abs(a.image.touchesCurrent.y-a.velocity.prevPositionY)<2&&(a.velocity.y=0),a.velocity.prevPositionX=a.image.touchesCurrent.x,a.velocity.prevPositionY=a.image.touchesCurrent.y,a.velocity.prevTime=Date.now(),a.gesture.imageWrap.transform("translate3d("+a.image.currentX+"px, "+a.image.currentY+"px,0)")}}},onTouchEnd:function(e,a){var t=e.zoom;if(t.gesture.image&&0!==t.gesture.image.length){if(!t.image.isTouched||!t.image.isMoved)return t.image.isTouched=!1,void(t.image.isMoved=!1);t.image.isTouched=!1,t.image.isMoved=!1;var s=300,r=300,i=t.velocity.x*s,n=t.image.currentX+i,o=t.velocity.y*r,l=t.image.currentY+o;0!==t.velocity.x&&(s=Math.abs((n-t.image.currentX)/t.velocity.x)),0!==t.velocity.y&&(r=Math.abs((l-t.image.currentY)/t.velocity.y));var p=Math.max(s,r);t.image.currentX=n,t.image.currentY=l;var d=t.image.width*t.scale,m=t.image.height*t.scale;t.image.minX=Math.min(t.gesture.slideWidth/2-d/2,0),t.image.maxX=-t.image.minX,t.image.minY=Math.min(t.gesture.slideHeight/2-m/2,0),t.image.maxY=-t.image.minY,t.image.currentX=Math.max(Math.min(t.image.currentX,t.image.maxX),t.image.minX),t.image.currentY=Math.max(Math.min(t.image.currentY,t.image.maxY),t.image.minY),t.gesture.imageWrap.transition(p).transform("translate3d("+t.image.currentX+"px, "+t.image.currentY+"px,0)")}},onTransitionEnd:function(e){var a=e.zoom;a.gesture.slide&&e.previousIndex!==e.activeIndex&&(a.gesture.image.transform("translate3d(0,0,0) scale(1)"),a.gesture.imageWrap.transform("translate3d(0,0,0)"),a.gesture.slide=a.gesture.image=a.gesture.imageWrap=void 0,a.scale=a.currentScale=1)},toggleZoom:function(a,t){var s=a.zoom;if(s.gesture.slide||(s.gesture.slide=a.clickedSlide?e(a.clickedSlide):a.slides.eq(a.activeIndex),s.gesture.image=s.gesture.slide.find("img, svg, canvas"),s.gesture.imageWrap=s.gesture.image.parent("."+a.params.zoomContainerClass)),s.gesture.image&&0!==s.gesture.image.length){var r,i,n,o,l,p,d,m,u,c,g,h,v,f,w,x,y,T;void 0===s.image.touchesStart.x&&t?(r="touchend"===t.type?t.changedTouches[0].pageX:t.pageX,i="touchend"===t.type?t.changedTouches[0].pageY:t.pageY):(r=s.image.touchesStart.x,i=s.image.touchesStart.y),s.scale&&1!==s.scale?(s.scale=s.currentScale=1,s.gesture.imageWrap.transition(300).transform("translate3d(0,0,0)"),s.gesture.image.transition(300).transform("translate3d(0,0,0) scale(1)"),s.gesture.slide=void 0):(s.scale=s.currentScale=s.gesture.imageWrap.attr("data-swiper-zoom")||a.params.zoomMax,t?(y=s.gesture.slide[0].offsetWidth,T=s.gesture.slide[0].offsetHeight,n=s.gesture.slide.offset().left,o=s.gesture.slide.offset().top,l=n+y/2-r,p=o+T/2-i,u=s.gesture.image[0].offsetWidth,c=s.gesture.image[0].offsetHeight,g=u*s.scale,h=c*s.scale,v=Math.min(y/2-g/2,0),f=Math.min(T/2-h/2,0),w=-v,x=-f,d=l*s.scale,m=p*s.scale,dw&&(d=w),mx&&(m=x)):(d=0,m=0),s.gesture.imageWrap.transition(300).transform("translate3d("+d+"px, "+m+"px,0)"),s.gesture.image.transition(300).transform("translate3d(0,0,0) scale("+s.scale+")"))}},attachEvents:function(a){var t=a?"off":"on";if(y.params.zoom){var s=(y.slides,!("touchstart"!==y.touchEvents.start||!y.support.passiveListener||!y.params.passiveListeners)&&{passive:!0,capture:!1});y.support.gestures?(y.slides[t]("gesturestart",y.zoom.onGestureStart,s),y.slides[t]("gesturechange",y.zoom.onGestureChange,s),y.slides[t]("gestureend",y.zoom.onGestureEnd,s)):"touchstart"===y.touchEvents.start&&(y.slides[t](y.touchEvents.start,y.zoom.onGestureStart,s),y.slides[t](y.touchEvents.move,y.zoom.onGestureChange,s),y.slides[t](y.touchEvents.end,y.zoom.onGestureEnd,s)),y[t]("touchStart",y.zoom.onTouchStart),y.slides.each(function(a,s){e(s).find("."+y.params.zoomContainerClass).length>0&&e(s)[t](y.touchEvents.move,y.zoom.onTouchMove)}),y[t]("touchEnd",y.zoom.onTouchEnd),y[t]("transitionEnd",y.zoom.onTransitionEnd),y.params.zoomToggle&&y.on("doubleTap",y.zoom.toggleZoom)}},init:function(){y.zoom.attachEvents()},destroy:function(){y.zoom.attachEvents(!0)}},y._plugins=[];for(var Y in y.plugins){var A=y.plugins[Y](y,y.params[Y]);A&&y._plugins.push(A)}return y.callPlugins=function(e){for(var a=0;a'),notify:function(e){var a=y.a11y.liveRegion;0!==a.length&&(a.html(""),a.html(e))},init:function(){y.params.nextButton&&y.nextButton&&y.nextButton.length>0&&(y.a11y.makeFocusable(y.nextButton),y.a11y.addRole(y.nextButton,"button"),y.a11y.addLabel(y.nextButton,y.params.nextSlideMessage)),y.params.prevButton&&y.prevButton&&y.prevButton.length>0&&(y.a11y.makeFocusable(y.prevButton),y.a11y.addRole(y.prevButton,"button"),y.a11y.addLabel(y.prevButton,y.params.prevSlideMessage)),e(y.container).append(y.a11y.liveRegion)},initPagination:function(){y.params.pagination&&y.params.paginationClickable&&y.bullets&&y.bullets.length&&y.bullets.each(function(){var a=e(this);y.a11y.makeFocusable(a),y.a11y.addRole(a,"button"),y.a11y.addLabel(a,y.params.paginationBulletMessage.replace(/{{index}}/,a.index()+1))})},destroy:function(){y.a11y.liveRegion&&y.a11y.liveRegion.length>0&&y.a11y.liveRegion.remove()}},y.init=function(){y.params.loop&&y.createLoop(),y.updateContainerSize(),y.updateSlidesSize(),y.updatePagination(),y.params.scrollbar&&y.scrollbar&&(y.scrollbar.set(),y.params.scrollbarDraggable&&y.scrollbar.enableDraggable()),"slide"!==y.params.effect&&y.effects[y.params.effect]&&(y.params.loop||y.updateProgress(),y.effects[y.params.effect].setTranslate()),y.params.loop?y.slideTo(y.params.initialSlide+y.loopedSlides,0,y.params.runCallbacksOnInit):(y.slideTo(y.params.initialSlide,0,y.params.runCallbacksOnInit),0===y.params.initialSlide&&(y.parallax&&y.params.parallax&&y.parallax.setTranslate(),y.lazy&&y.params.lazyLoading&&(y.lazy.load(),y.lazy.initialImageLoaded=!0))),y.attachEvents(),y.params.observer&&y.support.observer&&y.initObservers(),y.params.preloadImages&&!y.params.lazyLoading&&y.preloadImages(),y.params.zoom&&y.zoom&&y.zoom.init(),y.params.autoplay&&y.startAutoplay(),y.params.keyboardControl&&y.enableKeyboardControl&&y.enableKeyboardControl(),y.params.mousewheelControl&&y.enableMousewheelControl&&y.enableMousewheelControl(),y.params.hashnavReplaceState&&(y.params.replaceState=y.params.hashnavReplaceState),y.params.history&&y.history&&y.history.init(),y.params.hashnav&&y.hashnav&&y.hashnav.init(),y.params.a11y&&y.a11y&&y.a11y.init(),y.emit("onInit",y)},y.cleanupStyles=function(){y.container.removeClass(y.classNames.join(" ")).removeAttr("style"),y.wrapper.removeAttr("style"),y.slides&&y.slides.length&&y.slides.removeClass([y.params.slideVisibleClass,y.params.slideActiveClass,y.params.slideNextClass,y.params.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-column").removeAttr("data-swiper-row"),y.paginationContainer&&y.paginationContainer.length&&y.paginationContainer.removeClass(y.params.paginationHiddenClass),y.bullets&&y.bullets.length&&y.bullets.removeClass(y.params.bulletActiveClass),y.params.prevButton&&e(y.params.prevButton).removeClass(y.params.buttonDisabledClass),y.params.nextButton&&e(y.params.nextButton).removeClass(y.params.buttonDisabledClass),y.params.scrollbar&&y.scrollbar&&(y.scrollbar.track&&y.scrollbar.track.length&&y.scrollbar.track.removeAttr("style"),y.scrollbar.drag&&y.scrollbar.drag.length&&y.scrollbar.drag.removeAttr("style"))},y.destroy=function(e,a){y.detachEvents(),y.stopAutoplay(),y.params.scrollbar&&y.scrollbar&&y.params.scrollbarDraggable&&y.scrollbar.disableDraggable(),y.params.loop&&y.destroyLoop(),a&&y.cleanupStyles(),y.disconnectObservers(),y.params.zoom&&y.zoom&&y.zoom.destroy(),y.params.keyboardControl&&y.disableKeyboardControl&&y.disableKeyboardControl(),y.params.mousewheelControl&&y.disableMousewheelControl&&y.disableMousewheelControl(),y.params.a11y&&y.a11y&&y.a11y.destroy(),y.params.history&&!y.params.replaceState&&window.removeEventListener("popstate",y.history.setHistoryPopState),y.params.hashnav&&y.hashnav&&y.hashnav.destroy(),y.emit("onDestroy"),!1!==e&&(y=null)},y.init(),y}};a.prototype={isSafari:function(){var e=window.navigator.userAgent.toLowerCase();return e.indexOf("safari")>=0&&e.indexOf("chrome")<0&&e.indexOf("android")<0}(),isUiWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent),isArray:function(e){return"[object Array]"===Object.prototype.toString.apply(e)},browser:{ie:window.navigator.pointerEnabled||window.navigator.msPointerEnabled,ieTouch:window.navigator.msPointerEnabled&&window.navigator.msMaxTouchPoints>1||window.navigator.pointerEnabled&&window.navigator.maxTouchPoints>1,lteIE9:function(){var e=document.createElement("div");return e.innerHTML="\x3c!--[if lte IE 9]>0?e?this[0].offsetWidth+parseFloat(this.css("margin-right"))+parseFloat(this.css("margin-left")):this[0].offsetWidth:null})),window.Swiper=a}(),"undefined"!=typeof module?module.exports=window.Swiper:"function"==typeof define&&define.amd&&define([],function(){"use strict";return window.Swiper}); - - -/** - * @module WOW - * @author Matthieu Aussaguel - * @license MIT - * @version 1.1.3 - */ -(function(){var a,b,c,d,e,f=function(a,b){return function(){return a.apply(b,arguments)}},g=[].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1};b=function(){function a(){}return a.prototype.extend=function(a,b){var c,d;for(c in b)d=b[c],null==a[c]&&(a[c]=d);return a},a.prototype.isMobile=function(a){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(a)},a.prototype.createEvent=function(a,b,c,d){var e;return null==b&&(b=!1),null==c&&(c=!1),null==d&&(d=null),null!=document.createEvent?(e=document.createEvent("CustomEvent"),e.initCustomEvent(a,b,c,d)):null!=document.createEventObject?(e=document.createEventObject(),e.eventType=a):e.eventName=a,e},a.prototype.emitEvent=function(a,b){return null!=a.dispatchEvent?a.dispatchEvent(b):b in(null!=a)?a[b]():"on"+b in(null!=a)?a["on"+b]():void 0},a.prototype.addEvent=function(a,b,c){return null!=a.addEventListener?a.addEventListener(b,c,!1):null!=a.attachEvent?a.attachEvent("on"+b,c):a[b]=c},a.prototype.removeEvent=function(a,b,c){return null!=a.removeEventListener?a.removeEventListener(b,c,!1):null!=a.detachEvent?a.detachEvent("on"+b,c):delete a[b]},a.prototype.innerHeight=function(){return"innerHeight"in window?window.innerHeight:document.documentElement.clientHeight},a}(),c=this.WeakMap||this.MozWeakMap||(c=function(){function a(){this.keys=[],this.values=[]}return a.prototype.get=function(a){var b,c,d,e,f;for(f=this.keys,b=d=0,e=f.length;e>d;b=++d)if(c=f[b],c===a)return this.values[b]},a.prototype.set=function(a,b){var c,d,e,f,g;for(g=this.keys,c=e=0,f=g.length;f>e;c=++e)if(d=g[c],d===a)return void(this.values[c]=b);return this.keys.push(a),this.values.push(b)},a}()),a=this.MutationObserver||this.WebkitMutationObserver||this.MozMutationObserver||(a=function(){function a(){"undefined"!=typeof console&&null!==console&&console.warn("MutationObserver is not supported by your browser."),"undefined"!=typeof console&&null!==console&&console.warn("WOW.js cannot detect dom mutations, please call .sync() after loading new content.")}return a.notSupported=!0,a.prototype.observe=function(){},a}()),d=this.getComputedStyle||function(a,b){return this.getPropertyValue=function(b){var c;return"float"===b&&(b="styleFloat"),e.test(b)&&b.replace(e,function(a,b){return b.toUpperCase()}),(null!=(c=a.currentStyle)?c[b]:void 0)||null},this},e=/(\-([a-z]){1})/g,this.WOW=function(){function e(a){null==a&&(a={}),this.scrollCallback=f(this.scrollCallback,this),this.scrollHandler=f(this.scrollHandler,this),this.resetAnimation=f(this.resetAnimation,this),this.start=f(this.start,this),this.scrolled=!0,this.config=this.util().extend(a,this.defaults),null!=a.scrollContainer&&(this.config.scrollContainer=document.querySelector(a.scrollContainer)),this.animationNameCache=new c,this.wowEvent=this.util().createEvent(this.config.boxClass)}return e.prototype.defaults={boxClass:"wow",animateClass:"animated",offset:0,mobile:!0,live:!0,callback:null,scrollContainer:null},e.prototype.init=function(){var a;return this.element=window.document.documentElement,"interactive"===(a=document.readyState)||"complete"===a?this.start():this.util().addEvent(document,"DOMContentLoaded",this.start),this.finished=[]},e.prototype.start=function(){var b,c,d,e;if(this.stopped=!1,this.boxes=function(){var a,c,d,e;for(d=this.element.querySelectorAll("."+this.config.boxClass),e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(b);return e}.call(this),this.all=function(){var a,c,d,e;for(d=this.boxes,e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(b);return e}.call(this),this.boxes.length)if(this.disabled())this.resetStyle();else for(e=this.boxes,c=0,d=e.length;d>c;c++)b=e[c],this.applyStyle(b,!0);return this.disabled()||(this.util().addEvent(this.config.scrollContainer||window,"scroll",this.scrollHandler),this.util().addEvent(window,"resize",this.scrollHandler),this.interval=setInterval(this.scrollCallback,50)),this.config.live?new a(function(a){return function(b){var c,d,e,f,g;for(g=[],c=0,d=b.length;d>c;c++)f=b[c],g.push(function(){var a,b,c,d;for(c=f.addedNodes||[],d=[],a=0,b=c.length;b>a;a++)e=c[a],d.push(this.doSync(e));return d}.call(a));return g}}(this)).observe(document.body,{childList:!0,subtree:!0}):void 0},e.prototype.stop=function(){return this.stopped=!0,this.util().removeEvent(this.config.scrollContainer||window,"scroll",this.scrollHandler),this.util().removeEvent(window,"resize",this.scrollHandler),null!=this.interval?clearInterval(this.interval):void 0},e.prototype.sync=function(b){return a.notSupported?this.doSync(this.element):void 0},e.prototype.doSync=function(a){var b,c,d,e,f;if(null==a&&(a=this.element),1===a.nodeType){for(a=a.parentNode||a,e=a.querySelectorAll("."+this.config.boxClass),f=[],c=0,d=e.length;d>c;c++)b=e[c],g.call(this.all,b)<0?(this.boxes.push(b),this.all.push(b),this.stopped||this.disabled()?this.resetStyle():this.applyStyle(b,!0),f.push(this.scrolled=!0)):f.push(void 0);return f}},e.prototype.show=function(a){return this.applyStyle(a),a.className=a.className+" "+this.config.animateClass,null!=this.config.callback&&this.config.callback(a),this.util().emitEvent(a,this.wowEvent),this.util().addEvent(a,"animationend",this.resetAnimation),this.util().addEvent(a,"oanimationend",this.resetAnimation),this.util().addEvent(a,"webkitAnimationEnd",this.resetAnimation),this.util().addEvent(a,"MSAnimationEnd",this.resetAnimation),a},e.prototype.applyStyle=function(a,b){var c,d,e;return d=a.getAttribute("data-wow-duration"),c=a.getAttribute("data-wow-delay"),e=a.getAttribute("data-wow-iteration"),this.animate(function(f){return function(){return f.customStyle(a,b,d,c,e)}}(this))},e.prototype.animate=function(){return"requestAnimationFrame"in window?function(a){return window.requestAnimationFrame(a)}:function(a){return a()}}(),e.prototype.resetStyle=function(){var a,b,c,d,e;for(d=this.boxes,e=[],b=0,c=d.length;c>b;b++)a=d[b],e.push(a.style.visibility="visible");return e},e.prototype.resetAnimation=function(a){var b;return a.type.toLowerCase().indexOf("animationend")>=0?(b=a.target||a.srcElement,b.className=b.className.replace(this.config.animateClass,"").trim()):void 0},e.prototype.customStyle=function(a,b,c,d,e){return b&&this.cacheAnimationName(a),a.style.visibility=b?"hidden":"visible",c&&this.vendorSet(a.style,{animationDuration:c}),d&&this.vendorSet(a.style,{animationDelay:d}),e&&this.vendorSet(a.style,{animationIterationCount:e}),this.vendorSet(a.style,{animationName:b?"none":this.cachedAnimationName(a)}),a},e.prototype.vendors=["moz","webkit"],e.prototype.vendorSet=function(a,b){var c,d,e,f;d=[];for(c in b)e=b[c],a[""+c]=e,d.push(function(){var b,d,g,h;for(g=this.vendors,h=[],b=0,d=g.length;d>b;b++)f=g[b],h.push(a[""+f+c.charAt(0).toUpperCase()+c.substr(1)]=e);return h}.call(this));return d},e.prototype.vendorCSS=function(a,b){var c,e,f,g,h,i;for(h=d(a),g=h.getPropertyCSSValue(b),f=this.vendors,c=0,e=f.length;e>c;c++)i=f[c],g=g||h.getPropertyCSSValue("-"+i+"-"+b);return g},e.prototype.animationName=function(a){var b;try{b=this.vendorCSS(a,"animation-name").cssText}catch(c){b=d(a).getPropertyValue("animation-name")}return"none"===b?"":b},e.prototype.cacheAnimationName=function(a){return this.animationNameCache.set(a,this.animationName(a))},e.prototype.cachedAnimationName=function(a){return this.animationNameCache.get(a)},e.prototype.scrollHandler=function(){return this.scrolled=!0},e.prototype.scrollCallback=function(){var a;return!this.scrolled||(this.scrolled=!1,this.boxes=function(){var b,c,d,e;for(d=this.boxes,e=[],b=0,c=d.length;c>b;b++)a=d[b],a&&(this.isVisible(a)?this.show(a):e.push(a));return e}.call(this),this.boxes.length||this.config.live)?void 0:this.stop()},e.prototype.offsetTop=function(a){for(var b;void 0===a.offsetTop;)a=a.parentNode;for(b=a.offsetTop;a=a.offsetParent;)b+=a.offsetTop;return b},e.prototype.isVisible=function(a){var b,c,d,e,f;return c=a.getAttribute("data-wow-offset")||this.config.offset,f=this.config.scrollContainer&&this.config.scrollContainer.scrollTop||window.pageYOffset,e=f+Math.min(this.element.clientHeight,this.util().innerHeight())-c,d=this.offsetTop(a),b=d+a.clientHeight,e>=d&&b>=f},e.prototype.util=function(){return null!=this._util?this._util:this._util=new b},e.prototype.disabled=function(){return!this.config.mobile&&this.util().isMobile(navigator.userAgent)},e}()}).call(this); - - -/** - * @module Owl carousel - * @version 2.2.1 - * @author Bartosz Wojciechowski - * @license MIT - */ -!function(a,b,c,d){function e(b,c){this.settings=null,this.options=a.extend({},e.Defaults,c),this.$element=a(b),this._handlers={},this._plugins={},this._supress={},this._current=null,this._speed=null,this._coordinates=[],this._breakpoint=null,this._width=null,this._items=[],this._clones=[],this._mergers=[],this._widths=[],this._invalidated={},this._pipe=[],this._drag={time:null,target:null,pointer:null,stage:{start:null,current:null},direction:null},this._states={current:{},tags:{initializing:["busy"],animating:["busy"],dragging:["interacting"]}},a.each(["onResize","onThrottledResize"],a.proxy(function(b,c){this._handlers[c]=a.proxy(this[c],this)},this)),a.each(e.Plugins,a.proxy(function(a,b){this._plugins[a.charAt(0).toLowerCase()+a.slice(1)]=new b(this)},this)),a.each(e.Workers,a.proxy(function(b,c){this._pipe.push({filter:c.filter,run:a.proxy(c.run,this)})},this)),this.setup(),this.initialize()}e.Defaults={items:3,loop:!1,center:!1,rewind:!1,mouseDrag:!0,touchDrag:!0,pullDrag:!0,freeDrag:!1,margin:0,stagePadding:0,merge:!1,mergeFit:!0,autoWidth:!1,startPosition:0,rtl:!1,smartSpeed:250,fluidSpeed:!1,dragEndSpeed:!1,responsive:{},responsiveRefreshRate:200,responsiveBaseElement:b,fallbackEasing:"swing",info:!1,nestedItemSelector:!1,itemElement:"div",stageElement:"div",refreshClass:"owl-refresh",loadedClass:"owl-loaded",loadingClass:"owl-loading",rtlClass:"owl-rtl",responsiveClass:"owl-responsive",dragClass:"owl-drag",itemClass:"owl-item",stageClass:"owl-stage",stageOuterClass:"owl-stage-outer",grabClass:"owl-grab"},e.Width={Default:"default",Inner:"inner",Outer:"outer"},e.Type={Event:"event",State:"state"},e.Plugins={},e.Workers=[{filter:["width","settings"],run:function(){this._width=this.$element.width()}},{filter:["width","items","settings"],run:function(a){a.current=this._items&&this._items[this.relative(this._current)]}},{filter:["items","settings"],run:function(){this.$stage.children(".cloned").remove()}},{filter:["width","items","settings"],run:function(a){var b=this.settings.margin||"",c=!this.settings.autoWidth,d=this.settings.rtl,e={width:"auto","margin-left":d?b:"","margin-right":d?"":b};!c&&this.$stage.children().css(e),a.css=e}},{filter:["width","items","settings"],run:function(a){var b=(this.width()/this.settings.items).toFixed(3)-this.settings.margin,c=null,d=this._items.length,e=!this.settings.autoWidth,f=[];for(a.items={merge:!1,width:b};d--;)c=this._mergers[d],c=this.settings.mergeFit&&Math.min(c,this.settings.items)||c,a.items.merge=c>1||a.items.merge,f[d]=e?b*c:this._items[d].width();this._widths=f}},{filter:["items","settings"],run:function(){var b=[],c=this._items,d=this.settings,e=Math.max(2*d.items,4),f=2*Math.ceil(c.length/2),g=d.loop&&c.length?d.rewind?e:Math.max(e,f):0,h="",i="";for(g/=2;g--;)b.push(this.normalize(b.length/2,!0)),h+=c[b[b.length-1]][0].outerHTML,b.push(this.normalize(c.length-1-(b.length-1)/2,!0)),i=c[b[b.length-1]][0].outerHTML+i;this._clones=b,a(h).addClass("cloned").appendTo(this.$stage),a(i).addClass("cloned").prependTo(this.$stage)}},{filter:["width","items","settings"],run:function(){for(var a=this.settings.rtl?1:-1,b=this._clones.length+this._items.length,c=-1,d=0,e=0,f=[];++c",h)||this.op(b,"<",g)&&this.op(b,">",h))&&i.push(c);this.$stage.children(".active").removeClass("active"),this.$stage.children(":eq("+i.join("), :eq(")+")").addClass("active"),this.settings.center&&(this.$stage.children(".center").removeClass("center"),this.$stage.children().eq(this.current()).addClass("center"))}}],e.prototype.initialize=function(){if(this.enter("initializing"),this.trigger("initialize"),this.$element.toggleClass(this.settings.rtlClass,this.settings.rtl),this.settings.autoWidth&&!this.is("pre-loading")){var b,c,e;b=this.$element.find("img"),c=this.settings.nestedItemSelector?"."+this.settings.nestedItemSelector:d,e=this.$element.children(c).width(),b.length&&e<=0&&this.preloadAutoWidthImages(b)}this.$element.addClass(this.options.loadingClass),this.$stage=a("<"+this.settings.stageElement+' class="'+this.settings.stageClass+'"/>').wrap('
- - - - - -
-
-
-
-
-

successful cases

- -
-
-
-
-
- - - -
-
-

Latest News

-
- fetchAll($website->id, 'DESC', 'date_creation', $MAXNEWS, 0, array('type_container'=>'blogpost', 'lang'=>'en_US')); - foreach($arrayofblogs as $blog) - { - $fuser->fetch($blog->fk_user_creat); - ?> - - - -
-
-
- - - - - - - - - - - - - - diff --git a/htdocs/install/doctemplates/websites/template/page125.tpl.php b/htdocs/install/doctemplates/websites/template/page125.tpl.php deleted file mode 100644 index dd472fedebc..00000000000 --- a/htdocs/install/doctemplates/websites/template/page125.tpl.php +++ /dev/null @@ -1,97 +0,0 @@ - - - -Privacy Policies - - - - - - - - - - - - -/ims', '', file_get_contents(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")); ?> - - - - - -
- - - - - -
-
-
-
-
-
-
-
-
Privacy Policy -
-
-
-
-
-
-
-
- -


- -
-
-

Information collected and used


-

* Your customer information (email, phone, business name, first and last name of contact, address, postal code, country and VAT number) are stored when you become a customer. This information allows us to bill you. -

* If you paid using our online service, we also store the last 4 digits of your card. The full details of your credit card is stored by our payment provider Stripe (the world leader in online payment).

-

* You have the option to request the deletion of your data and the above information at any time (except data required y fiscal tracking rules, like your invoices).

-

* The Privacy Policies and GDPR referral contact for our services is: global->MAIN_INFO_GDPR; ?>

-


-

Data Storage and Backups


-

* The storage of collected data (see 'Information collected and used') is done in a database.

-

* We made one backup every week. Only 4 weeks are kept.

-


-

Subcontractor


-

* Our services relies on the following subcontractors and service:
-** The host of computer servers, which is ABC company. These servers are hosted in US. No customer information is communicated to this subcontractor who only provides the hardware and network layer, the installation and operation being carried out by us directly.
-** The online payment service Stripe, which is used, to ensure regular payment of subscription or your invoices paid online.

-


-

Software Protection


-

* Our services runs on Linux Ubuntu systems and software. They benefit from regular security updates when the operating system editor (Ubuntu Canonical) publishes them.

-

* Our services are accessible in HTTPS (HTTP encrypted) only, encrypted with SHA256 certificates.

-

* Our technical platform are protected by various solutions.

-


-

Data theft


-

* In case of suspicion of a theft of the data we have collected (see first point 'Information collected and used'), customers will be informed by email, at email corresponding to their customer account

-

 

-
-
- - - - - -
- - - - - - - - diff --git a/htdocs/install/doctemplates/websites/template/page126.tpl.php b/htdocs/install/doctemplates/websites/template/page126.tpl.php deleted file mode 100644 index fa34ef6f856..00000000000 --- a/htdocs/install/doctemplates/websites/template/page126.tpl.php +++ /dev/null @@ -1,35 +0,0 @@ - - - -test - - - - - - - - - - - - -/ims', '', file_get_contents(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")); ?> - - - - - -defaultlang); ?> -defaultlang); ?> - - - diff --git a/htdocs/install/doctemplates/websites/template/page136.tpl.php b/htdocs/install/doctemplates/websites/template/page136.tpl.php deleted file mode 100644 index e32aa297ffc..00000000000 --- a/htdocs/install/doctemplates/websites/template/page136.tpl.php +++ /dev/null @@ -1,82 +0,0 @@ - - - -Contact - - - - - - - - - - - - -/ims', '', file_get_contents(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")); ?> - - - - - -
- - - -
-
-
-
-
-
-
-
-
Contact -
-
-
-
-
-
-
-
- - -
-
-

Contact us:



- email ?>
- getFullAddress() ?>
-
-
- - - -
-
- -
- -


- - - -
- - - - - - - - - diff --git a/htdocs/install/doctemplates/websites/template/page147.tpl.php b/htdocs/install/doctemplates/websites/template/page147.tpl.php deleted file mode 100644 index 6781f8ed79b..00000000000 --- a/htdocs/install/doctemplates/websites/template/page147.tpl.php +++ /dev/null @@ -1,128 +0,0 @@ - - - -Header and Top Menu - - - - - - - - - - - - -/ims', '', file_get_contents(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")); ?> - - - - - - - - - - -
-
-
- - -
-
-
- - - - diff --git a/htdocs/install/doctemplates/websites/template/page148.tpl.php b/htdocs/install/doctemplates/websites/template/page148.tpl.php deleted file mode 100644 index 1f80ccc6238..00000000000 --- a/htdocs/install/doctemplates/websites/template/page148.tpl.php +++ /dev/null @@ -1,120 +0,0 @@ - - - -Footer - - - - - - - - - - - - -/ims', '', file_get_contents(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")); ?> - - - - - - -
- - - -
- - - - diff --git a/htdocs/install/doctemplates/websites/template/page149.tpl.php b/htdocs/install/doctemplates/websites/template/page149.tpl.php deleted file mode 100644 index 12e18dbaf87..00000000000 --- a/htdocs/install/doctemplates/websites/template/page149.tpl.php +++ /dev/null @@ -1,88 +0,0 @@ - - - -FAQ - - - - - - - - - - - -/ims', '', file_get_contents(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")); ?> - - - - - -
- - - -
-
-
-
-
-
-
-
-
FAQs -
-
-
-
-
-
-
-
- - -
-
-


Frequently Asked Questions

-
-
-
-

How can I contact you ?


-You can contact us by using this page. -
-
-
-

What is your privacy policy ?


-You may find information about our privacy policy on this page. - - -



- -
-
- - -

- - - -
- - - - - - - - - - diff --git a/htdocs/install/doctemplates/websites/template/page150.tpl.php b/htdocs/install/doctemplates/websites/template/page150.tpl.php deleted file mode 100644 index 1732ff82327..00000000000 --- a/htdocs/install/doctemplates/websites/template/page150.tpl.php +++ /dev/null @@ -1,75 +0,0 @@ - - - -Our new web site has been launched - - - - - - - - - - - - -/ims', '', file_get_contents(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")); ?> - - - - - - - -
-
-
-
-
-
-
-
-
title; ?> -
-
-
-
-
-
-
-
- -
-





- - - Our new website, based on Dolibarr CMS, has been launched.
- Now it is modern and directly integrated with the internal management tools of the company. Many new online services will be available for our customers... - - - -





-
- - - - - - - - - - - - - - diff --git a/htdocs/install/doctemplates/websites/template/page151.tpl.php b/htdocs/install/doctemplates/websites/template/page151.tpl.php deleted file mode 100644 index 7fcbcdf023d..00000000000 --- a/htdocs/install/doctemplates/websites/template/page151.tpl.php +++ /dev/null @@ -1,99 +0,0 @@ - - - -Blog - - - - - - - - - - - - -/ims', '', file_get_contents(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")); ?> - - - - - -
- - - -
-
-
-
-
-
-
-
-
The latest news... -
-
-
-
-
-
-
-
- - -
-

- - load("main"); - $websitepage = new WebsitePage($db); - $fuser = new User($db); - $arrayofblogs = $websitepage->fetchAll($website->id, 'DESC', 'date_creation', 5, 0, array('type_container'=>'blogpost')); - foreach($arrayofblogs as $blog) - { - print ''; - } - ?> -
-
- -

- - - -
- - - - - - - - - diff --git a/htdocs/install/doctemplates/websites/template/page152.tpl.php b/htdocs/install/doctemplates/websites/template/page152.tpl.php deleted file mode 100644 index c0c9934a5c2..00000000000 --- a/htdocs/install/doctemplates/websites/template/page152.tpl.php +++ /dev/null @@ -1,80 +0,0 @@ - - - -Our company is now on Dolibarr ERP CRM - - - - - - - - - - - - -/ims', '', file_get_contents(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")); ?> - - - - - - - -
-
-
-
-
-
-
-
-
title; ?> -
-
-
-
-
-
-
-
- -
-


- Like several thousands of companies, our company (name ?>) has moved all its information system to Dolibarr ERP CRM. More than 20 applications have been replaced by only one, easier to use and fully integrated. - This is an important step in improving all of our services. - -


- -
- -

-
Screenshot of our new Open Source solution
-
- - - -





-
- - - - - - - - - - - - - diff --git a/htdocs/install/doctemplates/websites/template/page191.tpl.php b/htdocs/install/doctemplates/websites/template/page191.tpl.php deleted file mode 100644 index a4a28a3f1e3..00000000000 --- a/htdocs/install/doctemplates/websites/template/page191.tpl.php +++ /dev/null @@ -1,112 +0,0 @@ - - - -Our team - - - - - - - - - - - -/ims', '', file_get_contents(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")); ?> - - - - - -
- - - -
-
-
-
-
-
-
-
-
Our team -
-
-
-
-
-
-
-
- - -
-

-

The crew...




- query($sql); - if (! $resql) dol_print_error($db); - while ($obj = $db->fetch_object($resql)) - { - $arrayofusers[]=$obj->rowid; - } - - print '
'; - foreach($arrayofusers as $id) - { - $fuser->fetch($id); - - print '
'; - print '
'; - print '
'; - if ($fuser->photo) print Form::showphoto('userphoto', $fuser, 100, 0, 0, 'photowithmargin', '', 0); - //print ''; - else print ''; - print '
'; - print '
'; - print '
'.$fuser->firstname.'
'; - print '
    '; - //print '
  • September 24, 2018
  • '; - if ($fuser->job) print '
  • '.$fuser->job.'
  • '; - else print '
  • '; - print '
'; - print '
'; - print '
'; - print '
'; - } - print '
'; - - ?> -
-
- -

- - - -
- - - - - - - - - diff --git a/htdocs/install/doctemplates/websites/template/page192.tpl.php b/htdocs/install/doctemplates/websites/template/page192.tpl.php deleted file mode 100644 index 53317300621..00000000000 --- a/htdocs/install/doctemplates/websites/template/page192.tpl.php +++ /dev/null @@ -1,81 +0,0 @@ - - - -Careers - - - - - - - - - - - -/ims', '', file_get_contents(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")); ?> - - - - - -
- - - -
-
-
-
-
-
-
-
-
Job opportunities -
-
-
-
-
-
-
-
- - -
-
-
-
-
-There is no job opportunities for the moment...
-
-
-
-
-
-
- - -

- - - -
- - - - - - - - - - diff --git a/htdocs/install/doctemplates/websites/template/page193.tpl.php b/htdocs/install/doctemplates/websites/template/page193.tpl.php deleted file mode 100644 index 74347b800bc..00000000000 --- a/htdocs/install/doctemplates/websites/template/page193.tpl.php +++ /dev/null @@ -1,107 +0,0 @@ - - - -Partners - - - - - - - - - - - -/ims', '', file_get_contents(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")); ?> - - - - - -
- - - -
-
-
-
-
-
-
-
-
Partners -
-
-
-
-
-
-
-
- - -
-
-

Our partners...

-
-
-
-
-
- -
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
-
-
-
-
- - -

- - - -
- - - - - - - - - - diff --git a/htdocs/install/doctemplates/websites/template/page194.tpl.php b/htdocs/install/doctemplates/websites/template/page194.tpl.php deleted file mode 100644 index 5d56a7f8f2e..00000000000 --- a/htdocs/install/doctemplates/websites/template/page194.tpl.php +++ /dev/null @@ -1,183 +0,0 @@ - - - -Pricing - - - - - - - - - - - -/ims', '', file_get_contents(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")); ?> - - - - - -
- - - -
-
-
-
-
-
-
-
-
Our plans -
-
-
-
-
-
-
-
- - - - - -
-
- -
-
- - - -

- - - -
- - - - - - - - - diff --git a/htdocs/install/doctemplates/websites/template/page238.tpl.php b/htdocs/install/doctemplates/websites/template/page238.tpl.php deleted file mode 100644 index 7be1ec9a8a0..00000000000 --- a/htdocs/install/doctemplates/websites/template/page238.tpl.php +++ /dev/null @@ -1,77 +0,0 @@ - - - -Clients Testimonials - - - - - - - - - - - - -/ims', '', file_get_contents(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")); ?> - - - - - -
- - - -
-
-
-
-
-
-
-
-
Testimonials -
-
-
-
-
-
-
-
- - -
-

-

What they say about us

-



- Send us your testimonial (by email to email; ?>) -



-

-
- -

- - - -
- - - - - - - - - - diff --git a/htdocs/install/doctemplates/websites/template/page239.tpl.php b/htdocs/install/doctemplates/websites/template/page239.tpl.php deleted file mode 100644 index 418b792e03f..00000000000 --- a/htdocs/install/doctemplates/websites/template/page239.tpl.php +++ /dev/null @@ -1,81 +0,0 @@ - - - -Product P - - - - - - - - - - - -/ims', '', file_get_contents(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")); ?> - - - - - -
- - - -
-
-
-
-
-
-
-
-
Product P -
-
-
-
-
-
-
-
- - -
-
-
-
-
-This is a description page of our product P...
-
-
-
-
-
-
- - -

- - - -
- - - - - - - - - - diff --git a/htdocs/install/doctemplates/websites/template/page240.tpl.php b/htdocs/install/doctemplates/websites/template/page240.tpl.php deleted file mode 100644 index ece2d0d4c91..00000000000 --- a/htdocs/install/doctemplates/websites/template/page240.tpl.php +++ /dev/null @@ -1,81 +0,0 @@ - - - -Service S - - - - - - - - - - - -/ims', '', file_get_contents(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")); ?> - - - - - -
- - - -
-
-
-
-
-
-
-
-
Service S -
-
-
-
-
-
-
-
- - -
-
-
-
-
-This is a description page of our service S...
-
-
-
-
-
-
- - -

- - - -
- - - - - - - - - - diff --git a/htdocs/install/doctemplates/websites/template/page243.tpl.php b/htdocs/install/doctemplates/websites/template/page243.tpl.php deleted file mode 100644 index a9abdf276ba..00000000000 --- a/htdocs/install/doctemplates/websites/template/page243.tpl.php +++ /dev/null @@ -1,81 +0,0 @@ - - - -Carrière - - - - - - - - - - - -/ims', '', file_get_contents(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")); ?> - - - - - -
- - - -
-
-
-
-
-
-
-
-
Offres d'emploi -
-
-
-
-
-
-
-
- - -
-
-
-
-
-Nous n'avons pas d'offres d'emploi ouvertes en ce moment...
-
-
-
-
-
-
- - -

- - - -
- - - - - - - - - - diff --git a/htdocs/install/doctemplates/websites/template/page244.tpl.php b/htdocs/install/doctemplates/websites/template/page244.tpl.php deleted file mode 100644 index 0fbcf5e0823..00000000000 --- a/htdocs/install/doctemplates/websites/template/page244.tpl.php +++ /dev/null @@ -1,70 +0,0 @@ - - - -search - - - - - - - - - - - - -/ims', '', file_get_contents(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")); ?> - - - - - -
- - - -
-
-
-
-
-
-
-
-
Search -
-
-
-
-
-
-
-
- -


- -
- Search is not yet available... -





-
- - - -
- - - - - - - - diff --git a/htdocs/install/doctemplates/websites/template/partners.php b/htdocs/install/doctemplates/websites/template/partners.php deleted file mode 100644 index 59dc87944fe..00000000000 --- a/htdocs/install/doctemplates/websites/template/partners.php +++ /dev/null @@ -1,5 +0,0 @@ -ref.'/page193.tpl.php'; -?> diff --git a/htdocs/install/doctemplates/websites/template/pricing.php b/htdocs/install/doctemplates/websites/template/pricing.php deleted file mode 100644 index beac94b27c8..00000000000 --- a/htdocs/install/doctemplates/websites/template/pricing.php +++ /dev/null @@ -1,5 +0,0 @@ -ref.'/page194.tpl.php'; -?> diff --git a/htdocs/install/doctemplates/websites/template/privacy-policies.php b/htdocs/install/doctemplates/websites/template/privacy-policies.php deleted file mode 100644 index 867c6d0e96e..00000000000 --- a/htdocs/install/doctemplates/websites/template/privacy-policies.php +++ /dev/null @@ -1,5 +0,0 @@ -ref.'/page125.tpl.php'; -?> diff --git a/htdocs/install/doctemplates/websites/template/product-p.php b/htdocs/install/doctemplates/websites/template/product-p.php deleted file mode 100644 index be8afb6d50d..00000000000 --- a/htdocs/install/doctemplates/websites/template/product-p.php +++ /dev/null @@ -1,5 +0,0 @@ -ref.'/page239.tpl.php'; -?> diff --git a/htdocs/install/doctemplates/websites/template/robots.txt b/htdocs/install/doctemplates/websites/template/robots.txt deleted file mode 100644 index f1d58142a79..00000000000 --- a/htdocs/install/doctemplates/websites/template/robots.txt +++ /dev/null @@ -1,4 +0,0 @@ -# Robot file. Generated with Dolibarr -User-agent: * -Allow: /public/ -Disallow: /administrator/ \ No newline at end of file diff --git a/htdocs/install/doctemplates/websites/template/search.php b/htdocs/install/doctemplates/websites/template/search.php deleted file mode 100644 index 6f74a5c4c56..00000000000 --- a/htdocs/install/doctemplates/websites/template/search.php +++ /dev/null @@ -1,5 +0,0 @@ -ref.'/page244.tpl.php'; -?> diff --git a/htdocs/install/doctemplates/websites/template/service-s.php b/htdocs/install/doctemplates/websites/template/service-s.php deleted file mode 100644 index 64219bb6d34..00000000000 --- a/htdocs/install/doctemplates/websites/template/service-s.php +++ /dev/null @@ -1,5 +0,0 @@ -ref.'/page240.tpl.php'; -?> diff --git a/htdocs/install/doctemplates/websites/template/styles.css.php b/htdocs/install/doctemplates/websites/template/styles.css.php deleted file mode 100644 index 74959f7a1ee..00000000000 --- a/htdocs/install/doctemplates/websites/template/styles.css.php +++ /dev/null @@ -1,20910 +0,0 @@ - -/* CSS content (all pages) */ -body.bodywebsite { margin: 0; font-family: 'Open Sans', sans-serif; } -.bodywebsite h1 { margin-top: 0; margin-bottom: 0; padding: 10px;} -.bodywebsite a:focus, -.bodywebsite button:focus { - outline: none !important; -} -.bodywebsite button::-moz-focus-inner { - border: 0; -} -.bodywebsite :focus { - outline: none; -} -.bodywebsite input, -.bodywebsite select, -.bodywebsite textarea { - outline: 0; -} -.bodywebsite p { - margin: 0; -} -.bodywebsite q { - font-size: 18px; - color: #fff; -} -.bodywebsite dl { - margin-bottom: 0; -} -.bodywebsite dt { - font-weight: 400; -} -html .bodywebsite p a:hover { - text-decoration: none; -} -.bodywebsite form { - margin-bottom: 0; -} -.bodywebsite .text-left { - text-align: left; -} -.bodywebsite .text-center { - text-align: center; -} -.bodywebsite .text-right { - text-align: right; -} -.bodywebsite .page .text-middle { - vertical-align: middle; -} -.bodywebsite .page { - overflow: hidden; -} -.bodywebsite .page-head { - position: relative; - z-index: 90; - /* must be lower than 100 */ - background-color: #fff; -} -.bodywebsite .page-content { - position: relative; - z-index: 1; -} -.bodywebsite .page-foot { - background-color: #000; -} -.bodywebsite input, -.bodywebsite button, -.bodywebsite select, -.bodywebsite textarea { - font-family: inherit; - font-size: inherit; - line-height: inherit; -} -.bodywebsite a { - display: inline-block; - text-decoration: none; - transition: 0.33s all ease-out; -} -.bodywebsite a, -.bodywebsite a:active, -.bodywebsite a:focus { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite h3 a, -.bodywebsite h3 a:active -{ - font-weight: normal !important; -} -.bodywebsite a:hover, -.bodywebsite a:focus { - color: maincolorbis) ? '#6ca' : '#'.$website->maincolorbis; ?>; - text-decoration: none; -} -.bodywebsite a:focus { - outline: 0; -} -.bodywebsite a[href*='callto'], -.bodywebsite a[href*='mailto'] { - white-space: nowrap; -} -.bodywebsite img { - vertical-align: middle; - max-width: 100%; -} -.bodywebsite .img-responsive { - max-width: 100%; - height: auto; -} -.bodywebsite .img-circle { - border-radius: 50%; -} -.bodywebsite hr { - margin-top: 0; - margin-bottom: 0; - border: 0; - border-top: 1px solid #2a2b2b; -} -.bodywebsite .margin-lr-30 { - margin-left: 30px !important; - margin-right: 30px !important; -} -.bodywebsite .unit-left, -.bodywebsite .unit-body { - white-space: nowrap; - display: inline-block; - vertical-align: middle; -} -.bodywebsite .unit-left { - padding-right: 10px; -} -.bodywebsite [role="button"] { - cursor: pointer; -} -.bodywebsite #sectionnews .nohover { - color: #000; -} -.bodywebsite .blog-box { - box-shadow: -1px -1px 12px 5px rgba(85, 85, 85, 0.1) !important; -} -.bodywebsite .blog-box:hover { - box-shadow: -1px -1px 12px 5px rgba(65, 65, 65, 0.3) !important; -} -.bodywebsite .margin-top-5 { - margin-top: 5px !important; -} -.bodywebsite .margin-top-10 { - margin-top: 10px !important; -} -.bodywebsite .rights { - display: inline-block; - margin: 0; - line-height: 1.5; - letter-spacing: .025em; - vertical-align: baseline; -} -.bodywebsite .rights * { - display: inline; - margin-right: .25em; -} -.bodywebsite .page-foot-default .rights { - color: #fff; - font-weight: 300; -} -.bodywebsite .page-foot .brand + * { - margin-top: 22px; -} -.bodywebsite .page-foot * + .link-block { - margin-top: 15px; -} -.bodywebsite .page-foot .footer-title + * { - margin-top: 30px; -} -.bodywebsite .page-foot .contact-info * + .unit { - margin-top: 15px; -} -.bodywebsite .privacy-link { - margin-top: 30px; -} -.bodywebsite .one-page-section * + .group-xl { - margin-top: 40px; -} -@media (min-width: 768px) { - .bodywebsite .one-page-section * + .group-xl { - margin-top: 60px; - } -} -@media (min-width: 1200px) { - .bodywebsite .one-page-section * + .group-xl { - margin-top: 100px; - } -} -.bodywebsite h1, -.bodywebsite h2, -.bodywebsite h3, -.bodywebsite h4, -.bodywebsite h5, -.bodywebsite h6, -.bodywebsite .h1, -.bodywebsite .h2, -.bodywebsite .h3, -.bodywebsite .h4, -.bodywebsite .h5, -.bodywebsite .h6 { - margin-top: 0; - margin-bottom: 0; - font-family: "Roboto", Helvetica, Arial, sans-serif; - font-weight: 700; - color: #000; -} -.bodywebsite h1 > span, -.bodywebsite h2 > span, -.bodywebsite h3 > span, -.bodywebsite h4 > span, -.bodywebsite h5 > span, -.bodywebsite h6 > span, -.bodywebsite .h1 > span, -.bodywebsite .h2 > span, -.bodywebsite .h3 > span, -.bodywebsite .h4 > span, -.bodywebsite .h5 > span, -.bodywebsite .h6 > span { - display: inline-block; - font-size: inherit; -} -.bodywebsite h1 a, -.bodywebsite h2 a, -.bodywebsite h3 a, -.bodywebsite h4 a, -.bodywebsite h5 a, -.bodywebsite h6 a, -.bodywebsite .h1 a, -.bodywebsite .h2 a, -.bodywebsite .h3 a, -.bodywebsite .h4 a, -.bodywebsite .h5 a, -.bodywebsite .h6 a { - display: inline; - font: inherit; - letter-spacing: inherit; - transition: .33s all ease; -} -.bodywebsite h1 a:hover, -.bodywebsite h2 a:hover, -.bodywebsite h3 a:hover, -.bodywebsite h4 a:hover, -.bodywebsite h5 a:hover, -.bodywebsite h6 a:hover, -.bodywebsite .h1 a:hover, -.bodywebsite .h2 a:hover, -.bodywebsite .h3 a:hover, -.bodywebsite .h4 a:hover, -.bodywebsite .h5 a:hover, -.bodywebsite .h6 a:hover { - color: maincolorbis) ? '#6ca' : '#'.$website->maincolorbis; ?>; -} -.bodywebsite h1, -.bodywebsite .h1 { - font-size: 18px; - line-height: 1.35; - text-transform: uppercase; -} -@media (min-width: 1200px) { - .bodywebsite h1, - .bodywebsite .h1 { - line-height: 1.2; - font-size: 33px; - } -} -.bodywebsite h1.small, -.bodywebsite .h1.small { - font-size: 40px; -} -@media (min-width: 768px) { - .bodywebsite h1.small, - .bodywebsite .h1.small { - font-size: 40px; - } -} -@media (min-width: 992px) { - .bodywebsite h1.small, - .bodywebsite .h1.small { - font-size: 60px; - } -} -@media (min-width: 1200px) { - .bodywebsite h1.small, - .bodywebsite .h1.small { - font-size: 72px; - line-height: 1.2; - } -} -.bodywebsite h2, -.bodywebsite .h2 { - font-weight: 500; - font-size: 15px; - line-height: 1.2; -} -@media (min-width: 576px) { - .bodywebsite h2, - .bodywebsite .h2 { - line-height: 1.33333; - font-size: 18px; - } -} -.bodywebsite .text-big-18 { - font-size: 18px; -} -.bodywebsite .text-big-19 { - font-size: 19px; -} -.bodywebsite .text-small { - font-size: 12px; -} -.bodywebsite .text-small-16 { - font-size: 16px; -} -.bodywebsite small, -.bodywebsite .small { - font-size: 12px; - line-height: 18px; -} -.bodywebsite code { - padding: 5px 7px; - font-size: 75%; - color: #fe4a21; - background-color: #f9f9f9; - border-radius: 2px; -} -.bodywebsite em { - font-family: Helvetica, Arial, sans-serif; - font-size: inherit; - font-style: italic; - font-weight: 700; - line-height: inherit; - color: #767877; -} -.bodywebsite address { - margin-top: 0; - margin-bottom: 0; -} -.bodywebsite .context-dark, -.bodywebsite .bg-black, -.bodywebsite .bg-gray-darker, -.bodywebsite .bg-gray-dark, -.bodywebsite .bg-mine-shaft, -.bodywebsite .bg-cod-gray, -.bodywebsite .bg-accent, -.bodywebsite .bg-cello { - color: rgba(255, 255, 255, 0.5); -} -.bodywebsite .context-dark a, -.bodywebsite .bg-black a, -.bodywebsite .bg-gray-darker a, -.bodywebsite .bg-gray-dark a, -.bodywebsite .bg-mine-shaft a, -.bodywebsite .bg-cod-gray a, -.bodywebsite .bg-accent a, -.bodywebsite .bg-cello a, -.bodywebsite .context-dark a:active, -.bodywebsite .bg-black a:active, -.bodywebsite .bg-gray-darker a:active, -.bodywebsite .bg-gray-dark a:active, -.bodywebsite .bg-mine-shaft a:active, -.bodywebsite .bg-cod-gray a:active, -.bodywebsite .bg-accent a:active, -.bodywebsite .bg-cello a:active, -.bodywebsite .context-dark a:focus, -.bodywebsite .bg-black a:focus, -.bodywebsite .bg-gray-darker a:focus, -.bodywebsite .bg-gray-dark a:focus, -.bodywebsite .bg-mine-shaft a:focus, -.bodywebsite .bg-cod-gray a:focus, -.bodywebsite .bg-accent a:focus, -.bodywebsite .bg-cello a:focus { - color: #fff; -} -.bodywebsite .context-dark a:hover, -.bodywebsite .bg-black a:hover, -.bodywebsite .bg-gray-darker a:hover, -.bodywebsite .bg-gray-dark a:hover, -.bodywebsite .bg-mine-shaft a:hover, -.bodywebsite .bg-cod-gray a:hover, -.bodywebsite .bg-accent a:hover, -.bodywebsite .bg-cello a:hover { - color: maincolorbis) ? '#6ca' : '#'.$website->maincolorbis; ?>; -} -.bodywebsite .context-dark .big, -.bodywebsite .bg-black .big, -.bodywebsite .bg-gray-darker .big, -.bodywebsite .bg-gray-dark .big, -.bodywebsite .bg-mine-shaft .big, -.bodywebsite .bg-cod-gray .big, -.bodywebsite .bg-accent .big, -.bodywebsite .bg-cello .big, -.bodywebsite .context-dark .text-bigger, -.bodywebsite .bg-black .text-bigger, -.bodywebsite .bg-gray-darker .text-bigger, -.bodywebsite .bg-gray-dark .text-bigger, -.bodywebsite .bg-mine-shaft .text-bigger, -.bodywebsite .bg-cod-gray .text-bigger, -.bodywebsite .bg-accent .text-bigger, -.bodywebsite .bg-cello .text-bigger, -.bodywebsite .context-dark .text-extra-large-bordered, -.bodywebsite .bg-black .text-extra-large-bordered, -.bodywebsite .bg-gray-darker .text-extra-large-bordered, -.bodywebsite .bg-gray-dark .text-extra-large-bordered, -.bodywebsite .bg-mine-shaft .text-extra-large-bordered, -.bodywebsite .bg-cod-gray .text-extra-large-bordered, -.bodywebsite .bg-accent .text-extra-large-bordered, -.bodywebsite .bg-cello .text-extra-large-bordered { - color: #fff; -} -.bodywebsite .context-dark .countdown-wrap span, -.bodywebsite .bg-black .countdown-wrap span, -.bodywebsite .bg-gray-darker .countdown-wrap span, -.bodywebsite .bg-gray-dark .countdown-wrap span, -.bodywebsite .bg-mine-shaft .countdown-wrap span, -.bodywebsite .bg-cod-gray .countdown-wrap span, -.bodywebsite .bg-accent .countdown-wrap span, -.bodywebsite .bg-cello .countdown-wrap span, -.bodywebsite .context-dark .countdown-wrap div > h2, -.bodywebsite .bg-black .countdown-wrap div > h2, -.bodywebsite .bg-gray-darker .countdown-wrap div > h2, -.bodywebsite .bg-gray-dark .countdown-wrap div > h2, -.bodywebsite .bg-mine-shaft .countdown-wrap div > h2, -.bodywebsite .bg-cod-gray .countdown-wrap div > h2, -.bodywebsite .bg-accent .countdown-wrap div > h2, -.bodywebsite .bg-cello .countdown-wrap div > h2 { - color: #fff; -} -.bodywebsite .bg-black { - background: #000; - fill: #000; -} -.bodywebsite .bg-gray-darker { - background: #00030a; - fill: #00030a; -} -.bodywebsite .bg-gray-darker .countdown-wrap div > h2 { - color: rgba(255, 255, 255, 0.2); -} -.bodywebsite .bg-gray-dark { - background: #2a2b2b; - fill: #2a2b2b; -} -.bodywebsite .bg-mine-shaft { - background: #333; - fill: #333; -} -.bodywebsite .bg-cod-gray { - background: #111; - fill: #111; -} -.bodywebsite .bg-gray { - background: #9f9f9f; - fill: #9f9f9f; -} -.bodywebsite .bg-accent { - background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - fill: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .bg-accent.bg-default-outline-btn .btn-white-outline:hover { - background: #3a3c3e; - border-color: #3a3c3e; -} -.bodywebsite .bg-porcelain { - background: #e5e7e9; - fill: #e5e7e9; -} -.bodywebsite .bg-gray-light { - background: #dedede; - fill: #dedede; -} -.bodywebsite .bg-gray-lighter { - background: #f9f9f9; - fill: #f9f9f9; -} -.bodywebsite .bg-whisper { - background: #f6f7fa; - fill: #f6f7fa; -} -.bodywebsite .bg-whisper-lighten { - background: #f2f3f8; - fill: #f2f3f8; -} -.bodywebsite .bg-athens-gray { - background: #F8F9FB; - fill: #F8F9FB; -} -.bodywebsite .bg-iron { - background: #dcdde0; - fill: #dcdde0; -} -.bodywebsite .bg-cello { - background: #1e3953; - fill: #1e3953; -} -.bodywebsite .bg-cloud-burst { - background: #1e354a; - fill: #1e354a; -} -.bodywebsite .bg-abbey { - background: #464a4d; - fill: #464a4d; -} -.bodywebsite .bg-abbey-04 { - background: rgba(70, 74, 77, 0.4); - fill: rgba(70, 74, 77, 0.4); -} -.bodywebsite .bg-athens-lighten { - background: #f2f3f7; - fill: #f2f3f7; -} -.bodywebsite .bg-cape-cod { - background: #444; - fill: #3a3c3e; -} -.bodywebsite #sectionfirstclass .bg-cape-cod { - background: #fff; - fill: #3a3c3e; -} -.bodywebsite .bg-athens-gray { - background: #F8F9FB; - fill: #F8F9FB; -} -.bodywebsite .page .bg-default-02 { - background: rgba(255, 255, 255, 0.2); - fill: rgba(255, 255, 255, 0.2); -} -.bodywebsite .page .bg-cloud-burst a.text-bismark:hover, -.bodywebsite .page .bg-cloud-burst a.text-bismark:focus { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .bg-overlay-lighten-inverse-md { - background: rgba(255, 255, 255, 0.5); -} -@media (min-width: 992px) { - .bodywebsite .bg-overlay-lighten-inverse-md { - background: transparent; - } -} -.bodywebsite .bg-image { - -webkit-background-size: cover; - background-size: cover; - background-position: center top; - background-repeat: no-repeat; -} -.bodywebsite .bg-image-centered { - -webkit-background-size: auto; - background-size: auto; -} -.bodywebsite .bg-fixed { - background-attachment: fixed; - -webkit-background-size: cover; - background-size: cover; -} -.bodywebsite .bg-image-1 { - -webkit-background-size: auto 100%; - background-size: auto 100%; -} -@media (max-width: 767px) { - .bodywebsite .bg-image-1 { - background-image: none !important; - } -} -.bodywebsite .page .text-primary { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?> !important; -} -.bodywebsite .page a.text-primary:focus, -.bodywebsite .page a.text-primary:hover { - color: maincolorbis) ? '#6ca' : '#'.$website->maincolorbis; ?> !important; -} -.bodywebsite .page .text-secondary { - color: #00030a !important; -} -.bodywebsite .page a.text-secondary:focus, -.bodywebsite .page a.text-secondary:hover { - color: black !important; -} -.bodywebsite .page .text-red-orange { - color: #ff4b22 !important; -} -.bodywebsite .page a.text-red-orange:focus, -.bodywebsite .page a.text-red-orange:hover { - color: #ee2c00 !important; -} -.bodywebsite .page .text-black { - color: #000 !important; -} -.bodywebsite .page a.text-black:focus, -.bodywebsite .page a.text-black:hover { - color: black !important; -} -.bodywebsite .page .text-silver { - color: #cdcdcd !important; -} -.bodywebsite .page a.text-silver:focus, -.bodywebsite .page a.text-silver:hover { - color: #b4b4b4 !important; -} -.bodywebsite .page .text-dark { - color: #2a2b2b !important; -} -.bodywebsite .page a.text-dark:focus, -.bodywebsite .page a.text-dark:hover { - color: #111111 !important; -} -.bodywebsite .page .text-gray { - color: #9f9f9f !important; -} -.bodywebsite .page a.text-gray:focus, -.bodywebsite .page a.text-gray:hover { - color: #868686 !important; -} -.bodywebsite .page .text-gray-light { - color: #dedede !important; -} -.bodywebsite .page a.text-gray-light:focus, -.bodywebsite .page a.text-gray-light:hover { - color: #c5c5c5 !important; -} -.bodywebsite .page .text-white { - color: #fff !important; - text-shadow: 1px 1px 8px #222; -} -.bodywebsite .page a.text-white:focus, -.bodywebsite .page a.text-white:hover { - color: #e6e6e6 !important; -} -.bodywebsite .page .text-white-05 { - color: rgba(255, 255, 255, 0.5) !important; -} -.bodywebsite .page a.text-white-05:focus, -.bodywebsite .page a.text-white-05:hover { - color: rgba(230, 230, 230, 0.5) !important; -} -.bodywebsite .page .text-white-03 { - color: rgba(255, 255, 255, 0.3) !important; -} -.bodywebsite .page a.text-white-03:focus, -.bodywebsite .page a.text-white-03:hover { - color: rgba(230, 230, 230, 0.3) !important; -} -.bodywebsite .page .text-white-08 { - color: rgba(255, 255, 255, 0.8) !important; -} -.bodywebsite .page a.text-white-08:focus, -.bodywebsite .page a.text-white-08:hover { - color: rgba(230, 230, 230, 0.8) !important; -} -.bodywebsite .page .text-tundora { - color: #414141 !important; -} -.bodywebsite .page a.text-tundora:focus, -.bodywebsite .page a.text-tundora:hover { - color: #282828 !important; -} -.bodywebsite .page .text-black-05 { - color: rgba(0, 0, 0, 0.5) !important; -} -.bodywebsite .page a.text-black-05:focus, -.bodywebsite .page a.text-black-05:hover { - color: rgba(0, 0, 0, 0.5) !important; -} -.bodywebsite .page .text-bismark { - color: #496a8a !important; -} -.bodywebsite .page a.text-bismark:focus, -.bodywebsite .page a.text-bismark:hover { - color: #375069 !important; -} -.bodywebsite .page .text-black-08 { - color: rgba(0, 0, 0, 0.8) !important; -} -.bodywebsite .page a.text-black-08:focus, -.bodywebsite .page a.text-black-08:hover { - color: rgba(0, 0, 0, 0.8) !important; -} -.bodywebsite .page .text-gray-darker { - color: #00030a !important; -} -.bodywebsite .page a.text-gray-darker:focus, -.bodywebsite .page a.text-gray-darker:hover { - color: black !important; -} -.bodywebsite .page .text-abbey { - color: #464a4d !important; -} -.bodywebsite .page a.text-abbey:focus, -.bodywebsite .page a.text-abbey:hover { - color: #2e3032 !important; -} -.bodywebsite .page .text-rolling-stone { - color: #74787C !important; -} -.bodywebsite .page a.text-rolling-stone:focus, -.bodywebsite .page a.text-rolling-stone:hover { - color: #5b5f62 !important; -} -.bodywebsite .page .text-fuel-yellow { - color: #F0B922 !important; -} -.bodywebsite .page a.text-fuel-yellow:focus, -.bodywebsite .page a.text-fuel-yellow:hover { - color: #d19d0e !important; -} -.bodywebsite .hidden { - display: none; -} -.bodywebsite .text-italic { - font-style: italic; -} -.bodywebsite .text-normal { - font-style: normal; -} -.bodywebsite .text-none { - text-transform: none; -} -.bodywebsite .text-underline { - text-decoration: underline; -} -.bodywebsite .text-strike { - text-decoration: line-through; -} -.bodywebsite .text-thin { - font-weight: 100; -} -.bodywebsite .text-light { - font-weight: 300; -} -.bodywebsite .text-regular { - font-weight: 400; -} -.bodywebsite .text-medium { - font-weight: 500; -} -.bodywebsite .text-sbold { - font-weight: 600; -} -.bodywebsite .text-bold, -.bodywebsite strong { - font-weight: 700; -} -.bodywebsite .text-ubold { - font-weight: 900; -} -.bodywebsite .text-spacing-0 { - letter-spacing: 0; -} -.bodywebsite .text-spacing-40 { - letter-spacing: 0.04em; -} -.bodywebsite .text-spacing-inverse-20 { - letter-spacing: -0.02em; -} -.bodywebsite .text-spacing-120 { - letter-spacing: 0.12em; -} -.bodywebsite .btn { - max-width: 100%; - font-family: "Roboto", Helvetica, Arial, sans-serif; - font-size: 14px; - font-weight: 700; - border-radius: 0; - border: 2px solid; - text-transform: uppercase; - transition: 0.3s ease-out; - padding: 11px 15px; -} -@media (min-width: 992px) { - .bodywebsite .btn { - padding: 12px 35px; - } -} -.bodywebsite .btn:focus, -.bodywebsite .btn:active, -.bodywebsite .btn:active:focus { - outline: none; -} -.bodywebsite .btn:active, -.bodywebsite .btn.active { - box-shadow: none; -} -.bodywebsite .btn-smaller { - padding: 8px 25px; -} -.bodywebsite .btn-small { - padding-left: 20px; - padding-right: 20px; -} -@media (min-width: 768px) { - .bodywebsite .btn { - min-width: 190px; - } -} -html .bodywebsite .btn-default, -html .bodywebsite .btn-default:active, -html .bodywebsite .btn-default.active, -html .bodywebsite .btn-default:active:focus, -html .bodywebsite .btn-default.active:focus, -html .bodywebsite .btn-default:focus:active, -html .bodywebsite .btn-default:focus { - color: #fff; - background-color: #464a4d; - border-color: #464a4d; -} -.bodywebsite .open > html .btn-default.dropdown-toggle, -html .bodywebsite .btn-default:hover { - color: #fff; - background-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - border-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -html .bodywebsite .btn-default.disabled, -html .bodywebsite .btn-default[disabled], -.bodywebsite fieldset[disabled] html .btn-default { - pointer-events: none; - opacity: .5; -} -html .bodywebsite .btn-default .badge { - color: #464a4d; - background-color: #fff; -} -html .bodywebsite .btn-primary, -html .bodywebsite .btn-primary:active, -html .bodywebsite .btn-primary.active, -html .bodywebsite .btn-primary:active:focus, -html .bodywebsite .btn-primary.active:focus, -html .bodywebsite .btn-primary:focus:active, -html .bodywebsite .btn-primary:focus { - color: #fff; - background-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - border-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - /* border: 0; */ -} -.bodywebsite .open > html .btn-primary.dropdown-toggle { - color: #fff; - background-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - border-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - /* border: none; */ -} -html .bodywebsite .btn-primary:hover { - color: #fff; - box-shadow: 1px 1px 8px #aaa; -} -html .bodywebsite .btn-primary.disabled, -html .bodywebsite .btn-primary[disabled], -.bodywebsite fieldset[disabled] html .btn-primary { - pointer-events: none; - opacity: .5; -} -html .bodywebsite .btn-primary .badge { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - background-color: #fff; -} -html .bodywebsite .btn-primary-contrast, -html .bodywebsite .btn-primary-contrast:active, -html .bodywebsite .btn-primary-contrast.active, -html .bodywebsite .btn-primary-contrast:active:focus, -html .bodywebsite .btn-primary-contrast.active:focus, -html .bodywebsite .btn-primary-contrast:focus:active, -html .bodywebsite .btn-primary-contrast:focus { - color: #fff; - background-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - border-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .open > html .btn-primary-contrast.dropdown-toggle, -html .bodywebsite .btn-primary-contrast:hover { - color: #fff; - background-color: #42b294; - border-color: #42b294; -} -html .bodywebsite .btn-primary-contrast.disabled, -html .bodywebsite .btn-primary-contrast[disabled], -.bodywebsite fieldset[disabled] html .btn-primary-contrast { - pointer-events: none; - opacity: .5; -} -html .bodywebsite .btn-primary-contrast .badge { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - background-color: #fff; -} -html .bodywebsite .btn-primary-outline, -html .bodywebsite .btn-primary-outline:active, -html .bodywebsite .btn-primary-outline.active, -html .bodywebsite .btn-primary-outline:active:focus, -html .bodywebsite .btn-primary-outline.active:focus, -html .bodywebsite .btn-primary-outline:focus:active, -html .bodywebsite .btn-primary-outline:focus { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - background-color: transparent; - border-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .open > html .btn-primary-outline.dropdown-toggle, -html .bodywebsite .btn-primary-outline:hover { - color: #fff; - background-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - border-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -html .bodywebsite .btn-primary-outline.disabled, -html .bodywebsite .btn-primary-outline[disabled], -.bodywebsite fieldset[disabled] html .btn-primary-outline { - pointer-events: none; - opacity: .5; -} -html .bodywebsite .btn-primary-outline .badge { - color: transparent; - background-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -html .bodywebsite .btn-cello-outline, -html .bodywebsite .btn-cello-outline:active, -html .bodywebsite .btn-cello-outline.active, -html .bodywebsite .btn-cello-outline:active:focus, -html .bodywebsite .btn-cello-outline.active:focus, -html .bodywebsite .btn-cello-outline:focus:active, -html .bodywebsite .btn-cello-outline:focus { - color: #1e3953; - background-color: transparent; - border-color: #1e3953; -} -.bodywebsite .open > html .btn-cello-outline.dropdown-toggle, -html .bodywebsite .btn-cello-outline:hover { - color: #fff; - background-color: #1e3953; - border-color: #1e3953; -} -html .bodywebsite .btn-cello-outline.disabled, -html .bodywebsite .btn-cello-outline[disabled], -.bodywebsite fieldset[disabled] html .btn-cello-outline { - pointer-events: none; - opacity: .5; -} -html .bodywebsite .btn-cello-outline .badge { - color: transparent; - background-color: #1e3953; -} -html .bodywebsite .btn-white-outline, -html .bodywebsite .btn-white-outline:active, -html .bodywebsite .btn-white-outline.active, -html .bodywebsite .btn-white-outline:active:focus, -html .bodywebsite .btn-white-outline.active:focus, -html .bodywebsite .btn-white-outline:focus:active, -html .bodywebsite .btn-white-outline:focus { - color: #fff; - background-color: transparent; - border-color: #fff; -} -.bodywebsite .open > html .btn-white-outline.dropdown-toggle, -html .bodywebsite .btn-white-outline:hover { - color: #fff; - background-color: maincolorbis) ? '#6ca' : '#'.$website->maincolorbis; ?>; - border-color: maincolorbis) ? '#6ca' : '#'.$website->maincolorbis; ?>; -} -html .bodywebsite .btn-white-outline.disabled, -html .bodywebsite .btn-white-outline[disabled], -.bodywebsite fieldset[disabled] html .btn-white-outline { - pointer-events: none; - opacity: .5; -} -html .bodywebsite .btn-white-outline .badge { - color: transparent; - background-color: #fff; -} -html .bodywebsite .btn-white-outline-variant-1, -html .bodywebsite .btn-white-outline-variant-1:active, -html .bodywebsite .btn-white-outline-variant-1.active, -html .bodywebsite .btn-white-outline-variant-1:active:focus, -html .bodywebsite .btn-white-outline-variant-1.active:focus, -html .bodywebsite .btn-white-outline-variant-1:focus:active, -html .bodywebsite .btn-white-outline-variant-1:focus { - color: #fff; - background-color: transparent; - border-color: #fff; -} -.bodywebsite .open > html .btn-white-outline-variant-1.dropdown-toggle, -html .bodywebsite .btn-white-outline-variant-1:hover { - color: #fff; - background-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - border-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -html .bodywebsite .btn-white-outline-variant-1.disabled, -html .bodywebsite .btn-white-outline-variant-1[disabled], -.bodywebsite fieldset[disabled] html .btn-white-outline-variant-1 { - pointer-events: none; - opacity: .5; -} -html .bodywebsite .btn-white-outline-variant-1 .badge { - color: transparent; - background-color: #fff; -} -html .bodywebsite .btn-silver-outline, -html .bodywebsite .btn-silver-outline:active, -html .bodywebsite .btn-silver-outline.active, -html .bodywebsite .btn-silver-outline:active:focus, -html .bodywebsite .btn-silver-outline.active:focus, -html .bodywebsite .btn-silver-outline:focus:active, -html .bodywebsite .btn-silver-outline:focus { - color: #000; - background-color: transparent; - border-color: #cdcdcd; -} -.bodywebsite .open > html .btn-silver-outline.dropdown-toggle, -html .bodywebsite .btn-silver-outline:hover { - color: #fff; - background-color: #cdcdcd; - border-color: #cdcdcd; -} -html .bodywebsite .btn-silver-outline.disabled, -html .bodywebsite .btn-silver-outline[disabled], -.bodywebsite fieldset[disabled] html .btn-silver-outline { - pointer-events: none; - opacity: .5; -} -html .bodywebsite .btn-silver-outline .badge { - color: transparent; - background-color: #000; -} -html .bodywebsite .btn-black-outline, -html .bodywebsite .btn-black-outline:active, -html .bodywebsite .btn-black-outline.active, -html .bodywebsite .btn-black-outline:active:focus, -html .bodywebsite .btn-black-outline.active:focus, -html .bodywebsite .btn-black-outline:focus:active, -html .bodywebsite .btn-black-outline:focus { - color: #000; - background-color: transparent; - border-color: #000; -} -.bodywebsite .open > html .btn-black-outline.dropdown-toggle, -html .bodywebsite .btn-black-outline:hover { - color: #fff; - background-color: #000; - border-color: #000; -} -html .bodywebsite .btn-black-outline.disabled, -html .bodywebsite .btn-black-outline[disabled], -.bodywebsite fieldset[disabled] html .btn-black-outline { - pointer-events: none; - opacity: .5; -} -html .bodywebsite .btn-black-outline .badge { - color: transparent; - background-color: #000; -} -html .bodywebsite .btn-cello, -html .bodywebsite .btn-cello:active, -html .bodywebsite .btn-cello.active, -html .bodywebsite .btn-cello:active:focus, -html .bodywebsite .btn-cello.active:focus, -html .bodywebsite .btn-cello:focus:active, -html .bodywebsite .btn-cello:focus { - color: #fff; - background-color: #1e3953; - border-color: #1e3953; -} -.bodywebsite .open > html .btn-cello.dropdown-toggle, -html .bodywebsite .btn-cello:hover { - color: #fff; - background-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - border-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -html .bodywebsite .btn-cello.disabled, -html .bodywebsite .btn-cello[disabled], -.bodywebsite fieldset[disabled] html .btn-cello { - pointer-events: none; - opacity: .5; -} -html .bodywebsite .btn-cello .badge { - color: #1e3953; - background-color: #fff; -} -.bodywebsite .btn-xs { - padding: 12px 25px; - font-size: 11px; - line-height: 1.71429; - border-radius: 0; -} -@media (min-width: 768px) { - .bodywebsite .btn-xs { - min-width: 165px; - } -} -.bodywebsite .btn-sm { - padding: 10px 20px; - font-size: 13px; - line-height: 1.71429; - border-radius: 0; -} -@media (min-width: 768px) { - .bodywebsite .btn-sm { - min-width: 170px; - } -} -.bodywebsite .btn-lg { - padding: 14px 30px; - font-size: 14px; - line-height: 1.71429; - border-radius: 0; -} -@media (min-width: 768px) { - .bodywebsite .btn-lg { - min-width: 270px; - padding: 18px 40px; - } -} -@media (min-width: 992px) { - .bodywebsite .btn-lg-bigger { - padding-top: 28px; - padding-bottom: 28px; - } -} -.bodywebsite .btn-xl { - padding: 20px 35px; - font-size: 15px; - line-height: 1.71429; - border-radius: 0; -} -@media (min-width: 768px) { - .bodywebsite .btn-xl { - padding: 21px 50px; - } -} -@media (min-width: 992px) { - .bodywebsite .btn-xl { - min-width: 270px; - } -} -.bodywebsite .btn-min-width-0 { - min-width: 0; -} -.bodywebsite .btn-block { - min-width: 30px; - max-width: 100%; -} -.bodywebsite .btn-rect { - border-radius: 0; -} -.bodywebsite .btn-round { - border-radius: 12px; -} -.bodywebsite .btn-circle { - border-radius: 35px; -} -.bodywebsite .btn-round-bottom { - border-radius: 0 0 5px 5px; -} -.bodywebsite .btn-shadow { - box-shadow: -3px 3px 3px 0 rgba(0, 0, 0, 0.14); -} -.bodywebsite .btn.btn-icon { - display: -webkit-inline-box; - display: -webkit-inline-flex; - display: -ms-inline-flexbox; - display: inline-flex; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - -webkit-flex-wrap: nowrap; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; - vertical-align: middle; -} -.bodywebsite .btn.btn-icon .icon { - position: relative; - top: 1px; - display: inline-block; - width: auto; - height: auto; - line-height: 0; - vertical-align: middle; - transition: 0s; -} -.bodywebsite .btn.btn-icon-left .icon { - margin-right: 10px; -} -.bodywebsite .btn.btn-icon-right { - -webkit-flex-direction: row-reverse; - -ms-flex-direction: row-reverse; - flex-direction: row-reverse; -} -.bodywebsite .btn.btn-icon-right .icon { - margin-left: 10px; -} -.bodywebsite .btn-icon-only { - background: none; - border: none; - display: inline-block; - padding: 0; - outline: none; - outline-offset: 0; - cursor: pointer; - -webkit-appearance: none; - font-size: 0; - line-height: 0; - transition: .33s all ease; -} -.bodywebsite .btn-icon-only::-moz-focus-inner { - border: none; - padding: 0; -} -.bodywebsite .btn-icon-only.btn-icon-only-primary, -.bodywebsite .btn-icon-only.btn-icon-only-primary:active, -.bodywebsite .btn-icon-only.btn-icon-only-primary:focus { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .btn-icon-only.btn-icon-only-primary:hover { - color: #000; -} -.bodywebsite .btn-icon-only { - padding: 9px 18px; -} -.bodywebsite .btn-icon-single { - display: inline-block; - padding: 0; - min-width: 0; -} -.bodywebsite .btn-icon-default { - color: #000; -} -.bodywebsite .btn-icon-default:hover { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .btn-cello-outline.btn-icon .icon { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - transition: .33s all ease; -} -.bodywebsite .btn-cello-outline.btn-icon:hover.btn-icon .icon { - color: #fff; -} -.bodywebsite .button-block * + .btn { - margin-top: 0; -} -.bodywebsite .icon { - display: inline-block; - text-align: center; -} -.bodywebsite .icon:before { - display: inline-block; - font-weight: 400; - font-style: normal; - speak: none; - text-transform: none; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -.bodywebsite [class*='icon-circle'] { - border-radius: 50%; - overflow: hidden; -} -.bodywebsite [class*='icon-round'] { - border-radius: 4px; - overflow: hidden; -} -.bodywebsite .page .icon-default { - color: #9f9f9f; -} -.bodywebsite .page .icon-black { - color: #000; -} -.bodywebsite .page .icon-primary { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .page .icon-gunsmoke { - color: #767877; -} -.bodywebsite .page .icon-tundora { - color: #414141; -} -.bodywebsite .page .icon-gray-dark-filled { - color: #fff; - background: #2a2b2b; -} -.bodywebsite .page .icon-san-juan-filled { - color: #fff; - background: #2e5275; -} -.bodywebsite .page .icon-silver-chalice-filled { - color: #fff; - background: #ababab; -} -.bodywebsite .page .icon-abbey-filled { - color: #fff; - background: #464a4d; -} -.bodywebsite .page .icon-white { - color: #fff; -} -.bodywebsite .page a.icon-default, -.bodywebsite .page a.icon-default:active, -.bodywebsite .page a.icon-default:focus { - color: #9f9f9f; -} -.bodywebsite .page a.icon-default:hover { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .page a.icon-primary, -.bodywebsite .page a.icon-primary:active, -.bodywebsite .page a.icon-primary:focus { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .page a.icon-primary:hover { - color: #fff; -} -.bodywebsite .page a.icon-abbey-filled:hover { - color: #fff; - background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .page a.icon-tundora-inverse, -.bodywebsite .page a.icon-tundora-inverse:active, -.bodywebsite .page a.icon-tundora-inverse:focus { - color: #414141; -} -.bodywebsite .page a.icon-tundora-inverse:hover { - color: #fff; -} -.bodywebsite .page a.icon-gray-dark-filled, -.bodywebsite .page a.icon-gray-dark-filled:active, -.bodywebsite .page a.icon-gray-dark-filled:focus { - color: #fff; - background: #2a2b2b; -} -.bodywebsite .page a.icon-gray-dark-filled:hover { - color: #fff; - background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .page a.icon-silver-chalice-filled, -.bodywebsite .page a.icon-silver-chalice-filled:active, -.bodywebsite .page a.icon-silver-chalice-filled:focus { - color: #fff; - background: #ababab; -} -.bodywebsite .page a.icon-silver-chalice-filled:hover { - color: #fff; - background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .page a.icon-san-juan-filled, -.bodywebsite .page a.icon-san-juan-filled:active, -.bodywebsite .page a.icon-san-juan-filled:focus { - color: #fff; - background: #2e5275; -} -.bodywebsite .page a.icon-san-juan-filled:hover { - color: #fff; - background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .page .icon-xxs { - width: 18px; - height: 18px; - font-size: 18px; - line-height: 18px; -} -.bodywebsite .page .icon-xxs-small { - width: 16px; - height: 16px; - font-size: 16px; - line-height: 16px; -} -.bodywebsite .page .icon-xxs-smaller { - width: 14px; - height: 14px; - font-size: 14px; - line-height: 14px; -} -.bodywebsite .page .icon-xxs-smallest { - width: 12px; - height: 12px; - font-size: 12px; - line-height: 12px; -} -.bodywebsite .page .icon-xs { - width: 22px; - height: 22px; - font-size: 22px; - line-height: 22px; -} -.bodywebsite .page .icon-xs-smaller { - width: 20px; - height: 20px; - font-size: 20px; - line-height: 20px; -} -.bodywebsite .page .icon-sm { - width: 24px; - height: 24px; - font-size: 24px; - line-height: 24px; -} -.bodywebsite .page .icon-sm-custom { - width: 24px; - height: 24px; - font-size: 24px; - line-height: 24px; -} -@media (min-width: 992px) { - .bodywebsite .page .icon-sm-custom { - width: 30px; - height: 30px; - font-size: 30px; - line-height: 30px; - } -} -.bodywebsite .page .icon-md { - width: 36px; - height: 36px; - font-size: 36px; - line-height: 36px; -} -.bodywebsite .page .icon-md-custom { - width: 26px; - height: 26px; - font-size: 26px; - line-height: 26px; -} -@media (min-width: 992px) { - .bodywebsite .page .icon-md-custom { - width: 36px; - height: 36px; - font-size: 36px; - line-height: 36px; - } -} -.bodywebsite .page .icon-md-smaller { - width: 30px; - height: 30px; - font-size: 30px; - line-height: 30px; -} -.bodywebsite .page .icon-lg { - width: 45px; - height: 45px; - font-size: 45px; - line-height: 45px; -} -.bodywebsite .page .icon-lg-variant-1 { - width: 42px; - height: 42px; - font-size: 42px; - line-height: 42px; -} -.bodywebsite .page .icon-lg-variant-2 { - width: 44px; - height: 44px; - font-size: 44px; - line-height: 44px; -} -.bodywebsite .page .icon-lg-bigger { - width: 50px; - height: 50px; - font-size: 50px; - line-height: 50px; -} -.bodywebsite .page .icon-xl { - width: 60px; - height: 60px; - font-size: 60px; - line-height: 60px; -} -.bodywebsite .page [class*='icon-round'].icon-xxs-smallest, -.bodywebsite .page [class*='icon-circle'].icon-xxs-smallest { - width: 26px; - height: 26px; - line-height: 26px; -} -.bodywebsite .icon-shift-1 { - position: relative; - top: 2px; -} -.bodywebsite .icon-shift-2 { - position: relative; - top: 2px; -} -@media (min-width: 992px) { - .bodywebsite .icon-shift-2 { - top: 4px; - } -} -.bodywebsite .icon-1:before, -.bodywebsite .icon-2:before, -.bodywebsite .icon-4:before, -.bodywebsite .icon-5:before, -.bodywebsite .icon-6:before, -.bodywebsite .icon-3:before { - content: ''; - display: inline-block; - width: 40px; - height: 40px; -} -.bodywebsite .thumbnail { - position: relative; - z-index: 1; - width: 100%; - max-height: 100%; - overflow: hidden; - padding: 0; - margin: 0; - border: none; - border-radius: 0; - background-color: transparent; -} -.bodywebsite .thumbnail .caption { - padding: 0; -} -.bodywebsite .thumbnail { - box-shadow: none; -} -.bodywebsite .thumbnail-variant-1 { - background-color: transparent; - text-align: center; -} -.bodywebsite .thumbnail-variant-1 .thumbnail-image { - position: relative; - display: inline-block; - overflow: hidden; - pointer-events: none; -} -.bodywebsite .thumbnail-variant-1 .thumbnail-image, -.bodywebsite .thumbnail-variant-1 .thumbnail-image > img { - border-radius: 600px; -} -.bodywebsite .thumbnail-variant-1 .thumbnail-image > img { - width: auto; - pointer-events: auto; -} -.bodywebsite .thumbnail-variant-1 .thumbnail-image-inner { - position: absolute; - top: 0; - right: 1px; - bottom: 0; - left: 1px; - z-index: 2; - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - -webkit-flex-wrap: nowrap; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; - padding: 20px 5px 5px; - background: rgba(0, 0, 0, 0.4); - border-radius: 600px; -} -.bodywebsite .thumbnail-variant-1 .thumbnail-image-inner * { - pointer-events: auto; -} -.bodywebsite .thumbnail-variant-1 .thumbnail-image-inner > * + * { - margin-top: 0; - margin-left: 20px; -} -.bodywebsite .thumbnail-variant-1 .header { - line-height: 1.2; -} -.bodywebsite .thumbnail-variant-1 * + p { - margin-top: 0; -} -.bodywebsite .thumbnail-variant-1 * + .thumbnail-caption { - margin-top: 18px; -} -@media (min-width: 992px) { - .bodywebsite .desktop .thumbnail-variant-1 .thumbnail-image-inner { - opacity: 0; - visibility: hidden; - transform: rotate3d(0, 1, 0, 60deg); - transition: .55s all ease; - background: rgba(0, 0, 0, 0.6); - } - .bodywebsite .desktop .thumbnail-variant-1 .thumbnail-image:hover .thumbnail-image-inner { - opacity: 1; - visibility: visible; - transform: rotate3d(0, 1, 0, 0deg); - } -} -@media (min-width: 1200px) { - .bodywebsite .thumbnail-variant-1 * + .thumbnail-caption { - margin-top: 30px; - } -} -.bodywebsite .thumbnail-variant-2 { - min-height: 300px; - padding: 30px 0 0; - overflow: visible; - text-align: center; - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-direction: column; - -ms-flex-direction: column; - flex-direction: column; - -webkit-flex-wrap: nowrap; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - -webkit-justify-content: flex-end; - -ms-flex-pack: end; - justify-content: flex-end; -} -.bodywebsite .thumbnail-variant-2-wrap { - padding-bottom: 25px; -} -.bodywebsite .thumbnail-variant-2 .thumbnail-image { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - height: 100%; - width: 100%; - overflow: hidden; -} -.bodywebsite .thumbnail-variant-2 .thumbnail-image > img { - position: absolute; - top: 20%; - left: 50%; - transform: translate(-50%, -20%); - width: auto; - min-width: 101%; - max-width: none; - height: auto; - min-height: 100%; - max-height: none; -} -.bodywebsite .thumbnail-variant-2:before { - content: ''; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1; - background: rgba(0, 0, 0, 0.5); -} -.bodywebsite .thumbnail-variant-2 .thumbnail-inner { - position: relative; - z-index: 2; - padding: 30px 10px; -} -.bodywebsite .thumbnail-variant-2 .thumbnail-caption { - position: relative; - z-index: 3; - width: calc(66%); - padding: 17px 8px 25px; - margin: 31px 17px -25px 17px; - background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .thumbnail-variant-2 .thumbnail-caption * { - color: #fff; -} -.bodywebsite .thumbnail-variant-2 .thumbnail-caption a, -.bodywebsite .thumbnail-variant-2 .thumbnail-caption a:active, -.bodywebsite .thumbnail-variant-2 .thumbnail-caption a:focus { - color: #fff; -} -.bodywebsite .thumbnail-variant-2 .thumbnail-caption a:hover { - color: #9f9f9f; -} -.bodywebsite .thumbnail-variant-2 .text-header { - font-size: 18px; - font-weight: 700; -} -.bodywebsite .thumbnail-variant-2 .text-caption { - font-style: italic; - line-height: 1.3; - font-family: "Roboto", Helvetica, Arial, sans-serif; -} -@media (min-width: 768px) { - .bodywebsite .thumbnail-variant-2 .text-caption { - font-size: 16px; - } -} -@media (min-width: 992px) { - .bodywebsite .desktop .thumbnail-variant-2:before { - top: 40px; - } - .bodywebsite .desktop .thumbnail-variant-2 .thumbnail-inner > * { - position: relative; - transform: translateY(14px); - transition: 0.4s all ease-in-out; - } - .bodywebsite .desktop .thumbnail-variant-2:before, - .bodywebsite .desktop .thumbnail-variant-2 .thumbnail-inner { - opacity: 0; - visibility: hidden; - transition: 0.33s all ease-out; - } - .bodywebsite .desktop .thumbnail-variant-2:hover:before { - top: 0; - left: 0; - right: 0; - } - .bodywebsite .desktop .thumbnail-variant-2:hover .thumbnail-inner > * { - transform: translateY(0); - } - .bodywebsite .desktop .thumbnail-variant-2:hover:before, - .bodywebsite .desktop .thumbnail-variant-2:hover .thumbnail-inner { - opacity: 1; - visibility: visible; - } -} -@media (min-width: 992px) { - .bodywebsite .thumbnail-variant-2 .thumbnail-caption { - width: calc(84%); - margin: 31px 8px -25px 8px; - } -} -@media (min-width: 1200px) { - .bodywebsite .thumbnail-variant-2 { - width: calc(78%); - margin: 0 11px 0; - } - .bodywebsite .thumbnail-variant-2 .thumbnail-caption { - width: calc(66%); - margin: 31px 17px -25px 17px; - } -} -.bodywebsite .ie-11 .thumbnail-variant-2 { - min-height: 0; -} -.bodywebsite .thumbnail-variant-3 { - width: 100.025%; - text-align: center; -} -.bodywebsite .thumbnail-variant-3 img { - position: relative; - left: 50%; - transform: translateX(-50%); - width: auto; - max-width: none; - min-width: 100.5%; -} -.bodywebsite .thumbnail-variant-3 .link-external { - position: absolute; - top: -30px; - right: -30px; - z-index: 1; - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; - width: 200px; - height: 110px; - padding: 55px 15px 5px; - vertical-align: bottom; - line-height: 40px; - background: #fafafa; - transform-origin: 74% 110%; - transform: rotate(45deg); - will-change: transform; - text-align: center; - /** - @bugfix: color flickering in child objects on hover - @affected: IE Edge - */ - transition: top 0.28s cubic-bezier(0.79, 0.14, 0.15, 0.86), right 0.28s cubic-bezier(0.79, 0.14, 0.15, 0.86), opacity 0.28s cubic-bezier(0.79, 0.14, 0.15, 0.86), visibility 0.28s cubic-bezier(0.79, 0.14, 0.15, 0.86); -} -.bodywebsite .thumbnail-variant-3 .link-external .icon { - transition: none; - transform: rotate(-45deg); - color: #000; - vertical-align: bottom; -} -.bodywebsite .thumbnail-variant-3 .link-external:hover { - top: -12px; - right: -12px; -} -.bodywebsite .thumbnail-variant-3 .link-original { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - -webkit-flex-wrap: nowrap; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -webkit-align-items: flex-end; - -ms-flex-align: end; - align-items: flex-end; - -webkit-justify-content: flex-start; - -ms-flex-pack: start; - justify-content: flex-start; -} -.bodywebsite .thumbnail-variant-3 .link-original, -.bodywebsite .thumbnail-variant-3 .link-original:active, -.bodywebsite .thumbnail-variant-3 .link-original:focus, -.bodywebsite .thumbnail-variant-3 .link-original:hover { - color: #fff; -} -.bodywebsite .thumbnail-variant-3 .link-original:before { - content: '\e8ff'; - position: relative; - left: 20px; - bottom: 30px; - z-index: 3; - font-family: 'Material Icons'; - font-size: 140px; - line-height: 1; - opacity: .2; - transition: .33s all ease; -} -.bodywebsite .thumbnail-variant-3 .caption { - position: absolute; - top: -2px; - right: 0; - bottom: -2px; - left: 0; - padding: 15px; - transition: 0.33s all ease-in-out; - background: rgba(0, 0, 0, 0.6); -} -@media (min-width: 992px) { - .bodywebsite .desktop .thumbnail-variant-3 figure img { - will-change: transform; - transition: 0.4s ease-out; - } - .bodywebsite .desktop .thumbnail-variant-3 .caption, - .bodywebsite .desktop .thumbnail-variant-3 .link-external { - opacity: 0; - visibility: hidden; - } - .bodywebsite .desktop .thumbnail-variant-3 .link-external { - right: -50px; - top: -50px; - } - .bodywebsite .desktop .thumbnail-variant-3:hover .caption, - .bodywebsite .desktop .thumbnail-variant-3:hover .link-external { - opacity: 1; - visibility: visible; - } - .bodywebsite .desktop .thumbnail-variant-3:hover figure img { - transform: translateX(-50%) scale(1.08); - } - .bodywebsite .desktop .thumbnail-variant-3:hover .link-external { - right: -30px; - top: -30px; - } - .bodywebsite .desktop .thumbnail-variant-3:hover .link-external:hover { - top: -20px; - right: -20px; - } -} -.bodywebsite .thumbnail-variant-3 > * + * { - margin-top: 0; -} -@media (min-width: 768px) { - .bodywebsite .thumbnail-wrap { - padding: 0 5px; - } -} -@media (min-width: 1200px) { - .bodywebsite .thumbnail-wrap { - padding: 0 9px; - } -} -.bodywebsite .thumbnail-variant-4 { - position: relative; - overflow: hidden; - box-shadow: 0px 0px 13px 0px rgba(1, 3, 4, 0.15); -} -.bodywebsite .thumbnail-variant-4 .thumbnail-image { - background: #000; -} -.bodywebsite .thumbnail-variant-4 .thumbnail-image img { - opacity: .92; -} -.bodywebsite .thumbnail-variant-4 .caption { - position: absolute; - left: 0; - right: 0; - bottom: 0; - padding: 16px 15px; - text-align: center; - color: #000; - background: #fff; -} -.bodywebsite .thumbnail-variant-4 .text-light { - color: #0d0d0d; -} -@media (min-width: 992px) { - .bodywebsite .desktop .thumbnail-variant-4 .thumbnail-image img { - position: relative; - will-change: transform; - opacity: 1; - transition: opacity .7s, transform .7s; - transform: scale3d(1.0001, 1.0001, 1); - } - .bodywebsite .desktop .thumbnail-variant-4 .caption, - .bodywebsite .desktop .thumbnail-variant-4 .caption-header { - transition: transform 0.55s; - transform: translate3d(0, 200%, 0); - } - .bodywebsite .desktop .thumbnail-variant-4 .caption-header { - transition-delay: 0.05s; - } - .bodywebsite .desktop .thumbnail-variant-4:hover .thumbnail-image img { - opacity: .9; - transform: scale3d(1.07, 1.07, 1); - } - .bodywebsite .desktop .thumbnail-variant-4:hover .caption, - .bodywebsite .desktop .thumbnail-variant-4:hover .caption-header { - transform: translate3d(0, 0, 0); - } -} -@media (min-width: 992px) { - .bodywebsite .thumbnail-variant-4 .caption { - padding: 20px 15px; - } -} -.bodywebsite .thumbnail-profile .thumbnail-image img { - width: 100%; -} -.bodywebsite .thumbnail-profile .thumbnail-caption { - padding: 20px; - background: #f2f3f7; -} -.bodywebsite .thumbnail-profile .thumbnail-caption-inner { - margin-bottom: -12px; - -webkit-align-items: flex-end; - -ms-flex-align: end; - align-items: flex-end; - transform: translateY(-12px); - text-align: center; -} -.bodywebsite .thumbnail-profile .thumbnail-caption-inner > * { - display: inline-block; - margin-top: 12px; - -webkit-flex-shrink: 0; - -ms-flex-negative: 0; - flex-shrink: 0; -} -.bodywebsite .thumbnail-profile .thumbnail-caption-inner, -.bodywebsite .thumbnail-profile .thumbnail-caption-inner > ul { - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - -webkit-flex-wrap: wrap; - -ms-flex-wrap: wrap; - flex-wrap: wrap; -} -.bodywebsite .thumbnail-profile .thumbnail-caption-inner ul { - position: relative; - margin-bottom: -3px; - transform: translateY(-3px); - -webkit-flex-grow: 2; - -ms-flex-positive: 2; - flex-grow: 2; -} -.bodywebsite .thumbnail-profile .thumbnail-caption-inner ul > li { - display: inline-block; - margin-top: 3px; - padding: 0 7px; -} -.bodywebsite .thumbnail-profile .thumbnail-caption-inner .btn-wrap { - -webkit-flex-grow: 1; - -ms-flex-positive: 1; - flex-grow: 1; -} -@media (min-width: 576px) { - .bodywebsite .thumbnail-profile .thumbnail-caption-inner, - .bodywebsite .thumbnail-profile .thumbnail-caption-inner ul { - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; - } -} -@media (min-width: 992px) { - .bodywebsite .thumbnail-profile .thumbnail-caption-inner ul { - -webkit-justify-content: space-around; - -ms-flex-pack: distribute; - justify-content: space-around; - } -} -@media (min-width: 1200px) { - .bodywebsite .thumbnail-profile .thumbnail-caption-inner { - text-align: left; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; - } - .bodywebsite .thumbnail-profile .thumbnail-caption-inner .btn-wrap { - text-align: right; - } -} -@media (max-width: 767px) { - .bodywebsite .thumbnail-variant-2 { - max-width: 300px; - margin-left: auto; - margin-right: auto; - } - .bodywebsite .thumbnail-variant-3, - .bodywebsite .thumbnail-profile { - max-width: 370px; - margin-left: auto; - margin-right: auto; - } -} -.bodywebsite .thumbnail-block { - display: block; -} -.bodywebsite .thumbnail-block > img, -.bodywebsite .thumbnail-block a > img { - width: 100%; - height: auto; -} -.bodywebsite .thumbnail-variant-5 { - padding: 40px 20px; - display: inline-block; -} -.bodywebsite .thumbnail-variant-5, -.bodywebsite .thumbnail-variant-5 img { - transition: 0.2s ease-in-out; -} -@media (min-width: 992px) { - .bodywebsite .thumbnail-variant-5 { - border-top: 5px solid transparent; - border-bottom: 5px solid transparent; - } - .bodywebsite .thumbnail-variant-5 .thumbnail-variant-5-img-wrap { - position: relative; - display: inline-block; - } - .bodywebsite .thumbnail-variant-5 .thumbnail-variant-5-img-wrap:before { - content: ''; - position: absolute; - top: 0; - right: 0; - left: 0; - width: 100%; - height: 100%; - border-radius: 50%; - background: rgba(0, 0, 0, 0.4); - transition: 0.2s ease-in-out; - } - .bodywebsite .thumbnail-variant-5 { - box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.15); - border-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - } - .bodywebsite .thumbnail-variant-5:hover .thumbnail-variant-5-img-wrap:before { - opacity: 0; - } - .bodywebsite .thumbnail-variant-5:hover img { - will-change: transform; - -webkit-transform: scale(1.18); - transform: scale(1.18); - } -} -@media (min-width: 992px) { - .bodywebsite .thumbnail-variant-5 { - padding: 40px 50px; - } -} -@media (min-width: 1200px) { - .bodywebsite .thumbnail-variant-5 { - padding: 65px 50px; - } -} -.bodywebsite .thumbnail-variant-5 * + h2 { - margin-top: 36px; -} -.bodywebsite .thumbnail-variant-5 h2 + * { - margin-top: 0; -} -.bodywebsite .thumbnail-variant-5 .link-group + .link-group { - margin-top: 7px; -} -.bodywebsite .thumbnail-variant-5 .divider-fullwidth { - margin-top: 12px; - margin-bottom: 17px; -} -.bodywebsite .thumbnail-with-img * + .thumbnail-title { - margin-top: 22px; -} -.bodywebsite .thumbnail-with-img .thumbnail-title + * { - margin-top: 10px; -} -.bodywebsite .thumbnail-profile-info h4 + * { - margin-top: 0; -} -.bodywebsite .thumbnail-profile-info * + .profile-quote { - margin-top: 15px; -} -.bodywebsite .thumbnail-profile-info .profile-quote + * { - margin-top: 15px; -} -.bodywebsite .thumbnail-profile-info * + .list-progress { - margin-top: 35px; -} -@media (min-width: 992px) { - .bodywebsite .thumbnail-profile-info * + .profile-quote { - margin-top: 0; - } - .bodywebsite .thumbnail-profile-info .profile-quote + * { - margin-top: 0; - } -} -.bodywebsite figure img { - margin: 18px; - border: 1px solid #ccc; - box-shadow: 1px 1px 25px #aaa; - max-width: calc(44%); -} -.bodywebsite figure img { - width: 100%; - height: auto; - max-width: none; -} -.bodywebsite .figure .caption { - padding: 15px; -} -.bodywebsite .rd-mailform { - position: relative; -} -.bodywebsite label { - margin-bottom: 0; -} -.bodywebsite input::-webkit-autofill + .form-label { - display: none; - transition: none; -} -.bodywebsite .form-label, -.bodywebsite .form-input { - font-weight: 400; -} -.bodywebsite .input-sm, -.bodywebsite .input-lg, -.bodywebsite .form-input { - font-size: 14px; -} -.bodywebsite .input-sm, -.bodywebsite .input-sm:focus, -.bodywebsite .input-lg, -.bodywebsite .input-lg:focus, -.bodywebsite .form-input, -.bodywebsite .form-input:focus { - box-shadow: none; -} -.bodywebsite textarea.form-input { - height: 166px; - min-height: 52px; - max-height: 249px; - resize: vertical; -} -.bodywebsite .form-input { - height: auto; - min-height: 52px; - border: 0px solid #dedede; - border-radius: 0; - -webkit-appearance: none; - line-height: 24px; -} -.bodywebsite .form-input:focus { - outline: 0; -} -.bodywebsite .form-wrap { - position: relative; - margin-bottom: 0; -} -.bodywebsite .form-wrap + .form-wrap { - margin-top: 10px; -} -.bodywebsite .form-label { - position: absolute; - top: 26px; - left: 19px; - font-size: 14px; - color: #9f9f9f; - pointer-events: none; - z-index: 9; - transition: .3s; - transform: translateY(-50%); - will-change: transform; -} -.bodywebsite .form-label.focus { - opacity: 0; -} -.bodywebsite .form-label.auto-fill { - color: #9f9f9f; -} -@media (min-width: 768px) { - .bodywebsite .form-label-outside { - position: static; - margin-bottom: 8px; - } - .bodywebsite .form-label-outside, - .bodywebsite .form-label-outside.focus, - .bodywebsite .form-label-outside.auto-fill { - transform: none; - color: #9f9f9f; - font-size: 14px; - } -} -.bodywebsite .form-wrap-outside { - margin-top: 10px; -} -.bodywebsite .form-wrap-outside .form-label-outside { - position: absolute; - top: -15px; - left: 0; -} -.bodywebsite .form-wrap-outside .form-label-outside.focus { - opacity: 1; -} -@media (min-width: 768px) { - .bodywebsite .form-wrap-outside .form-label-outside { - top: -30px; - } -} -.bodywebsite .form-border-bottom { - border-bottom: 3px solid maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .form-validation { - position: absolute; - right: 10px; - top: 2px; - font-size: 11px; - line-height: 11px; - color: #fe4a21; - margin-top: 2px; - transition: .3s; -} -.bodywebsite form.label-outside .form-validation { - top: 12px; -} -.bodywebsite .has-error .help-block, -.bodywebsite .has-error .control-label, -.bodywebsite .has-error .radio, -.bodywebsite .has-error .checkbox, -.bodywebsite .has-error .radio-inline, -.bodywebsite .has-error .checkbox-inline, -.bodywebsite .has-error.radio label, -.bodywebsite .has-error.checkbox label, -.bodywebsite .has-error.radio-inline label, -.bodywebsite .has-error.checkbox-inline label { - color: #fe4a21; -} -.bodywebsite .has-error .form-input:not(.form-input-impressed), -.bodywebsite .has-error .form-input:not(.form-input-impressed):focus { - border-color: #fe4a21; - box-shadow: none; -} -.bodywebsite .has-error .form-input-impressed, -.bodywebsite .has-error .form-input-impressed:focus { - box-shadow: inset 0 0 0 1px #fe4a21; -} -.bodywebsite .has-error .input-group-addon { - color: #fff; - border-color: #fe4a21; - background-color: #fe4a21; -} -.bodywebsite .form-inline .has-error ~ button[type='submit'] { - border-color: #fe4a21; - background: #fe4a21; -} -.bodywebsite .has-error .form-validation { - color: #fe4a21; -} -.bodywebsite .has-success .help-block, -.bodywebsite .has-success .control-label, -.bodywebsite .has-success .radio, -.bodywebsite .has-success .checkbox, -.bodywebsite .has-success .radio-inline, -.bodywebsite .has-success .checkbox-inline, -.bodywebsite .has-success.radio label, -.bodywebsite .has-success.checkbox label, -.bodywebsite .has-success.radio-inline label, -.bodywebsite .has-success.checkbox-inline label { - color: #58c476; -} -.bodywebsite .has-success .form-input:not(.form-input-impressed), -.bodywebsite .has-success .form-input:not(.form-input-impressed):focus { - border-color: #dff0d8; - box-shadow: none; -} -.bodywebsite .has-success .form-input-impressed, -.bodywebsite .has-success .form-input-impressed:focus { - box-shadow: inset 0 0 0 1px #dff0d8; -} -.bodywebsite .has-success .input-group-addon { - color: #fff; - border-color: #dff0d8; - background-color: #dff0d8; -} -.bodywebsite .form-inline .has-success ~ button[type='submit'] { - border-color: #dff0d8; - background: #dff0d8; -} -.bodywebsite .has-success .form-validation { - color: #58c476; -} -.bodywebsite .has-warning .help-block, -.bodywebsite .has-warning .control-label, -.bodywebsite .has-warning .radio, -.bodywebsite .has-warning .checkbox, -.bodywebsite .has-warning .radio-inline, -.bodywebsite .has-warning .checkbox-inline, -.bodywebsite .has-warning.radio label, -.bodywebsite .has-warning.checkbox label, -.bodywebsite .has-warning.radio-inline label, -.bodywebsite .has-warning.checkbox-inline label { - color: #c49558; -} -.bodywebsite .has-warning .form-input:not(.form-input-impressed), -.bodywebsite .has-warning .form-input:not(.form-input-impressed):focus { - border-color: #fcf8e3; - box-shadow: none; -} -.bodywebsite .has-warning .form-input-impressed, -.bodywebsite .has-warning .form-input-impressed:focus { - box-shadow: inset 0 0 0 1px #fcf8e3; -} -.bodywebsite .has-warning .input-group-addon { - color: #fff; - border-color: #fcf8e3; - background-color: #fcf8e3; -} -.bodywebsite .form-inline .has-warning ~ button[type='submit'] { - border-color: #fcf8e3; - background: #fcf8e3; -} -.bodywebsite .has-warning .form-validation { - color: #c49558; -} -.bodywebsite .has-info .help-block, -.bodywebsite .has-info .control-label, -.bodywebsite .has-info .radio, -.bodywebsite .has-info .checkbox, -.bodywebsite .has-info .radio-inline, -.bodywebsite .has-info .checkbox-inline, -.bodywebsite .has-info.radio label, -.bodywebsite .has-info.checkbox label, -.bodywebsite .has-info.radio-inline label, -.bodywebsite .has-info.checkbox-inline label { - color: #3e9cf6; -} -.bodywebsite .has-info .form-input:not(.form-input-impressed), -.bodywebsite .has-info .form-input:not(.form-input-impressed):focus { - border-color: #d9edf7; - box-shadow: none; -} -.bodywebsite .has-info .form-input-impressed, -.bodywebsite .has-info .form-input-impressed:focus { - box-shadow: inset 0 0 0 1px #d9edf7; -} -.bodywebsite .has-info .input-group-addon { - color: #fff; - border-color: #d9edf7; - background-color: #d9edf7; -} -.bodywebsite .form-inline .has-info ~ button[type='submit'] { - border-color: #d9edf7; - background: #d9edf7; -} -.bodywebsite .has-info .form-validation { - color: #3e9cf6; -} -.bodywebsite #form-output-global { - position: fixed; - bottom: 30px; - left: 15px; - visibility: hidden; - transform: translateX(-500px); - transition: .3s all ease; - z-index: 9999999; -} -.bodywebsite #form-output-global.active { - transform: translateX(0); - visibility: visible; -} -@media (min-width: 576px) { - .bodywebsite #form-output-global { - left: 30px; - } -} -.bodywebsite .form-output { - position: absolute; - top: 100%; - left: 0; - font-size: 14px; - line-height: 1.5; - margin-top: 2px; - transition: .3s; - opacity: 0; - visibility: hidden; -} -.bodywebsite .form-output.active { - opacity: 1; - visibility: visible; -} -.bodywebsite .form-output.error { - color: #fe4a21; -} -.bodywebsite .form-output.success { - color: #58c476; -} -.bodywebsite .radio .radio-custom, -.bodywebsite .radio-inline .radio-custom, -.bodywebsite .checkbox .checkbox-custom, -.bodywebsite .checkbox-inline .checkbox-custom { - opacity: 0; -} -.bodywebsite .radio .radio-custom, -.bodywebsite .radio .radio-custom-dummy, -.bodywebsite .radio-inline .radio-custom, -.bodywebsite .radio-inline .radio-custom-dummy, -.bodywebsite .checkbox .checkbox-custom, -.bodywebsite .checkbox .checkbox-custom-dummy, -.bodywebsite .checkbox-inline .checkbox-custom, -.bodywebsite .checkbox-inline .checkbox-custom-dummy { - position: absolute; - width: 18px; - height: 18px; - margin-left: -20px; - margin-top: 3px; - outline: none; - cursor: pointer; -} -.bodywebsite .radio .radio-custom-dummy, -.bodywebsite .radio-inline .radio-custom-dummy, -.bodywebsite .checkbox .checkbox-custom-dummy, -.bodywebsite .checkbox-inline .checkbox-custom-dummy { - pointer-events: none; -} -.bodywebsite .radio .radio-custom-dummy:after, -.bodywebsite .radio-inline .radio-custom-dummy:after, -.bodywebsite .checkbox .checkbox-custom-dummy:after, -.bodywebsite .checkbox-inline .checkbox-custom-dummy:after { - position: absolute; - opacity: 0; - transition: .22s; -} -.bodywebsite .radio .radio-custom:focus, -.bodywebsite .radio-inline .radio-custom:focus, -.bodywebsite .checkbox .checkbox-custom:focus, -.bodywebsite .checkbox-inline .checkbox-custom:focus { - outline: none; -} -.bodywebsite .radio-custom:checked + .radio-custom-dummy:after, -.bodywebsite .checkbox-custom:checked + .checkbox-custom-dummy:after { - opacity: 1; -} -.bodywebsite .radio, -.bodywebsite .radio-inline { - padding-left: 30px; -} -.bodywebsite .radio .radio-custom-dummy, -.bodywebsite .radio-inline .radio-custom-dummy { - margin-top: 2px; - border-radius: 50%; - margin-left: -30px; - background: transparent; - border: 2px solid #000; -} -.bodywebsite .radio .radio-custom-dummy:after, -.bodywebsite .radio-inline .radio-custom-dummy:after { - content: ''; - top: 3px; - right: 3px; - bottom: 3px; - left: 3px; - background: #00030a; - border-radius: 50%; -} -.bodywebsite .form-wrap-color .radio-inline, -.bodywebsite .form-wrap-size .radio-inline { - padding-left: 0; -} -.bodywebsite .form-wrap-color .radio-control, -.bodywebsite .form-wrap-size .radio-control { - position: relative; - display: block; - width: 24px; - height: 24px; - border-radius: 50%; - margin-top: 23px; - margin-bottom: 23px; -} -.bodywebsite .form-wrap-color .radio-control:after, -.bodywebsite .form-wrap-size .radio-control:after { - bottom: 0; -} -.bodywebsite .form-wrap-color .radio-control:after, -.bodywebsite .form-wrap-size .radio-control:after { - content: ''; - position: absolute; - left: 50%; - bottom: -23px; - transform: translateX(-50%); - width: 0; - max-width: 100%; - height: 3px; - background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - visibility: hidden; - transition: .2s; -} -.bodywebsite .form-wrap-color .radio-custom:checked ~ .radio-control:after, -.bodywebsite .form-wrap-size .radio-custom:checked ~ .radio-control:after { - visibility: visible; - width: 100%; -} -.bodywebsite .form-wrap-color .radio-custom-dummy, -.bodywebsite .form-wrap-size .radio-custom-dummy { - display: none; -} -.bodywebsite .form-wrap-size .radio-inline { - padding-left: 2px; - padding-right: 2px; -} -.bodywebsite .form-wrap-size .radio-inline + .radio-inline { - margin-left: 1px; -} -.bodywebsite .form-wrap-size .radio-control { - color: #9f9f9f; - text-align: center; - text-transform: uppercase; - transition: .2s; -} -.bodywebsite .form-wrap-size .radio-control:hover { - color: #000; -} -.bodywebsite .form-wrap-size .radio-custom:checked ~ .radio-control { - color: #000; -} -.bodywebsite .checkbox, -.bodywebsite .checkbox-inline { - padding-left: 38px; - color: #000; -} -.bodywebsite .checkbox .checkbox-custom-dummy, -.bodywebsite .checkbox-inline .checkbox-custom-dummy { - pointer-events: none; - border-radius: 2px; - margin-left: 0; - left: 0; - background: #fff; - box-shadow: none; - border: 2px solid #dedede; -} -.bodywebsite .checkbox .checkbox-custom-dummy:after, -.bodywebsite .checkbox-inline .checkbox-custom-dummy:after { - content: '\e5ca'; - font-family: 'Material Icons'; - font-size: 22px; - line-height: 10px; - position: absolute; - top: 0; - left: -1px; - color: #2a2b2b; -} -.bodywebsite .checkbox-small { - padding-left: 26px; -} -.bodywebsite .checkbox-small .checkbox-custom-dummy { - margin-top: 6px; - width: 12px; - height: 12px; - border-width: 1px; - border-radius: 1px; -} -.bodywebsite .checkbox-small .checkbox-custom-dummy:after { - top: -1px; - left: -2px; - font-size: 18px; -} -.bodywebsite .textarea-lined-wrap { - position: relative; - line-height: 2.39; -} -.bodywebsite .textarea-lined-wrap textarea { - height: 203px; - resize: none; - overflow: hidden; - line-height: 2.39; - background-color: transparent; -} -.bodywebsite .textarea-lined-wrap-xs textarea { - height: 68px; -} -.bodywebsite .page .form-classic-bordered .form-label, -.bodywebsite .page .form-classic-bordered .form-label-outside, -.bodywebsite .page .form-classic-bordered .form-input { - color: #000; -} -.bodywebsite .page .form-classic-bordered .form-input { - border: 1px solid #dedede; -} -.bodywebsite .page .form-modern .form-input, -.bodywebsite .page .form-modern .form-label { - color: #9f9f9f; -} -.bodywebsite .page .form-modern input { - height: auto; - min-height: 20px; -} -.bodywebsite .page .form-modern .form-input:focus { - border-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .page .form-modern .form-input { - padding: 6px 0; - border-radius: 0; - border-width: 0 0 1px 0; - border-color: #dedede; - background-color: transparent; -} -.bodywebsite .page .form-modern .form-label { - left: 0; - top: 18px; -} -.bodywebsite .page .form-modern .form-validation { - top: auto; - left: auto; - right: 0; - bottom: -12px; - font-style: italic; -} -.bodywebsite .page .form-modern .has-error .help-block, -.bodywebsite .page .form-modern .has-error .control-label, -.bodywebsite .page .form-modern .has-error .radio, -.bodywebsite .page .form-modern .has-error .checkbox, -.bodywebsite .page .form-modern .has-error .radio-inline, -.bodywebsite .page .form-modern .has-error .checkbox-inline, -.bodywebsite .page .form-modern .has-error.radio label, -.bodywebsite .page .form-modern .has-error.checkbox label, -.bodywebsite .page .form-modern .has-error.radio-inline label, -.bodywebsite .page .form-modern .has-error.checkbox-inline label { - color: #fe4a21; -} -.bodywebsite .page .form-modern .has-error .form-input:not(.form-input-impressed), -.bodywebsite .page .form-modern .has-error .form-input:not(.form-input-impressed):focus { - border-color: #fe4a21; - box-shadow: none; -} -.bodywebsite .page .form-modern .has-error .form-input-impressed, -.bodywebsite .page .form-modern .has-error .form-input-impressed:focus { - box-shadow: inset 0 0 0 1px #fe4a21; -} -.bodywebsite .page .form-modern .has-error .input-group-addon { - color: #fff; - border-color: #fe4a21; - background-color: #fe4a21; -} -.bodywebsite .form-inline .page .form-modern .has-error ~ button[type='submit'] { - border-color: #fe4a21; - background: #fe4a21; -} -.bodywebsite .page .form-modern .has-error .form-validation { - color: #fe4a21; -} -.bodywebsite .page .form-modern.form-darker .form-input, -.bodywebsite .page .form-modern.form-darker .form-label { - color: #000; -} -.bodywebsite .page .form-modern.form-darker .form-label:not(.focus) + .form-input { - border-color: #cdcdcd; -} -.bodywebsite .page .form-modern.form-inverse .form-label, -.bodywebsite .page .form-modern.form-inverse .form-input { - color: #9f9f9f; - background-color: transparent; -} -.bodywebsite .page .form-modern.form-inverse .form-label.text-white-05, -.bodywebsite .page .form-modern.form-inverse .form-input.text-white-05 { - color: rgba(255, 255, 255, 0.5); -} -.bodywebsite .stacktable { - width: 100%; - text-align: left; -} -.bodywebsite .st-head-row { - padding-top: 1em; -} -.bodywebsite .st-head-row.st-head-row-main { - font-size: 1.5em; - padding-top: 0; -} -.bodywebsite .st-key { - width: 49%; - text-align: right; - padding-right: 1%; -} -.bodywebsite .st-val { - width: 49%; - padding-left: 1%; -} -.bodywebsite .stacktable.large-only { - display: none; -} -.bodywebsite .stacktable.small-only { - display: table; -} -@media (min-width: 768px) { - .bodywebsite .stacktable.large-only { - display: table; - } - .bodywebsite .stacktable.small-only { - display: none; - } -} -.bodywebsite .section-relative { - position: relative; -} -.bodywebsite #sectionfooter h4, -.bodywebsite #sectiontestimonies h1 { - color: #fff; -} -@media (min-width: 768px) { - .bodywebsite .section-with-counters { - padding-top: 1px; - padding-bottom: 1px; - } - .bodywebsite .section-with-counters > div { - position: relative; - box-shadow: 2px 2px 27px 0px rgba(1, 3, 4, 0.35); - z-index: 2; - margin-top: -30px; - margin-bottom: -30px; - } -} -@media (min-width: 768px) { - .bodywebsite .section-image-aside { - position: relative; - } -} -.bodywebsite .section-image-aside-img { - position: absolute; - top: 0; - bottom: 0; - width: 190%; - -webkit-background-size: cover; - background-size: cover; -} -@media (min-width: 768px) { - .bodywebsite .section-image-aside-img { - width: 50vw; - } -} -.bodywebsite .section-image-aside-left .section-image-aside-img { - right: -50%; -} -@media (min-width: 768px) { - .bodywebsite .section-image-aside-left .section-image-aside-img { - right: 0; - } -} -.bodywebsite .section-image-aside-right .section-image-aside-img { - left: -50%; -} -@media (min-width: 768px) { - .bodywebsite .section-image-aside-right .section-image-aside-img { - left: 0; - } -} -.bodywebsite .section-15 { - padding-top: 15px; - padding-bottom: 15px; -} -.bodywebsite .section-30 { - padding-top: 30px; - padding-bottom: 30px; -} -.bodywebsite .section-35 { - padding-top: 35px; - padding-bottom: 35px; -} -.bodywebsite .section-40 { - padding-top: 40px; - padding-bottom: 40px; -} -.bodywebsite .section-45 { - padding-top: 45px; - padding-bottom: 45px; -} -.bodywebsite .section-50 { - padding-top: 50px; - padding-bottom: 50px; -} -.bodywebsite .section-60 { - padding-top: 60px; - padding-bottom: 60px; -} -.bodywebsite .section-66 { - padding-top: 66px; - padding-bottom: 66px; -} -.bodywebsite .section-75 { - padding-top: 75px; - padding-bottom: 75px; -} -.bodywebsite .section-90 { - padding-top: 90px; - padding-bottom: 90px; -} -.bodywebsite .section-100 { - padding-top: 100px; - padding-bottom: 100px; -} -.bodywebsite .section-120 { - padding-top: 120px; - padding-bottom: 120px; -} -.bodywebsite .section-130 { - padding-top: 130px; - padding-bottom: 130px; -} -.bodywebsite .section-145 { - padding-top: 145px; - padding-bottom: 145px; -} -.bodywebsite .section-165 { - padding-top: 165px; - padding-bottom: 165px; -} -@media (min-width: 576px) { - .bodywebsite .section-sm-15 { - padding-top: 15px; - padding-bottom: 15px; - } - .bodywebsite .section-sm-30 { - padding-top: 30px; - padding-bottom: 30px; - } - .bodywebsite .section-sm-35 { - padding-top: 35px; - padding-bottom: 35px; - } - .bodywebsite .section-sm-40 { - padding-top: 40px; - padding-bottom: 40px; - } - .bodywebsite .section-sm-45 { - padding-top: 45px; - padding-bottom: 45px; - } - .bodywebsite .section-sm-50 { - padding-top: 50px; - padding-bottom: 50px; - } - .bodywebsite .section-sm-60 { - padding-top: 60px; - padding-bottom: 60px; - } - .bodywebsite .section-sm-66 { - padding-top: 66px; - padding-bottom: 66px; - } - .bodywebsite .section-sm-75 { - padding-top: 75px; - padding-bottom: 75px; - } - .bodywebsite .section-sm-90 { - padding-top: 90px; - padding-bottom: 90px; - } - .bodywebsite .section-sm-100 { - padding-top: 100px; - padding-bottom: 100px; - } - .bodywebsite .section-sm-120 { - padding-top: 120px; - padding-bottom: 120px; - } - .bodywebsite .section-sm-130 { - padding-top: 130px; - padding-bottom: 130px; - } - .bodywebsite .section-sm-145 { - padding-top: 145px; - padding-bottom: 145px; - } - .bodywebsite .section-sm-165 { - padding-top: 165px; - padding-bottom: 165px; - } -} -@media (min-width: 768px) { - .bodywebsite .section-md-15 { - padding-top: 15px; - padding-bottom: 15px; - } - .bodywebsite .section-md-30 { - padding-top: 30px; - padding-bottom: 30px; - } - .bodywebsite .section-md-35 { - padding-top: 35px; - padding-bottom: 35px; - } - .bodywebsite .section-md-40 { - padding-top: 40px; - padding-bottom: 40px; - } - .bodywebsite .section-md-45 { - padding-top: 45px; - padding-bottom: 45px; - } - .bodywebsite .section-md-50 { - padding-top: 50px; - padding-bottom: 50px; - } - .bodywebsite .section-md-60 { - padding-top: 60px; - padding-bottom: 60px; - } - .bodywebsite .section-md-66 { - padding-top: 66px; - padding-bottom: 66px; - } - .bodywebsite .section-md-75 { - padding-top: 75px; - padding-bottom: 75px; - } - .bodywebsite .section-md-90 { - padding-top: 90px; - padding-bottom: 90px; - } - .bodywebsite .section-md-100 { - padding-top: 100px; - padding-bottom: 100px; - } - .bodywebsite .section-md-120 { - padding-top: 120px; - padding-bottom: 120px; - } - .bodywebsite .section-md-130 { - padding-top: 130px; - padding-bottom: 130px; - } - .bodywebsite .section-md-145 { - padding-top: 145px; - padding-bottom: 145px; - } - .bodywebsite .section-md-165 { - padding-top: 165px; - padding-bottom: 165px; - } -} -@media (min-width: 992px) { - .bodywebsite .section-lg-15 { - padding-top: 15px; - padding-bottom: 15px; - } - .bodywebsite .section-lg-30 { - padding-top: 30px; - padding-bottom: 30px; - } - .bodywebsite .section-lg-35 { - padding-top: 35px; - padding-bottom: 35px; - } - .bodywebsite .section-lg-40 { - padding-top: 40px; - padding-bottom: 40px; - } - .bodywebsite .section-lg-45 { - padding-top: 45px; - padding-bottom: 45px; - } - .bodywebsite .section-lg-50 { - padding-top: 50px; - padding-bottom: 50px; - } - .bodywebsite .section-lg-60 { - padding-top: 60px; - padding-bottom: 60px; - } - .bodywebsite .section-lg-66 { - padding-top: 66px; - padding-bottom: 66px; - } - .bodywebsite .section-lg-75 { - padding-top: 75px; - padding-bottom: 75px; - } - .bodywebsite .section-lg-90 { - padding-top: 90px; - padding-bottom: 90px; - } - .bodywebsite .section-lg-100 { - padding-top: 100px; - padding-bottom: 100px; - } - .bodywebsite .section-lg-120 { - padding-top: 120px; - padding-bottom: 120px; - } - .bodywebsite .section-lg-130 { - padding-top: 130px; - padding-bottom: 130px; - } - .bodywebsite .section-lg-145 { - padding-top: 145px; - padding-bottom: 145px; - } - .bodywebsite .section-lg-165 { - padding-top: 165px; - padding-bottom: 165px; - } -} -@media (min-width: 1200px) { - .bodywebsite .section-xl-15 { - padding-top: 15px; - padding-bottom: 15px; - } - .bodywebsite .section-xl-30 { - padding-top: 30px; - padding-bottom: 30px; - } - .bodywebsite .section-xl-35 { - padding-top: 35px; - padding-bottom: 35px; - } - .bodywebsite .section-xl-40 { - padding-top: 40px; - padding-bottom: 40px; - } - .bodywebsite .section-xl-45 { - padding-top: 45px; - padding-bottom: 45px; - } - .bodywebsite .section-xl-50 { - padding-top: 50px; - padding-bottom: 50px; - } - .bodywebsite .section-xl-60 { - padding-top: 60px; - padding-bottom: 60px; - } - .bodywebsite .section-xl-66 { - padding-top: 66px; - padding-bottom: 66px; - } - .bodywebsite .section-xl-75 { - padding-top: 75px; - padding-bottom: 75px; - } - .bodywebsite .section-xl-90 { - padding-top: 90px; - padding-bottom: 90px; - } - .bodywebsite .section-xl-100 { - padding-top: 100px; - padding-bottom: 100px; - } - .bodywebsite .section-xl-120 { - padding-top: 120px; - padding-bottom: 120px; - } - .bodywebsite .section-xl-130 { - padding-top: 130px; - padding-bottom: 130px; - } - .bodywebsite .section-xl-145 { - padding-top: 145px; - padding-bottom: 145px; - } - .bodywebsite .section-xl-165 { - padding-top: 165px; - padding-bottom: 165px; - } -} -@media (min-width: 1800px) { - .bodywebsite .section-xxl-15 { - padding-top: 15px; - padding-bottom: 15px; - } - .bodywebsite .section-xxl-30 { - padding-top: 30px; - padding-bottom: 30px; - } - .bodywebsite .section-xxl-35 { - padding-top: 35px; - padding-bottom: 35px; - } - .bodywebsite .section-xxl-40 { - padding-top: 40px; - padding-bottom: 40px; - } - .bodywebsite .section-xxl-45 { - padding-top: 45px; - padding-bottom: 45px; - } - .bodywebsite .section-xxl-50 { - padding-top: 50px; - padding-bottom: 50px; - } - .bodywebsite .section-xxl-60 { - padding-top: 60px; - padding-bottom: 60px; - } - .bodywebsite .section-xxl-66 { - padding-top: 66px; - padding-bottom: 66px; - } - .bodywebsite .section-xxl-75 { - padding-top: 75px; - padding-bottom: 75px; - } - .bodywebsite .section-xxl-90 { - padding-top: 90px; - padding-bottom: 90px; - } - .bodywebsite .section-xxl-100 { - padding-top: 100px; - padding-bottom: 100px; - } - .bodywebsite .section-xxl-120 { - padding-top: 120px; - padding-bottom: 120px; - } - .bodywebsite .section-xxl-130 { - padding-top: 130px; - padding-bottom: 130px; - } - .bodywebsite .section-xxl-145 { - padding-top: 145px; - padding-bottom: 145px; - } - .bodywebsite .section-xxl-165 { - padding-top: 165px; - padding-bottom: 165px; - } -} -.bodywebsite .section-top-15 { - padding-top: 15px; -} -.bodywebsite .section-top-30 { - padding-top: 30px; -} -.bodywebsite .section-top-35 { - padding-top: 35px; -} -.bodywebsite .section-top-40 { - padding-top: 40px; -} -.bodywebsite .section-top-45 { - padding-top: 45px; -} -.bodywebsite .section-top-50 { - padding-top: 50px; -} -.bodywebsite .section-top-60 { - padding-top: 60px; -} -.bodywebsite .section-top-66 { - padding-top: 66px; -} -.bodywebsite .section-top-75 { - padding-top: 75px; -} -.bodywebsite .section-top-90 { - padding-top: 90px; -} -.bodywebsite .section-top-100 { - padding-top: 100px; -} -.bodywebsite .section-top-120 { - padding-top: 120px; -} -.bodywebsite .section-top-130 { - padding-top: 130px; -} -.bodywebsite .section-top-145 { - padding-top: 145px; -} -.bodywebsite .section-top-165 { - padding-top: 165px; -} -@media (min-width: 576px) { - .bodywebsite .section-sm-top-15 { - padding-top: 15px; - } - .bodywebsite .section-sm-top-30 { - padding-top: 30px; - } - .bodywebsite .section-sm-top-35 { - padding-top: 35px; - } - .bodywebsite .section-sm-top-40 { - padding-top: 40px; - } - .bodywebsite .section-sm-top-45 { - padding-top: 45px; - } - .bodywebsite .section-sm-top-50 { - padding-top: 50px; - } - .bodywebsite .section-sm-top-60 { - padding-top: 60px; - } - .bodywebsite .section-sm-top-66 { - padding-top: 66px; - } - .bodywebsite .section-sm-top-75 { - padding-top: 75px; - } - .bodywebsite .section-sm-top-90 { - padding-top: 90px; - } - .bodywebsite .section-sm-top-100 { - padding-top: 100px; - } - .bodywebsite .section-sm-top-120 { - padding-top: 120px; - } - .bodywebsite .section-sm-top-130 { - padding-top: 130px; - } - .bodywebsite .section-sm-top-145 { - padding-top: 145px; - } - .bodywebsite .section-sm-top-165 { - padding-top: 165px; - } -} -@media (min-width: 768px) { - .bodywebsite .section-md-top-15 { - padding-top: 15px; - } - .bodywebsite .section-md-top-30 { - padding-top: 30px; - } - .bodywebsite .section-md-top-35 { - padding-top: 35px; - } - .bodywebsite .section-md-top-40 { - padding-top: 40px; - } - .bodywebsite .section-md-top-45 { - padding-top: 45px; - } - .bodywebsite .section-md-top-50 { - padding-top: 50px; - } - .bodywebsite .section-md-top-60 { - padding-top: 60px; - } - .bodywebsite .section-md-top-66 { - padding-top: 66px; - } - .bodywebsite .section-md-top-75 { - padding-top: 75px; - } - .bodywebsite .section-md-top-90 { - padding-top: 90px; - } - .bodywebsite .section-md-top-100 { - padding-top: 100px; - } - .bodywebsite .section-md-top-120 { - padding-top: 120px; - } - .bodywebsite .section-md-top-130 { - padding-top: 130px; - } - .bodywebsite .section-md-top-145 { - padding-top: 145px; - } - .bodywebsite .section-md-top-165 { - padding-top: 165px; - } -} -@media (min-width: 992px) { - .bodywebsite .section-lg-top-15 { - padding-top: 15px; - } - .bodywebsite .section-lg-top-30 { - padding-top: 30px; - } - .bodywebsite .section-lg-top-35 { - padding-top: 35px; - } - .bodywebsite .section-lg-top-40 { - padding-top: 40px; - } - .bodywebsite .section-lg-top-45 { - padding-top: 45px; - } - .bodywebsite .section-lg-top-50 { - padding-top: 50px; - } - .bodywebsite .section-lg-top-60 { - padding-top: 60px; - } - .bodywebsite .section-lg-top-66 { - padding-top: 66px; - } - .bodywebsite .section-lg-top-75 { - padding-top: 75px; - } - .bodywebsite .section-lg-top-90 { - padding-top: 90px; - } - .bodywebsite .section-lg-top-100 { - padding-top: 100px; - } - .bodywebsite .section-lg-top-120 { - padding-top: 120px; - } - .bodywebsite .section-lg-top-130 { - padding-top: 130px; - } - .bodywebsite .section-lg-top-145 { - padding-top: 145px; - } - .bodywebsite .section-lg-top-165 { - padding-top: 165px; - } -} -@media (min-width: 1200px) { - .bodywebsite .section-xl-top-15 { - padding-top: 15px; - } - .bodywebsite .section-xl-top-30 { - padding-top: 30px; - } - .bodywebsite .section-xl-top-35 { - padding-top: 35px; - } - .bodywebsite .section-xl-top-40 { - padding-top: 40px; - } - .bodywebsite .section-xl-top-45 { - padding-top: 45px; - } - .bodywebsite .section-xl-top-50 { - padding-top: 50px; - } - .bodywebsite .section-xl-top-60 { - padding-top: 60px; - } - .bodywebsite .section-xl-top-66 { - padding-top: 66px; - } - .bodywebsite .section-xl-top-75 { - padding-top: 75px; - } - .bodywebsite .section-xl-top-90 { - padding-top: 90px; - } - .bodywebsite .section-xl-top-100 { - padding-top: 100px; - } - .bodywebsite .section-xl-top-120 { - padding-top: 120px; - } - .bodywebsite .section-xl-top-130 { - padding-top: 130px; - } - .bodywebsite .section-xl-top-145 { - padding-top: 145px; - } - .bodywebsite .section-xl-top-165 { - padding-top: 165px; - } -} -@media (min-width: 1800px) { - .bodywebsite .section-xxl-top-15 { - padding-top: 15px; - } - .bodywebsite .section-xxl-top-30 { - padding-top: 30px; - } - .bodywebsite .section-xxl-top-35 { - padding-top: 35px; - } - .bodywebsite .section-xxl-top-40 { - padding-top: 40px; - } - .bodywebsite .section-xxl-top-45 { - padding-top: 45px; - } - .bodywebsite .section-xxl-top-50 { - padding-top: 50px; - } - .bodywebsite .section-xxl-top-60 { - padding-top: 60px; - } - .bodywebsite .section-xxl-top-66 { - padding-top: 66px; - } - .bodywebsite .section-xxl-top-75 { - padding-top: 75px; - } - .bodywebsite .section-xxl-top-90 { - padding-top: 90px; - } - .bodywebsite .section-xxl-top-100 { - padding-top: 100px; - } - .bodywebsite .section-xxl-top-120 { - padding-top: 120px; - } - .bodywebsite .section-xxl-top-130 { - padding-top: 130px; - } - .bodywebsite .section-xxl-top-145 { - padding-top: 145px; - } - .bodywebsite .section-xxl-top-165 { - padding-top: 165px; - } -} -.bodywebsite .section-bottom-15 { - padding-bottom: 15px; -} -.bodywebsite .section-bottom-30 { - padding-bottom: 30px; -} -.bodywebsite .section-bottom-35 { - padding-bottom: 35px; -} -.bodywebsite .section-bottom-40 { - padding-bottom: 40px; -} -.bodywebsite .section-bottom-45 { - padding-bottom: 45px; -} -.bodywebsite .section-bottom-50 { - padding-bottom: 50px; -} -.bodywebsite .section-bottom-60 { - padding-bottom: 60px; -} -.bodywebsite .section-bottom-66 { - padding-bottom: 66px; -} -.bodywebsite .section-bottom-75 { - padding-bottom: 75px; -} -.bodywebsite .section-bottom-90 { - padding-bottom: 90px; -} -.bodywebsite .section-bottom-100 { - padding-bottom: 100px; -} -.bodywebsite .section-bottom-120 { - padding-bottom: 120px; -} -.bodywebsite .section-bottom-130 { - padding-bottom: 130px; -} -.bodywebsite .section-bottom-145 { - padding-bottom: 145px; -} -.bodywebsite .section-bottom-165 { - padding-bottom: 165px; -} -@media (min-width: 576px) { - .bodywebsite .section-sm-bottom-15 { - padding-bottom: 15px; - } - .bodywebsite .section-sm-bottom-30 { - padding-bottom: 30px; - } - .bodywebsite .section-sm-bottom-35 { - padding-bottom: 35px; - } - .bodywebsite .section-sm-bottom-40 { - padding-bottom: 40px; - } - .bodywebsite .section-sm-bottom-45 { - padding-bottom: 45px; - } - .bodywebsite .section-sm-bottom-50 { - padding-bottom: 50px; - } - .bodywebsite .section-sm-bottom-60 { - padding-bottom: 60px; - } - .bodywebsite .section-sm-bottom-66 { - padding-bottom: 66px; - } - .bodywebsite .section-sm-bottom-75 { - padding-bottom: 75px; - } - .bodywebsite .section-sm-bottom-90 { - padding-bottom: 90px; - } - .bodywebsite .section-sm-bottom-100 { - padding-bottom: 100px; - } - .bodywebsite .section-sm-bottom-120 { - padding-bottom: 120px; - } - .bodywebsite .section-sm-bottom-130 { - padding-bottom: 130px; - } - .bodywebsite .section-sm-bottom-145 { - padding-bottom: 145px; - } - .bodywebsite .section-sm-bottom-165 { - padding-bottom: 165px; - } -} -@media (min-width: 768px) { - .bodywebsite .section-md-bottom-15 { - padding-bottom: 15px; - } - .bodywebsite .section-md-bottom-30 { - padding-bottom: 30px; - } - .bodywebsite .section-md-bottom-35 { - padding-bottom: 35px; - } - .bodywebsite .section-md-bottom-40 { - padding-bottom: 40px; - } - .bodywebsite .section-md-bottom-45 { - padding-bottom: 45px; - } - .bodywebsite .section-md-bottom-50 { - padding-bottom: 50px; - } - .bodywebsite .section-md-bottom-60 { - padding-bottom: 60px; - } - .bodywebsite .section-md-bottom-66 { - padding-bottom: 66px; - } - .bodywebsite .section-md-bottom-75 { - padding-bottom: 75px; - } - .bodywebsite .section-md-bottom-90 { - padding-bottom: 90px; - } - .bodywebsite .section-md-bottom-100 { - padding-bottom: 100px; - } - .bodywebsite .section-md-bottom-120 { - padding-bottom: 120px; - } - .bodywebsite .section-md-bottom-130 { - padding-bottom: 130px; - } - .bodywebsite .section-md-bottom-145 { - padding-bottom: 145px; - } - .bodywebsite .section-md-bottom-165 { - padding-bottom: 165px; - } -} -@media (min-width: 992px) { - .bodywebsite .section-lg-bottom-15 { - padding-bottom: 15px; - } - .bodywebsite .section-lg-bottom-30 { - padding-bottom: 30px; - } - .bodywebsite .section-lg-bottom-35 { - padding-bottom: 35px; - } - .bodywebsite .section-lg-bottom-40 { - padding-bottom: 40px; - } - .bodywebsite .section-lg-bottom-45 { - padding-bottom: 45px; - } - .bodywebsite .section-lg-bottom-50 { - padding-bottom: 50px; - } - .bodywebsite .section-lg-bottom-60 { - padding-bottom: 60px; - } - .bodywebsite .section-lg-bottom-66 { - padding-bottom: 66px; - } - .bodywebsite .section-lg-bottom-75 { - padding-bottom: 75px; - } - .bodywebsite .section-lg-bottom-90 { - padding-bottom: 90px; - } - .bodywebsite .section-lg-bottom-100 { - padding-bottom: 100px; - } - .bodywebsite .section-lg-bottom-120 { - padding-bottom: 120px; - } - .bodywebsite .section-lg-bottom-130 { - padding-bottom: 130px; - } - .bodywebsite .section-lg-bottom-145 { - padding-bottom: 145px; - } - .bodywebsite .section-lg-bottom-165 { - padding-bottom: 165px; - } -} -@media (min-width: 1200px) { - .bodywebsite .section-xl-bottom-15 { - padding-bottom: 15px; - } - .bodywebsite .section-xl-bottom-30 { - padding-bottom: 30px; - } - .bodywebsite .section-xl-bottom-35 { - padding-bottom: 35px; - } - .bodywebsite .section-xl-bottom-40 { - padding-bottom: 40px; - } - .bodywebsite .section-xl-bottom-45 { - padding-bottom: 45px; - } - .bodywebsite .section-xl-bottom-50 { - padding-bottom: 50px; - } - .bodywebsite .section-xl-bottom-60 { - padding-bottom: 60px; - } - .bodywebsite .section-xl-bottom-66 { - padding-bottom: 66px; - } - .bodywebsite .section-xl-bottom-75 { - padding-bottom: 75px; - } - .bodywebsite .section-xl-bottom-90 { - padding-bottom: 90px; - } - .bodywebsite .section-xl-bottom-100 { - padding-bottom: 100px; - } - .bodywebsite .section-xl-bottom-120 { - padding-bottom: 120px; - } - .bodywebsite .section-xl-bottom-130 { - padding-bottom: 130px; - } - .bodywebsite .section-xl-bottom-145 { - padding-bottom: 145px; - } - .bodywebsite .section-xl-bottom-165 { - padding-bottom: 165px; - } -} -@media (min-width: 1800px) { - .bodywebsite .section-xxl-bottom-15 { - padding-bottom: 15px; - } - .bodywebsite .section-xxl-bottom-30 { - padding-bottom: 30px; - } - .bodywebsite .section-xxl-bottom-35 { - padding-bottom: 35px; - } - .bodywebsite .section-xxl-bottom-40 { - padding-bottom: 40px; - } - .bodywebsite .section-xxl-bottom-45 { - padding-bottom: 45px; - } - .bodywebsite .section-xxl-bottom-50 { - padding-bottom: 50px; - } - .bodywebsite .section-xxl-bottom-60 { - padding-bottom: 60px; - } - .bodywebsite .section-xxl-bottom-66 { - padding-bottom: 66px; - } - .bodywebsite .section-xxl-bottom-75 { - padding-bottom: 75px; - } - .bodywebsite .section-xxl-bottom-90 { - padding-bottom: 90px; - } - .bodywebsite .section-xxl-bottom-100 { - padding-bottom: 100px; - } - .bodywebsite .section-xxl-bottom-120 { - padding-bottom: 120px; - } - .bodywebsite .section-xxl-bottom-130 { - padding-bottom: 130px; - } - .bodywebsite .section-xxl-bottom-145 { - padding-bottom: 145px; - } - .bodywebsite .section-xxl-bottom-165 { - padding-bottom: 165px; - } -} -html .bodywebsite .group { - -webkit-transform: translateY(-15px); - transform: translateY(-15px); - margin-bottom: -15px; - margin-left: -15px; -} -html .bodywebsite .group > *, -html .bodywebsite .group > *:first-child { - display: inline-block; - margin-top: 15px; - margin-left: 15px; -} -html .bodywebsite .group-xs { - -webkit-transform: translateY(-5px); - transform: translateY(-5px); - margin-bottom: -5px; - margin-left: -5px; -} -html .bodywebsite .group-xs > *, -html .bodywebsite .group-xs > *:first-child { - display: inline-block; - margin-top: 5px; - margin-left: 5px; -} -html .bodywebsite .group-sm { - -webkit-transform: translateY(-10px); - transform: translateY(-10px); - margin-bottom: -10px; - margin-left: -10px; -} -html .bodywebsite .group-sm > *, -html .bodywebsite .group-sm > *:first-child { - display: inline-block; - margin-top: 10px; - margin-left: 10px; -} -html .bodywebsite .group-md { - -webkit-transform: translateY(-15px); - transform: translateY(-15px); - margin-bottom: -15px; - margin-left: -15px; -} -html .bodywebsite .group-md > *, -html .bodywebsite .group-md > *:first-child { - display: inline-block; - margin-top: 15px; - margin-left: 15px; -} -html .bodywebsite .group-lg { - -webkit-transform: translateY(-20px); - transform: translateY(-20px); - margin-bottom: -20px; - margin-left: -20px; -} -html .bodywebsite .group-lg > *, -html .bodywebsite .group-lg > *:first-child { - display: inline-block; - margin-top: 20px; - margin-left: 20px; -} -html .bodywebsite .group-xl { - -webkit-transform: translateY(-30px); - transform: translateY(-30px); - margin-bottom: -30px; - margin-left: -30px; -} -html .bodywebsite .group-xl > *, -html .bodywebsite .group-xl > *:first-child { - display: inline-block; - margin-top: 30px; - margin-left: 30px; -} -html .bodywebsite .group-top > *, -html .bodywebsite .group-top > *:first-child { - vertical-align: top; -} -html .bodywebsite .group-middle > *, -html .bodywebsite .group-middle > *:first-child { - vertical-align: middle; -} -html .bodywebsite .group-bottom > *, -html .bodywebsite .group-bottom > *:first-child { - vertical-align: bottom; -} -html .bodywebsite .group-inline > * { - display: inline; -} -html .bodywebsite .group-inline > *:not(:last-child) { - margin-right: .25em; -} -html .bodywebsite .group-xl-responsive { - -webkit-transform: translateY(-18px); - transform: translateY(-18px); - margin-bottom: -18px; - margin-left: -18px; -} -html .bodywebsite .group-xl-responsive > *, -html .bodywebsite .group-xl-responsive > *:first-child { - display: inline-block; - margin-top: 18px; - margin-left: 18px; -} -@media (min-width: 768px) { - html .bodywebsite .group-xl-responsive { - -webkit-transform: translateY(-30px); - transform: translateY(-30px); - margin-bottom: -30px; - margin-left: -30px; - } - html .bodywebsite .group-xl-responsive > *, - html .bodywebsite .group-xl-responsive > *:first-child { - display: inline-block; - margin-top: 30px; - margin-left: 30px; - } -} -.bodywebsite .group-flex-center { - display: -webkit-inline-box; - display: -webkit-inline-flex; - display: -ms-inline-flexbox; - display: inline-flex; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - -webkit-flex-wrap: wrap; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; -} -.bodywebsite .relative { - position: relative; -} -.bodywebsite .static { - position: static; -} -.bodywebsite .block-top-level { - position: relative; - z-index: 3; -} -.bodywebsite .height-fill { - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-direction: column; - -ms-flex-direction: column; - flex-direction: column; - -webkit-align-items: stretch; - -ms-flex-align: stretch; - align-items: stretch; -} -.bodywebsite .height-fill > * { - -webkit-flex-grow: 1; - -ms-flex-positive: 1; - flex-grow: 1; -} -.bodywebsite .centered { - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; -} -.bodywebsite .align-bottom { - -webkit-align-self: flex-end; - -ms-flex-item-align: end; - align-self: flex-end; -} -.bodywebsite .block-centered { - margin-left: auto; - margin-right: auto; -} -@media (max-width: 767px) { - .bodywebsite .responsive-centered { - margin-left: auto; - margin-right: auto; - } -} -.bodywebsite .overflow-hidden { - overflow: hidden; -} -.bodywebsite .page .white-space-normal { - white-space: normal; -} -.bodywebsite * + h1, -.bodywebsite * + .h1 { - margin-top: 20px; -} -@media (min-width: 768px) { - .bodywebsite * + h1, - .bodywebsite * + .h1 { - margin-top: 27px; - } -} -@media (min-width: 992px) { - .bodywebsite * + h1, - .bodywebsite * + .h1 { - margin-top: 34px; - } -} -.bodywebsite * + h2, -.bodywebsite * + .h2 { - margin-top: 25px; -} -.bodywebsite * + h3, -.bodywebsite * + .h3 { - margin-top: 17px; -} -.bodywebsite * + h4, -.bodywebsite * + .h4 { - margin-top: 15px; -} -.bodywebsite h1 + *, -.bodywebsite .h1 + * { - margin-top: 25px; -} -.bodywebsite h2 + *, -.bodywebsite .h2 + * { - margin-top: 18px; -} -.bodywebsite h3 + *, -.bodywebsite .h3 + * { - margin-top: 19px; -} -.bodywebsite h4 + *, -.bodywebsite .h4 + * { - margin-top: 18px; -} -.bodywebsite * + p, -.bodywebsite * + p { - margin-top: 14px; -} -.bodywebsite * + .text-big { - margin-top: 20px; -} -.bodywebsite hr + * { - margin-top: 18px; -} -@media (min-width: 1200px) { - .bodywebsite hr + * { - margin-top: 26px; - } -} -.bodywebsite * + .big { - margin-top: 6px; -} -.bodywebsite * + .text-large { - margin-top: 10px; -} -.bodywebsite * + .text-bigger { - margin-top: 28px; -} -.bodywebsite * + .btn { - margin-top: 30px; -} -@media (min-width: 1200px) { - .bodywebsite * + .btn { - margin-top: 44px; - } -} -.bodywebsite * + .link { - margin-top: 18px; -} -.bodywebsite * + .contact-info { - margin-top: 16px; -} -.bodywebsite * + .list-inline { - margin-top: 32px; -} -.bodywebsite * + .list-terms { - margin-top: 42px; -} -@media (min-width: 1200px) { - .bodywebsite * + .list-terms { - margin-top: 62px; - } -} -.bodywebsite * + .list-marked, -.bodywebsite * + .list-ordered { - margin-top: 22px; -} -.bodywebsite * + .link-wrap { - margin-top: 8px; -} -.bodywebsite * + .link-iconed { - margin-top: 2px; -} -.bodywebsite .contact-info { - vertical-align: baseline; -} -.bodywebsite .contact-info a { - display: inline-block; -} -.bodywebsite .contact-info dl dt, -.bodywebsite .contact-info dl dd { - display: inline-block; -} -.bodywebsite .contact-info dl dt:after { - content: ':'; - display: inline-block; - text-align: center; -} -.bodywebsite .contact-info .dl-inline dt { - padding-right: 0; -} -.bodywebsite .grid-system p { - color: #00030a; -} -@media (max-width: 1199px) { - .bodywebsite .grid-system p { - width: 100%; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - } -} -.bodywebsite .object-inline, -.bodywebsite .object-inline-baseline { - white-space: nowrap; -} -.bodywebsite .object-inline > * + *, -.bodywebsite .object-inline-baseline > * + * { - margin-top: 0; - margin-left: 5px; -} -.bodywebsite .object-inline { - vertical-align: middle; -} -.bodywebsite .object-inline > * { - display: inline-block; - vertical-align: middle; -} -.bodywebsite .object-inline-baseline { - vertical-align: baseline; -} -.bodywebsite .object-inline-baseline > * { - display: inline-block; - vertical-align: baseline; -} -.bodywebsite .row-no-gutter { - margin-left: 0; - margin-right: 0; -} -.bodywebsite .row-no-gutter [class*='col'] { - padding: 0; -} -.bodywebsite .text-width-1 { - max-width: 400px; -} -@media (min-width: 992px) { - .bodywebsite .text-width-1 { - max-width: 310px; - } -} -.bodywebsite .min-width-1 { - min-width: 100%; -} -@media (min-width: 576px) { - .bodywebsite .min-width-1 { - min-width: 270px; - } -} -.bodywebsite .img-shadow { - box-shadow: -3px 2px 4px 0px rgba(0, 0, 0, 0.58); -} -@media (min-width: 768px) { - .bodywebsite .img-shadow { - box-shadow: -5px 4px 8px 0px rgba(0, 0, 0, 0.58); - } -} -.bodywebsite .box { - box-shadow: 0 5px 23px 0 rgba(0, 0, 0, 0.3); - padding: 50px 30px; - margin-top: 10px; - margin-bottom: 10px; -} -@media (min-width: 992px) { - .bodywebsite .box { - padding: 55px 30px 65px 44px; - } -} -@media (min-width: 1200px) { - .bodywebsite .box { - padding: 54px 40px 85px 54px; - } -} -.bodywebsite .box-xs { - padding: 38px 20px; -} -.bodywebsite .page .box-list-xs { - box-shadow: 0 5px 13px 0 rgba(0, 0, 0, 0.2); -} -.bodywebsite .page .box-list-xs .box-xs + .box-xs { - border-top: 1px solid #1c2e3f; -} -@media (min-width: 768px) { - .bodywebsite .page .box-list-xs { - max-width: 170px; - } -} -.bodywebsite .group-item { - width: 100%; - max-width: 220px; - margin-left: auto; - margin-right: auto; -} -@media (min-width: 576px) { - .bodywebsite .group-item { - max-width: 300px; - } -} -@media (min-width: 768px) { - .bodywebsite .group-item { - min-width: 40%; - max-width: 0; - } -} -@media (min-width: 1200px) { - .bodywebsite .group-item { - min-width: 272px; - } - .bodywebsite .group-item-sm { - min-width: 195px; - } -} -@media (min-width: 1200px) { - .bodywebsite .border-modern { - position: relative; - } - .bodywebsite .border-modern .border-modern-item-1, - .bodywebsite .border-modern .border-modern-item-2, - .bodywebsite .border-modern .border-modern-item-3, - .bodywebsite .border-modern .border-modern-item-4 { - position: absolute; - width: 45px; - height: 45px; - border-left: 3px solid maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - border-top: 3px solid maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - } - .bodywebsite .border-modern .border-modern-item-1, - .bodywebsite .border-modern .border-modern-item-2 { - top: -27px; - } - .bodywebsite .border-modern .border-modern-item-3, - .bodywebsite .border-modern .border-modern-item-4 { - bottom: -68px; - } - .bodywebsite .border-modern .border-modern-item-1, - .bodywebsite .border-modern .border-modern-item-3 { - left: 0px; - } - .bodywebsite .border-modern .border-modern-item-2, - .bodywebsite .border-modern .border-modern-item-4 { - right: 0px; - } - .bodywebsite .border-modern .border-modern-item-2 { - transform: rotate(90deg); - } - .bodywebsite .border-modern .border-modern-item-3 { - transform: rotate(-90deg); - } - .bodywebsite .border-modern .border-modern-item-4 { - transform: rotate(180deg); - } -} -.bodywebsite .pagination-custom { - display: inline-block; - position: relative; - transform: translateY(-4px); - margin-bottom: -4px; -} -.bodywebsite .pagination-custom > * { - margin-top: 4px; -} -.bodywebsite .pagination-custom > *:not(:last-child) { - margin-right: 4px; -} -.bodywebsite .pagination-custom .page-item { - display: inline-block; - line-height: 1; -} -.bodywebsite .pagination-custom .page-item:first-child .page-link, -.bodywebsite .pagination-custom .page-item:last-child .page-link { - padding-left: 25px; - padding-right: 25px; - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - border-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .pagination-custom .page-item .page-link { - display: block; - width: auto; - min-width: 52px; - height: 52px; - padding: 10px 20px; - border: 2px solid; - border-radius: 0; - font: 700 14px/14px "Roboto", Helvetica, Arial, sans-serif; - text-transform: uppercase; - vertical-align: middle; -} -.bodywebsite .pagination-custom .page-item .page-link:after { - content: ''; - height: 108%; - width: 0; - display: inline-block; - vertical-align: middle; -} -.bodywebsite .pagination-custom .page-item .page-link, -.bodywebsite .pagination-custom .page-item .page-link:active, -.bodywebsite .pagination-custom .page-item .page-link:focus { - color: #000; - background: transparent; - border-color: #cdcdcd; -} -.bodywebsite .pagination-custom .page-item .page-link:hover { - color: #fff; - background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - border-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .pagination-custom .page-item.disabled, -.bodywebsite .pagination-custom .page-item.active { - pointer-events: none; -} -.bodywebsite .pagination-custom .page-item.active .page-link { - color: #fff; - background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - border-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .pagination-custom .page-item.disabled .page-link { - color: #f9f9f9; - background: #cdcdcd; - border-color: #cdcdcd; -} -.bodywebsite .label-custom { - padding: .35em .3em .25em; - font-weight: 400; - font-size: 70%; - text-transform: uppercase; -} -.bodywebsite .mac .label-custom { - padding-top: .4em; -} -.bodywebsite .label-custom.label-danger { - color: #fff; - background: #fe4a21; - box-shadow: inset 0 8px 12px rgba(0, 0, 0, 0.25); -} -.bodywebsite .label-custom.label-info { - color: #fff; - background: #3e9cf6; - box-shadow: inset 0 8px 12px rgba(0, 0, 0, 0.25); -} -.bodywebsite blockquote { - font: inherit; - padding: 0; - margin: 0; - border: 0; -} -.bodywebsite blockquote q:before, -.bodywebsite blockquote q:after { - content: none; -} -.bodywebsite blockquote cite { - font-style: normal; -} -.bodywebsite .quote-default { - position: relative; - padding: 43px 0 43px 6px; - color: #00030a; -} -.bodywebsite .quote-default svg { - fill: #ddd; -} -.bodywebsite .quote-default .quote-open, -.bodywebsite .quote-default .quote-close { - position: absolute; - left: 30px; -} -.bodywebsite .quote-default .quote-open { - top: 0; -} -.bodywebsite .quote-default .quote-close { - bottom: 0; -} -.bodywebsite .quote-bordered { - padding-top: 14px; -} -.bodywebsite .quote-bordered .quote-body { - position: relative; - padding-bottom: 10px; -} -.bodywebsite .quote-bordered h6 { - font-size: 18px; -} -.bodywebsite .quote-bordered .quote-body-inner { - position: relative; - padding: 37px 22px 29px 34px; - border-style: solid; - border-width: 1px 1px 0 1px; - border-color: #e5e7e9; -} -.bodywebsite .quote-bordered .quote-body-inner:before, -.bodywebsite .quote-bordered .quote-body-inner:after { - content: ''; - position: absolute; - bottom: -10px; - height: 10px; - border-style: solid; - border-color: #e5e7e9; - background-color: transparent; -} -.bodywebsite .quote-bordered .quote-body-inner:before { - left: 10px; - width: 46px; - border-width: 1px 1px 0 0; - transform: skew(45deg); - transform-origin: 100% 100%; -} -.bodywebsite .quote-bordered .quote-body-inner:after { - right: 10px; - width: calc(34%); - border-width: 1px 0 0 1px; - transform: skew(-45deg); - transform-origin: 0 100%; -} -.bodywebsite .quote-bordered .quote-open { - position: absolute; - top: -10px; - left: 34px; - z-index: 2; -} -.bodywebsite .quote-bordered .quote-open > svg { - fill: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .quote-bordered .quote-footer { - padding-left: 25px; -} -.bodywebsite .quote-bordered cite { - font-size: 17px; - font-weight: 900; - line-height: 21px; - color: #fff; -} -.bodywebsite .quote-bordered * + .quote-footer { - margin-top: 9px; -} -.bodywebsite .quote-bordered cite + p { - margin-top: 0; -} -.bodywebsite .quote-bordered-inverse cite, -.bodywebsite .quote-bordered-inverse q { - color: #000; -} -.bodywebsite .quote-minimal-bordered { - position: relative; - padding: 16px 0 26px; - text-align: center; -} -.bodywebsite .quote-minimal-bordered q { - font: 400 20px "Roboto", Helvetica, Arial, sans-serif; - font-style: italic; - color: #464a4d; -} -.bodywebsite .quote-minimal-bordered q:before, -.bodywebsite .quote-minimal-bordered q:after { - content: '"'; -} -.bodywebsite .quote-minimal-bordered:before, -.bodywebsite .quote-minimal-bordered:after { - content: ''; - position: absolute; - left: 50%; - width: 270px; - height: 1px; - transform: translateX(-50%); - background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, #dedede 50%, rgba(0, 0, 0, 0) 100%); - background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, #dedede 50%, rgba(0, 0, 0, 0) 100%); - background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, #dedede 50%, rgba(0, 0, 0, 0) 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ffffff', endColorstr='#00000000', GradientType=1); -} -.bodywebsite .quote-minimal-bordered:before { - top: 0; -} -.bodywebsite .quote-minimal-bordered:after { - bottom: 0; -} -@media (min-width: 768px) { - .bodywebsite .quote-minimal-bordered q { - font-size: 24px; - line-height: 1.55; - } -} -@media (min-width: 1200px) { - .bodywebsite .quote-minimal-bordered q { - font-size: 30px; - } -} -.bodywebsite .quote-minimal q { - font-size: 18px; - font-weight: 300; - font-style: italic; - line-height: 1.2; - color: #000; -} -.bodywebsite .quote-minimal cite { - font: 700 15px "Roboto", Helvetica, Arial, sans-serif; - line-height: 1.1; - color: #000; -} -.bodywebsite .quote-minimal .caption { - color: #9f9f9f; -} -.bodywebsite .quote-minimal.quote-minimal-inverse q { - color: #fff; -} -.bodywebsite .quote-minimal.quote-minimal-inverse cite { - color: #fff; -} -.bodywebsite .quote-minimal.quote-minimal-inverse .caption { - color: rgba(255, 255, 255, 0.5); -} -.bodywebsite .quote-minimal * + .caption { - margin-top: 0; -} -.bodywebsite .quote-minimal * + .quote-meta { - margin-top: 20px; -} -.bodywebsite .quote-strict q, -.bodywebsite .quote-strict cite { - color: #000; -} -.bodywebsite .quote-strict q { - font-size: 19px; - font-weight: 300; - font-style: italic; - line-height: 28px; -} -.bodywebsite .quote-strict cite { - display: block; - font: 700 16px/21px "Roboto", Helvetica, Arial, sans-serif; - text-transform: uppercase; -} -.bodywebsite .quote-strict * + cite { - margin-top: 20px; -} -.bodywebsite .quote-strict.quote-strict-inverse q, -.bodywebsite .quote-strict.quote-strict-inverse cite { - color: #fff; -} -.bodywebsite .quote-vertical { - max-width: 360px; - margin-left: auto; - margin-right: auto; - text-align: center; -} -.bodywebsite .quote-vertical q { - font-size: 16px; - line-height: 1.57895; - font-weight: 100; - color: rgba(0, 0, 0, 0.5); -} -.bodywebsite .quote-vertical cite { - display: block; - color: #000; - font: 700 14px/18px "Roboto", Helvetica, Arial, sans-serif; -} -.bodywebsite .quote-vertical .quote-open > svg { - fill: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .quote-vertical .quote-image, -.bodywebsite .quote-vertical .quote-image > img { - border-radius: 600px; -} -.bodywebsite .quote-vertical .quote-image > img { - width: auto; -} -.bodywebsite .quote-vertical * + cite { - margin-top: 16px; -} -.bodywebsite .quote-vertical * + .caption { - margin-top: 0; -} -.bodywebsite .quote-vertical * + .quote-text { - margin-top: 25px; -} -.bodywebsite .quote-vertical * + .quote-meta { - margin-top: 25px; -} -.bodywebsite .quote-vertical.quote-vertical-inverse q, -.bodywebsite .quote-vertical.quote-vertical-inverse cite { - color: #fff; -} -.bodywebsite .quote-vertical.quote-vertical-inverse .cite { - color: rgba(255, 255, 255, 0.5); -} -.bodywebsite .quote-vertical.quote-vertical-inverse .quote-open > svg { - fill: #fff; -} -.bodywebsite .quote-review cite { - font: 700 14px/18px "Roboto", Helvetica, Arial, sans-serif; - text-transform: uppercase; - letter-spacing: -0.025em; - color: #000; -} -.bodywebsite .quote-review .quote-header { - position: relative; - transform: translateY(-2px); - margin-bottom: -2px; -} -.bodywebsite .quote-review .quote-header > * { - margin-top: 2px; -} -.bodywebsite .quote-review .quote-header > *:not(:last-child) { - margin-right: 10px; -} -.bodywebsite .quote-review .quote-header > * { - display: inline-block; - vertical-align: middle; -} -.bodywebsite .quote-review * + .quote-body { - margin-top: 10px; -} -.bodywebsite * + .quote-review { - margin-top: 35px; -} -@media (min-width: 768px) { - .bodywebsite .quote-minimal q { - font-size: 22px; - } - .bodywebsite .quote-minimal cite { - font-size: 19px; - } - .bodywebsite .quote-minimal * + .quote-meta { - margin-top: 37px; - } - .bodywebsite * + .quote-review { - margin-top: 45px; - } -} -@media (min-width: 992px) { - .bodywebsite .quote-minimal q { - font-size: 24px; - } - .bodywebsite .quote-vertical q { - font-size: 19px; - } -} -.bodywebsite .quote-left .divider-fullwidth { - margin-top: 20px; - background: #bcd; -} -.bodywebsite .quote-left .quote-name { - font-size: 18px; - font-weight: 500; - color: #fff; -} -@media (min-width: 992px) { - .bodywebsite .quote-left .quote-name { - font-size: 24px; - } -} -.bodywebsite .quote-left .quote-desc-text { - font-size: 26px; - line-height: 1; - font-style: italic; - font-weight: 700; -} -@media (min-width: 992px) { - .bodywebsite .quote-left .quote-desc-text { - font-size: 36px; - } -} -.bodywebsite .quote-left .quote-body { - margin-top: 27px; - padding-left: 75px; - position: relative; - text-align: left; -} -.bodywebsite .quote-left .quote-body:before { - content: ''; - position: absolute; - top: 6px; - left: 0; - width: 50px; - height: 36px; - background: url("medias/image/ref; ?>/icon-quote.png") no-repeat top left; - opacity: .5; -} -.bodywebsite .quote-left .quote-body q { - color: #fff; -} -.bodywebsite .quote-left .h4 + *, -.bodywebsite .quote-left h5 + * { - margin-top: 0; -} -.bodywebsite .page .box-text > * { - display: inline; - margin: 0 .25em 0 0; -} -.bodywebsite .icon-box-horizontal .unit-left { - min-width: 48px; -} -.bodywebsite .icon-box-horizontal [class*='icon-md'] { - margin-top: -2px; -} -.bodywebsite .icon-box-horizontal [class*='icon-lg'] { - margin-top: -5px; -} -.bodywebsite .icon-box-horizontal * + p { - margin-top: 9px; -} -.bodywebsite .icon-box-vertical * + p { - margin-top: 9px; -} -.bodywebsite .icon-box-vertical-sm { - max-width: 370px; -} -@media (max-width: 767px) { - .bodywebsite .icon-box-vertical-sm { - margin-left: auto; - margin-right: auto; - } -} -.bodywebsite .icon-box { - position: relative; - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-direction: column; - -ms-flex-direction: column; - flex-direction: column; - -webkit-flex-wrap: nowrap; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; - width: 100%; - padding: 35px 30px; - text-align: center; - cursor: default; -} -@media (min-width: 768px) { - .bodywebsite .icon-box:before, - .bodywebsite .icon-box:after { - content: ''; - position: absolute; - width: 100%; - height: 100%; - border: 1px solid #e5e7e9; - pointer-events: none; - transition: .33s all ease; - } - .bodywebsite .icon-box.icon-box-top-line:before { - border-width: 1px 0 0 0; - } - .bodywebsite .icon-box:before { - top: 0; - left: 0; - border-width: 0 0 0 0; - } - .bodywebsite .icon-box:after { - bottom: 0; - right: 0; - border-width: 0 1px 1px 0; - } -} -.bodywebsite .icon-box .icon:after { - opacity: 0; -} -.bodywebsite .icon-box .btn:hover { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .icon-box .box-top, -.bodywebsite .icon-box .box-body { - position: relative; - will-change: transform; - transition: .33s all ease; - -webkit-filter: blur(0); -} -.bodywebsite .icon-box .box-top { - top: 0; -} -.bodywebsite .icon-box .box-body { - max-width: 100%; -} -.bodywebsite .icon-box .box-header { - bottom: 0; -} -.bodywebsite .icon-box .box-icon { - min-height: 46px; - display: -webkit-inline-box; - display: -webkit-inline-flex; - display: -ms-inline-flexbox; - display: inline-flex; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - -webkit-flex-wrap: nowrap; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; -} -.bodywebsite .icon-box * + .box-header { - margin-top: 10px; -} -.bodywebsite .icon-box * + .box-body { - margin-top: 22px; -} -.bodywebsite .icon-box .box-body + .btn { - margin-top: 18px; -} -.bodywebsite .icon-box.hover .box-top, -.bodywebsite .icon-box:hover .box-top { - -webkit-transform: translateY(-7px); - transform: translateY(-7px); -} -.bodywebsite .icon-box.hover .btn, -.bodywebsite .icon-box.hover .box-body, -.bodywebsite .icon-box:hover .btn, -.bodywebsite .icon-box:hover .box-body { - -webkit-transform: translateY(7px); - transform: translateY(7px); -} -@media (min-width: 992px) { - .bodywebsite .desktop .icon-box .icon-box-overlay { - position: absolute; - top: 0; - bottom: 0; - right: 0; - left: 0; - opacity: 0; - background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - transition: 0.2s ease-in-out; - } - .bodywebsite .desktop .icon-box:hover .icon-box-overlay { - opacity: 1; - z-index: 5; - -webkit-transform: scale(1.05); - transform: scale(1.05); - } - .bodywebsite .desktop .icon-box:hover .btn { - z-index: 6; - } - .bodywebsite .desktop .icon-box:hover .box-body, - .bodywebsite .desktop .icon-box:hover .box-top { - z-index: 6; - } -} -@media (min-width: 768px) { - .bodywebsite .icon-box { - padding: 67px 37px 61px; - margin-left: auto; - margin-right: auto; - } -} -@media (min-width: 1400px) { - .bodywebsite .icon-box { - padding: 67px 110px 61px; - } -} -@media (min-width: 1800px) { - .bodywebsite .icon-box { - padding: 90px 165px 82px; - } -} -.bodywebsite .list-blocks { - counter-reset: li; -} -.bodywebsite .list-blocks > li { - display: block; -} -.bodywebsite .list-blocks .block-list-counter:before { - position: relative; - content: counter(li, decimal-leading-zero); - counter-increment: li; - font: 700 30px/30px "Roboto", Helvetica, Arial, sans-serif; - letter-spacing: -0.025em; - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .list-blocks > li + li { - margin-top: 50px; -} -.bodywebsite .block-image-plate { - display: block; - width: 100%; -} -.bodywebsite .block-image-plate .block-header { - max-width: 400px; -} -.bodywebsite .block-image-plate .block-inner { - position: relative; - padding: 45px 30px; -} -.bodywebsite .block-image-plate .block-inner:after { - content: ''; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 0; - background: rgba(0, 0, 0, 0.7); -} -.bodywebsite .block-image-plate .block-inner > * { - position: relative; - z-index: 2; -} -.bodywebsite .block-image-plate * + .block-text { - margin-top: 18px; -} -.bodywebsite .block-image-plate * + .block-body { - margin-top: 22px; -} -@media (max-width: 767px) { - .bodywebsite .block-image-plate { - margin-left: -16px; - margin-right: -15px; - width: calc(132%); - } -} -@media (min-width: 768px) { - .bodywebsite .block-image-plate .block-header { - max-width: 340px; - } - .bodywebsite .block-image-plate .block-header h3 { - line-height: 1.2; - } - .bodywebsite .block-image-plate .block-inner { - padding: 60px 12.5% 60px 8.33333%; - } - .bodywebsite .block-image-plate .block-body { - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - -webkit-flex-wrap: nowrap; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -webkit-align-items: flex-start; - -ms-flex-align: start; - align-items: flex-start; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; - } - .bodywebsite .block-image-plate .block-left { - -webkit-flex-shrink: 0; - -ms-flex-negative: 0; - flex-shrink: 0; - -webkit-flex-basis: 11.11111%; - -ms-flex-preferred-size: 11.11111%; - flex-basis: 11.11111%; - max-width: 11.11111%; - max-width: 100px; - } - .bodywebsite .block-image-plate .block-body { - -webkit-flex-grow: 1; - -ms-flex-positive: 1; - flex-grow: 1; - } - .bodywebsite .block-image-plate * + .block-text { - margin-top: 0; - } -} -@media (min-width: 992px) { - .bodywebsite .block-image-plate .block-header { - max-width: 410px; - } - .bodywebsite .block-image-plate .block-inner { - padding-right: 16%; - padding-top: 90px; - padding-bottom: 95px; - } -} -.bodywebsite .block-vacation { - position: relative; - width: 100%; - padding: 39px 9% 45px; - border-radius: 4px; - background: #fff; - box-shadow: -1px 0px 10px 0px rgba(65, 65, 65, 0.12); -} -.bodywebsite .block-vacation, -.bodywebsite .block-vacation:active, -.bodywebsite .block-vacation:focus, -.bodywebsite .block-vacation:hover { - color: #9f9f9f; -} -.bodywebsite .block-vacation:hover { - box-shadow: -3px 5px 12px 0px rgba(65, 65, 65, 0.16); -} -.bodywebsite .block-vacation * + .block-meta { - margin-top: 14px; -} -@media (min-width: 1200px) { - .bodywebsite .block-vacation * + .block-meta { - margin-top: 5px; - } -} -.bodywebsite .block-shadow { - position: relative; - width: 100%; - padding-top: 30px; - overflow: hidden; - border-radius: 0; - background: #fff; - box-shadow: 0px 1px 10px 0px rgba(65, 65, 65, 0.12); - text-align: center; -} -.bodywebsite .block-shadow .block-inner { - padding: 0 40px; -} -.bodywebsite .block-shadow * + .block-footer { - margin-top: 32px; -} -.bodywebsite .block-shadow * + .icon-block { - margin-top: 40px; -} -@media (min-width: 768px) { - .bodywebsite .block-shadow { - padding-top: 38px; - } - .bodywebsite .block-shadow .block-inner { - padding: 0 70px; - } - .bodywebsite .block-shadow * + .icon-block { - margin-top: 60px; - } -} -.bodywebsite .box-counter { - text-align: center; -} -.bodywebsite .box-counter .box-header { - text-transform: uppercase; -} -.bodywebsite .box-counter * + .box-header { - margin-top: 10px; -} -@media (min-width: 768px) and (max-width: 1199px) { - .bodywebsite .box-counter .box-header { - font-size: 15px; - } -} -.bodywebsite .box-counter-inverse .box-header { - color: rgba(255, 255, 255, 0.2); -} -.bodywebsite .box-counter-inverse .counter { - color: #dedede; -} -.bodywebsite .box-counter-inverse-lighter .box-header { - color: rgba(255, 255, 255, 0.35); -} -.bodywebsite .box-counter-inverse-lighter .counter { - color: #dedede; -} -.bodywebsite .box-container-small { - display: inline-block; - width: 100%; - max-width: 280px; -} -.bodywebsite .post-single .post-footer { - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - -webkit-flex-wrap: wrap; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; - position: relative; - transform: translateY(-10px); - margin-bottom: -10px; -} -.bodywebsite .post-single .post-footer > * { - margin-top: 10px; -} -.bodywebsite .post-single .post-footer > *:not(:last-child) { - margin-right: 20px; -} -.bodywebsite .post-single * + .post-header { - margin-top: 15px; -} -.bodywebsite .post-single * + .post-meta { - margin-top: 20px; -} -.bodywebsite .post-single * + .post-body { - margin-top: 20px; -} -.bodywebsite .post-single * + .post-footer { - margin-top: 42px; -} -.bodywebsite .post-single + * { - margin-top: 40px; -} -@media (min-width: 768px) { - .bodywebsite .post-single * + .post-header { - margin-top: 22px; - } - .bodywebsite .post-single * + .post-meta { - margin-top: 10px; - } -} -.bodywebsite .post-info * + .post-main { - margin-top: 30px; -} -.bodywebsite .post-info * + .post-body { - margin-top: 20px; -} -@media (min-width: 768px) { - .bodywebsite .post-info .post-main { - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - -webkit-flex-wrap: nowrap; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - } - .bodywebsite .post-info .post-left { - -webkit-flex-basis: 33.33333%; - -ms-flex-preferred-size: 33.33333%; - flex-basis: 33.33333%; - max-width: 33.33333%; - padding-right: 25px; - } - .bodywebsite .post-info .post-body { - -webkit-flex-basis: 66.66667%; - -ms-flex-preferred-size: 66.66667%; - flex-basis: 66.66667%; - max-width: 66.66667%; - } - .bodywebsite .post-info * + .post-body { - margin-top: 0; - } -} -.bodywebsite .post-minimal { - position: relative; - border-radius: 4px; - overflow: hidden; - background: #fff; - box-shadow: -1px 0px 10px 0px rgba(65, 65, 65, 0.12); -} -.bodywebsite .post-minimal .post-body { - padding: 20px; -} -.bodywebsite .post-minimal * + p { - margin-top: 8px; -} -.bodywebsite .post-minimal * + .post-meta { - margin-top: 5px; -} -@media (max-width: 575px) { - .bodywebsite .post-minimal { - display: inline-block; - width: 100%; - max-width: 300px; - } -} -@media (min-width: 576px) { - .bodywebsite .post-minimal { - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - -webkit-flex-wrap: nowrap; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; - } - .bodywebsite .post-minimal .post-left { - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-direction: column; - -ms-flex-direction: column; - flex-direction: column; - -webkit-align-items: stretch; - -ms-flex-align: stretch; - align-items: stretch; - -webkit-flex-shrink: 0; - -ms-flex-negative: 0; - flex-shrink: 0; - -webkit-align-self: stretch; - -ms-flex-item-align: stretch; - align-self: stretch; - width: 220px; - } - .bodywebsite .post-minimal .post-image { - position: relative; - -webkit-flex-shrink: 0; - -ms-flex-negative: 0; - flex-shrink: 0; - -webkit-align-self: stretch; - -ms-flex-item-align: stretch; - align-self: stretch; - -webkit-flex-grow: 1; - -ms-flex-positive: 1; - flex-grow: 1; - overflow: hidden; - } - .bodywebsite .post-minimal .post-image img { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - height: auto; - width: auto; - min-height: 100%; - min-width: 100%; - z-index: 1; - } - .bodywebsite .post-minimal .post-body { - padding: 30px 24px 30px 27px; - -webkit-flex-grow: 1; - -ms-flex-positive: 1; - flex-grow: 1; - } -} -@media (min-width: 1200px) { - .bodywebsite .post-minimal .post-body { - padding: 40px 26px 40px 50px; - } -} -.bodywebsite .post-preview { - max-width: 320px; -} -.bodywebsite .post-preview a { - display: block; -} -.bodywebsite .post-preview .post-image, -.bodywebsite .post-preview .post-image img { - border-radius: 5px; -} -.bodywebsite .post-preview .post-image img { - width: auto; -} -.bodywebsite .post-preview .post-header { - line-height: 1.5; - color: #000; - transition: .33s all ease; -} -.bodywebsite .post-preview .list-meta > li { - display: inline-block; - font-size: 12px; - font-style: italic; - color: #9b9b9b; -} -.bodywebsite .post-preview .list-meta > li:not(:last-child):after { - content: '/'; -} -.bodywebsite .post-preview:hover .post-header { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .post-preview * + .post-meta { - margin-top: 5px; -} -.bodywebsite .post-preview.post-preview-inverse > li { - color: rgba(255, 255, 255, 0.5); -} -.bodywebsite .post-preview.post-preview-inverse .post-header { - color: #fff; -} -.bodywebsite .post-preview.post-preview-inverse:hover .post-header { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .blog-timeline > dt { - font: 700 25px "Roboto", Helvetica, Arial, sans-serif; - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .blog-timeline > dd { - margin-top: 20px; -} -@media (min-width: 768px) { - .bodywebsite .blog-timeline { - word-spacing: 0; - white-space: nowrap; - } - .bodywebsite .blog-timeline > * { - display: inline-block; - } - .bodywebsite .blog-timeline > dt { - min-width: 65px; - padding-right: 20px; - margin-top: -0.15em; - vertical-align: top; - } - .bodywebsite .blog-timeline > dd { - margin-top: 0; - width: calc(0%); - } -} -@media (min-width: 992px) { - .bodywebsite .blog-timeline > dt { - min-width: 100px; - padding-right: 30px; - } -} -.bodywebsite .post-boxed { - max-width: 330px; - margin-right: auto; - margin-left: auto; - padding-top: 10px; - text-align: center; - box-shadow: -1px 0px 10px 0px rgba(65, 65, 65, 0.12); - transition: .3s all ease; -} -.bodywebsite .post-boxed-caption { - height: 120px; -} -.bodywebsite .post-boxed-img-wrap a { - display: block; -} -.bodywebsite .post-boxed-title { - font: 500 18px/28px "Roboto", Helvetica, Arial, sans-serif; -} -.bodywebsite .post-boxed-title { - color: #000; -} -.bodywebsite .post-boxed-title a { - display: inline; - color: #000; -} -.bodywebsite .post-boxed-title a:hover { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .post-boxed img { - width: 30%; -} -.bodywebsite .post-boxed .list-inline { - font-size: 12px; - letter-spacing: .05em; -} -.bodywebsite .post-boxed-caption { - padding: 20px; -} -.bodywebsite .post-boxed .post-boxed-title + * { - margin-top: 5px; -} -@media (min-width: 768px) { - .bodywebsite .post-boxed .post-boxed-caption { - padding: 28px 42px 36px 28px; - } -} -@media (min-width: 1200px) { - .bodywebsite .post-boxed:hover { - box-shadow: -3px 5px 12px 0px rgba(65, 65, 65, 0.16); - } -} -.bodywebsite .post-minimal .post-image { - height: 100%; -} -.bodywebsite .post-minimal .post-image img { - width: 100%; - height: 100%; - object-fit: cover; -} -.bodywebsite * + .post-blockquote { - margin-top: 30px; -} -.bodywebsite .post-blockquote + * { - margin-top: 30px; -} -@media (min-width: 768px) { - .bodywebsite * + .post-blockquote { - margin-top: 50px; - } - .bodywebsite .post-blockquote + * { - margin-top: 50px; - } -} -.bodywebsite * + .post-comment-block, -.bodywebsite * + .post-comment-form { - margin-top: 40px; -} -.bodywebsite .post-comment-form h4 + * { - margin-top: 15px; -} -.bodywebsite .comment figure, -.bodywebsite .comment figure img { - border-radius: 50%; - max-width: 71px; -} -.bodywebsite .comment time { - font-size: 12px; - line-height: 1; - color: #9b9b9b; -} -.bodywebsite .comment .user { - font-size: 16px; - line-height: 1.33333; - font-weight: 700; - text-transform: uppercase; - color: #000; -} -.bodywebsite .comment .list-icon-meta { - position: relative; - transform: translateY(0); - margin-bottom: 0; -} -.bodywebsite .comment .list-icon-meta > * { - margin-top: 0; -} -.bodywebsite .comment .list-icon-meta > *:not(:last-child) { - margin-right: 8px; -} -.bodywebsite .comment .list-icon-meta > li { - display: inline-block; -} -.bodywebsite .comment .list-icon-meta li { - font-size: 12px; - line-height: 1; - font-weight: 400; -} -.bodywebsite .comment .comment-body { - padding: 17px 22px; - border: 1px solid #dedede; - border-radius: 7px; -} -.bodywebsite .comment .comment-body-header { - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-wrap: wrap; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - -webkit-align-items: flex-start; - -ms-flex-align: start; - align-items: flex-start; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; - position: relative; - transform: translateY(-5px); - margin-bottom: -5px; -} -.bodywebsite .comment .comment-body-header > * { - margin-top: 5px; -} -.bodywebsite .comment .comment-body-header > *:not(:last-child) { - margin-right: 5px; -} -@media (min-width: 768px) { - .bodywebsite .comment .comment-body-header { - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - } -} -.bodywebsite .comment .comment-body-header > * { - -webkit-flex-shrink: 0; - -ms-flex-negative: 0; - flex-shrink: 0; -} -.bodywebsite .comment .comment-meta { - -webkit-flex-grow: 1; - -ms-flex-positive: 1; - flex-grow: 1; - position: relative; - transform: translateY(-5px); - margin-bottom: -5px; -} -.bodywebsite .comment .comment-meta > * { - margin-top: 5px; -} -.bodywebsite .comment .comment-meta > *:not(:last-child) { - margin-right: 10px; -} -@media (min-width: 768px) { - .bodywebsite .comment .comment-meta > * { - display: inline-block; - vertical-align: baseline; - } -} -.bodywebsite .comment .comment-body-text { - margin-top: 10px; -} -.bodywebsite .comment-minimal .author { - font: 700 14px/18px "Roboto", Helvetica, Arial, sans-serif; - text-transform: uppercase; - letter-spacing: -0.025em; - color: #000; -} -.bodywebsite .comment-minimal * + .comment-body { - margin-top: 10px; -} -.bodywebsite * + .comment-minimal { - margin-top: 35px; -} -.bodywebsite .comment-group-reply { - padding-left: 12%; -} -.bodywebsite .comment + * { - margin-top: 21px; -} -.bodywebsite * + .comment-group { - margin-top: 30px; -} -@media (min-width: 768px) { - .bodywebsite .comment > .unit > .unit-left { - margin-top: 16px; - } - .bodywebsite * + .comment-minimal { - margin-top: 45px; - } -} -@media (min-width: 992px) { - .bodywebsite * + .post-comment { - margin-top: 80px; - } -} -.bodywebsite .page-title { - text-align: center; -} -.bodywebsite .page-title > * { - letter-spacing: 0; - text-transform: uppercase; -} -.bodywebsite .page-title .page-title-inner { - position: relative; - display: inline-block; -} -.bodywebsite .page-title .page-title-left, -.bodywebsite .page-title .page-title-right { - position: absolute; - top: 50%; - width: auto; - overflow: hidden; - white-space: nowrap; - vertical-align: middle; -} -.bodywebsite .page-title .page-title-left *, -.bodywebsite .page-title .page-title-right * { - display: inline; - white-space: nowrap; -} -.bodywebsite .page-title .page-title-left { - left: 0; - text-align: right; - transform: translate(-100%, -50%); -} -.bodywebsite .page-title .page-title-left * { - padding-right: .85em; -} -.bodywebsite .page-title .page-title-left *:nth-last-child(odd) { - color: rgba(255, 255, 255, 0.1); -} -.bodywebsite .page-title .page-title-left *:nth-last-child(even) { - color: rgba(255, 255, 255, 0.2); -} -.bodywebsite .page-title .page-title-right { - right: 0; - text-align: left; - transform: translate(100%, -50%); -} -.bodywebsite .page-title .page-title-right * { - padding-left: .85em; -} -.bodywebsite .page-title .page-title-right *:nth-child(odd) { - color: rgba(255, 255, 255, 0.1); -} -.bodywebsite .page-title .page-title-right *:nth-child(even) { - color: rgba(255, 255, 255, 0.2); -} -.bodywebsite .page-title-wrap { - background: #000; - background-attachment: fixed; - -webkit-background-size: cover; - background-size: cover; - background-position: center 80%; -} -@media (min-width: 768px) { - .bodywebsite .page-title { - text-align: left; - } -} -.bodywebsite .preloader { - position: fixed; - left: 0; - top: 0; - bottom: 0; - right: 0; - z-index: 10000; - display: flex; - justify-content: center; - align-items: center; - padding: 20px; - background: #fff; - transition: .3s all ease; -} -.bodywebsite .preloader.loaded { - opacity: 0; - visibility: hidden; -} -.bodywebsite .preloader-body { - text-align: center; -} -.bodywebsite .preloader-body p { - position: relative; - right: -8px; -} -.bodywebsite .cssload-container { - width: 100%; - height: 36px; - text-align: center; -} -.bodywebsite .cssload-speeding-wheel { - width: 36px; - height: 36px; - margin: 0 auto; - border: 3px solid maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - border-radius: 50%; - border-left-color: transparent; - border-bottom-color: transparent; - animation: cssload-spin 0.88s infinite linear; -} -@-webkit-keyframes cssload-spin { - 100% { - transform: rotate(360deg); - } -} -@keyframes cssload-spin { - 100% { - transform: rotate(360deg); - } -} -.bodywebsite .pricing-table { - overflow: hidden; - background: #fff; - text-align: center; - box-shadow: -1px 2px 5px 0 rgba(65, 65, 65, 0.12); -} -.bodywebsite .pricing-table-header { - font-size: 18px; - text-transform: uppercase; - letter-spacing: .05em; - color: #464a4d; -} -.bodywebsite .pricing-table-body { - padding: 35px 30px; -} -.bodywebsite .pricing-table-label { - padding: 17px 15px; - text-align: center; - background: #3a3c3e; -} -.bodywebsite .pricing-table-label p { - font: 700 14px "Roboto", Helvetica, Arial, sans-serif; - letter-spacing: .05em; - text-transform: uppercase; - color: #fff; -} -.bodywebsite .pricing-table .pricing-list { - font-size: 16px; - font-weight: 300; - color: #00030a; -} -.bodywebsite .pricing-table .pricing-list span { - display: inline-block; - margin-right: .25em; -} -.bodywebsite .pricing-table .pricing-list > li + li { - margin-top: 12px; -} -.bodywebsite .pricing-table * + .price-object { - margin-top: 22px; -} -.bodywebsite .pricing-table * + .pricing-list { - margin-top: 22px; -} -.bodywebsite .pricing-object { - font-family: "Roboto", Helvetica, Arial, sans-serif; - font-weight: 900; - font-size: 0; - line-height: 0; - color: #000; -} -.bodywebsite .pricing-object > * { - margin-top: 0; -} -.bodywebsite .pricing-object .price { - font-family: Helvetica, Arial, sans-serif; - font-weight: 900; -} -.bodywebsite .pricing-object .small { - position: relative; - font: 700 10px "Roboto", Helvetica, Arial, sans-serif; - color: inherit; - text-transform: uppercase; -} -.bodywebsite .pricing-object .small-middle { - vertical-align: middle; -} -.bodywebsite .pricing-object .small-bottom { - vertical-align: bottom; -} -.bodywebsite .pricing-object-sm { - font-size: 32px; - line-height: .8; -} -.bodywebsite .pricing-object-sm .small { - font-size: 12px; -} -.bodywebsite .pricing-object-sm .small-middle { - margin-right: 3px; -} -.bodywebsite .pricing-object-sm .small-bottom { - margin-left: 1px; - vertical-align: bottom; -} -.bodywebsite .price-irrelevant { - color: #9f9f9f; - text-decoration: line-through; -} -.bodywebsite .pricing-object-md { - font-size: 53px; - line-height: 1; -} -.bodywebsite .pricing-object-md .price { - line-height: .5; -} -.bodywebsite .pricing-object-md .small { - font-size: 17px; - font-weight: 400; -} -.bodywebsite .pricing-object-md .small-middle { - font-size: 23px; -} -.bodywebsite .pricing-object-md .small-bottom { - bottom: -0.25em; -} -.bodywebsite .pricing-object-lg, -.bodywebsite .pricing-object-xl { - font-size: 64px; - line-height: .7; -} -.bodywebsite .pricing-object-lg .small, -.bodywebsite .pricing-object-xl .small { - font-size: 9px; -} -.bodywebsite .pricing-object-lg .small-top, -.bodywebsite .pricing-object-xl .small-top { - top: 11px; - margin-right: 5px; - font-size: 14px; - vertical-align: top; - font-weight: 700; -} -.bodywebsite .pricing-object-lg .small-bottom, -.bodywebsite .pricing-object-xl .small-bottom { - bottom: -10px; - margin-left: -2px; - font-weight: 700; - vertical-align: bottom; -} -.bodywebsite .price-current .small { - position: relative; - font-family: "Roboto", Helvetica, Arial, sans-serif; - font-weight: 400; -} -.bodywebsite .price-current .small-middle { - vertical-align: middle; - top: -0.3em; -} -.bodywebsite .price-current .small-bottom { - top: .3em; -} -@media (min-width: 768px) { - .bodywebsite .pricing-object-lg { - font-size: 72px; - } - .bodywebsite .pricing-object-xl { - font-size: 54px; - } - .bodywebsite .pricing-object-xl .small-middle { - font-size: 30px; - } - .bodywebsite .pricing-object-xl .small-bottom { - font-size: 25px; - } -} -@media (min-width: 992px) { - .bodywebsite .pricing-object-xl { - font-size: 76px; - } -} -.bodywebsite .panel.bg-accent.bg-default-outline-btn.text-center { - background: transparent; -} -.bodywebsite .product .product-label { - padding: 7px 11px; - min-width: 90px; - font: 700 12px/16px "Roboto", Helvetica, Arial, sans-serif; - letter-spacing: .05em; - text-align: center; - border-radius: 0 0 7px 7px; -} -.bodywebsite .product .product-rating { - position: relative; - transform: translateY(-2px); - margin-bottom: -2px; -} -.bodywebsite .product .product-rating > * { - margin-top: 2px; -} -.bodywebsite .product .product-rating > *:not(:last-child) { - margin-right: 5px; -} -.bodywebsite .product .product-rating > * { - display: inline-block; - vertical-align: middle; -} -.bodywebsite .product .product-color { - display: inline-block; - width: 24px; - height: 24px; - font-size: 0; - line-height: 0; - border-radius: 50%; - background: #000; - vertical-align: middle; -} -.bodywebsite .product .product-size { - font: 700 14px/18px "Roboto", Helvetica, Arial, sans-serif; - color: #000; -} -.bodywebsite .product * + .product-brand, -.bodywebsite .product .product-brand + * { - margin-top: 0; -} -.bodywebsite .one-screen-page .page { - display: -ms-flexbox; - display: -webkit-flex; - display: flex; -} -.bodywebsite .one-screen-page .page-inner { - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-direction: column; - -ms-flex-direction: column; - flex-direction: column; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; - min-height: 100vh; - text-align: center; -} -.bodywebsite .one-screen-page .page-inner, -.bodywebsite .one-screen-page .page-inner > * { - width: 100%; -} -.bodywebsite .one-screen-page .page-head, -.bodywebsite .one-screen-page .page-foot { - padding: 0; - background: transparent; -} -.bodywebsite .one-screen-page .page-head-inner { - padding: calc(5em) 0 calc(3em); -} -.bodywebsite .one-screen-page .page-content { - padding: calc(5em) 0; -} -.bodywebsite .one-screen-page .page-foot-inner { - padding: calc(3em) 0 calc(5em); -} -.bodywebsite .one-screen-page .rights { - color: #fff; -} -.bodywebsite .one-screen-page .rights a, -.bodywebsite .one-screen-page .rights a:active, -.bodywebsite .one-screen-page .rights a:focus { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .one-screen-page .rights a:hover { - color: #ababab; -} -@media (min-width: 576px) { - .bodywebsite .one-screen-page .page-inner { - text-align: left; - } -} -@media (min-width: 1800px) { - .bodywebsite .one-screen-page .page-head-inner { - padding: 50px 0 10px; - } - .bodywebsite .one-screen-page .page-content { - padding: 30px 0; - } - .bodywebsite .one-screen-page .page-foot-inner { - padding: 50px 0 23px; - } -} -.bodywebsite .ie-10 .one-screen-page, -.bodywebsite .ie-11 .one-screen-page { - overflow-x: hidden; - overflow-y: auto; -} -.bodywebsite .inset-left-0 { - padding-left: 0; -} -.bodywebsite .inset-left-10 { - padding-left: 10px; -} -.bodywebsite .inset-left-15 { - padding-left: 15px; -} -.bodywebsite .inset-left-20 { - padding-left: 20px; -} -.bodywebsite .inset-left-30 { - padding-left: 30px; -} -.bodywebsite .inset-left-40 { - padding-left: 40px; -} -.bodywebsite .inset-left-50 { - padding-left: 50px; -} -.bodywebsite .inset-left-60 { - padding-left: 60px; -} -.bodywebsite .inset-left-70 { - padding-left: 70px; -} -.bodywebsite .inset-left-85 { - padding-left: 85px; -} -.bodywebsite .inset-left-100 { - padding-left: 100px; -} -@media (min-width: 576px) { - .bodywebsite .inset-sm-left-0 { - padding-left: 0; - } - .bodywebsite .inset-sm-left-10 { - padding-left: 10px; - } - .bodywebsite .inset-sm-left-15 { - padding-left: 15px; - } - .bodywebsite .inset-sm-left-20 { - padding-left: 20px; - } - .bodywebsite .inset-sm-left-30 { - padding-left: 30px; - } - .bodywebsite .inset-sm-left-40 { - padding-left: 40px; - } - .bodywebsite .inset-sm-left-50 { - padding-left: 50px; - } - .bodywebsite .inset-sm-left-60 { - padding-left: 60px; - } - .bodywebsite .inset-sm-left-70 { - padding-left: 70px; - } - .bodywebsite .inset-sm-left-85 { - padding-left: 85px; - } - .bodywebsite .inset-sm-left-100 { - padding-left: 100px; - } -} -@media (min-width: 768px) { - .bodywebsite .inset-md-left-0 { - padding-left: 0; - } - .bodywebsite .inset-md-left-10 { - padding-left: 10px; - } - .bodywebsite .inset-md-left-15 { - padding-left: 15px; - } - .bodywebsite .inset-md-left-20 { - padding-left: 20px; - } - .bodywebsite .inset-md-left-30 { - padding-left: 30px; - } - .bodywebsite .inset-md-left-40 { - padding-left: 40px; - } - .bodywebsite .inset-md-left-50 { - padding-left: 50px; - } - .bodywebsite .inset-md-left-60 { - padding-left: 60px; - } - .bodywebsite .inset-md-left-70 { - padding-left: 70px; - } - .bodywebsite .inset-md-left-85 { - padding-left: 85px; - } - .bodywebsite .inset-md-left-100 { - padding-left: 100px; - } -} -@media (min-width: 992px) { - .bodywebsite .inset-lg-left-0 { - padding-left: 0; - } - .bodywebsite .inset-lg-left-10 { - padding-left: 10px; - } - .bodywebsite .inset-lg-left-15 { - padding-left: 15px; - } - .bodywebsite .inset-lg-left-20 { - padding-left: 20px; - } - .bodywebsite .inset-lg-left-30 { - padding-left: 30px; - } - .bodywebsite .inset-lg-left-40 { - padding-left: 40px; - } - .bodywebsite .inset-lg-left-50 { - padding-left: 50px; - } - .bodywebsite .inset-lg-left-60 { - padding-left: 60px; - } - .bodywebsite .inset-lg-left-70 { - padding-left: 70px; - } - .bodywebsite .inset-lg-left-85 { - padding-left: 85px; - } - .bodywebsite .inset-lg-left-100 { - padding-left: 100px; - } -} -@media (min-width: 1200px) { - .bodywebsite .inset-xl-left-0 { - padding-left: 0; - } - .bodywebsite .inset-xl-left-10 { - padding-left: 10px; - } - .bodywebsite .inset-xl-left-15 { - padding-left: 15px; - } - .bodywebsite .inset-xl-left-20 { - padding-left: 20px; - } - .bodywebsite .inset-xl-left-30 { - padding-left: 30px; - } - .bodywebsite .inset-xl-left-40 { - padding-left: 40px; - } - .bodywebsite .inset-xl-left-50 { - padding-left: 50px; - } - .bodywebsite .inset-xl-left-60 { - padding-left: 60px; - } - .bodywebsite .inset-xl-left-70 { - padding-left: 70px; - } - .bodywebsite .inset-xl-left-85 { - padding-left: 85px; - } - .bodywebsite .inset-xl-left-100 { - padding-left: 100px; - } -} -@media (min-width: 1800px) { - .bodywebsite .inset-xxl-left-0 { - padding-left: 0; - } - .bodywebsite .inset-xxl-left-10 { - padding-left: 10px; - } - .bodywebsite .inset-xxl-left-15 { - padding-left: 15px; - } - .bodywebsite .inset-xxl-left-20 { - padding-left: 20px; - } - .bodywebsite .inset-xxl-left-30 { - padding-left: 30px; - } - .bodywebsite .inset-xxl-left-40 { - padding-left: 40px; - } - .bodywebsite .inset-xxl-left-50 { - padding-left: 50px; - } - .bodywebsite .inset-xxl-left-60 { - padding-left: 60px; - } - .bodywebsite .inset-xxl-left-70 { - padding-left: 70px; - } - .bodywebsite .inset-xxl-left-85 { - padding-left: 85px; - } - .bodywebsite .inset-xxl-left-100 { - padding-left: 100px; - } -} -.bodywebsite .inset-right-0 { - padding-right: 0; -} -.bodywebsite .inset-right-10 { - padding-right: 10px; -} -.bodywebsite .inset-right-15 { - padding-right: 15px; -} -.bodywebsite .inset-right-20 { - padding-right: 20px; -} -.bodywebsite .inset-right-30 { - padding-right: 30px; -} -.bodywebsite .inset-right-40 { - padding-right: 40px; -} -.bodywebsite .inset-right-50 { - padding-right: 50px; -} -.bodywebsite .inset-right-60 { - padding-right: 60px; -} -.bodywebsite .inset-right-70 { - padding-right: 70px; -} -.bodywebsite .inset-right-85 { - padding-right: 85px; -} -.bodywebsite .inset-right-100 { - padding-right: 100px; -} -@media (min-width: 576px) { - .bodywebsite .inset-sm-right-0 { - padding-right: 0; - } - .bodywebsite .inset-sm-right-10 { - padding-right: 10px; - } - .bodywebsite .inset-sm-right-15 { - padding-right: 15px; - } - .bodywebsite .inset-sm-right-20 { - padding-right: 20px; - } - .bodywebsite .inset-sm-right-30 { - padding-right: 30px; - } - .bodywebsite .inset-sm-right-40 { - padding-right: 40px; - } - .bodywebsite .inset-sm-right-50 { - padding-right: 50px; - } - .bodywebsite .inset-sm-right-60 { - padding-right: 60px; - } - .bodywebsite .inset-sm-right-70 { - padding-right: 70px; - } - .bodywebsite .inset-sm-right-85 { - padding-right: 85px; - } - .bodywebsite .inset-sm-right-100 { - padding-right: 100px; - } -} -@media (min-width: 768px) { - .bodywebsite .inset-md-right-0 { - padding-right: 0; - } - .bodywebsite .inset-md-right-10 { - padding-right: 10px; - } - .bodywebsite .inset-md-right-15 { - padding-right: 15px; - } - .bodywebsite .inset-md-right-20 { - padding-right: 20px; - } - .bodywebsite .inset-md-right-30 { - padding-right: 30px; - } - .bodywebsite .inset-md-right-40 { - padding-right: 40px; - } - .bodywebsite .inset-md-right-50 { - padding-right: 50px; - } - .bodywebsite .inset-md-right-60 { - padding-right: 60px; - } - .bodywebsite .inset-md-right-70 { - padding-right: 70px; - } - .bodywebsite .inset-md-right-85 { - padding-right: 85px; - } - .bodywebsite .inset-md-right-100 { - padding-right: 100px; - } -} -@media (min-width: 992px) { - .bodywebsite .inset-lg-right-0 { - padding-right: 0; - } - .bodywebsite .inset-lg-right-10 { - padding-right: 10px; - } - .bodywebsite .inset-lg-right-15 { - padding-right: 15px; - } - .bodywebsite .inset-lg-right-20 { - padding-right: 20px; - } - .bodywebsite .inset-lg-right-30 { - padding-right: 30px; - } - .bodywebsite .inset-lg-right-40 { - padding-right: 40px; - } - .bodywebsite .inset-lg-right-50 { - padding-right: 50px; - } - .bodywebsite .inset-lg-right-60 { - padding-right: 60px; - } - .bodywebsite .inset-lg-right-70 { - padding-right: 70px; - } - .bodywebsite .inset-lg-right-85 { - padding-right: 85px; - } - .bodywebsite .inset-lg-right-100 { - padding-right: 100px; - } -} -@media (min-width: 1200px) { - .bodywebsite .inset-xl-right-0 { - padding-right: 0; - } - .bodywebsite .inset-xl-right-10 { - padding-right: 10px; - } - .bodywebsite .inset-xl-right-15 { - padding-right: 15px; - } - .bodywebsite .inset-xl-right-20 { - padding-right: 20px; - } - .bodywebsite .inset-xl-right-30 { - padding-right: 30px; - } - .bodywebsite .inset-xl-right-40 { - padding-right: 40px; - } - .bodywebsite .inset-xl-right-50 { - padding-right: 50px; - } - .bodywebsite .inset-xl-right-60 { - padding-right: 60px; - } - .bodywebsite .inset-xl-right-70 { - padding-right: 70px; - } - .bodywebsite .inset-xl-right-85 { - padding-right: 85px; - } - .bodywebsite .inset-xl-right-100 { - padding-right: 100px; - } -} -@media (min-width: 1800px) { - .bodywebsite .inset-xxl-right-0 { - padding-right: 0; - } - .bodywebsite .inset-xxl-right-10 { - padding-right: 10px; - } - .bodywebsite .inset-xxl-right-15 { - padding-right: 15px; - } - .bodywebsite .inset-xxl-right-20 { - padding-right: 20px; - } - .bodywebsite .inset-xxl-right-30 { - padding-right: 30px; - } - .bodywebsite .inset-xxl-right-40 { - padding-right: 40px; - } - .bodywebsite .inset-xxl-right-50 { - padding-right: 50px; - } - .bodywebsite .inset-xxl-right-60 { - padding-right: 60px; - } - .bodywebsite .inset-xxl-right-70 { - padding-right: 70px; - } - .bodywebsite .inset-xxl-right-85 { - padding-right: 85px; - } - .bodywebsite .inset-xxl-right-100 { - padding-right: 100px; - } -} -.bodywebsite .container + .container { - margin-top: 60px; -} -.bodywebsite h3.section-title { - color: #000; -} -.bodywebsite h4 + .section-title { - margin-top: 2px; -} -.bodywebsite h4 + .comment-list { - margin-top: 30px; -} -.bodywebsite h3 + p { - margin-top: 15px; -} -.bodywebsite h3 + p.h4 { - margin-top: 2px; -} -.bodywebsite h3 + .row { - margin-top: 40px; -} -.bodywebsite h3 + * { - margin-top: 40px; -} -.bodywebsite .row + .row { - margin-top: 60px; -} -.bodywebsite * + .row.list-md-dashed { - margin-top: 60px; -} -.bodywebsite .row + .button-block { - margin-top: 60px; -} -.bodywebsite .slick-slider + .slick-slider.carousel-parent { - margin-top: 35px; -} -.bodywebsite .quote-left + .button-block { - margin-top: 22px; -} -.bodywebsite .aside-title + * { - margin-top: 22px; -} -.bodywebsite * + .button-group { - margin-top: 25px; -} -html .bodywebsite .page .offset-top-0 { - margin-top: 0; -} -html .bodywebsite .page .offset-top-2 { - margin-top: 2px; -} -html .bodywebsite .page .offset-top-5 { - margin-top: 5px; -} -html .bodywebsite .page .offset-top-10 { - margin-top: 10px; -} -html .bodywebsite .page .offset-top-15 { - margin-top: 15px; -} -html .bodywebsite .page .offset-top-22 { - margin-top: 22px; -} -html .bodywebsite .page .offset-top-27 { - margin-top: 27px; -} -html .bodywebsite .page .offset-top-30 { - margin-top: 30px; -} -html .bodywebsite .page .offset-top-35 { - margin-top: 35px; -} -html .bodywebsite .page .offset-top-40 { - margin-top: 40px; -} -html .bodywebsite .page .offset-top-45 { - margin-top: 45px; -} -html .bodywebsite .page .offset-top-50 { - margin-top: 50px; -} -html .bodywebsite .page .offset-top-60 { - margin-top: 60px; -} -html .bodywebsite .page .offset-top-75 { - margin-top: 75px; -} -html .bodywebsite .page .offset-top-90 { - margin-top: 90px; -} -html .bodywebsite .page .offset-top-100 { - margin-top: 100px; -} -html .bodywebsite .page .offset-top-120 { - margin-top: 120px; -} -@media (min-width: 576px) { - html .bodywebsite .page .offset-sm-top-0 { - margin-top: 0; - } - html .bodywebsite .page .offset-sm-top-2 { - margin-top: 2px; - } - html .bodywebsite .page .offset-sm-top-5 { - margin-top: 5px; - } - html .bodywebsite .page .offset-sm-top-10 { - margin-top: 10px; - } - html .bodywebsite .page .offset-sm-top-15 { - margin-top: 15px; - } - html .bodywebsite .page .offset-sm-top-22 { - margin-top: 22px; - } - html .bodywebsite .page .offset-sm-top-27 { - margin-top: 27px; - } - html .bodywebsite .page .offset-sm-top-30 { - margin-top: 30px; - } - html .bodywebsite .page .offset-sm-top-35 { - margin-top: 35px; - } - html .bodywebsite .page .offset-sm-top-40 { - margin-top: 40px; - } - html .bodywebsite .page .offset-sm-top-45 { - margin-top: 45px; - } - html .bodywebsite .page .offset-sm-top-50 { - margin-top: 50px; - } - html .bodywebsite .page .offset-sm-top-60 { - margin-top: 60px; - } - html .bodywebsite .page .offset-sm-top-75 { - margin-top: 75px; - } - html .bodywebsite .page .offset-sm-top-90 { - margin-top: 90px; - } - html .bodywebsite .page .offset-sm-top-100 { - margin-top: 100px; - } - html .bodywebsite .page .offset-sm-top-120 { - margin-top: 120px; - } -} -@media (min-width: 768px) { - html .bodywebsite .page .offset-md-top-0 { - margin-top: 0; - } - html .bodywebsite .page .offset-md-top-2 { - margin-top: 2px; - } - html .bodywebsite .page .offset-md-top-5 { - margin-top: 5px; - } - html .bodywebsite .page .offset-md-top-10 { - margin-top: 10px; - } - html .bodywebsite .page .offset-md-top-15 { - margin-top: 15px; - } - html .bodywebsite .page .offset-md-top-22 { - margin-top: 22px; - } - html .bodywebsite .page .offset-md-top-27 { - margin-top: 27px; - } - html .bodywebsite .page .offset-md-top-30 { - margin-top: 30px; - } - html .bodywebsite .page .offset-md-top-35 { - margin-top: 35px; - } - html .bodywebsite .page .offset-md-top-40 { - margin-top: 40px; - } - html .bodywebsite .page .offset-md-top-45 { - margin-top: 45px; - } - html .bodywebsite .page .offset-md-top-50 { - margin-top: 50px; - } - html .bodywebsite .page .offset-md-top-60 { - margin-top: 60px; - } - html .bodywebsite .page .offset-md-top-75 { - margin-top: 75px; - } - html .bodywebsite .page .offset-md-top-90 { - margin-top: 90px; - } - html .bodywebsite .page .offset-md-top-100 { - margin-top: 100px; - } - html .bodywebsite .page .offset-md-top-120 { - margin-top: 120px; - } -} -@media (min-width: 992px) { - html .bodywebsite .page .offset-lg-top-0 { - margin-top: 0; - } - html .bodywebsite .page .offset-lg-top-2 { - margin-top: 2px; - } - html .bodywebsite .page .offset-lg-top-5 { - margin-top: 5px; - } - html .bodywebsite .page .offset-lg-top-10 { - margin-top: 10px; - } - html .bodywebsite .page .offset-lg-top-15 { - margin-top: 15px; - } - html .bodywebsite .page .offset-lg-top-22 { - margin-top: 22px; - } - html .bodywebsite .page .offset-lg-top-27 { - margin-top: 27px; - } - html .bodywebsite .page .offset-lg-top-30 { - margin-top: 30px; - } - html .bodywebsite .page .offset-lg-top-35 { - margin-top: 35px; - } - html .bodywebsite .page .offset-lg-top-40 { - margin-top: 40px; - } - html .bodywebsite .page .offset-lg-top-45 { - margin-top: 45px; - } - html .bodywebsite .page .offset-lg-top-50 { - margin-top: 50px; - } - html .bodywebsite .page .offset-lg-top-60 { - margin-top: 60px; - } - html .bodywebsite .page .offset-lg-top-75 { - margin-top: 75px; - } - html .bodywebsite .page .offset-lg-top-90 { - margin-top: 90px; - } - html .bodywebsite .page .offset-lg-top-100 { - margin-top: 100px; - } - html .bodywebsite .page .offset-lg-top-120 { - margin-top: 120px; - } -} -@media (min-width: 1200px) { - html .bodywebsite .page .offset-xl-top-0 { - margin-top: 0; - } - html .bodywebsite .page .offset-xl-top-2 { - margin-top: 2px; - } - html .bodywebsite .page .offset-xl-top-5 { - margin-top: 5px; - } - html .bodywebsite .page .offset-xl-top-10 { - margin-top: 10px; - } - html .bodywebsite .page .offset-xl-top-15 { - margin-top: 15px; - } - html .bodywebsite .page .offset-xl-top-22 { - margin-top: 22px; - } - html .bodywebsite .page .offset-xl-top-27 { - margin-top: 27px; - } - html .bodywebsite .page .offset-xl-top-30 { - margin-top: 30px; - } - html .bodywebsite .page .offset-xl-top-35 { - margin-top: 35px; - } - html .bodywebsite .page .offset-xl-top-40 { - margin-top: 40px; - } - html .bodywebsite .page .offset-xl-top-45 { - margin-top: 45px; - } - html .bodywebsite .page .offset-xl-top-50 { - margin-top: 50px; - } - html .bodywebsite .page .offset-xl-top-60 { - margin-top: 60px; - } - html .bodywebsite .page .offset-xl-top-75 { - margin-top: 75px; - } - html .bodywebsite .page .offset-xl-top-90 { - margin-top: 90px; - } - html .bodywebsite .page .offset-xl-top-100 { - margin-top: 100px; - } - html .bodywebsite .page .offset-xl-top-120 { - margin-top: 120px; - } -} -@media (min-width: 1800px) { - html .bodywebsite .page .offset-xxl-top-0 { - margin-top: 0; - } - html .bodywebsite .page .offset-xxl-top-2 { - margin-top: 2px; - } - html .bodywebsite .page .offset-xxl-top-5 { - margin-top: 5px; - } - html .bodywebsite .page .offset-xxl-top-10 { - margin-top: 10px; - } - html .bodywebsite .page .offset-xxl-top-15 { - margin-top: 15px; - } - html .bodywebsite .page .offset-xxl-top-22 { - margin-top: 22px; - } - html .bodywebsite .page .offset-xxl-top-27 { - margin-top: 27px; - } - html .bodywebsite .page .offset-xxl-top-30 { - margin-top: 30px; - } - html .bodywebsite .page .offset-xxl-top-35 { - margin-top: 35px; - } - html .bodywebsite .page .offset-xxl-top-40 { - margin-top: 40px; - } - html .bodywebsite .page .offset-xxl-top-45 { - margin-top: 45px; - } - html .bodywebsite .page .offset-xxl-top-50 { - margin-top: 50px; - } - html .bodywebsite .page .offset-xxl-top-60 { - margin-top: 60px; - } - html .bodywebsite .page .offset-xxl-top-75 { - margin-top: 75px; - } - html .bodywebsite .page .offset-xxl-top-90 { - margin-top: 90px; - } - html .bodywebsite .page .offset-xxl-top-100 { - margin-top: 100px; - } - html .bodywebsite .page .offset-xxl-top-120 { - margin-top: 120px; - } -} -@media (min-width: 768px) { - .bodywebsite .shift-sm-top-1 { - margin-top: -18px; - } -} -@media (min-width: 992px) { - .bodywebsite .shift-sm-top-1 { - margin-top: -23px; - } -} -@media (min-width: 992px) { - .bodywebsite .shift-md-top-1 { - margin-top: -33px; - } -} -@media (min-width: 1200px) { - .bodywebsite .shift-md-top-1 { - margin-top: -43px; - } -} -.bodywebsite .row-0 { - margin-bottom: 0px; -} -.bodywebsite .row-0:empty { - margin-bottom: 0; -} -.bodywebsite .row-0 > * { - margin-bottom: 0px; -} -.bodywebsite .row-15 { - margin-bottom: -15px; -} -.bodywebsite .row-15:empty { - margin-bottom: 0; -} -.bodywebsite .row-15 > * { - margin-bottom: 15px; -} -.bodywebsite .row-20 { - margin-bottom: -20px; -} -.bodywebsite .row-20:empty { - margin-bottom: 0; -} -.bodywebsite .row-20 > * { - margin-bottom: 20px; -} -.bodywebsite .row-30 { - margin-bottom: -30px; -} -.bodywebsite .row-30:empty { - margin-bottom: 0; -} -.bodywebsite .row-30 > * { - margin-bottom: 30px; -} -.bodywebsite .row-40 { - margin-bottom: -40px; -} -.bodywebsite .row-40:empty { - margin-bottom: 0; -} -.bodywebsite .row-40 > * { - margin-bottom: 40px; -} -.bodywebsite .row-50 { - margin-bottom: -50px; -} -.bodywebsite .row-50:empty { - margin-bottom: 0; -} -.bodywebsite .row-50 > * { - margin-bottom: 50px; -} -.bodywebsite .row-60 { - margin-bottom: -60px; -} -.bodywebsite .row-60:empty { - margin-bottom: 0; -} -.bodywebsite .row-60 > * { - margin-bottom: 60px; -} -@media (min-width: 576px) { - .bodywebsite .row-sm-50 { - margin-bottom: -50px; - } - .bodywebsite .row-sm-50:empty { - margin-bottom: 0; - } - .bodywebsite .row-sm-50 > * { - margin-bottom: 50px; - } - .bodywebsite .row-sm-0 { - margin-bottom: 0px; - } - .bodywebsite .row-sm-0:empty { - margin-bottom: 0; - } - .bodywebsite .row-sm-0 > * { - margin-bottom: 0px; - } -} -@media (min-width: 768px) { - .bodywebsite .row-md-60 { - margin-bottom: -60px; - } - .bodywebsite .row-md-60:empty { - margin-bottom: 0; - } - .bodywebsite .row-md-60 > * { - margin-bottom: 60px; - } -} -@media (min-width: 992px) { - .bodywebsite .row-md-30 { - margin-bottom: -30px; - } - .bodywebsite .row-md-30:empty { - margin-bottom: 0; - } - .bodywebsite .row-md-30 > * { - margin-bottom: 30px; - } -} -@media (min-width: 1200px) { - .bodywebsite .row-xl-100 { - margin-bottom: -100px; - } - .bodywebsite .row-xl-100:empty { - margin-bottom: 0; - } - .bodywebsite .row-xl-100 > * { - margin-bottom: 100px; - } - .bodywebsite .row-xl-90 { - margin-bottom: -90px; - } - .bodywebsite .row-xl-90:empty { - margin-bottom: 0; - } - .bodywebsite .row-xl-90 > * { - margin-bottom: 90px; - } -} -.bodywebsite .link { - display: inline-block; -} -.bodywebsite .link-inline { - font: inherit; - line-height: inherit; - text-decoration: underline; -} -.bodywebsite .link-underline, -.bodywebsite .link-underline:active, -.bodywebsite .link-underline:focus { - text-decoration: underline; -} -.bodywebsite .link-underline:hover { - text-decoration: none; -} -.bodywebsite .link-circle { - border-radius: 50%; -} -.bodywebsite .link-circle .icon, -.bodywebsite .link-circle .icon:before { - position: static; -} -.bodywebsite .link-bold { - font: 700 18px/22px "Roboto", Helvetica, Arial, sans-serif; -} -.bodywebsite .link-group { - white-space: nowrap; -} -.bodywebsite .link-group * { - vertical-align: middle; -} -.bodywebsite .link-group span { - display: inline-block; -} -.bodywebsite .link-group span + *, -.bodywebsite .link-group * + span { - margin-left: 5px; -} -.bodywebsite .link-group.link-group-animated .icon { - position: relative; - right: 0; - transition: .22s; -} -.bodywebsite .link-group.link-group-animated:hover .icon { - right: -5px; -} -.bodywebsite .link-group-baseline * { - vertical-align: baseline; -} -.bodywebsite .link-icon, -.bodywebsite .link-icon * { - vertical-align: middle; -} -.bodywebsite .link-icon .icon { - margin-right: 5px; -} -.bodywebsite .link-icon-mod .icon { - position: relative; - top: -3px; -} -.bodywebsite .link-image img { - width: auto; - transition: .44s all ease; - opacity: .5; -} -.bodywebsite .link-image:hover img { - opacity: 1; -} -.bodywebsite .link-image-wrap { - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - -webkit-flex-wrap: nowrap; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; - min-height: 126px; -} -.bodywebsite * + .link-image-wrap { - margin-top: 13px; -} -.bodywebsite .page .link-primary-inline { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .page .link-primary-inline.active, -.bodywebsite .page .link-primary-inline:active, -.bodywebsite .page .link-primary-inline:focus { - color: #9b9b9b; -} -.bodywebsite .page .link-primary-inline.hover, -.bodywebsite .page .link-primary-inline:hover { - color: #42b294; -} -.bodywebsite .page .link-default, -.bodywebsite .page .link-default:active, -.bodywebsite .page .link-default:focus { - color: #9f9f9f; -} -.bodywebsite .page .link-default:hover { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .page .link-primary, -.bodywebsite .page .link-primary:active, -.bodywebsite .page .link-primary:focus { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .page .link-primary:hover { - color: #00030a; -} -.bodywebsite .page .link-primary-inverse, -.bodywebsite .page .link-primary-inverse:active, -.bodywebsite .page .link-primary-inverse:focus { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .page .link-primary-inverse:hover { - color: #ddd; -} -.bodywebsite .page .link-primary-inverse-v2, -.bodywebsite .page .link-primary-inverse-v2:active, -.bodywebsite .page .link-primary-inverse-v2:focus { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .page .link-primary-inverse-v2:hover { - color: #fff; -} -.bodywebsite .page .link-secondary, -.bodywebsite .page .link-secondary:active, -.bodywebsite .page .link-secondary:focus { - color: #00030a; -} -.bodywebsite .page .link-secondary:hover { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .page .link-tundora, -.bodywebsite .page .link-tundora:active, -.bodywebsite .page .link-tundora:focus { - color: #414141; -} -.bodywebsite .page .link-tundora:hover { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .page .link-tundora-inverse, -.bodywebsite .page .link-tundora-inverse:active, -.bodywebsite .page .link-tundora-inverse:focus { - color: #414141; -} -.bodywebsite .page .link-tundora-inverse:hover { - color: #fff; -} -.bodywebsite .page .link-secondary, -.bodywebsite .page .link-secondary:active, -.bodywebsite .page .link-secondary:focus { - color: #000; -} -.bodywebsite .page .link-secondary:hover { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .page .link-gray-light, -.bodywebsite .page .link-gray-light:active, -.bodywebsite .page .link-gray-light:focus { - color: #dedede; -} -.bodywebsite .page .link-gray-light:hover { - color: #000; -} -.bodywebsite .page .link-white, -.bodywebsite .page .link-white:active, -.bodywebsite .page .link-white:focus { - color: #fff; -} -.bodywebsite .page .link-white:hover { - color: #fff; -} -.bodywebsite .page .link-black, -.bodywebsite .page .link-black:active, -.bodywebsite .page .link-black:focus { - color: #000; -} -.bodywebsite .page .link-black:hover { - color: maincolorbis) ? 'rgb(50, 120, 180)' : '#'.$website->maincolorbis; ?>; -} -.bodywebsite .page .link-black:hover { - text-decoration: underline; -} -.bodywebsite .page .link-gray-dark-filled, -.bodywebsite .page .link-gray-dark-filled:active, -.bodywebsite .page .link-gray-dark-filled:focus { - color: #fff; - background: #2a2b2b; -} -.bodywebsite .page .link-gray-dark-filled:hover { - color: #fff; - background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .page .link-shop { - width: 25px; - height: 25px; - font-size: 25px; - line-height: 25px; -} -.bodywebsite .page .link-shop, -.bodywebsite .page .link-shop:active, -.bodywebsite .page .link-shop:focus { - color: #00030a; -} -.bodywebsite .page .link-shop:hover { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite ul, -.bodywebsite ol { - list-style: none; - padding: 0; - margin: 0; -} -.bodywebsite dl { - margin: 0; -} -.bodywebsite dt { - font-weight: inherit; -} -.bodywebsite .list > li + li { - margin-top: 5px; -} -.bodywebsite .list-xl > li + li { - margin-top: 44px; -} -.bodywebsite .list-inline { - margin-left: -5px; - margin-right: -5px; - vertical-align: baseline; -} -.bodywebsite .list-inline > li { - display: inline-block; - padding-left: 5px; - padding-right: 5px; -} -.bodywebsite .list-inline-xs { - margin-left: -6px; - margin-right: -6px; -} -.bodywebsite .list-inline-xs > li { - display: inline-block; - padding-left: 6px; - padding-right: 6px; -} -.bodywebsite .list-inline-sm { - margin-left: -10px; - margin-right: -10px; -} -.bodywebsite .list-inline-sm > li { - display: inline-block; - padding-left: 10px; - padding-right: 10px; -} -.bodywebsite .list-inline-md { - margin-left: -15px; - margin-right: -15px; -} -.bodywebsite .list-inline-md > li { - display: inline-block; - padding-left: 15px; - padding-right: 15px; -} -.bodywebsite .list-objects-inline { - margin-bottom: -4px; - margin-left: -22px; - transform: translateY(-4px); -} -.bodywebsite .list-objects-inline > *, -.bodywebsite .list-objects-inline > *:first-child { - display: inline-block; - vertical-align: middle; - margin-top: 4px; - margin-left: 22px; -} -.bodywebsite .list-objects-inline > li > * { - display: inline-block; - vertical-align: middle; -} -.bodywebsite .list-objects-inline > li > * + * { - margin-left: 5px; -} -.bodywebsite .list-terms dt + dd { - margin-top: 10px; -} -.bodywebsite .list-terms dd + dt { - margin-top: 31px; -} -.bodywebsite .list-terms-variant-1 dt { - font: 700 16px/22px "Roboto", Helvetica, Arial, sans-serif; - letter-spacing: -0.025em; - color: #000; -} -.bodywebsite .list-terms-variant-1 dt + dd { - margin-top: 18px; -} -.bodywebsite .list-terms-variant-1 dd + dt { - margin-top: 40px; -} -@media (min-width: 1200px) { - .bodywebsite .list-terms-variant-1 dt { - font-size: 24px; - line-height: 1.2; - } - .bodywebsite .list-terms-variant-1 dd + dt { - margin-top: 50px; - } -} -.bodywebsite .list-inline-dashed { - margin-left: -15px; -} -.bodywebsite .list-inline-dashed li { - padding-left: 15px; - padding-right: 10px; -} -.bodywebsite .list-inline-dashed li:after { - content: '|'; - position: relative; - right: -12.5px; - color: #e5e7e9; -} -.bodywebsite .list-inline-dashed li:last-child { - padding-right: 0; -} -.bodywebsite .list-inline-dashed li:last-child:after { - display: none; -} -@media (min-width: 992px) { - .bodywebsite .list-md-dashed > * { - position: relative; - } - .bodywebsite .list-md-dashed > *:after { - content: ''; - position: absolute; - font-weight: 100; - top: 0; - right: -6%; - height: 73px; - -webkit-transform: translateX(-50%) skew(-21deg); - transform: translateX(-50%) skew(-21deg); - width: 1px; - background: #48494a; - } -} -@media (min-width: 992px) and (min-width: 1200px) { - .bodywebsite .list-md-dashed > *:after { - right: -3%; - height: 120px; - } -} -@media (min-width: 992px) { - .bodywebsite .list-md-dashed > *:last-child::after { - display: none; - } -} -.bodywebsite .dl-inline { - vertical-align: middle; -} -.bodywebsite .dl-inline dt, -.bodywebsite .dl-inline dd { - display: inline-block; - vertical-align: middle; -} -.bodywebsite .dl-inline dt { - padding-right: 5px; -} -.bodywebsite .dl-inline dt:after { - content: ':'; -} -.bodywebsite .dl-inline .pricing-object-sm { - position: relative; - top: -5px; -} -.bodywebsite .list-terms-inline dt, -.bodywebsite .list-terms-inline dd { - display: inline-block; -} -.bodywebsite .list-terms-inline dt { - color: #000; -} -.bodywebsite .list-terms-inline dd { - color: #9f9f9f; -} -.bodywebsite .list-terms-inline dt:after { - content: ':'; -} -.bodywebsite .list-index { - counter-reset: li; -} -.bodywebsite .list-index > li .list-index-counter:before { - content: counter(li, decimal-leading-zero); - counter-increment: li; -} -.bodywebsite .list-marked li { - color: #000; - position: relative; - padding-left: 32px; -} -.bodywebsite .list-marked li:before { - position: absolute; - top: 1px; - left: 0; - content: '\e005'; - font-family: "fl-flat-icons-set-2"; - display: inline-block; - margin-right: 11px; - font-size: 13px; - line-height: inherit; - vertical-align: middle; - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .list-marked li:not(:last-child):after { - content: ';'; -} -.bodywebsite .list-marked li:last-child:after { - content: '.'; -} -.bodywebsite .list-marked li + li { - margin-top: 11px; -} -.bodywebsite .list-marked-spacing-lg li { - padding-left: 26px; -} -@media (min-width: 992px) and (max-width: 1799px) { - .bodywebsite .list-marked li { - padding-left: 24px; - font-size: 13px; - } - .bodywebsite .list-marked li:before { - font-size: 11px; - } -} -.bodywebsite .list-marked-variant-2 > li > a { - position: relative; - display: inline-block; -} -.bodywebsite .list-marked-variant-2 > li > a:hover:before { - left: 4px; -} -.bodywebsite .list-marked-variant-2 > li + li { - margin-top: 14px; -} -.bodywebsite .list-ordered { - counter-reset: li; -} -.bodywebsite .list-ordered li { - color: #000; -} -.bodywebsite .list-ordered li:before { - display: inline-block; - margin-right: 13px; - width: 15px; - content: counter(li, decimal) "."; - counter-increment: li; -} -.bodywebsite .list-ordered li:not(:last-child):after { - content: ';'; -} -.bodywebsite .list-ordered li:last-child:after { - content: '.'; -} -.bodywebsite .list-ordered li + li { - margin-top: 11px; -} -.bodywebsite .list-tags > li { - display: inline-block; - font-style: italic; -} -.bodywebsite .list-tags > li a, -.bodywebsite .list-tags > li a:active, -.bodywebsite .list-tags > li a:focus { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .list-tags > li a:hover { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .list-tags > li:after { - content: ','; - display: inline-block; - color: #f9f9f9; -} -.bodywebsite .list-tags > li:last-child:after { - display: none; -} -.bodywebsite .list-numbered { - counter-reset: li; -} -.bodywebsite .list-numbered > li { - position: relative; - padding-left: 30px; -} -.bodywebsite .list-numbered > li:before { - position: absolute; - top: 0; - left: 0; - content: counter(li, decimal) "."; - counter-increment: li; -} -.bodywebsite .list-numbered > li + li { - margin-top: 10px; -} -.bodywebsite .list-icon-pack { - margin-top: 6px; -} -.bodywebsite .list-icon-pack > li { - margin-top: 25px; -} -.bodywebsite .list-icon-pack > li span { - display: block; -} -.bodywebsite .list-icon-pack > li span + span { - margin-left: .25em; -} -.bodywebsite .list-icon-pack h6 + *, -.bodywebsite .list-icon-pack .h6 + * { - margin-top: 2px; -} -.bodywebsite .list-links > li { - display: inline-block; -} -.bodywebsite .list-links > li:after { - content: ';'; -} -.bodywebsite .list-links > li:last-child:after { - display: none; -} -.bodywebsite .list-hashtags > li { - display: inline-block; -} -.bodywebsite .list-hashtags > li a { - color: inherit; -} -.bodywebsite .list-hashtags > li a:hover { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .list-hashtags > li > a:before { - content: '#'; -} -.bodywebsite .list-marked-bordered { - color: #000; -} -.bodywebsite .list-marked-bordered li a { - display: block; - padding: 10px 7px; - border-bottom: 1px solid #f9f9f9; -} -.bodywebsite .list-marked-bordered li a:before { - position: relative; - display: inline-block; - padding-right: 10px; - font: 400 18px "FontAwesome"; - line-height: inherit; - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - content: '\f105'; -} -.bodywebsite .list-marked-bordered li a span { - color: inherit; - transition: color .33s; -} -.bodywebsite .list-marked-bordered li a span:first-child { - color: #000; -} -.bodywebsite .list-marked-bordered li a:hover, -.bodywebsite .list-marked-bordered li a:hover span:nth-child(n) { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .list-marked-bordered li span:not(:last-child) { - margin-right: .25em; -} -.bodywebsite .list-bordered-horizontal { - position: relative; - transform: translateY(-7px); - margin-bottom: -7px; -} -.bodywebsite .list-bordered-horizontal > * { - margin-top: 7px; -} -.bodywebsite .list-bordered-horizontal > *:not(:last-child) { - margin-right: 35px; -} -@media (min-width: 768px) { - .bodywebsite .list-bordered-horizontal > li { - display: inline-block; - } - .bodywebsite .list-bordered-horizontal > li:not(:last-child) { - position: relative; - } - .bodywebsite .list-bordered-horizontal > li:not(:last-child):after { - content: ''; - position: absolute; - top: 50%; - transform: translateY(-50%); - right: -20px; - width: 1px; - height: 22px; - background: #dedede; - } -} -.bodywebsite .list-tag-blocks { - position: relative; - transform: translateY(-6px); - margin-bottom: -6px; -} -.bodywebsite .list-tag-blocks > * { - margin-top: 6px; -} -.bodywebsite .list-tag-blocks > *:not(:last-child) { - margin-right: 6px; -} -.bodywebsite .list-tag-blocks li { - display: inline-block; - font-size: 11px; - font-weight: 700; - text-transform: uppercase; -} -.bodywebsite .list-tag-blocks li a { - display: inline-block; - padding: 6px 19px; - border-radius: 0; - border: 1px solid transparent; -} -.bodywebsite .list-tag-blocks li a, -.bodywebsite .list-tag-blocks li a:active, -.bodywebsite .list-tag-blocks li a:focus { - color: #000; - background: #fff; -} -.bodywebsite .list-tag-blocks li a:hover { - background: transparent; - border-color: #cdcdcd; -} -.bodywebsite .list-progress { - font-family: "Roboto", Helvetica, Arial, sans-serif; - color: #00030a; -} -.bodywebsite .list-progress li + li { - margin-top: 23px; -} -.bodywebsite .list-progress p { - padding-right: 40px; -} -.bodywebsite .list-tags-inline > li { - display: inline; -} -.bodywebsite .list-tags-inline > li a { - color: inherit; -} -.bodywebsite .list-tags-inline > li a:hover { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .list-tags-inline > li:not(:last-child):after { - content: ','; -} -.bodywebsite .list-rating { - font-size: 0; - line-height: 0; -} -.bodywebsite .list-rating > li { - display: inline-block; -} -.bodywebsite .list-rating .icon { - color: #ffd400; -} -.bodywebsite .list-wide-bordered { - color: #00030a; - font: 400 14px/22px "Roboto", Helvetica, Arial, sans-serif; - border-top: 1px solid #dedede; -} -.bodywebsite .list-wide-bordered dl { - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - -webkit-flex-wrap: nowrap; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; - width: 100%; - font-weight: 700; -} -.bodywebsite .list-wide-bordered dl dt { - padding-right: 15px; -} -.bodywebsite .list-wide-bordered dl dd { - font-weight: 700; - font-size: 14px; -} -.bodywebsite .list-wide-bordered li { - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - -webkit-flex-wrap: nowrap; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - min-height: 54px; - padding: 10px 20px; - border-bottom: 1px solid #dedede; -} -.bodywebsite .list-wide-bordered + .list-wide-bordered { - border-top: 0; -} -@media (min-width: 768px) { - .bodywebsite .list-wide-bordered { - font-size: 16px; - } - .bodywebsite .list-wide-bordered li { - min-height: 73px; - padding: 20px 30px; - } -} -.bodywebsite .object-wrap { - position: relative; - overflow: hidden; -} -.bodywebsite .object-wrap-right > .object-wrap-body { - right: 0; -} -.bodywebsite .object-wrap-left > .object-wrap-body { - left: 0; -} -@media (min-width: 768px) { - .bodywebsite .object-wrap-sm-right > .object-wrap-body { - right: 0; - } - .bodywebsite .object-wrap-sm-left > .object-wrap-body { - left: 0; - } -} -@media (max-width: 767px) { - .bodywebsite .object-wrap-body { - position: relative; - overflow: hidden; - min-height: 300px; - width: 100%; - } - .bodywebsite .object-wrap-body > img { - position: absolute; - min-width: 100%; - max-width: none; - height: auto; - max-height: none; - top: 20%; - left: 50%; - transform: translate(-50%, -20%); - } -} -@media (min-width: 768px) { - .bodywebsite .object-wrap-body { - overflow: hidden; - position: absolute; - top: 0; - bottom: 0; - width: 100vw; - min-width: 1px; - max-width: none; - height: 100%; - min-height: 100%; - max-height: none; - margin: 0; - background: inherit; - z-index: 0; - } - .bodywebsite .object-wrap-body > img { - position: relative; - height: auto; - min-height: 100.5%; - width: auto; - min-width: 102%; - max-width: none; - left: 50%; - transform: translateX(-50%); - } - .bodywebsite .object-wrap-body + * { - margin-top: 0; - } -} -@media (min-width: 768px) { - .bodywebsite .sm-width-c6 { - width: calc(50vw); - } -} -@media (min-width: 992px) { - .bodywebsite .md-width-c7d20 { - width: calc(150vw); - } -} -@media (min-width: 1200px) { - .bodywebsite .md-width-c7d20 { - width: calc(167.5vw); - } -} -@media (min-width: 992px) { - .bodywebsite .md-width-c5dm20 { - width: calc(-50vw); - } -} -@media (min-width: 1200px) { - .bodywebsite .md-width-c5dm20 { - width: calc(-67.5vw); - } -} -.bodywebsite .bg-wrap { - position: relative; -} -.bodywebsite .bg-wrap:before { - content: ''; - position: absolute; - top: 0; - bottom: 0; - width: 120vw; - left: 50%; - transform: translateX(-50%); - background: inherit; - z-index: -1; -} -.bodywebsite .bg-wrap-sm-left { - z-index: 1; -} -@media (min-width: 992px) { - .bodywebsite .bg-wrap-sm-left:before { - width: 100vw; - right: 0; - transform: none; - } -} -.bodywebsite .bg-wrap-sm-right { - z-index: 1; -} -@media (min-width: 992px) { - .bodywebsite .bg-wrap-sm-right:before { - width: 100vw; - left: 0; - transform: none; - } -} -@media (min-width: 576px) { - .bodywebsite .wrap-justify { - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - -webkit-flex-wrap: nowrap; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - -webkit-justify-content: space-around; - -ms-flex-pack: distribute; - justify-content: space-around; - } - .bodywebsite .wrap-justify > * + * { - margin-top: 0; - } -} -@media (min-width: 768px) { - .bodywebsite .wrap-justify { - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; - } -} -@media (min-width: 1200px) { - .bodywebsite .wrap-justify { - padding-right: 30px; - } -} -.bodywebsite .link-wrap { - line-height: 1; -} -.bodywebsite .link-wrap a { - display: inline; - line-height: 1; -} -.bodywebsite [class*='bg-decoration-wrap'] { - position: relative; - overflow: hidden; -} -.bodywebsite [class*='bg-decoration-wrap'] .bg-decoration-content { - position: relative; - z-index: 2; -} -.bodywebsite [class*='bg-decoration-wrap'] .bg-decoration-object { - top: 0; - bottom: auto; -} -.bodywebsite .bg-decoration-bottom .bg-decoration-object { - top: auto; - bottom: 0; -} -@media (min-width: 768px) { - .bodywebsite .bg-decoration-wrap-sm .bg-decoration-object { - height: 50%; - position: absolute; - right: 0; - left: 0; - } - .bodywebsite .bg-decoration-bottom-sm .bg-decoration-object { - height: 34%; - } -} -@media (min-width: 1200px) { - .bodywebsite .bg-decoration-object { - height: 50%; - position: absolute; - right: 0; - left: 0; - } - .bodywebsite .bg-decoration-bottom-mod .bg-decoration-object { - height: 45%; - } -} -.bodywebsite .divider-fullwidth { - height: 1px; - width: 100%; -} -.bodywebsite .hr { - border: none; - height: 1px; - width: 100%; -} -.bodywebsite .tabs-custom .nav-tabs { - display: block; - word-spacing: 0; - border: 0; -} -.bodywebsite .tabs-custom .nav-tabs:before, -.bodywebsite .tabs-custom .nav-tabs:after { - display: none; -} -.bodywebsite .tabs-custom .nav-tabs .nav-item { - float: none; - border: 0; - cursor: pointer; - transition: .33s all ease; -} -.bodywebsite .tabs-custom .nav-tabs .nav-item .nav-link.active { - cursor: default; - border: 0; -} -.bodywebsite .tabs-custom .nav-tabs .nav-link { - margin: 0; - border: 0; -} -.bodywebsite * + .tabs-custom { - margin-top: 35px; -} -@media (min-width: 992px) { - .bodywebsite * + .tabs-custom { - margin-top: 50px; - } -} -.bodywebsite .tabs-custom.tabs-corporate .nav-tabs, -.bodywebsite .tabs-custom.tabs-line .nav-tabs, -.bodywebsite .tabs-custom.tabs-minimal .nav-tabs { - font-size: 0; - line-height: 0; -} -.bodywebsite .tabs-custom.tabs-corporate .nav-tabs { - border: 1px solid #dedede; -} -.bodywebsite .tabs-custom.tabs-corporate .nav-tabs li { - margin: -1px 0; -} -.bodywebsite .tabs-custom.tabs-corporate .nav-tabs .nav-item .nav-link { - padding: 8px 10px; - font: 700 11px/18px "Roboto", Helvetica, Arial, sans-serif; - color: #000; - background: transparent; - border-bottom: 1px solid #dedede; - text-align: center; - vertical-align: middle; -} -.bodywebsite .tabs-custom.tabs-corporate .nav-tabs .nav-item .nav-link:after { - font: 400 17px 'Material Design Icons'; - color: transparent; - position: relative; - top: -12px; - display: inline-block; - margin-left: 5px; - content: '\f236'; - vertical-align: middle; - transition: .33s all ease; -} -.bodywebsite .tabs-custom.tabs-corporate .nav-tabs .nav-item .nav-link:first-child { - border-top: 1px solid #dedede; -} -.bodywebsite .tabs-custom.tabs-corporate .nav-tabs .nav-item .nav-link:hover, -.bodywebsite .tabs-custom.tabs-corporate .nav-tabs .nav-item .active.nav-link { - color: #fff; - background: #3a3c3e; - border-color: #3a3c3e; -} -.bodywebsite .tabs-custom.tabs-corporate .nav-tabs .nav-item .nav-link:hover:after, -.bodywebsite .tabs-custom.tabs-corporate .nav-tabs .nav-item .active.nav-link:after { - top: -1px; - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .tabs-custom.tabs-corporate .tab-content { - padding: 22px 0 0; -} -.bodywebsite .tabs-custom.tabs-line .nav-tabs .nav-item, -.bodywebsite .tabs-custom.tabs-minimal .nav-tabs .nav-item { - margin: 0; -} -.bodywebsite .tabs-custom.tabs-line .nav-tabs .nav-item + .nav-item, -.bodywebsite .tabs-custom.tabs-minimal .nav-tabs .nav-item + .nav-item { - margin-top: -1px; -} -.bodywebsite .tabs-custom.tabs-line .tab-content, -.bodywebsite .tabs-custom.tabs-minimal .tab-content { - padding: 22px 0 0; -} -.bodywebsite .tabs-custom.tabs-line .nav-tabs .nav-item .nav-link { - font: 400 11px/16px "Roboto", Helvetica, Arial, sans-serif; - letter-spacing: -0.05em; - text-transform: uppercase; - color: #9b9b9b; -} -.bodywebsite .tabs-custom.tabs-line .nav-tabs .nav-item .nav-link:hover, -.bodywebsite .tabs-custom.tabs-line .nav-tabs .nav-item .active.nav-link { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .tabs-custom.tabs-minimal .nav-tabs .nav-item .nav-link { - font: 700 11px/24px "Roboto", Helvetica, Arial, sans-serif; - color: #000; -} -.bodywebsite .tabs-custom.tabs-minimal .nav-tabs .nav-item .nav-link:hover, -.bodywebsite .tabs-custom.tabs-minimal .nav-tabs .nav-item .active.nav-link { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .tabs-custom.tabs-line .nav-tabs { - text-align: center; -} -.bodywebsite .tabs-custom.tabs-line .nav-tabs .nav-item { - display: block; - margin: 0 -1px; -} -.bodywebsite .tabs-custom.tabs-line .nav-tabs .nav-item .nav-link { - padding: 8px 15px; - border: 1px solid #e5e7e9; -} -.bodywebsite .tabs-custom.tabs-line .nav-tabs .nav-item .nav-link:last-child { - margin-right: 0; - border-bottom-width: 1px; -} -.bodywebsite .tabs-custom.tabs-line .nav-tabs .nav-item .nav-link:hover, -.bodywebsite .tabs-custom.tabs-line .nav-tabs .nav-item .active.nav-link { - color: #fff; - background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - border-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .tabs-custom.tabs-minimal .nav-tabs { - text-align: center; -} -.bodywebsite .tabs-custom.tabs-minimal .nav-tabs .nav-item { - display: block; -} -.bodywebsite .tabs-custom.tabs-minimal .nav-tabs .nav-item .nav-link { - padding: 7px 15px; - border: 1px solid #e5e7e9; -} -.bodywebsite .tabs-custom.tabs-minimal .nav-tabs .nav-item .nav-link:last-child { - border-bottom-width: 1px; -} -.bodywebsite .tabs-custom.tabs-minimal .nav-tabs .nav-item .nav-link:hover, -.bodywebsite .tabs-custom.tabs-minimal .nav-tabs .nav-item .active.nav-link { - color: #fff; - background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - border-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -@media (min-width: 768px) { - .bodywebsite .tabs-custom.tabs-line .nav-item, - .bodywebsite .tabs-custom.tabs-minimal .nav-item { - margin: 0; - } - .bodywebsite .tabs-custom.tabs-line .nav-tabs .nav-item .nav-link { - font-size: 14px; - line-height: 24px; - } - .bodywebsite .tabs-custom.tabs-minimal .nav-tabs .nav-item .nav-link { - font-size: 14px; - line-height: 24px; - } - .bodywebsite .tabs-custom.tabs-horizontal.tabs-corporate .nav-tabs, - .bodywebsite .tabs-custom.tabs-horizontal.tabs-line .nav-tabs { - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - width: 100%; - text-align: left; - } - .bodywebsite .tabs-custom.tabs-horizontal.tabs-line .nav-tabs .nav-item .nav-link, - .bodywebsite .tabs-custom.tabs-horizontal.tabs-minimal .nav-tabs .nav-item .nav-link { - position: relative; - z-index: 10; - display: inline-block; - border: 0; - } - .bodywebsite .tabs-custom.tabs-horizontal.tabs-line .nav-tabs .nav-item + .nav-item, - .bodywebsite .tabs-custom.tabs-horizontal.tabs-minimal .nav-tabs .nav-item + .nav-item { - margin-top: 0; - } - .bodywebsite .tabs-custom.tabs-horizontal.tabs-line .tab-content, - .bodywebsite .tabs-custom.tabs-horizontal.tabs-minimal .tab-content { - padding: 40px 0 0; - } - .bodywebsite .tabs-custom.tabs-horizontal.tabs-corporate .nav-tabs .nav-item, - .bodywebsite .tabs-custom.tabs-horizontal.tabs-corporate .nav-tabs .nav-link { - display: block; - border: 0; - } - .bodywebsite .tabs-custom.tabs-horizontal.tabs-line .nav-tabs { - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; - border-bottom: 2px solid #e5e7e9; - } - .bodywebsite .tabs-custom.tabs-horizontal.tabs-line .nav-tabs .nav-item .nav-link { - padding: 8px 0 8px 0; - margin: 0 30px 0 0; - font-weight: 700; - background: transparent; - } - .bodywebsite .tabs-custom.tabs-horizontal.tabs-line .nav-tabs .nav-item .nav-link:after { - content: ''; - position: absolute; - left: 0; - right: 100%; - bottom: -1px; - border-bottom: 2px solid maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - opacity: 0; - visibility: hidden; - transition: .33s all ease; - } - .bodywebsite .tabs-custom.tabs-horizontal.tabs-line .nav-tabs .nav-item .nav-link:hover, - .bodywebsite .tabs-custom.tabs-horizontal.tabs-line .nav-tabs .nav-item .active.nav-link { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - background: transparent; - } - .bodywebsite .tabs-custom.tabs-horizontal.tabs-line .nav-tabs .nav-item .active.nav-link:after { - right: 0; - opacity: 1; - visibility: visible; - } - .bodywebsite .tabs-custom.tabs-horizontal.tabs-minimal .nav-tabs { - margin-top: -10px; - } - .bodywebsite .tabs-custom.tabs-horizontal.tabs-minimal .nav-tabs .nav-item { - display: inline-block; - margin: 10px 15px 0 0; - } - .bodywebsite .tabs-custom.tabs-horizontal.tabs-minimal .nav-tabs .nav-item .nav-link { - position: relative; - bottom: -1px; - z-index: 10; - display: inline-block; - padding: 0 0 5px 0; - } - .bodywebsite .tabs-custom.tabs-horizontal.tabs-minimal .nav-tabs .nav-item .nav-link:after { - content: ''; - position: absolute; - left: 0; - right: 100%; - bottom: 0; - border-bottom: 2px solid maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - opacity: 0; - visibility: hidden; - transition: .33s all ease; - } - .bodywebsite .tabs-custom.tabs-horizontal.tabs-minimal .nav-tabs .nav-item .nav-link:last-child { - margin-right: 0; - } - .bodywebsite .tabs-custom.tabs-horizontal.tabs-minimal .nav-tabs .nav-item .nav-link:hover, - .bodywebsite .tabs-custom.tabs-horizontal.tabs-minimal .nav-tabs .nav-item .active.nav-link { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - background: transparent; - } - .bodywebsite .tabs-custom.tabs-horizontal.tabs-minimal .nav-tabs .nav-item .active.nav-link:after { - right: 0; - opacity: 1; - visibility: visible; - } -} -.bodywebsite .tabs-vertical .nav-tabs { - position: relative; -} -.bodywebsite .tabs-vertical .nav-tabs > .nav-item { - z-index: 10; - display: block; - -webkit-flex-grow: 1; - -ms-flex-positive: 1; - flex-grow: 1; -} -.bodywebsite .tabs-vertical.tabs-corporate .nav-tabs { - width: 100%; -} -.bodywebsite .tabs-vertical.tabs-corporate .nav-tabs .nav-item { - display: block; -} -.bodywebsite .tabs-vertical.tabs-corporate .nav-tabs .nav-item .nav-link { - position: relative; - padding: 8px 10px; -} -.bodywebsite .tabs-vertical.tabs-corporate .nav-tabs .nav-item .nav-link:hover, -.bodywebsite .tabs-vertical.tabs-corporate .nav-tabs .nav-item .active.nav-link { - border-color: #3a3c3e; -} -.bodywebsite .tabs-vertical.tabs-corporate .tab-content { - padding: 30px 0 0; -} -.bodywebsite .tabs-vertical.tabs-minimal .nav-tabs { - border-right: 1px solid #ddd; -} -.bodywebsite .tabs-vertical.tabs-minimal .nav-tabs .nav-item .nav-link { - position: relative; - right: -1px; - padding: 0 16px 0 0; - text-align: right; - border-right: 1px solid transparent; - background-color: transparent; -} -.bodywebsite .tabs-vertical.tabs-minimal .nav-tabs .nav-item .nav-link:hover, -.bodywebsite .tabs-vertical.tabs-minimal .nav-tabs .nav-item .nav-link.resp-tab-active { - border-right-color: #00030a; -} -.bodywebsite .tabs-vertical.tabs-minimal .nav-tabs .nav-item + .nav-item { - margin-top: 16px; -} -@media (min-width: 768px) { - .bodywebsite .tabs-custom.tabs-corporate .nav-tabs .nav-item .nav-link { - font-size: 16px; - line-height: 26px; - } - .bodywebsite .tabs-custom.tabs-corporate .nav-tabs .nav-item .nav-link:after { - font-size: 25px; - } - .bodywebsite .tabs-custom.tabs-horizontal.tabs-corporate .nav-tabs { - position: relative; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; - } - .bodywebsite .tabs-custom.tabs-horizontal.tabs-corporate .nav-tabs .nav-item { - -webkit-flex-grow: 1; - -ms-flex-positive: 1; - flex-grow: 1; - -webkit-flex-shrink: 0; - -ms-flex-negative: 0; - flex-shrink: 0; - } - .bodywebsite .tabs-custom.tabs-horizontal.tabs-corporate .nav-tabs .nav-item .nav-link { - display: block; - padding: 21px 10px 19px; - } - .bodywebsite .tabs-custom.tabs-horizontal.tabs-corporate .tab-content { - padding: 30px 0 0; - } - .bodywebsite .tabs-custom.tabs-vertical { - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - -webkit-flex-wrap: nowrap; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -webkit-align-items: flex-start; - -ms-flex-align: start; - align-items: flex-start; - } - .bodywebsite .tabs-custom.tabs-vertical .nav-tabs { - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-direction: column; - -ms-flex-direction: column; - flex-direction: column; - -webkit-flex-wrap: nowrap; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -webkit-align-items: stretch; - -ms-flex-align: stretch; - align-items: stretch; - -webkit-flex-shrink: 0; - -ms-flex-negative: 0; - flex-shrink: 0; - max-width: 50%; - } - .bodywebsite .tabs-custom.tabs-vertical .nav-tabs .nav-item { - width: 100%; - } - .bodywebsite .tabs-custom.tabs-vertical .nav-tabs .nav-item .nav-link { - text-align: left; - } - .bodywebsite .tabs-custom.tabs-vertical .nav-tabs .nav-item .nav-link:hover, - .bodywebsite .tabs-custom.tabs-vertical .nav-tabs .nav-item .active.nav-link { - border-color: #3a3c3e; - } - .bodywebsite .tabs-custom.tabs-vertical .nav-tabs .nav-item .nav-link:hover:after, - .bodywebsite .tabs-custom.tabs-vertical .nav-tabs .nav-item .active.nav-link:after { - right: 15px; - } - .bodywebsite .tabs-custom.tabs-vertical .tab-content { - -webkit-flex-grow: 1; - -ms-flex-positive: 1; - flex-grow: 1; - } - .bodywebsite .tabs-custom.tabs-vertical.tabs-corporate .nav-tabs { - width: auto; - min-width: 240px; - border-width: 0 0 1px 0; - } - .bodywebsite .tabs-custom.tabs-vertical.tabs-corporate .nav-tabs .nav-item { - margin: 0; - } - .bodywebsite .tabs-custom.tabs-vertical.tabs-corporate .nav-tabs .nav-item .nav-link { - padding: 23px 44px 22px 30px; - border-width: 1px 0 0 0; - text-align: left; - } - .bodywebsite .tabs-custom.tabs-vertical.tabs-corporate .nav-tabs .nav-item .nav-link:after { - position: absolute; - top: 50%; - transform: translateY(-50%); - right: 26px; - content: '\f238'; - transition: .33s all ease; - } - .bodywebsite .tabs-custom.tabs-vertical.tabs-corporate .nav-tabs .nav-item .nav-link:hover:after, - .bodywebsite .tabs-custom.tabs-vertical.tabs-corporate .nav-tabs .nav-item .active.nav-link:after { - right: 15px; - top: 50%; - } - .bodywebsite .tabs-custom.tabs-vertical.tabs-corporate .tab-content { - padding: 0 0 0 30px; - margin-top: -5px; - } -} -@media (min-width: 992px) { - .bodywebsite .tabs-custom.tabs-vertical.tabs-corporate .nav-tabs { - min-width: 300px; - } - .bodywebsite .tabs-custom.tabs-vertical.tabs-corporate .tab-content { - padding: 0 0 0 44px; - } -} -.bodywebsite .card-group.card-group-custom { - margin-bottom: 0; -} -.bodywebsite .card-group.card-group-custom .card-heading + .card-collapse > .card-body, -.bodywebsite .card-group.card-group-custom .card-heading + .card-collapse > .list-group { - border-top: 0; -} -.bodywebsite .card-group.card-group-custom .card + .card { - margin-top: 0; -} -.bodywebsite .card-group.card-group-corporate .card + .card { - margin-top: 30px; -} -.bodywebsite .card-custom { - margin: 0; - background: inherit; - border: 0; - border-radius: 0; - box-shadow: none; -} -.bodywebsite .card-custom a { - display: block; -} -.bodywebsite .card-custom .card-heading { - padding: 0; - border-bottom: 0; - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.bodywebsite .card-custom .card-body { - padding: 0; - border: 0; -} -.bodywebsite * + .card-group-custom { - margin-top: 35px; -} -@media (min-width: 768px) { - .bodywebsite * + .card-group-custom { - margin-top: 50px; - } -} -.bodywebsite .card-light:first-child .card-title { - border-top: 1px solid #dedede; -} -.bodywebsite .card-light .card-title { - border-bottom: 1px solid #dedede; -} -.bodywebsite .card-light .card-title:nth-child(n + 2) { - margin-top: -1px; -} -.bodywebsite .card-light .card-title a { - position: relative; - padding: 24px 55px 22px 32px; - font: 500 18px/24px "Roboto", Helvetica, Arial, sans-serif; - color: #000; - transition: 1.5s all ease; -} -.bodywebsite .card-light .card-title a .card-arrow:after { - opacity: 0; - visibility: hidden; -} -.bodywebsite .card-light .card-title a.collapsed .card-arrow:after { - opacity: 1; - visibility: visible; -} -.bodywebsite .card-light .card-arrow { - position: absolute; - top: 50%; - transform: translateY(-50%); - right: 26px; - transition: .33s; - will-change: transform; -} -.bodywebsite .card-light .card-arrow:before, -.bodywebsite .card-light .card-arrow:after { - content: ''; - position: absolute; - top: 50%; - transform: translateY(-50%); - background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .card-light .card-arrow:before { - width: 14px; - height: 2px; - right: 0; -} -.bodywebsite .card-light .card-arrow:after { - width: 2px; - height: 14px; - right: 6px; - transition: .2s all ease; -} -.bodywebsite .card-light .card-collapse { - position: relative; - margin-top: -1px; - border-bottom: 1px solid #dedede; - color: #9f9f9f; - will-change: transform; -} -.bodywebsite .card-light .card-body { - padding: 25px 44px 25px 32px; -} -@media (max-width: 767px) { - .bodywebsite .card-light .card-title a, - .bodywebsite .card-light .card-body { - padding-left: 15px; - } -} -.bodywebsite .card-corporate .card-title a, -.bodywebsite .card-corporate .card-collapse { - background: #fff; - box-shadow: -1px 0px 10px 0px rgba(65, 65, 65, 0.12); -} -.bodywebsite .card-corporate .card-collapse.in { - box-shadow: -1px 0 5px 0 rgba(65, 65, 65, 0.12); -} -.bodywebsite .card-corporate .card-collapse.in:before { - content: ''; - position: absolute; - top: -1px; - height: 1px; - background: #ededed; - left: 0; - width: 100%; -} -.bodywebsite .card-corporate .card-title a { - position: relative; - z-index: 1; - padding: 24px 82px 22px 32px; - font: 500 18px/24px "Roboto", Helvetica, Arial, sans-serif; - color: #000; - transition: 1.3s all ease; - letter-spacing: -0.025em; - border-radius: 6px 6px 0 0; -} -.bodywebsite .card-corporate .card-title a .card-arrow:after { - opacity: 0; - visibility: hidden; -} -.bodywebsite .card-corporate .card-title a.collapsed { - border-radius: 6px; -} -.bodywebsite .card-corporate .card-title a.collapsed .card-arrow { - border-radius: 0 6px 6px 0; -} -.bodywebsite .card-corporate .card-title a.collapsed .card-arrow:after { - opacity: 1; - visibility: visible; -} -.bodywebsite .card-corporate .card-arrow { - position: absolute; - top: 0; - bottom: 0; - right: 0; - z-index: 2; - width: 70px; - background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - border-radius: 0 6px 0 0; - transition: 1.3s all ease; -} -.bodywebsite .card-corporate .card-arrow:before, -.bodywebsite .card-corporate .card-arrow:after { - content: ''; - position: absolute; - top: 50%; - z-index: 4; - transform: translateY(-50%); - background: #fff; -} -.bodywebsite .card-corporate .card-arrow:before { - width: 14px; - height: 2px; - right: 28px; -} -.bodywebsite .card-corporate .card-arrow:after { - width: 2px; - height: 14px; - right: 34px; -} -.bodywebsite .card-corporate .card-collapse { - position: relative; - z-index: 2; - color: #9f9f9f; - border-radius: 0 0 6px 6px; -} -.bodywebsite .card-corporate .card-body { - padding: 25px 44px 25px 32px; -} -@media (max-width: 767px) { - .bodywebsite .card-corporate .card-title a, - .bodywebsite .card-corporate .card-body { - padding-left: 25px; - } -} -.bodywebsite .card-lg { - position: relative; - padding: 50px 15px; -} -.bodywebsite .card-lg:before { - content: ''; - position: absolute; - top: -45px; - left: 50%; - width: 55px; - height: 55px; - margin-left: -10px; - background: #fff; - transform: translateX(-50%) rotate(-45deg); -} -@media (min-width: 768px) { - .bodywebsite .card-lg { - padding: 90px 35px 100px; - } -} -.bodywebsite table { - background-color: transparent; -} -.bodywebsite caption { - padding-top: 17px 25px 18px; - padding-bottom: 17px 25px 18px; - color: #dedede; - text-align: left; -} -.bodywebsite th { - text-align: left; -} -.bodywebsite .table { - width: 100%; - max-width: 100%; - margin-bottom: 0; - color: #00030a; -} -.bodywebsite .table > thead > tr > th, -.bodywebsite .table > thead > tr > td, -.bodywebsite .table > tbody > tr > th, -.bodywebsite .table > tbody > tr > td, -.bodywebsite .table > tfoot > tr > th, -.bodywebsite .table > tfoot > tr > td { - line-height: 1.71429; - vertical-align: top; - border-top: 0; -} -.bodywebsite .table > tbody > tr > th, -.bodywebsite .table > tbody > tr > td, -.bodywebsite .table > tfoot > tr > th, -.bodywebsite .table > tfoot > tr > td { - padding: 17px 25px 18px; - line-height: 1.71429; - vertical-align: top; - border-bottom: 1px solid #d9d9d9; -} -.bodywebsite .table > thead > tr > th { - font-family: "Playfair Display", Helvetica, Arial, sans-serif; - font-size: 16px; - font-weight: 700; - padding: 26px 25px; - vertical-align: bottom; - background: #f6f7fa; - border-bottom: 0; -} -@media (min-width: 576px) { - .bodywebsite .table > thead > tr > th { - padding: 34px 25px 29px; - } -} -.bodywebsite .table > tfoot > tr > td { - font-weight: 700; -} -.bodywebsite .table > caption + thead > tr:first-child > th, -.bodywebsite .table > caption + thead > tr:first-child > td, -.bodywebsite .table > colgroup + thead > tr:first-child > th, -.bodywebsite .table > colgroup + thead > tr:first-child > td, -.bodywebsite .table > thead:first-child > tr:first-child > th, -.bodywebsite .table > thead:first-child > tr:first-child > td { - border-top: 0; -} -.bodywebsite .table > tbody + tbody { - border-top: 0; -} -.bodywebsite .table .table { - background-color: #fff; -} -.bodywebsite .table-condensed > thead > tr > th, -.bodywebsite .table-condensed > thead > tr > td, -.bodywebsite .table-condensed > tbody > tr > th, -.bodywebsite .table-condensed > tbody > tr > td, -.bodywebsite .table-condensed > tfoot > tr > th, -.bodywebsite .table-condensed > tfoot > tr > td { - padding: 5px; -} -.bodywebsite .table-bordered { - border: 1px solid #d9d9d9; -} -.bodywebsite .table-bordered > thead > tr > th, -.bodywebsite .table-bordered > thead > tr > td, -.bodywebsite .table-bordered > tbody > tr > th, -.bodywebsite .table-bordered > tbody > tr > td, -.bodywebsite .table-bordered > tfoot > tr > th, -.bodywebsite .table-bordered > tfoot > tr > td { - border: 1px solid #d9d9d9; -} -.bodywebsite .table-bordered > thead > tr > th, -.bodywebsite .table-bordered > thead > tr > td { - border-bottom-width: 2px; -} -.bodywebsite .table-primary { - background: #fff; -} -.bodywebsite .table-primary thead > tr > th { - color: #fff; - background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .table-striped > tbody > tr:nth-of-type(even) { - background-color: #f6f7fa; -} -.bodywebsite .table-striped > tbody > tr:nth-of-type(odd) { - background-color: #fff; -} -.bodywebsite .table-striped > tbody > tr > td { - border-bottom: 0; -} -.bodywebsite .table-hover > tbody > tr:hover { - background-color: #f6f7fa; -} -.bodywebsite table col[class*="col-"] { - position: static; - float: none; - display: table-column; -} -.bodywebsite table td[class*="col-"], -.bodywebsite table th[class*="col-"] { - position: static; - float: none; - display: table-cell; -} -.bodywebsite .table-active, -.bodywebsite .table-active > th, -.bodywebsite .table-active > td { - background-color: #f6f7fa; -} -.bodywebsite .table-hover .table-active:hover { - background-color: #e6e8f1; -} -.bodywebsite .table-hover .table-active:hover > td, -.bodywebsite .table-hover .table-active:hover > th { - background-color: #e6e8f1; -} -.bodywebsite .table-success, -.bodywebsite .table-success > th, -.bodywebsite .table-success > td { - background-color: #dff0d8; -} -.bodywebsite .table-hover .table-success:hover { - background-color: #d0e9c6; -} -.bodywebsite .table-hover .table-success:hover > td, -.bodywebsite .table-hover .table-success:hover > th { - background-color: #d0e9c6; -} -.bodywebsite .table-info, -.bodywebsite .table-info > th, -.bodywebsite .table-info > td { - background-color: #d9edf7; -} -.bodywebsite .table-hover .table-info:hover { - background-color: #c4e3f3; -} -.bodywebsite .table-hover .table-info:hover > td, -.bodywebsite .table-hover .table-info:hover > th { - background-color: #c4e3f3; -} -.bodywebsite .table-warning, -.bodywebsite .table-warning > th, -.bodywebsite .table-warning > td { - background-color: #fcf8e3; -} -.bodywebsite .table-hover .table-warning:hover { - background-color: #faf2cc; -} -.bodywebsite .table-hover .table-warning:hover > td, -.bodywebsite .table-hover .table-warning:hover > th { - background-color: #faf2cc; -} -.bodywebsite .table-danger, -.bodywebsite .table-danger > th, -.bodywebsite .table-danger > td { - background-color: #fe4a21; -} -.bodywebsite .table-hover .table-danger:hover { - background-color: #fe3508; -} -.bodywebsite .table-hover .table-danger:hover > td, -.bodywebsite .table-hover .table-danger:hover > th { - background-color: #fe3508; -} -.bodywebsite .table-responsive { - overflow-x: auto; - min-height: 0.01%; -} -@media (max-width: 575px) { - .bodywebsite .table-responsive { - width: 100%; - margin-bottom: 1.28571; - overflow-y: hidden; - -ms-overflow-style: -ms-autohiding-scrollbar; - border: 1px solid #d9d9d9; - } - .bodywebsite .table-responsive > .table { - margin-bottom: 0; - } - .bodywebsite .table-responsive > .table > thead > tr > th, - .bodywebsite .table-responsive > .table > thead > tr > td, - .bodywebsite .table-responsive > .table > tbody > tr > th, - .bodywebsite .table-responsive > .table > tbody > tr > td, - .bodywebsite .table-responsive > .table > tfoot > tr > th, - .bodywebsite .table-responsive > .table > tfoot > tr > td { - white-space: nowrap; - } - .bodywebsite .table-responsive > .table-bordered { - border: 0; - } - .bodywebsite .table-responsive > .table-bordered > thead > tr > th:first-child, - .bodywebsite .table-responsive > .table-bordered > thead > tr > td:first-child, - .bodywebsite .table-responsive > .table-bordered > tbody > tr > th:first-child, - .bodywebsite .table-responsive > .table-bordered > tbody > tr > td:first-child, - .bodywebsite .table-responsive > .table-bordered > tfoot > tr > th:first-child, - .bodywebsite .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; - } - .bodywebsite .table-responsive > .table-bordered > thead > tr > th:last-child, - .bodywebsite .table-responsive > .table-bordered > thead > tr > td:last-child, - .bodywebsite .table-responsive > .table-bordered > tbody > tr > th:last-child, - .bodywebsite .table-responsive > .table-bordered > tbody > tr > td:last-child, - .bodywebsite .table-responsive > .table-bordered > tfoot > tr > th:last-child, - .bodywebsite .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; - } - .bodywebsite .table-responsive > .table-bordered > tbody > tr:last-child > th, - .bodywebsite .table-responsive > .table-bordered > tbody > tr:last-child > td, - .bodywebsite .table-responsive > .table-bordered > tfoot > tr:last-child > th, - .bodywebsite .table-responsive > .table-bordered > tfoot > tr:last-child > td { - border-bottom: 0; - } -} -.bodywebsite .jumbotron-custom { - font-weight: 900; - font-size: 35px; - line-height: 1.2; - letter-spacing: .01em; -} -.bodywebsite .jumbotron-custom > span { - font-size: 31px; - line-height: 1.2; -} -@media (min-width: 768px) { - .bodywebsite .jumbotron-custom { - font-size: 45px; - } - .bodywebsite .jumbotron-custom > span { - font-size: 41px; - } -} -@media (min-width: 992px) { - .bodywebsite .jumbotron-custom { - font-size: 55px; - } - .bodywebsite .jumbotron-custom > span { - font-size: 51px; - } -} -@media (min-width: 1200px) { - .bodywebsite .jumbotron-custom { - font-size: 65px; - } - .bodywebsite .jumbotron-custom > span { - font-size: 61px; - } -} -.bodywebsite [class^="thin-icon-"]:before, -.bodywebsite [class*=" thin-icon-"]:before, -.bodywebsite .thin-ico { - font-family: "Thin Regular"; - font-weight: 400; - font-style: normal; - font-size: inherit; - text-transform: none; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -.bodywebsite .thin-icon-volume-on:before { - content: '\e800'; -} -.bodywebsite .thin-icon-gift:before { - content: '\e801'; -} -.bodywebsite .thin-icon-cup:before { - content: '\e802'; -} -.bodywebsite .thin-icon-folder:before { - content: '\e803'; -} -.bodywebsite .thin-icon-dublicate:before { - content: '\e804'; -} -.bodywebsite .thin-icon-tag:before { - content: '\e805'; -} -.bodywebsite .thin-icon-chat:before { - content: '\e806'; -} -.bodywebsite .thin-icon-clock:before { - content: '\e807'; -} -.bodywebsite .thin-icon-microphone:before { - content: '\e808'; -} -.bodywebsite .thin-icon-map-marker:before { - content: '\e809'; -} -.bodywebsite .thin-icon-mobile:before { - content: '\e80a'; -} -.bodywebsite .thin-icon-cloud-charge:before { - content: '\e80b'; -} -.bodywebsite .thin-icon-resize:before { - content: '\e80c'; -} -.bodywebsite .thin-icon-cake:before { - content: '\e80d'; -} -.bodywebsite .thin-icon-case:before { - content: '\e80e'; -} -.bodywebsite .thin-icon-address:before { - content: '\e80f'; -} -.bodywebsite .thin-icon-phone-support:before { - content: '\e810'; -} -.bodywebsite .thin-icon-fullscreen:before { - content: '\e811'; -} -.bodywebsite .thin-icon-db:before { - content: '\e812'; -} -.bodywebsite .thin-icon-music:before { - content: '\e813'; -} -.bodywebsite .thin-icon-network:before { - content: '\e814'; -} -.bodywebsite .thin-icon-db-network:before { - content: '\e815'; -} -.bodywebsite .thin-icon-dropbox-upload:before { - content: '\e816'; -} -.bodywebsite .thin-icon-phone-call:before { - content: '\e817'; -} -.bodywebsite .thin-icon-briefcase-2:before { - content: '\e818'; -} -.bodywebsite .thin-icon-card:before { - content: '\e819'; -} -.bodywebsite .thin-icon-support:before { - content: '\e81a'; -} -.bodywebsite .thin-icon-pull:before { - content: '\e81b'; -} -.bodywebsite .thin-icon-desktop:before { - content: '\e81c'; -} -.bodywebsite .thin-icon-pass:before { - content: '\e81d'; -} -.bodywebsite .thin-icon-picture:before { - content: '\e81e'; -} -.bodywebsite .thin-icon-email:before { - content: '\e81f'; -} -.bodywebsite .thin-icon-push:before { - content: '\e820'; -} -.bodywebsite .thin-icon-house:before { - content: '\e821'; -} -.bodywebsite .thin-icon-download:before { - content: '\e822'; -} -.bodywebsite .thin-icon-storage:before { - content: '\e823'; -} -.bodywebsite .thin-icon-milk:before { - content: '\e824'; -} -.bodywebsite .thin-icon-external-right:before { - content: '\e825'; -} -.bodywebsite .thin-icon-email-open:before { - content: '\e826'; -} -.bodywebsite .thin-icon-planet:before { - content: '\e827'; -} -.bodywebsite .thin-icon-pointer:before { - content: '\e828'; -} -.bodywebsite .thin-icon-email-search:before { - content: '\e829'; -} -.bodywebsite .thin-icon-external-left:before { - content: '\e82a'; -} -.bodywebsite .thin-icon-shirt:before { - content: '\e82b'; -} -.bodywebsite .thin-icon-document-edit:before { - content: '\e82c'; -} -.bodywebsite .thin-icon-document-delete:before { - content: '\e82d'; -} -.bodywebsite .thin-icon-money:before { - content: '\e82e'; -} -.bodywebsite .thin-icon-eye:before { - content: '\e82f'; -} -.bodywebsite .thin-icon-settings:before { - content: '\e830'; -} -.bodywebsite .thin-icon-arrow-bottom-right:before { - content: '\e831'; -} -.bodywebsite .thin-icon-arrow-right:before { - content: '\e832'; -} -.bodywebsite .thin-icon-flag:before { - content: '\e833'; -} -.bodywebsite .thin-icon-star:before { - content: '\e834'; -} -.bodywebsite .thin-icon-calculator:before { - content: '\e835'; -} -.bodywebsite .thin-icon-safe:before { - content: '\e836'; -} -.bodywebsite .thin-icon-cart:before { - content: '\e837'; -} -.bodywebsite .thin-icon-bullhorn:before { - content: '\e838'; -} -.bodywebsite .thin-icon-anchor:before { - content: '\e839'; -} -.bodywebsite .thin-icon-globe:before { - content: '\e83a'; -} -.bodywebsite .thin-icon-statistics:before { - content: '\e83b'; -} -.bodywebsite .thin-icon-thumb-up:before { - content: '\e83c'; -} -.bodywebsite .thin-icon-headphones:before { - content: '\e83d'; -} -.bodywebsite .thin-icon-bell:before { - content: '\e83e'; -} -.bodywebsite .thin-icon-study:before { - content: '\e83f'; -} -.bodywebsite .thin-icon-cart-add:before { - content: '\e840'; -} -.bodywebsite .thin-icon-cart-delete:before { - content: '\e841'; -} -.bodywebsite .thin-icon-satelite:before { - content: '\e842'; -} -.bodywebsite .thin-icon-home:before { - content: '\e843'; -} -.bodywebsite .thin-icon-time:before { - content: '\e844'; -} -.bodywebsite .thin-icon-book:before { - content: '\e845'; -} -.bodywebsite .thin-icon-bookmark:before { - content: '\e846'; -} -.bodywebsite .thin-icon-key:before { - content: '\e847'; -} -.bodywebsite .thin-icon-timer:before { - content: '\e848'; -} -.bodywebsite .thin-icon-saturn:before { - content: '\e849'; -} -.bodywebsite .thin-icon-notes:before { - content: '\e84a'; -} -.bodywebsite .thin-icon-ambulance:before { - content: '\e84b'; -} -.bodywebsite .thin-icon-briefcase:before { - content: '\e84c'; -} -.bodywebsite .thin-icon-layers:before { - content: '\e84d'; -} -.bodywebsite .thin-icon-delivery:before { - content: '\e84e'; -} -.bodywebsite .thin-icon-tint:before { - content: '\e84f'; -} -.bodywebsite .thin-icon-trash:before { - content: '\e850'; -} -.bodywebsite .thin-icon-lightbulb:before { - content: '\e851'; -} -.bodywebsite .thin-icon-calendar:before { - content: '\e852'; -} -.bodywebsite .thin-icon-chart:before { - content: '\e853'; -} -.bodywebsite .thin-icon-documents:before { - content: '\e854'; -} -.bodywebsite .thin-icon-checklist:before { - content: '\e855'; -} -.bodywebsite .thin-icon-camera-web:before { - content: '\e856'; -} -.bodywebsite .thin-icon-camera:before { - content: '\e857'; -} -.bodywebsite .thin-icon-lock:before { - content: '\e858'; -} -.bodywebsite .thin-icon-umbrella:before { - content: '\e859'; -} -.bodywebsite .thin-icon-user:before { - content: '\e85a'; -} -.bodywebsite .thin-icon-love:before { - content: '\e85b'; -} -.bodywebsite .thin-icon-hanger:before { - content: '\e85c'; -} -.bodywebsite .thin-icon-car:before { - content: '\e85d'; -} -.bodywebsite .thin-icon-cloth:before { - content: '\e85e'; -} -.bodywebsite .thin-icon-box:before { - content: '\e85f'; -} -.bodywebsite .thin-icon-attachment:before { - content: '\e860'; -} -.bodywebsite .thin-icon-cd:before { - content: '\e861'; -} -.bodywebsite .thin-icon-love-broken:before { - content: '\e862'; -} -.bodywebsite .thin-icon-volume-off:before { - content: '\e863'; -} -.bodywebsite .slideOutUp { - -webkit-animation-name: slideOutUp; - animation-name: slideOutUp; -} -.bodywebsite .counter { - font: 900 45px/45px "Roboto", Helvetica, Arial, sans-serif; - margin-bottom: 0; - color: #fff; -} -.bodywebsite .counter-bold { - font-weight: 700; -} -.bodywebsite .counter-k:after { - content: 'k'; -} -.bodywebsite * + .counter-title { - margin-top: 0; -} -.bodywebsite .countdown-default { - color: #000; -} -.bodywebsite .countdown-default .countdown-section { - position: relative; - display: inline-block; - min-width: 90px; - padding: 0 10px; - text-align: center; -} -.bodywebsite .countdown-default .countdown-section > * { - display: block; -} -.bodywebsite .countdown-default .countdown-section:after { - position: absolute; - top: 35%; - transform: translateY(-35%); - border-radius: 20px; - background: #000; -} -.bodywebsite .countdown-default .countdown-section:nth-last-child(n + 3):after { - content: ''; - right: -2px; - width: 5px; - height: 5px; -} -@media (max-width: 767px) { - .bodywebsite .countdown-default .countdown-section:last-child { - display: none; - } -} -.bodywebsite .countdown-default .countdown-amount { - font-family: Helvetica, Arial, sans-serif; - font-size: 30px; - font-weight: 900; - line-height: 1; -} -.bodywebsite .countdown-default .countdown-period { - margin-top: 10px; - font-size: 12px; - text-transform: uppercase; - letter-spacing: -0.025em; - color: rgba(0, 0, 0, 0.4); -} -.bodywebsite .countdown-default.countdown-inverse .countdown-section:after { - background: #fff; -} -.bodywebsite .countdown-default.countdown-inverse .countdown-period { - color: rgba(255, 255, 255, 0.4); -} -@media (min-width: 768px) { - .bodywebsite .countdown-default .countdown-section { - min-width: 150px; - } - .bodywebsite .countdown-default .countdown-section:not(:last-child):after { - content: ''; - top: 50%; - right: -5px; - transform: translateY(-50%); - width: 10px; - height: 10px; - } - .bodywebsite .countdown-default .countdown-amount { - font-size: 50px; - } - .bodywebsite .countdown-default .countdown-period { - font-size: 14px; - } -} -@media (min-width: 992px) { - .bodywebsite .countdown-default .countdown-section { - min-width: 200px; - } - .bodywebsite .countdown-default .countdown-amount { - font-size: 72px; - } -} -.bodywebsite .countdown-inverse { - color: #fff; -} -.bodywebsite .owl-carousel .animated { - -webkit-animation-duration: 1000ms; - animation-duration: 1000ms; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; -} -.bodywebsite .owl-carousel .owl-animated-in { - z-index: 0; -} -.bodywebsite .owl-carousel .owl-animated-out { - z-index: 1; -} -.bodywebsite .owl-carousel .fadeOut { - -webkit-animation-name: fadeOut; - animation-name: fadeOut; -} -@-webkit-keyframes fadeOut { - 0% { - opacity: 1; - } - 100% { - opacity: 0; - } -} -@keyframes fadeOut { - 0% { - opacity: 1; - } - 100% { - opacity: 0; - } -} -.bodywebsite .owl-height { - -webkit-transition: height 500ms ease-in-out; - -moz-transition: height 500ms ease-in-out; - -ms-transition: height 500ms ease-in-out; - -o-transition: height 500ms ease-in-out; - transition: height 500ms ease-in-out; -} -.bodywebsite .owl-carousel { - display: none; - width: 100%; - -webkit-tap-highlight-color: transparent; - /* position relative and z-index fix webkit rendering fonts issue */ - position: relative; - z-index: 1; -} -.bodywebsite .owl-carousel .owl-stage { - position: relative; - -ms-touch-action: pan-Y; -} -.bodywebsite .owl-carousel .owl-stage:after { - content: "."; - display: block; - clear: both; - visibility: hidden; - line-height: 0; - height: 0; -} -.bodywebsite .owl-carousel .owl-stage-outer { - position: relative; - overflow: hidden; - /* fix for flashing background */ - -webkit-transform: translate3d(0px, 0px, 0px); -} -.bodywebsite .owl-carousel .owl-controls .owl-nav .owl-prev, -.bodywebsite .owl-carousel .owl-controls .owl-nav .owl-next, -.bodywebsite .owl-carousel .owl-controls .owl-dot { - cursor: pointer; - cursor: hand; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.bodywebsite .owl-carousel.owl-loaded { - display: block; -} -.bodywebsite .owl-carousel.owl-loading { - opacity: 0; - display: block; -} -.bodywebsite .owl-carousel.owl-hidden { - opacity: 0; -} -.bodywebsite .owl-carousel .owl-refresh .owl-item { - display: none; -} -.bodywebsite .owl-carousel .owl-item { - position: relative; - min-height: 1px; - float: left; - -webkit-tap-highlight-color: transparent; - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.bodywebsite .owl-carousel.owl-text-select-on .owl-item { - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.bodywebsite .owl-carousel .owl-grab { - cursor: move; - cursor: -webkit-grab; - cursor: grab; -} -.bodywebsite .owl-carousel.owl-rtl { - direction: rtl; -} -.bodywebsite .owl-carousel.owl-rtl .owl-item { - float: right; -} -.bodywebsite .no-js .owl-carousel { - display: block; -} -.bodywebsite .owl-carousel .owl-item .owl-lazy { - opacity: 0; - -webkit-transition: opacity 400ms ease; - -moz-transition: opacity 400ms ease; - -ms-transition: opacity 400ms ease; - -o-transition: opacity 400ms ease; - transition: opacity 400ms ease; -} -.bodywebsite .owl-carousel .owl-video-wrapper { - position: relative; - height: 100%; - background: #000; -} -.bodywebsite .owl-carousel .owl-video-play-icon { - position: absolute; - height: 80px; - width: 80px; - left: 50%; - top: 50%; - margin-left: -40px; - margin-top: -40px; - font: 400 40px/80px 'FontAwesome'; - cursor: pointer; - z-index: 1; - -webkit-transition: scale 100ms ease; - -moz-transition: scale 100ms ease; - -ms-transition: scale 100ms ease; - -o-transition: scale 100ms ease; - transition: scale 100ms ease; -} -.bodywebsite .owl-carousel .owl-video-play-icon:before { - content: '\f144'; -} -.bodywebsite .owl-carousel .owl-video-play-icon:hover { - -webkit-transform: scale(1.3); - transform: scale(1.3); -} -.bodywebsite .owl-carousel .owl-video-playing .owl-video-tn, -.bodywebsite .owl-carousel .owl-video-playing .owl-video-play-icon { - display: none; -} -.bodywebsite .owl-carousel .owl-video-tn { - opacity: 0; - height: 100%; - background-position: center center; - background-repeat: no-repeat; - -webkit-background-size: contain; - -moz-background-size: contain; - -o-background-size: contain; - background-size: contain; - -webkit-transition: opacity 400ms ease; - -moz-transition: opacity 400ms ease; - -ms-transition: opacity 400ms ease; - -o-transition: opacity 400ms ease; - transition: opacity 400ms ease; -} -.bodywebsite .owl-carousel .owl-video-frame { - position: relative; - z-index: 1; -} -.bodywebsite .owl-carousel .owl-stage { - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - -webkit-flex-wrap: nowrap; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -webkit-align-items: stretch; - -ms-flex-align: stretch; - align-items: stretch; -} -.bodywebsite .owl-carousel .owl-item { - float: none; - display: -webkit-inline-box; - display: -webkit-inline-flex; - display: -ms-inline-flexbox; - display: inline-flex; - -webkit-flex-grow: 1; - -ms-flex-positive: 1; - flex-grow: 1; - -webkit-flex-shrink: 0; - -ms-flex-negative: 0; - flex-shrink: 0; - -webkit-align-items: stretch; - -ms-flex-align: stretch; - align-items: stretch; -} -.bodywebsite .owl-carousel .item { - width: 100%; -} -.bodywebsite .owl-carousel-center .owl-item { - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; -} -.bodywebsite .owl-carousel-center .owl-stage { - -webkit-justify-content: space-around; - -ms-flex-pack: distribute; - justify-content: space-around; -} -.bodywebsite .owl-prev, -.bodywebsite .owl-next { - position: absolute; - top: 50%; - transform: translateY(-50%); - color: #000; - transition: .22s; -} -.bodywebsite .owl-prev.disabled, -.bodywebsite .owl-next.disabled { - opacity: 0; -} -.bodywebsite .owl-prev:hover, -.bodywebsite .owl-next:hover { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .owl-prev { - left: 0; -} -.bodywebsite .owl-prev:before { - content: '\e5c4'; -} -.bodywebsite .owl-next { - right: 0; -} -.bodywebsite .owl-next:before { - content: '\e5c8'; -} -.bodywebsite .owl-dots { - text-align: center; -} -.bodywebsite .owl-dot { - display: inline-block; -} -.bodywebsite .owl-numbering-default { - padding-bottom: 15px; -} -.bodywebsite .owl-numbering-default > * { - display: inline-block; -} -.bodywebsite .owl-numbering-default .numbering-current { - min-width: 16px; - font: 700 25px "Roboto", Helvetica, Arial, sans-serif; - color: #000; - transition: .33s all ease; -} -.bodywebsite .owl-numbering-default .numbering-separator { - position: relative; - display: inline-block; - margin: 0 10px; -} -.bodywebsite .owl-numbering-default .numbering-separator:after { - position: absolute; - top: -23px; - left: -12px; - content: ''; - width: 2px; - height: 51px; - transform-origin: 50% 75%; - transform: rotate(30deg); - background: rgba(0, 0, 0, 0.3); -} -.bodywebsite .owl-numbering-default .numbering-count { - position: relative; - top: 19px; - left: -7px; - font: 400 18px "Roboto", Helvetica, Arial, sans-serif; - color: rgba(0, 0, 0, 0.3); -} -.bodywebsite .owl-carousel-inverse .owl-next, -.bodywebsite .owl-carousel-inverse .owl-prev { - color: #fff; -} -.bodywebsite .owl-carousel-inverse .owl-next:hover, -.bodywebsite .owl-carousel-inverse .owl-prev:hover { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .owl-carousel-inverse .owl-numbering-default .numbering-current { - color: #fff; -} -.bodywebsite .owl-carousel-inverse .owl-numbering-default .numbering-separator:after { - background: rgba(255, 255, 255, 0.3); -} -.bodywebsite .owl-carousel-inverse .owl-numbering-default .numbering-count { - color: rgba(255, 255, 255, 0.3); -} -.bodywebsite .owl-carousel-dark .owl-next, -.bodywebsite .owl-carousel-dark .owl-prev { - color: #000; -} -.bodywebsite .owl-carousel-dark .owl-next:hover, -.bodywebsite .owl-carousel-dark .owl-prev:hover { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .owl-nav-position-numbering .owl-next, -.bodywebsite .owl-nav-position-numbering .owl-prev { - top: auto; - bottom: -53px; - transform: none; -} -.bodywebsite .owl-nav-position-numbering .owl-prev { - left: auto; - right: calc(92%); -} -.bodywebsite .owl-nav-position-numbering .owl-next { - right: auto; - left: calc(92%); -} -.bodywebsite .owl-nav-position-numbering + .owl-numbering { - margin-top: 15px; -} -.bodywebsite .owl-nav-bottom-left .owl-nav { - margin-top: 15px; -} -.bodywebsite .owl-nav-bottom-left .owl-next, -.bodywebsite .owl-nav-bottom-left .owl-prev { - display: inline-block; - position: static; - top: auto; - transform: none; -} -.bodywebsite .owl-nav-bottom-left .owl-prev { - left: auto; -} -.bodywebsite .owl-nav-bottom-left .owl-next { - right: auto; - margin-left: 10px; -} -.bodywebsite .owl-style-minimal .item { - width: 100%; -} -.bodywebsite .owl-style-minimal .item img { - width: 100%; -} -.bodywebsite .owl-style-minimal .owl-dots { - margin-top: 10px; - text-align: center; -} -.bodywebsite .owl-style-minimal .owl-dot { - width: 8px; - height: 8px; - border-radius: 10px; - background: #dedede; - transition: .33s all ease; -} -.bodywebsite .owl-style-minimal .owl-dot.active, -.bodywebsite .owl-style-minimal .owl-dot:hover { - background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .owl-style-minimal .owl-dot + .owl-dot { - margin-left: 8px; -} -.bodywebsite .owl-style-minimal-inverse .owl-dot { - background: #74787C; -} -@media (min-width: 992px) { - .bodywebsite .owl-spacing-1 { - padding-right: 60px; - padding-left: 60px; - } -} -@media (min-width: 1200px) { - .bodywebsite .owl-spacing-1 { - padding: 0; - } - .bodywebsite .owl-spacing-1 .owl-item { - padding-right: 41px; - padding-left: 41px; - } - .bodywebsite .owl-spacing-1 .owl-prev { - left: -6%; - } - .bodywebsite .owl-spacing-1 .owl-next { - right: -6%; - } -} -.bodywebsite .owl-nav-classic .owl-nav { - display: none; -} -@media (min-width: 992px) { - .bodywebsite .owl-nav-classic .owl-dots { - display: none !important; - } - .bodywebsite .owl-nav-classic .owl-nav { - display: block; - } - .bodywebsite .owl-nav-classic .owl-nav .owl-prev, - .bodywebsite .owl-nav-classic .owl-nav .owl-next { - top: 39%; - transform: translateY(-45%); - width: 45px; - height: 45px; - line-height: 45px; - color: #fff; - background: rgba(255, 255, 255, 0.2); - text-align: center; - font: 400 20px/45px 'fl-flat-icons-set-2'; - } - .bodywebsite .owl-nav-classic .owl-nav .owl-prev:hover, - .bodywebsite .owl-nav-classic .owl-nav .owl-next:hover { - color: #fff; - background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - } - .bodywebsite .owl-nav-classic .owl-nav .owl-prev { - padding-right: 3px; - } - .bodywebsite .owl-nav-classic .owl-nav .owl-prev:before { - position: relative; - display: inline-block; - content: '\e015'; - transform: scale(-1, 1); - } - .bodywebsite .owl-nav-classic .owl-nav .owl-next { - padding-left: 3px; - } - .bodywebsite .owl-nav-classic .owl-nav .owl-next:before { - content: '\e015'; - } -} -.bodywebsite .owl-nav-modern .owl-nav { - display: none; -} -@media (min-width: 1400px) { - .bodywebsite .owl-nav-modern .owl-dots { - display: none !important; - } - .bodywebsite .owl-nav-modern .owl-nav { - display: block; - } - .bodywebsite .owl-nav-modern .owl-nav .owl-prev, - .bodywebsite .owl-nav-modern .owl-nav .owl-next { - top: 50%; - width: 48px; - height: 48px; - background: url("medias/image/ref; ?>/chevron-left.svg") no-repeat top left; - background-size: 48px 48px; - transition: 180ms ease-in-out; - } - .bodywebsite .owl-nav-modern .owl-nav .owl-prev:before, - .bodywebsite .owl-nav-modern .owl-nav .owl-next:before { - content: ''; - } - .bodywebsite .owl-nav-modern .owl-nav .owl-prev:hover, - .bodywebsite .owl-nav-modern .owl-nav .owl-next:hover { - opacity: 0.5; - } - .bodywebsite .owl-nav-modern .owl-nav .owl-prev { - left: -58px; - } - .bodywebsite .owl-nav-modern .owl-nav .owl-next { - right: -50px; - } - .bodywebsite .owl-nav-modern .owl-nav .owl-next { - -webkit-transform: rotate(180deg); - transform: rotate(180deg); - } -} -@-webkit-keyframes rd-navbar-slide-down { - 0% { - transform: translateY(-100%); - } - 100% { - transform: translateY(0); - } -} -@keyframes rd-navbar-slide-down { - 0% { - transform: translateY(-100%); - } - 100% { - transform: translateY(0); - } -} -@-webkit-keyframes rd-navbar-slide-up { - 0% { - transform: translateY(0); - } - 100% { - transform: translateY(-100%); - } -} -@keyframes rd-navbar-slide-up { - 0% { - transform: translateY(0); - } - 100% { - transform: translateY(-100%); - } -} -.bodywebsite .rd-navbar-wrap, -.bodywebsite .rd-navbar-static .rd-navbar-megamenu, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-megamenu, -.bodywebsite .rd-navbar-static .rd-navbar-inner, -.bodywebsite .rd-navbar-fixed .rd-navbar-nav-wrap, -.bodywebsite .rd-navbar-fixed .rd-navbar-submenu, -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-group, -.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle, -.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle:before, -.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle:after, -.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-search .rd-search, -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-group, -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search { - transition: 0.3s all cubic-bezier(0.785, 0.135, 0.15, 0.86); -} -.bodywebsite .rd-navbar, -.bodywebsite .rd-navbar.rd-navbar--is-clone { - display: none; -} -.bodywebsite .rd-navbar-fixed, -.bodywebsite .rd-navbar-static, -.bodywebsite .rd-navbar-fullwidth, -.bodywebsite .rd-navbar-sidebar { - display: block; -} -.bodywebsite .rd-navbar--no-transition, -.bodywebsite .rd-navbar--no-transition * { - transition: none !important; -} -.bodywebsite .rd-navbar-wrap { - position: relative; - z-index: 10; -} -.bodywebsite .rd-navbar-wrap, -.bodywebsite .rd-navbar, -.bodywebsite .rd-navbar-brand, -.bodywebsite .rd-navbar-slogan, -.bodywebsite .rd-navbar-dropdown, -.bodywebsite .rd-navbar-megamenu, -.bodywebsite .rd-navbar-collapse-items, -.bodywebsite .brand-name, -.bodywebsite .rd-navbar-nav, -.bodywebsite .rd-navbar-panel, -.bodywebsite .rd-navbar-search-form-input, -.bodywebsite .rd-navbar-search-form-submit, -.bodywebsite .rd-navbar-search-toggle, -.bodywebsite .rd-navbar-live-search-results, -.bodywebsite .rd-navbar-search-form { - transition: 0.33s all ease-out; -} -.bodywebsite .rd-navbar-collapse-toggle { - display: inline-block; - position: relative; - width: 48px; - height: 48px; - line-height: 48px; - cursor: pointer; - color: #00030a; - display: none; -} -.bodywebsite .rd-navbar-collapse-toggle span { - top: 50%; - margin-top: -3px; -} -.bodywebsite .rd-navbar-collapse-toggle span, -.bodywebsite .rd-navbar-collapse-toggle span:before, -.bodywebsite .rd-navbar-collapse-toggle span:after { - position: absolute; - width: 6px; - height: 6px; - line-height: 6px; - text-align: center; - background: #00030a; - left: 50%; - margin-left: -3px; - border-radius: 50%; - transition: .3s all ease; -} -.bodywebsite .rd-navbar-collapse-toggle span:before, -.bodywebsite .rd-navbar-collapse-toggle span:after { - content: ''; -} -.bodywebsite .rd-navbar-collapse-toggle span:before { - bottom: 100%; - margin-bottom: 3px; -} -.bodywebsite .rd-navbar-collapse-toggle span:after { - top: 100%; - margin-top: 3px; -} -.bodywebsite .rd-navbar-collapse-toggle.active span { - transform: scale(0.7); -} -.bodywebsite .rd-navbar-collapse-toggle.active span:before { - transform: translateY(18px); -} -.bodywebsite .rd-navbar-collapse-toggle.active span:after { - transform: translateY(-18px); -} -.bodywebsite .rd-navbar--has-sidebar body { - padding-left: 270px; -} -.bodywebsite .rd-navbar--is-stuck { - border-bottom: 1px solid #e5e7e9; -} -.bodywebsite .rd-navbar.rd-navbar-fixed + .rd-navbar.rd-navbar--is-clone, -.bodywebsite .rd-navbar.rd-navbar-sidebar + .rd-navbar.rd-navbar--is-clone { - display: none; -} -.bodywebsite .rd-navbar { - display: none; - background: #fff; - box-shadow: none; -} -.bodywebsite .rd-navbar-toggle { - display: inline-block; - position: relative; - width: 48px; - height: 48px; - line-height: 48px; - cursor: pointer; - color: #000; - background-color: transparent; - border: none; - display: none; -} -.bodywebsite .rd-navbar-toggle span { - position: relative; - display: block; - margin: auto; - transition: .3s all ease; -} -.bodywebsite .rd-navbar-toggle span:after, -.bodywebsite .rd-navbar-toggle span:before { - content: ""; - position: absolute; - left: 0; - top: -8px; - transition: .3s all ease; -} -.bodywebsite .rd-navbar-toggle span:after { - top: 8px; -} -.bodywebsite .rd-navbar-toggle span:after, -.bodywebsite .rd-navbar-toggle span:before, -.bodywebsite .rd-navbar-toggle span { - width: 24px; - height: 4px; - background-color: #000; - backface-visibility: hidden; - border-radius: 2px; -} -.bodywebsite .rd-navbar-toggle span { - transform: rotate(180deg); -} -.bodywebsite .rd-navbar-toggle span:before, -.bodywebsite .rd-navbar-toggle span:after { - transform-origin: 1.71429px center; -} -.bodywebsite .rd-navbar-toggle.active span { - transform: rotate(360deg); -} -.bodywebsite .rd-navbar-toggle.active span:before, -.bodywebsite .rd-navbar-toggle.active span:after { - top: 0; - width: 15px; -} -.bodywebsite .rd-navbar-toggle.active span:before { - -webkit-transform: rotate3d(0, 0, 1, -40deg); - transform: rotate3d(0, 0, 1, -40deg); -} -.bodywebsite .rd-navbar-toggle.active span:after { - -webkit-transform: rotate3d(0, 0, 1, 40deg); - transform: rotate3d(0, 0, 1, 40deg); -} -.bodywebsite .rd-navbar-toggle:focus { - outline: none; -} -.bodywebsite .rd-navbar-brand { - transition: none !important; -} -.bodywebsite .rd-navbar-brand svg { - fill: #000; -} -.bodywebsite .rd-navbar-search .rd-navbar-search-toggle, -.bodywebsite .rd-navbar-search .rd-search-submit, -.bodywebsite .buttonwithnoborder { - background: none; - border: none; - display: inline-block; - padding: 0; - outline: none; - outline-offset: 0; - cursor: pointer; - -webkit-appearance: none; -} -.bodywebsite .rd-navbar-search .rd-navbar-search-toggle::-moz-focus-inner, -.bodywebsite .rd-navbar-search .rd-search-submit::-moz-focus-inner { - border: none; - padding: 0; -} -.bodywebsite .rd-navbar-search .form-input::-ms-clear { - display: none; -} -.bodywebsite .rd-navbar-search-toggle { - display: inline-block; - width: 36px; - height: 36px; - text-align: center; - font: 400 18px/36px "FontAwesome"; -} -.bodywebsite .rd-navbar-search-toggle:before { - content: '\f002'; - position: absolute; - left: 0; - top: 0; -} -.bodywebsite .rd-navbar-search-toggle:after { - display: none; -} -.bodywebsite .rd-navbar-aside { - pointer-events: none; -} -.bodywebsite .rd-navbar-aside > * { - pointer-events: auto; -} -.bodywebsite .rd-navbar-aside-toggle { - display: none; - pointer-events: auto; -} -.bodywebsite .rd-navbar-static .rd-navbar-search-form-input input, -.bodywebsite .rd-navbar-sidebar .rd-navbar-search-form-input input, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-search-form-input input { - width: 100%; - padding: 0 10px; - font-size: 16px; -} -.bodywebsite .rd-navbar-static:after, -.bodywebsite .rd-navbar-fullwidth:after { - content: ''; - background: #fff; -} -.bodywebsite .rd-navbar-static .rd-navbar-brand, -.bodywebsite .rd-navbar-static .rd-navbar-nav > li > a, -.bodywebsite .rd-navbar-static .rd-navbar-search-toggle, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-brand, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li > a, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-search-toggle { - position: relative; - z-index: 2; -} -.bodywebsite .rd-navbar-static .rd-navbar-inner, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-inner { - position: relative; - max-width: 1200px; - padding-left: 15px; - padding-right: 15px; - margin-left: auto; - margin-right: auto; -} -.bodywebsite .rd-navbar-static .rd-navbar-nav > li > a, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li > a { - position: relative; - padding: 5px 0; - font-size: 13px; - line-height: 1.2; - color: #00030a; - background: transparent; -} -.bodywebsite .rd-navbar-static .rd-navbar-nav > li > a .label, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li > a .label { - position: absolute; - left: 0; - margin: -18px 0 0 0; -} -@media (min-width: 1200px) { - .bodywebsite .rd-navbar-static .rd-navbar-nav > li > a, - .bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li > a { - font-size: 14px; - } -} -.bodywebsite .rd-navbar-static .rd-navbar-nav > li.active > a, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li.active > a { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - background: transparent; -} -.bodywebsite .rd-navbar-static .rd-navbar-nav > li.focus > a, -.bodywebsite .rd-navbar-static .rd-navbar-nav > li > a:hover, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li.focus > a, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li > a:hover { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - background: transparent; -} -.bodywebsite .rd-navbar-static .rd-navbar-nav .rd-navbar-submenu > .rd-navbar-dropdown, -.bodywebsite .rd-navbar-static .rd-navbar-nav .rd-navbar-submenu > .rd-navbar-megamenu, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav .rd-navbar-submenu > .rd-navbar-dropdown, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav .rd-navbar-submenu > .rd-navbar-megamenu { - opacity: 0; - visibility: hidden; - font-size: 14px; -} -.bodywebsite .rd-navbar-static .rd-navbar-nav .rd-navbar-submenu.focus, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav .rd-navbar-submenu.focus { - opacity: 1; - visibility: visible; -} -.bodywebsite .rd-navbar-static .rd-navbar-nav > .rd-navbar-submenu > .rd-navbar-dropdown, -.bodywebsite .rd-navbar-static .rd-navbar-nav > .rd-navbar-submenu > .rd-navbar-megamenu, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > .rd-navbar-submenu > .rd-navbar-dropdown, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > .rd-navbar-submenu > .rd-navbar-megamenu { - transform: translateY(30px); -} -.bodywebsite .rd-navbar-static .rd-navbar-nav > .rd-navbar-submenu.opened > .rd-navbar-dropdown, -.bodywebsite .rd-navbar-static .rd-navbar-nav > .rd-navbar-submenu.opened > .rd-navbar-megamenu, -.bodywebsite .rd-navbar-static .rd-navbar-nav > .rd-navbar-submenu.focus > .rd-navbar-dropdown, -.bodywebsite .rd-navbar-static .rd-navbar-nav > .rd-navbar-submenu.focus > .rd-navbar-megamenu, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > .rd-navbar-submenu.opened > .rd-navbar-dropdown, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > .rd-navbar-submenu.opened > .rd-navbar-megamenu, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > .rd-navbar-submenu.focus > .rd-navbar-dropdown, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > .rd-navbar-submenu.focus > .rd-navbar-megamenu { - transform: translateY(0); -} -.bodywebsite .rd-navbar-static .rd-navbar-nav > .rd-navbar-submenu .rd-navbar-submenu > .rd-navbar-dropdown, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > .rd-navbar-submenu .rd-navbar-submenu > .rd-navbar-dropdown { - transform: translateX(-20px); -} -.bodywebsite .rd-navbar-static .rd-navbar-nav > .rd-navbar-submenu .rd-navbar-submenu.focus > .rd-navbar-dropdown, -.bodywebsite .rd-navbar-static .rd-navbar-nav > .rd-navbar-submenu .rd-navbar-submenu.opened > .rd-navbar-dropdown, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > .rd-navbar-submenu .rd-navbar-submenu.focus > .rd-navbar-dropdown, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > .rd-navbar-submenu .rd-navbar-submenu.opened > .rd-navbar-dropdown { - transform: translateX(0); -} -.bodywebsite .rd-navbar-static .rd-navbar-nav > .rd-navbar-submenu .rd-navbar-submenu.focus > .rd-navbar-dropdown, -.bodywebsite .rd-navbar-static .rd-navbar-nav > .rd-navbar-submenu .rd-navbar-submenu.opened > .rd-navbar-dropdown, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > .rd-navbar-submenu .rd-navbar-submenu.focus > .rd-navbar-dropdown, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > .rd-navbar-submenu .rd-navbar-submenu.opened > .rd-navbar-dropdown { - display: block; -} -.bodywebsite .rd-navbar-static .rd-navbar-nav > li, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li { - display: inline-block; -} -.bodywebsite .rd-navbar-static .rd-navbar-nav li.rd-navbar--has-dropdown, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav li.rd-navbar--has-dropdown { - position: relative; -} -.bodywebsite .rd-navbar-static .rd-navbar-nav li.focus > .rd-navbar-dropdown, -.bodywebsite .rd-navbar-static .rd-navbar-nav li.focus > .rd-navbar-megamenu, -.bodywebsite .rd-navbar-static .rd-navbar-nav li.opened > .rd-navbar-dropdown, -.bodywebsite .rd-navbar-static .rd-navbar-nav li.opened > .rd-navbar-megamenu, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav li.focus > .rd-navbar-dropdown, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav li.focus > .rd-navbar-megamenu, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav li.opened > .rd-navbar-dropdown, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav li.opened > .rd-navbar-megamenu { - opacity: 1; - visibility: visible; - transform: translateY(0); -} -.bodywebsite .rd-navbar-static .rd-navbar-nav > li > .rd-navbar-dropdown, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li > .rd-navbar-dropdown { - position: absolute; - left: 0; - z-index: 5; - display: block; - margin-top: 27px; - text-align: left; - background: #fff; -} -.bodywebsite .rd-navbar-static .rd-navbar-list li, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-list li { - padding-left: 5px; - padding-right: 5px; -} -.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li > a, -.bodywebsite .rd-navbar-static .rd-navbar-list > li > a, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li > a, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-list > li > a { - position: relative; - display: block; - width: 100%; - padding-left: 0; - padding-right: 14px; - font-size: 14px; - line-height: 1.3; -} -.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li > a, -.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li > a:before, -.bodywebsite .rd-navbar-static .rd-navbar-list > li > a, -.bodywebsite .rd-navbar-static .rd-navbar-list > li > a:before, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li > a, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li > a:before, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-list > li > a, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-list > li > a:before { - transition: .33s all ease; -} -.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li > a:before, -.bodywebsite .rd-navbar-static .rd-navbar-list > li > a:before, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li > a:before, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-list > li > a:before { - position: absolute; - top: 0; - left: -6px; - content: '\f105'; - font-family: 'FontAwesome'; - font-size: 16px; - line-height: inherit; - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - opacity: 0; - visibility: hidden; -} -.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li > a:hover, -.bodywebsite .rd-navbar-static .rd-navbar-list > li > a:hover, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li > a:hover, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-list > li > a:hover { - padding-left: 14px; - padding-right: 0; -} -.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li > a:hover:before, -.bodywebsite .rd-navbar-static .rd-navbar-list > li > a:hover:before, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li > a:hover:before, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-list > li > a:hover:before { - left: 0; - opacity: 1; - visibility: visible; -} -.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li > a, -.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li > a:focus, -.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li > a:active, -.bodywebsite .rd-navbar-static .rd-navbar-list > li > a, -.bodywebsite .rd-navbar-static .rd-navbar-list > li > a:focus, -.bodywebsite .rd-navbar-static .rd-navbar-list > li > a:active, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li > a, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li > a:focus, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li > a:active, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-list > li > a, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-list > li > a:focus, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-list > li > a:active { - color: #9f9f9f; - background: transparent; -} -.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li > a:hover, -.bodywebsite .rd-navbar-static .rd-navbar-list > li > a:hover, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li > a:hover, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-list > li > a:hover { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - background: transparent; -} -.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li + li, -.bodywebsite .rd-navbar-static .rd-navbar-list > li + li, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li + li, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-list > li + li { - margin-top: 14px; -} -@media (min-width: 1200px) { - .bodywebsite .rd-navbar-static .rd-navbar-dropdown > li > a, - .bodywebsite .rd-navbar-static .rd-navbar-list > li > a, - .bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li > a, - .bodywebsite .rd-navbar-fullwidth .rd-navbar-list > li > a { - font-size: 16px; - } -} -@media (min-width: 1800px) { - .bodywebsite .rd-navbar-static .rd-navbar-dropdown > li + li, - .bodywebsite .rd-navbar-static .rd-navbar-list > li + li, - .bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li + li, - .bodywebsite .rd-navbar-fullwidth .rd-navbar-list > li + li { - margin-top: 17px; - } -} -.bodywebsite .rd-navbar-static .rd-navbar-dropdown, -.bodywebsite .rd-navbar-static .rd-navbar-megamenu, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-megamenu { - box-shadow: 0 0 13px 0 rgba(0, 0, 0, 0.13); - border-top: 2px solid maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .rd-navbar-static .rd-navbar-dropdown, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown { - width: 188px; - padding: 25px 25px 30px; - margin-left: -32px; - background: #fff; -} -@media (min-width: 1200px) { - .bodywebsite .rd-navbar-static .rd-navbar-dropdown, - .bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown { - width: 235px; - } -} -.bodywebsite .rd-navbar-static .rd-navbar-dropdown .rd-navbar-dropdown, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown .rd-navbar-dropdown { - position: absolute; - left: 100%; - margin-left: 91px; - top: -20px; -} -.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li > a, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li > a { - display: block; - width: 100%; -} -.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li > a, -.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li > a:focus, -.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li > a:active, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li > a, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li > a:focus, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li > a:active { - color: #9f9f9f; - background: transparent; -} -.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li > a:hover, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li > a:hover { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - background: transparent; -} -.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li.focus > a, -.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li.opened > a, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li.focus > a, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li.opened > a { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - background: transparent; -} -.bodywebsite .rd-navbar-static .rd-navbar-megamenu, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-megamenu { - position: absolute; - z-index: 4; - display: table; - table-layout: fixed; - width: calc(70%); - left: 15px; - max-width: 1200px; - margin-top: 27px; - text-align: left; - background: #fff; -} -.bodywebsite .rd-navbar-static .rd-navbar-megamenu > li, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-megamenu > li { - position: relative; - display: table-cell; - padding: 34px 20px 30px 35px; -} -.bodywebsite .rd-navbar-static .rd-navbar-megamenu > li + li, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-megamenu > li + li { - border-left: 1px solid #ededed; -} -.bodywebsite .rd-navbar-static .rd-navbar-megamenu * + .rd-megamenu-header, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-megamenu * + .rd-megamenu-header { - margin-top: 40px; -} -.bodywebsite .rd-navbar-static .rd-navbar-megamenu * + .rd-navbar-list, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-megamenu * + .rd-navbar-list { - margin-top: 20px; -} -@media (min-width: 1200px) { - .bodywebsite .rd-navbar-static .rd-navbar-megamenu, - .bodywebsite .rd-navbar-fullwidth .rd-navbar-megamenu { - width: 1140px; - } - .bodywebsite .rd-navbar-static .rd-navbar-megamenu > li, - .bodywebsite .rd-navbar-fullwidth .rd-navbar-megamenu > li { - padding: 44px 25px 50px 45px; - } -} -.bodywebsite .rd-navbar-static .rd-navbar-submenu-toggle, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-submenu-toggle { - display: none; - cursor: pointer; - z-index: 100; -} -.bodywebsite .rd-navbar-static .rd-navbar-submenu-toggle:hover, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-submenu-toggle:hover { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .rd-navbar-static .rd-navbar-nav > li > .rd-navbar-submenu-toggle, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li > .rd-navbar-submenu-toggle { - display: none; - -webkit-align-self: center; - -ms-flex-item-align: center; - align-self: center; - width: 24px; - text-align: center; -} -.bodywebsite .rd-navbar-static .rd-navbar-nav > li > .rd-navbar-submenu-toggle::after, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li > .rd-navbar-submenu-toggle::after { - content: '\f107'; - position: relative; - display: inline-block; - font: 400 16px "FontAwesome"; - text-align: center; - transition: 0.4s all ease; - z-index: 2; - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - will-change: transform; - -webkit-filter: blur(0); -} -.bodywebsite .rd-navbar-static .rd-navbar-nav > li li.focus > .rd-navbar-submenu-toggle::after, -.bodywebsite .rd-navbar-static .rd-navbar-nav > li li.opened > .rd-navbar-submenu-toggle::after, -.bodywebsite .rd-navbar-static .rd-navbar-nav > li li > a:hover + .rd-navbar-submenu-toggle::after, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li li.focus > .rd-navbar-submenu-toggle::after, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li li.opened > .rd-navbar-submenu-toggle::after, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li li > a:hover + .rd-navbar-submenu-toggle::after { - -webkit-transform: rotate(-90deg); - transform: rotate(-90deg); -} -.bodywebsite .rd-navbar-static .rd-navbar-nav > li.focus > .rd-navbar-submenu-toggle::after, -.bodywebsite .rd-navbar-static .rd-navbar-nav > li.opened > .rd-navbar-submenu-toggle::after, -.bodywebsite .rd-navbar-static .rd-navbar-nav > li > a:hover + .rd-navbar-submenu-toggle::after, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li.focus > .rd-navbar-submenu-toggle::after, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li.opened > .rd-navbar-submenu-toggle::after, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li > a:hover + .rd-navbar-submenu-toggle::after { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .rd-navbar-static .rd-navbar-dropdown .rd-navbar-submenu-toggle, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown .rd-navbar-submenu-toggle { - display: none; - vertical-align: middle; -} -.bodywebsite .rd-navbar-static .rd-navbar-dropdown .rd-navbar-submenu-toggle::after, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown .rd-navbar-submenu-toggle::after { - top: 1px; -} -.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li.focus > .rd-navbar-submenu-toggle::after, -.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li.opened > .rd-navbar-submenu-toggle::after, -.bodywebsite .rd-navbar-static .rd-navbar-dropdown > li > a:hover + .rd-navbar-submenu-toggle::after, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li.focus > .rd-navbar-submenu-toggle::after, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li.opened > .rd-navbar-submenu-toggle::after, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-dropdown > li > a:hover + .rd-navbar-submenu-toggle::after { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .rd-navbar-static.rd-navbar--is-clone, -.bodywebsite .rd-navbar-fullwidth.rd-navbar--is-clone { - display: none; -} -.bodywebsite .rd-navbar-static.rd-navbar--is-clone.rd-navbar--is-stuck, -.bodywebsite .rd-navbar-fullwidth.rd-navbar--is-clone.rd-navbar--is-stuck { - display: block; -} -.bodywebsite .rd-navbar-static.rd-navbar--is-stuck, -.bodywebsite .rd-navbar-static.rd-navbar--is-clone, -.bodywebsite .rd-navbar-fullwidth.rd-navbar--is-stuck, -.bodywebsite .rd-navbar-fullwidth.rd-navbar--is-clone { - position: fixed; - left: 0; - top: 0; - right: 0; - z-index: 999; - background: #fff; -} -.bodywebsite .rd-navbar-static.rd-navbar--is-stuck .rd-navbar-megamenu, -.bodywebsite .rd-navbar-static.rd-navbar--is-clone .rd-navbar-megamenu, -.bodywebsite .rd-navbar-fullwidth.rd-navbar--is-stuck .rd-navbar-megamenu, -.bodywebsite .rd-navbar-fullwidth.rd-navbar--is-clone .rd-navbar-megamenu { - margin-top: 18px; -} -.bodywebsite .rd-navbar-static .rd-navbar-megamenu, -.bodywebsite .rd-navbar-fullwidth .rd-navbar-megamenu { - position: absolute; - transform: translateY(30px); - text-align: left; - visibility: hidden; - opacity: 0; -} -.bodywebsite .rd-navbar-static .rd-navbar--has-dropdown, -.bodywebsite .rd-navbar-fullwidth .rd-navbar--has-dropdown { - position: relative; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-collapse-toggle, -.bodywebsite .rd-navbar-sidebar .rd-navbar-collapse-toggle { - display: inline-block; - z-index: 9999; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-dropdown, -.bodywebsite .rd-navbar-sidebar .rd-navbar-dropdown { - display: block; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-collapse-items, -.bodywebsite .rd-navbar-sidebar .rd-navbar-collapse-items { - position: absolute; - width: 260px; - padding: 25px 15px; - box-shadow: none; - color: #00030a; - background: #fff; - font-size: 16px; - line-height: 34px; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-collapse-items li > *, -.bodywebsite .rd-navbar-sidebar .rd-navbar-collapse-items li > * { - vertical-align: middle; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-collapse-items li + li, -.bodywebsite .rd-navbar-sidebar .rd-navbar-collapse-items li + li { - margin-top: 10px; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-collapse-items .icon, -.bodywebsite .rd-navbar-fixed .rd-navbar-collapse-items a, -.bodywebsite .rd-navbar-sidebar .rd-navbar-collapse-items .icon, -.bodywebsite .rd-navbar-sidebar .rd-navbar-collapse-items a { - display: inline-block; - font-size: 16px; - line-height: 30px; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-collapse-items .icon, -.bodywebsite .rd-navbar-fixed .rd-navbar-collapse-items a[class*="fa"]:before, -.bodywebsite .rd-navbar-sidebar .rd-navbar-collapse-items .icon, -.bodywebsite .rd-navbar-sidebar .rd-navbar-collapse-items a[class*="fa"]:before { - display: inline-block; - width: 30px; - height: 30px; - padding-right: 5px; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-nav, -.bodywebsite .rd-navbar-sidebar { - width: 270px; - left: 0; - top: 0; - font-size: 16px; - line-height: 34px; - color: #00030a; - background: #fff; - z-index: 998; -} -.bodywebsite .rd-navbar-static-smooth .rd-navbar { - position: fixed; - top: 0; - left: 0; - right: 0; - z-index: 9999; -} -.bodywebsite .rd-navbar-static { - display: block; -} -.bodywebsite .rd-navbar-static .rd-navbar-nav > li { - display: inline-block; -} -.bodywebsite .rd-navbar-static .rd-navbar-nav > li + li { - margin-left: 10px; -} -.bodywebsite .rd-navbar-static.rd-navbar-default .rd-navbar-search, -.bodywebsite .rd-navbar-static.rd-navbar-corporate-dark .rd-navbar-search { - position: static; - z-index: 2; -} -.bodywebsite .rd-navbar-static.rd-navbar-default .rd-navbar-search .rd-search, -.bodywebsite .rd-navbar-static.rd-navbar-corporate-dark .rd-navbar-search .rd-search { - position: absolute; - top: -1px; - right: 4px; - bottom: 0; - left: 0; - z-index: 5; - opacity: 0; - visibility: hidden; -} -.bodywebsite .rd-navbar-static.rd-navbar-default .rd-navbar-search .rd-search-submit, -.bodywebsite .rd-navbar-static.rd-navbar-corporate-dark .rd-navbar-search .rd-search-submit { - width: 39px; - height: 39px; - line-height: 38px; -} -.bodywebsite .rd-navbar-static.rd-navbar-default .rd-navbar-search .rd-search-results-live, -.bodywebsite .rd-navbar-static.rd-navbar-corporate-dark .rd-navbar-search .rd-search-results-live { - padding: 0; - border: 0; - background: #fff; -} -.bodywebsite .rd-navbar-static.rd-navbar-default .rd-navbar-search .rd-search-results-live > *, -.bodywebsite .rd-navbar-static.rd-navbar-corporate-dark .rd-navbar-search .rd-search-results-live > * { - display: none; - padding: 16px; - border: 1px solid #e5e7e9; - border-top: 0; - border-radius: 0 0 3px 3px; -} -.bodywebsite .rd-navbar-static.rd-navbar-default .rd-navbar-search .form-label, -.bodywebsite .rd-navbar-static.rd-navbar-corporate-dark .rd-navbar-search .form-label { - border: 0; -} -.bodywebsite .rd-navbar-static.rd-navbar-default .rd-navbar-search.active .rd-search, -.bodywebsite .rd-navbar-static.rd-navbar-corporate-dark .rd-navbar-search.active .rd-search { - opacity: 1; - visibility: visible; - transition: .22s; -} -.bodywebsite .rd-navbar-static.rd-navbar-default .rd-navbar-search.active .rd-search-results-live > *, -.bodywebsite .rd-navbar-static.rd-navbar-corporate-dark .rd-navbar-search.active .rd-search-results-live > * { - display: block; -} -.bodywebsite .rd-navbar-static.rd-navbar-default .rd-navbar-search-wrap.active .rd-navbar-nav-inner, -.bodywebsite .rd-navbar-static.rd-navbar-corporate-dark .rd-navbar-search-wrap.active .rd-navbar-nav-inner { - position: relative; -} -.bodywebsite .rd-navbar-static.rd-navbar-default .rd-navbar-search.active + .rd-navbar-nav, -.bodywebsite .rd-navbar-static.rd-navbar-corporate-dark .rd-navbar-search.active + .rd-navbar-nav { - opacity: 0; - visibility: hidden; - pointer-events: none; -} -.bodywebsite .rd-navbar-static.rd-navbar--is-clone { - display: block; - transform: translateY(-105%); - transition: .33s all ease; -} -.bodywebsite .rd-navbar-static.rd-navbar--is-clone.rd-navbar--is-stuck { - transform: translateY(0); -} -.bodywebsite .rd-navbar-static.rd-navbar--is-clone .rd-navbar-inner, -.bodywebsite .rd-navbar-static.rd-navbar--is-stuck .rd-navbar-inner { - padding: 13px 30px; -} -.bodywebsite .rd-navbar-static.rd-navbar--is-clone .rd-navbar-nav-wrap, -.bodywebsite .rd-navbar-static.rd-navbar--is-stuck .rd-navbar-nav-wrap { - margin-top: 0; -} -.bodywebsite .rd-navbar-fullwidth { - display: block; - text-align: center; -} -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav { - width: 100%; -} -.bodywebsite .rd-navbar-fullwidth .rd-navbar-nav > li + li { - margin-left: 20px; -} -.bodywebsite .rd-navbar-fullwidth.rd-navbar--is-stuck .rd-navbar-panel { - display: none; -} -.bodywebsite .rd-navbar-fixed { - display: block; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-brand { - position: fixed; - top: 10px; - left: 64px; - z-index: 17; - display: block; - overflow: hidden; - text-align: left; - white-space: nowrap; - text-overflow: ellipsis; - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - -webkit-flex-wrap: nowrap; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - -webkit-justify-content: flex-start; - -ms-flex-pack: start; - justify-content: flex-start; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-brand .brand-slogan { - display: none; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-panel { - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - position: fixed; - left: 0; - top: 0; - right: 0; - padding: 4px; - height: 56px; - color: #9f9f9f; - z-index: 999; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-panel:before { - content: ''; - position: absolute; - left: 0; - top: 0; - bottom: 0; - right: 0; - box-shadow: none; - border-bottom: 1px solid #e5e7e9; - background: #fff; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-toggle { - display: inline-block; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-nav-wrap { - position: fixed; - top: -56px; - left: 0; - bottom: -56px; - z-index: 998; - width: 270px; - padding: 112px 0 56px; - color: #fff; - background: #fff; - border-right: 1px solid #e5e7e9; - transform: translateX(-105%); - pointer-events: none; - overflow: hidden; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-nav-wrap.active { - transform: translateX(0); -} -.bodywebsite .rd-navbar-fixed .rd-navbar-nav-inner { - position: relative; - z-index: 100000; - height: 100%; - padding: 10px 0 20px; - pointer-events: auto; - -webkit-overflow-scrolling: touch; - overflow-x: hidden; - overflow-y: auto; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-nav-inner::-webkit-scrollbar { - width: 4px; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-nav-inner::-webkit-scrollbar-thumb { - background: white; - border: none; - border-radius: 0; - opacity: .2; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-nav-inner::-webkit-scrollbar-track { - background: #fff; - border: none; - border-radius: 0; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-nav { - display: block; - font-size: 16px; - line-height: 26px; - text-align: left; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-nav li > a { - display: block; - font-size: 16px; - padding: 14px 56px 14px 16px; - color: #464a4d; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-nav li:hover > a, -.bodywebsite .rd-navbar-fixed .rd-navbar-nav li:hover > a:hover, -.bodywebsite .rd-navbar-fixed .rd-navbar-nav li.focus > a, -.bodywebsite .rd-navbar-fixed .rd-navbar-nav li.focus > a:hover, -.bodywebsite .rd-navbar-fixed .rd-navbar-nav li.active > a, -.bodywebsite .rd-navbar-fixed .rd-navbar-nav li.active > a:hover, -.bodywebsite .rd-navbar-fixed .rd-navbar-nav li.opened > a, -.bodywebsite .rd-navbar-fixed .rd-navbar-nav li.opened > a:hover { - color: #fff; - background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-nav li:hover > .rd-navbar-submenu-toggle::after, -.bodywebsite .rd-navbar-fixed .rd-navbar-nav li.focus > .rd-navbar-submenu-toggle::after, -.bodywebsite .rd-navbar-fixed .rd-navbar-nav li.active > .rd-navbar-submenu-toggle::after, -.bodywebsite .rd-navbar-fixed .rd-navbar-nav li.opened > .rd-navbar-submenu-toggle::after { - color: #fff; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-nav > li + li { - margin-top: 4px; -} -.bodywebsite .rd-navbar-fixed .label-custom { - position: relative; - top: -1px; - display: inline-block; - margin: 0 0 0 8px; - font-size: 60%; - line-height: 1; - padding: 6px .5em 5px; - vertical-align: middle; -} -.bodywebsite .iphone .rd-navbar-fixed .label-custom, -.bodywebsite .ipad .rd-navbar-fixed .label-custom, -.bodywebsite .mac .rd-navbar-fixed .label-custom { - padding: 6px .5em 4px; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-dropdown > li > a, -.bodywebsite .rd-navbar-fixed .rd-navbar-list > li > a { - font-family: "Roboto", Helvetica, Arial, sans-serif; - font-size: 12px; - line-height: 1.2; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-megamenu .rd-megamenu-header { - padding: 0 15px; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-megamenu > li { - padding-top: 15px; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-megamenu * + .rd-megamenu-header { - margin-top: 15px; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-megamenu * + .rd-navbar-list { - margin-top: 10px; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-dropdown, -.bodywebsite .rd-navbar-fixed .rd-navbar-megamenu { - display: none; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-submenu { - position: relative; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-submenu li > a { - font-size: 14px; - padding-left: 30px; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-submenu .rd-navbar-dropdown li li > a, -.bodywebsite .rd-navbar-fixed .rd-navbar-submenu .rd-navbar-megamenu ul li li > a { - padding-left: 48px; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-submenu.opened > .rd-navbar-dropdown, -.bodywebsite .rd-navbar-fixed .rd-navbar-submenu.opened > .rd-navbar-megamenu { - display: block; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-search, -.bodywebsite .rd-navbar-fixed .rd-navbar-btn-wrap { - display: block; - padding: 16px 5px; -} -.bodywebsite .rd-navbar-fixed .rd-search .rd-search-results-live { - display: none; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-btn-wrap { - padding: 16px 10px; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-btn-wrap .btn { - width: 100%; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-nav li .rd-navbar-dropdown, -.bodywebsite .rd-navbar-fixed .rd-navbar-nav li .rd-navbar-megamenu { - transition: opacity 0.3s, height 0.4s ease; - opacity: 0; - height: 0; - overflow: hidden; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-nav li.opened > .rd-navbar-dropdown, -.bodywebsite .rd-navbar-fixed .rd-navbar-nav li.opened > .rd-navbar-megamenu { - padding: 3px 0; - opacity: 1; - height: auto; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-nav li.opened > .rd-navbar-submenu-toggle { - color: #fff; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-nav li.opened > .rd-navbar-submenu-toggle::after { - transform: rotate(180deg); - margin-top: -24px; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-submenu-toggle::after { - content: '\f107'; - position: absolute; - top: 24px; - right: 0; - margin-top: -18px; - width: 65px; - height: 44px; - font: 400 15px "FontAwesome"; - line-height: 42px; - text-align: center; - transition: 0.4s all ease; - z-index: 2; - cursor: pointer; - color: #000; - will-change: transform; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-collapse, -.bodywebsite .rd-navbar-fixed .rd-navbar-search-toggle { - position: fixed; - top: 4px; - height: 48px; - z-index: 1000; - background-color: transparent; - border: none; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-collapse:focus, -.bodywebsite .rd-navbar-fixed .rd-navbar-search-toggle:focus { - outline: none; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-aside { - top: 0; - right: 0; - width: 100%; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-aside, -.bodywebsite .rd-navbar-fixed .rd-navbar-aside .rd-navbar-aside-toggle { - position: fixed; - z-index: 1000; - display: block; - height: 48px; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-aside.active .rd-navbar-aside-content { - visibility: visible; - opacity: 1; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-aside-toggle { - top: 4px; - right: 4px; - display: inline-block; - position: relative; - width: 48px; - height: 48px; - line-height: 48px; - cursor: pointer; - color: #000; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-aside-toggle span { - top: 50%; - margin-top: -3px; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-aside-toggle span, -.bodywebsite .rd-navbar-fixed .rd-navbar-aside-toggle span:before, -.bodywebsite .rd-navbar-fixed .rd-navbar-aside-toggle span:after { - position: absolute; - width: 6px; - height: 6px; - line-height: 6px; - text-align: center; - background: #000; - left: 50%; - margin-left: -3px; - border-radius: 50%; - transition: .3s all ease; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-aside-toggle span:before, -.bodywebsite .rd-navbar-fixed .rd-navbar-aside-toggle span:after { - content: ''; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-aside-toggle span:before { - bottom: 100%; - margin-bottom: 3px; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-aside-toggle span:after { - top: 100%; - margin-top: 3px; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-aside-toggle.active span { - transform: scale(0.7); -} -.bodywebsite .rd-navbar-fixed .rd-navbar-aside-toggle.active span:before { - transform: translateY(18px); -} -.bodywebsite .rd-navbar-fixed .rd-navbar-aside-toggle.active span:after { - transform: translateY(-18px); -} -.bodywebsite .rd-navbar-fixed .rd-navbar-aside-content { - position: absolute; - top: calc(107%); - right: 0; - width: calc(102%); - padding: 20px 35px; - margin: 0 -1px; - pointer-events: auto; - opacity: 0; - visibility: hidden; - transition: 0.23s all ease-out; -} -@media (min-width: 768px) { - .bodywebsite .rd-navbar-fixed .rd-navbar-aside-content { - width: auto; - } -} -.bodywebsite .rd-navbar-fixed.rd-navbar--is-clone { - display: none; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-fixed--visible { - display: block; -} -.bodywebsite .rd-navbar-fixed .rd-navbar-fixed--hidden { - display: none; -} -.bodywebsite html.rd-navbar-fixed-linked .page { - padding-top: 56px; -} -.bodywebsite html.rd-navbar-sidebar-linked body { - padding-left: 270px; -} -.bodywebsite .rd-navbar-sidebar { - position: fixed; - display: block; -} -.bodywebsite .rd-navbar-sidebar .rd-navbar-nav li:hover > a, -.bodywebsite .rd-navbar-sidebar .rd-navbar-nav li:hover > a:hover, -.bodywebsite .rd-navbar-sidebar .rd-navbar-nav li.focus > a, -.bodywebsite .rd-navbar-sidebar .rd-navbar-nav li.focus > a:hover { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - background: transparent; -} -.bodywebsite .rd-navbar-sidebar .rd-navbar-nav li:hover > .rd-navbar-submenu-toggle, -.bodywebsite .rd-navbar-sidebar .rd-navbar-nav li.focus > .rd-navbar-submenu-toggle { - color: #fff; -} -.bodywebsite .rd-navbar-sidebar .rd-navbar-nav li:hover > .rd-navbar-submenu-toggle:hover, -.bodywebsite .rd-navbar-sidebar .rd-navbar-nav li.focus > .rd-navbar-submenu-toggle:hover { - cursor: pointer; - color: #fff; -} -.bodywebsite .rd-navbar-sidebar .rd-navbar-nav li .rd-navbar-dropdown, -.bodywebsite .rd-navbar-sidebar .rd-navbar-nav li .rd-navbar-megamenu { - transition: opacity 0.3s, height 0.4s ease; - opacity: 0; - height: 0; - overflow: hidden; -} -.bodywebsite .rd-navbar-sidebar .rd-navbar-nav li.opened > .rd-navbar-dropdown, -.bodywebsite .rd-navbar-sidebar .rd-navbar-nav li.opened > .rd-navbar-megamenu { - opacity: 1; - height: auto; -} -.bodywebsite .rd-navbar-sidebar .rd-navbar-nav li.opened > a { - background: transparent; - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .rd-navbar-sidebar .rd-navbar-nav li.opened > .rd-navbar-submenu-toggle { - color: #fff; -} -.bodywebsite .rd-navbar-sidebar .rd-navbar-nav li.opened > .rd-navbar-submenu-toggle::after { - -webkit-transform: rotate(180deg); - transform: rotate(180deg); -} -.bodywebsite .rd-navbar-sidebar .rd-navbar-submenu-toggle::after { - content: '\f078'; - position: absolute; - top: 22px; - right: 0; - margin-top: -22px; - width: 65px; - height: 44px; - font: 400 14px "FontAwesome"; - line-height: 42px; - text-align: center; - transition: 0.4s all ease; - z-index: 2; -} -.bodywebsite .rd-navbar-sidebar .rd-navbar-brand { - text-align: center; -} -.bodywebsite .rd-navbar-sidebar .rd-navbar-collapse-items { - top: 0; - left: 0; - padding-top: 45px; - transform: scale(0.7); - transform-origin: 0% 0%; - opacity: 0; - visibility: hidden; -} -.bodywebsite .rd-navbar-sidebar .rd-navbar-collapse { - position: absolute; - top: 4px; - left: 4px; - display: inline-block; - z-index: 1; -} -.bodywebsite .rd-navbar-sidebar .rd-navbar-collapse.active .rd-navbar-collapse-items { - opacity: 1; - visibility: visible; - transform: scale(1); -} -.bodywebsite .rd-navbar-default .rd-navbar-nav > li > a { - font-family: "Roboto", Helvetica, Arial, sans-serif; - font-weight: 700; - line-height: 1.2; - text-transform: uppercase; - color: #00030a; -} -.bodywebsite .rd-navbar-default .rd-navbar-search .form-input, -.bodywebsite .rd-navbar-default .rd-navbar-search .form-label { - font-size: 16px; - line-height: 1.3; - color: #9b9b9b; -} -.bodywebsite .rd-navbar-default .rd-navbar-search .form-label { - top: 18px; - left: 22px; -} -.bodywebsite .rd-navbar-default .rd-navbar-search .form-input { - padding: 7px 45px 10px 22px; - height: auto; - min-height: 20px; - border: 1px solid #e5e7e9; - border-radius: 3px; -} -.bodywebsite .rd-navbar-default .rd-navbar-search .rd-navbar-search-toggle, -.bodywebsite .rd-navbar-default .rd-navbar-search .rd-search-submit { - font-size: 25px; -} -.bodywebsite .rd-navbar-default .rd-navbar-search .rd-navbar-search-toggle, -.bodywebsite .rd-navbar-default .rd-navbar-search .rd-navbar-search-toggle:active, -.bodywebsite .rd-navbar-default .rd-navbar-search .rd-navbar-search-toggle:focus, -.bodywebsite .rd-navbar-default .rd-navbar-search .rd-search-submit, -.bodywebsite .rd-navbar-default .rd-navbar-search .rd-search-submit:active, -.bodywebsite .rd-navbar-default .rd-navbar-search .rd-search-submit:focus { - color: #00030a; -} -.bodywebsite .rd-navbar-default .rd-navbar-search .rd-navbar-search-toggle:hover, -.bodywebsite .rd-navbar-default .rd-navbar-search .rd-search-submit:hover { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .rd-navbar-default .rd-navbar-search .rd-navbar-search-toggle, -.bodywebsite .rd-navbar-default .rd-navbar-search .rd-navbar-search-toggle:before, -.bodywebsite .rd-navbar-default .rd-navbar-search .rd-search-submit, -.bodywebsite .rd-navbar-default .rd-navbar-search .rd-search-submit:before { - font-family: 'Material Icons'; -} -.bodywebsite .rd-navbar-default .rd-navbar-search .rd-navbar-search-toggle { - position: relative; -} -.bodywebsite .rd-navbar-default .rd-navbar-search .rd-navbar-search-toggle:after { - content: '\e5cd'; -} -.bodywebsite .rd-navbar-default.rd-navbar-fixed .rd-navbar-shop { - position: fixed; - top: 15px; - right: 15px; - z-index: 1001; -} -.bodywebsite .rd-navbar-default.rd-navbar-fixed .rd-navbar-search .rd-navbar-search-toggle { - display: none; -} -.bodywebsite .rd-navbar-default.rd-navbar-static .rd-navbar-inner, -.bodywebsite .rd-navbar-default.rd-navbar-static .rd-navbar-group { - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - -webkit-flex-wrap: nowrap; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; -} -.bodywebsite .rd-navbar-default.rd-navbar-static .rd-navbar-inner { - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; - padding: 44px 15px 42px; - font-size: 0; - line-height: 0; -} -.bodywebsite .rd-navbar-default.rd-navbar-static .rd-navbar-panel { - min-width: 100px; -} -.bodywebsite .rd-navbar-default.rd-navbar-static .rd-navbar-group { - -webkit-justify-content: flex-end; - -ms-flex-pack: end; - justify-content: flex-end; -} -.bodywebsite .rd-navbar-default.rd-navbar-static .rd-navbar-nav-inner { - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-direction: row-reverse; - -ms-flex-direction: row-reverse; - flex-direction: row-reverse; - -webkit-flex-wrap: nowrap; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - -webkit-justify-content: flex-start; - -ms-flex-pack: start; - justify-content: flex-start; - margin-right: 12px; -} -.bodywebsite .rd-navbar-default.rd-navbar-static .rd-navbar-nav { - z-index: 0; - margin-right: 40px; - transition: .25s; -} -.bodywebsite .rd-navbar-default.rd-navbar-static .rd-navbar-nav > li + li { - margin-left: 32px; -} -@media (min-width: 1200px) { - .bodywebsite .rd-navbar-default.rd-navbar-static .rd-navbar-nav { - margin-right: 77px; - } - .bodywebsite .rd-navbar-default.rd-navbar-static .rd-navbar-nav > li + li { - margin-left: 48px; - } -} -.bodywebsite .rd-navbar-default.rd-navbar-static .rd-navbar-toggle .rd-navbar-nav > li .rd-navbar-toggle { - display: none; -} -.bodywebsite .rd-navbar-default.rd-navbar-static .rd-navbar-nav > li > .rd-navbar-dropdown { - margin-top: 54px; -} -.bodywebsite .rd-navbar-default.rd-navbar-static.rd-navbar--is-clone .rd-navbar-inner, -.bodywebsite .rd-navbar-default.rd-navbar-static.rd-navbar--is-stuck .rd-navbar-inner { - padding: 18px 15px; -} -.bodywebsite .rd-navbar-default.rd-navbar-static.rd-navbar--is-clone .rd-navbar-nav > li > .rd-navbar-dropdown, -.bodywebsite .rd-navbar-default.rd-navbar-static.rd-navbar--is-stuck .rd-navbar-nav > li > .rd-navbar-dropdown { - margin-top: 49px; -} -.bodywebsite .rd-navbar-corporate-dark .rd-navbar-nav > li > a { - font-weight: 700; - font-size: 14px; - letter-spacing: .05em; - text-transform: uppercase; -} -.bodywebsite .rd-navbar-corporate-dark .rd-navbar-search .form-input, -.bodywebsite .rd-navbar-corporate-dark .rd-navbar-search .form-label { - font-size: 16px; - line-height: 1.3; - color: #9b9b9b; -} -.bodywebsite .rd-navbar-corporate-dark .rd-navbar-search .form-label { - top: 18px; - left: 22px; -} -.bodywebsite .rd-navbar-corporate-dark .rd-navbar-search .form-input { - padding: 7px 45px 7px 22px; - height: auto; - min-height: 20px; - border: 1px solid #e5e7e9; - border-radius: 3px; -} -.bodywebsite .rd-navbar-corporate-dark .rd-navbar-search .rd-navbar-search-toggle, -.bodywebsite .rd-navbar-corporate-dark .rd-navbar-search .rd-search-submit { - text-align: center; - color: #000; -} -.bodywebsite .rd-navbar-corporate-dark .rd-navbar-search .rd-navbar-search-toggle:before, -.bodywebsite .rd-navbar-corporate-dark .rd-navbar-search .rd-search-submit:before { - position: static; - display: inline-block; - font-family: 'fl-bigmug-line'; - font-size: 20px; -} -.bodywebsite .rd-navbar-corporate-dark .rd-navbar-search .rd-navbar-search-toggle:hover, -.bodywebsite .rd-navbar-corporate-dark .rd-navbar-search .rd-search-submit:hover { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .rd-navbar-corporate-dark .rd-navbar-search .rd-navbar-search-toggle:after { - display: none; -} -.bodywebsite .rd-navbar-corporate-dark .rd-navbar-aside { - width: 100%; - font-size: 14px; - line-height: 1.71429; -} -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-fixed .rd-navbar-aside-content { - border-bottom: 1px solid #000; - border-left: 1px solid #000; - background: #111; -} -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-fixed .rd-navbar-aside .list-units > li + li { - margin-top: 10px; -} -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-fixed .rd-navbar-aside * + .rd-navbar-aside-group { - margin-top: 14px; -} -@media (min-width: 576px) { - .bodywebsite .rd-navbar-corporate-dark.rd-navbar-fixed .rd-navbar-aside-content { - width: auto; - } -} -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-group { - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; -} -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-inner { - padding: 0; - font-size: 0; - line-height: 0; -} -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-panel { - min-width: 100px; -} -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-aside { - position: relative; - z-index: 2; - background: #3a3c3e; -} -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-aside:after { - content: ''; - position: absolute; - top: 0; - bottom: 0; - left: 50%; - transform: translateX(-50%); - background: inherit; - width: 102vw; - z-index: -1; -} -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-aside .rd-navbar-aside-content, -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-aside .rd-navbar-aside-group { - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; -} -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-aside .rd-navbar-aside-content { - padding: 12px 15px; - margin-bottom: -5px; - transform: translateY(-5px); - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; -} -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-aside .rd-navbar-aside-group { - -webkit-flex-shrink: 0; - -ms-flex-negative: 0; - flex-shrink: 0; -} -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-aside .rd-navbar-aside-group:first-child { - margin-top: 7px; - -webkit-flex-grow: 8; - -ms-flex-positive: 8; - flex-grow: 8; - -webkit-justify-content: flex-start; - -ms-flex-pack: start; - justify-content: flex-start; - margin-right: 20px; -} -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-aside .rd-navbar-aside-group:last-child { - margin-top: 5px; - -webkit-justify-content: flex-end; - -ms-flex-pack: end; - justify-content: flex-end; - -webkit-flex-grow: 1; - -ms-flex-positive: 1; - flex-grow: 1; -} -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-aside .list-units li { - display: inline-block; - margin-top: 0; -} -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-aside .list-units li:not(:last-child) { - margin-right: 25px; -} -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-group { - /* padding: 35px 15px; */ - padding-top: 18px; - padding-bottom: 18px; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; -} -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-nav-inner { - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-direction: row-reverse; - -ms-flex-direction: row-reverse; - flex-direction: row-reverse; - -webkit-flex-wrap: nowrap; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - -webkit-justify-content: flex-start; - -ms-flex-pack: start; - justify-content: flex-start; -} -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-nav { - margin-right: 23px; -} -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-nav > li { - padding-left: 5px; - padding-right: 5px; -} -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-nav > li > a { - font-size: 13px; -} -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-nav > li.rd-navbar-submenu { - margin-right: -18px; -} -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-nav > li > .rd-navbar-submenu-toggle { - display: inline-block; -} -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-nav > li + li { - margin-left: 32px; -} -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-nav .rd-navbar-dropdown > li { - padding-left: 5px; - padding-right: 5px; -} -@media (min-width: 1200px) { - .bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-nav > li > a { - font-size: 14px; - } - .bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-nav > li + li { - margin-left: 29px; - } - .bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-aside .list-units li:not(:last-child) { - margin-right: 50px; - } -} -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-search { - position: static; - z-index: 2; -} -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-search .rd-search { - position: absolute; - top: -2px; - right: -2px; - bottom: 0; - left: 0; - z-index: 5; - opacity: 0; - visibility: hidden; -} -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-search .rd-search-submit { - width: 39px; - height: 39px; - line-height: 38px; -} -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-search-wrap.active .rd-navbar-nav-wrap { - position: relative; -} -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-search.active + .rd-navbar-nav { - opacity: 0; - visibility: hidden; - pointer-events: none; -} -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static .rd-navbar-toggle .rd-navbar-nav > li .rd-navbar-toggle { - display: none; -} -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static.rd-navbar--is-clone .rd-navbar-aside, -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static.rd-navbar--is-stuck .rd-navbar-aside { - display: none; -} -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static.rd-navbar--is-clone .rd-navbar-group, -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static.rd-navbar--is-stuck .rd-navbar-group { - padding-top: 18px; - padding-bottom: 18px; -} -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static.rd-navbar--is-clone .rd-navbar-nav > li > .rd-navbar-dropdown, -.bodywebsite .rd-navbar-corporate-dark.rd-navbar-static.rd-navbar--is-stuck .rd-navbar-nav > li > .rd-navbar-dropdown { - margin-top: 18px; -} -.bodywebsite .rd-navbar-corporate-light .rd-navbar-nav > li > a { - font: 400 16px "Roboto", Helvetica, Arial, sans-serif; - letter-spacing: .025em; -} -.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .form-input, -.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .form-label { - font-size: 16px; - line-height: 1.3; - color: #9b9b9b; -} -.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .form-label { - top: 18px; - left: 22px; -} -.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .form-input { - padding: 7px 22px 10px; - height: auto; - min-height: 20px; - border: 1px solid #e5e7e9; - border-radius: 3px; -} -.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle, -.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-search-submit { - text-align: center; -} -.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle:before, -.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-search-submit:before { - font-family: 'fl-bigmug-line'; - position: static; - display: inline-block; -} -.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle:before, -.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle:after { - font-size: 20px; -} -.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle:before { - font-family: 'fl-bigmug-line'; - color: #000; -} -.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle:after { - font-family: 'Material Icons'; -} -.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle:hover:before { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle, -.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle:before, -.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle:after { - width: 36px; - height: 36px; - text-align: center; -} -.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle:before, -.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle:after { - display: block; - position: absolute; - left: 0; - top: 0; -} -.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle:before { - content: ""; - transform: scale(1) rotate(0deg); -} -.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle:after { - content: ""; - opacity: 0; - transform: scale(0) rotate(-90deg); -} -.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle.active:before { - opacity: 0; - transform: scale(0) rotate(90deg); -} -.bodywebsite .rd-navbar-corporate-light .rd-navbar-search .rd-navbar-search-toggle.active:after { - opacity: 1; - transform: scale(1) rotate(0deg); -} -.bodywebsite .rd-navbar-corporate-light .rd-navbar-aside { - width: 100%; - font-size: 14px; - line-height: 1.71429; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-search { - padding: 0; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-search .rd-search { - opacity: 0; - visibility: hidden; - position: fixed; - width: 100%; - padding: 8px 10px; - transform: translateY(-80%); - background: #fff; - border: 1px solid #e5e7e9; - border-top: 0; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-search.active .rd-search { - opacity: 1; - visibility: visible; - transform: translateY(0); -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-search .form-input { - padding: 7px 46px 10px 22px; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-search .rd-navbar-search-toggle, -.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-search .rd-search-submit { - font-size: 20px; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-search .rd-navbar-search-toggle, -.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-search .rd-navbar-search-toggle:active, -.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-search .rd-navbar-search-toggle:focus, -.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-search .rd-search-submit, -.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-search .rd-search-submit:active, -.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-search .rd-search-submit:focus { - color: #000; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-search .rd-navbar-search-toggle:hover, -.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-search .rd-search-submit:hover { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-search .rd-navbar-search-toggle { - position: fixed; - right: 56px; - top: 10px; - z-index: 1000; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-search .rd-search-submit { - right: 10px; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-aside-content { - border: 1px solid #e5e7e9; - background: #fff; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-aside .list-units > li + li { - margin-top: 10px; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-aside * + .rd-navbar-aside-group { - margin-top: 14px; -} -@media (min-width: 576px) { - .bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-aside-content { - width: auto; - } -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-fixed .rd-navbar-btn-wrap { - padding: 16px 5px; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-group { - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-inner { - padding: 0; - font-size: 0; - line-height: 0; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-panel { - min-width: 100px; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-aside { - position: relative; - z-index: 100; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-aside-wrap, -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-aside .rd-navbar-aside-content, -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-aside .rd-navbar-aside-group { - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-aside-wrap { - position: relative; - z-index: 1001; - padding: 6px 20px 6px 10px; - -webkit-flex-wrap: nowrap; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-aside-wrap:after { - content: ''; - position: absolute; - top: 0; - bottom: 0; - left: 50%; - transform: translateX(-50%); - border-bottom: 1px solid #e5e7e9; - width: 101vw; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-aside-wrap > * + * { - margin-left: 10px; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-aside .rd-navbar-aside-content { - margin-bottom: -5px; - transform: translateY(-5px); - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-aside .rd-navbar-aside-group { - -webkit-flex-shrink: 0; - -ms-flex-negative: 0; - flex-shrink: 0; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-aside .rd-navbar-aside-group:first-child { - margin-top: 7px; - -webkit-flex-grow: 8; - -ms-flex-positive: 8; - flex-grow: 8; - -webkit-justify-content: flex-start; - -ms-flex-pack: start; - justify-content: flex-start; - margin-right: 20px; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-aside .rd-navbar-aside-group:last-child { - margin-top: 5px; - -webkit-justify-content: flex-end; - -ms-flex-pack: end; - justify-content: flex-end; - -webkit-flex-grow: 1; - -ms-flex-positive: 1; - flex-grow: 1; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-aside .list-units li { - display: inline-block; - margin-top: 0; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-aside .list-units li:not(:last-child) { - margin-right: 30px; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-group { - padding: 35px 15px; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-nav-inner { - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-direction: row-reverse; - -ms-flex-direction: row-reverse; - flex-direction: row-reverse; - -webkit-flex-wrap: nowrap; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - -webkit-justify-content: flex-start; - -ms-flex-pack: start; - justify-content: flex-start; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-nav { - margin-right: 40px; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-nav > li > a { - font-size: 15px; - padding: 7px 0; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-nav > li.rd-navbar-submenu { - margin-right: -24px; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-nav > li > .rd-navbar-submenu-toggle { - position: relative; - top: 2px; - display: inline-block; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-nav > li + li { - margin-left: 37px; -} -@media (min-width: 1200px) { - .bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-nav > li > a { - font-size: 16px; - } - .bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-nav > li + li { - margin-left: 48px; - } -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-search { - position: relative; - z-index: 1500; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-search .form-label { - -webkit-flex-grow: 1; - -ms-flex-positive: 1; - flex-grow: 1; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-search .form-input, -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-search .form-label { - color: #fff; - font-size: 30px; - font-weight: 700; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-search .form-label { - top: 24px; - left: 0; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-search .form-input { - padding: 10px 50px 9px 0; - background-color: transparent; - border: 0; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-search .btn { - -webkit-flex-shrink: 0; - -ms-flex-negative: 0; - flex-shrink: 0; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: -1000; - opacity: 0; - visibility: hidden; - background: rgba(0, 0, 0, 0.96); -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-inner { - width: 540px; - margin-top: 75px; - margin-left: auto; - margin-right: auto; - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - -webkit-flex-wrap: nowrap; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - border-bottom: 1px solid #fff; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-submit { - position: relative; - left: 0; - top: 0; - width: 39px; - height: 39px; - font-size: 25px; - line-height: 39px; - transform: none; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-submit, -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-submit:active, -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-submit:focus { - color: #fff; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-submit:hover { - color: #ababab; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live { - position: relative; - display: block; - top: auto; - right: auto; - bottom: auto; - left: auto; - margin-top: 60px; - margin-left: auto; - margin-right: auto; - width: 800px; - font-size: 20px; - background-color: transparent; - opacity: 1; - visibility: visible; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live > * { - display: block; - padding: 0; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .active .search_list li { - top: 0; - opacity: 1; - visibility: visible; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search-quick-result { - display: none; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list { - margin: 0; - background-color: transparent; - text-align: left; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li { - position: relative; - top: 30px; - display: inline-block; - width: 48%; - padding: 0 15px; - text-align: left; - transition: 0.5s all ease-in-out; - opacity: 0; - visibility: hidden; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list .search_all { - top: 0; - margin-top: 40px; - display: inline-block; - width: 100%; - text-align: right; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li:nth-child(0) { - transition-delay: 0s; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li:nth-child(1) { - transition-delay: 0.15s; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li:nth-child(2) { - transition-delay: 0.3s; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li:nth-child(3) { - transition-delay: 0.45s; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li:nth-child(4) { - transition-delay: 0.6s; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li:nth-child(5) { - transition-delay: 0.75s; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li:nth-child(6) { - transition-delay: 0.9s; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li:nth-child(7) { - transition-delay: 1.05s; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li:nth-child(8) { - transition-delay: 1.2s; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li:nth-child(9) { - transition-delay: 1.35s; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li:nth-child(10) { - transition-delay: 1.5s; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li.search_all:nth-child(0) { - transition-delay: 0s; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li.search_all:nth-child(1) { - transition-delay: 0.2s; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li.search_all:nth-child(2) { - transition-delay: 0.4s; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li.search_all:nth-child(3) { - transition-delay: 0.6s; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li.search_all:nth-child(4) { - transition-delay: 0.8s; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li.search_all:nth-child(5) { - transition-delay: 1s; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li.search_all:nth-child(6) { - transition-delay: 1.2s; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li.search_all:nth-child(7) { - transition-delay: 1.4s; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li.search_all:nth-child(8) { - transition-delay: 1.6s; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li.search_all:nth-child(9) { - transition-delay: 1.8s; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_list li.search_all:nth-child(10) { - transition-delay: 2s; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .result-item:only-child { - top: 0; - width: 100%; - text-align: center; - transition-delay: 0s; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .result-item:nth-child(n + 3) { - margin-top: 50px; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_title { - font: 700 30px/26px Helvetica, Arial, sans-serif; - font-style: italic; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_title a, -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_title a:active, -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_title a:focus { - color: #fff; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_title a:hover { - color: #ababab; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_title + p { - margin-top: 16px; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_error { - line-height: 1.35; - text-align: center; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_submit { - display: inline-block; - padding: 10px 35px; - border: 2px solid; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_submit, -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_submit:active, -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_submit.active, -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_submit:active:focus, -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_submit.active:focus, -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_submit:focus:active, -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_submit:focus { - color: #fff; - background-color: transparent; - border-color: #fff; -} -.bodywebsite .open > .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_submit.dropdown-toggle, -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_submit:hover { - color: #414141; - background-color: #fff; - border-color: #fff; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_submit.disabled, -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_submit[disabled], -.bodywebsite fieldset[disabled] .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_submit { - pointer-events: none; - opacity: .5; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search-results-live .search_submit .badge { - color: transparent; - background-color: #fff; -} -@media (min-width: 1600px) and (min-height: 767px) { - .bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search .rd-search-inner { - margin-top: 10%; - } -} -@media (max-height: 767px) { - .bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search .rd-search-results-live .result-item:nth-child(5), - .bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search .rd-search-results-live .result-item:nth-child(6) { - display: none; - } - .bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-search .rd-search-results-live .search_list > li.search_all { - transition-delay: 0.8s; - } -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-search.active .rd-search { - display: block; - z-index: 10000; - margin: 0; - opacity: 1; - visibility: visible; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-search.active .rd-navbar-search-toggle { - z-index: 10002; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-search.active .rd-navbar-search-toggle:after { - color: #fff; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-search.active .rd-navbar-search-toggle:hover:after { - color: #ababab; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static .rd-navbar-toggle .rd-navbar-nav > li .rd-navbar-toggle { - display: none; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static.rd-navbar--is-clone .rd-navbar-aside-wrap, -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static.rd-navbar--is-stuck .rd-navbar-aside-wrap { - position: absolute; - top: -60px; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static.rd-navbar--is-clone .rd-navbar-group, -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static.rd-navbar--is-stuck .rd-navbar-group { - padding-top: 17px; - padding-bottom: 17px; -} -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static.rd-navbar--is-clone .rd-navbar-nav > li > .rd-navbar-dropdown, -.bodywebsite .rd-navbar-corporate-light.rd-navbar-static.rd-navbar--is-stuck .rd-navbar-nav > li > .rd-navbar-dropdown { - margin-top: 50px; -} -html .bodywebsite.boxed.rd-navbar--has-sidebar body { - padding-left: 300px; - padding-right: 30px; -} -html .bodywebsite.boxed .rd-navbar--is-clone { - max-width: 1920px; - margin-left: auto; - margin-right: auto; -} -.bodywebsite .rd-parallax-inner { - position: relative; - overflow: hidden; - -webkit-transform: translate3d(0px, 0px, 0px); - transform: translate3d(0px, 0px, 0px); - z-index: 1; -} -.bodywebsite .rd-parallax-layer[data-type="media"] { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - height: 100%; - pointer-events: none; -} -.bodywebsite .rd-parallax-layer[data-type="media"] iframe { - width: 100%; - height: 100%; -} -.bodywebsite .rd-parallax-layer[data-url] { - -webkit-background-size: cover; - background-size: cover; - background-position: center center; -} -.bodywebsite .rd-parallax[class*="rd-parallax-overlay"] { - background-color: #000; - color: #fff; -} -.bodywebsite .rd-parallax[class*="rd-parallax-overlay"] .rd-parallax-layer[data-type="media"] { - opacity: 0.2; -} -.bodywebsite .rd-parallax[class*="rd-parallax-overlay"] .rd-parallax-layer[data-type="media"] + * { - position: relative; -} -.bodywebsite .rd-parallax.rd-parallax-overlay-2 .rd-parallax-layer[data-type="media"] { - opacity: 0.8; -} -.bodywebsite .google-map-markers { - display: none; -} -.bodywebsite .google-map-container { - width: 100%; -} -.bodywebsite .google-map { - height: 250px; - color: #333; -} -.bodywebsite .google-map img { - max-width: none !important; -} -@media (min-width: 576px) { - .bodywebsite .google-map { - height: 250px; - } -} -@media (min-width: 768px) { - .bodywebsite .google-map { - height: 400px; - } -} -@media (min-width: 1200px) { - .bodywebsite .google-map { - height: 450px; - } -} -@media (min-width: 1800px) { - .bodywebsite .google-map { - height: 532px; - } -} -.bodywebsite .rd-search { - position: relative; -} -.bodywebsite .rd-search .form-wrap { - display: block; - margin: 0; - font-size: 0; -} -.bodywebsite .rd-search label * { - margin-top: 0; -} -.bodywebsite .rd-search .rd-search-submit { - top: 16px; - right: -4px; - background-color: transparent; - border: none; - transform: translateY(-50%); -} -.bodywebsite .rd-search .text-mobile { - display: block; -} -.bodywebsite .rd-search .text-default { - display: none; -} -@media (min-width: 768px) { - .bodywebsite .rd-search .text-mobile { - display: none; - } - .bodywebsite .rd-search .text-default { - display: block; - } -} -.bodywebsite .rd-search-submit { - background: none; - border: none; - padding: 0; - outline: none; - outline-offset: 0; - -webkit-appearance: none; - display: inline-block; - position: relative; - width: 48px; - height: 48px; - line-height: 48px; - cursor: pointer; - color: #00030a; - text-align: center; - font-size: 22px; - position: absolute; - right: 0; - transition: color .33s; -} -.bodywebsite .rd-search-submit::-moz-focus-inner { - border: none; - padding: 0; -} -.bodywebsite .rd-search-submit:before { - font-weight: 400; - font-family: "FontAwesome"; -} -.bodywebsite .rd-search-submit.active { - transform: scale(0.7); -} -.bodywebsite .rd-search-submit:hover { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .rd-search-minimal { - position: relative; - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - -webkit-flex-wrap: nowrap; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -webkit-align-items: stretch; - -ms-flex-align: stretch; - align-items: stretch; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; - padding-left: 40px; - border-bottom: 1px solid #dedede; -} -.bodywebsite .rd-search-minimal:before { - content: '\e8b6'; - position: absolute; - top: 50%; - transform: translateY(-50%); - left: 10px; - font: 400 21px 'Material Icons'; - color: #000; -} -.bodywebsite .rd-search-minimal .form-wrap { - -webkit-flex-grow: 1; - -ms-flex-positive: 1; - flex-grow: 1; -} -.bodywebsite .rd-search-minimal .form-label, -.bodywebsite .rd-search-minimal .form-input { - font: 400 16px/24px "Roboto", Helvetica, Arial, sans-serif; - color: rgba(0, 0, 0, 0.2); - letter-spacing: -0.025em; -} -.bodywebsite .rd-search-minimal .form-label { - top: 29px; -} -.bodywebsite .rd-search-minimal .form-input { - padding: 17px 20px; -} -.bodywebsite .rd-search-minimal button[type='submit'] { - padding: 0 20px; - -webkit-flex-shrink: 0; - -ms-flex-negative: 0; - flex-shrink: 0; -} -@media (min-width: 768px) { - .bodywebsite .rd-search-minimal .form-label, - .bodywebsite .rd-search-minimal .form-input { - font-size: 19px; - } -} -.bodywebsite .rd-search-classic { - overflow: hidden; - border: 1px solid #dedede; - border-radius: 0; -} -.bodywebsite .rd-search-classic .form-input { - min-height: 50px; - padding: 13px 50px 15px 19px; - border: 0; -} -.bodywebsite .rd-search-classic .rd-search-submit { - position: absolute; - right: 0; - top: 0; - bottom: 0; - width: 40px; - line-height: 0; - height: auto; - transform: none; - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; - text-align: left; -} -.bodywebsite .rd-search-classic .rd-search-submit:before { - font: 400 25px 'Material Icons'; -} -.bodywebsite .search_error { - max-width: 100%; - overflow: hidden; - text-overflow: ellipsis; -} -.bodywebsite .rd-search-results-live { - position: absolute; - left: 0; - right: 0; - top: 100%; - z-index: 998; - margin: -3px 0 0; - font-size: 14px; - line-height: 34px; - text-align: left; - color: #9f9f9f; - opacity: 0; - visibility: hidden; -} -.bodywebsite .rd-search-results-live > * { - padding: 16px; - border: 0px solid #dedede; - border-top: 0; -} -.bodywebsite .rd-search-results-live .search-quick-result { - font: 700 14px/24px "Roboto", Helvetica, Arial, sans-serif; - color: #000; - letter-spacing: .06em; - text-transform: uppercase; -} -.bodywebsite .rd-search-results-live .search_list { - margin-top: 10px; - font-size: 16px; - line-height: 30px; -} -.bodywebsite .rd-search-results-live .search_list li + li { - margin-top: 20px; -} -.bodywebsite .rd-search-results-live .search_list .search_error { - padding-bottom: 10px; - font-size: 14px; - line-height: 1.1; -} -.bodywebsite .rd-search-results-live .search_link, -.bodywebsite .rd-search-results-live .search_link:active, -.bodywebsite .rd-search-results-live .search_link:focus { - color: #464a4d; -} -.bodywebsite .rd-search-results-live .search_link:hover { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .rd-search-results-live p { - margin-top: 0; - font-size: 14px; - line-height: 1.6; -} -.bodywebsite .rd-search-results-live .search_title { - margin-bottom: 0; - font-family: "Roboto", Helvetica, Arial, sans-serif; - font-size: 14px; - font-weight: 700; - color: #000; -} -.bodywebsite .rd-search-results-live .search_submit { - display: block; - padding: 6px 20px; - font-size: 14px; - font-weight: 700; - text-align: center; - color: #fff; - background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - border-radius: 5px; - border: 0; - text-transform: uppercase; - transition: 0.3s ease-out; -} -.bodywebsite .rd-search-results-live .search_submit:hover { - color: #fff; - background: #3a3c3e; -} -.bodywebsite .rd-search-results-live .match { - display: none; -} -@media (min-width: 1200px) { - .bodywebsite .rd-search-results-live .search_link p { - display: block; - } -} -.bodywebsite .rd-navbar-fixed-linked .rd-search-results-live { - display: none; -} -.bodywebsite .rd-search-results-live.active.cleared { - opacity: 0; - visibility: hidden; - transition-delay: .08s; -} -.bodywebsite .active .rd-search-results-live { - display: block; - opacity: 1; - visibility: visible; -} -.bodywebsite .rd-search-results .search_list { - text-align: left; - padding-left: 0; - font-size: 14px; - list-style-type: none; - counter-reset: result; -} -.bodywebsite .rd-search-results .result-item { - position: relative; - padding-left: 40px; - color: #9f9f9f; -} -.bodywebsite .rd-search-results .result-item:before { - position: absolute; - top: -1px; - left: 0; - content: counter(result, decimal-leading-zero) "."; - counter-increment: result; - font: 500 19px "Roboto", Helvetica, Arial, sans-serif; - line-height: 1; - color: #cdcdcd; -} -.bodywebsite .rd-search-results .result-item:only-child:before { - display: none; -} -.bodywebsite .rd-search-results .search { - color: #fff; - background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .rd-search-results .search_error .search { - color: #9f9f9f; - background-color: transparent; -} -.bodywebsite .rd-search-results .match em { - font: 700 12px/16px "Roboto", Helvetica, Arial, sans-serif; - font-style: normal; - text-transform: uppercase; - color: #000; -} -.bodywebsite .rd-search-results * + p { - margin-top: 10px; -} -.bodywebsite .rd-search-results * + .match { - margin-top: 5px; -} -.bodywebsite .rd-search-results * + .result-item { - margin-top: 35px; -} -@media (min-width: 576px) { - .bodywebsite .rd-search-results .result-item { - padding-left: 60px; - } - .bodywebsite .rd-search-results .result-item:before { - left: 15px; - font-size: 19px; - } -} -@media (min-width: 768px) { - .bodywebsite .rd-search-results .result-item:before { - top: 0; - } -} -@media (min-width: 992px) { - .bodywebsite .rd-search-results .result-item { - padding-left: 85px; - } - .bodywebsite .rd-search-results .result-item:before { - top: 0; - left: 40px; - } -} -@media (min-width: 1200px) { - .bodywebsite .rd-search-results .result-item { - padding-left: 100px; - } - .bodywebsite .rd-search-results .result-item:before { - left: 44px; - } -} -.bodywebsite .twitter-item-minimal .tweet-user { - font-size: 16px; - font-weight: 700; -} -.bodywebsite .twitter-item-minimal .tweet-user a, -.bodywebsite .twitter-item-minimal .tweet-user a:active, -.bodywebsite .twitter-item-minimal .tweet-user a:focus { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .twitter-item-minimal .tweet-user a:hover { - color: #000; -} -.bodywebsite .twitter-item-minimal .tweet-user a:before { - content: '-'; -} -.bodywebsite .twitter-item-minimal .tweet-text a, -.bodywebsite .twitter-item-minimal .tweet-text a:active, -.bodywebsite .twitter-item-minimal .tweet-text a:focus { - color: #000; -} -.bodywebsite .twitter-item-minimal .tweet-text a:hover { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .twitter-item-minimal * + .tweet-text { - margin-top: 0; -} -.bodywebsite .twitter-item-minimal * + .tweet-user { - margin-top: 10px; -} -.bodywebsite .twitter-item-minimal + .twitter-item-minimal { - margin-top: 25px; -} -.bodywebsite .twitter-widget { - overflow: hidden; - background: #fff; - border-radius: 6px; - box-shadow: -1px 0px 10px 0px rgba(65, 65, 65, 0.12); -} -.bodywebsite .twitter-widget > a { - display: block; - color: #9f9f9f; -} -.bodywebsite .twitter-widget .tweet-text a, -.bodywebsite .twitter-widget .tweet-text a:active, -.bodywebsite .twitter-widget .tweet-text a:focus { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .twitter-widget .tweet-text a:hover { - color: #000; -} -.bodywebsite .twitter-widget .twitter-widget-time { - color: #9f9f9f; -} -.bodywebsite .twitter-widget .twitter-widget-meta > * { - line-height: 1.1; -} -.bodywebsite .twitter-widget .twitter-widget-meta > * + * { - margin-top: 5px; -} -.bodywebsite .twitter-widget .twitter-widget-media { - position: relative; - z-index: 1; - overflow: hidden; -} -.bodywebsite .twitter-widget .twitter-widget-media > img { - position: absolute; - top: 0; - right: 0; - left: 0; - min-height: 101%; -} -.bodywebsite .twitter-widget .twitter-widget-media:empty { - display: none; -} -.bodywebsite .twitter-widget .twitter-widget-media:not(:empty) { - padding-bottom: 42.5170068%; -} -.bodywebsite .twitter-widget .tweet-avatar { - display: block; - width: 48px; - height: 48px; - background: #dedede; -} -.bodywebsite .twitter-widget .twitter-widget-header { - padding: 30px 30px 0 30px; -} -.bodywebsite .twitter-widget .twitter-widget-inset { - padding: 25px 30px 15px; -} -.bodywebsite .twitter-widget .twitter-widget-footer { - padding: 15px 30px; -} -.bodywebsite * + .twitter-widget { - margin-top: 30px; -} -.bodywebsite .swiper-container { - margin: 0 auto; - position: relative; - overflow: hidden; - /* Fix of Webkit flickering */ - z-index: 1; - height: auto; -} -.bodywebsite .swiper-container .swiper-wrapper { - height: auto; - min-height: 36.25vw; -} -@media (min-width: 1800px) { - .bodywebsite .swiper-container .swiper-wrapper { - height: auto; - min-height: 680px; - } -} -.bodywebsite .swiper-container-no-flexbox .swiper-slide { - float: left; -} -.bodywebsite .swiper-container-vertical > .swiper-wrapper { - -webkit-box-orient: vertical; - -moz-box-orient: vertical; - -ms-flex-direction: column; - -webkit-flex-direction: column; - flex-direction: column; -} -.bodywebsite .swiper-wrapper { - position: relative; - width: 100%; - z-index: 1; - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-transition-property: -webkit-transform; - -moz-transition-property: -moz-transform; - -o-transition-property: -o-transform; - -ms-transition-property: -ms-transform; - transition-property: transform; - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; - -webkit-align-self: stretch; - -ms-flex-item-align: stretch; - align-self: stretch; - -webkit-align-items: stretch; - -ms-flex-align: stretch; - align-items: stretch; -} -.bodywebsite .swiper-container-android .swiper-slide, -.bodywebsite .swiper-wrapper { - -webkit-transform: translate3d(0px, 0, 0); - -moz-transform: translate3d(0px, 0, 0); - -o-transform: translate(0px, 0px); - -ms-transform: translate3d(0px, 0, 0); - transform: translate3d(0px, 0, 0); -} -.bodywebsite .swiper-container-multirow > .swiper-wrapper { - -webkit-box-lines: multiple; - -moz-box-lines: multiple; - -ms-flex-wrap: wrap; - -webkit-flex-wrap: wrap; - flex-wrap: wrap; -} -.bodywebsite .swiper-container-free-mode > .swiper-wrapper { - -webkit-transition-timing-function: ease-out; - -moz-transition-timing-function: ease-out; - -ms-transition-timing-function: ease-out; - -o-transition-timing-function: ease-out; - transition-timing-function: ease-out; - margin: 0 auto; -} -.bodywebsite .swiper-slide { - position: relative; - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - -webkit-flex-shrink: 0; - -ms-flex: 0 0 auto; - flex-shrink: 0; - width: 100%; - min-height: inherit; -} -.bodywebsite .swiper-container .swiper-notification { - position: absolute; - left: 0; - top: 0; - pointer-events: none; - opacity: 0; - z-index: -1000; -} -.bodywebsite .swiper-wp8-horizontal { - -ms-touch-action: pan-y; - touch-action: pan-y; -} -.bodywebsite .swiper-wp8-vertical { - -ms-touch-action: pan-x; - touch-action: pan-x; -} -.bodywebsite .swiper-nav { - position: absolute; - top: 50%; - right: 0; - left: 0; - z-index: 10; - pointer-events: none; - transform: translateY(-50%); -} -.bodywebsite .swiper-button-prev, -.bodywebsite .swiper-button-next { - z-index: 10; - width: 48px; - height: 48px; - background-size: 48px 48px; - color: #fff; - transition: 180ms ease-in-out; - text-align: center; - cursor: pointer; - pointer-events: auto; -} -.bodywebsite .swiper-button-prev:hover, -.bodywebsite .swiper-button-next:hover { - opacity: .7; -} -.bodywebsite .swiper-button-prev.swiper-button-disabled, -.bodywebsite .swiper-button-next.swiper-button-disabled { - opacity: 0; - cursor: auto; - pointer-events: none; -} -.bodywebsite .swiper-button-next { - transform: rotate(180deg); -} -.bodywebsite .swiper-pagination-wrap { - position: absolute; - bottom: 20px; - left: 50%; - width: 100%; - transform: translate3d(-50%, 0, 0); - z-index: 10; -} -@media (min-width: 992px) { - .bodywebsite .swiper-pagination-wrap { - bottom: 35px; - } -} -@media (min-width: 1200px) { - .bodywebsite .swiper-pagination-wrap { - bottom: 55px; - } -} -.bodywebsite .swiper-pagination { - display: block; - width: 100%; - text-align: center; - transition: 300ms; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - z-index: 10; -} -@media (min-width: 768px) { - .bodywebsite .swiper-pagination { - text-align: left; - } -} -.bodywebsite .swiper-pagination.swiper-pagination-hidden { - opacity: 0; -} -.bodywebsite .swiper-pagination-bullet { - display: inline-block; - width: 6px; - height: 6px; - border-radius: 20px; - background: #cdcdcd; - pointer-events: none; - transition: all 0.2s ease-out; -} -.bodywebsite .swiper-pagination-bullet + * { - margin-left: 10px; -} -@media (min-width: 768px) { - .bodywebsite .swiper-pagination-bullet { - width: 12px; - height: 12px; - pointer-events: auto; - } - .bodywebsite .swiper-pagination-bullet + * { - margin-left: 20px; - } -} -.bodywebsite .swiper-pagination-clickable .swiper-pagination-bullet { - cursor: pointer; -} -.bodywebsite .swiper-pagination-white .swiper-pagination-bullet { - background: #fff; -} -.bodywebsite .swiper-pagination-bullet:hover, -.bodywebsite .swiper-pagination-bullet-active { - background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .swiper-pagination-white .swiper-pagination-bullet-active { - background: #fff; -} -.bodywebsite .swiper-pagination-black .swiper-pagination-bullet-active { - background: #000; -} -.bodywebsite .swiper-container-vertical > .swiper-pagination { - right: 10px; - top: 50%; - -webkit-transform: translate3d(0px, -50%, 0); - -moz-transform: translate3d(0px, -50%, 0); - -o-transform: translate(0px, -50%); - -ms-transform: translate3d(0px, -50%, 0); - transform: translate3d(0px, -50%, 0); -} -.bodywebsite .swiper-container-vertical > .swiper-pagination .swiper-pagination-bullet { - margin: 5px 0; - display: block; -} -.bodywebsite .swiper-container-horizontal > .swiper-pagination { - bottom: 20px; - left: 0; - width: 100%; -} -.bodywebsite .swiper-container-horizontal > .swiper-pagination .swiper-pagination-bullet { - margin: 0 5px; -} -.bodywebsite .swiper-container-3d { - -webkit-perspective: 1200px; - -moz-perspective: 1200px; - -o-perspective: 1200px; - perspective: 1200px; -} -.bodywebsite .swiper-container-3d .swiper-wrapper, -.bodywebsite .swiper-container-3d .swiper-slide, -.bodywebsite .swiper-container-3d .swiper-slide-shadow-left, -.bodywebsite .swiper-container-3d .swiper-slide-shadow-right, -.bodywebsite .swiper-container-3d .swiper-slide-shadow-top, -.bodywebsite .swiper-container-3d .swiper-slide-shadow-bottom, -.bodywebsite .swiper-container-3d .swiper-cube-shadow { - -webkit-transform-style: preserve-3d; - -moz-transform-style: preserve-3d; - -ms-transform-style: preserve-3d; - transform-style: preserve-3d; -} -.bodywebsite .swiper-container-3d .swiper-slide-shadow-left, -.bodywebsite .swiper-container-3d .swiper-slide-shadow-right, -.bodywebsite .swiper-container-3d .swiper-slide-shadow-top, -.bodywebsite .swiper-container-3d .swiper-slide-shadow-bottom { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - pointer-events: none; - z-index: 10; -} -.bodywebsite .swiper-container-3d .swiper-slide-shadow-left { - background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); -} -.bodywebsite .swiper-container-3d .swiper-slide-shadow-top { - background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); -} -.bodywebsite .swiper-container-3d .swiper-slide-shadow-bottom { - background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); -} -.bodywebsite .swiper-container-coverflow .swiper-wrapper { - /* Windows 8 IE 10 fix */ - -ms-perspective: 1200px; -} -.bodywebsite .swiper-container-fade.swiper-container-free-mode .swiper-slide { - -webkit-transition-timing-function: ease-out; - transition-timing-function: ease-out; -} -.bodywebsite .swiper-container-fade .swiper-slide { - pointer-events: none; -} -.bodywebsite .swiper-container-fade .swiper-slide .swiper-slide { - pointer-events: none; -} -.bodywebsite .swiper-container-fade .swiper-slide-active, -.bodywebsite .swiper-container-fade .swiper-slide-active .swiper-slide-active { - pointer-events: auto; -} -.bodywebsite .swiper-container-cube { - overflow: visible; -} -.bodywebsite .swiper-container-cube .swiper-slide { - pointer-events: none; - visibility: hidden; - -webkit-transform-origin: 0 0; - -moz-transform-origin: 0 0; - -ms-transform-origin: 0 0; - transform-origin: 0 0; - -webkit-backface-visibility: hidden; - -moz-backface-visibility: hidden; - -ms-backface-visibility: hidden; - backface-visibility: hidden; - width: 100%; - height: 100%; - z-index: 1; -} -.bodywebsite .swiper-container-cube.swiper-container-rtl .swiper-slide { - -webkit-transform-origin: 100% 0; - -moz-transform-origin: 100% 0; - -ms-transform-origin: 100% 0; - transform-origin: 100% 0; -} -.bodywebsite .swiper-container-cube .swiper-slide-active, -.bodywebsite .swiper-container-cube .swiper-slide-next, -.bodywebsite .swiper-container-cube .swiper-slide-prev, -.bodywebsite .swiper-container-cube .swiper-slide-next + .swiper-slide { - pointer-events: auto; - visibility: visible; -} -.bodywebsite .swiper-container-cube .swiper-slide-shadow-top, -.bodywebsite .swiper-container-cube .swiper-slide-shadow-bottom, -.bodywebsite .swiper-container-cube .swiper-slide-shadow-left, -.bodywebsite .swiper-container-cube .swiper-slide-shadow-right { - z-index: 0; - -webkit-backface-visibility: hidden; - -moz-backface-visibility: hidden; - -ms-backface-visibility: hidden; - backface-visibility: hidden; -} -.bodywebsite .swiper-container-cube .swiper-cube-shadow { - position: absolute; - left: 0; - bottom: 0px; - width: 100%; - height: 100%; - background: #000; - opacity: 0.6; - -webkit-filter: blur(50px); - filter: blur(50px); - z-index: 0; -} -.bodywebsite .swiper-scrollbar { - position: relative; - -ms-touch-action: none; -} -.bodywebsite .swiper-container-horizontal > .swiper-scrollbar { - position: absolute; - top: 0; - left: 0; - z-index: 50; - height: 5px; - width: 100%; -} -.bodywebsite .swiper-container-vertical > .swiper-scrollbar { - position: absolute; - right: 3px; - top: 1%; - z-index: 50; - width: 5px; - height: 98%; -} -.bodywebsite .swiper-scrollbar-drag { - height: 100%; - width: 100%; - position: relative; - background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; - left: 0; - top: 0; -} -.bodywebsite .swiper-scrollbar-cursor-drag { - cursor: move; -} -.bodywebsite .swiper-lazy-preloader { - width: 42px; - height: 42px; - position: absolute; - left: 50%; - top: 50%; - margin-left: -21px; - margin-top: -21px; - z-index: 10; - -webkit-transform-origin: 50%; - -moz-transform-origin: 50%; - transform-origin: 50%; - -webkit-animation: swiper-preloader-spin 1s steps(12, end) infinite; - -moz-animation: swiper-preloader-spin 1s steps(12, end) infinite; - animation: swiper-preloader-spin 1s steps(12, end) infinite; -} -.bodywebsite .swiper-lazy-preloader:after { - display: block; - content: ""; - width: 100%; - height: 100%; - background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); - background-position: 50%; - -webkit-background-size: 100%; - background-size: 100%; - background-repeat: no-repeat; -} -.bodywebsite .swiper-lazy-preloader-white:after { - background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -@-webkit-keyframes swiper-preloader-spin { - 100% { - -webkit-transform: rotate(360deg); - } -} -@keyframes swiper-preloader-spin { - 100% { - transform: rotate(360deg); - } -} -.bodywebsite .swiper-slide > .vide__body, -.bodywebsite .swiper-slide > .parallax_cnt { - height: 100%; -} -.bodywebsite .swiper-slide { - position: relative; - text-align: center; - white-space: nowrap; - background-position: center center; - overflow: hidden; -} -.bodywebsite .swiper-slide:not(.vide):not(.rd-parallax):before, -.bodywebsite .swiper-slide .parallax_cnt:before, -.bodywebsite .swiper-slide .vide__body:before { - content: ''; - display: inline-block; - height: 50%; -} -.bodywebsite .swiper-slide-caption { - display: inline-block; - width: 100%; - max-height: 100%; - margin-left: -0.25em; - vertical-align: middle; - white-space: normal; - z-index: 1; -} -.bodywebsite .swiper-variant-1, -.bodywebsite .swiper-variant-1 .swiper-wrapper { - height: auto; - min-height: calc(44vh); -} -.bodywebsite .swiper-variant-1 .swiper-slide-caption { - padding: 40px 0 40px; -} -.bodywebsite .swiper-variant-1 .swiper-button-prev, -.bodywebsite .swiper-variant-1 .swiper-button-next { - display: none; -} -.bodywebsite .swiper-variant-1 .slider-text { - display: none; -} -.bodywebsite .swiper-variant-1 .jumbotron-custom + * { - margin-top: 5px; -} -.bodywebsite .swiper-variant-1 * + .button-block { - margin-top: 27px; -} -@media (min-width: 768px) { - .bodywebsite .swiper-variant-1, - .bodywebsite .swiper-variant-1 .swiper-wrapper { - height: auto; - min-height: 36.25vw; - } - .bodywebsite .swiper-variant-1 .swiper-slide-caption { - padding: 60px 0 115px; - } - .bodywebsite .swiper-variant-1 .slider-header { - font-size: 50px; - } - .bodywebsite .swiper-variant-1 .slider-text { - display: block; - } -} -@media (min-width: 992px) { - .bodywebsite .swiper-variant-1 .swiper-slide-caption { - padding: 100px 0 155px; - } - .bodywebsite .swiper-variant-1 .swiper-button-prev, - .bodywebsite .swiper-variant-1 .swiper-button-next { - position: absolute; - top: 50%; - transform: translateY(-59%); - z-index: 10; - display: block; - transition: .3s all ease; - } - .bodywebsite .swiper-variant-1 .swiper-button-prev { - left: 5.1%; - transform: scale(-1, 1); - } - .bodywebsite .swiper-variant-1 .swiper-button-next { - right: 5.1%; - } -} -@media (min-width: 1200px) { - .bodywebsite .swiper-variant-1 .slider-header { - font-size: 59px; - } - .bodywebsite .swiper-variant-1 .swiper-button-prev { - left: 20px; - } - .bodywebsite .swiper-variant-1 .swiper-button-next { - right: 20px; - } -} -@media (min-width: 1599px) { - .bodywebsite .swiper-variant-1 .swiper-button-prev { - left: calc(50vw - 1170px / 2 - 170px + (1170px / 12) * 0); - } - .bodywebsite .swiper-variant-1 .swiper-button-next { - right: calc(50vw - 1170px / 2 - 170px + (1170px / 12) * 0); - } -} -@media (min-width: 1800px) { - .bodywebsite .swiper-variant-1, - .bodywebsite .swiper-variant-1 .swiper-wrapper { - height: auto; - min-height: 680px; - } -} -.bodywebsite .ui-to-top { - width: 40px; - height: 40px; - font-size: 18px; - line-height: 38px; - border-radius: 50%; - position: fixed; - right: 15px; - bottom: 15px; - overflow: hidden; - text-align: center; - text-decoration: none; - z-index: 20; - transition: .3s all ease; - box-shadow: 0 0 1px 0px rgba(55, 195, 134, 0.3); - transform: translateY(100px); -} -.bodywebsite .ui-to-top, -.bodywebsite .ui-to-top:active, -.bodywebsite .ui-to-top:focus { - color: #fff; - background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .ui-to-top:hover { - color: #fff; - background: maincolorbis) ? '#6ca' : '#'.$website->maincolorbis; ?>; - box-shadow: 0 0 1px 0px rgba(0, 0, 0, 0.4); -} -.bodywebsite .ui-to-top:focus { - outline: 0; -} -.bodywebsite .ui-to-top.active { - transform: translateY(0); -} -.bodywebsite .mobile .ui-to-top, -.bodywebsite .tablet .ui-to-top { - display: none !important; -} -@media (min-width: 576px) { - .bodywebsite .ui-to-top { - right: 40px; - bottom: 40px; - } -} -.bodywebsite .progress-bar-wrap { - max-width: 100%; - width: 210px; -} -@media (min-width: 576px) and (max-width: 767px) { - .bodywebsite .progress-bar-wrap { - max-width: 120px; - } -} -@media (min-width: 768px) { - .bodywebsite .progress-bar-wrap { - max-width: 150px; - } -} -.bodywebsite .progress-bar { - position: relative; - width: 100%; - margin: 0; - font-family: "Roboto", Helvetica, Arial, sans-serif; -} -.bodywebsite .progress-bar .progress-bar__body { - position: absolute; - right: 50%; - width: 100%; - top: 50%; - padding: 0; - margin: 0; - white-space: nowrap; - font-size: 34px; - font-weight: 400; - line-height: 26px; - color: #00030a; - text-align: right; -} -.bodywebsite .progress-bar .progress-bar__body:after { - content: '%'; -} -.bodywebsite .progress-bar .progress-bar__stroke, -.bodywebsite .progress-bar .progress-bar__trail { - stroke-linejoin: round; -} -.bodywebsite .progress-bar-horizontal { - position: relative; - font-family: "Roboto", Helvetica, Arial, sans-serif; - text-align: right; -} -.bodywebsite .progress-bar-horizontal > svg { - margin-top: 3px; - border-radius: 3px; -} -.bodywebsite .progress-bar-horizontal .progress-bar__body { - position: absolute; - top: -27px; - margin-top: 0; - padding-right: 0; -} -.bodywebsite .progress-bar-horizontal .progress-bar__body:after { - content: '%'; -} -.bodywebsite .progress-bar-radial { - position: relative; - padding-bottom: 100%; -} -.bodywebsite .progress-bar-radial > svg { - position: absolute; - width: 100%; - height: 100%; - left: 0; - top: 0; - border-radius: 5px; - overflow: hidden; -} -.bodywebsite .progress-bar-radial .progress-bar__stroke, -.bodywebsite .progress-bar-radial .progress-bar__trail { - stroke-location: outside; -} -.bodywebsite .progress-bar-radial .progress-bar__body { - transform: translate(50%, -50%); -} -.bodywebsite .progress-bar-default .progress-bar__stroke { - stroke: #9f9f9f; -} -.bodywebsite .progress-bar-default .progress-bar__trail { - stroke: rgba(159, 159, 159, 0.05); -} -.bodywebsite .progress-bar-primary .progress-bar__stroke { - stroke: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .progress-bar-primary .progress-bar__trail { - stroke: #F8F9FB; -} -.bodywebsite .progress-bar-bermuda-gray .progress-bar__stroke { - stroke: #6f8fad; -} -.bodywebsite .progress-bar-bermuda-gray .progress-bar__trail { - stroke: #F8F9FB; -} -.bodywebsite .progress-bar-contessa .progress-bar__stroke { - stroke: #e76752; -} -.bodywebsite .progress-bar-contessa .progress-bar__trail { - stroke: #F8F9FB; -} -.bodywebsite .progress-bar-red-orange-1 .progress-bar__stroke { - stroke: #f8333c; -} -.bodywebsite .progress-bar-red-orange-1 .progress-bar__trail { - stroke: #ededed; -} -.bodywebsite .progress-bar-dodger-blue .progress-bar__stroke { - stroke: #45a4ff; -} -.bodywebsite .progress-bar-dodger-blue .progress-bar__trail { - stroke: #ededed; -} -.bodywebsite .progress-bar-gorse .progress-bar__stroke { - stroke: #fde74c; -} -.bodywebsite .progress-bar-gorse .progress-bar__trail { - stroke: #ededed; -} -.bodywebsite .progress-bar-old-gold .progress-bar__stroke { - stroke: #ecd746; -} -.bodywebsite .progress-bar-old-gold .progress-bar__trail { - stroke: #F8F9FB; -} -.bodywebsite .progress-bar-secondary-2 .progress-bar__stroke { - stroke: #dedede; -} -.bodywebsite .progress-bar-secondary-2 .progress-bar__trail { - stroke: gray; -} -.bodywebsite .progress-bar-secondary-1 .progress-bar__stroke { - stroke: #dedede; -} -.bodywebsite .progress-bar-secondary-1 .progress-bar__trail { - stroke: rgba(159, 159, 159, 0.05); -} -.bodywebsite .progress-bar-secondary-3 .progress-bar__stroke { - stroke: #c49558; -} -.bodywebsite .progress-bar-secondary-3 .progress-bar__trail { - stroke: rgba(159, 159, 159, 0.05); -} -.bodywebsite .progress-bar-secondary-4 .progress-bar__stroke { - stroke: #fe4a21; -} -.bodywebsite .progress-bar-secondary-4 .progress-bar__trail { - stroke: rgba(159, 159, 159, 0.05); -} -.bodywebsite .countdown-wrap { - max-width: 720px; - max-height: 134px; -} -.bodywebsite .countdown-wrap .time_circles > div { - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-direction: column-reverse; - -ms-flex-direction: column-reverse; - flex-direction: column-reverse; - -webkit-flex-wrap: nowrap; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; - font-size: 0; - line-height: 0; -} -.bodywebsite .countdown-wrap div > h4 { - position: relative; - margin-top: -2px; - font: 500 12px "Roboto", Helvetica, Arial, sans-serif !important; - color: rgba(0, 0, 0, 0.2); - letter-spacing: -0.025em; - bottom: auto !important; - text-transform: uppercase; -} -@media (min-width: 576px) { - .bodywebsite .countdown-wrap div > h4 { - font-size: 14px !important; - } -} -.bodywebsite .countdown-wrap span { - font: 900 18px "Roboto", Helvetica, Arial, sans-serif !important; - font-style: normal; - color: #000; -} -@media (min-width: 576px) { - .bodywebsite .countdown-wrap span { - font-size: 40px !important; - } -} -@media (min-width: 768px) { - .bodywebsite .countdown-wrap span { - font-size: 45px !important; - line-height: 1; - } -} -.bodywebsite .slick-slider { - position: relative; - display: block; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -ms-touch-action: pan-y; - touch-action: pan-y; - -webkit-tap-highlight-color: transparent; -} -.bodywebsite .slick-list { - position: relative; - overflow: hidden; - display: block; - margin: 0; - padding: 0; -} -.bodywebsite .slick-list:focus { - outline: none; -} -.bodywebsite .slick-list.dragging { - cursor: pointer; - cursor: hand; -} -.bodywebsite .slick-slider .slick-track, -.bodywebsite .slick-slider .slick-list { - -webkit-transform: translate3d(0, 0, 0); - -moz-transform: translate3d(0, 0, 0); - -ms-transform: translate3d(0, 0, 0); - -o-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); -} -.bodywebsite .slick-track { - position: relative; - left: 0; - top: 0; - display: block; -} -.bodywebsite .slick-track:before, -.bodywebsite .slick-track:after { - content: ""; - display: table; -} -.bodywebsite .slick-track:after { - clear: both; -} -.bodywebsite .slick-loading .slick-track { - visibility: hidden; -} -.bodywebsite .slick-slide { - float: left; - min-height: 1px; - display: none; -} -.bodywebsite [dir="rtl"] .slick-slide { - float: right; -} -.bodywebsite .slick-slide img { - display: block; -} -.bodywebsite .slick-slide.slick-loading img { - display: none; -} -.bodywebsite .slick-slide.dragging img { - pointer-events: none; -} -.bodywebsite .slick-initialized .slick-slide { - display: block; -} -.bodywebsite .slick-loading .slick-slide { - visibility: hidden; -} -.bodywebsite .slick-vertical .slick-slide { - display: block; - height: auto; - border: 1px solid transparent; -} -.bodywebsite .slick-arrow.slick-hidden { - display: none; -} -.bodywebsite .slick-loading .slick-list { - background: #fff url("medias/image/ref; ?>/ajax-loading.gif") center center no-repeat; -} -.bodywebsite .slick-prev, -.bodywebsite .slick-next { - position: absolute; - display: block; - height: 20px; - width: 20px; - line-height: 0; - font-size: 0; - cursor: pointer; - background: rgba(0, 0, 0, 0.6); - color: transparent; - top: 50%; - -webkit-transform: translate(0, -50%); - -ms-transform: translate(0, -50%); - transform: translate(0, -50%); - padding: 0; - border: none; - outline: none; - z-index: 999; -} -.bodywebsite .slick-prev:hover, -.bodywebsite .slick-prev:focus, -.bodywebsite .slick-next:hover, -.bodywebsite .slick-next:focus { - outline: none; - background: transparent; - color: transparent; -} -.bodywebsite .slick-prev:hover:before, -.bodywebsite .slick-prev:focus:before, -.bodywebsite .slick-next:hover:before, -.bodywebsite .slick-next:focus:before { - opacity: 1; -} -.bodywebsite .slick-prev.slick-disabled:before, -.bodywebsite .slick-next.slick-disabled:before { - opacity: 0.25; -} -.bodywebsite .slick-prev:before, -.bodywebsite .slick-next:before { - font-family: "Roboto", Helvetica, Arial, sans-serif; - font-size: 20px; - line-height: 1; - color: white; - opacity: 0.75; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -.bodywebsite .slick-prev { - left: 0; -} -.bodywebsite [dir="rtl"] .slick-prev { - left: auto; - right: 0; -} -.bodywebsite .slick-prev:before { - content: "←"; -} -.bodywebsite [dir="rtl"] .slick-prev:before { - content: "→"; -} -.bodywebsite .slick-next { - right: 0; -} -.bodywebsite [dir="rtl"] .slick-next { - left: 0; - right: auto; -} -.bodywebsite .slick-next:before { - content: "→"; -} -.bodywebsite [dir="rtl"] .slick-next:before { - content: "←"; -} -.bodywebsite .slick-slider { - margin-top: 30px; -} -.bodywebsite .slick-slider *:focus { - outline: 0; -} -.bodywebsite .slick-dots { - display: block; - margin-top: 20px; - list-style: none; - width: 100%; - padding: 0; - text-align: center; - font-size: 0; - line-height: 0; - word-spacing: 0; -} -.bodywebsite .slick-dots li { - position: relative; - display: inline-block; - height: 20px; - width: 20px; - margin: 0 5px; - padding: 0; - cursor: pointer; -} -.bodywebsite .slick-dots li button { - background: none; - border: none; - display: inline-block; - padding: 0; - outline: none; - outline-offset: 0; - cursor: pointer; - -webkit-appearance: none; - width: 8px; - height: 8px; - border-radius: 100px; - background: #ababab; -} -.bodywebsite .slick-dots li button::-moz-focus-inner { - border: none; - padding: 0; -} -.bodywebsite .slick-dots li.slick-active button, -.bodywebsite .slick-dots li:hover button { - background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .slick-dots-variant-1 .slick-dots li button { - height: 12px; - width: 12px; - background: rgba(58, 60, 62, 0.5); - transition: .33s all ease; - position: relative; -} -.bodywebsite .slick-dots-variant-1 .slick-dots li button:after { - content: ''; - position: absolute; - top: 50%; - left: 50%; - width: 19px; - height: 19px; - border: 4px solid #fff; - opacity: 0; - border-radius: 50%; - -webkit-transform: translate(-50%, -50%) scale(0); - transform: translate(-50%, -50%) scale(0); - transition: 180ms ease-in-out; -} -.bodywebsite .slick-dots-variant-1 .slick-dots li.slick-active button, -.bodywebsite .slick-dots-variant-1 .slick-dots li:hover button { - background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .slick-dots-variant-1 .slick-dots li.slick-active button:after, -.bodywebsite .slick-dots-variant-1 .slick-dots li:hover button:after { - opacity: 1; - -webkit-transform: translate(-50%, -50%) scale(1); - transform: translate(-50%, -50%) scale(1); -} -.bodywebsite .slick-carousel-complex-variant-1 { - position: relative; - padding-bottom: 60px; -} -.bodywebsite .slick-carousel-complex-variant-1:after { - content: ''; - position: absolute; - top: 80px; - left: 50%; - bottom: 0; - transform: translateX(-50%); - width: 101vw; - background: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .slick-carousel-complex-variant-1 > * { - position: relative; - z-index: 2; -} -.bodywebsite .slick-carousel-complex-variant-1 .slick-slider { - margin-bottom: 0; -} -.bodywebsite .slick-carousel-complex-variant-1 .slick-dots { - margin-top: 30px; -} -@media (min-width: 768px) { - .bodywebsite .slick-carousel-complex-variant-1 { - padding-bottom: 90px; - } -} -.bodywebsite .slick-slider-images .item { - padding: 0 15px; - text-align: right; -} -.bodywebsite .slick-slider-images .item img { - display: inline-block; - transform: scale(0.75); - transform-origin: 100% 50%; - will-change: transform; - cursor: pointer; - transition: .5s all ease; -} -.bodywebsite .slick-slider-images .item.slick-center { - text-align: center; -} -.bodywebsite .slick-slider-images .item.slick-center img { - transform-origin: 50% 50%; - transform: scale(1); -} -.bodywebsite .slick-slider-images .item.slick-center + * { - text-align: left; -} -.bodywebsite .slick-slider-images .item.slick-center + * img { - transform-origin: 0 50%; -} -.bodywebsite .slick-carousel-round-image .item img { - border-radius: 50%; -} -.bodywebsite .carousel-testimonials-home .slick-slide { - text-align: center; -} -.bodywebsite #sectiontestimonies.maincolorbackground { - background-image: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -@media (min-width: 576px) { - .bodywebsite .carousel-testimonials-home .slick-slide { - text-align: left; - } -} -.bodywebsite .carousel-testimonials-home .slick-dots li button { - background: rgba(246, 247, 250, 0.5); -} -.bodywebsite .carousel-testimonials-home .item { - padding-left: 10px; - padding-right: 10px; -} -@media (min-width: 1200px) { - .bodywebsite .carousel-testimonials-home .item { - padding-left: 0; - padding-right: 0; - } -} -@media (min-width: 576px) { - .bodywebsite .carousel-testimonials-home .slick-dots { - display: none !important; - } -} -.bodywebsite .carousel-testimonials-home .slick-images .item { - padding-left: 0; - padding-right: 0; -} -.bodywebsite .carousel-testimonials-home .slick-images .item .imp-wrap { - text-align: center; - position: relative; - padding: 10px; -} -.bodywebsite .carousel-testimonials-home .slick-images .item .imp-wrap:after { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%) scale(0); - content: ''; - display: inline-block; - margin-left: 0px; - border: 1px solid #fccb56; - width: 116px; - height: 116px; - border-radius: 50%; - transition: 200ms ease-in-out; - opacity: 0; - pointer-events: none; -} -.bodywebsite .carousel-testimonials-home .slick-images .item .imp-wrap img { - display: inline-block; - border-radius: 50%; - cursor: pointer; -} -.bodywebsite .carousel-testimonials-home .slick-images .item:hover .imp-wrap:after, -.bodywebsite .carousel-testimonials-home .slick-images .item.slick-current .imp-wrap:after { - transform: translate(-50%, -50%) scale(1); - opacity: 1; -} -.bodywebsite .carousel-testimonials-home .quote-desc { - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; -} -.bodywebsite .websitemaincolor { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .maincolor { - color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .maincolorbis { - color: maincolorbis) ? '#6ca' : '#'.$website->maincolorbis; ?> !important; -} -.bodywebsite .maincolorbackground { - background-color: maincolor) ? 'rgb(50, 120, 180)' : '#'.$website->maincolor; ?>; -} -.bodywebsite .maincolorbisbackground { - background-color: maincolorbis) ? '#6ca' : '#'.$website->maincolorbis; ?> !important; - border-color: maincolorbis) ? '#6ca' : '#'.$website->maincolorbis; ?> !important; -} -.bodywebsite .maincolorbisbackground:hover { - box-shadow: 1px 1px 8px #aaa; -} -.bodywebsite textarea:focus, -.bodywebsite button:focus { - border: unset !important; -} -.bodywebsite .marginrightonly { - margin-right: 10px !important; -} -.bodywebsite .inline-block { - display: inline-block; -} -.bodywebsite .valignmiddle { - vertical-align: middle; -} -.bodywebsite .center { - text-align: center; -} -.bodywebsite button.buttonwithnoborder.toggle-original.active { - display: none; -} -.bodywebsite .rd-navbar-nav-wrap.active .toggle-original span.icon.icon-xs.icon-dusty-gray.fa.fa-search { - display: none; -} -.bodywebsite ul.rd-navbar-list { - padding-top: 20px; -} -.bodywebsite .photouser:hover, -.bodywebsite .photouser:active { - border: 2px solid #eee; -} -.bodywebsite .imp-wrap { - display: inline-block; -} -.bodywebsite .imp-wrap img { - border-radius: 50px; -} -.bodywebsite .text-green { - color: #6ca; -} -.bodywebsite .plan-tile .plan-title { - padding: 20px 0 0; - font-size: 20px; - font-weight: bold; - text-align: center; -} -.bodywebsite .plan-tile .plan-tag { - color: #687484; - text-align: center; - font-size: 16px; - padding: 0 5px 10px; - font-weight: 300; - min-height: 70px; -} -.bodywebsite .plan-tile .plan-pricer .plan-price-title { - display: block; - text-align: center; - color: #8492A6; - font-style: italic; - position: absolute; - top: 30px; - transform: translateX(-50%); - -webkit-transform: translateX(-50%); - left: 50%; - font-size: 16px; - width: 100%; - font-weight: 300; -} -.bodywebsite .plan-tile .plan-feat { - display: block; - font-size: 14px; - color: #3C4858; - text-align: center; - padding: 22px 10px; - min-height: 90px; -} -.bodywebsite .plan-tile .plan-pricer .plan-price { - border-bottom: 1px solid #d5dadf; - border-top: 1px solid #d5dadf; - padding: 20px 0 20px; - display: block; -} -.bodywebsite .plan-tile .plan-pricer .plan-price > span { - color: #3C4858; - font-size: 32px; -} -.bodywebsite .plan-tile .plan-pricer .plan-price > span > sup { - font-size: 13px; - top: -0.9em; -} -.bodywebsite .plan-tile .plan-pricer { - padding: 5px 0; - text-align: center; - max-width: 90%; - position: relative; - margin: auto; -} -.bodywebsite .pricing-plan-slider .plan-tile .plan-btn { - position: absolute; - bottom: 0px; - left: 0; - width: 100%; -} -.bodywebsite .plan-tile .plan-btn { - text-align: center; - padding: 0 15px 15px 15px; -} -.bodywebsite .plan-features { - padding-top: 20px; - padding-bottom: 20px; - padding-left: 20px; - padding-right: 20px; -} -.bodywebsite .formcontact div { - margin: 2px; -} -.bodywebsite section#sectionfooterdolibarr { - padding-left: 3px; - padding-right: 3px; - padding-bottom: 10px; -} -.bodywebsite button.buttonwithnoborder.toggle-original { - font: 400 18px/36px "FontAwesome"; - /* If removed, the search icon is not visible */ -} -.bodywebsite .rd-navbar-fixed .buttonsearchwhenstatic { - display: none; -} -.bodywebsite input[type="text"] { - display: block; - width: 100%; - padding: 11px 35px; - font-size: 14px; - line-height: 1.25; - background-image: none; - background-clip: padding-box; - border: 1px solid #ced4da; - border-radius: 0.25rem; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; -} -@media print { - .bodywebsite *, - .bodywebsite *::before, - .bodywebsite *::after { - text-shadow: none !important; - box-shadow: none !important; - } - .bodywebsite a, - .bodywebsite a:visited { - text-decoration: underline; - } - .bodywebsite abbr[title]::after { - content: " (" attr(title) ")"; - } - .bodywebsite pre { - white-space: pre-wrap !important; - } - .bodywebsite pre, - .bodywebsite blockquote { - border: 1px solid #999; - page-break-inside: avoid; - } - .bodywebsite thead { - display: table-header-group; - } - .bodywebsite tr, - .bodywebsite img { - page-break-inside: avoid; - } - .bodywebsite p, - .bodywebsite h2, - .bodywebsite h3 { - orphans: 3; - widows: 3; - } - .bodywebsite h2, - .bodywebsite h3 { - page-break-after: avoid; - } - .bodywebsite .navbar { - display: none; - } - .bodywebsite .badge { - border: 1px solid #000; - } - .bodywebsite .table { - border-collapse: collapse !important; - } - .bodywebsite .table td, - .bodywebsite .table th { - background-color: #fff !important; - } - .bodywebsite .table-bordered th, - .bodywebsite .table-bordered td { - border: 1px solid #ddd !important; - } -} -.bodywebsite *, -.bodywebsite *::before, -.bodywebsite *::after { - box-sizing: border-box; -} -html .bodywebsite { - font-family: sans-serif; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; - -ms-overflow-style: scrollbar; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} -@-ms-viewport { - width: device-width; -} -.bodywebsite article, -.bodywebsite aside, -.bodywebsite dialog, -.bodywebsite figcaption, -.bodywebsite figure, -.bodywebsite footer, -.bodywebsite header, -.bodywebsite hgroup, -.bodywebsite main, -.bodywebsite nav, -.bodywebsite section { - display: block; -} -.bodywebsite { - margin: 0; - font-family: "Roboto", Helvetica, Arial, sans-serif; - font-size: 14px; - font-weight: 400; - line-height: 1.71429; - text-align: left; - background-color: #fff; -} -.bodywebsite [tabindex="-1"]:focus { - outline: none !important; -} -.bodywebsite hr { - box-sizing: content-box; - height: 0; - overflow: visible; -} -.bodywebsite h1, -.bodywebsite h2, -.bodywebsite h3, -.bodywebsite h4, -.bodywebsite h5, -.bodywebsite h6 { - margin-top: 0; - margin-bottom: 0.5rem; -} -.bodywebsite abbr[title], -.bodywebsite abbr[data-original-title] { - text-decoration: underline; - text-decoration: underline dotted; - cursor: help; - border-bottom: 0; -} -.bodywebsite address { - margin-bottom: 1rem; - font-style: normal; - line-height: inherit; -} -.bodywebsite ol, -.bodywebsite ul, -.bodywebsite dl { - margin-top: 0; -} -.bodywebsite ol ol, -.bodywebsite ul ul, -.bodywebsite ol ul, -.bodywebsite ul ol { - margin-bottom: 0; -} -.bodywebsite dt { - font-weight: inherit; -} -.bodywebsite dd { - margin-bottom: .5rem; - margin-left: 0; -} -.bodywebsite blockquote { - margin: 0 0 1rem; -} -.bodywebsite dfn { - font-style: italic; -} -.bodywebsite b, -.bodywebsite strong { - font-weight: bolder; -} -.bodywebsite small { - font-size: 80%; -} -.bodywebsite sub, -.bodywebsite sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} -.bodywebsite sub { - bottom: -0.25em; -} -.bodywebsite sup { - top: -0.5em; -} -.bodywebsite a { - text-decoration: none; - -webkit-text-decoration-skip: objects; -} -.bodywebsite a:hover { - text-decoration: none; -} -.bodywebsite a:not([href]):not([tabindex]) { - color: inherit; - text-decoration: none; -} -.bodywebsite a:not([href]):not([tabindex]):focus, -.bodywebsite a:not([href]):not([tabindex]):hover { - color: inherit; - text-decoration: none; -} -.bodywebsite a:not([href]):not([tabindex]):focus { - outline: 0; -} -.bodywebsite pre, -.bodywebsite code, -.bodywebsite kbd, -.bodywebsite samp { - font-family: monospace, monospace; - font-size: 1em; -} -.bodywebsite pre { - margin-top: 0; - margin-bottom: 1rem; - overflow: auto; - -ms-overflow-style: scrollbar; -} -.bodywebsite figure { - margin: 0 0 1rem; -} -.bodywebsite img { - vertical-align: middle; - border-style: none; -} -.bodywebsite svg:not(:root) { - overflow: hidden; -} -.bodywebsite a, -.bodywebsite area, -.bodywebsite button, -.bodywebsite [role="button"], -.bodywebsite input:not([type="range"]), -.bodywebsite label, -.bodywebsite select, -.bodywebsite summary, -.bodywebsite textarea { - touch-action: manipulation; -} -.bodywebsite table { - border-collapse: collapse; -} -.bodywebsite caption { - padding-top: 17px 25px 18px; - padding-bottom: 17px 25px 18px; - color: #dedede; - text-align: left; - caption-side: bottom; -} -.bodywebsite th { - text-align: inherit; -} -.bodywebsite label { - display: inline-block; - margin-bottom: .5rem; -} -.bodywebsite button { - border-radius: 0; -} -.bodywebsite button:focus { - outline: 1px dotted; - outline: 5px auto -webkit-focus-ring-color; -} -.bodywebsite input, -.bodywebsite button, -.bodywebsite select, -.bodywebsite optgroup, -.bodywebsite textarea { - margin: 0; - font-family: inherit; - font-size: inherit; - line-height: inherit; -} -.bodywebsite button, -.bodywebsite input { - overflow: visible; -} -.bodywebsite button, -.bodywebsite select { - text-transform: none; -} -.bodywebsite button, -html .bodywebsite [type="button"], -.bodywebsite [type="reset"], -.bodywebsite [type="submit"] { - -webkit-appearance: button; -} -.bodywebsite button::-moz-focus-inner, -.bodywebsite [type="button"]::-moz-focus-inner, -.bodywebsite [type="reset"]::-moz-focus-inner, -.bodywebsite [type="submit"]::-moz-focus-inner { - padding: 0; - border-style: none; -} -.bodywebsite input[type="radio"], -.bodywebsite input[type="checkbox"] { - box-sizing: border-box; - padding: 0; -} -.bodywebsite input[type="date"], -.bodywebsite input[type="time"], -.bodywebsite input[type="datetime-local"], -.bodywebsite input[type="month"] { - -webkit-appearance: listbox; -} -.bodywebsite textarea { - overflow: auto; - resize: vertical; -} -.bodywebsite fieldset { - min-width: 0; - padding: 0; - margin: 0; - border: 0; -} -.bodywebsite legend { - display: block; - width: 100%; - max-width: 100%; - padding: 0; - margin-bottom: .5rem; - font-size: 1.5rem; - line-height: inherit; - color: inherit; - white-space: normal; -} -.bodywebsite progress { - vertical-align: baseline; -} -.bodywebsite [type="number"]::-webkit-inner-spin-button, -.bodywebsite [type="number"]::-webkit-outer-spin-button { - height: auto; -} -.bodywebsite [type="search"] { - outline-offset: -2px; - -webkit-appearance: none; -} -.bodywebsite [type="search"]::-webkit-search-cancel-button, -.bodywebsite [type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} -.bodywebsite ::-webkit-file-upload-button { - font: inherit; - -webkit-appearance: button; -} -.bodywebsite output { - display: inline-block; -} -.bodywebsite summary { - display: list-item; -} -.bodywebsite template { - display: none; -} -.bodywebsite [hidden] { - display: none !important; -} -.bodywebsite h1, -.bodywebsite h2, -.bodywebsite h3, -.bodywebsite h4, -.bodywebsite h5, -.bodywebsite h6, -.bodywebsite .h1, -.bodywebsite .h2, -.bodywebsite .h3, -.bodywebsite .h4, -.bodywebsite .h5, -.bodywebsite .h6 { - margin-bottom: 0.5rem; - font-family: "Roboto", Helvetica, Arial, sans-serif; - font-weight: 700; - line-height: 1.1; - color: #000; -} -.bodywebsite h1, -.bodywebsite .h1 { - font-size: 45px; -} -.bodywebsite h2, -.bodywebsite .h2 { - font-size: 24px; -} -.bodywebsite h3, -.bodywebsite .h3 { - font-size: 33px; -} -.bodywebsite h4, -.bodywebsite .h4 { - font-size: 18px; -} -.bodywebsite .lead { - font-size: 24px; - font-weight: 300; -} -.bodywebsite .display-1 { - font-size: 6rem; - font-weight: 300; - line-height: 1.2; -} -.bodywebsite .display-2 { - font-size: 5.5rem; - font-weight: 300; - line-height: 1.2; -} -.bodywebsite .display-3 { - font-size: 4.5rem; - font-weight: 300; - line-height: 1.2; -} -.bodywebsite .display-4 { - font-size: 3.5rem; - font-weight: 300; - line-height: 1.2; -} -.bodywebsite hr { - margin-top: 1rem; - margin-bottom: 1rem; - border: 0; - border-top: 1px solid #2a2b2b; -} -.bodywebsite small, -.bodywebsite .small { - font-size: 80%; - font-weight: 400; -} -.bodywebsite mark, -.bodywebsite .mark { - padding: 5px 10px; - background-color: #37c386; -} -.bodywebsite .list-unstyled { - padding-left: 0; - list-style: none; -} -.bodywebsite .list-inline { - padding-left: 0; - list-style: none; -} -.bodywebsite .list-inline-item { - display: inline-block; -} -.bodywebsite .list-inline-item:not(:last-child) { - margin-right: 5px; -} -.bodywebsite .initialism { - font-size: 90%; - text-transform: uppercase; -} -.bodywebsite .blockquote { - margin-bottom: 1rem; - font-size: 17.5px; -} -.bodywebsite .blockquote-footer { - display: block; - font-size: 80%; - color: #dedede; -} -.bodywebsite .blockquote-footer::before { - content: "\2014 \00A0"; -} -.bodywebsite .img-fluid { - max-width: 100%; - height: auto; -} -.bodywebsite code, -.bodywebsite kbd, -.bodywebsite pre, -.bodywebsite samp { - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; -} -.bodywebsite code { - padding: 10px 5px; - font-size: 90%; - color: #00030a; - background-color: #edeff4; - border-radius: 0; -} -.bodywebsite a > code { - padding: 0; - color: inherit; - background-color: inherit; -} -.bodywebsite kbd { - padding: 10px 5px; - font-size: 90%; - color: #fff; - background-color: #212529; - border-radius: 3px; - box-shadow: inset 0 -0.1rem 0 rgba(0, 0, 0, 0.25); -} -.bodywebsite kbd kbd { - padding: 0; - font-size: 100%; - font-weight: 700; - box-shadow: none; -} -.bodywebsite pre { - display: block; - margin-top: 0; - margin-bottom: 1rem; - font-size: 90%; - color: #212529; -} -.bodywebsite pre code { - padding: 0; - font-size: inherit; - color: inherit; - background-color: transparent; - border-radius: 0; -} -.bodywebsite .pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} -.bodywebsite .container { - width: 100%; - padding-right: 15px; - padding-left: 15px; - margin-right: auto; - margin-left: auto; -} -@media (min-width: 576px) { - .bodywebsite .container { - max-width: 540px; - } -} -@media (min-width: 768px) { - .bodywebsite .container { - max-width: 720px; - } -} -@media (min-width: 992px) { - .bodywebsite .container { - max-width: 960px; - } -} -@media (min-width: 1200px) { - .bodywebsite .container { - max-width: 1170px; - } -} -.bodywebsite .container-fluid { - width: 100%; - padding-right: 15px; - padding-left: 15px; - margin-right: auto; - margin-left: auto; -} -.bodywebsite .row { - display: flex; - flex-wrap: wrap; - margin-right: -15px; - margin-left: -15px; -} -.bodywebsite .no-gutters { - margin-right: 0; - margin-left: 0; -} -.bodywebsite .no-gutters > .col, -.bodywebsite .no-gutters > [class*="col-"] { - padding-right: 0; - padding-left: 0; -} -.bodywebsite .col-1, -.bodywebsite .col-2, -.bodywebsite .col-3, -.bodywebsite .col-4, -.bodywebsite .col-5, -.bodywebsite .col-6, -.bodywebsite .col-7, -.bodywebsite .col-8, -.bodywebsite .col-9, -.bodywebsite .col-10, -.bodywebsite .col-11, -.bodywebsite .col-12, -.bodywebsite .col, -.bodywebsite .col-auto, -.bodywebsite .col-sm-1, -.bodywebsite .col-sm-2, -.bodywebsite .col-sm-3, -.bodywebsite .col-sm-4, -.bodywebsite .col-sm-5, -.bodywebsite .col-sm-6, -.bodywebsite .col-sm-7, -.bodywebsite .col-sm-8, -.bodywebsite .col-sm-9, -.bodywebsite .col-sm-10, -.bodywebsite .col-sm-11, -.bodywebsite .col-sm-12, -.bodywebsite .col-sm, -.bodywebsite .col-sm-auto, -.bodywebsite .col-md-1, -.bodywebsite .col-md-2, -.bodywebsite .col-md-3, -.bodywebsite .col-md-4, -.bodywebsite .col-md-5, -.bodywebsite .col-md-6, -.bodywebsite .col-md-7, -.bodywebsite .col-md-8, -.bodywebsite .col-md-9, -.bodywebsite .col-md-10, -.bodywebsite .col-md-11, -.bodywebsite .col-md-12, -.bodywebsite .col-md, -.bodywebsite .col-md-auto, -.bodywebsite .col-lg-1, -.bodywebsite .col-lg-2, -.bodywebsite .col-lg-3, -.bodywebsite .col-lg-4, -.bodywebsite .col-lg-5, -.bodywebsite .col-lg-6, -.bodywebsite .col-lg-7, -.bodywebsite .col-lg-8, -.bodywebsite .col-lg-9, -.bodywebsite .col-lg-10, -.bodywebsite .col-lg-11, -.bodywebsite .col-lg-12, -.bodywebsite .col-lg, -.bodywebsite .col-lg-auto, -.bodywebsite .col-xl-1, -.bodywebsite .col-xl-2, -.bodywebsite .col-xl-3, -.bodywebsite .col-xl-4, -.bodywebsite .col-xl-5, -.bodywebsite .col-xl-6, -.bodywebsite .col-xl-7, -.bodywebsite .col-xl-8, -.bodywebsite .col-xl-9, -.bodywebsite .col-xl-10, -.bodywebsite .col-xl-11, -.bodywebsite .col-xl-12, -.bodywebsite .col-xl, -.bodywebsite .col-xl-auto, -.bodywebsite .col-xxl-1, -.bodywebsite .col-xxl-2, -.bodywebsite .col-xxl-3, -.bodywebsite .col-xxl-4, -.bodywebsite .col-xxl-5, -.bodywebsite .col-xxl-6, -.bodywebsite .col-xxl-7, -.bodywebsite .col-xxl-8, -.bodywebsite .col-xxl-9, -.bodywebsite .col-xxl-10, -.bodywebsite .col-xxl-11, -.bodywebsite .col-xxl-12, -.bodywebsite .col-xxl, -.bodywebsite .col-xxl-auto { - position: relative; - width: 100%; - min-height: 1px; - padding-right: 15px; - padding-left: 15px -} -.bodywebsite .col { - flex-basis: 0; - flex-grow: 1; - max-width: 100%; -} -.bodywebsite .col-auto { - flex: 0 0 auto; - width: auto; - max-width: none; -} -.bodywebsite .col-1 { - flex: 0 0 8.33333%; - max-width: 8.33333%; -} -.bodywebsite .col-2 { - flex: 0 0 16.66667%; - max-width: 16.66667%; -} -.bodywebsite .col-3 { - flex: 0 0 25%; - max-width: 25%; -} -.bodywebsite .col-4 { - flex: 0 0 33.33333%; - max-width: 33.33333%; -} -.bodywebsite .col-5 { - flex: 0 0 41.66667%; - max-width: 41.66667%; -} -.bodywebsite .col-6 { - flex: 0 0 50%; - max-width: 50%; -} -.bodywebsite .col-7 { - flex: 0 0 58.33333%; - max-width: 58.33333%; -} -.bodywebsite .col-8 { - flex: 0 0 66.66667%; - max-width: 66.66667%; -} -.bodywebsite .col-9 { - flex: 0 0 75%; - max-width: 75%; -} -.bodywebsite .col-10 { - flex: 0 0 83.33333%; - max-width: 83.33333%; -} -.bodywebsite .col-11 { - flex: 0 0 91.66667%; - max-width: 91.66667%; -} -.bodywebsite .col-12 { - flex: 0 0 100%; - max-width: 100%; -} -.bodywebsite .order-first { - order: -1; -} -.bodywebsite .order-1 { - order: 1; -} -.bodywebsite .order-2 { - order: 2; -} -.bodywebsite .order-3 { - order: 3; -} -.bodywebsite .order-4 { - order: 4; -} -.bodywebsite .order-5 { - order: 5; -} -.bodywebsite .order-6 { - order: 6; -} -.bodywebsite .order-7 { - order: 7; -} -.bodywebsite .order-8 { - order: 8; -} -.bodywebsite .order-9 { - order: 9; -} -.bodywebsite .order-10 { - order: 10; -} -.bodywebsite .order-11 { - order: 11; -} -.bodywebsite .order-12 { - order: 12; -} -.bodywebsite .offset-1 { - margin-left: 8.33333%; -} -.bodywebsite .offset-2 { - margin-left: 16.66667%; -} -.bodywebsite .offset-3 { - margin-left: 25%; -} -.bodywebsite .offset-4 { - margin-left: 33.33333%; -} -.bodywebsite .offset-5 { - margin-left: 41.66667%; -} -.bodywebsite .offset-6 { - margin-left: 50%; -} -.bodywebsite .offset-7 { - margin-left: 58.33333%; -} -.bodywebsite .offset-8 { - margin-left: 66.66667%; -} -.bodywebsite .offset-9 { - margin-left: 75%; -} -.bodywebsite .offset-10 { - margin-left: 83.33333%; -} -.bodywebsite .offset-11 { - margin-left: 91.66667%; -} -@media (min-width: 576px) { - .bodywebsite .col-sm { - flex-basis: 0; - flex-grow: 1; - max-width: 100%; - } - .bodywebsite .col-sm-auto { - flex: 0 0 auto; - width: auto; - max-width: none; - } - .bodywebsite .col-sm-1 { - flex: 0 0 8.33333%; - max-width: 8.33333%; - } - .bodywebsite .col-sm-2 { - flex: 0 0 16.66667%; - max-width: 16.66667%; - } - .bodywebsite .col-sm-3 { - flex: 0 0 25%; - max-width: 25%; - } - .bodywebsite .col-sm-4 { - flex: 0 0 33.33333%; - max-width: 33.33333%; - } - .bodywebsite .col-sm-5 { - flex: 0 0 41.66667%; - max-width: 41.66667%; - } - .bodywebsite .col-sm-6 { - flex: 0 0 50%; - max-width: 50%; - } - .bodywebsite .col-sm-7 { - flex: 0 0 58.33333%; - max-width: 58.33333%; - } - .bodywebsite .col-sm-8 { - flex: 0 0 66.66667%; - max-width: 66.66667%; - } - .bodywebsite .col-sm-9 { - flex: 0 0 75%; - max-width: 75%; - } - .bodywebsite .col-sm-10 { - flex: 0 0 83.33333%; - max-width: 83.33333%; - } - .bodywebsite .col-sm-11 { - flex: 0 0 91.66667%; - max-width: 91.66667%; - } - .bodywebsite .col-sm-12 { - flex: 0 0 100%; - max-width: 100%; - } - .bodywebsite .order-sm-first { - order: -1; - } - .bodywebsite .order-sm-1 { - order: 1; - } - .bodywebsite .order-sm-2 { - order: 2; - } - .bodywebsite .order-sm-3 { - order: 3; - } - .bodywebsite .order-sm-4 { - order: 4; - } - .bodywebsite .order-sm-5 { - order: 5; - } - .bodywebsite .order-sm-6 { - order: 6; - } - .bodywebsite .order-sm-7 { - order: 7; - } - .bodywebsite .order-sm-8 { - order: 8; - } - .bodywebsite .order-sm-9 { - order: 9; - } - .bodywebsite .order-sm-10 { - order: 10; - } - .bodywebsite .order-sm-11 { - order: 11; - } - .bodywebsite .order-sm-12 { - order: 12; - } - .bodywebsite .offset-sm-0 { - margin-left: 0; - } - .bodywebsite .offset-sm-1 { - margin-left: 8.33333%; - } - .bodywebsite .offset-sm-2 { - margin-left: 16.66667%; - } - .bodywebsite .offset-sm-3 { - margin-left: 25%; - } - .bodywebsite .offset-sm-4 { - margin-left: 33.33333%; - } - .bodywebsite .offset-sm-5 { - margin-left: 41.66667%; - } - .bodywebsite .offset-sm-6 { - margin-left: 50%; - } - .bodywebsite .offset-sm-7 { - margin-left: 58.33333%; - } - .bodywebsite .offset-sm-8 { - margin-left: 66.66667%; - } - .bodywebsite .offset-sm-9 { - margin-left: 75%; - } - .bodywebsite .offset-sm-10 { - margin-left: 83.33333%; - } - .bodywebsite .offset-sm-11 { - margin-left: 91.66667%; - } -} -@media (min-width: 768px) { - .bodywebsite .col-md { - flex-basis: 0; - flex-grow: 1; - max-width: 100%; - } - .bodywebsite .col-md-auto { - flex: 0 0 auto; - width: auto; - max-width: none; - } - .bodywebsite .col-md-1 { - flex: 0 0 8.33333%; - max-width: 8.33333%; - } - .bodywebsite .col-md-2 { - flex: 0 0 16.66667%; - max-width: 16.66667%; - } - .bodywebsite .col-md-3 { - flex: 0 0 25%; - max-width: 25%; - } - .bodywebsite .col-md-4 { - flex: 0 0 33.33333%; - max-width: 33.33333%; - } - .bodywebsite .col-md-5 { - flex: 0 0 41.66667%; - max-width: 41.66667%; - } - .bodywebsite .col-md-6 { - flex: 0 0 50%; - max-width: 50%; - } - .bodywebsite .col-md-7 { - flex: 0 0 58.33333%; - max-width: 58.33333%; - } - .bodywebsite .col-md-8 { - flex: 0 0 66.66667%; - max-width: 66.66667%; - } - .bodywebsite .col-md-9 { - flex: 0 0 75%; - max-width: 75%; - } - .bodywebsite .col-md-10 { - flex: 0 0 83.33333%; - max-width: 83.33333%; - } - .bodywebsite .col-md-11 { - flex: 0 0 91.66667%; - max-width: 91.66667%; - } - .bodywebsite .col-md-12 { - flex: 0 0 100%; - max-width: 100%; - } - .bodywebsite .order-md-first { - order: -1; - } - .bodywebsite .order-md-1 { - order: 1; - } - .bodywebsite .order-md-2 { - order: 2; - } - .bodywebsite .order-md-3 { - order: 3; - } - .bodywebsite .order-md-4 { - order: 4; - } - .bodywebsite .order-md-5 { - order: 5; - } - .bodywebsite .order-md-6 { - order: 6; - } - .bodywebsite .order-md-7 { - order: 7; - } - .bodywebsite .order-md-8 { - order: 8; - } - .bodywebsite .order-md-9 { - order: 9; - } - .bodywebsite .order-md-10 { - order: 10; - } - .bodywebsite .order-md-11 { - order: 11; - } - .bodywebsite .order-md-12 { - order: 12; - } - .bodywebsite .offset-md-0 { - margin-left: 0; - } - .bodywebsite .offset-md-1 { - margin-left: 8.33333%; - } - .bodywebsite .offset-md-2 { - margin-left: 16.66667%; - } - .bodywebsite .offset-md-3 { - margin-left: 25%; - } - .bodywebsite .offset-md-4 { - margin-left: 33.33333%; - } - .bodywebsite .offset-md-5 { - margin-left: 41.66667%; - } - .bodywebsite .offset-md-6 { - margin-left: 50%; - } - .bodywebsite .offset-md-7 { - margin-left: 58.33333%; - } - .bodywebsite .offset-md-8 { - margin-left: 66.66667%; - } - .bodywebsite .offset-md-9 { - margin-left: 75%; - } - .bodywebsite .offset-md-10 { - margin-left: 83.33333%; - } - .bodywebsite .offset-md-11 { - margin-left: 91.66667%; - } -} -@media (min-width: 992px) { - .bodywebsite .col-lg { - flex-basis: 0; - flex-grow: 1; - max-width: 100%; - } - .bodywebsite .col-lg-auto { - flex: 0 0 auto; - width: auto; - max-width: none; - } - .bodywebsite .col-lg-1 { - flex: 0 0 8.33333%; - max-width: 8.33333%; - } - .bodywebsite .col-lg-2 { - flex: 0 0 16.66667%; - max-width: 16.66667%; - } - .bodywebsite .col-lg-3 { - flex: 0 0 25%; - max-width: 25%; - } - .bodywebsite .col-lg-4 { - flex: 0 0 33.33333%; - max-width: 33.33333%; - } - .bodywebsite .col-lg-5 { - flex: 0 0 41.66667%; - max-width: 41.66667%; - } - .bodywebsite .col-lg-6 { - flex: 0 0 50%; - max-width: 50%; - } - .bodywebsite .col-lg-7 { - flex: 0 0 58.33333%; - max-width: 58.33333%; - } - .bodywebsite .col-lg-8 { - flex: 0 0 66.66667%; - max-width: 66.66667%; - } - .bodywebsite .col-lg-9 { - flex: 0 0 75%; - max-width: 75%; - } - .bodywebsite .col-lg-10 { - flex: 0 0 83.33333%; - max-width: 83.33333%; - } - .bodywebsite .col-lg-11 { - flex: 0 0 91.66667%; - max-width: 91.66667%; - } - .bodywebsite .col-lg-12 { - flex: 0 0 100%; - max-width: 100%; - } - .bodywebsite .order-lg-first { - order: -1; - } - .bodywebsite .order-lg-1 { - order: 1; - } - .bodywebsite .order-lg-2 { - order: 2; - } - .bodywebsite .order-lg-3 { - order: 3; - } - .bodywebsite .order-lg-4 { - order: 4; - } - .bodywebsite .order-lg-5 { - order: 5; - } - .bodywebsite .order-lg-6 { - order: 6; - } - .bodywebsite .order-lg-7 { - order: 7; - } - .bodywebsite .order-lg-8 { - order: 8; - } - .bodywebsite .order-lg-9 { - order: 9; - } - .bodywebsite .order-lg-10 { - order: 10; - } - .bodywebsite .order-lg-11 { - order: 11; - } - .bodywebsite .order-lg-12 { - order: 12; - } - .bodywebsite .offset-lg-0 { - margin-left: 0; - } - .bodywebsite .offset-lg-1 { - margin-left: 8.33333%; - } - .bodywebsite .offset-lg-2 { - margin-left: 16.66667%; - } - .bodywebsite .offset-lg-3 { - margin-left: 25%; - } - .bodywebsite .offset-lg-4 { - margin-left: 33.33333%; - } - .bodywebsite .offset-lg-5 { - margin-left: 41.66667%; - } - .bodywebsite .offset-lg-6 { - margin-left: 50%; - } - .bodywebsite .offset-lg-7 { - margin-left: 58.33333%; - } - .bodywebsite .offset-lg-8 { - margin-left: 66.66667%; - } - .bodywebsite .offset-lg-9 { - margin-left: 75%; - } - .bodywebsite .offset-lg-10 { - margin-left: 83.33333%; - } - .bodywebsite .offset-lg-11 { - margin-left: 91.66667%; - } -} -@media (min-width: 1200px) { - .bodywebsite .col-xl { - flex-basis: 0; - flex-grow: 1; - max-width: 100%; - } - .bodywebsite .col-xl-auto { - flex: 0 0 auto; - width: auto; - max-width: none; - } - .bodywebsite .col-xl-1 { - flex: 0 0 8.33333%; - max-width: 8.33333%; - } - .bodywebsite .col-xl-2 { - flex: 0 0 16.66667%; - max-width: 16.66667%; - } - .bodywebsite .col-xl-3 { - flex: 0 0 25%; - max-width: 25%; - } - .bodywebsite .col-xl-4 { - flex: 0 0 33.33333%; - max-width: 33.33333%; - } - .bodywebsite .col-xl-5 { - flex: 0 0 41.66667%; - max-width: 41.66667%; - } - .bodywebsite .col-xl-6 { - flex: 0 0 50%; - max-width: 50%; - } - .bodywebsite .col-xl-7 { - flex: 0 0 58.33333%; - max-width: 58.33333%; - } - .bodywebsite .col-xl-8 { - flex: 0 0 66.66667%; - max-width: 66.66667%; - } - .bodywebsite .col-xl-9 { - flex: 0 0 75%; - max-width: 75%; - } - .bodywebsite .col-xl-10 { - flex: 0 0 83.33333%; - max-width: 83.33333%; - } - .bodywebsite .col-xl-11 { - flex: 0 0 91.66667%; - max-width: 91.66667%; - } - .bodywebsite .col-xl-12 { - flex: 0 0 100%; - max-width: 100%; - } - .bodywebsite .order-xl-first { - order: -1; - } - .bodywebsite .order-xl-1 { - order: 1; - } - .bodywebsite .order-xl-2 { - order: 2; - } - .bodywebsite .order-xl-3 { - order: 3; - } - .bodywebsite .order-xl-4 { - order: 4; - } - .bodywebsite .order-xl-5 { - order: 5; - } - .bodywebsite .order-xl-6 { - order: 6; - } - .bodywebsite .order-xl-7 { - order: 7; - } - .bodywebsite .order-xl-8 { - order: 8; - } - .bodywebsite .order-xl-9 { - order: 9; - } - .bodywebsite .order-xl-10 { - order: 10; - } - .bodywebsite .order-xl-11 { - order: 11; - } - .bodywebsite .order-xl-12 { - order: 12; - } - .bodywebsite .offset-xl-0 { - margin-left: 0; - } - .bodywebsite .offset-xl-1 { - margin-left: 8.33333%; - } - .bodywebsite .offset-xl-2 { - margin-left: 16.66667%; - } - .bodywebsite .offset-xl-3 { - margin-left: 25%; - } - .bodywebsite .offset-xl-4 { - margin-left: 33.33333%; - } - .bodywebsite .offset-xl-5 { - margin-left: 41.66667%; - } - .bodywebsite .offset-xl-6 { - margin-left: 50%; - } - .bodywebsite .offset-xl-7 { - margin-left: 58.33333%; - } - .bodywebsite .offset-xl-8 { - margin-left: 66.66667%; - } - .bodywebsite .offset-xl-9 { - margin-left: 75%; - } - .bodywebsite .offset-xl-10 { - margin-left: 83.33333%; - } - .bodywebsite .offset-xl-11 { - margin-left: 91.66667%; - } -} -@media (min-width: 1800px) { - .bodywebsite .col-xxl { - flex-basis: 0; - flex-grow: 1; - max-width: 100%; - } - .bodywebsite .col-xxl-auto { - flex: 0 0 auto; - width: auto; - max-width: none; - } - .bodywebsite .col-xxl-1 { - flex: 0 0 8.33333%; - max-width: 8.33333%; - } - .bodywebsite .col-xxl-2 { - flex: 0 0 16.66667%; - max-width: 16.66667%; - } - .bodywebsite .col-xxl-3 { - flex: 0 0 25%; - max-width: 25%; - } - .bodywebsite .col-xxl-4 { - flex: 0 0 33.33333%; - max-width: 33.33333%; - } - .bodywebsite .col-xxl-5 { - flex: 0 0 41.66667%; - max-width: 41.66667%; - } - .bodywebsite .col-xxl-6 { - flex: 0 0 50%; - max-width: 50%; - } - .bodywebsite .col-xxl-7 { - flex: 0 0 58.33333%; - max-width: 58.33333%; - } - .bodywebsite .col-xxl-8 { - flex: 0 0 66.66667%; - max-width: 66.66667%; - } - .bodywebsite .col-xxl-9 { - flex: 0 0 75%; - max-width: 75%; - } - .bodywebsite .col-xxl-10 { - flex: 0 0 83.33333%; - max-width: 83.33333%; - } - .bodywebsite .col-xxl-11 { - flex: 0 0 91.66667%; - max-width: 91.66667%; - } - .bodywebsite .col-xxl-12 { - flex: 0 0 100%; - max-width: 100%; - } - .bodywebsite .order-xxl-first { - order: -1; - } - .bodywebsite .order-xxl-1 { - order: 1; - } - .bodywebsite .order-xxl-2 { - order: 2; - } - .bodywebsite .order-xxl-3 { - order: 3; - } - .bodywebsite .order-xxl-4 { - order: 4; - } - .bodywebsite .order-xxl-5 { - order: 5; - } - .bodywebsite .order-xxl-6 { - order: 6; - } - .bodywebsite .order-xxl-7 { - order: 7; - } - .bodywebsite .order-xxl-8 { - order: 8; - } - .bodywebsite .order-xxl-9 { - order: 9; - } - .bodywebsite .order-xxl-10 { - order: 10; - } - .bodywebsite .order-xxl-11 { - order: 11; - } - .bodywebsite .order-xxl-12 { - order: 12; - } - .bodywebsite .offset-xxl-0 { - margin-left: 0; - } - .bodywebsite .offset-xxl-1 { - margin-left: 8.33333%; - } - .bodywebsite .offset-xxl-2 { - margin-left: 16.66667%; - } - .bodywebsite .offset-xxl-3 { - margin-left: 25%; - } - .bodywebsite .offset-xxl-4 { - margin-left: 33.33333%; - } - .bodywebsite .offset-xxl-5 { - margin-left: 41.66667%; - } - .bodywebsite .offset-xxl-6 { - margin-left: 50%; - } - .bodywebsite .offset-xxl-7 { - margin-left: 58.33333%; - } - .bodywebsite .offset-xxl-8 { - margin-left: 66.66667%; - } - .bodywebsite .offset-xxl-9 { - margin-left: 75%; - } - .bodywebsite .offset-xxl-10 { - margin-left: 83.33333%; - } - .bodywebsite .offset-xxl-11 { - margin-left: 91.66667%; - } -} -.bodywebsite .table { - width: 100%; - max-width: 100%; - margin-bottom: 1rem; - background-color: transparent; -} -.bodywebsite .table th, -.bodywebsite .table td { - padding: 17px 25px 18px; - vertical-align: top; - border-top: 1px solid #d9d9d9; -} -.bodywebsite .table thead th { - vertical-align: bottom; - border-bottom: 2px solid #d9d9d9; -} -.bodywebsite .table tbody + tbody { - border-top: 2px solid #d9d9d9; -} -.bodywebsite .table .table { - background-color: #fff; -} -.bodywebsite .table-sm th, -.bodywebsite .table-sm td { - padding: 0.3rem; -} -.bodywebsite .table-bordered { - border: 1px solid #d9d9d9; -} -.bodywebsite .table-bordered th, -.bodywebsite .table-bordered td { - border: 1px solid #d9d9d9; -} -.bodywebsite .table-bordered thead th, -.bodywebsite .table-bordered thead td { - border-bottom-width: 2px; -} -.bodywebsite .table-striped tbody tr:nth-of-type(odd) { - background-color: rgba(0, 0, 0, 0.05); -} -.bodywebsite .table-hover tbody tr:hover { - background-color: rgba(0, 0, 0, 0.075); -} -.bodywebsite .table-primary, -.bodywebsite .table-primary > th, -.bodywebsite .table-primary > td { - background-color: #b8daff; -} -.bodywebsite .table-hover .table-primary:hover { - background-color: #9fcdff; -} -.bodywebsite .table-hover .table-primary:hover > td, -.bodywebsite .table-hover .table-primary:hover > th { - background-color: #9fcdff; -} -.bodywebsite .table-secondary, -.bodywebsite .table-secondary > th, -.bodywebsite .table-secondary > td { - background-color: #dddfe2; -} -.bodywebsite .table-hover .table-secondary:hover { - background-color: #cfd2d6; -} -.bodywebsite .table-hover .table-secondary:hover > td, -.bodywebsite .table-hover .table-secondary:hover > th { - background-color: #cfd2d6; -} -.bodywebsite .table-success, -.bodywebsite .table-success > th, -.bodywebsite .table-success > td { - background-color: #c3e6cb; -} -.bodywebsite .table-hover .table-success:hover { - background-color: #b1dfbb; -} -.bodywebsite .table-hover .table-success:hover > td, -.bodywebsite .table-hover .table-success:hover > th { - background-color: #b1dfbb; -} -.bodywebsite .table-info, -.bodywebsite .table-info > th, -.bodywebsite .table-info > td { - background-color: #bee5eb; -} -.bodywebsite .table-hover .table-info:hover { - background-color: #abdde5; -} -.bodywebsite .table-hover .table-info:hover > td, -.bodywebsite .table-hover .table-info:hover > th { - background-color: #abdde5; -} -.bodywebsite .table-warning, -.bodywebsite .table-warning > th, -.bodywebsite .table-warning > td { - background-color: #ffeeba; -} -.bodywebsite .table-hover .table-warning:hover { - background-color: #ffe8a1; -} -.bodywebsite .table-hover .table-warning:hover > td, -.bodywebsite .table-hover .table-warning:hover > th { - background-color: #ffe8a1; -} -.bodywebsite .table-danger, -.bodywebsite .table-danger > th, -.bodywebsite .table-danger > td { - background-color: #f5c6cb; -} -.bodywebsite .table-hover .table-danger:hover { - background-color: #f1b0b7; -} -.bodywebsite .table-hover .table-danger:hover > td, -.bodywebsite .table-hover .table-danger:hover > th { - background-color: #f1b0b7; -} -.bodywebsite .table-light, -.bodywebsite .table-light > th, -.bodywebsite .table-light > td { - background-color: #fdfdfe; -} -.bodywebsite .table-hover .table-light:hover { - background-color: #ececf6; -} -.bodywebsite .table-hover .table-light:hover > td, -.bodywebsite .table-hover .table-light:hover > th { - background-color: #ececf6; -} -.bodywebsite .table-dark, -.bodywebsite .table-dark > th, -.bodywebsite .table-dark > td { - background-color: #c6c8ca; -} -.bodywebsite .table-hover .table-dark:hover { - background-color: #b9bbbe; -} -.bodywebsite .table-hover .table-dark:hover > td, -.bodywebsite .table-hover .table-dark:hover > th { - background-color: #b9bbbe; -} -.bodywebsite .table-active, -.bodywebsite .table-active > th, -.bodywebsite .table-active > td { - background-color: rgba(0, 0, 0, 0.075); -} -.bodywebsite .table-hover .table-active:hover { - background-color: rgba(0, 0, 0, 0.075); -} -.bodywebsite .table-hover .table-active:hover > td, -.bodywebsite .table-hover .table-active:hover > th { - background-color: rgba(0, 0, 0, 0.075); -} -.bodywebsite .table .thead-dark th { - color: #fff; - background-color: #212529; - border-color: #32383e; -} -.bodywebsite .table .thead-light th { - color: #495057; - background-color: #e9ecef; - border-color: #d9d9d9; -} -.bodywebsite .table-dark { - color: #fff; - background-color: #212529; -} -.bodywebsite .table-dark th, -.bodywebsite .table-dark td, -.bodywebsite .table-dark thead th { - border-color: #32383e; -} -.bodywebsite .table-dark.table-bordered { - border: 0; -} -.bodywebsite .table-dark.table-striped tbody tr:nth-of-type(odd) { - background-color: rgba(255, 255, 255, 0.05); -} -.bodywebsite .table-dark.table-hover tbody tr:hover { - background-color: rgba(255, 255, 255, 0.075); -} -@media (max-width: 575px) { - .bodywebsite .table-responsive-sm { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; - } - .bodywebsite .table-responsive-sm.table-bordered { - border: 0; - } -} -@media (max-width: 767px) { - .bodywebsite .table-responsive-md { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; - } - .bodywebsite .table-responsive-md.table-bordered { - border: 0; - } -} -@media (max-width: 991px) { - .bodywebsite .table-responsive-lg { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; - } - .bodywebsite .table-responsive-lg.table-bordered { - border: 0; - } -} -@media (max-width: 1199px) { - .bodywebsite .table-responsive-xl { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; - } - .bodywebsite .table-responsive-xl.table-bordered { - border: 0; - } -} -@media (max-width: 1799px) { - .bodywebsite .table-responsive-xxl { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; - } - .bodywebsite .table-responsive-xxl.table-bordered { - border: 0; - } -} -.bodywebsite .table-responsive { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; -} -.bodywebsite .table-responsive.table-bordered { - border: 0; -} -.bodywebsite .form-input { - display: block; - width: 100%; - padding: 11px 35px; - font-size: 14px; - line-height: 1.25; - background-image: none; - background-clip: padding-box; - border: 1px solid #ced4da; - border-radius: 0.25rem; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; -} -.bodywebsite .form-input::-ms-expand { - background-color: transparent; - border: 0; -} -.bodywebsite .form-input:focus { - color: #495057; - background-color: #fff; - border-color: #80bdff; - outline: none; - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} -.bodywebsite .form-input::placeholder { - color: #868e96; - opacity: 1; -} -.bodywebsite .form-input:disabled, -.bodywebsite .form-input[readonly] { - background-color: #e9ecef; - opacity: 1; -} -.bodywebsite select.form-input:not([size]):not([multiple]) { - height: calc(4.25rem); -} -.bodywebsite .form-input-file, -.bodywebsite .form-input-range { - display: block; -} -.bodywebsite .col-form-label { - padding-top: calc(12px); - padding-bottom: calc(12px); - margin-bottom: 0; - line-height: 1.25; -} -.bodywebsite .col-form-label-lg { - padding-top: calc(13px); - padding-bottom: calc(13px); - font-size: 18px; - line-height: 1.5; -} -.bodywebsite .col-form-label-sm { - padding-top: calc(6px); - padding-bottom: calc(6px); - font-size: 12px; - line-height: 1.5; -} -.bodywebsite .col-form-legend { - padding-top: 11px; - padding-bottom: 11px; - margin-bottom: 0; - font-size: 14px; -} -.bodywebsite .form-input-plaintext { - padding-top: 11px; - padding-bottom: 11px; - margin-bottom: 0; - line-height: 1.25; - background-color: transparent; - border: solid transparent; - border-width: 1px 0; -} -.bodywebsite .form-input-plaintext.form-input-sm, -.bodywebsite .input-group-sm > .form-input-plaintext.form-input, -.bodywebsite .input-group-sm > .form-input-plaintext.input-group-addon, -.bodywebsite .input-group-sm > .input-group-btn > .form-input-plaintext.btn, -.bodywebsite .form-input-plaintext.form-input-lg, -.bodywebsite .input-group-lg > .form-input-plaintext.form-input, -.bodywebsite .input-group-lg > .form-input-plaintext.input-group-addon, -.bodywebsite .input-group-lg > .input-group-btn > .form-input-plaintext.btn { - padding-right: 0; - padding-left: 0; -} -.bodywebsite .form-input-sm, -.bodywebsite .input-group-sm > .form-input, -.bodywebsite .input-group-sm > .input-group-addon, -.bodywebsite .input-group-sm > .input-group-btn > .btn { - padding: 5px 25px; - font-size: 12px; - line-height: 1.5; - border-radius: 0.2rem; -} -.bodywebsite select.form-input-sm:not([size]):not([multiple]), -.bodywebsite .input-group-sm > select.form-input:not([size]):not([multiple]), -.bodywebsite .input-group-sm > select.input-group-addon:not([size]):not([multiple]), -.bodywebsite .input-group-sm > .input-group-btn > select.btn:not([size]):not([multiple]) { - height: calc(3.8125rem); -} -.bodywebsite .form-input-lg, -.bodywebsite .input-group-lg > .form-input, -.bodywebsite .input-group-lg > .input-group-addon, -.bodywebsite .input-group-lg > .input-group-btn > .btn { - padding: 12px 50px; - font-size: 18px; - line-height: 1.5; - border-radius: 0.3rem; -} -.bodywebsite select.form-input-lg:not([size]):not([multiple]), -.bodywebsite .input-group-lg > select.form-input:not([size]):not([multiple]), -.bodywebsite .input-group-lg > select.input-group-addon:not([size]):not([multiple]), -.bodywebsite .input-group-lg > .input-group-btn > select.btn:not([size]):not([multiple]) { - height: calc(4.875rem); -} -.bodywebsite .form-label { - margin-bottom: 1rem; -} -.bodywebsite .form-text { - display: block; - margin-top: 0.25rem; -} -.bodywebsite .form-row { - display: flex; - flex-wrap: wrap; - margin-right: -5px; - margin-left: -5px; -} -.bodywebsite .form-row > .col, -.bodywebsite .form-row > [class*="col-"] { - padding-right: 5px; - padding-left: 5px; -} -.bodywebsite .form-check { - position: relative; - display: block; - margin-bottom: 0.5rem; -} -.bodywebsite .form-check.disabled .form-check-label { - color: #dedede; -} -.bodywebsite .form-check-label { - padding-left: 1.25rem; - margin-bottom: 0; -} -.bodywebsite .form-check-input { - position: absolute; - margin-top: 0.25rem; - margin-left: -1.25rem; -} -.bodywebsite .form-check-inline { - display: inline-block; - margin-right: 0.75rem; -} -.bodywebsite .form-check-inline .form-check-label { - vertical-align: middle; -} -.bodywebsite .valid-feedback { - display: none; - margin-top: .25rem; - font-size: .875rem; - color: #98bf44; -} -.bodywebsite .valid-tooltip { - position: absolute; - top: 100%; - z-index: 5; - display: none; - width: 250px; - padding: .5rem; - margin-top: .1rem; - font-size: .875rem; - line-height: 1; - color: #fff; - /* background-color: rgba(152, 191, 68, 0.8); */ - border-radius: .2rem; -} -.bodywebsite .was-validated .form-input:valid, -.bodywebsite .form-input.is-valid, -.bodywebsite .was-validated .custom-select:valid, -.bodywebsite .custom-select.is-valid { - border-color: #98bf44; -} -.bodywebsite .was-validated .form-input:valid:focus, -.bodywebsite .form-input.is-valid:focus, -.bodywebsite .was-validated .custom-select:valid:focus, -.bodywebsite .custom-select.is-valid:focus { - box-shadow: 0 0 0 0.2rem rgba(152, 191, 68, 0.25); -} -.bodywebsite .was-validated .form-input:valid ~ .valid-feedback, -.bodywebsite .was-validated .form-input:valid ~ .valid-tooltip, -.bodywebsite .form-input.is-valid ~ .valid-feedback, -.bodywebsite .form-input.is-valid ~ .valid-tooltip, -.bodywebsite .was-validated .custom-select:valid ~ .valid-feedback, -.bodywebsite .was-validated .custom-select:valid ~ .valid-tooltip, -.bodywebsite .custom-select.is-valid ~ .valid-feedback, -.bodywebsite .custom-select.is-valid ~ .valid-tooltip { - display: block; -} -.bodywebsite .was-validated .form-check-input:valid + .form-check-label, -.bodywebsite .form-check-input.is-valid + .form-check-label { - color: #98bf44; -} -.bodywebsite .was-validated .custom-control-input:valid ~ .custom-control-indicator, -.bodywebsite .custom-control-input.is-valid ~ .custom-control-indicator { - background-color: rgba(152, 191, 68, 0.25); -} -.bodywebsite .was-validated .custom-control-input:valid ~ .custom-control-description, -.bodywebsite .custom-control-input.is-valid ~ .custom-control-description { - color: #98bf44; -} -.bodywebsite .was-validated .custom-file-input:valid ~ .custom-file-control, -.bodywebsite .custom-file-input.is-valid ~ .custom-file-control { - border-color: #98bf44; -} -.bodywebsite .was-validated .custom-file-input:valid ~ .custom-file-control::before, -.bodywebsite .custom-file-input.is-valid ~ .custom-file-control::before { - border-color: inherit; -} -.bodywebsite .was-validated .custom-file-input:valid:focus, -.bodywebsite .custom-file-input.is-valid:focus { - box-shadow: 0 0 0 0.2rem rgba(152, 191, 68, 0.25); -} -.bodywebsite .invalid-feedback { - display: none; - margin-top: .25rem; - font-size: .875rem; - color: #f5543f; -} -.bodywebsite .invalid-tooltip { - position: absolute; - top: 100%; - z-index: 5; - display: none; - width: 250px; - padding: .5rem; - margin-top: .1rem; - font-size: .875rem; - line-height: 1; - color: #fff; - background-color: rgba(245, 84, 63, 0.8); - border-radius: .2rem; -} -.bodywebsite .was-validated .form-input:invalid, -.bodywebsite .form-input.is-invalid, -.bodywebsite .was-validated .custom-select:invalid, -.bodywebsite .custom-select.is-invalid { - border-color: #f5543f; -} -.bodywebsite .was-validated .form-input:invalid:focus, -.bodywebsite .form-input.is-invalid:focus, -.bodywebsite .was-validated .custom-select:invalid:focus, -.bodywebsite .custom-select.is-invalid:focus { - box-shadow: 0 0 0 0.2rem rgba(245, 84, 63, 0.25); -} -.bodywebsite .was-validated .form-input:invalid ~ .invalid-feedback, -.bodywebsite .was-validated .form-input:invalid ~ .invalid-tooltip, -.bodywebsite .form-input.is-invalid ~ .invalid-feedback, -.bodywebsite .form-input.is-invalid ~ .invalid-tooltip, -.bodywebsite .was-validated .custom-select:invalid ~ .invalid-feedback, -.bodywebsite .was-validated .custom-select:invalid ~ .invalid-tooltip, -.bodywebsite .custom-select.is-invalid ~ .invalid-feedback, -.bodywebsite .custom-select.is-invalid ~ .invalid-tooltip { - display: block; -} -.bodywebsite .was-validated .form-check-input:invalid + .form-check-label, -.bodywebsite .form-check-input.is-invalid + .form-check-label { - color: #f5543f; -} -.bodywebsite .was-validated .custom-control-input:invalid ~ .custom-control-indicator, -.bodywebsite .custom-control-input.is-invalid ~ .custom-control-indicator { - background-color: rgba(245, 84, 63, 0.25); -} -.bodywebsite .was-validated .custom-control-input:invalid ~ .custom-control-description, -.bodywebsite .custom-control-input.is-invalid ~ .custom-control-description { - color: #f5543f; -} -.bodywebsite .was-validated .custom-file-input:invalid ~ .custom-file-control, -.bodywebsite .custom-file-input.is-invalid ~ .custom-file-control { - border-color: #f5543f; -} -.bodywebsite .was-validated .custom-file-input:invalid ~ .custom-file-control::before, -.bodywebsite .custom-file-input.is-invalid ~ .custom-file-control::before { - border-color: inherit; -} -.bodywebsite .was-validated .custom-file-input:invalid:focus, -.bodywebsite .custom-file-input.is-invalid:focus { - box-shadow: 0 0 0 0.2rem rgba(245, 84, 63, 0.25); -} -.bodywebsite .form-inline { - display: flex; - flex-flow: row wrap; - align-items: center; -} -.bodywebsite .form-inline .form-check { - width: 100%; -} -@media (min-width: 576px) { - .bodywebsite .form-inline label { - display: flex; - align-items: center; - justify-content: center; - margin-bottom: 0; - } - .bodywebsite .form-inline .form-label { - display: flex; - flex: 0 0 auto; - flex-flow: row wrap; - align-items: center; - margin-bottom: 0; - } - .bodywebsite .form-inline .form-input { - display: inline-block; - width: auto; - vertical-align: middle; - } - .bodywebsite .form-inline .form-input-plaintext { - display: inline-block; - } - .bodywebsite .form-inline .input-group { - width: auto; - } - .bodywebsite .form-inline .form-check { - display: flex; - align-items: center; - justify-content: center; - width: auto; - margin-top: 0; - margin-bottom: 0; - } - .bodywebsite .form-inline .form-check-label { - padding-left: 0; - } - .bodywebsite .form-inline .form-check-input { - position: relative; - margin-top: 0; - margin-right: 0.25rem; - margin-left: 0; - } - .bodywebsite .form-inline .custom-control { - display: flex; - align-items: center; - justify-content: center; - padding-left: 0; - } - .bodywebsite .form-inline .custom-control-indicator { - position: static; - display: inline-block; - margin-right: 0.25rem; - vertical-align: text-bottom; - } - .bodywebsite .form-inline .has-feedback .form-input-feedback { - top: 0; - } -} -.bodywebsite .btn { - display: inline-block; - font-weight: 700; - text-align: center; - white-space: nowrap; - vertical-align: middle; - user-select: none; - border: 1px solid transparent; - padding: 11px 35px; - font-size: 14px; - line-height: 1.25; - border-radius: 5px; - transition: all 0.15s ease-in-out; -} -.bodywebsite .btn:focus, -.bodywebsite .btn:hover { - text-decoration: none; -} -.bodywebsite .btn:focus, -.bodywebsite .btn.focus { - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} -.bodywebsite .btn.disabled, -.bodywebsite .btn:disabled { - opacity: .65; - box-shadow: none; -} -.bodywebsite .btn:not([disabled]):not(.disabled):active, -.bodywebsite .btn:not([disabled]):not(.disabled).active { - background-image: none; - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25), 0; -} -.bodywebsite a.btn.disabled, -.bodywebsite fieldset[disabled] a.btn { - pointer-events: none; -} -.bodywebsite .btn-primary { - color: #fff; - background-color: #007bff; - border-color: #007bff; - box-shadow: 0; -} -.bodywebsite .btn-primary:focus, -.bodywebsite .btn-primary.focus { - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); -} -.bodywebsite .btn-primary.maincolorbisbackground:focus, -.bodywebsite .btn-primary.maincolorbisbackground.focus { - box-shadow: 0 0 0 0.2rem rgba(0, 255, 123, 0.5); -} -.bodywebsite .btn-primary.maincolorbisbackground:hover { - box-shadow: 1px 1px 8px #aaa; -} -.bodywebsite .btn-primary.disabled, -.bodywebsite .btn-primary:disabled { - background-color: #007bff; - border-color: #007bff; -} -.bodywebsite .btn-primary:not([disabled]):not(.disabled):active, -.bodywebsite .btn-primary:not([disabled]):not(.disabled).active, -.bodywebsite .show > .btn-primary.dropdown-toggle { - color: #fff; - background-color: #0062cc; - border-color: #005cbf; - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); -} -.bodywebsite .btn-secondary { - color: #fff; - background-color: #868e96; - border-color: #868e96; - box-shadow: 0; -} -.bodywebsite .btn-secondary:hover { - color: #fff; - background-color: #727b84; - border-color: #6c757d; -} -.bodywebsite .btn-secondary:focus, -.bodywebsite .btn-secondary.focus { - box-shadow: 0 0 0 0.2rem rgba(134, 142, 150, 0.5); -} -.bodywebsite .btn-secondary.disabled, -.bodywebsite .btn-secondary:disabled { - background-color: #868e96; - border-color: #868e96; -} -.bodywebsite .btn-secondary:not([disabled]):not(.disabled):active, -.bodywebsite .btn-secondary:not([disabled]):not(.disabled).active, -.bodywebsite .show > .btn-secondary.dropdown-toggle { - color: #fff; - background-color: #6c757d; - border-color: #666e76; - box-shadow: 0 0 0 0.2rem rgba(134, 142, 150, 0.5); -} -.bodywebsite .btn-success { - color: #fff; - background-color: #28a745; - border-color: #28a745; - box-shadow: 0; -} -.bodywebsite .btn-success:hover { - color: #fff; - background-color: #218838; - border-color: #1e7e34; -} -.bodywebsite .btn-success:focus, -.bodywebsite .btn-success.focus { - box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); -} -.bodywebsite .btn-success.disabled, -.bodywebsite .btn-success:disabled { - background-color: #28a745; - border-color: #28a745; -} -.bodywebsite .btn-success:not([disabled]):not(.disabled):active, -.bodywebsite .btn-success:not([disabled]):not(.disabled).active, -.bodywebsite .show > .btn-success.dropdown-toggle { - color: #fff; - background-color: #1e7e34; - border-color: #1c7430; - box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); -} -.bodywebsite .btn-info { - color: #fff; - background-color: #17a2b8; - border-color: #17a2b8; - box-shadow: 0; -} -.bodywebsite .btn-info:hover { - color: #fff; - background-color: #138496; - border-color: #117a8b; -} -.bodywebsite .btn-info:focus, -.bodywebsite .btn-info.focus { - box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); -} -.bodywebsite .btn-info.disabled, -.bodywebsite .btn-info:disabled { - background-color: #17a2b8; - border-color: #17a2b8; -} -.bodywebsite .btn-info:not([disabled]):not(.disabled):active, -.bodywebsite .btn-info:not([disabled]):not(.disabled).active, -.bodywebsite .show > .btn-info.dropdown-toggle { - color: #fff; - background-color: #117a8b; - border-color: #10707f; - box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); -} -.bodywebsite .btn-warning { - color: #111; - background-color: #ffc107; - border-color: #ffc107; - box-shadow: 0; -} -.bodywebsite .btn-warning:hover { - color: #111; - background-color: #e0a800; - border-color: #d39e00; -} -.bodywebsite .btn-warning:focus, -.bodywebsite .btn-warning.focus { - box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); -} -.bodywebsite .btn-warning.disabled, -.bodywebsite .btn-warning:disabled { - background-color: #ffc107; - border-color: #ffc107; -} -.bodywebsite .btn-warning:not([disabled]):not(.disabled):active, -.bodywebsite .btn-warning:not([disabled]):not(.disabled).active, -.bodywebsite .show > .btn-warning.dropdown-toggle { - color: #111; - background-color: #d39e00; - border-color: #c69500; - box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); -} -.bodywebsite .btn-danger { - color: #fff; - background-color: #dc3545; - border-color: #dc3545; - box-shadow: 0; -} -.bodywebsite .btn-danger:hover { - color: #fff; - background-color: #c82333; - border-color: #bd2130; -} -.bodywebsite .btn-danger:focus, -.bodywebsite .btn-danger.focus { - box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); -} -.bodywebsite .btn-danger.disabled, -.bodywebsite .btn-danger:disabled { - background-color: #dc3545; - border-color: #dc3545; -} -.bodywebsite .btn-danger:not([disabled]):not(.disabled):active, -.bodywebsite .btn-danger:not([disabled]):not(.disabled).active, -.bodywebsite .show > .btn-danger.dropdown-toggle { - color: #fff; - background-color: #bd2130; - border-color: #b21f2d; - box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); -} -.bodywebsite .btn-light { - color: #111; - background-color: #f8f9fa; - border-color: #f8f9fa; - box-shadow: 0; -} -.bodywebsite .btn-light:hover { - color: #111; - background-color: #e2e6ea; - border-color: #dae0e5; -} -.bodywebsite .btn-light:focus, -.bodywebsite .btn-light.focus { - box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); -} -.bodywebsite .btn-light.disabled, -.bodywebsite .btn-light:disabled { - background-color: #f8f9fa; - border-color: #f8f9fa; -} -.bodywebsite .btn-light:not([disabled]):not(.disabled):active, -.bodywebsite .btn-light:not([disabled]):not(.disabled).active, -.bodywebsite .show > .btn-light.dropdown-toggle { - color: #111; - background-color: #dae0e5; - border-color: #d3d9df; - box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); -} -.bodywebsite .btn-dark { - color: #fff; - background-color: #343a40; - border-color: #343a40; - box-shadow: 0; -} -.bodywebsite .btn-dark:hover { - color: #fff; - background-color: #23272b; - border-color: #1d2124; -} -.bodywebsite .btn-dark:focus, -.bodywebsite .btn-dark.focus { - box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); -} -.bodywebsite .btn-dark.disabled, -.bodywebsite .btn-dark:disabled { - background-color: #343a40; - border-color: #343a40; -} -.bodywebsite .btn-dark:not([disabled]):not(.disabled):active, -.bodywebsite .btn-dark:not([disabled]):not(.disabled).active, -.bodywebsite .show > .btn-dark.dropdown-toggle { - color: #fff; - background-color: #1d2124; - border-color: #171a1d; - box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); -} -.bodywebsite .btn-outline-primary { - color: #007bff; - background-color: transparent; - background-image: none; - border-color: #007bff; -} -.bodywebsite .btn-outline-primary:hover { - color: #fff; - background-color: #007bff; - border-color: #007bff; -} -.bodywebsite .btn-outline-primary:focus, -.bodywebsite .btn-outline-primary.focus { - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); -} -.bodywebsite .btn-outline-primary.disabled, -.bodywebsite .btn-outline-primary:disabled { - color: #007bff; - background-color: transparent; -} -.bodywebsite .btn-outline-primary:not([disabled]):not(.disabled):active, -.bodywebsite .btn-outline-primary:not([disabled]):not(.disabled).active, -.bodywebsite .show > .btn-outline-primary.dropdown-toggle { - color: #fff; - background-color: #007bff; - border-color: #007bff; - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); -} -.bodywebsite .btn-outline-secondary { - color: #868e96; - background-color: transparent; - background-image: none; - border-color: #868e96; -} -.bodywebsite .btn-outline-secondary:hover { - color: #fff; - background-color: #868e96; - border-color: #868e96; -} -.bodywebsite .btn-outline-secondary:focus, -.bodywebsite .btn-outline-secondary.focus { - box-shadow: 0 0 0 0.2rem rgba(134, 142, 150, 0.5); -} -.bodywebsite .btn-outline-secondary.disabled, -.bodywebsite .btn-outline-secondary:disabled { - color: #868e96; - background-color: transparent; -} -.bodywebsite .btn-outline-secondary:not([disabled]):not(.disabled):active, -.bodywebsite .btn-outline-secondary:not([disabled]):not(.disabled).active, -.bodywebsite .show > .btn-outline-secondary.dropdown-toggle { - color: #fff; - background-color: #868e96; - border-color: #868e96; - box-shadow: 0 0 0 0.2rem rgba(134, 142, 150, 0.5); -} -.bodywebsite .btn-outline-success { - color: #28a745; - background-color: transparent; - background-image: none; - border-color: #28a745; -} -.bodywebsite .btn-outline-success:hover { - color: #fff; - background-color: #28a745; - border-color: #28a745; -} -.bodywebsite .btn-outline-success:focus, -.bodywebsite .btn-outline-success.focus { - box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); -} -.bodywebsite .btn-outline-success.disabled, -.bodywebsite .btn-outline-success:disabled { - color: #28a745; - background-color: transparent; -} -.bodywebsite .btn-outline-success:not([disabled]):not(.disabled):active, -.bodywebsite .btn-outline-success:not([disabled]):not(.disabled).active, -.bodywebsite .show > .btn-outline-success.dropdown-toggle { - color: #fff; - background-color: #28a745; - border-color: #28a745; - box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); -} -.bodywebsite .btn-outline-info { - color: #17a2b8; - background-color: transparent; - background-image: none; - border-color: #17a2b8; -} -.bodywebsite .btn-outline-info:hover { - color: #fff; - background-color: #17a2b8; - border-color: #17a2b8; -} -.bodywebsite .btn-outline-info:focus, -.bodywebsite .btn-outline-info.focus { - box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); -} -.bodywebsite .btn-outline-info.disabled, -.bodywebsite .btn-outline-info:disabled { - color: #17a2b8; - background-color: transparent; -} -.bodywebsite .btn-outline-info:not([disabled]):not(.disabled):active, -.bodywebsite .btn-outline-info:not([disabled]):not(.disabled).active, -.bodywebsite .show > .btn-outline-info.dropdown-toggle { - color: #fff; - background-color: #17a2b8; - border-color: #17a2b8; - box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); -} -.bodywebsite .btn-outline-warning { - color: #ffc107; - background-color: transparent; - background-image: none; - border-color: #ffc107; -} -.bodywebsite .btn-outline-warning:hover { - color: #fff; - background-color: #ffc107; - border-color: #ffc107; -} -.bodywebsite .btn-outline-warning:focus, -.bodywebsite .btn-outline-warning.focus { - box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); -} -.bodywebsite .btn-outline-warning.disabled, -.bodywebsite .btn-outline-warning:disabled { - color: #ffc107; - background-color: transparent; -} -.bodywebsite .btn-outline-warning:not([disabled]):not(.disabled):active, -.bodywebsite .btn-outline-warning:not([disabled]):not(.disabled).active, -.bodywebsite .show > .btn-outline-warning.dropdown-toggle { - color: #fff; - background-color: #ffc107; - border-color: #ffc107; - box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); -} -.bodywebsite .btn-outline-danger { - color: #dc3545; - background-color: transparent; - background-image: none; - border-color: #dc3545; -} -.bodywebsite .btn-outline-danger:hover { - color: #fff; - background-color: #dc3545; - border-color: #dc3545; -} -.bodywebsite .btn-outline-danger:focus, -.bodywebsite .btn-outline-danger.focus { - box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); -} -.bodywebsite .btn-outline-danger.disabled, -.bodywebsite .btn-outline-danger:disabled { - color: #dc3545; - background-color: transparent; -} -.bodywebsite .btn-outline-danger:not([disabled]):not(.disabled):active, -.bodywebsite .btn-outline-danger:not([disabled]):not(.disabled).active, -.bodywebsite .show > .btn-outline-danger.dropdown-toggle { - color: #fff; - background-color: #dc3545; - border-color: #dc3545; - box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); -} -.bodywebsite .btn-outline-light { - color: #f8f9fa; - background-color: transparent; - background-image: none; - border-color: #f8f9fa; -} -.bodywebsite .btn-outline-light:hover { - color: #00030a; - background-color: #f8f9fa; - border-color: #f8f9fa; -} -.bodywebsite .btn-outline-light:focus, -.bodywebsite .btn-outline-light.focus { - box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); -} -.bodywebsite .btn-outline-light.disabled, -.bodywebsite .btn-outline-light:disabled { - color: #f8f9fa; - background-color: transparent; -} -.bodywebsite .btn-outline-light:not([disabled]):not(.disabled):active, -.bodywebsite .btn-outline-light:not([disabled]):not(.disabled).active, -.bodywebsite .show > .btn-outline-light.dropdown-toggle { - color: #00030a; - background-color: #f8f9fa; - border-color: #f8f9fa; - box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); -} -.bodywebsite .btn-outline-dark { - color: #343a40; - background-color: transparent; - background-image: none; - border-color: #343a40; -} -.bodywebsite .btn-outline-dark:hover { - color: #fff; - background-color: #343a40; - border-color: #343a40; -} -.bodywebsite .btn-outline-dark:focus, -.bodywebsite .btn-outline-dark.focus { - box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); -} -.bodywebsite .btn-outline-dark.disabled, -.bodywebsite .btn-outline-dark:disabled { - color: #343a40; - background-color: transparent; -} -.bodywebsite .btn-outline-dark:not([disabled]):not(.disabled):active, -.bodywebsite .btn-outline-dark:not([disabled]):not(.disabled).active, -.bodywebsite .show > .btn-outline-dark.dropdown-toggle { - color: #fff; - background-color: #343a40; - border-color: #343a40; - box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); -} -.bodywebsite .btn-link { - font-weight: 400; - color: #37c386; - background-color: transparent; -} -.bodywebsite .btn-link:hover { - color: #26875d; - text-decoration: none; - background-color: transparent; - border-color: transparent; -} -.bodywebsite .btn-link:focus, -.bodywebsite .btn-link.focus { - border-color: transparent; - box-shadow: none; -} -.bodywebsite .btn-link:disabled, -.bodywebsite .btn-link.disabled { - color: #dedede; -} -.bodywebsite .btn-lg, -.bodywebsite .btn-group-lg > .btn { - padding: 12px 50px; - font-size: 18px; - line-height: 1.5; - border-radius: 6px; -} -.bodywebsite .btn-sm, -.bodywebsite .btn-group-sm > .btn { - padding: 5px 25px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -.bodywebsite .btn-block { - display: block; - width: 100%; -} -.bodywebsite .btn-block + .btn-block { - margin-top: 0.5rem; -} -.bodywebsite input[type="submit"].btn-block, -.bodywebsite input[type="reset"].btn-block, -.bodywebsite input[type="button"].btn-block { - width: 100%; -} -.bodywebsite .fade { - opacity: 0; - transition: opacity 0.15s linear; -} -.bodywebsite .fade.show { - opacity: 1; -} -.bodywebsite .collapse { - display: none; -} -.bodywebsite .collapse.show { - display: block; -} -.bodywebsite tr.collapse.show { - display: table-row; -} -.bodywebsite tbody.collapse.show { - display: table-row-group; -} -.bodywebsite .collapsing { - position: relative; - height: 0; - overflow: hidden; - transition: height 0.35s ease; -} -.bodywebsite .dropup, -.bodywebsite .dropdown { - position: relative; -} -.bodywebsite .dropdown-toggle::after { - display: inline-block; - width: 0; - height: 0; - margin-left: 0.255em; - vertical-align: 0.255em; - content: ""; - border-top: 0.3em solid; - border-right: 0.3em solid transparent; - border-bottom: 0; - border-left: 0.3em solid transparent; -} -.bodywebsite .dropdown-toggle:empty::after { - margin-left: 0; -} -.bodywebsite .dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 10rem; - padding: 0.5rem 0; - margin: 0.125rem 0 0; - font-size: 14px; - text-align: left; - list-style: none; - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, 0.15); - border-radius: 0; - box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.175); -} -.bodywebsite .dropup .dropdown-menu { - margin-top: 0; - margin-bottom: 0.125rem; -} -.bodywebsite .dropup .dropdown-toggle::after { - display: inline-block; - width: 0; - height: 0; - margin-left: 0.255em; - vertical-align: 0.255em; - content: ""; - border-top: 0; - border-right: 0.3em solid transparent; - border-bottom: 0.3em solid; - border-left: 0.3em solid transparent; -} -.bodywebsite .dropup .dropdown-toggle:empty::after { - margin-left: 0; -} -.bodywebsite .dropdown-divider { - height: 0; - margin: 0.5rem 0; - overflow: hidden; - border-top: 1px solid #e5e5e5; -} -.bodywebsite .dropdown-item { - display: block; - width: 100%; - padding: 0.25rem 1.5rem; - clear: both; - font-weight: 400; - color: #2a2b2b; - text-align: inherit; - white-space: nowrap; - background: none; - border: 0; -} -.bodywebsite .dropdown-item:focus, -.bodywebsite .dropdown-item:hover { - color: #1d1e1e; - text-decoration: none; - background-color: #f5f5f5; -} -.bodywebsite .dropdown-item.active, -.bodywebsite .dropdown-item:active { - color: #2a2b2b; - text-decoration: none; - background-color: #37c386; -} -.bodywebsite .dropdown-item.disabled, -.bodywebsite .dropdown-item:disabled { - color: #dedede; - background-color: transparent; -} -.bodywebsite .dropdown-menu.show { - display: block; -} -.bodywebsite .dropdown-header { - display: block; - padding: 0.5rem 1.5rem; - margin-bottom: 0; - font-size: 12px; - color: #dedede; - white-space: nowrap; -} -.bodywebsite .btn-group, -.bodywebsite .btn-group-vertical { - position: relative; - display: inline-flex; - vertical-align: middle; -} -.bodywebsite .btn-group > .btn, -.bodywebsite .btn-group-vertical > .btn { - position: relative; - flex: 0 1 auto; -} -.bodywebsite .btn-group > .btn:hover, -.bodywebsite .btn-group-vertical > .btn:hover { - z-index: 2; -} -.bodywebsite .btn-group > .btn:focus, -.bodywebsite .btn-group > .btn:active, -.bodywebsite .btn-group > .btn.active, -.bodywebsite .btn-group-vertical > .btn:focus, -.bodywebsite .btn-group-vertical > .btn:active, -.bodywebsite .btn-group-vertical > .btn.active { - z-index: 2; -} -.bodywebsite .btn-group .btn + .btn, -.bodywebsite .btn-group .btn + .btn-group, -.bodywebsite .btn-group .btn-group + .btn, -.bodywebsite .btn-group .btn-group + .btn-group, -.bodywebsite .btn-group-vertical .btn + .btn, -.bodywebsite .btn-group-vertical .btn + .btn-group, -.bodywebsite .btn-group-vertical .btn-group + .btn, -.bodywebsite .btn-group-vertical .btn-group + .btn-group { - margin-left: -1px; -} -.bodywebsite .btn-toolbar { - display: flex; - flex-wrap: wrap; - justify-content: flex-start; -} -.bodywebsite .btn-toolbar .input-group { - width: auto; -} -.bodywebsite .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { - border-radius: 0; -} -.bodywebsite .btn-group > .btn:first-child { - margin-left: 0; -} -.bodywebsite .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} -.bodywebsite .btn-group > .btn:last-child:not(:first-child), -.bodywebsite .btn-group > .dropdown-toggle:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} -.bodywebsite .btn-group > .btn-group { - float: left; -} -.bodywebsite .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.bodywebsite .btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, -.bodywebsite .btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} -.bodywebsite .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} -.bodywebsite .btn + .dropdown-toggle-split { - padding-right: 26.25px; - padding-left: 26.25px; -} -.bodywebsite .btn + .dropdown-toggle-split::after { - margin-left: 0; -} -.bodywebsite .btn-sm + .dropdown-toggle-split, -.bodywebsite .btn-group-sm > .btn + .dropdown-toggle-split { - padding-right: 18.75px; - padding-left: 18.75px; -} -.bodywebsite .btn-lg + .dropdown-toggle-split, -.bodywebsite .btn-group-lg > .btn + .dropdown-toggle-split { - padding-right: 37.5px; - padding-left: 37.5px; -} -.bodywebsite .btn-group.show .dropdown-toggle { - box-shadow: 0; -} -.bodywebsite .btn-group.show .dropdown-toggle.btn-link { - box-shadow: none; -} -.bodywebsite .btn-group-vertical { - flex-direction: column; - align-items: flex-start; - justify-content: center; -} -.bodywebsite .btn-group-vertical .btn, -.bodywebsite .btn-group-vertical .btn-group { - width: 100%; -} -.bodywebsite .btn-group-vertical > .btn + .btn, -.bodywebsite .btn-group-vertical > .btn + .btn-group, -.bodywebsite .btn-group-vertical > .btn-group + .btn, -.bodywebsite .btn-group-vertical > .btn-group + .btn-group { - margin-top: -1px; - margin-left: 0; -} -.bodywebsite .btn-group-vertical > .btn:not(:first-child):not(:last-child) { - border-radius: 0; -} -.bodywebsite .btn-group-vertical > .btn:first-child:not(:last-child) { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.bodywebsite .btn-group-vertical > .btn:last-child:not(:first-child) { - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.bodywebsite .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.bodywebsite .btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, -.bodywebsite .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.bodywebsite .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.bodywebsite [data-toggle="buttons"] > .btn input[type="radio"], -.bodywebsite [data-toggle="buttons"] > .btn input[type="checkbox"], -.bodywebsite [data-toggle="buttons"] > .btn-group > .btn input[type="radio"], -.bodywebsite [data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { - position: absolute; - clip: rect(0, 0, 0, 0); - pointer-events: none; -} -.bodywebsite .input-group { - position: relative; - display: flex; - align-items: stretch; - width: 100%; -} -.bodywebsite .input-group .form-input { - position: relative; - z-index: 2; - flex: 1 1 auto; - width: 1%; - margin-bottom: 0; -} -.bodywebsite .input-group .form-input:focus, -.bodywebsite .input-group .form-input:active, -.bodywebsite .input-group .form-input:hover { - z-index: 3; -} -.bodywebsite .input-group-addon, -.bodywebsite .input-group-btn, -.bodywebsite .input-group .form-input { - display: flex; - align-items: center; -} -.bodywebsite .input-group-addon:not(:first-child):not(:last-child), -.bodywebsite .input-group-btn:not(:first-child):not(:last-child), -.bodywebsite .input-group .form-input:not(:first-child):not(:last-child) { - border-radius: 0; -} -.bodywebsite .input-group-addon, -.bodywebsite .input-group-btn { - white-space: nowrap; -} -.bodywebsite .input-group-addon { - padding: 11px 35px; - margin-bottom: 0; - font-size: 14px; - font-weight: 400; - line-height: 1.25; - color: #495057; - text-align: center; - background-color: #e9ecef; - border: 1px solid #ced4da; - border-radius: 0.25rem; -} -.bodywebsite .input-group-addon.form-input-sm, -.bodywebsite .input-group-sm > .input-group-addon, -.bodywebsite .input-group-sm > .input-group-btn > .input-group-addon.btn { - padding: 5px 25px; - font-size: 12px; - border-radius: 0.2rem; -} -.bodywebsite .input-group-addon.form-input-lg, -.bodywebsite .input-group-lg > .input-group-addon, -.bodywebsite .input-group-lg > .input-group-btn > .input-group-addon.btn { - padding: 12px 50px; - font-size: 18px; - border-radius: 0.3rem; -} -.bodywebsite .input-group-addon input[type="radio"], -.bodywebsite .input-group-addon input[type="checkbox"] { - margin-top: 0; -} -.bodywebsite .input-group .form-input:not(:last-child), -.bodywebsite .input-group-addon:not(:last-child), -.bodywebsite .input-group-btn:not(:last-child) > .btn, -.bodywebsite .input-group-btn:not(:last-child) > .btn-group > .btn, -.bodywebsite .input-group-btn:not(:last-child) > .dropdown-toggle, -.bodywebsite .input-group-btn:not(:first-child) > .btn:not(:last-child):not(.dropdown-toggle), -.bodywebsite .input-group-btn:not(:first-child) > .btn-group:not(:last-child) > .btn { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} -.bodywebsite .input-group-addon:not(:last-child) { - border-right: 0; -} -.bodywebsite .input-group .form-input:not(:first-child), -.bodywebsite .input-group-addon:not(:first-child), -.bodywebsite .input-group-btn:not(:first-child) > .btn, -.bodywebsite .input-group-btn:not(:first-child) > .btn-group > .btn, -.bodywebsite .input-group-btn:not(:first-child) > .dropdown-toggle, -.bodywebsite .input-group-btn:not(:last-child) > .btn:not(:first-child), -.bodywebsite .input-group-btn:not(:last-child) > .btn-group:not(:first-child) > .btn { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} -.bodywebsite .form-input + .input-group-addon:not(:first-child) { - border-left: 0; -} -.bodywebsite .input-group-btn { - position: relative; - align-items: stretch; - font-size: 0; - white-space: nowrap; -} -.bodywebsite .input-group-btn > .btn { - position: relative; -} -.bodywebsite .input-group-btn > .btn + .btn { - margin-left: -1px; -} -.bodywebsite .input-group-btn > .btn:focus, -.bodywebsite .input-group-btn > .btn:active, -.bodywebsite .input-group-btn > .btn:hover { - z-index: 3; -} -.bodywebsite .input-group-btn:first-child > .btn + .btn { - margin-left: 0; -} -.bodywebsite .input-group-btn:not(:last-child) > .btn, -.bodywebsite .input-group-btn:not(:last-child) > .btn-group { - margin-right: -1px; -} -.bodywebsite .input-group-btn:not(:first-child) > .btn, -.bodywebsite .input-group-btn:not(:first-child) > .btn-group { - z-index: 2; - margin-left: 0; -} -.bodywebsite .input-group-btn:not(:first-child) > .btn:first-child, -.bodywebsite .input-group-btn:not(:first-child) > .btn-group:first-child { - margin-left: -1px; -} -.bodywebsite .input-group-btn:not(:first-child) > .btn:focus, -.bodywebsite .input-group-btn:not(:first-child) > .btn:active, -.bodywebsite .input-group-btn:not(:first-child) > .btn:hover, -.bodywebsite .input-group-btn:not(:first-child) > .btn-group:focus, -.bodywebsite .input-group-btn:not(:first-child) > .btn-group:active, -.bodywebsite .input-group-btn:not(:first-child) > .btn-group:hover { - z-index: 3; -} -.bodywebsite .custom-control { - position: relative; - display: inline-flex; - min-height: 1.71429rem; - padding-left: 1.5rem; - margin-right: 1rem; -} -.bodywebsite .custom-control-input { - position: absolute; - z-index: -1; - opacity: 0; -} -.bodywebsite .custom-control-input:checked ~ .custom-control-indicator { - color: #fff; - background-color: #007bff; - box-shadow: none; -} -.bodywebsite .custom-control-input:focus ~ .custom-control-indicator { - box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} -.bodywebsite .custom-control-input:active ~ .custom-control-indicator { - color: #fff; - background-color: #b3d7ff; - box-shadow: none; -} -.bodywebsite .custom-control-input:disabled ~ .custom-control-indicator { - background-color: #e9ecef; -} -.bodywebsite .custom-control-input:disabled ~ .custom-control-description { - color: #868e96; -} -.bodywebsite .custom-control-indicator { - position: absolute; - top: 0.35714rem; - left: 0; - display: block; - width: 1rem; - height: 1rem; - pointer-events: none; - user-select: none; - background-color: #ddd; - background-repeat: no-repeat; - background-position: center center; - background-size: 50% 50%; - box-shadow: inset 0 0.25rem 0.25rem rgba(0, 0, 0, 0.1); -} -.bodywebsite .custom-checkbox .custom-control-indicator { - border-radius: 0.25rem; -} -.bodywebsite .custom-checkbox .custom-control-input:checked ~ .custom-control-indicator { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E"); -} -.bodywebsite .custom-checkbox .custom-control-input:indeterminate ~ .custom-control-indicator { - background-color: #007bff; - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E"); - box-shadow: none; -} -.bodywebsite .custom-radio .custom-control-indicator { - border-radius: 50%; -} -.bodywebsite .custom-radio .custom-control-input:checked ~ .custom-control-indicator { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E"); -} -.bodywebsite .custom-controls-stacked { - display: flex; - flex-direction: column; -} -.bodywebsite .custom-controls-stacked .custom-control { - margin-bottom: 0.25rem; -} -.bodywebsite .custom-controls-stacked .custom-control + .custom-control { - margin-left: 0; -} -.bodywebsite .custom-select { - display: inline-block; - max-width: 100%; - height: calc(4.25rem); - padding: 0.375rem 1.75rem 0.375rem 0.75rem; - line-height: 1.5; - color: #495057; - vertical-align: middle; - background: #fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23333' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right 0.75rem center; - background-size: 8px 10px; - border: 1px solid #ced4da; - border-radius: 0.25rem; - appearance: none; -} -.bodywebsite .custom-select:focus { - border-color: #80bdff; - outline: none; - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075), 0 0 5px rgba(128, 189, 255, 0.5); -} -.bodywebsite .custom-select[multiple] { - height: auto; - background-image: none; -} -.bodywebsite .custom-select:disabled { - color: #868e96; - background-color: #e9ecef; -} -.bodywebsite .custom-select::-ms-expand { - opacity: 0; -} -.bodywebsite .custom-select-sm { - height: calc(3.8125rem); - padding-top: 0.375rem; - padding-bottom: 0.375rem; - font-size: 75%; -} -.bodywebsite .custom-file { - position: relative; - display: inline-block; - max-width: 100%; - height: calc(4.25rem); - margin-bottom: 0; -} -.bodywebsite .custom-file-input { - min-width: 14rem; - max-width: 100%; - height: calc(4.25rem); - margin: 0; - opacity: 0; -} -.bodywebsite .custom-file-input:focus ~ .custom-file-control { - box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.2rem #007bff; -} -.bodywebsite .custom-file-control { - position: absolute; - top: 0; - right: 0; - left: 0; - z-index: 5; - height: calc(4.25rem); - padding: 0.375rem 0.75rem; - line-height: 1.5; - color: #495057; - pointer-events: none; - user-select: none; - background-color: #fff; - border: 1px solid #ced4da; - border-radius: 0.25rem; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.bodywebsite .custom-file-control:lang(en):empty::after { - content: "Choose file..."; -} -.bodywebsite .custom-file-control::before { - position: absolute; - top: -1px; - right: -1px; - bottom: -1px; - z-index: 6; - display: block; - height: calc(4.25rem); - padding: 0.375rem 0.75rem; - line-height: 1.5; - color: #495057; - background-color: #e9ecef; - border: 1px solid #ced4da; - border-radius: 0 0.25rem 0.25rem 0; -} -.bodywebsite .custom-file-control:lang(en)::before { - content: "Browse"; -} -.bodywebsite .nav { - display: flex; - flex-wrap: wrap; - padding-left: 0; - margin-bottom: 0; - list-style: none; -} -.bodywebsite .nav-link { - display: block; - padding: 0.5rem 1rem; -} -.bodywebsite .nav-link:focus, -.bodywebsite .nav-link:hover { - text-decoration: none; -} -.bodywebsite .nav-link.disabled { - color: #868e96; -} -.bodywebsite .nav-tabs { - border-bottom: 1px solid #ddd; -} -.bodywebsite .nav-tabs .nav-item { - margin-bottom: -1px; -} -.bodywebsite .nav-tabs .nav-link { - border: 1px solid transparent; - border-top-left-radius: 0.25rem; - border-top-right-radius: 0.25rem; -} -.bodywebsite .nav-tabs .nav-link:focus, -.bodywebsite .nav-tabs .nav-link:hover { - border-color: #f9f9f9 #f9f9f9 #ddd; -} -.bodywebsite .nav-tabs .nav-link.disabled { - color: #868e96; - background-color: transparent; - border-color: transparent; -} -.bodywebsite .nav-tabs .nav-link.active, -.bodywebsite .nav-tabs .nav-item.show .nav-link { - color: #495057; - background-color: #fff; - border-color: #ddd #ddd #fff; -} -.bodywebsite .nav-tabs .dropdown-menu { - margin-top: -1px; - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.bodywebsite .nav-pills .nav-link { - border-radius: 0; -} -.bodywebsite .nav-pills .nav-link.active, -.bodywebsite .nav-pills .show > .nav-link { - color: #fff; - background-color: #007bff; -} -.bodywebsite .nav-fill .nav-item { - flex: 1 1 auto; - text-align: center; -} -.bodywebsite .nav-justified .nav-item { - flex-basis: 0; - flex-grow: 1; - text-align: center; -} -.bodywebsite .tab-content > .tab-pane { - display: none; -} -.bodywebsite .tab-content > .active { - display: block; -} -.bodywebsite .navbar { - position: relative; - display: flex; - flex-wrap: wrap; - align-items: center; - justify-content: space-between; - padding: 0.5rem 1rem; -} -.bodywebsite .navbar > .container, -.bodywebsite .navbar > .container-fluid { - display: flex; - flex-wrap: wrap; - align-items: center; - justify-content: space-between; -} -.bodywebsite .navbar-brand { - display: inline-block; - padding-top: 0.3125rem; - padding-bottom: 0.3125rem; - margin-right: 1rem; - font-size: 1.25rem; - line-height: inherit; - white-space: nowrap; -} -.bodywebsite .navbar-brand:focus, -.bodywebsite .navbar-brand:hover { - text-decoration: none; -} -.bodywebsite .navbar-nav { - display: flex; - flex-direction: column; - padding-left: 0; - margin-bottom: 0; - list-style: none; -} -.bodywebsite .navbar-nav .nav-link { - padding-right: 0; - padding-left: 0; -} -.bodywebsite .navbar-nav .dropdown-menu { - position: static; - float: none; -} -.bodywebsite .navbar-text { - display: inline-block; - padding-top: 0.5rem; - padding-bottom: 0.5rem; -} -.bodywebsite .navbar-collapse { - flex-basis: 100%; - flex-grow: 1; - align-items: center; -} -.bodywebsite .navbar-toggler { - padding: 0.25rem 0.75rem; - font-size: 1.25rem; - line-height: 1; - background: transparent; - border: 1px solid transparent; - border-radius: 0.25rem; -} -.bodywebsite .navbar-toggler:focus, -.bodywebsite .navbar-toggler:hover { - text-decoration: none; -} -.bodywebsite .navbar-toggler-icon { - display: inline-block; - width: 1.5em; - height: 1.5em; - vertical-align: middle; - content: ""; - background: no-repeat center center; - background-size: 100% 100%; -} -@media (max-width: 575px) { - .bodywebsite .navbar-expand-sm > .container, - .bodywebsite .navbar-expand-sm > .container-fluid { - padding-right: 0; - padding-left: 0; - } -} -@media (min-width: 576px) { - .bodywebsite .navbar-expand-sm { - flex-flow: row nowrap; - justify-content: flex-start; - } - .bodywebsite .navbar-expand-sm .navbar-nav { - flex-direction: row; - } - .bodywebsite .navbar-expand-sm .navbar-nav .dropdown-menu { - position: absolute; - } - .bodywebsite .navbar-expand-sm .navbar-nav .dropdown-menu-right { - right: 0; - left: auto; - } - .bodywebsite .navbar-expand-sm .navbar-nav .nav-link { - padding-right: .5rem; - padding-left: .5rem; - } - .bodywebsite .navbar-expand-sm > .container, - .bodywebsite .navbar-expand-sm > .container-fluid { - flex-wrap: nowrap; - } - .bodywebsite .navbar-expand-sm .navbar-collapse { - display: flex !important; - flex-basis: auto; - } - .bodywebsite .navbar-expand-sm .navbar-toggler { - display: none; - } - .bodywebsite .navbar-expand-sm .dropup .dropdown-menu { - top: auto; - bottom: 100%; - } -} -@media (max-width: 767px) { - .bodywebsite .navbar-expand-md > .container, - .bodywebsite .navbar-expand-md > .container-fluid { - padding-right: 0; - padding-left: 0; - } -} -@media (min-width: 768px) { - .bodywebsite .navbar-expand-md { - flex-flow: row nowrap; - justify-content: flex-start; - } - .bodywebsite .navbar-expand-md .navbar-nav { - flex-direction: row; - } - .bodywebsite .navbar-expand-md .navbar-nav .dropdown-menu { - position: absolute; - } - .bodywebsite .navbar-expand-md .navbar-nav .dropdown-menu-right { - right: 0; - left: auto; - } - .bodywebsite .navbar-expand-md .navbar-nav .nav-link { - padding-right: .5rem; - padding-left: .5rem; - } - .bodywebsite .navbar-expand-md > .container, - .bodywebsite .navbar-expand-md > .container-fluid { - flex-wrap: nowrap; - } - .bodywebsite .navbar-expand-md .navbar-collapse { - display: flex !important; - flex-basis: auto; - } - .bodywebsite .navbar-expand-md .navbar-toggler { - display: none; - } - .bodywebsite .navbar-expand-md .dropup .dropdown-menu { - top: auto; - bottom: 100%; - } -} -@media (max-width: 991px) { - .bodywebsite .navbar-expand-lg > .container, - .bodywebsite .navbar-expand-lg > .container-fluid { - padding-right: 0; - padding-left: 0; - } -} -@media (min-width: 992px) { - .bodywebsite .navbar-expand-lg { - flex-flow: row nowrap; - justify-content: flex-start; - } - .bodywebsite .navbar-expand-lg .navbar-nav { - flex-direction: row; - } - .bodywebsite .navbar-expand-lg .navbar-nav .dropdown-menu { - position: absolute; - } - .bodywebsite .navbar-expand-lg .navbar-nav .dropdown-menu-right { - right: 0; - left: auto; - } - .bodywebsite .navbar-expand-lg .navbar-nav .nav-link { - padding-right: .5rem; - padding-left: .5rem; - } - .bodywebsite .navbar-expand-lg > .container, - .bodywebsite .navbar-expand-lg > .container-fluid { - flex-wrap: nowrap; - } - .bodywebsite .navbar-expand-lg .navbar-collapse { - display: flex !important; - flex-basis: auto; - } - .bodywebsite .navbar-expand-lg .navbar-toggler { - display: none; - } - .bodywebsite .navbar-expand-lg .dropup .dropdown-menu { - top: auto; - bottom: 100%; - } -} -@media (max-width: 1199px) { - .bodywebsite .navbar-expand-xl > .container, - .bodywebsite .navbar-expand-xl > .container-fluid { - padding-right: 0; - padding-left: 0; - } -} -@media (min-width: 1200px) { - .bodywebsite .navbar-expand-xl { - flex-flow: row nowrap; - justify-content: flex-start; - } - .bodywebsite .navbar-expand-xl .navbar-nav { - flex-direction: row; - } - .bodywebsite .navbar-expand-xl .navbar-nav .dropdown-menu { - position: absolute; - } - .bodywebsite .navbar-expand-xl .navbar-nav .dropdown-menu-right { - right: 0; - left: auto; - } - .bodywebsite .navbar-expand-xl .navbar-nav .nav-link { - padding-right: .5rem; - padding-left: .5rem; - } - .bodywebsite .navbar-expand-xl > .container, - .bodywebsite .navbar-expand-xl > .container-fluid { - flex-wrap: nowrap; - } - .bodywebsite .navbar-expand-xl .navbar-collapse { - display: flex !important; - flex-basis: auto; - } - .bodywebsite .navbar-expand-xl .navbar-toggler { - display: none; - } - .bodywebsite .navbar-expand-xl .dropup .dropdown-menu { - top: auto; - bottom: 100%; - } -} -@media (max-width: 1799px) { - .bodywebsite .navbar-expand-xxl > .container, - .bodywebsite .navbar-expand-xxl > .container-fluid { - padding-right: 0; - padding-left: 0; - } -} -@media (min-width: 1800px) { - .bodywebsite .navbar-expand-xxl { - flex-flow: row nowrap; - justify-content: flex-start; - } - .bodywebsite .navbar-expand-xxl .navbar-nav { - flex-direction: row; - } - .bodywebsite .navbar-expand-xxl .navbar-nav .dropdown-menu { - position: absolute; - } - .bodywebsite .navbar-expand-xxl .navbar-nav .dropdown-menu-right { - right: 0; - left: auto; - } - .bodywebsite .navbar-expand-xxl .navbar-nav .nav-link { - padding-right: .5rem; - padding-left: .5rem; - } - .bodywebsite .navbar-expand-xxl > .container, - .bodywebsite .navbar-expand-xxl > .container-fluid { - flex-wrap: nowrap; - } - .bodywebsite .navbar-expand-xxl .navbar-collapse { - display: flex !important; - flex-basis: auto; - } - .bodywebsite .navbar-expand-xxl .navbar-toggler { - display: none; - } - .bodywebsite .navbar-expand-xxl .dropup .dropdown-menu { - top: auto; - bottom: 100%; - } -} -.bodywebsite .navbar-expand { - flex-flow: row nowrap; - justify-content: flex-start; -} -.bodywebsite .navbar-expand > .container, -.bodywebsite .navbar-expand > .container-fluid { - padding-right: 0; - padding-left: 0; -} -.bodywebsite .navbar-expand .navbar-nav { - flex-direction: row; -} -.bodywebsite .navbar-expand .navbar-nav .dropdown-menu { - position: absolute; -} -.bodywebsite .navbar-expand .navbar-nav .dropdown-menu-right { - right: 0; - left: auto; -} -.bodywebsite .navbar-expand .navbar-nav .nav-link { - padding-right: .5rem; - padding-left: .5rem; -} -.bodywebsite .navbar-expand > .container, -.bodywebsite .navbar-expand > .container-fluid { - flex-wrap: nowrap; -} -.bodywebsite .navbar-expand .navbar-collapse { - display: flex !important; - flex-basis: auto; -} -.bodywebsite .navbar-expand .navbar-toggler { - display: none; -} -.bodywebsite .navbar-expand .dropup .dropdown-menu { - top: auto; - bottom: 100%; -} -.bodywebsite .navbar-light .navbar-brand { - color: rgba(0, 0, 0, 0.9); -} -.bodywebsite .navbar-light .navbar-brand:focus, -.bodywebsite .navbar-light .navbar-brand:hover { - color: rgba(0, 0, 0, 0.9); -} -.bodywebsite .navbar-light .navbar-nav .nav-link { - color: rgba(0, 0, 0, 0.5); -} -.bodywebsite .navbar-light .navbar-nav .nav-link:focus, -.bodywebsite .navbar-light .navbar-nav .nav-link:hover { - color: rgba(0, 0, 0, 0.7); -} -.bodywebsite .navbar-light .navbar-nav .nav-link.disabled { - color: rgba(0, 0, 0, 0.3); -} -.bodywebsite .navbar-light .navbar-nav .show > .nav-link, -.bodywebsite .navbar-light .navbar-nav .active > .nav-link, -.bodywebsite .navbar-light .navbar-nav .nav-link.show, -.bodywebsite .navbar-light .navbar-nav .nav-link.active { - color: rgba(0, 0, 0, 0.9); -} -.bodywebsite .navbar-light .navbar-toggler { - color: rgba(0, 0, 0, 0.5); - border-color: rgba(0, 0, 0, 0.1); -} -.bodywebsite .navbar-light .navbar-toggler-icon { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"); -} -.bodywebsite .navbar-light .navbar-text { - color: rgba(0, 0, 0, 0.5); -} -.bodywebsite .navbar-light .navbar-text a { - color: rgba(0, 0, 0, 0.9); -} -.bodywebsite .navbar-light .navbar-text a:focus, -.bodywebsite .navbar-light .navbar-text a:hover { - color: rgba(0, 0, 0, 0.9); -} -.bodywebsite .navbar-dark .navbar-brand { - color: #fff; -} -.bodywebsite .navbar-dark .navbar-brand:focus, -.bodywebsite .navbar-dark .navbar-brand:hover { - color: #fff; -} -.bodywebsite .navbar-dark .navbar-nav .nav-link { - color: rgba(255, 255, 255, 0.5); -} -.bodywebsite .navbar-dark .navbar-nav .nav-link:focus, -.bodywebsite .navbar-dark .navbar-nav .nav-link:hover { - color: rgba(255, 255, 255, 0.75); -} -.bodywebsite .navbar-dark .navbar-nav .nav-link.disabled { - color: rgba(255, 255, 255, 0.25); -} -.bodywebsite .navbar-dark .navbar-nav .show > .nav-link, -.bodywebsite .navbar-dark .navbar-nav .active > .nav-link, -.bodywebsite .navbar-dark .navbar-nav .nav-link.show, -.bodywebsite .navbar-dark .navbar-nav .nav-link.active { - color: #fff; -} -.bodywebsite .navbar-dark .navbar-toggler { - color: rgba(255, 255, 255, 0.5); - border-color: rgba(255, 255, 255, 0.1); -} -.bodywebsite .navbar-dark .navbar-toggler-icon { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"); -} -.bodywebsite .navbar-dark .navbar-text { - color: rgba(255, 255, 255, 0.5); -} -.bodywebsite .navbar-dark .navbar-text a { - color: #fff; -} -.bodywebsite .navbar-dark .navbar-text a:focus, -.bodywebsite .navbar-dark .navbar-text a:hover { - color: #fff; -} -.bodywebsite .jumbotron { - padding: 2rem 1rem; - margin-bottom: 2rem; - background-color: #e9ecef; - border-radius: 6px; -} -@media (min-width: 576px) { - .bodywebsite .jumbotron { - padding: 4rem 2rem; - } -} -.bodywebsite .jumbotron-fluid { - padding-right: 0; - padding-left: 0; - border-radius: 0; -} -.bodywebsite .alert { - position: relative; - padding: 0.75rem 1.25rem; - margin-bottom: 1rem; - border: 1px solid transparent; - border-radius: 0.25rem; -} -.bodywebsite .alert-heading { - color: inherit; -} -.bodywebsite .alert-link { - font-weight: 700; -} -.bodywebsite .alert-dismissible .close { - position: absolute; - top: 0; - right: 0; - padding: 0.75rem 1.25rem; - color: inherit; -} -.bodywebsite .alert-primary { - color: #004085; - background-color: #cce5ff; - border-color: #b8daff; -} -.bodywebsite .alert-primary hr { - border-top-color: #9fcdff; -} -.bodywebsite .alert-primary .alert-link { - color: #002752; -} -.bodywebsite .alert-secondary { - color: #464a4e; - background-color: #e7e8ea; - border-color: #dddfe2; -} -.bodywebsite .alert-secondary hr { - border-top-color: #cfd2d6; -} -.bodywebsite .alert-secondary .alert-link { - color: #2e3133; -} -.bodywebsite .alert-success { - color: #155724; - background-color: #d4edda; - border-color: #c3e6cb; -} -.bodywebsite .alert-success hr { - border-top-color: #b1dfbb; -} -.bodywebsite .alert-success .alert-link { - color: #0b2e13; -} -.bodywebsite .alert-info { - color: #0c5460; - background-color: #d1ecf1; - border-color: #bee5eb; -} -.bodywebsite .alert-info hr { - border-top-color: #abdde5; -} -.bodywebsite .alert-info .alert-link { - color: #062c33; -} -.bodywebsite .alert-warning { - color: #856404; - background-color: #fff3cd; - border-color: #ffeeba; -} -.bodywebsite .alert-warning hr { - border-top-color: #ffe8a1; -} -.bodywebsite .alert-warning .alert-link { - color: #533f03; -} -.bodywebsite .alert-danger { - color: #721c24; - background-color: #f8d7da; - border-color: #f5c6cb; -} -.bodywebsite .alert-danger hr { - border-top-color: #f1b0b7; -} -.bodywebsite .alert-danger .alert-link { - color: #491217; -} -.bodywebsite .alert-light { - color: #818182; - background-color: #fefefe; - border-color: #fdfdfe; -} -.bodywebsite .alert-light hr { - border-top-color: #ececf6; -} -.bodywebsite .alert-light .alert-link { - color: #686868; -} -.bodywebsite .alert-dark { - color: #1b1e21; - background-color: #d6d8d9; - border-color: #c6c8ca; -} -.bodywebsite .alert-dark hr { - border-top-color: #b9bbbe; -} -.bodywebsite .alert-dark .alert-link { - color: #040505; -} -@keyframes progress-bar-stripes { - from { - background-position: 1rem 0; - } - to { - background-position: 0 0; - } -} -.bodywebsite .progress { - display: flex; - height: 1rem; - overflow: hidden; - font-size: 0.75rem; - background-color: #e9ecef; - border-radius: 0.25rem; -} -.bodywebsite .progress-bar { - display: flex; - align-items: center; - justify-content: center; - color: #fff; - background-color: #007bff; -} -.bodywebsite .progress-bar-striped { - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-size: 1rem 1rem; -} -.bodywebsite .progress-bar-animated { - animation: progress-bar-stripes 1s linear infinite; -} -.bodywebsite .media { - display: flex; - align-items: flex-start; -} -.bodywebsite .media-body { - flex: 1; -} -.bodywebsite .list-group { - display: flex; - flex-direction: column; - padding-left: 0; - margin-bottom: 0; -} -.bodywebsite .list-group-item-action { - width: 100%; - color: #495057; - text-align: inherit; -} -.bodywebsite .list-group-item-action:focus, -.bodywebsite .list-group-item-action:hover { - color: #495057; - text-decoration: none; - background-color: #f8f9fa; -} -.bodywebsite .list-group-item-action:active { - color: #212529; - background-color: #e9ecef; -} -.bodywebsite .list-group-item { - position: relative; - display: block; - padding: 0.75rem 1.25rem; - margin-bottom: -1px; - background-color: #fff; - border: 1px solid rgba(0, 0, 0, 0.125); -} -.bodywebsite .list-group-item:first-child { - border-top-left-radius: 0.25rem; - border-top-right-radius: 0.25rem; -} -.bodywebsite .list-group-item:last-child { - margin-bottom: 0; - border-bottom-right-radius: 0.25rem; - border-bottom-left-radius: 0.25rem; -} -.bodywebsite .list-group-item:focus, -.bodywebsite .list-group-item:hover { - text-decoration: none; -} -.bodywebsite .list-group-item.disabled, -.bodywebsite .list-group-item:disabled { - color: #868e96; - background-color: #fff; -} -.bodywebsite .list-group-item.active { - z-index: 2; - color: #fff; - background-color: #007bff; - border-color: #007bff; -} -.bodywebsite .list-group-flush .list-group-item { - border-right: 0; - border-left: 0; - border-radius: 0; -} -.bodywebsite .list-group-flush:first-child .list-group-item:first-child { - border-top: 0; -} -.bodywebsite .list-group-flush:last-child .list-group-item:last-child { - border-bottom: 0; -} -.bodywebsite .list-group-item-primary { - color: #004085; - background-color: #b8daff; -} -.bodywebsite a.list-group-item-primary, -.bodywebsite button.list-group-item-primary { - color: #004085; -} -.bodywebsite a.list-group-item-primary:focus, -.bodywebsite a.list-group-item-primary:hover, -.bodywebsite button.list-group-item-primary:focus, -.bodywebsite button.list-group-item-primary:hover { - color: #004085; - background-color: #9fcdff; -} -.bodywebsite a.list-group-item-primary.active, -.bodywebsite button.list-group-item-primary.active { - color: #fff; - background-color: #004085; - border-color: #004085; -} -.bodywebsite .list-group-item-secondary { - color: #464a4e; - background-color: #dddfe2; -} -.bodywebsite a.list-group-item-secondary, -.bodywebsite button.list-group-item-secondary { - color: #464a4e; -} -.bodywebsite a.list-group-item-secondary:focus, -.bodywebsite a.list-group-item-secondary:hover, -.bodywebsite button.list-group-item-secondary:focus, -.bodywebsite button.list-group-item-secondary:hover { - color: #464a4e; - background-color: #cfd2d6; -} -.bodywebsite a.list-group-item-secondary.active, -.bodywebsite button.list-group-item-secondary.active { - color: #fff; - background-color: #464a4e; - border-color: #464a4e; -} -.bodywebsite .list-group-item-success { - color: #155724; - background-color: #c3e6cb; -} -.bodywebsite a.list-group-item-success, -.bodywebsite button.list-group-item-success { - color: #155724; -} -.bodywebsite a.list-group-item-success:focus, -.bodywebsite a.list-group-item-success:hover, -.bodywebsite button.list-group-item-success:focus, -.bodywebsite button.list-group-item-success:hover { - color: #155724; - background-color: #b1dfbb; -} -.bodywebsite a.list-group-item-success.active, -.bodywebsite button.list-group-item-success.active { - color: #fff; - background-color: #155724; - border-color: #155724; -} -.bodywebsite .list-group-item-info { - color: #0c5460; - background-color: #bee5eb; -} -.bodywebsite a.list-group-item-info, -.bodywebsite button.list-group-item-info { - color: #0c5460; -} -.bodywebsite a.list-group-item-info:focus, -.bodywebsite a.list-group-item-info:hover, -.bodywebsite button.list-group-item-info:focus, -.bodywebsite button.list-group-item-info:hover { - color: #0c5460; - background-color: #abdde5; -} -.bodywebsite a.list-group-item-info.active, -.bodywebsite button.list-group-item-info.active { - color: #fff; - background-color: #0c5460; - border-color: #0c5460; -} -.bodywebsite .list-group-item-warning { - color: #856404; - background-color: #ffeeba; -} -.bodywebsite a.list-group-item-warning, -.bodywebsite button.list-group-item-warning { - color: #856404; -} -.bodywebsite a.list-group-item-warning:focus, -.bodywebsite a.list-group-item-warning:hover, -.bodywebsite button.list-group-item-warning:focus, -.bodywebsite button.list-group-item-warning:hover { - color: #856404; - background-color: #ffe8a1; -} -.bodywebsite a.list-group-item-warning.active, -.bodywebsite button.list-group-item-warning.active { - color: #fff; - background-color: #856404; - border-color: #856404; -} -.bodywebsite .list-group-item-danger { - color: #721c24; - background-color: #f5c6cb; -} -.bodywebsite a.list-group-item-danger, -.bodywebsite button.list-group-item-danger { - color: #721c24; -} -.bodywebsite a.list-group-item-danger:focus, -.bodywebsite a.list-group-item-danger:hover, -.bodywebsite button.list-group-item-danger:focus, -.bodywebsite button.list-group-item-danger:hover { - color: #721c24; - background-color: #f1b0b7; -} -.bodywebsite a.list-group-item-danger.active, -.bodywebsite button.list-group-item-danger.active { - color: #fff; - background-color: #721c24; - border-color: #721c24; -} -.bodywebsite .list-group-item-light { - color: #818182; - background-color: #fdfdfe; -} -.bodywebsite a.list-group-item-light, -.bodywebsite button.list-group-item-light { - color: #818182; -} -.bodywebsite a.list-group-item-light:focus, -.bodywebsite a.list-group-item-light:hover, -.bodywebsite button.list-group-item-light:focus, -.bodywebsite button.list-group-item-light:hover { - color: #818182; - background-color: #ececf6; -} -.bodywebsite a.list-group-item-light.active, -.bodywebsite button.list-group-item-light.active { - color: #fff; - background-color: #818182; - border-color: #818182; -} -.bodywebsite .list-group-item-dark { - color: #1b1e21; - background-color: #c6c8ca; -} -.bodywebsite a.list-group-item-dark, -.bodywebsite button.list-group-item-dark { - color: #1b1e21; -} -.bodywebsite a.list-group-item-dark:focus, -.bodywebsite a.list-group-item-dark:hover, -.bodywebsite button.list-group-item-dark:focus, -.bodywebsite button.list-group-item-dark:hover { - color: #1b1e21; - background-color: #b9bbbe; -} -.bodywebsite a.list-group-item-dark.active, -.bodywebsite button.list-group-item-dark.active { - color: #fff; - background-color: #1b1e21; - border-color: #1b1e21; -} -.bodywebsite .close { - float: right; - font-size: 1.5rem; - font-weight: 700; - line-height: 1; - color: #000; - text-shadow: 0 1px 0 #fff; - opacity: .5; -} -.bodywebsite .close:focus, -.bodywebsite .close:hover { - color: #000; - text-decoration: none; - opacity: .75; -} -.bodywebsite button.close { - padding: 0; - background: transparent; - border: 0; - -webkit-appearance: none; -} -.bodywebsite .tooltip { - position: absolute; - z-index: 1070; - display: block; - margin: 0; - font-family: "Roboto", Helvetica, Arial, sans-serif; - font-style: normal; - font-weight: 400; - line-height: 1.71429; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - word-spacing: normal; - white-space: normal; - line-break: auto; - font-size: 12px; - word-wrap: break-word; - opacity: 0; -} -.bodywebsite .tooltip.show { - opacity: 1; -} -.bodywebsite .tooltip .arrow { - position: absolute; - display: block; - width: 6px; - height: 6px; -} -.bodywebsite .tooltip .arrow::before { - position: absolute; - border-color: transparent; - border-style: solid; -} -.bodywebsite .tooltip.bs-tooltip-top, -.bodywebsite .tooltip.bs-tooltip-auto[x-placement^="top"] { - padding: 6px 0; -} -.bodywebsite .tooltip.bs-tooltip-top .arrow, -.bodywebsite .tooltip.bs-tooltip-auto[x-placement^="top"] .arrow { - bottom: 0; -} -.bodywebsite .tooltip.bs-tooltip-top .arrow::before, -.bodywebsite .tooltip.bs-tooltip-auto[x-placement^="top"] .arrow::before { - margin-left: -4px; - content: ""; - border-width: 6px 6px 0; - border-top-color: #37c386; -} -.bodywebsite .tooltip.bs-tooltip-right, -.bodywebsite .tooltip.bs-tooltip-auto[x-placement^="right"] { - padding: 0 6px; -} -.bodywebsite .tooltip.bs-tooltip-right .arrow, -.bodywebsite .tooltip.bs-tooltip-auto[x-placement^="right"] .arrow { - left: 0; -} -.bodywebsite .tooltip.bs-tooltip-right .arrow::before, -.bodywebsite .tooltip.bs-tooltip-auto[x-placement^="right"] .arrow::before { - margin-top: -4px; - content: ""; - border-width: 6px 6px 6px 0; - border-right-color: #37c386; -} -.bodywebsite .tooltip.bs-tooltip-bottom, -.bodywebsite .tooltip.bs-tooltip-auto[x-placement^="bottom"] { - padding: 6px 0; -} -.bodywebsite .tooltip.bs-tooltip-bottom .arrow, -.bodywebsite .tooltip.bs-tooltip-auto[x-placement^="bottom"] .arrow { - top: 0; -} -.bodywebsite .tooltip.bs-tooltip-bottom .arrow::before, -.bodywebsite .tooltip.bs-tooltip-auto[x-placement^="bottom"] .arrow::before { - margin-left: -4px; - content: ""; - border-width: 0 6px 6px; - border-bottom-color: #37c386; -} -.bodywebsite .tooltip.bs-tooltip-left, -.bodywebsite .tooltip.bs-tooltip-auto[x-placement^="left"] { - padding: 0 6px; -} -.bodywebsite .tooltip.bs-tooltip-left .arrow, -.bodywebsite .tooltip.bs-tooltip-auto[x-placement^="left"] .arrow { - right: 0; -} -.bodywebsite .tooltip.bs-tooltip-left .arrow::before, -.bodywebsite .tooltip.bs-tooltip-auto[x-placement^="left"] .arrow::before { - right: 0; - margin-top: -4px; - content: ""; - border-width: 6px 0 6px 6px; - border-left-color: #37c386; -} -.bodywebsite .tooltip-inner { - max-width: 200px; - padding: 6px 10px; - color: #fff; - text-align: center; - background-color: #37c386; - border-radius: 0; -} -.bodywebsite .popover { - position: absolute; - top: 0; - left: 0; - z-index: 1060; - display: block; - max-width: 276px; - font-family: "Roboto", Helvetica, Arial, sans-serif; - font-style: normal; - font-weight: 400; - line-height: 1.71429; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - word-spacing: normal; - white-space: normal; - line-break: auto; - font-size: 12px; - word-wrap: break-word; - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 6px; - box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.2); -} -.bodywebsite .popover .arrow { - position: absolute; - display: block; - width: 0.8rem; - height: 0.4rem; -} -.bodywebsite .popover .arrow::before, -.bodywebsite .popover .arrow::after { - position: absolute; - display: block; - border-color: transparent; - border-style: solid; -} -.bodywebsite .popover .arrow::before { - content: ""; - border-width: 0.8rem; -} -.bodywebsite .popover .arrow::after { - content: ""; - border-width: 0.8rem; -} -.bodywebsite .popover.bs-popover-top, -.bodywebsite .popover.bs-popover-auto[x-placement^="top"] { - margin-bottom: 0.8rem; -} -.bodywebsite .popover.bs-popover-top .arrow, -.bodywebsite .popover.bs-popover-auto[x-placement^="top"] .arrow { - bottom: 0; -} -.bodywebsite .popover.bs-popover-top .arrow::before, -.bodywebsite .popover.bs-popover-auto[x-placement^="top"] .arrow::before, -.bodywebsite .popover.bs-popover-top .arrow::after, -.bodywebsite .popover.bs-popover-auto[x-placement^="top"] .arrow::after { - border-bottom-width: 0; -} -.bodywebsite .popover.bs-popover-top .arrow::before, -.bodywebsite .popover.bs-popover-auto[x-placement^="top"] .arrow::before { - bottom: -0.8rem; - margin-left: -0.8rem; - border-top-color: rgba(0, 0, 0, 0.25); -} -.bodywebsite .popover.bs-popover-top .arrow::after, -.bodywebsite .popover.bs-popover-auto[x-placement^="top"] .arrow::after { - bottom: calc(0.2rem); - margin-left: -0.8rem; - border-top-color: #fff; -} -.bodywebsite .popover.bs-popover-right, -.bodywebsite .popover.bs-popover-auto[x-placement^="right"] { - margin-left: 0.8rem; -} -.bodywebsite .popover.bs-popover-right .arrow, -.bodywebsite .popover.bs-popover-auto[x-placement^="right"] .arrow { - left: 0; -} -.bodywebsite .popover.bs-popover-right .arrow::before, -.bodywebsite .popover.bs-popover-auto[x-placement^="right"] .arrow::before, -.bodywebsite .popover.bs-popover-right .arrow::after, -.bodywebsite .popover.bs-popover-auto[x-placement^="right"] .arrow::after { - margin-top: -0.8rem; - border-left-width: 0; -} -.bodywebsite .popover.bs-popover-right .arrow::before, -.bodywebsite .popover.bs-popover-auto[x-placement^="right"] .arrow::before { - left: -0.8rem; - border-right-color: rgba(0, 0, 0, 0.25); -} -.bodywebsite .popover.bs-popover-right .arrow::after, -.bodywebsite .popover.bs-popover-auto[x-placement^="right"] .arrow::after { - left: calc(0.2rem); - border-right-color: #fff; -} -.bodywebsite .popover.bs-popover-bottom, -.bodywebsite .popover.bs-popover-auto[x-placement^="bottom"] { - margin-top: 0.8rem; -} -.bodywebsite .popover.bs-popover-bottom .arrow, -.bodywebsite .popover.bs-popover-auto[x-placement^="bottom"] .arrow { - top: 0; -} -.bodywebsite .popover.bs-popover-bottom .arrow::before, -.bodywebsite .popover.bs-popover-auto[x-placement^="bottom"] .arrow::before, -.bodywebsite .popover.bs-popover-bottom .arrow::after, -.bodywebsite .popover.bs-popover-auto[x-placement^="bottom"] .arrow::after { - margin-left: -0.8rem; - border-top-width: 0; -} -.bodywebsite .popover.bs-popover-bottom .arrow::before, -.bodywebsite .popover.bs-popover-auto[x-placement^="bottom"] .arrow::before { - top: -0.8rem; - border-bottom-color: rgba(0, 0, 0, 0.25); -} -.bodywebsite .popover.bs-popover-bottom .arrow::after, -.bodywebsite .popover.bs-popover-auto[x-placement^="bottom"] .arrow::after { - top: calc(0.2rem); - border-bottom-color: #fff; -} -.bodywebsite .popover.bs-popover-bottom .popover-header::before, -.bodywebsite .popover.bs-popover-auto[x-placement^="bottom"] .popover-header::before { - position: absolute; - top: 0; - left: 50%; - display: block; - width: 20px; - margin-left: -10px; - content: ""; - border-bottom: 1px solid #f7f7f7; -} -.bodywebsite .popover.bs-popover-left, -.bodywebsite .popover.bs-popover-auto[x-placement^="left"] { - margin-right: 0.8rem; -} -.bodywebsite .popover.bs-popover-left .arrow, -.bodywebsite .popover.bs-popover-auto[x-placement^="left"] .arrow { - right: 0; -} -.bodywebsite .popover.bs-popover-left .arrow::before, -.bodywebsite .popover.bs-popover-auto[x-placement^="left"] .arrow::before, -.bodywebsite .popover.bs-popover-left .arrow::after, -.bodywebsite .popover.bs-popover-auto[x-placement^="left"] .arrow::after { - margin-top: -0.8rem; - border-right-width: 0; -} -.bodywebsite .popover.bs-popover-left .arrow::before, -.bodywebsite .popover.bs-popover-auto[x-placement^="left"] .arrow::before { - right: -0.8rem; - border-left-color: rgba(0, 0, 0, 0.25); -} -.bodywebsite .popover.bs-popover-left .arrow::after, -.bodywebsite .popover.bs-popover-auto[x-placement^="left"] .arrow::after { - right: calc(0.2rem); - border-left-color: #fff; -} -.bodywebsite .popover-header { - padding: 0.5rem 0.75rem; - margin-bottom: 0; - font-size: 14px; - color: inherit; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-top-left-radius: calc(5px); - border-top-right-radius: calc(5px); -} -.bodywebsite .popover-header:empty { - display: none; -} -.bodywebsite .popover-body { - padding: 0.5rem 0.75rem; - color: #212529; -} -.bodywebsite .carousel { - position: relative; -} -.bodywebsite .carousel-inner { - position: relative; - width: 100%; - overflow: hidden; -} -.bodywebsite .carousel-item { - position: relative; - display: none; - align-items: center; - width: 100%; - transition: transform 0.6s ease; - backface-visibility: hidden; - perspective: 1000px; -} -.bodywebsite .carousel-item.active, -.bodywebsite .carousel-item-next, -.bodywebsite .carousel-item-prev { - display: block; -} -.bodywebsite .carousel-item-next, -.bodywebsite .carousel-item-prev { - position: absolute; - top: 0; -} -.bodywebsite .carousel-item-next.carousel-item-left, -.bodywebsite .carousel-item-prev.carousel-item-right { - transform: translateX(0); -} -@supports (transform-style: preserve-3d) { - .bodywebsite .carousel-item-next.carousel-item-left, - .bodywebsite .carousel-item-prev.carousel-item-right { - transform: translate3d(0, 0, 0); - } -} -.bodywebsite .carousel-item-next, -.bodywebsite .active.carousel-item-right { - transform: translateX(100%); -} -@supports (transform-style: preserve-3d) { - .bodywebsite .carousel-item-next, - .bodywebsite .active.carousel-item-right { - transform: translate3d(100%, 0, 0); - } -} -.bodywebsite .carousel-item-prev, -.bodywebsite .active.carousel-item-left { - transform: translateX(-100%); -} -@supports (transform-style: preserve-3d) { - .bodywebsite .carousel-item-prev, - .bodywebsite .active.carousel-item-left { - transform: translate3d(-100%, 0, 0); - } -} -.bodywebsite .carousel-control-prev, -.bodywebsite .carousel-control-next { - position: absolute; - top: 0; - bottom: 0; - display: flex; - align-items: center; - justify-content: center; - width: 15%; - color: #fff; - text-align: center; - opacity: 0.5; -} -.bodywebsite .carousel-control-prev:focus, -.bodywebsite .carousel-control-prev:hover, -.bodywebsite .carousel-control-next:focus, -.bodywebsite .carousel-control-next:hover { - color: #fff; - text-decoration: none; - outline: 0; - opacity: .9; -} -.bodywebsite .carousel-control-prev { - left: 0; -} -.bodywebsite .carousel-control-next { - right: 0; -} -.bodywebsite .carousel-control-prev-icon, -.bodywebsite .carousel-control-next-icon { - display: inline-block; - width: 20px; - height: 20px; - background: transparent no-repeat center center; - background-size: 100% 100%; -} -.bodywebsite .carousel-control-prev-icon { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E"); -} -.bodywebsite .carousel-control-next-icon { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E"); -} -.bodywebsite .carousel-indicators { - position: absolute; - right: 0; - bottom: 10px; - left: 0; - z-index: 15; - display: flex; - justify-content: center; - padding-left: 0; - margin-right: 15%; - margin-left: 15%; - list-style: none; -} -.bodywebsite .carousel-indicators li { - position: relative; - flex: 0 1 auto; - width: 30px; - height: 3px; - margin-right: 3px; - margin-left: 3px; - text-indent: -999px; - background-color: rgba(255, 255, 255, 0.5); -} -.bodywebsite .carousel-indicators li::before { - position: absolute; - top: -10px; - left: 0; - display: inline-block; - width: 100%; - height: 10px; - content: ""; -} -.bodywebsite .carousel-indicators li::after { - position: absolute; - bottom: -10px; - left: 0; - display: inline-block; - width: 100%; - height: 10px; - content: ""; -} -.bodywebsite .carousel-indicators .active { - background-color: #fff; -} -.bodywebsite .carousel-caption { - position: absolute; - right: 15%; - bottom: 20px; - left: 15%; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px; - color: #fff; - text-align: center; -} -.bodywebsite .align-baseline { - vertical-align: baseline !important; -} -.bodywebsite .align-top { - vertical-align: top !important; -} -.bodywebsite .align-middle { - vertical-align: middle !important; -} -.bodywebsite .align-bottom { - vertical-align: bottom !important; -} -.bodywebsite .align-text-bottom { - vertical-align: text-bottom !important; -} -.bodywebsite .align-text-top { - vertical-align: text-top !important; -} -.bodywebsite .bg-primary { - background-color: #007bff !important; -} -.bodywebsite a.bg-primary:focus, -.bodywebsite a.bg-primary:hover { - background-color: #0062cc !important; -} -.bodywebsite .bg-secondary { - background-color: #868e96 !important; -} -.bodywebsite a.bg-secondary:focus, -.bodywebsite a.bg-secondary:hover { - background-color: #6c757d !important; -} -.bodywebsite .bg-success { - background-color: #28a745 !important; -} -.bodywebsite a.bg-success:focus, -.bodywebsite a.bg-success:hover { - background-color: #1e7e34 !important; -} -.bodywebsite .bg-info { - background-color: #17a2b8 !important; -} -.bodywebsite a.bg-info:focus, -.bodywebsite a.bg-info:hover { - background-color: #117a8b !important; -} -.bodywebsite .bg-warning { - background-color: #ffc107 !important; -} -.bodywebsite a.bg-warning:focus, -.bodywebsite a.bg-warning:hover { - background-color: #d39e00 !important; -} -.bodywebsite .bg-danger { - background-color: #dc3545 !important; -} -.bodywebsite a.bg-danger:focus, -.bodywebsite a.bg-danger:hover { - background-color: #bd2130 !important; -} -.bodywebsite .bg-light { - background-color: #f8f9fa !important; -} -.bodywebsite a.bg-light:focus, -.bodywebsite a.bg-light:hover { - background-color: #dae0e5 !important; -} -.bodywebsite .bg-dark { - background-color: #343a40 !important; -} -.bodywebsite a.bg-dark:focus, -.bodywebsite a.bg-dark:hover { - background-color: #1d2124 !important; -} -.bodywebsite .bg-default { - background-color: #fff !important; -} -.bodywebsite .bg-transparent { - background-color: transparent !important; -} -.bodywebsite .border { - border: 1px solid #e9ecef !important; -} -.bodywebsite .border-0 { - border: 0 !important; -} -.bodywebsite .border-top-0 { - border-top: 0 !important; -} -.bodywebsite .border-right-0 { - border-right: 0 !important; -} -.bodywebsite .border-bottom-0 { - border-bottom: 0 !important; -} -.bodywebsite .border-left-0 { - border-left: 0 !important; -} -.bodywebsite .border-primary { - border-color: #007bff !important; -} -.bodywebsite .border-secondary { - border-color: #868e96 !important; -} -.bodywebsite .border-success { - border-color: #28a745 !important; -} -.bodywebsite .border-info { - border-color: #17a2b8 !important; -} -.bodywebsite .border-warning { - border-color: #ffc107 !important; -} -.bodywebsite .border-danger { - border-color: #dc3545 !important; -} -.bodywebsite .border-light { - border-color: #f8f9fa !important; -} -.bodywebsite .border-dark { - border-color: #343a40 !important; -} -.bodywebsite .border-white { - border-color: #fff !important; -} -.bodywebsite .rounded { - border-radius: 0 !important; -} -.bodywebsite .rounded-top { - border-top-left-radius: 0 !important; - border-top-right-radius: 0 !important; -} -.bodywebsite .rounded-right { - border-top-right-radius: 0 !important; - border-bottom-right-radius: 0 !important; -} -.bodywebsite .rounded-bottom { - border-bottom-right-radius: 0 !important; - border-bottom-left-radius: 0 !important; -} -.bodywebsite .rounded-left { - border-top-left-radius: 0 !important; - border-bottom-left-radius: 0 !important; -} -.bodywebsite .rounded-circle { - border-radius: 50% !important; -} -.bodywebsite .rounded-0 { - border-radius: 0 !important; -} -.bodywebsite .clearfix::after { - display: block; - clear: both; - content: ""; -} -.bodywebsite .d-none { - display: none !important; -} -.bodywebsite .d-inline { - display: inline !important; -} -.bodywebsite .d-inline-block { - display: inline-block !important; -} -.bodywebsite .d-block { - display: block !important; -} -.bodywebsite .d-table { - display: table !important; -} -.bodywebsite .d-table-row { - display: table-row !important; -} -.bodywebsite .d-table-cell { - display: table-cell !important; -} -.bodywebsite .d-flex { - display: flex !important; -} -.bodywebsite .d-inline-flex { - display: inline-flex !important; -} -@media (min-width: 576px) { - .bodywebsite .d-sm-none { - display: none !important; - } - .bodywebsite .d-sm-inline { - display: inline !important; - } - .bodywebsite .d-sm-inline-block { - display: inline-block !important; - } - .bodywebsite .d-sm-block { - display: block !important; - } - .bodywebsite .d-sm-table { - display: table !important; - } - .bodywebsite .d-sm-table-row { - display: table-row !important; - } - .bodywebsite .d-sm-table-cell { - display: table-cell !important; - } - .bodywebsite .d-sm-flex { - display: flex !important; - } - .bodywebsite .d-sm-inline-flex { - display: inline-flex !important; - } -} -@media (min-width: 768px) { - .bodywebsite .d-md-none { - display: none !important; - } - .bodywebsite .d-md-inline { - display: inline !important; - } - .bodywebsite .d-md-inline-block { - display: inline-block !important; - } - .bodywebsite .d-md-block { - display: block !important; - } - .bodywebsite .d-md-table { - display: table !important; - } - .bodywebsite .d-md-table-row { - display: table-row !important; - } - .bodywebsite .d-md-table-cell { - display: table-cell !important; - } - .bodywebsite .d-md-flex { - display: flex !important; - } - .bodywebsite .d-md-inline-flex { - display: inline-flex !important; - } -} -@media (min-width: 992px) { - .bodywebsite .d-lg-none { - display: none !important; - } - .bodywebsite .d-lg-inline { - display: inline !important; - } - .bodywebsite .d-lg-inline-block { - display: inline-block !important; - } - .bodywebsite .d-lg-block { - display: block !important; - } - .bodywebsite .d-lg-table { - display: table !important; - } - .bodywebsite .d-lg-table-row { - display: table-row !important; - } - .bodywebsite .d-lg-table-cell { - display: table-cell !important; - } - .bodywebsite .d-lg-flex { - display: flex !important; - } - .bodywebsite .d-lg-inline-flex { - display: inline-flex !important; - } -} -@media (min-width: 1200px) { - .bodywebsite .d-xl-none { - display: none !important; - } - .bodywebsite .d-xl-inline { - display: inline !important; - } - .bodywebsite .d-xl-inline-block { - display: inline-block !important; - } - .bodywebsite .d-xl-block { - display: block !important; - } - .bodywebsite .d-xl-table { - display: table !important; - } - .bodywebsite .d-xl-table-row { - display: table-row !important; - } - .bodywebsite .d-xl-table-cell { - display: table-cell !important; - } - .bodywebsite .d-xl-flex { - display: flex !important; - } - .bodywebsite .d-xl-inline-flex { - display: inline-flex !important; - } -} -@media (min-width: 1800px) { - .bodywebsite .d-xxl-none { - display: none !important; - } - .bodywebsite .d-xxl-inline { - display: inline !important; - } - .bodywebsite .d-xxl-inline-block { - display: inline-block !important; - } - .bodywebsite .d-xxl-block { - display: block !important; - } - .bodywebsite .d-xxl-table { - display: table !important; - } - .bodywebsite .d-xxl-table-row { - display: table-row !important; - } - .bodywebsite .d-xxl-table-cell { - display: table-cell !important; - } - .bodywebsite .d-xxl-flex { - display: flex !important; - } - .bodywebsite .d-xxl-inline-flex { - display: inline-flex !important; - } -} -.bodywebsite .d-print-block { - display: none !important; -} -@media print { - .bodywebsite .d-print-block { - display: block !important; - } -} -.bodywebsite .d-print-inline { - display: none !important; -} -@media print { - .bodywebsite .d-print-inline { - display: inline !important; - } -} -.bodywebsite .d-print-inline-block { - display: none !important; -} -@media print { - .bodywebsite .d-print-inline-block { - display: inline-block !important; - } -} -@media print { - .bodywebsite .d-print-none { - display: none !important; - } -} -.bodywebsite .embed-responsive { - position: relative; - display: block; - width: 100%; - padding: 0; - overflow: hidden; -} -.bodywebsite .embed-responsive::before { - display: block; - content: ""; -} -.bodywebsite .embed-responsive .embed-responsive-item, -.bodywebsite .embed-responsive iframe, -.bodywebsite .embed-responsive embed, -.bodywebsite .embed-responsive object, -.bodywebsite .embed-responsive video { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 100%; - height: 100%; - border: 0; -} -.bodywebsite .embed-responsive-21by9::before { - padding-top: 42.85714%; -} -.bodywebsite .embed-responsive-16by9::before { - padding-top: 56.25%; -} -.bodywebsite .embed-responsive-4by3::before { - padding-top: 75%; -} -.bodywebsite .embed-responsive-1by1::before { - padding-top: 100%; -} -.bodywebsite .flex-row { - flex-direction: row !important; -} -.bodywebsite .flex-column { - flex-direction: column !important; -} -.bodywebsite .flex-row-reverse { - flex-direction: row-reverse !important; -} -.bodywebsite .flex-column-reverse { - flex-direction: column-reverse !important; -} -.bodywebsite .flex-wrap { - flex-wrap: wrap !important; -} -.bodywebsite .flex-nowrap { - flex-wrap: nowrap !important; -} -.bodywebsite .flex-wrap-reverse { - flex-wrap: wrap-reverse !important; -} -.bodywebsite .justify-content-start { - justify-content: flex-start !important; -} -.bodywebsite .justify-content-end { - justify-content: flex-end !important; -} -.bodywebsite .justify-content-center { - justify-content: center !important; -} -.bodywebsite .justify-content-between { - justify-content: space-between !important; -} -.bodywebsite .justify-content-around { - justify-content: space-around !important; -} -.bodywebsite .align-items-start { - align-items: flex-start !important; -} -.bodywebsite .align-items-end { - align-items: flex-end !important; -} -.bodywebsite .align-items-center { - align-items: center !important; -} -.bodywebsite .align-items-baseline { - align-items: baseline !important; -} -.bodywebsite .align-items-stretch { - align-items: stretch !important; -} -.bodywebsite .align-content-start { - align-content: flex-start !important; -} -.bodywebsite .align-content-end { - align-content: flex-end !important; -} -.bodywebsite .align-content-center { - align-content: center !important; -} -.bodywebsite .align-content-between { - align-content: space-between !important; -} -.bodywebsite .align-content-around { - align-content: space-around !important; -} -.bodywebsite .align-content-stretch { - align-content: stretch !important; -} -.bodywebsite .align-self-auto { - align-self: auto !important; -} -.bodywebsite .align-self-start { - align-self: flex-start !important; -} -.bodywebsite .align-self-end { - align-self: flex-end !important; -} -.bodywebsite .align-self-center { - align-self: center !important; -} -.bodywebsite .align-self-baseline { - align-self: baseline !important; -} -.bodywebsite .align-self-stretch { - align-self: stretch !important; -} -@media (min-width: 576px) { - .bodywebsite .flex-sm-row { - flex-direction: row !important; - } - .bodywebsite .flex-sm-column { - flex-direction: column !important; - } - .bodywebsite .flex-sm-row-reverse { - flex-direction: row-reverse !important; - } - .bodywebsite .flex-sm-column-reverse { - flex-direction: column-reverse !important; - } - .bodywebsite .flex-sm-wrap { - flex-wrap: wrap !important; - } - .bodywebsite .flex-sm-nowrap { - flex-wrap: nowrap !important; - } - .bodywebsite .flex-sm-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - .bodywebsite .justify-content-sm-start { - justify-content: flex-start !important; - } - .bodywebsite .justify-content-sm-end { - justify-content: flex-end !important; - } - .bodywebsite .justify-content-sm-center { - justify-content: center !important; - } - .bodywebsite .justify-content-sm-between { - justify-content: space-between !important; - } - .bodywebsite .justify-content-sm-around { - justify-content: space-around !important; - } - .bodywebsite .align-items-sm-start { - align-items: flex-start !important; - } - .bodywebsite .align-items-sm-end { - align-items: flex-end !important; - } - .bodywebsite .align-items-sm-center { - align-items: center !important; - } - .bodywebsite .align-items-sm-baseline { - align-items: baseline !important; - } - .bodywebsite .align-items-sm-stretch { - align-items: stretch !important; - } - .bodywebsite .align-content-sm-start { - align-content: flex-start !important; - } - .bodywebsite .align-content-sm-end { - align-content: flex-end !important; - } - .bodywebsite .align-content-sm-center { - align-content: center !important; - } - .bodywebsite .align-content-sm-between { - align-content: space-between !important; - } - .bodywebsite .align-content-sm-around { - align-content: space-around !important; - } - .bodywebsite .align-content-sm-stretch { - align-content: stretch !important; - } - .bodywebsite .align-self-sm-auto { - align-self: auto !important; - } - .bodywebsite .align-self-sm-start { - align-self: flex-start !important; - } - .bodywebsite .align-self-sm-end { - align-self: flex-end !important; - } - .bodywebsite .align-self-sm-center { - align-self: center !important; - } - .bodywebsite .align-self-sm-baseline { - align-self: baseline !important; - } - .bodywebsite .align-self-sm-stretch { - align-self: stretch !important; - } -} -@media (min-width: 768px) { - .bodywebsite .flex-md-row { - flex-direction: row !important; - } - .bodywebsite .flex-md-column { - flex-direction: column !important; - } - .bodywebsite .flex-md-row-reverse { - flex-direction: row-reverse !important; - } - .bodywebsite .flex-md-column-reverse { - flex-direction: column-reverse !important; - } - .bodywebsite .flex-md-wrap { - flex-wrap: wrap !important; - } - .bodywebsite .flex-md-nowrap { - flex-wrap: nowrap !important; - } - .bodywebsite .flex-md-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - .bodywebsite .justify-content-md-start { - justify-content: flex-start !important; - } - .bodywebsite .justify-content-md-end { - justify-content: flex-end !important; - } - .bodywebsite .justify-content-md-center { - justify-content: center !important; - } - .bodywebsite .justify-content-md-between { - justify-content: space-between !important; - } - .bodywebsite .justify-content-md-around { - justify-content: space-around !important; - } - .bodywebsite .align-items-md-start { - align-items: flex-start !important; - } - .bodywebsite .align-items-md-end { - align-items: flex-end !important; - } - .bodywebsite .align-items-md-center { - align-items: center !important; - } - .bodywebsite .align-items-md-baseline { - align-items: baseline !important; - } - .bodywebsite .align-items-md-stretch { - align-items: stretch !important; - } - .bodywebsite .align-content-md-start { - align-content: flex-start !important; - } - .bodywebsite .align-content-md-end { - align-content: flex-end !important; - } - .bodywebsite .align-content-md-center { - align-content: center !important; - } - .bodywebsite .align-content-md-between { - align-content: space-between !important; - } - .bodywebsite .align-content-md-around { - align-content: space-around !important; - } - .bodywebsite .align-content-md-stretch { - align-content: stretch !important; - } - .bodywebsite .align-self-md-auto { - align-self: auto !important; - } - .bodywebsite .align-self-md-start { - align-self: flex-start !important; - } - .bodywebsite .align-self-md-end { - align-self: flex-end !important; - } - .bodywebsite .align-self-md-center { - align-self: center !important; - } - .bodywebsite .align-self-md-baseline { - align-self: baseline !important; - } - .bodywebsite .align-self-md-stretch { - align-self: stretch !important; - } -} -@media (min-width: 992px) { - .bodywebsite .flex-lg-row { - flex-direction: row !important; - } - .bodywebsite .flex-lg-column { - flex-direction: column !important; - } - .bodywebsite .flex-lg-row-reverse { - flex-direction: row-reverse !important; - } - .bodywebsite .flex-lg-column-reverse { - flex-direction: column-reverse !important; - } - .bodywebsite .flex-lg-wrap { - flex-wrap: wrap !important; - } - .bodywebsite .flex-lg-nowrap { - flex-wrap: nowrap !important; - } - .bodywebsite .flex-lg-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - .bodywebsite .justify-content-lg-start { - justify-content: flex-start !important; - } - .bodywebsite .justify-content-lg-end { - justify-content: flex-end !important; - } - .bodywebsite .justify-content-lg-center { - justify-content: center !important; - } - .bodywebsite .justify-content-lg-between { - justify-content: space-between !important; - } - .bodywebsite .justify-content-lg-around { - justify-content: space-around !important; - } - .bodywebsite .align-items-lg-start { - align-items: flex-start !important; - } - .bodywebsite .align-items-lg-end { - align-items: flex-end !important; - } - .bodywebsite .align-items-lg-center { - align-items: center !important; - } - .bodywebsite .align-items-lg-baseline { - align-items: baseline !important; - } - .bodywebsite .align-items-lg-stretch { - align-items: stretch !important; - } - .bodywebsite .align-content-lg-start { - align-content: flex-start !important; - } - .bodywebsite .align-content-lg-end { - align-content: flex-end !important; - } - .bodywebsite .align-content-lg-center { - align-content: center !important; - } - .bodywebsite .align-content-lg-between { - align-content: space-between !important; - } - .bodywebsite .align-content-lg-around { - align-content: space-around !important; - } - .bodywebsite .align-content-lg-stretch { - align-content: stretch !important; - } - .bodywebsite .align-self-lg-auto { - align-self: auto !important; - } - .bodywebsite .align-self-lg-start { - align-self: flex-start !important; - } - .bodywebsite .align-self-lg-end { - align-self: flex-end !important; - } - .bodywebsite .align-self-lg-center { - align-self: center !important; - } - .bodywebsite .align-self-lg-baseline { - align-self: baseline !important; - } - .bodywebsite .align-self-lg-stretch { - align-self: stretch !important; - } -} -@media (min-width: 1200px) { - .bodywebsite .flex-xl-row { - flex-direction: row !important; - } - .bodywebsite .flex-xl-column { - flex-direction: column !important; - } - .bodywebsite .flex-xl-row-reverse { - flex-direction: row-reverse !important; - } - .bodywebsite .flex-xl-column-reverse { - flex-direction: column-reverse !important; - } - .bodywebsite .flex-xl-wrap { - flex-wrap: wrap !important; - } - .bodywebsite .flex-xl-nowrap { - flex-wrap: nowrap !important; - } - .bodywebsite .flex-xl-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - .bodywebsite .justify-content-xl-start { - justify-content: flex-start !important; - } - .bodywebsite .justify-content-xl-end { - justify-content: flex-end !important; - } - .bodywebsite .justify-content-xl-center { - justify-content: center !important; - } - .bodywebsite .justify-content-xl-between { - justify-content: space-between !important; - } - .bodywebsite .justify-content-xl-around { - justify-content: space-around !important; - } - .bodywebsite .align-items-xl-start { - align-items: flex-start !important; - } - .bodywebsite .align-items-xl-end { - align-items: flex-end !important; - } - .bodywebsite .align-items-xl-center { - align-items: center !important; - } - .bodywebsite .align-items-xl-baseline { - align-items: baseline !important; - } - .bodywebsite .align-items-xl-stretch { - align-items: stretch !important; - } - .bodywebsite .align-content-xl-start { - align-content: flex-start !important; - } - .bodywebsite .align-content-xl-end { - align-content: flex-end !important; - } - .bodywebsite .align-content-xl-center { - align-content: center !important; - } - .bodywebsite .align-content-xl-between { - align-content: space-between !important; - } - .bodywebsite .align-content-xl-around { - align-content: space-around !important; - } - .bodywebsite .align-content-xl-stretch { - align-content: stretch !important; - } - .bodywebsite .align-self-xl-auto { - align-self: auto !important; - } - .bodywebsite .align-self-xl-start { - align-self: flex-start !important; - } - .bodywebsite .align-self-xl-end { - align-self: flex-end !important; - } - .bodywebsite .align-self-xl-center { - align-self: center !important; - } - .bodywebsite .align-self-xl-baseline { - align-self: baseline !important; - } - .bodywebsite .align-self-xl-stretch { - align-self: stretch !important; - } -} -@media (min-width: 1800px) { - .bodywebsite .flex-xxl-row { - flex-direction: row !important; - } - .bodywebsite .flex-xxl-column { - flex-direction: column !important; - } - .bodywebsite .flex-xxl-row-reverse { - flex-direction: row-reverse !important; - } - .bodywebsite .flex-xxl-column-reverse { - flex-direction: column-reverse !important; - } - .bodywebsite .flex-xxl-wrap { - flex-wrap: wrap !important; - } - .bodywebsite .flex-xxl-nowrap { - flex-wrap: nowrap !important; - } - .bodywebsite .flex-xxl-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - .bodywebsite .justify-content-xxl-start { - justify-content: flex-start !important; - } - .bodywebsite .justify-content-xxl-end { - justify-content: flex-end !important; - } - .bodywebsite .justify-content-xxl-center { - justify-content: center !important; - } - .bodywebsite .justify-content-xxl-between { - justify-content: space-between !important; - } - .bodywebsite .justify-content-xxl-around { - justify-content: space-around !important; - } - .bodywebsite .align-items-xxl-start { - align-items: flex-start !important; - } - .bodywebsite .align-items-xxl-end { - align-items: flex-end !important; - } - .bodywebsite .align-items-xxl-center { - align-items: center !important; - } - .bodywebsite .align-items-xxl-baseline { - align-items: baseline !important; - } - .bodywebsite .align-items-xxl-stretch { - align-items: stretch !important; - } - .bodywebsite .align-content-xxl-start { - align-content: flex-start !important; - } - .bodywebsite .align-content-xxl-end { - align-content: flex-end !important; - } - .bodywebsite .align-content-xxl-center { - align-content: center !important; - } - .bodywebsite .align-content-xxl-between { - align-content: space-between !important; - } - .bodywebsite .align-content-xxl-around { - align-content: space-around !important; - } - .bodywebsite .align-content-xxl-stretch { - align-content: stretch !important; - } - .bodywebsite .align-self-xxl-auto { - align-self: auto !important; - } - .bodywebsite .align-self-xxl-start { - align-self: flex-start !important; - } - .bodywebsite .align-self-xxl-end { - align-self: flex-end !important; - } - .bodywebsite .align-self-xxl-center { - align-self: center !important; - } - .bodywebsite .align-self-xxl-baseline { - align-self: baseline !important; - } - .bodywebsite .align-self-xxl-stretch { - align-self: stretch !important; - } -} -.bodywebsite .float-left { - float: left !important; -} -.bodywebsite .float-right { - float: right !important; -} -.bodywebsite .float-none { - float: none !important; -} -@media (min-width: 576px) { - .bodywebsite .float-sm-left { - float: left !important; - } - .bodywebsite .float-sm-right { - float: right !important; - } - .bodywebsite .float-sm-none { - float: none !important; - } -} -@media (min-width: 768px) { - .bodywebsite .float-md-left { - float: left !important; - } - .bodywebsite .float-md-right { - float: right !important; - } - .bodywebsite .float-md-none { - float: none !important; - } -} -@media (min-width: 992px) { - .bodywebsite .float-lg-left { - float: left !important; - } - .bodywebsite .float-lg-right { - float: right !important; - } - .bodywebsite .float-lg-none { - float: none !important; - } -} -@media (min-width: 1200px) { - .bodywebsite .float-xl-left { - float: left !important; - } - .bodywebsite .float-xl-right { - float: right !important; - } - .bodywebsite .float-xl-none { - float: none !important; - } -} -@media (min-width: 1800px) { - .bodywebsite .float-xxl-left { - float: left !important; - } - .bodywebsite .float-xxl-right { - float: right !important; - } - .bodywebsite .float-xxl-none { - float: none !important; - } -} -.bodywebsite .position-static { - position: static !important; -} -.bodywebsite .position-relative { - position: relative !important; -} -.bodywebsite .position-absolute { - position: absolute !important; -} -.bodywebsite .position-fixed { - position: fixed !important; -} -.bodywebsite .position-sticky { - position: sticky !important; -} -.bodywebsite .fixed-top { - position: fixed; - top: 0; - right: 0; - left: 0; - z-index: 1030; -} -.bodywebsite .fixed-bottom { - position: fixed; - right: 0; - bottom: 0; - left: 0; - z-index: 1030; -} -@supports (position: sticky) { - .bodywebsite .sticky-top { - position: sticky; - top: 0; - z-index: 1020; - } -} -.bodywebsite .sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - clip-path: inset(50%); - border: 0; -} -.bodywebsite .sr-only-focusable:active, -.bodywebsite .sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - overflow: visible; - clip: auto; - white-space: normal; - clip-path: none; -} -.bodywebsite .w-25 { - width: 25% !important; -} -.bodywebsite .w-50 { - width: 50% !important; -} -.bodywebsite .w-75 { - width: 75% !important; -} -.bodywebsite .w-100 { - width: 100% !important; -} -.bodywebsite .h-25 { - height: 25% !important; -} -.bodywebsite .h-50 { - height: 50% !important; -} -.bodywebsite .h-75 { - height: 75% !important; -} -.bodywebsite .h-100 { - height: 100% !important; -} -.bodywebsite .mw-100 { - max-width: 100% !important; -} -.bodywebsite .mh-100 { - max-height: 100% !important; -} -.bodywebsite .m-0 { - margin: 0 !important; -} -.bodywebsite .mt-0, -.bodywebsite .my-0 { - margin-top: 0 !important; -} -.bodywebsite .mr-0, -.bodywebsite .mx-0 { - margin-right: 0 !important; -} -.bodywebsite .mb-0, -.bodywebsite .my-0 { - margin-bottom: 0 !important; -} -.bodywebsite .ml-0, -.bodywebsite .mx-0 { - margin-left: 0 !important; -} -.bodywebsite .m-1 { - margin: 0.25rem !important; -} -.bodywebsite .mt-1, -.bodywebsite .my-1 { - margin-top: 0.25rem !important; -} -.bodywebsite .mr-1, -.bodywebsite .mx-1 { - margin-right: 0.25rem !important; -} -.bodywebsite .mb-1, -.bodywebsite .my-1 { - margin-bottom: 0.25rem !important; -} -.bodywebsite .ml-1, -.bodywebsite .mx-1 { - margin-left: 0.25rem !important; -} -.bodywebsite .m-2 { - margin: 0.5rem !important; -} -.bodywebsite .mt-2, -.bodywebsite .my-2 { - margin-top: 0.5rem !important; -} -.bodywebsite .mr-2, -.bodywebsite .mx-2 { - margin-right: 0.5rem !important; -} -.bodywebsite .mb-2, -.bodywebsite .my-2 { - margin-bottom: 0.5rem !important; -} -.bodywebsite .ml-2, -.bodywebsite .mx-2 { - margin-left: 0.5rem !important; -} -.bodywebsite .m-3 { - margin: 1rem !important; -} -.bodywebsite .mt-3, -.bodywebsite .my-3 { - margin-top: 1rem !important; -} -.bodywebsite .mr-3, -.bodywebsite .mx-3 { - margin-right: 1rem !important; -} -.bodywebsite .mb-3, -.bodywebsite .my-3 { - margin-bottom: 1rem !important; -} -.bodywebsite .ml-3, -.bodywebsite .mx-3 { - margin-left: 1rem !important; -} -.bodywebsite .m-4 { - margin: 1.5rem !important; -} -.bodywebsite .mt-4, -.bodywebsite .my-4 { - margin-top: 1.5rem !important; -} -.bodywebsite .mr-4, -.bodywebsite .mx-4 { - margin-right: 1.5rem !important; -} -.bodywebsite .mb-4, -.bodywebsite .my-4 { - margin-bottom: 1.5rem !important; -} -.bodywebsite .ml-4, -.bodywebsite .mx-4 { - margin-left: 1.5rem !important; -} -.bodywebsite .m-5 { - margin: 3rem !important; -} -.bodywebsite .mt-5, -.bodywebsite .my-5 { - margin-top: 3rem !important; -} -.bodywebsite .mr-5, -.bodywebsite .mx-5 { - margin-right: 3rem !important; -} -.bodywebsite .mb-5, -.bodywebsite .my-5 { - margin-bottom: 3rem !important; -} -.bodywebsite .ml-5, -.bodywebsite .mx-5 { - margin-left: 3rem !important; -} -.bodywebsite .p-0 { - padding: 0 !important; -} -.bodywebsite .pt-0, -.bodywebsite .py-0 { - padding-top: 0 !important; -} -.bodywebsite .pr-0, -.bodywebsite .px-0 { - padding-right: 0 !important; -} -.bodywebsite .pb-0, -.bodywebsite .py-0 { - padding-bottom: 0 !important; -} -.bodywebsite .pl-0, -.bodywebsite .px-0 { - padding-left: 0 !important; -} -.bodywebsite .p-1 { - padding: 0.25rem !important; -} -.bodywebsite .pt-1, -.bodywebsite .py-1 { - padding-top: 0.25rem !important; -} -.bodywebsite .pr-1, -.bodywebsite .px-1 { - padding-right: 0.25rem !important; -} -.bodywebsite .pb-1, -.bodywebsite .py-1 { - padding-bottom: 0.25rem !important; -} -.bodywebsite .pl-1, -.bodywebsite .px-1 { - padding-left: 0.25rem !important; -} -.bodywebsite .p-2 { - padding: 0.5rem !important; -} -.bodywebsite .pt-2, -.bodywebsite .py-2 { - padding-top: 0.5rem !important; -} -.bodywebsite .pr-2, -.bodywebsite .px-2 { - padding-right: 0.5rem !important; -} -.bodywebsite .pb-2, -.bodywebsite .py-2 { - padding-bottom: 0.5rem !important; -} -.bodywebsite .pl-2, -.bodywebsite .px-2 { - padding-left: 0.5rem !important; -} -.bodywebsite .p-3 { - padding: 1rem !important; -} -.bodywebsite .pt-3, -.bodywebsite .py-3 { - padding-top: 1rem !important; -} -.bodywebsite .pr-3, -.bodywebsite .px-3 { - padding-right: 1rem !important; -} -.bodywebsite .pb-3, -.bodywebsite .py-3 { - padding-bottom: 1rem !important; -} -.bodywebsite .pl-3, -.bodywebsite .px-3 { - padding-left: 1rem !important; -} -.bodywebsite .p-4 { - padding: 1.5rem !important; -} -.bodywebsite .pt-4, -.bodywebsite .py-4 { - padding-top: 1.5rem !important; -} -.bodywebsite .pr-4, -.bodywebsite .px-4 { - padding-right: 1.5rem !important; -} -.bodywebsite .pb-4, -.bodywebsite .py-4 { - padding-bottom: 1.5rem !important; -} -.bodywebsite .pl-4, -.bodywebsite .px-4 { - padding-left: 1.5rem !important; -} -.bodywebsite .p-5 { - padding: 3rem !important; -} -.bodywebsite .pt-5, -.bodywebsite .py-5 { - padding-top: 3rem !important; -} -.bodywebsite .pr-5, -.bodywebsite .px-5 { - padding-right: 3rem !important; -} -.bodywebsite .pb-5, -.bodywebsite .py-5 { - padding-bottom: 3rem !important; -} -.bodywebsite .pl-5, -.bodywebsite .px-5 { - padding-left: 3rem !important; -} -.bodywebsite .m-auto { - margin: auto !important; -} -.bodywebsite .mt-auto, -.bodywebsite .my-auto { - margin-top: auto !important; -} -.bodywebsite .mr-auto, -.bodywebsite .mx-auto { - margin-right: auto !important; -} -.bodywebsite .mb-auto, -.bodywebsite .my-auto { - margin-bottom: auto !important; -} -.bodywebsite .ml-auto, -.bodywebsite .mx-auto { - margin-left: auto !important; -} -@media (min-width: 576px) { - .bodywebsite .m-sm-0 { - margin: 0 !important; - } - .bodywebsite .mt-sm-0, - .bodywebsite .my-sm-0 { - margin-top: 0 !important; - } - .bodywebsite .mr-sm-0, - .bodywebsite .mx-sm-0 { - margin-right: 0 !important; - } - .bodywebsite .mb-sm-0, - .bodywebsite .my-sm-0 { - margin-bottom: 0 !important; - } - .bodywebsite .ml-sm-0, - .bodywebsite .mx-sm-0 { - margin-left: 0 !important; - } - .bodywebsite .m-sm-1 { - margin: 0.25rem !important; - } - .bodywebsite .mt-sm-1, - .bodywebsite .my-sm-1 { - margin-top: 0.25rem !important; - } - .bodywebsite .mr-sm-1, - .bodywebsite .mx-sm-1 { - margin-right: 0.25rem !important; - } - .bodywebsite .mb-sm-1, - .bodywebsite .my-sm-1 { - margin-bottom: 0.25rem !important; - } - .bodywebsite .ml-sm-1, - .bodywebsite .mx-sm-1 { - margin-left: 0.25rem !important; - } - .bodywebsite .m-sm-2 { - margin: 0.5rem !important; - } - .bodywebsite .mt-sm-2, - .bodywebsite .my-sm-2 { - margin-top: 0.5rem !important; - } - .bodywebsite .mr-sm-2, - .bodywebsite .mx-sm-2 { - margin-right: 0.5rem !important; - } - .bodywebsite .mb-sm-2, - .bodywebsite .my-sm-2 { - margin-bottom: 0.5rem !important; - } - .bodywebsite .ml-sm-2, - .bodywebsite .mx-sm-2 { - margin-left: 0.5rem !important; - } - .bodywebsite .m-sm-3 { - margin: 1rem !important; - } - .bodywebsite .mt-sm-3, - .bodywebsite .my-sm-3 { - margin-top: 1rem !important; - } - .bodywebsite .mr-sm-3, - .bodywebsite .mx-sm-3 { - margin-right: 1rem !important; - } - .bodywebsite .mb-sm-3, - .bodywebsite .my-sm-3 { - margin-bottom: 1rem !important; - } - .bodywebsite .ml-sm-3, - .bodywebsite .mx-sm-3 { - margin-left: 1rem !important; - } - .bodywebsite .m-sm-4 { - margin: 1.5rem !important; - } - .bodywebsite .mt-sm-4, - .bodywebsite .my-sm-4 { - margin-top: 1.5rem !important; - } - .bodywebsite .mr-sm-4, - .bodywebsite .mx-sm-4 { - margin-right: 1.5rem !important; - } - .bodywebsite .mb-sm-4, - .bodywebsite .my-sm-4 { - margin-bottom: 1.5rem !important; - } - .bodywebsite .ml-sm-4, - .bodywebsite .mx-sm-4 { - margin-left: 1.5rem !important; - } - .bodywebsite .m-sm-5 { - margin: 3rem !important; - } - .bodywebsite .mt-sm-5, - .bodywebsite .my-sm-5 { - margin-top: 3rem !important; - } - .bodywebsite .mr-sm-5, - .bodywebsite .mx-sm-5 { - margin-right: 3rem !important; - } - .bodywebsite .mb-sm-5, - .bodywebsite .my-sm-5 { - margin-bottom: 3rem !important; - } - .bodywebsite .ml-sm-5, - .bodywebsite .mx-sm-5 { - margin-left: 3rem !important; - } - .bodywebsite .p-sm-0 { - padding: 0 !important; - } - .bodywebsite .pt-sm-0, - .bodywebsite .py-sm-0 { - padding-top: 0 !important; - } - .bodywebsite .pr-sm-0, - .bodywebsite .px-sm-0 { - padding-right: 0 !important; - } - .bodywebsite .pb-sm-0, - .bodywebsite .py-sm-0 { - padding-bottom: 0 !important; - } - .bodywebsite .pl-sm-0, - .bodywebsite .px-sm-0 { - padding-left: 0 !important; - } - .bodywebsite .p-sm-1 { - padding: 0.25rem !important; - } - .bodywebsite .pt-sm-1, - .bodywebsite .py-sm-1 { - padding-top: 0.25rem !important; - } - .bodywebsite .pr-sm-1, - .bodywebsite .px-sm-1 { - padding-right: 0.25rem !important; - } - .bodywebsite .pb-sm-1, - .bodywebsite .py-sm-1 { - padding-bottom: 0.25rem !important; - } - .bodywebsite .pl-sm-1, - .bodywebsite .px-sm-1 { - padding-left: 0.25rem !important; - } - .bodywebsite .p-sm-2 { - padding: 0.5rem !important; - } - .bodywebsite .pt-sm-2, - .bodywebsite .py-sm-2 { - padding-top: 0.5rem !important; - } - .bodywebsite .pr-sm-2, - .bodywebsite .px-sm-2 { - padding-right: 0.5rem !important; - } - .bodywebsite .pb-sm-2, - .bodywebsite .py-sm-2 { - padding-bottom: 0.5rem !important; - } - .bodywebsite .pl-sm-2, - .bodywebsite .px-sm-2 { - padding-left: 0.5rem !important; - } - .bodywebsite .p-sm-3 { - padding: 1rem !important; - } - .bodywebsite .pt-sm-3, - .bodywebsite .py-sm-3 { - padding-top: 1rem !important; - } - .bodywebsite .pr-sm-3, - .bodywebsite .px-sm-3 { - padding-right: 1rem !important; - } - .bodywebsite .pb-sm-3, - .bodywebsite .py-sm-3 { - padding-bottom: 1rem !important; - } - .bodywebsite .pl-sm-3, - .bodywebsite .px-sm-3 { - padding-left: 1rem !important; - } - .bodywebsite .p-sm-4 { - padding: 1.5rem !important; - } - .bodywebsite .pt-sm-4, - .bodywebsite .py-sm-4 { - padding-top: 1.5rem !important; - } - .bodywebsite .pr-sm-4, - .bodywebsite .px-sm-4 { - padding-right: 1.5rem !important; - } - .bodywebsite .pb-sm-4, - .bodywebsite .py-sm-4 { - padding-bottom: 1.5rem !important; - } - .bodywebsite .pl-sm-4, - .bodywebsite .px-sm-4 { - padding-left: 1.5rem !important; - } - .bodywebsite .p-sm-5 { - padding: 3rem !important; - } - .bodywebsite .pt-sm-5, - .bodywebsite .py-sm-5 { - padding-top: 3rem !important; - } - .bodywebsite .pr-sm-5, - .bodywebsite .px-sm-5 { - padding-right: 3rem !important; - } - .bodywebsite .pb-sm-5, - .bodywebsite .py-sm-5 { - padding-bottom: 3rem !important; - } - .bodywebsite .pl-sm-5, - .bodywebsite .px-sm-5 { - padding-left: 3rem !important; - } - .bodywebsite .m-sm-auto { - margin: auto !important; - } - .bodywebsite .mt-sm-auto, - .bodywebsite .my-sm-auto { - margin-top: auto !important; - } - .bodywebsite .mr-sm-auto, - .bodywebsite .mx-sm-auto { - margin-right: auto !important; - } - .bodywebsite .mb-sm-auto, - .bodywebsite .my-sm-auto { - margin-bottom: auto !important; - } - .bodywebsite .ml-sm-auto, - .bodywebsite .mx-sm-auto { - margin-left: auto !important; - } -} -@media (min-width: 768px) { - .bodywebsite .m-md-0 { - margin: 0 !important; - } - .bodywebsite .mt-md-0, - .bodywebsite .my-md-0 { - margin-top: 0 !important; - } - .bodywebsite .mr-md-0, - .bodywebsite .mx-md-0 { - margin-right: 0 !important; - } - .bodywebsite .mb-md-0, - .bodywebsite .my-md-0 { - margin-bottom: 0 !important; - } - .bodywebsite .ml-md-0, - .bodywebsite .mx-md-0 { - margin-left: 0 !important; - } - .bodywebsite .m-md-1 { - margin: 0.25rem !important; - } - .bodywebsite .mt-md-1, - .bodywebsite .my-md-1 { - margin-top: 0.25rem !important; - } - .bodywebsite .mr-md-1, - .bodywebsite .mx-md-1 { - margin-right: 0.25rem !important; - } - .bodywebsite .mb-md-1, - .bodywebsite .my-md-1 { - margin-bottom: 0.25rem !important; - } - .bodywebsite .ml-md-1, - .bodywebsite .mx-md-1 { - margin-left: 0.25rem !important; - } - .bodywebsite .m-md-2 { - margin: 0.5rem !important; - } - .bodywebsite .mt-md-2, - .bodywebsite .my-md-2 { - margin-top: 0.5rem !important; - } - .bodywebsite .mr-md-2, - .bodywebsite .mx-md-2 { - margin-right: 0.5rem !important; - } - .bodywebsite .mb-md-2, - .bodywebsite .my-md-2 { - margin-bottom: 0.5rem !important; - } - .bodywebsite .ml-md-2, - .bodywebsite .mx-md-2 { - margin-left: 0.5rem !important; - } - .bodywebsite .m-md-3 { - margin: 1rem !important; - } - .bodywebsite .mt-md-3, - .bodywebsite .my-md-3 { - margin-top: 1rem !important; - } - .bodywebsite .mr-md-3, - .bodywebsite .mx-md-3 { - margin-right: 1rem !important; - } - .bodywebsite .mb-md-3, - .bodywebsite .my-md-3 { - margin-bottom: 1rem !important; - } - .bodywebsite .ml-md-3, - .bodywebsite .mx-md-3 { - margin-left: 1rem !important; - } - .bodywebsite .m-md-4 { - margin: 1.5rem !important; - } - .bodywebsite .mt-md-4, - .bodywebsite .my-md-4 { - margin-top: 1.5rem !important; - } - .bodywebsite .mr-md-4, - .bodywebsite .mx-md-4 { - margin-right: 1.5rem !important; - } - .bodywebsite .mb-md-4, - .bodywebsite .my-md-4 { - margin-bottom: 1.5rem !important; - } - .bodywebsite .ml-md-4, - .bodywebsite .mx-md-4 { - margin-left: 1.5rem !important; - } - .bodywebsite .m-md-5 { - margin: 3rem !important; - } - .bodywebsite .mt-md-5, - .bodywebsite .my-md-5 { - margin-top: 3rem !important; - } - .bodywebsite .mr-md-5, - .bodywebsite .mx-md-5 { - margin-right: 3rem !important; - } - .bodywebsite .mb-md-5, - .bodywebsite .my-md-5 { - margin-bottom: 3rem !important; - } - .bodywebsite .ml-md-5, - .bodywebsite .mx-md-5 { - margin-left: 3rem !important; - } - .bodywebsite .p-md-0 { - padding: 0 !important; - } - .bodywebsite .pt-md-0, - .bodywebsite .py-md-0 { - padding-top: 0 !important; - } - .bodywebsite .pr-md-0, - .bodywebsite .px-md-0 { - padding-right: 0 !important; - } - .bodywebsite .pb-md-0, - .bodywebsite .py-md-0 { - padding-bottom: 0 !important; - } - .bodywebsite .pl-md-0, - .bodywebsite .px-md-0 { - padding-left: 0 !important; - } - .bodywebsite .p-md-1 { - padding: 0.25rem !important; - } - .bodywebsite .pt-md-1, - .bodywebsite .py-md-1 { - padding-top: 0.25rem !important; - } - .bodywebsite .pr-md-1, - .bodywebsite .px-md-1 { - padding-right: 0.25rem !important; - } - .bodywebsite .pb-md-1, - .bodywebsite .py-md-1 { - padding-bottom: 0.25rem !important; - } - .bodywebsite .pl-md-1, - .bodywebsite .px-md-1 { - padding-left: 0.25rem !important; - } - .bodywebsite .p-md-2 { - padding: 0.5rem !important; - } - .bodywebsite .pt-md-2, - .bodywebsite .py-md-2 { - padding-top: 0.5rem !important; - } - .bodywebsite .pr-md-2, - .bodywebsite .px-md-2 { - padding-right: 0.5rem !important; - } - .bodywebsite .pb-md-2, - .bodywebsite .py-md-2 { - padding-bottom: 0.5rem !important; - } - .bodywebsite .pl-md-2, - .bodywebsite .px-md-2 { - padding-left: 0.5rem !important; - } - .bodywebsite .p-md-3 { - padding: 1rem !important; - } - .bodywebsite .pt-md-3, - .bodywebsite .py-md-3 { - padding-top: 1rem !important; - } - .bodywebsite .pr-md-3, - .bodywebsite .px-md-3 { - padding-right: 1rem !important; - } - .bodywebsite .pb-md-3, - .bodywebsite .py-md-3 { - padding-bottom: 1rem !important; - } - .bodywebsite .pl-md-3, - .bodywebsite .px-md-3 { - padding-left: 1rem !important; - } - .bodywebsite .p-md-4 { - padding: 1.5rem !important; - } - .bodywebsite .pt-md-4, - .bodywebsite .py-md-4 { - padding-top: 1.5rem !important; - } - .bodywebsite .pr-md-4, - .bodywebsite .px-md-4 { - padding-right: 1.5rem !important; - } - .bodywebsite .pb-md-4, - .bodywebsite .py-md-4 { - padding-bottom: 1.5rem !important; - } - .bodywebsite .pl-md-4, - .bodywebsite .px-md-4 { - padding-left: 1.5rem !important; - } - .bodywebsite .p-md-5 { - padding: 3rem !important; - } - .bodywebsite .pt-md-5, - .bodywebsite .py-md-5 { - padding-top: 3rem !important; - } - .bodywebsite .pr-md-5, - .bodywebsite .px-md-5 { - padding-right: 3rem !important; - } - .bodywebsite .pb-md-5, - .bodywebsite .py-md-5 { - padding-bottom: 3rem !important; - } - .bodywebsite .pl-md-5, - .bodywebsite .px-md-5 { - padding-left: 3rem !important; - } - .bodywebsite .m-md-auto { - margin: auto !important; - } - .bodywebsite .mt-md-auto, - .bodywebsite .my-md-auto { - margin-top: auto !important; - } - .bodywebsite .mr-md-auto, - .bodywebsite .mx-md-auto { - margin-right: auto !important; - } - .bodywebsite .mb-md-auto, - .bodywebsite .my-md-auto { - margin-bottom: auto !important; - } - .bodywebsite .ml-md-auto, - .bodywebsite .mx-md-auto { - margin-left: auto !important; - } -} -@media (min-width: 992px) { - .bodywebsite .m-lg-0 { - margin: 0 !important; - } - .bodywebsite .mt-lg-0, - .bodywebsite .my-lg-0 { - margin-top: 0 !important; - } - .bodywebsite .mr-lg-0, - .bodywebsite .mx-lg-0 { - margin-right: 0 !important; - } - .bodywebsite .mb-lg-0, - .bodywebsite .my-lg-0 { - margin-bottom: 0 !important; - } - .bodywebsite .ml-lg-0, - .bodywebsite .mx-lg-0 { - margin-left: 0 !important; - } - .bodywebsite .m-lg-1 { - margin: 0.25rem !important; - } - .bodywebsite .mt-lg-1, - .bodywebsite .my-lg-1 { - margin-top: 0.25rem !important; - } - .bodywebsite .mr-lg-1, - .bodywebsite .mx-lg-1 { - margin-right: 0.25rem !important; - } - .bodywebsite .mb-lg-1, - .bodywebsite .my-lg-1 { - margin-bottom: 0.25rem !important; - } - .bodywebsite .ml-lg-1, - .bodywebsite .mx-lg-1 { - margin-left: 0.25rem !important; - } - .bodywebsite .m-lg-2 { - margin: 0.5rem !important; - } - .bodywebsite .mt-lg-2, - .bodywebsite .my-lg-2 { - margin-top: 0.5rem !important; - } - .bodywebsite .mr-lg-2, - .bodywebsite .mx-lg-2 { - margin-right: 0.5rem !important; - } - .bodywebsite .mb-lg-2, - .bodywebsite .my-lg-2 { - margin-bottom: 0.5rem !important; - } - .bodywebsite .ml-lg-2, - .bodywebsite .mx-lg-2 { - margin-left: 0.5rem !important; - } - .bodywebsite .m-lg-3 { - margin: 1rem !important; - } - .bodywebsite .mt-lg-3, - .bodywebsite .my-lg-3 { - margin-top: 1rem !important; - } - .bodywebsite .mr-lg-3, - .bodywebsite .mx-lg-3 { - margin-right: 1rem !important; - } - .bodywebsite .mb-lg-3, - .bodywebsite .my-lg-3 { - margin-bottom: 1rem !important; - } - .bodywebsite .ml-lg-3, - .bodywebsite .mx-lg-3 { - margin-left: 1rem !important; - } - .bodywebsite .m-lg-4 { - margin: 1.5rem !important; - } - .bodywebsite .mt-lg-4, - .bodywebsite .my-lg-4 { - margin-top: 1.5rem !important; - } - .bodywebsite .mr-lg-4, - .bodywebsite .mx-lg-4 { - margin-right: 1.5rem !important; - } - .bodywebsite .mb-lg-4, - .bodywebsite .my-lg-4 { - margin-bottom: 1.5rem !important; - } - .bodywebsite .ml-lg-4, - .bodywebsite .mx-lg-4 { - margin-left: 1.5rem !important; - } - .bodywebsite .m-lg-5 { - margin: 3rem !important; - } - .bodywebsite .mt-lg-5, - .bodywebsite .my-lg-5 { - margin-top: 3rem !important; - } - .bodywebsite .mr-lg-5, - .bodywebsite .mx-lg-5 { - margin-right: 3rem !important; - } - .bodywebsite .mb-lg-5, - .bodywebsite .my-lg-5 { - margin-bottom: 3rem !important; - } - .bodywebsite .ml-lg-5, - .bodywebsite .mx-lg-5 { - margin-left: 3rem !important; - } - .bodywebsite .p-lg-0 { - padding: 0 !important; - } - .bodywebsite .pt-lg-0, - .bodywebsite .py-lg-0 { - padding-top: 0 !important; - } - .bodywebsite .pr-lg-0, - .bodywebsite .px-lg-0 { - padding-right: 0 !important; - } - .bodywebsite .pb-lg-0, - .bodywebsite .py-lg-0 { - padding-bottom: 0 !important; - } - .bodywebsite .pl-lg-0, - .bodywebsite .px-lg-0 { - padding-left: 0 !important; - } - .bodywebsite .p-lg-1 { - padding: 0.25rem !important; - } - .bodywebsite .pt-lg-1, - .bodywebsite .py-lg-1 { - padding-top: 0.25rem !important; - } - .bodywebsite .pr-lg-1, - .bodywebsite .px-lg-1 { - padding-right: 0.25rem !important; - } - .bodywebsite .pb-lg-1, - .bodywebsite .py-lg-1 { - padding-bottom: 0.25rem !important; - } - .bodywebsite .pl-lg-1, - .bodywebsite .px-lg-1 { - padding-left: 0.25rem !important; - } - .bodywebsite .p-lg-2 { - padding: 0.5rem !important; - } - .bodywebsite .pt-lg-2, - .bodywebsite .py-lg-2 { - padding-top: 0.5rem !important; - } - .bodywebsite .pr-lg-2, - .bodywebsite .px-lg-2 { - padding-right: 0.5rem !important; - } - .bodywebsite .pb-lg-2, - .bodywebsite .py-lg-2 { - padding-bottom: 0.5rem !important; - } - .bodywebsite .pl-lg-2, - .bodywebsite .px-lg-2 { - padding-left: 0.5rem !important; - } - .bodywebsite .p-lg-3 { - padding: 1rem !important; - } - .bodywebsite .pt-lg-3, - .bodywebsite .py-lg-3 { - padding-top: 1rem !important; - } - .bodywebsite .pr-lg-3, - .bodywebsite .px-lg-3 { - padding-right: 1rem !important; - } - .bodywebsite .pb-lg-3, - .bodywebsite .py-lg-3 { - padding-bottom: 1rem !important; - } - .bodywebsite .pl-lg-3, - .bodywebsite .px-lg-3 { - padding-left: 1rem !important; - } - .bodywebsite .p-lg-4 { - padding: 1.5rem !important; - } - .bodywebsite .pt-lg-4, - .bodywebsite .py-lg-4 { - padding-top: 1.5rem !important; - } - .bodywebsite .pr-lg-4, - .bodywebsite .px-lg-4 { - padding-right: 1.5rem !important; - } - .bodywebsite .pb-lg-4, - .bodywebsite .py-lg-4 { - padding-bottom: 1.5rem !important; - } - .bodywebsite .pl-lg-4, - .bodywebsite .px-lg-4 { - padding-left: 1.5rem !important; - } - .bodywebsite .p-lg-5 { - padding: 3rem !important; - } - .bodywebsite .pt-lg-5, - .bodywebsite .py-lg-5 { - padding-top: 3rem !important; - } - .bodywebsite .pr-lg-5, - .bodywebsite .px-lg-5 { - padding-right: 3rem !important; - } - .bodywebsite .pb-lg-5, - .bodywebsite .py-lg-5 { - padding-bottom: 3rem !important; - } - .bodywebsite .pl-lg-5, - .bodywebsite .px-lg-5 { - padding-left: 3rem !important; - } - .bodywebsite .m-lg-auto { - margin: auto !important; - } - .bodywebsite .mt-lg-auto, - .bodywebsite .my-lg-auto { - margin-top: auto !important; - } - .bodywebsite .mr-lg-auto, - .bodywebsite .mx-lg-auto { - margin-right: auto !important; - } - .bodywebsite .mb-lg-auto, - .bodywebsite .my-lg-auto { - margin-bottom: auto !important; - } - .bodywebsite .ml-lg-auto, - .bodywebsite .mx-lg-auto { - margin-left: auto !important; - } -} -@media (min-width: 1200px) { - .bodywebsite .m-xl-0 { - margin: 0 !important; - } - .bodywebsite .mt-xl-0, - .bodywebsite .my-xl-0 { - margin-top: 0 !important; - } - .bodywebsite .mr-xl-0, - .bodywebsite .mx-xl-0 { - margin-right: 0 !important; - } - .bodywebsite .mb-xl-0, - .bodywebsite .my-xl-0 { - margin-bottom: 0 !important; - } - .bodywebsite .ml-xl-0, - .bodywebsite .mx-xl-0 { - margin-left: 0 !important; - } - .bodywebsite .m-xl-1 { - margin: 0.25rem !important; - } - .bodywebsite .mt-xl-1, - .bodywebsite .my-xl-1 { - margin-top: 0.25rem !important; - } - .bodywebsite .mr-xl-1, - .bodywebsite .mx-xl-1 { - margin-right: 0.25rem !important; - } - .bodywebsite .mb-xl-1, - .bodywebsite .my-xl-1 { - margin-bottom: 0.25rem !important; - } - .bodywebsite .ml-xl-1, - .bodywebsite .mx-xl-1 { - margin-left: 0.25rem !important; - } - .bodywebsite .m-xl-2 { - margin: 0.5rem !important; - } - .bodywebsite .mt-xl-2, - .bodywebsite .my-xl-2 { - margin-top: 0.5rem !important; - } - .bodywebsite .mr-xl-2, - .bodywebsite .mx-xl-2 { - margin-right: 0.5rem !important; - } - .bodywebsite .mb-xl-2, - .bodywebsite .my-xl-2 { - margin-bottom: 0.5rem !important; - } - .bodywebsite .ml-xl-2, - .bodywebsite .mx-xl-2 { - margin-left: 0.5rem !important; - } - .bodywebsite .m-xl-3 { - margin: 1rem !important; - } - .bodywebsite .mt-xl-3, - .bodywebsite .my-xl-3 { - margin-top: 1rem !important; - } - .bodywebsite .mr-xl-3, - .bodywebsite .mx-xl-3 { - margin-right: 1rem !important; - } - .bodywebsite .mb-xl-3, - .bodywebsite .my-xl-3 { - margin-bottom: 1rem !important; - } - .bodywebsite .ml-xl-3, - .bodywebsite .mx-xl-3 { - margin-left: 1rem !important; - } - .bodywebsite .m-xl-4 { - margin: 1.5rem !important; - } - .bodywebsite .mt-xl-4, - .bodywebsite .my-xl-4 { - margin-top: 1.5rem !important; - } - .bodywebsite .mr-xl-4, - .bodywebsite .mx-xl-4 { - margin-right: 1.5rem !important; - } - .bodywebsite .mb-xl-4, - .bodywebsite .my-xl-4 { - margin-bottom: 1.5rem !important; - } - .bodywebsite .ml-xl-4, - .bodywebsite .mx-xl-4 { - margin-left: 1.5rem !important; - } - .bodywebsite .m-xl-5 { - margin: 3rem !important; - } - .bodywebsite .mt-xl-5, - .bodywebsite .my-xl-5 { - margin-top: 3rem !important; - } - .bodywebsite .mr-xl-5, - .bodywebsite .mx-xl-5 { - margin-right: 3rem !important; - } - .bodywebsite .mb-xl-5, - .bodywebsite .my-xl-5 { - margin-bottom: 3rem !important; - } - .bodywebsite .ml-xl-5, - .bodywebsite .mx-xl-5 { - margin-left: 3rem !important; - } - .bodywebsite .p-xl-0 { - padding: 0 !important; - } - .bodywebsite .pt-xl-0, - .bodywebsite .py-xl-0 { - padding-top: 0 !important; - } - .bodywebsite .pr-xl-0, - .bodywebsite .px-xl-0 { - padding-right: 0 !important; - } - .bodywebsite .pb-xl-0, - .bodywebsite .py-xl-0 { - padding-bottom: 0 !important; - } - .bodywebsite .pl-xl-0, - .bodywebsite .px-xl-0 { - padding-left: 0 !important; - } - .bodywebsite .p-xl-1 { - padding: 0.25rem !important; - } - .bodywebsite .pt-xl-1, - .bodywebsite .py-xl-1 { - padding-top: 0.25rem !important; - } - .bodywebsite .pr-xl-1, - .bodywebsite .px-xl-1 { - padding-right: 0.25rem !important; - } - .bodywebsite .pb-xl-1, - .bodywebsite .py-xl-1 { - padding-bottom: 0.25rem !important; - } - .bodywebsite .pl-xl-1, - .bodywebsite .px-xl-1 { - padding-left: 0.25rem !important; - } - .bodywebsite .p-xl-2 { - padding: 0.5rem !important; - } - .bodywebsite .pt-xl-2, - .bodywebsite .py-xl-2 { - padding-top: 0.5rem !important; - } - .bodywebsite .pr-xl-2, - .bodywebsite .px-xl-2 { - padding-right: 0.5rem !important; - } - .bodywebsite .pb-xl-2, - .bodywebsite .py-xl-2 { - padding-bottom: 0.5rem !important; - } - .bodywebsite .pl-xl-2, - .bodywebsite .px-xl-2 { - padding-left: 0.5rem !important; - } - .bodywebsite .p-xl-3 { - padding: 1rem !important; - } - .bodywebsite .pt-xl-3, - .bodywebsite .py-xl-3 { - padding-top: 1rem !important; - } - .bodywebsite .pr-xl-3, - .bodywebsite .px-xl-3 { - padding-right: 1rem !important; - } - .bodywebsite .pb-xl-3, - .bodywebsite .py-xl-3 { - padding-bottom: 1rem !important; - } - .bodywebsite .pl-xl-3, - .bodywebsite .px-xl-3 { - padding-left: 1rem !important; - } - .bodywebsite .p-xl-4 { - padding: 1.5rem !important; - } - .bodywebsite .pt-xl-4, - .bodywebsite .py-xl-4 { - padding-top: 1.5rem !important; - } - .bodywebsite .pr-xl-4, - .bodywebsite .px-xl-4 { - padding-right: 1.5rem !important; - } - .bodywebsite .pb-xl-4, - .bodywebsite .py-xl-4 { - padding-bottom: 1.5rem !important; - } - .bodywebsite .pl-xl-4, - .bodywebsite .px-xl-4 { - padding-left: 1.5rem !important; - } - .bodywebsite .p-xl-5 { - padding: 3rem !important; - } - .bodywebsite .pt-xl-5, - .bodywebsite .py-xl-5 { - padding-top: 3rem !important; - } - .bodywebsite .pr-xl-5, - .bodywebsite .px-xl-5 { - padding-right: 3rem !important; - } - .bodywebsite .pb-xl-5, - .bodywebsite .py-xl-5 { - padding-bottom: 3rem !important; - } - .bodywebsite .pl-xl-5, - .bodywebsite .px-xl-5 { - padding-left: 3rem !important; - } - .bodywebsite .m-xl-auto { - margin: auto !important; - } - .bodywebsite .mt-xl-auto, - .bodywebsite .my-xl-auto { - margin-top: auto !important; - } - .bodywebsite .mr-xl-auto, - .bodywebsite .mx-xl-auto { - margin-right: auto !important; - } - .bodywebsite .mb-xl-auto, - .bodywebsite .my-xl-auto { - margin-bottom: auto !important; - } - .bodywebsite .ml-xl-auto, - .bodywebsite .mx-xl-auto { - margin-left: auto !important; - } -} -@media (min-width: 1800px) { - .bodywebsite .m-xxl-0 { - margin: 0 !important; - } - .bodywebsite .mt-xxl-0, - .bodywebsite .my-xxl-0 { - margin-top: 0 !important; - } - .bodywebsite .mr-xxl-0, - .bodywebsite .mx-xxl-0 { - margin-right: 0 !important; - } - .bodywebsite .mb-xxl-0, - .bodywebsite .my-xxl-0 { - margin-bottom: 0 !important; - } - .bodywebsite .ml-xxl-0, - .bodywebsite .mx-xxl-0 { - margin-left: 0 !important; - } - .bodywebsite .m-xxl-1 { - margin: 0.25rem !important; - } - .bodywebsite .mt-xxl-1, - .bodywebsite .my-xxl-1 { - margin-top: 0.25rem !important; - } - .bodywebsite .mr-xxl-1, - .bodywebsite .mx-xxl-1 { - margin-right: 0.25rem !important; - } - .bodywebsite .mb-xxl-1, - .bodywebsite .my-xxl-1 { - margin-bottom: 0.25rem !important; - } - .bodywebsite .ml-xxl-1, - .bodywebsite .mx-xxl-1 { - margin-left: 0.25rem !important; - } - .bodywebsite .m-xxl-2 { - margin: 0.5rem !important; - } - .bodywebsite .mt-xxl-2, - .bodywebsite .my-xxl-2 { - margin-top: 0.5rem !important; - } - .bodywebsite .mr-xxl-2, - .bodywebsite .mx-xxl-2 { - margin-right: 0.5rem !important; - } - .bodywebsite .mb-xxl-2, - .bodywebsite .my-xxl-2 { - margin-bottom: 0.5rem !important; - } - .bodywebsite .ml-xxl-2, - .bodywebsite .mx-xxl-2 { - margin-left: 0.5rem !important; - } - .bodywebsite .m-xxl-3 { - margin: 1rem !important; - } - .bodywebsite .mt-xxl-3, - .bodywebsite .my-xxl-3 { - margin-top: 1rem !important; - } - .bodywebsite .mr-xxl-3, - .bodywebsite .mx-xxl-3 { - margin-right: 1rem !important; - } - .bodywebsite .mb-xxl-3, - .bodywebsite .my-xxl-3 { - margin-bottom: 1rem !important; - } - .bodywebsite .ml-xxl-3, - .bodywebsite .mx-xxl-3 { - margin-left: 1rem !important; - } - .bodywebsite .m-xxl-4 { - margin: 1.5rem !important; - } - .bodywebsite .mt-xxl-4, - .bodywebsite .my-xxl-4 { - margin-top: 1.5rem !important; - } - .bodywebsite .mr-xxl-4, - .bodywebsite .mx-xxl-4 { - margin-right: 1.5rem !important; - } - .bodywebsite .mb-xxl-4, - .bodywebsite .my-xxl-4 { - margin-bottom: 1.5rem !important; - } - .bodywebsite .ml-xxl-4, - .bodywebsite .mx-xxl-4 { - margin-left: 1.5rem !important; - } - .bodywebsite .m-xxl-5 { - margin: 3rem !important; - } - .bodywebsite .mt-xxl-5, - .bodywebsite .my-xxl-5 { - margin-top: 3rem !important; - } - .bodywebsite .mr-xxl-5, - .bodywebsite .mx-xxl-5 { - margin-right: 3rem !important; - } - .bodywebsite .mb-xxl-5, - .bodywebsite .my-xxl-5 { - margin-bottom: 3rem !important; - } - .bodywebsite .ml-xxl-5, - .bodywebsite .mx-xxl-5 { - margin-left: 3rem !important; - } - .bodywebsite .p-xxl-0 { - padding: 0 !important; - } - .bodywebsite .pt-xxl-0, - .bodywebsite .py-xxl-0 { - padding-top: 0 !important; - } - .bodywebsite .pr-xxl-0, - .bodywebsite .px-xxl-0 { - padding-right: 0 !important; - } - .bodywebsite .pb-xxl-0, - .bodywebsite .py-xxl-0 { - padding-bottom: 0 !important; - } - .bodywebsite .pl-xxl-0, - .bodywebsite .px-xxl-0 { - padding-left: 0 !important; - } - .bodywebsite .p-xxl-1 { - padding: 0.25rem !important; - } - .bodywebsite .pt-xxl-1, - .bodywebsite .py-xxl-1 { - padding-top: 0.25rem !important; - } - .bodywebsite .pr-xxl-1, - .bodywebsite .px-xxl-1 { - padding-right: 0.25rem !important; - } - .bodywebsite .pb-xxl-1, - .bodywebsite .py-xxl-1 { - padding-bottom: 0.25rem !important; - } - .bodywebsite .pl-xxl-1, - .bodywebsite .px-xxl-1 { - padding-left: 0.25rem !important; - } - .bodywebsite .p-xxl-2 { - padding: 0.5rem !important; - } - .bodywebsite .pt-xxl-2, - .bodywebsite .py-xxl-2 { - padding-top: 0.5rem !important; - } - .bodywebsite .pr-xxl-2, - .bodywebsite .px-xxl-2 { - padding-right: 0.5rem !important; - } - .bodywebsite .pb-xxl-2, - .bodywebsite .py-xxl-2 { - padding-bottom: 0.5rem !important; - } - .bodywebsite .pl-xxl-2, - .bodywebsite .px-xxl-2 { - padding-left: 0.5rem !important; - } - .bodywebsite .p-xxl-3 { - padding: 1rem !important; - } - .bodywebsite .pt-xxl-3, - .bodywebsite .py-xxl-3 { - padding-top: 1rem !important; - } - .bodywebsite .pr-xxl-3, - .bodywebsite .px-xxl-3 { - padding-right: 1rem !important; - } - .bodywebsite .pb-xxl-3, - .bodywebsite .py-xxl-3 { - padding-bottom: 1rem !important; - } - .bodywebsite .pl-xxl-3, - .bodywebsite .px-xxl-3 { - padding-left: 1rem !important; - } - .bodywebsite .p-xxl-4 { - padding: 1.5rem !important; - } - .bodywebsite .pt-xxl-4, - .bodywebsite .py-xxl-4 { - padding-top: 1.5rem !important; - } - .bodywebsite .pr-xxl-4, - .bodywebsite .px-xxl-4 { - padding-right: 1.5rem !important; - } - .bodywebsite .pb-xxl-4, - .bodywebsite .py-xxl-4 { - padding-bottom: 1.5rem !important; - } - .bodywebsite .pl-xxl-4, - .bodywebsite .px-xxl-4 { - padding-left: 1.5rem !important; - } - .bodywebsite .p-xxl-5 { - padding: 3rem !important; - } - .bodywebsite .pt-xxl-5, - .bodywebsite .py-xxl-5 { - padding-top: 3rem !important; - } - .bodywebsite .pr-xxl-5, - .bodywebsite .px-xxl-5 { - padding-right: 3rem !important; - } - .bodywebsite .pb-xxl-5, - .bodywebsite .py-xxl-5 { - padding-bottom: 3rem !important; - } - .bodywebsite .pl-xxl-5, - .bodywebsite .px-xxl-5 { - padding-left: 3rem !important; - } - .bodywebsite .m-xxl-auto { - margin: auto !important; - } - .bodywebsite .mt-xxl-auto, - .bodywebsite .my-xxl-auto { - margin-top: auto !important; - } - .bodywebsite .mr-xxl-auto, - .bodywebsite .mx-xxl-auto { - margin-right: auto !important; - } - .bodywebsite .mb-xxl-auto, - .bodywebsite .my-xxl-auto { - margin-bottom: auto !important; - } - .bodywebsite .ml-xxl-auto, - .bodywebsite .mx-xxl-auto { - margin-left: auto !important; - } -} -.bodywebsite .text-justify { - text-align: justify !important; -} -.bodywebsite .text-nowrap { - white-space: nowrap !important; -} -.bodywebsite .text-truncate { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.bodywebsite .text-left { - text-align: left !important; -} -.bodywebsite .text-right { - text-align: right !important; -} -.bodywebsite .text-center { - text-align: center !important; -} -@media (min-width: 576px) { - .bodywebsite .text-sm-left { - text-align: left !important; - } - .bodywebsite .text-sm-right { - text-align: right !important; - } - .bodywebsite .text-sm-center { - text-align: center !important; - } -} -@media (min-width: 768px) { - .bodywebsite .text-md-left { - text-align: left !important; - } - .bodywebsite .text-md-right { - text-align: right !important; - } - .bodywebsite .text-md-center { - text-align: center !important; - } -} -@media (min-width: 992px) { - .bodywebsite .text-lg-left { - text-align: left !important; - } - .bodywebsite .text-lg-right { - text-align: right !important; - } - .bodywebsite .text-lg-center { - text-align: center !important; - } -} -@media (min-width: 1200px) { - .bodywebsite .text-xl-left { - text-align: left !important; - } - .bodywebsite .text-xl-right { - text-align: right !important; - } - .bodywebsite .text-xl-center { - text-align: center !important; - } -} -@media (min-width: 1800px) { - .bodywebsite .text-xxl-left { - text-align: left !important; - } - .bodywebsite .text-xxl-right { - text-align: right !important; - } - .bodywebsite .text-xxl-center { - text-align: center !important; - } -} -.bodywebsite .text-lowercase { - text-transform: lowercase !important; -} -.bodywebsite .text-uppercase { - text-transform: uppercase !important; -} -.bodywebsite .text-capitalize { - text-transform: capitalize !important; -} -.bodywebsite .font-weight-light { - font-weight: 300 !important; -} -.bodywebsite .font-weight-normal { - font-weight: 400 !important; -} -.bodywebsite .font-weight-bold { - font-weight: 700 !important; -} -.bodywebsite .font-italic { - font-style: italic !important; -} -.bodywebsite .text-white { - color: #fff !important; -} -.bodywebsite .text-primary { - color: #007bff !important; -} -.bodywebsite a.text-primary:focus, -.bodywebsite a.text-primary:hover { - color: #0062cc !important; -} -.bodywebsite .text-secondary { - color: #868e96 !important; -} -.bodywebsite a.text-secondary:focus, -.bodywebsite a.text-secondary:hover { - color: #6c757d !important; -} -.bodywebsite .text-success { - color: #28a745 !important; -} -.bodywebsite a.text-success:focus, -.bodywebsite a.text-success:hover { - color: #1e7e34 !important; -} -.bodywebsite .text-info { - color: #17a2b8 !important; -} -.bodywebsite a.text-info:focus, -.bodywebsite a.text-info:hover { - color: #117a8b !important; -} -.bodywebsite .text-warning { - color: #ffc107 !important; -} -.bodywebsite a.text-warning:focus, -.bodywebsite a.text-warning:hover { - color: #d39e00 !important; -} -.bodywebsite .text-danger { - color: #dc3545 !important; -} -.bodywebsite a.text-danger:focus, -.bodywebsite a.text-danger:hover { - color: #bd2130 !important; -} -.bodywebsite .text-light { - color: #f8f9fa !important; -} -.bodywebsite a.text-light:focus, -.bodywebsite a.text-light:hover { - color: #dae0e5 !important; -} -.bodywebsite .text-dark { - color: #343a40 !important; -} -.bodywebsite a.text-dark:focus, -.bodywebsite a.text-dark:hover { - color: #1d2124 !important; -} -.bodywebsite .text-muted { - color: #dedede !important; -} -.bodywebsite .text-hide { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} -.bodywebsite .visible { - visibility: visible !important; -} -.bodywebsite .invisible { - visibility: hidden !important; -} -.bodywebsite .animated { - -webkit-animation-duration: 1s; - animation-duration: 1s; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - opacity: 1; -} -.bodywebsite .animated:not(.page) { - will-change: transform; -} -.bodywebsite .animated.infinite { - -webkit-animation-iteration-count: infinite; - animation-iteration-count: infinite; -} -.bodywebsite .animated.hinge { - -webkit-animation-duration: 2s; - animation-duration: 2s; -} -html .bodywebsite:not(.lt-ie10) .not-animated { - opacity: 0; -} -@-webkit-keyframes fadeInUp { - 0% { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - } - 100% { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} -@keyframes fadeInUp { - 0% { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - } - 100% { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} -.bodywebsite .fadeInUp { - -webkit-animation-name: fadeInUp; - animation-name: fadeInUp; -} -@-webkit-keyframes fadeInUpBig { - 0% { - opacity: 0; - -webkit-transform: translate3d(0, 2000px, 0); - transform: translate3d(0, 2000px, 0); - } - 100% { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} -@keyframes fadeInUpBig { - 0% { - opacity: 0; - -webkit-transform: translate3d(0, 2000px, 0); - transform: translate3d(0, 2000px, 0); - } - 100% { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} -.bodywebsite .fadeInUpBig { - -webkit-animation-name: fadeInUpBig; - animation-name: fadeInUpBig; -} - - - - - - - - - - - - - - - - - - - - - - diff --git a/htdocs/install/doctemplates/websites/template/test.php b/htdocs/install/doctemplates/websites/template/test.php deleted file mode 100644 index a6f437b4c3a..00000000000 --- a/htdocs/install/doctemplates/websites/template/test.php +++ /dev/null @@ -1,5 +0,0 @@ -ref.'/page126.tpl.php'; -?> diff --git a/htdocs/install/doctemplates/websites/template/test2.php b/htdocs/install/doctemplates/websites/template/test2.php deleted file mode 100644 index a6f437b4c3a..00000000000 --- a/htdocs/install/doctemplates/websites/template/test2.php +++ /dev/null @@ -1,5 +0,0 @@ -ref.'/page126.tpl.php'; -?> diff --git a/htdocs/install/doctemplates/websites/template/wrapper.php b/htdocs/install/doctemplates/websites/template/wrapper.php deleted file mode 100644 index 952662e27b1..00000000000 --- a/htdocs/install/doctemplates/websites/template/wrapper.php +++ /dev/null @@ -1,126 +0,0 @@ -entity; -$original_file=GETPOST("file","alpha"); - -// If we have a hash public (hashp), we guess the original_file. -if (! empty($hashp)) -{ - include_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmfiles.class.php'; - $ecmfile=new EcmFiles($db); - $result = $ecmfile->fetch(0, '', '', '', $hashp); - if ($result > 0) - { - $tmp = explode('/', $ecmfile->filepath, 2); // $ecmfile->filepath is relative to document directory - // filepath can be 'users/X' or 'X/propale/PR11111' - if (is_numeric($tmp[0])) // If first tmp is numeric, it is subdir of company for multicompany, we take next part. - { - $tmp = explode('/', $tmp[1], 2); - } - $moduleparttocheck = $tmp[0]; // moduleparttocheck is first part of path - - if ($modulepart) // Not required, so often not defined, for link using public hashp parameter. - { - if ($moduleparttocheck == $modulepart) - { - // We remove first level of directory - $original_file = (($tmp[1]?$tmp[1].'/':'').$ecmfile->filename); // this is relative to module dir - //var_dump($original_file); exit; - } - else - { - print 'Bad link. File is from another module part.'; - } - } - else - { - $modulepart = $moduleparttocheck; - $original_file = (($tmp[1]?$tmp[1].'/':'').$ecmfile->filename); // this is relative to module dir - } - } - else - { - print "ErrorFileNotFoundWithSharedLink"; - exit; - } -} - -// Define attachment (attachment=true to force choice popup 'open'/'save as') -$attachment = true; -if (preg_match('/\.(html|htm)$/i',$original_file)) $attachment = false; -if (isset($_GET["attachment"])) $attachment = GETPOST("attachment",'alpha')?true:false; -if (! empty($conf->global->MAIN_DISABLE_FORCE_SAVEAS)) $attachment=false; - -// Define mime type -$type = 'application/octet-stream'; -if (GETPOST('type','alpha')) $type=GETPOST('type','alpha'); -else $type=dol_mimetype($original_file); - -// Security: Delete string ../ into $original_file -$original_file=str_replace("../","/", $original_file); - -// Find the subdirectory name as the reference -$refname=basename(dirname($original_file)."/"); - -if ($_GET["modulepart"] == "mycompany" && preg_match('/^\/?logos\//', $original_file)) -{ - readfile(dol_osencode($conf->mycompany->dir_output."/".$original_file)); -} -else -{ - include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; - $check_access = dol_check_secure_access_document($modulepart, $original_file, $entity, $refname); - $accessallowed = $check_access['accessallowed']; - $sqlprotectagainstexternals = $check_access['sqlprotectagainstexternals']; - $fullpath_original_file = $check_access['original_file']; // $fullpath_original_file is now a full path name - if (! empty($_GET["hashp"])) - { - $accessallowed = 1; // When using hashp, link is public so we force $accessallowed - $sqlprotectagainstexternals = ''; - } - - // Security: - // Limit access if permissions are wrong - if (! $accessallowed) - { - print 'Access forbidden'; - exit; - } - - clearstatcache(); - - $filename = basename($fullpath_original_file); - - // Output file on browser - dol_syslog("wrapper.php download $fullpath_original_file filename=$filename content-type=$type"); - $fullpath_original_file_osencoded=dol_osencode($fullpath_original_file); // New file name encoded in OS encoding charset - - // This test if file exists should be useless. We keep it to find bug more easily - if (! file_exists($fullpath_original_file_osencoded)) - { - print "ErrorFileDoesNotExists: ".$original_file; - exit; - } - - // Permissions are ok and file found, so we return it - //top_httphead($type); - header('Content-Description: File Transfer'); - if ($encoding) header('Content-Encoding: '.$encoding); - // Add MIME Content-Disposition from RFC 2183 (inline=automatically displayed, attachment=need user action to open) - if ($attachment) header('Content-Disposition: attachment; filename="'.$filename.'"'); - else header('Content-Disposition: inline; filename="'.$filename.'"'); - header('Content-Length: ' . dol_filesize($fullpath_original_file)); - // Ajout directives pour resoudre bug IE - header('Cache-Control: Public, must-revalidate'); - header('Pragma: public'); - - readfile($fullpath_original_file_osencoded); -} -if (is_object($db)) $db->close(); -// END PHP ?> From 2ecde139f04b6b20c4df6a9b9ab67514e8a6d887 Mon Sep 17 00:00:00 2001 From: Francis Appels Date: Wed, 5 Jun 2019 19:06:58 +0200 Subject: [PATCH 177/828] Fix stock mouvement does not need virtual stock. --- htdocs/product/stock/class/mouvementstock.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/product/stock/class/mouvementstock.class.php b/htdocs/product/stock/class/mouvementstock.class.php index b85e0cfcf23..c6db985f515 100644 --- a/htdocs/product/stock/class/mouvementstock.class.php +++ b/htdocs/product/stock/class/mouvementstock.class.php @@ -163,7 +163,7 @@ class MouvementStock extends CommonObject $this->db->begin(); - $product->load_stock(); + $product->load_stock('novirtual'); // Test if product require batch data. If yes, and there is not, we throw an error. if (! empty($conf->productbatch->enabled) && $product->hasbatch() && ! $skip_batch) From b73d287953d44f1d7b0d7c6daf07d73498e165b9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 7 Jun 2019 18:09:43 +0200 Subject: [PATCH 178/828] Update agenda.lib.php --- htdocs/core/lib/agenda.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/agenda.lib.php b/htdocs/core/lib/agenda.lib.php index 94492e9430b..4326276766b 100644 --- a/htdocs/core/lib/agenda.lib.php +++ b/htdocs/core/lib/agenda.lib.php @@ -469,7 +469,7 @@ function actions_prepare_head($object) $head[$h][0] = DOL_URL_ROOT.'/resource/element_resource.php?element=action&element_id='.$object->id; $listofresourcelinked = $resource->getElementResources($object->element, $object->id); - $nbResources=is_array($listofresourcelinked)?count($listofresourcelinked):0; + $nbResources=(is_array($listofresourcelinked)?count($listofresourcelinked):0); $head[$h][1] = $langs->trans("Resources"); if ($nbResources > 0) $head[$h][1].= ' '.($nbResources).''; $head[$h][2] = 'resources'; From 49646663a124c19ed3d5a13b306e38e3e120bbbb Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 7 Jun 2019 22:47:15 +0200 Subject: [PATCH 179/828] Fix link on invoice --- htdocs/compta/facture/class/facture.class.php | 6 ++++-- htdocs/fourn/class/fournisseur.facture.class.php | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index fa67f2bf67e..e5041217cb3 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -1203,7 +1203,7 @@ class Facture extends CommonInvoice */ public function getNomUrl($withpicto = 0, $option = '', $max = 0, $short = 0, $moretitle = '', $notooltip = 0, $addlinktonotes = 0, $save_lastsearch_value = -1, $target = '') { - global $langs, $conf, $user, $form; + global $langs, $conf, $user; if (! empty($conf->dol_no_mouse_hover)) $notooltip=1; // Force disable tooltips @@ -1225,7 +1225,7 @@ class Facture extends CommonInvoice if ($short) return $url; - $picto='bill'; + $picto=$this->picto; if ($this->type == self::TYPE_REPLACEMENT) $picto.='r'; // Replacement invoice if ($this->type == self::TYPE_CREDIT_NOTE) $picto.='a'; // Credit note if ($this->type == self::TYPE_DEPOSIT) $picto.='d'; // Deposit invoice @@ -1241,6 +1241,8 @@ class Facture extends CommonInvoice $label .= '
'.$langs->trans('Ref') . ': ' . $this->ref; if (! empty($this->ref_client)) $label .= '
' . $langs->trans('RefCustomer') . ': ' . $this->ref_client; + if (! empty($this->date)) + $label .= '
' . $langs->trans('Date') . ': ' . dol_print_date($this->date, 'day'); if (! empty($this->total_ht)) $label.= '
' . $langs->trans('AmountHT') . ': ' . price($this->total_ht, 0, $langs, 0, -1, -1, $conf->currency); if (! empty($this->total_tva)) diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php index d9c6781e74d..883fe383de7 100644 --- a/htdocs/fourn/class/fournisseur.facture.class.php +++ b/htdocs/fourn/class/fournisseur.facture.class.php @@ -2269,7 +2269,7 @@ class FactureFournisseur extends CommonInvoice if ($add_save_lastsearch_values) $url.='&save_lastsearch_values=1'; } - $picto='bill'; + $picto=$this->picto; if ($this->type == self::TYPE_REPLACEMENT) $picto.='r'; // Replacement invoice if ($this->type == self::TYPE_CREDIT_NOTE) $picto.='a'; // Credit note if ($this->type == self::TYPE_DEPOSIT) $picto.='d'; // Deposit invoice @@ -2281,6 +2281,8 @@ class FactureFournisseur extends CommonInvoice $label.= '
' . $langs->trans('RefSupplier') . ': ' . $this->ref_supplier; if (! empty($this->libelle)) $label.= '
' . $langs->trans('Label') . ': ' . $this->libelle; + if (! empty($this->date)) + $label .= '
' . $langs->trans('Date') . ': ' . dol_print_date($this->date, 'day'); if (! empty($this->total_ht)) $label.= '
' . $langs->trans('AmountHT') . ': ' . price($this->total_ht, 0, $langs, 0, -1, -1, $conf->currency); if (! empty($this->total_tva)) @@ -2312,7 +2314,7 @@ class FactureFournisseur extends CommonInvoice $linkend=''; $result .= $linkstart; - if ($withpicto) $result.=img_object(($notooltip?'':$label), $this->picto, ($notooltip?(($withpicto != 2) ? 'class="paddingright"' : ''):'class="'.(($withpicto != 2) ? 'paddingright ' : '').'classfortooltip"'), 0, 0, $notooltip?0:1); + if ($withpicto) $result.=img_object(($notooltip?'':$label), $picto, ($notooltip?(($withpicto != 2) ? 'class="paddingright"' : ''):'class="'.(($withpicto != 2) ? 'paddingright ' : '').'classfortooltip"'), 0, 0, $notooltip?0:1); if ($withpicto != 2) $result.= ($max?dol_trunc($ref, $max):$ref); $result .= $linkend; From 0099c1f602e28f10c160e0dfbe6220e0f58c75b9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 7 Jun 2019 22:55:18 +0200 Subject: [PATCH 180/828] Fix missing date --- htdocs/compta/index.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/compta/index.php b/htdocs/compta/index.php index c872fae3def..3e455aebae6 100644 --- a/htdocs/compta/index.php +++ b/htdocs/compta/index.php @@ -136,8 +136,7 @@ if (! empty($conf->global->MAIN_SEARCH_FORM_ON_HOME_AREAS)) // This is usele */ if (! empty($conf->facture->enabled) && $user->rights->facture->lire) { - $sql = "SELECT f.ref"; - $sql.= ", f.rowid, f.total as total_ht, f.tva as total_tva, f.total_ttc, f.ref_client"; + $sql = "SELECT f.rowid, f.ref, f.date, f.total as total_ht, f.tva as total_tva, f.total_ttc, f.ref_client"; $sql.= ", f.type"; $sql.= ", s.nom as name"; $sql.= ", s.rowid as socid, s.email"; @@ -177,13 +176,14 @@ if (! empty($conf->facture->enabled) && $user->rights->facture->lire) { $obj = $db->fetch_object($resql); - $facturestatic->ref=$obj->ref; $facturestatic->id=$obj->rowid; + $facturestatic->ref=$obj->ref; + $facturestatic->date=$db->jdate($obj->date); + $facturestatic->type=$obj->type; $facturestatic->total_ht=$obj->total_ht; $facturestatic->total_tva=$obj->total_tva; $facturestatic->total_ttc=$obj->total_ttc; $facturestatic->ref_client=$obj->ref_client; - $facturestatic->type=$obj->type; $companystatic->id=$obj->socid; $companystatic->name=$obj->name; From f713deb0a86a6ffddd9fce925e57264b09cc226f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 7 Jun 2019 22:55:51 +0200 Subject: [PATCH 181/828] Fix sql syntax error --- htdocs/compta/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/index.php b/htdocs/compta/index.php index 3e455aebae6..ae84340333e 100644 --- a/htdocs/compta/index.php +++ b/htdocs/compta/index.php @@ -136,7 +136,7 @@ if (! empty($conf->global->MAIN_SEARCH_FORM_ON_HOME_AREAS)) // This is usele */ if (! empty($conf->facture->enabled) && $user->rights->facture->lire) { - $sql = "SELECT f.rowid, f.ref, f.date, f.total as total_ht, f.tva as total_tva, f.total_ttc, f.ref_client"; + $sql = "SELECT f.rowid, f.ref, f.datef as date, f.total as total_ht, f.tva as total_tva, f.total_ttc, f.ref_client"; $sql.= ", f.type"; $sql.= ", s.nom as name"; $sql.= ", s.rowid as socid, s.email"; From 39fa4f936527ea4bfcdcdff0293f86a019d846b8 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Sat, 8 Jun 2019 21:34:30 +0200 Subject: [PATCH 182/828] Fix Missing language key --- htdocs/langs/en_US/main.lang | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index fd74d0cae07..a89443b345f 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -972,4 +972,5 @@ NoFilesUploadedYet=Please upload a document first SeePrivateNote=See private note PaymentInformation=Payment information ValidFrom=Valid from -ValidUntil=Valid until \ No newline at end of file +ValidUntil=Valid until +NoRecordedUsers=No records users \ No newline at end of file From a0ab2fdfd773692ed99c8884645fe1d74dfe3721 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Sun, 9 Jun 2019 08:29:44 +0200 Subject: [PATCH 183/828] Fix Missing language key --- htdocs/langs/en_US/errors.lang | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/langs/en_US/errors.lang b/htdocs/langs/en_US/errors.lang index 08ec66f8ea3..bb92e41a537 100644 --- a/htdocs/langs/en_US/errors.lang +++ b/htdocs/langs/en_US/errors.lang @@ -217,6 +217,7 @@ ErrorBadSyntaxForParamKeyForContent=Bad syntax for param keyforcontent. Must hav ErrorVariableKeyForContentMustBeSet=Error, the constant with name %s (with text content to show) or %s (with external url to show) must be set. ErrorURLMustStartWithHttp=URL %s must start with http:// or https:// ErrorNewRefIsAlreadyUsed=Error, the new reference is already used +ErrorDeletePaymentLinkedToAClosedInvoiceNotPossible=Error, delete payment linked to a closed invoice is not possible. # Warnings WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user. WarningMandatorySetupNotComplete=Click here to setup mandatory parameters From ae686ff62a0d30f6e547905e6a51da7d97b49ee4 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Sun, 9 Jun 2019 08:39:38 +0200 Subject: [PATCH 184/828] Better look --- htdocs/compta/paiement/cheque/card.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/compta/paiement/cheque/card.php b/htdocs/compta/paiement/cheque/card.php index f84a805caef..21480a8496d 100644 --- a/htdocs/compta/paiement/cheque/card.php +++ b/htdocs/compta/paiement/cheque/card.php @@ -474,9 +474,9 @@ if ($action == 'new') print ''; print ''.$langs->trans("DateChequeReceived").''."\n"; print ''.$langs->trans("ChequeNumber")."\n"; - print ''.$langs->trans("CheckTransmitter")."\n"; - print ''.$langs->trans("Bank")."\n"; - print ''.$langs->trans("Amount")."\n"; + print ''.$langs->trans("CheckTransmitter")."\n"; + print ''.$langs->trans("Bank")."\n"; + print ''.$langs->trans("Amount")."\n"; print ''.$langs->trans("Payment")."\n"; print ''.$langs->trans("LineRecord")."\n"; print ''.$langs->trans("Select")."
"; From 33b02b97d5f46b0c318992b63bee3f0afaba10e4 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Sun, 9 Jun 2019 08:50:20 +0200 Subject: [PATCH 185/828] Better look --- htdocs/compta/bank/bankentries_list.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/bank/bankentries_list.php b/htdocs/compta/bank/bankentries_list.php index 444927ea27d..be2d8335afa 100644 --- a/htdocs/compta/bank/bankentries_list.php +++ b/htdocs/compta/bank/bankentries_list.php @@ -941,8 +941,8 @@ if ($resql) if (! empty($arrayfields['b.num_chq']['checked'])) print_liste_field_titre($arrayfields['b.num_chq']['label'], $_SERVER['PHP_SELF'], 'b.num_chq', '', $param, 'align="center"', $sortfield, $sortorder); if (! empty($arrayfields['bu.label']['checked'])) print_liste_field_titre($arrayfields['bu.label']['label'], $_SERVER['PHP_SELF'], 'bu.label', '', $param, '', $sortfield, $sortorder); if (! empty($arrayfields['ba.ref']['checked'])) print_liste_field_titre($arrayfields['ba.ref']['label'], $_SERVER['PHP_SELF'], 'ba.ref', '', $param, '', $sortfield, $sortorder); - if (! empty($arrayfields['b.debit']['checked'])) print_liste_field_titre($arrayfields['b.debit']['label'], $_SERVER['PHP_SELF'], 'b.amount', '', $param, 'class="right"', $sortfield, $sortorder); - if (! empty($arrayfields['b.credit']['checked'])) print_liste_field_titre($arrayfields['b.credit']['label'], $_SERVER['PHP_SELF'], 'b.amount', '', $param, 'class="right"', $sortfield, $sortorder); + if (! empty($arrayfields['b.debit']['checked'])) print_liste_field_titre($arrayfields['b.debit']['label'], $_SERVER['PHP_SELF'], 'b.amount', '', $param, 'align="center" style="min-width: 100px"', $sortfield, $sortorder, "right "); + if (! empty($arrayfields['b.credit']['checked'])) print_liste_field_titre($arrayfields['b.credit']['label'], $_SERVER['PHP_SELF'], 'b.amount', '', $param, 'align="center" style="min-width: 100px"', $sortfield, $sortorder, "right "); if (! empty($arrayfields['balancebefore']['checked'])) print_liste_field_titre($arrayfields['balancebefore']['label'], $_SERVER['PHP_SELF'], '', '', $param, 'class="right"', $sortfield, $sortorder); if (! empty($arrayfields['balance']['checked'])) print_liste_field_titre($arrayfields['balance']['label'], $_SERVER['PHP_SELF'], '', '', $param, 'class="right"', $sortfield, $sortorder); if (! empty($arrayfields['b.num_releve']['checked'])) print_liste_field_titre($arrayfields['b.num_releve']['label'], $_SERVER['PHP_SELF'], 'b.num_releve', '', $param, 'align="center"', $sortfield, $sortorder); From 8c5a01dd900022f7d57658018c4e36f445fa02a5 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Sun, 9 Jun 2019 08:56:49 +0200 Subject: [PATCH 186/828] Show total with decimals --- htdocs/compta/bank/list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/bank/list.php b/htdocs/compta/bank/list.php index aeb593f53b9..5968505c540 100644 --- a/htdocs/compta/bank/list.php +++ b/htdocs/compta/bank/list.php @@ -594,7 +594,7 @@ if (isset($totalarray['totalbalancefield']) && $lastcurrencycode != 'various') / if ($num < $limit && empty($offset)) print ''.$langs->trans("Total").''; else print ''.$langs->trans("Totalforthispage").''; } - elseif ($totalarray['totalbalancefield'] == $i) print ''.price($totalarray['totalbalance'], 0, $langs, 0, 0, -1, $lastcurrencycode).''; + elseif ($totalarray['totalbalancefield'] == $i) print ''.price($totalarray['totalbalance'], 0, $langs, 0, -1, -1, $lastcurrencycode).''; else print ''; } print ''; From 6d43efb4a254413ce128dbc201c232099be5c854 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Sun, 9 Jun 2019 16:35:45 +0200 Subject: [PATCH 187/828] Align right --- htdocs/compta/bank/annuel.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/bank/annuel.php b/htdocs/compta/bank/annuel.php index 98085b34778..78705847bfc 100644 --- a/htdocs/compta/bank/annuel.php +++ b/htdocs/compta/bank/annuel.php @@ -217,7 +217,7 @@ for ($mois = 1 ; $mois < 13 ; $mois++) } print ""; - print ' '; + print ' '; if ($encaiss[$case]>0) { print price($encaiss[$case]); @@ -232,7 +232,7 @@ for ($mois = 1 ; $mois < 13 ; $mois++) print ''.$langs->trans("Total").""; for ($annee = $year_start ; $annee <= $year_end ; $annee++) { - print ''.price($totsorties[$annee]).''.price($totentrees[$annee]).''; + print ''.price($totsorties[$annee]).''.price($totentrees[$annee]).''; } print "\n"; From f3cba862825ac4797a53435c3f68c3605c1e08b7 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Mon, 10 Jun 2019 07:49:10 +0200 Subject: [PATCH 188/828] Better look --- htdocs/accountancy/journal/bankjournal.php | 28 +++++++--------- .../journal/expensereportsjournal.php | 23 +++++++------ .../accountancy/journal/purchasesjournal.php | 33 +++++++++---------- htdocs/accountancy/journal/sellsjournal.php | 27 ++++++++------- htdocs/compta/paiement/cheque/card.php | 10 +++--- 5 files changed, 57 insertions(+), 64 deletions(-) diff --git a/htdocs/accountancy/journal/bankjournal.php b/htdocs/accountancy/journal/bankjournal.php index 275af10701d..a286e4d8a66 100644 --- a/htdocs/accountancy/journal/bankjournal.php +++ b/htdocs/accountancy/journal/bankjournal.php @@ -987,15 +987,14 @@ if (empty($action) || $action == 'view') { print '
'; print ""; print ""; - print ""; print ""; print ""; print ""; print ""; print ""; - print ""; - print ""; - print ""; + print ""; + print ""; + print ""; print "\n"; $r = ''; @@ -1019,7 +1018,6 @@ if (empty($action) || $action == 'view') { //var_dump($tabpay[$key]); print ''; print ''; - print ""; print ""; print ""; // Ledger account @@ -1043,9 +1041,9 @@ if (empty($action) || $action == 'view') { print ""; - print ""; - print ""; - print ""; + print ""; + print ""; + print ""; print ""; } } @@ -1061,7 +1059,6 @@ if (empty($action) || $action == 'view') { print ''; print ''; - print ""; print ""; print ""; // Ledger account @@ -1125,9 +1122,9 @@ if (empty($action) || $action == 'view') { } print ""; print ""; - print ""; - print ""; - print ""; + print ""; + print ""; + print ""; print ""; } } @@ -1141,7 +1138,6 @@ if (empty($action) || $action == 'view') { print ''; print ''; - print ""; print ""; print ""; // Ledger account @@ -1162,9 +1158,9 @@ if (empty($action) || $action == 'view') { */ print ""; print ""; - print ""; - print ""; - print ""; + print ""; + print ""; + print ""; print ""; } } diff --git a/htdocs/accountancy/journal/expensereportsjournal.php b/htdocs/accountancy/journal/expensereportsjournal.php index 30ed5a07207..9da814e2d8c 100644 --- a/htdocs/accountancy/journal/expensereportsjournal.php +++ b/htdocs/accountancy/journal/expensereportsjournal.php @@ -549,14 +549,13 @@ if (empty($action) || $action == 'view') { print '
'; print "
" . $langs->trans("Date") . "" . $langs->trans("Piece") . ' (' . $langs->trans("ObjectsRef") . ")" . $langs->trans("AccountAccounting") . "" . $langs->trans("SubledgerAccount") . "" . $langs->trans("LabelOperation") . "" . $langs->trans("PaymentMode") . "" . $langs->trans("Debit") . "" . $langs->trans("Credit") . "" . $langs->trans("PaymentMode") . "" . $langs->trans("Debit") . "" . $langs->trans("Credit") . "
" . $date . "" . $ref . ""; print $reflabel; print "" . $val["type_payment"] . "" . ($mt >= 0 ? price($mt) : '') . "" . ($mt < 0 ? price(- $mt) : '') . "" . $val["type_payment"] . "" . ($mt >= 0 ? price($mt) : '') . "" . ($mt < 0 ? price(- $mt) : '') . "
" . $date . "" . $ref . "" . $reflabel . "" . $val["type_payment"] . "" . ($mt < 0 ? price(- $mt) : '') . "" . ($mt >= 0 ? price($mt) : '') . "" . $val["type_payment"] . "" . ($mt < 0 ? price(- $mt) : '') . "" . ($mt >= 0 ? price($mt) : '') . "
" . $date . "" . $ref . "" . $reflabel . "" . $val["type_payment"] . "" . ($mt < 0 ? price(- $mt) : '') . "" . ($mt >= 0 ? price($mt) : '') . "" . $val["type_payment"] . "" . ($mt < 0 ? price(- $mt) : '') . "" . ($mt >= 0 ? price($mt) : '') . "
"; print ""; - print ""; print ""; print ""; print ""; print ""; print ""; - print ""; - print ""; + print ""; + print ""; print "\n"; $r = ''; @@ -578,7 +577,7 @@ if (empty($action) || $action == 'view') { if ($mt) { print ''; - print ""; + print ""; print ""; print ""; $userstatic->id = $tabuser[$key]['id']; @@ -598,8 +597,8 @@ if (empty($action) || $action == 'view') { $userstatic->id = $tabuser[$key]['id']; $userstatic->name = $tabuser[$key]['name']; print ""; - print '"; - print '"; + print '"; + print '"; print ""; } } @@ -607,7 +606,7 @@ if (empty($action) || $action == 'view') { // Third party foreach ($tabttc[$key] as $k => $mt) { print ''; - print ""; + print ""; print ""; print ""; $userstatic->id = $tabuser[$key]['id']; @@ -631,8 +630,8 @@ if (empty($action) || $action == 'view') { else print $accountoshow; print ''; print ""; - print '"; - print '"; + print '"; + print '"; print ""; } @@ -646,7 +645,7 @@ if (empty($action) || $action == 'view') { foreach ($arrayofvat[$key] as $k => $mt) { if ($mt) { print ''; - print ""; + print ""; print ""; print ""; // Account @@ -663,8 +662,8 @@ if (empty($action) || $action == 'view') { print ''; print ""; - print '"; - print '"; + print '"; + print '"; print ""; } } diff --git a/htdocs/accountancy/journal/purchasesjournal.php b/htdocs/accountancy/journal/purchasesjournal.php index 12e76882adc..8dbcc0989ce 100644 --- a/htdocs/accountancy/journal/purchasesjournal.php +++ b/htdocs/accountancy/journal/purchasesjournal.php @@ -783,14 +783,13 @@ if (empty($action) || $action == 'view') { print '
'; print "
" . $langs->trans("Date") . "" . $langs->trans("Piece") . ' (' . $langs->trans("ExpenseReportRef") . ")" . $langs->trans("AccountAccounting") . "" . $langs->trans("SubledgerAccount") . "" . $langs->trans("LabelOperation") . "" . $langs->trans("Debit") . "" . $langs->trans("Credit") . "" . $langs->trans("Debit") . "" . $langs->trans("Credit") . "
" . $date . "" . $expensereportstatic->getNomUrl(1) . "" . $userstatic->getNomUrl(0, 'user', 16) . ' - ' . $accountingaccount->label . "' . ($mt >= 0 ? price($mt) : '') . "' . ($mt < 0 ? price(- $mt) : '') . "' . ($mt >= 0 ? price($mt) : '') . "' . ($mt < 0 ? price(- $mt) : '') . "
" . $date . "" . $expensereportstatic->getNomUrl(1) . "" . $userstatic->getNomUrl(0, 'user', 16) . ' - ' . $langs->trans("SubledgerAccount") . "' . ($mt < 0 ? - price(- $mt) : '') . "' . ($mt >= 0 ? price($mt) : '') . "' . ($mt < 0 ? - price(- $mt) : '') . "' . ($mt >= 0 ? price($mt) : '') . "
" . $date . "" . $expensereportstatic->getNomUrl(1) . "" . $userstatic->getNomUrl(0, 'user', 16) . ' - ' . $langs->trans("VAT"). ' '.join(', ', $def_tva[$key][$k]).' %'.($numtax?' - Localtax '.$numtax:''); print "' . ($mt >= 0 ? price($mt) : '') . "' . ($mt < 0 ? price(- $mt) : '') . "' . ($mt >= 0 ? price($mt) : '') . "' . ($mt < 0 ? price(- $mt) : '') . "
"; print ""; - print ""; print ""; print ""; print ""; print ""; print ""; - print ""; - print ""; + print ""; + print ""; print "\n"; $r = ''; @@ -830,7 +829,7 @@ if (empty($action) || $action == 'view') { if ($replacedinvoice == 1) { print ''; - print ""; + print ""; print ""; print ""; // Account @@ -851,7 +850,7 @@ if (empty($action) || $action == 'view') { if ($errorforinvoice[$key] == 'somelinesarenotbound') { print ''; - print ""; + print ""; print ""; print ""; // Account @@ -872,7 +871,7 @@ if (empty($action) || $action == 'view') { foreach ($tabttc[$key] as $k => $mt) { //if ($mt) { print ''; - print ""; + print ""; print ""; print ""; // Account @@ -894,8 +893,8 @@ if (empty($action) || $action == 'view') { else print $accountoshow; print ''; print ""; - print '"; - print '"; + print '"; + print '"; print ""; //} } @@ -907,7 +906,7 @@ if (empty($action) || $action == 'view') { //if ($mt) { print ''; - print ""; + print ""; print ""; print ""; // Account @@ -925,8 +924,8 @@ if (empty($action) || $action == 'view') { $companystatic->id = $tabcompany[$key]['id']; $companystatic->name = $tabcompany[$key]['name']; print ""; - print '"; - print '"; + print '"; + print '"; print ""; //} } @@ -941,7 +940,7 @@ if (empty($action) || $action == 'view') { foreach ($arrayofvat[$key] as $k => $mt) { if ($mt) { print ''; - print ""; + print ""; print ""; print ""; // Account @@ -959,8 +958,8 @@ if (empty($action) || $action == 'view') { print ""; - print '"; - print '"; + print '"; + print '"; print ""; } } @@ -972,7 +971,7 @@ if (empty($action) || $action == 'view') { foreach ($tabother[$key] as $k => $mt) { if ($mt) { print ''; - print ""; + print ""; print ""; print ""; // Account @@ -988,8 +987,8 @@ if (empty($action) || $action == 'view') { print "'; print ""; - print '"; - print '"; + print '"; + print '"; print ""; } } diff --git a/htdocs/accountancy/journal/sellsjournal.php b/htdocs/accountancy/journal/sellsjournal.php index 08df2e71b32..da1f14dade5 100644 --- a/htdocs/accountancy/journal/sellsjournal.php +++ b/htdocs/accountancy/journal/sellsjournal.php @@ -720,14 +720,13 @@ if (empty($action) || $action == 'view') { print '
'; print "
" . $langs->trans("Date") . "" . $langs->trans("Piece") . ' (' . $langs->trans("InvoiceRef") . ")" . $langs->trans("AccountAccounting") . "" . $langs->trans("SubledgerAccount") . "" . $langs->trans("LabelOperation") . "" . $langs->trans("Debit") . "" . $langs->trans("Credit") . "" . $langs->trans("Debit") . "" . $langs->trans("Credit") . "
" . $date . "" . $invoicestatic->getNomUrl(1) . "
" . $date . "" . $invoicestatic->getNomUrl(1) . "
" . $date . "" . $invoicestatic->getNomUrl(1) . "" . $companystatic->getNomUrl(0, 'supplier', 16) . ' - ' . $invoicestatic->ref_supplier . ' - ' . $langs->trans("SubledgerAccount") . "'. ($mt < 0 ? price(- $mt) : '') . "' . ($mt >= 0 ? price($mt) : '') . "'. ($mt < 0 ? price(- $mt) : '') . "' . ($mt >= 0 ? price($mt) : '') . "
" . $date . "" . $invoicestatic->getNomUrl(1) . "" . $companystatic->getNomUrl(0, 'supplier', 16) . ' - ' . $invoicestatic->ref_supplier . ' - ' . $accountingaccount->label . "' . ($mt >= 0 ? price($mt) : '') . "' . ($mt < 0 ? price(- $mt) : '') . "' . ($mt >= 0 ? price($mt) : '') . "' . ($mt < 0 ? price(- $mt) : '') . "
" . $date . "" . $invoicestatic->getNomUrl(1) . ""; print $companystatic->getNomUrl(0, 'supplier', 16) . ' - ' . $invoicestatic->ref_supplier . ' - ' . $langs->trans("VAT"). ' '.join(', ', $def_tva[$key][$k]).' %'.($numtax?' - Localtax '.$numtax:''); print "' . ($mt >= 0 ? price($mt) : '') . "' . ($mt < 0 ? price(- $mt) : '') . "' . ($mt >= 0 ? price($mt) : '') . "' . ($mt < 0 ? price(- $mt) : '') . "
" . $date . "" . $invoicestatic->getNomUrl(1) . ""; print '" . $companystatic->getNomUrl(0, 'supplier', 16) . ' - ' . $invoicestatic->ref_supplier . ' - ' . $langs->trans("VAT") . " NPR (counterpart)' . ($mt < 0 ? price(- $mt) : '') . "' . ($mt >= 0 ? price($mt) : '') . "' . ($mt < 0 ? price(- $mt) : '') . "' . ($mt >= 0 ? price($mt) : '') . "
"; print ""; - print ""; print ""; print ""; print ""; print ""; print ""; - print ""; - print ""; + print ""; + print ""; print "\n"; $r = ''; @@ -765,7 +764,7 @@ if (empty($action) || $action == 'view') { if ($replacedinvoice == 1) { print ''; - print ""; + print ""; print ""; print ""; // Account @@ -786,7 +785,7 @@ if (empty($action) || $action == 'view') { if ($errorforinvoice[$key] == 'somelinesarenotbound') { print ''; - print ""; + print ""; print ""; print ""; // Account @@ -808,7 +807,7 @@ if (empty($action) || $action == 'view') { { //if ($mt) { print ''; - print ""; + print ""; print ""; print ""; // Account @@ -830,8 +829,8 @@ if (empty($action) || $action == 'view') { else print $accountoshow; print ''; print ""; - print '"; - print '"; + print '"; + print '"; print ""; //} } @@ -844,7 +843,7 @@ if (empty($action) || $action == 'view') { //if ($mt) { print ''; - print ""; + print ""; print ""; print ""; // Account @@ -862,8 +861,8 @@ if (empty($action) || $action == 'view') { $companystatic->id = $tabcompany[$key]['id']; $companystatic->name = $tabcompany[$key]['name']; print ""; - print ""; - print ""; + print ""; + print ""; print ""; //} } @@ -879,7 +878,7 @@ if (empty($action) || $action == 'view') { foreach ($arrayofvat[$key] as $k => $mt) { if ($mt) { print ''; - print ""; + print ""; print ""; print ""; // Account @@ -896,8 +895,8 @@ if (empty($action) || $action == 'view') { print ''; print ""; - print '"; - print '"; + print '"; + print '"; print ""; } } diff --git a/htdocs/compta/paiement/cheque/card.php b/htdocs/compta/paiement/cheque/card.php index 21480a8496d..9372ec84cfe 100644 --- a/htdocs/compta/paiement/cheque/card.php +++ b/htdocs/compta/paiement/cheque/card.php @@ -472,11 +472,11 @@ if ($action == 'new') print '
" . $langs->trans("Date") . "" . $langs->trans("Piece") . ' (' . $langs->trans("InvoiceRef") . ")" . $langs->trans("AccountAccounting") . "" . $langs->trans("SubledgerAccount") . "" . $langs->trans("LabelOperation") . "" . $langs->trans("Debit") . "" . $langs->trans("Credit") . "" . $langs->trans("Debit") . "" . $langs->trans("Credit") . "
" . $date . "" . $invoicestatic->getNomUrl(1) . "
" . $date . "" . $invoicestatic->getNomUrl(1) . "
" . $date . "" . $invoicestatic->getNomUrl(1) . "" . $companystatic->getNomUrl(0, 'customer', 16) . ' - ' . $invoicestatic->ref . ' - ' . $langs->trans("SubledgerAccount") . "' . ($mt >= 0 ? price($mt) : '') . "' . ($mt < 0 ? price(- $mt) : '') . "' . ($mt >= 0 ? price($mt) : '') . "' . ($mt < 0 ? price(- $mt) : '') . "
" . $date . "" . $invoicestatic->getNomUrl(1) . "" . $companystatic->getNomUrl(0, 'customer', 16) . ' - ' . $invoicestatic->ref . ' - ' . $accountingaccount->label . "" . ($mt < 0 ? price(- $mt) : '') . "" . ($mt >= 0 ? price($mt) : '') . "" . ($mt < 0 ? price(- $mt) : '') . "" . ($mt >= 0 ? price($mt) : '') . "
" . $date . "" . $invoicestatic->getNomUrl(1) . "" . $companystatic->getNomUrl(0, 'customer', 16) . ' - ' . $invoicestatic->ref . ' - ' . $langs->trans("VAT"). ' '.join(', ', $def_tva[$key][$k]).' %'.($numtax?' - Localtax '.$numtax:''); print "' . ($mt < 0 ? price(- $mt) : '') . "' . ($mt >= 0 ? price($mt) : '') . "' . ($mt < 0 ? price(- $mt) : '') . "' . ($mt >= 0 ? price($mt) : '') . "
'."\n"; print ''; - print ''."\n"; - print '\n"; - print '\n"; - print '\n"; - print '\n"; + print ''."\n"; + print '\n"; + print '\n"; + print '\n"; + print '\n"; print '\n"; print '\n"; print ''; } +//Birthday +if (! empty($arrayfields['d.birth']['checked'])) +{ + print ''; +} // Date modification if (! empty($arrayfields['d.tms']['checked'])) { @@ -646,6 +653,7 @@ $parameters=array('arrayfields'=>$arrayfields,'param'=>$param,'sortfield'=>$sort $reshook=$hookmanager->executeHooks('printFieldListTitle', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; if (! empty($arrayfields['d.datec']['checked'])) print_liste_field_titre($arrayfields['d.datec']['label'], $_SERVER["PHP_SELF"], "d.datec", "", $param, 'align="center" class="nowrap"', $sortfield, $sortorder); +if (! empty($arrayfields['d.birth']['checked'])) print_liste_field_titre($arrayfields['d.birth']['label'], $_SERVER["PHP_SELF"], "d.birth", "", $param, 'align="center" class="nowrap"', $sortfield, $sortorder); if (! empty($arrayfields['d.tms']['checked'])) print_liste_field_titre($arrayfields['d.tms']['label'], $_SERVER["PHP_SELF"], "d.tms", "", $param, 'align="center" class="nowrap"', $sortfield, $sortorder); if (! empty($arrayfields['d.statut']['checked'])) print_liste_field_titre($arrayfields['d.statut']['label'], $_SERVER["PHP_SELF"], "d.statut", "", $param, 'class="right"', $sortfield, $sortorder); print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', 'align="center"', $sortfield, $sortorder, 'maxwidthsearch '); @@ -865,6 +873,14 @@ while ($i < min($num, $limit)) print ''; if (! $i) $totalarray['nbfield']++; } + // Birth + if (! empty($arrayfields['d.birth']['checked'])) + { + print ''; + if (! $i) $totalarray['nbfield']++; + } // Date modification if (! empty($arrayfields['d.tms']['checked'])) { From 0ce2c2aab54bdcbce9582d34c4033f8d41ceb3b0 Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Mon, 10 Jun 2019 10:11:26 +0200 Subject: [PATCH 190/828] Fix missing massaction hook params --- htdocs/core/actions_massactions.inc.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php index 9be0e0a4b77..71c3f98420a 100644 --- a/htdocs/core/actions_massactions.inc.php +++ b/htdocs/core/actions_massactions.inc.php @@ -1269,9 +1269,10 @@ if (! $error && $massaction == 'generate_doc' && $permtoread) $parameters['toselect']=$toselect; $parameters['uploaddir']=$uploaddir; +$parameters['massaction']=$massaction; +$parameters['diroutputmassaction']=$diroutputmassaction; $reshook=$hookmanager->executeHooks('doMassActions',$parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); - From a72e36cd013bb95c23a0e0d422621713a51a39db Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 10 Jun 2019 20:05:49 +0200 Subject: [PATCH 191/828] Fix show version removed from left menu --- htdocs/main.inc.php | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 319ee2dc363..d283abd7d15 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -1695,12 +1695,8 @@ function top_menu($head, $title = '', $target = '', $disablejs = 0, $disablehead if ($mode == 'wiki') $text.=sprintf($helpbaseurl, urlencode(html_entity_decode($helppage))); else $text.=sprintf($helpbaseurl, $helppage); $text.='">'; - //$text.=img_picto('', 'helpdoc_top').' '; $text.=''; - //$toprightmenu.=$langs->trans($mode == 'wiki' ? 'OnlineHelp': 'Help'); - //if ($mode == 'wiki') $text.=' ('.dol_trunc(strtr($helppage,'_',' '),8).')'; $text.=''; - //$toprightmenu.=''."\n"; $toprightmenu.=@Form::textwithtooltip('', $title, 2, 1, $text, 'login_block_elem', 2); } } @@ -1815,6 +1811,19 @@ function top_menu_user(User $user, Translate $langs) $profilName = ' '.$profilName; } + // Define version to show + $appli=constant('DOL_APPLICATION_TITLE'); + if (! empty($conf->global->MAIN_APPLICATION_TITLE)) + { + $appli=$conf->global->MAIN_APPLICATION_TITLE; + if (preg_match('/\d\.\d/', $appli)) + { + if (! preg_match('/'.preg_quote(DOL_VERSION).'/', $appli)) $appli.=" (".DOL_VERSION.")"; // If new title contains a version that is different than core + } + else $appli.=" ".DOL_VERSION; + } + else $appli.=" ".DOL_VERSION; + $btnUser = '
'.$langs->trans("DateChequeReceived").''.$langs->trans("ChequeNumber")."'.$langs->trans("CheckTransmitter")."'.$langs->trans("Bank")."'.$langs->trans("Amount")."'.$langs->trans("DateChequeReceived").''.$langs->trans("ChequeNumber")."'.$langs->trans("CheckTransmitter")."'.$langs->trans("Bank")."'.$langs->trans("Amount")."'.$langs->trans("Payment")."'.$langs->trans("LineRecord")."'.$langs->trans("Select")."
"; From cab91e75c6a2fd77682fb08c03d45dc2d3f7002d Mon Sep 17 00:00:00 2001 From: florian HENRY Date: Mon, 10 Jun 2019 10:10:16 +0200 Subject: [PATCH 189/828] add missing column adherent list --- htdocs/adherents/list.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/htdocs/adherents/list.php b/htdocs/adherents/list.php index eaeb1fe305c..02f3d319aa3 100644 --- a/htdocs/adherents/list.php +++ b/htdocs/adherents/list.php @@ -130,6 +130,7 @@ $arrayfields=array( 'd.note_private'=>array('label'=>$langs->trans("NotePrivate"), 'checked'=>0),*/ 'd.datefin'=>array('label'=>$langs->trans("EndSubscription"), 'checked'=>1, 'position'=>500), 'd.datec'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0, 'position'=>500), + 'd.birth'=>array('label'=>$langs->trans("Birthday"), 'checked'=>0, 'position'=>500), 'd.tms'=>array('label'=>$langs->trans("DateModificationShort"), 'checked'=>0, 'position'=>500), 'd.statut'=>array('label'=>$langs->trans("Status"), 'checked'=>1, 'position'=>1000) ); @@ -591,6 +592,12 @@ if (! empty($arrayfields['d.datec']['checked'])) print '
'; print ''; + print ''; + print dol_print_date($db->jdate($obj->birth), 'day', 'tzuser'); + print '' . $objp->country .''; + $labelcountry=($objp->country_code && ($langs->trans("Country".$objp->country_code)!="Country".$objp->country_code))?$langs->trans("Country".$objp->country_code):$objp->country_label; + print $labelcountry; + print '' . $objp->tva_intra . ''; + print ''; print $formaccounting->select_account($objp->aarowid_suggest, 'codeventil'.$objp->rowid, 1, array(), 0, 0, 'codeventil maxwidth300 maxwidthonsmartphone', 'cachewithshowemptyone'); print ''; + print ''; print length_accountg(html_entity_decode($objp->code_buy)); print '' . $objp->country .''; + $labelcountry=($objp->country_code && ($langs->trans("Country".$objp->country_code)!="Country".$objp->country_code))?$langs->trans("Country".$objp->country_code):$objp->country_label; + print $labelcountry; + print '' . $objp->tva_intra . ''; + print ''; print $formaccounting->select_account($objp->aarowid_suggest, 'codeventil'.$objp->rowid, 1, array(), 0, 0, 'codeventil maxwidth300 maxwidthonsmartphone', 'cachewithshowemptyone'); print '
'.$langs->trans("Day").''.$langs->trans("Value").'
'; - print '
'; + print '
'; - print '
'; + print '
'; - print '
'; + print '
'; - print '
'; + print '
'; - //if (empty($country_selected)) $country_selected=substr($langs->defaultlang,-2); // By default, country of localization - print $form->select_country($conf->global->MAIN_INFO_ACCOUNTANT_COUNTRY, 'country_id'); - if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1); - print '
'; + print '
'; - $formcompany->select_departement($conf->global->MAIN_INFO_ACCOUNTANT_STATE, $conf->global->MAIN_INFO_ACCOUNTANT_COUNTRY, 'state_id'); - print '
'; + print '
'; - print '
'; + print '
'; - print '
'; - print '
'; - print '
'; - print '
'; - print '

'; - print '
'; print ''; print ''; - print ''; - - - print ''; - - - print ''; - - - print ''; - - print ''; - - print ''; - - print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; print '
'.$langs->trans("Day").''.$langs->trans("Value").'
'.$langs->trans("Monday").'' . nl2br(empty($conf->global->MAIN_INFO_ACCOUNTANT_ADDRESS)?'':$conf->global->MAIN_INFO_ACCOUNTANT_ADDRESS) . '
'.$langs->trans("Tuesday").'' . (empty($conf->global->MAIN_INFO_ACCOUNTANT_ZIP)?'':$conf->global->MAIN_INFO_ACCOUNTANT_ZIP) . '
'.$langs->trans("Wednesday").'' . (empty($conf->global->MAIN_INFO_ACCOUNTANT_TOWN)?'':$conf->global->MAIN_INFO_ACCOUNTANT_TOWN) . '
'.$langs->trans("Thursday").''; - if (! empty($conf->global->MAIN_INFO_ACCOUNTANT_COUNTRY)) - { - $code = getCountry($conf->global->MAIN_INFO_ACCOUNTANT_COUNTRY, 2); - $img=picto_from_langcode($code); - print $img?$img.' ':''; - print getCountry($conf->global->MAIN_INFO_ACCOUNTANT_COUNTRY, 1); - } - print '
'.$langs->trans("Friday").'' . dol_print_phone($conf->global->MAIN_INFO_ACCOUNTANT_PHONE, $mysoc->country_code) . '
'.$langs->trans("Saturday").'' . dol_print_phone($conf->global->MAIN_INFO_ACCOUNTANT_FAX, $mysoc->country_code) . '
'.$langs->trans("Sunday").'' . dol_print_email($conf->global->MAIN_INFO_ACCOUNTANT_MAIL, 0, 0, 0, 80) . '
'.$langs->trans("Monday").'' . (empty($conf->global->MAIN_INFO_OPENINGHOURS_MONDAY)?'':$conf->global->MAIN_INFO_OPENINGHOURS_MONDAY) . '
'.$langs->trans("Tuesday").'' . (empty($conf->global->MAIN_INFO_OPENINGHOURS_TUESDAY)?'':$conf->global->MAIN_INFO_OPENINGHOURS_TUESDAY) . '
'.$langs->trans("Wednesday").'' . (empty($conf->global->MAIN_INFO_OPENINGHOURS_WEDNESDAY)?'':$conf->global->MAIN_INFO_OPENINGHOURS_WEDNESDAY) . '
'.$langs->trans("Thursday").'' . (empty($conf->global->MAIN_INFO_OPENINGHOURS_THURSDAY)?'':$conf->global->MAIN_INFO_OPENINGHOURS_THURSDAY) . '
'.$langs->trans("Friday").'' . (empty($conf->global->MAIN_INFO_OPENINGHOURS_FRIDAY)?'':$conf->global->MAIN_INFO_OPENINGHOURS_FRIDAY) . '
'.$langs->trans("Saturday").'' . (empty($conf->global->MAIN_INFO_OPENINGHOURS_SATURDAY)?'':$conf->global->MAIN_INFO_OPENINGHOURS_SATURDAY) . '
'.$langs->trans("Sunday").'' . (empty($conf->global->MAIN_INFO_OPENINGHOURS_SUNDAY)?'':$conf->global->MAIN_INFO_OPENINGHOURS_SUNDAY) . '
'; print "
"; From eb4dc36e055b4f73f390776613135b567e725017 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 12 Jun 2019 04:56:16 +0200 Subject: [PATCH 198/828] Responsive on invoice index --- htdocs/compta/index.php | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/htdocs/compta/index.php b/htdocs/compta/index.php index c872fae3def..cc077ed55e1 100644 --- a/htdocs/compta/index.php +++ b/htdocs/compta/index.php @@ -351,6 +351,7 @@ if (! empty($conf->facture->enabled) && $user->rights->facture->lire) $num = $db->num_rows($resql); $i = 0; + print '
'; print ''; print ''; if (! empty($conf->global->MAIN_SHOW_HT_ON_SUMMARY)) print ''; @@ -428,7 +429,7 @@ if (! empty($conf->facture->enabled) && $user->rights->facture->lire) if (! empty($conf->global->MAIN_SHOW_HT_ON_SUMMARY)) $colspan++; print ''; } - print '
'.$langs->trans("BoxTitleLastCustomerBills", $max).''.$langs->trans("AmountHT").'
'.$langs->trans("NoInvoice").'

'; + print '

'; $db->free($resql); } else @@ -472,6 +473,7 @@ if (! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->facture- { $num = $db->num_rows($resql); + print '
'; print ''; print ''; if (! empty($conf->global->MAIN_SHOW_HT_ON_SUMMARY)) print ''; @@ -524,7 +526,7 @@ if (! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->facture- if (! empty($conf->global->MAIN_SHOW_HT_ON_SUMMARY)) $colspan++; print ''; } - print '
'.$langs->trans("BoxTitleLastSupplierBills", $max).''.$langs->trans("AmountHT").'
'.$langs->trans("NoInvoice").'

'; + print '

'; } else { @@ -561,6 +563,7 @@ if (! empty($conf->don->enabled) && $user->rights->societe->lire) $i = 0; + print '
'; print ''; print ''; print ''; @@ -600,7 +603,7 @@ if (! empty($conf->don->enabled) && $user->rights->societe->lire) { print ''; } - print '
'.$langs->trans("BoxTitleLastModifiedDonations", $max).'
'.$langs->trans("None").'

'; + print '

'; } else dol_print_error($db); } @@ -634,6 +637,7 @@ if (! empty($conf->tax->enabled) && $user->rights->tax->charges->lire) { $num = $db->num_rows($resql); + print '
'; print ''; print ''; print ''; @@ -676,7 +680,7 @@ if (! empty($conf->tax->enabled) && $user->rights->tax->charges->lire) { print ''; } - print "
'.$langs->trans("ContributionsToPay").($num?' '.$num.'':'').'
'.$langs->trans("None").'

"; + print "

"; $db->free($resql); } else @@ -726,6 +730,8 @@ if (! empty($conf->facture->enabled) && ! empty($conf->commande->enabled) && $us if ($num) { $i = 0; + + print '
'; print ''; print ""; print ''; @@ -795,7 +801,7 @@ if (! empty($conf->facture->enabled) && ! empty($conf->commande->enabled) && $us print ''; print ''; print ''; - print '
'.$langs->trans("OrdersDeliveredToBill").' '.$num.''.price($tot_tobill).' 

'; + print '

'; } $db->free($resql); } @@ -1053,6 +1059,7 @@ if (! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->facture- $resql = 0; if ($resql) { + print '
'; print ''; print ''.$langs->trans("TasksToDo").''; print "\n"; @@ -1067,7 +1074,7 @@ if ($resql) $i++; } $db->free($resql); - print "

"; + print "

"; } From 420f3bbdabfa80206058a8a5c5c707ad58ba091b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 12 Jun 2019 10:05:53 +0200 Subject: [PATCH 199/828] FIX #11316 --- htdocs/core/modules/modProjet.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/modules/modProjet.class.php b/htdocs/core/modules/modProjet.class.php index dcfef83f8e3..54cd897102e 100644 --- a/htdocs/core/modules/modProjet.class.php +++ b/htdocs/core/modules/modProjet.class.php @@ -247,8 +247,8 @@ class modProjet extends DolibarrModules $keyforselect='projet'; $keyforelement='project'; $keyforaliasextra='extra'; include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php'; // Add fields for tasks - $this->export_fields_array[$r]=array_merge($this->export_fields_array[$r], array('pt.rowid'=>'RefTask','pt.label'=>'LabelTask','pt.dateo'=>"TaskDateStart",'pt.datee'=>"TaskDateEnd",'pt.duration_effective'=>"DurationEffective",'pt.planned_workload'=>"PlannedWorkload",'pt.progress'=>"Progress",'pt.description'=>"TaskDescription")); - $this->export_entities_array[$r]=array_merge($this->export_entities_array[$r], array('pt.rowid'=>'projecttask','pt.label'=>'projecttask','pt.dateo'=>"projecttask",'pt.datee'=>"projecttask",'pt.duration_effective'=>"projecttask",'pt.planned_workload'=>"projecttask",'pt.progress'=>"projecttask",'pt.description'=>"projecttask")); + $this->export_fields_array[$r]=array_merge($this->export_fields_array[$r], array('pt.rowid'=>'TaskId', 'pt.ref'=>'RefTask', 'pt.label'=>'LabelTask','pt.dateo'=>"TaskDateStart",'pt.datee'=>"TaskDateEnd",'pt.duration_effective'=>"DurationEffective",'pt.planned_workload'=>"PlannedWorkload",'pt.progress'=>"Progress",'pt.description'=>"TaskDescription")); + $this->export_entities_array[$r]=array_merge($this->export_entities_array[$r], array('pt.rowid'=>'projecttask', 'pt.ref'=>'projecttask', 'pt.label'=>'projecttask','pt.dateo'=>"projecttask",'pt.datee'=>"projecttask",'pt.duration_effective'=>"projecttask",'pt.planned_workload'=>"projecttask",'pt.progress'=>"projecttask",'pt.description'=>"projecttask")); // Add extra fields for task $keyforselect='projet_task'; $keyforelement='projecttask'; $keyforaliasextra='extra2'; include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php'; From 25031e534dacd664bdbb69ba2da2001f266a2352 Mon Sep 17 00:00:00 2001 From: atm-greg Date: Wed, 12 Jun 2019 12:05:02 +0200 Subject: [PATCH 200/828] fix massaction presend --- htdocs/core/actions_massactions.inc.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php index 064acb0b1c6..bb8b03d9366 100644 --- a/htdocs/core/actions_massactions.inc.php +++ b/htdocs/core/actions_massactions.inc.php @@ -260,6 +260,11 @@ if (! $error && $massaction == 'confirm_presend') $filename=dol_sanitizeFileName($objectobj->ref).'.pdf'; $filedir=$uploaddir . '/' . dol_sanitizeFileName($objectobj->ref); $file = $filedir . '/' . $filename; + if ($object->element == 'invoice_supplier') + { + $fileparams = dol_most_recent_file($uploaddir . '/' . get_exdir($objectobj->id,2,0,0,$objectobj,$objectobj->element).$objectobj->ref, preg_quote($objectobj->ref,'/').'([^\-])+'); + $file = $fileparams['fullname']; + } $mime = dol_mimetype($file); if (dol_is_file($file)) From 9ba102b6b93239599626fe8c60cf0569ad12bcb5 Mon Sep 17 00:00:00 2001 From: atm-greg Date: Wed, 12 Jun 2019 12:08:16 +0200 Subject: [PATCH 201/828] bad object used --- htdocs/core/actions_massactions.inc.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php index bb8b03d9366..2d0750bbefe 100644 --- a/htdocs/core/actions_massactions.inc.php +++ b/htdocs/core/actions_massactions.inc.php @@ -260,11 +260,13 @@ if (! $error && $massaction == 'confirm_presend') $filename=dol_sanitizeFileName($objectobj->ref).'.pdf'; $filedir=$uploaddir . '/' . dol_sanitizeFileName($objectobj->ref); $file = $filedir . '/' . $filename; - if ($object->element == 'invoice_supplier') + + if ($objectobj->element == 'invoice_supplier') { $fileparams = dol_most_recent_file($uploaddir . '/' . get_exdir($objectobj->id,2,0,0,$objectobj,$objectobj->element).$objectobj->ref, preg_quote($objectobj->ref,'/').'([^\-])+'); $file = $fileparams['fullname']; } + $mime = dol_mimetype($file); if (dol_is_file($file)) From 91a4e8bc0a79d0a94cb32a8010fe2f2958ab1213 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 12 Jun 2019 12:09:56 +0200 Subject: [PATCH 202/828] Merge --- htdocs/core/modules/modProjet.class.php | 6 +++--- htdocs/langs/en_US/projects.lang | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/htdocs/core/modules/modProjet.class.php b/htdocs/core/modules/modProjet.class.php index 5d2ed5126af..106517c638a 100644 --- a/htdocs/core/modules/modProjet.class.php +++ b/htdocs/core/modules/modProjet.class.php @@ -220,7 +220,7 @@ class modProjet extends DolibarrModules $this->export_TypeFields_array[$r]=array('s.rowid'=>"List:societe:nom::thirdparty",'s.nom'=>'Text','s.address'=>'Text','s.zip'=>'Text','s.town'=>'Text','s.fk_pays'=>'List:c_country:label', 's.phone'=>'Text','s.email'=>'Text','s.siren'=>'Text','s.siret'=>'Text','s.ape'=>'Text','s.idprof4'=>'Text','s.code_compta'=>'Text','s.code_compta_fournisseur'=>'Text', 'p.rowid'=>"List:projet:ref::project",'p.ref'=>"Text",'p.title'=>"Text",'p.datec'=>"Date",'p.dateo'=>"Date",'p.datee'=>"Date",'p.fk_statut'=>'Status','cls.code'=>"Text",'p.opp_percent'=>'Numeric','p.opp_amount'=>'Numeric','p.description'=>"Text",'p.entity'=>'Numeric', - 'pt.rowid'=>'Text','pt.label'=>'Text','pt.dateo'=>"Date",'pt.datee'=>"Date",'pt.duration_effective'=>"Duree",'pt.planned_workload'=>"Numeric",'pt.progress'=>"Numeric",'pt.description'=>"Text", + 'pt.rowid'=>'Numeric','pt.ref'=>'Text','pt.label'=>'Text','pt.dateo'=>"Date",'pt.datee'=>"Date",'pt.duration_effective'=>"Duree",'pt.planned_workload'=>"Numeric",'pt.progress'=>"Numeric",'pt.description'=>"Text", 'ptt.rowid'=>'Numeric','ptt.task_date'=>'Date','ptt.task_duration'=>"Duree",'ptt.fk_user'=>"List:user:CONCAT(lastname,' ',firstname)",'ptt.note'=>"Text"); $this->export_entities_array[$r]=array('s.rowid'=>"company",'s.nom'=>'company','s.address'=>'company','s.zip'=>'company','s.town'=>'company','s.fk_pays'=>'company', 's.phone'=>'company','s.email'=>'company','s.siren'=>'company','s.siret'=>'company','s.ape'=>'company','s.idprof4'=>'company','s.code_compta'=>'company','s.code_compta_fournisseur'=>'company'); @@ -247,8 +247,8 @@ class modProjet extends DolibarrModules $keyforselect='projet'; $keyforelement='project'; $keyforaliasextra='extra'; include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php'; // Add fields for tasks - $this->export_fields_array[$r]=array_merge($this->export_fields_array[$r], array('pt.rowid'=>'TaskId', 'pt.ref'=>'RefTask', 'pt.label'=>'LabelTask','pt.dateo'=>"TaskDateStart",'pt.datee'=>"TaskDateEnd",'pt.duration_effective'=>"DurationEffective",'pt.planned_workload'=>"PlannedWorkload",'pt.progress'=>"Progress",'pt.description'=>"TaskDescription")); - $this->export_entities_array[$r]=array_merge($this->export_entities_array[$r], array('pt.rowid'=>'projecttask', 'pt.ref'=>'projecttask', 'pt.label'=>'projecttask','pt.dateo'=>"projecttask",'pt.datee'=>"projecttask",'pt.duration_effective'=>"projecttask",'pt.planned_workload'=>"projecttask",'pt.progress'=>"projecttask",'pt.description'=>"projecttask")); + $this->export_fields_array[$r]=array_merge($this->export_fields_array[$r], array('pt.rowid'=>'TaskId', 'pt.ref'=>'RefTask', 'pt.label'=>'LabelTask', 'pt.dateo'=>"TaskDateStart", 'pt.datee'=>"TaskDateEnd", 'pt.duration_effective'=>"DurationEffective", 'pt.planned_workload'=>"PlannedWorkload", 'pt.progress'=>"Progress", 'pt.description'=>"TaskDescription")); + $this->export_entities_array[$r]=array_merge($this->export_entities_array[$r], array('pt.rowid'=>'projecttask', 'pt.ref'=>'projecttask', 'pt.label'=>'projecttask', 'pt.dateo'=>"projecttask", 'pt.datee'=>"projecttask", 'pt.duration_effective'=>"projecttask", 'pt.planned_workload'=>"projecttask", 'pt.progress'=>"projecttask", 'pt.description'=>"projecttask")); // Add extra fields for task $keyforselect='projet_task'; $keyforelement='projecttask'; $keyforaliasextra='extra2'; include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php'; diff --git a/htdocs/langs/en_US/projects.lang b/htdocs/langs/en_US/projects.lang index fbc43d6e990..ca9a1e2452f 100644 --- a/htdocs/langs/en_US/projects.lang +++ b/htdocs/langs/en_US/projects.lang @@ -45,8 +45,9 @@ TimeSpent=Time spent TimeSpentByYou=Time spent by you TimeSpentByUser=Time spent by user TimesSpent=Time spent -RefTask=Ref. task -LabelTask=Label task +TaskId=Task ID +RefTask=Task ref. +LabelTask=Task label TaskTimeSpent=Time spent on tasks TaskTimeUser=User TaskTimeNote=Note From 5554bd231f697c664b2221abaae92df4b842ae48 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 12 Jun 2019 12:11:06 +0200 Subject: [PATCH 203/828] Update openinghours.php --- htdocs/admin/openinghours.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/admin/openinghours.php b/htdocs/admin/openinghours.php index 435b99bc7f1..b68508f557a 100644 --- a/htdocs/admin/openinghours.php +++ b/htdocs/admin/openinghours.php @@ -17,7 +17,7 @@ /** * \file htdocs/admin/openinghours.php - * \ingroup Opening hours + * \ingroup core * \brief Setup page to configure opening hours */ From 47746fd17d77bb61c965130c325922daa30a01e3 Mon Sep 17 00:00:00 2001 From: atm-greg Date: Wed, 12 Jun 2019 12:30:49 +0200 Subject: [PATCH 204/828] fix template type --- htdocs/core/class/html.formmail.class.php | 1 + htdocs/fourn/facture/list.php | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/core/class/html.formmail.class.php b/htdocs/core/class/html.formmail.class.php index e8693af943a..ac742f0dbb7 100644 --- a/htdocs/core/class/html.formmail.class.php +++ b/htdocs/core/class/html.formmail.class.php @@ -359,6 +359,7 @@ class FormMail extends Form if ($this->param['models'] != 'none') { $result = $this->fetchAllEMailTemplate($this->param["models"], $user, $outputlangs); + if ($result < 0) { setEventMessages($this->error, $this->errors, 'errors'); diff --git a/htdocs/fourn/facture/list.php b/htdocs/fourn/facture/list.php index 4b208a99af7..c14c037dc97 100644 --- a/htdocs/fourn/facture/list.php +++ b/htdocs/fourn/facture/list.php @@ -496,7 +496,7 @@ if ($resql) print_barre_liste($langs->trans("BillsSuppliers").($socid?' '.$soc->name:''), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'title_accountancy', 0, $newcardbutton, '', $limit); $topicmail="SendBillRef"; - $modelmail="supplier_invoice_send"; + $modelmail="invoice_supplier_send"; $objecttmp=new FactureFournisseur($db); $trackid='sinv'.$object->id; include DOL_DOCUMENT_ROOT.'/core/tpl/massactions_pre.tpl.php'; From 0bf7512f288411d3e3e982c5522bab6606e920e8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 12 Jun 2019 12:33:31 +0200 Subject: [PATCH 205/828] Update actions_massactions.inc.php --- htdocs/core/actions_massactions.inc.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php index 2d0750bbefe..34ba465ebff 100644 --- a/htdocs/core/actions_massactions.inc.php +++ b/htdocs/core/actions_massactions.inc.php @@ -257,10 +257,14 @@ if (! $error && $massaction == 'confirm_presend') { // TODO Use future field $objectobj->fullpathdoc to know where is stored default file // TODO If not defined, use $objectobj->modelpdf (or defaut invoice config) to know what is template to use to regenerate doc. - $filename=dol_sanitizeFileName($objectobj->ref).'.pdf'; - $filedir=$uploaddir . '/' . dol_sanitizeFileName($objectobj->ref); + $filename = dol_sanitizeFileName($objectobj->ref).'.pdf'; + $subdir = ''; + // TODO Set subdir to be compatible with multi levels dir trees + // $subdir = get_exdir($objectobj->id, 2, 0, 0, $objectobj, $objectobj->element) + $filedir = $uploaddir . '/' . $subdir . dol_sanitizeFileName($objectobj->ref); $file = $filedir . '/' . $filename; + // For supplier invoices, we use the file provided by supplier, not the one we generate if ($objectobj->element == 'invoice_supplier') { $fileparams = dol_most_recent_file($uploaddir . '/' . get_exdir($objectobj->id,2,0,0,$objectobj,$objectobj->element).$objectobj->ref, preg_quote($objectobj->ref,'/').'([^\-])+'); From 0f3db439fe459a16f9e9802854e8373796bd7878 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 12 Jun 2019 12:38:01 +0200 Subject: [PATCH 206/828] Update bankjournal.php --- htdocs/accountancy/journal/bankjournal.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/accountancy/journal/bankjournal.php b/htdocs/accountancy/journal/bankjournal.php index a286e4d8a66..f20d075c05f 100644 --- a/htdocs/accountancy/journal/bankjournal.php +++ b/htdocs/accountancy/journal/bankjournal.php @@ -993,8 +993,8 @@ if (empty($action) || $action == 'view') { print "" . $langs->trans("SubledgerAccount") . ""; print "" . $langs->trans("LabelOperation") . ""; print "" . $langs->trans("PaymentMode") . ""; - print "" . $langs->trans("Debit") . ""; - print "" . $langs->trans("Credit") . ""; + print "" . $langs->trans("Debit") . ""; + print "" . $langs->trans("Credit") . ""; print "\n"; $r = ''; From 1182c0d1f58da7311c0d3b4a0c85591055a8baf7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 12 Jun 2019 12:46:44 +0200 Subject: [PATCH 207/828] Update list.php --- htdocs/accountancy/customer/list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/accountancy/customer/list.php b/htdocs/accountancy/customer/list.php index b11c7c14cec..3b9a3f23564 100644 --- a/htdocs/accountancy/customer/list.php +++ b/htdocs/accountancy/customer/list.php @@ -407,7 +407,7 @@ if ($result) { print_liste_field_titre("ProductRef", $_SERVER["PHP_SELF"], "p.ref", "", $param, '', $sortfield, $sortorder); //print_liste_field_titre("ProductLabel", $_SERVER["PHP_SELF"], "p.label", "", $param, '', $sortfield, $sortorder); print_liste_field_titre("Description", $_SERVER["PHP_SELF"], "l.description", "", $param, '', $sortfield, $sortorder); - print_liste_field_titre("Amount", $_SERVER["PHP_SELF"], "l.total_ht", "", $param, '', $sortfield, $sortorder, 'right minwidth100 '); + print_liste_field_titre("Amount", $_SERVER["PHP_SELF"], "l.total_ht", "", $param, '', $sortfield, $sortorder, 'right maxwidth50 '); print_liste_field_titre("VATRate", $_SERVER["PHP_SELF"], "l.tva_tx", "", $param, '', $sortfield, $sortorder, 'right '); print_liste_field_titre("Country", $_SERVER["PHP_SELF"], "co.label", "", $param, '', $sortfield, $sortorder); print_liste_field_titre("VATIntra", $_SERVER["PHP_SELF"], "s.tva_intra", "", $param, '', $sortfield, $sortorder, 'center '); From 3aacd454371bdd0255c1c3ca4a23f4b16c43c142 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 12 Jun 2019 12:47:35 +0200 Subject: [PATCH 208/828] Update list.php --- htdocs/accountancy/expensereport/list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/accountancy/expensereport/list.php b/htdocs/accountancy/expensereport/list.php index fc590ae140c..a317f7e50b2 100644 --- a/htdocs/accountancy/expensereport/list.php +++ b/htdocs/accountancy/expensereport/list.php @@ -331,7 +331,7 @@ if ($result) { print_liste_field_titre("Date", $_SERVER["PHP_SELF"], "erd.date, erd.rowid", "", $param, '', $sortfield, $sortorder, 'center '); print_liste_field_titre("TypeFees", $_SERVER["PHP_SELF"], "f.label", "", $param, '', $sortfield, $sortorder); print_liste_field_titre("Description", $_SERVER["PHP_SELF"], "erd.comments", "", $param, '', $sortfield, $sortorder); - print_liste_field_titre("Amount", $_SERVER["PHP_SELF"], "erd.total_ht", "", $param, '', $sortfield, $sortorder, 'right minwidth100 '); + print_liste_field_titre("Amount", $_SERVER["PHP_SELF"], "erd.total_ht", "", $param, '', $sortfield, $sortorder, 'right maxwidth50 '); print_liste_field_titre("VATRate", $_SERVER["PHP_SELF"], "erd.tva_tx", "", $param, '', $sortfield, $sortorder, 'right '); print_liste_field_titre("AccountAccountingSuggest", '', '', '', '', '', $sortfield, $sortorder, 'center '); print_liste_field_titre("IntoAccount", '', '', '', '', '', $sortfield, $sortorder, 'center '); From 402cbba4add00c60c9c3177b7ae171d96f2cbe87 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 12 Jun 2019 12:48:21 +0200 Subject: [PATCH 209/828] Update bankjournal.php --- htdocs/accountancy/journal/bankjournal.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/accountancy/journal/bankjournal.php b/htdocs/accountancy/journal/bankjournal.php index f20d075c05f..403e422f773 100644 --- a/htdocs/accountancy/journal/bankjournal.php +++ b/htdocs/accountancy/journal/bankjournal.php @@ -993,8 +993,8 @@ if (empty($action) || $action == 'view') { print "" . $langs->trans("SubledgerAccount") . ""; print "" . $langs->trans("LabelOperation") . ""; print "" . $langs->trans("PaymentMode") . ""; - print "" . $langs->trans("Debit") . ""; - print "" . $langs->trans("Credit") . ""; + print "" . $langs->trans("Debit") . ""; + print "" . $langs->trans("Credit") . ""; print "\n"; $r = ''; From f435f4bd6ab1ad4fd7c21b073bf1f2d3a5040e93 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 12 Jun 2019 12:49:44 +0200 Subject: [PATCH 210/828] Update bankjournal.php --- htdocs/accountancy/journal/bankjournal.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/htdocs/accountancy/journal/bankjournal.php b/htdocs/accountancy/journal/bankjournal.php index 403e422f773..70d54456c61 100644 --- a/htdocs/accountancy/journal/bankjournal.php +++ b/htdocs/accountancy/journal/bankjournal.php @@ -992,9 +992,9 @@ if (empty($action) || $action == 'view') { print "" . $langs->trans("AccountAccounting") . ""; print "" . $langs->trans("SubledgerAccount") . ""; print "" . $langs->trans("LabelOperation") . ""; - print "" . $langs->trans("PaymentMode") . ""; - print "" . $langs->trans("Debit") . ""; - print "" . $langs->trans("Credit") . ""; + print '' . $langs->trans("PaymentMode") . ""; + print '' . $langs->trans("Debit") . ""; + print '' . $langs->trans("Credit") . ""; print "\n"; $r = ''; @@ -1041,9 +1041,9 @@ if (empty($action) || $action == 'view') { print ""; print $reflabel; print ""; - print "" . $val["type_payment"] . ""; - print "" . ($mt >= 0 ? price($mt) : '') . ""; - print "" . ($mt < 0 ? price(- $mt) : '') . ""; + print '' . $val["type_payment"] . ""; + print '' . ($mt >= 0 ? price($mt) : '') . ""; + print '' . ($mt < 0 ? price(- $mt) : '') . ""; print ""; } } From a400183bf1f18fdbc5099a0352d57bec69300711 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 12 Jun 2019 12:52:51 +0200 Subject: [PATCH 211/828] Update bankjournal.php --- htdocs/accountancy/journal/bankjournal.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/htdocs/accountancy/journal/bankjournal.php b/htdocs/accountancy/journal/bankjournal.php index 70d54456c61..cce4c33e383 100644 --- a/htdocs/accountancy/journal/bankjournal.php +++ b/htdocs/accountancy/journal/bankjournal.php @@ -1122,9 +1122,9 @@ if (empty($action) || $action == 'view') { } print ""; print "" . $reflabel . ""; - print "" . $val["type_payment"] . ""; - print "" . ($mt < 0 ? price(- $mt) : '') . ""; - print "" . ($mt >= 0 ? price($mt) : '') . ""; + print '' . $val["type_payment"] . ""; + print '' . ($mt < 0 ? price(- $mt) : '') . ""; + print '' . ($mt >= 0 ? price($mt) : '') . ""; print ""; } } @@ -1158,9 +1158,9 @@ if (empty($action) || $action == 'view') { */ print ""; print "" . $reflabel . ""; - print "" . $val["type_payment"] . ""; - print "" . ($mt < 0 ? price(- $mt) : '') . ""; - print "" . ($mt >= 0 ? price($mt) : '') . ""; + print '' . $val["type_payment"] . ""; + print '' . ($mt < 0 ? price(- $mt) : '') . ""; + print '' . ($mt >= 0 ? price($mt) : '') . ""; print ""; } } From 42915d86ec0d3433b49769e306c0b777b936857f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 12 Jun 2019 12:57:02 +0200 Subject: [PATCH 212/828] Update expensereportsjournal.php --- .../journal/expensereportsjournal.php | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/htdocs/accountancy/journal/expensereportsjournal.php b/htdocs/accountancy/journal/expensereportsjournal.php index 9da814e2d8c..f02ea6c2212 100644 --- a/htdocs/accountancy/journal/expensereportsjournal.php +++ b/htdocs/accountancy/journal/expensereportsjournal.php @@ -554,8 +554,8 @@ if (empty($action) || $action == 'view') { print "" . $langs->trans("AccountAccounting") . ""; print "" . $langs->trans("SubledgerAccount") . ""; print "" . $langs->trans("LabelOperation") . ""; - print "" . $langs->trans("Debit") . ""; - print "" . $langs->trans("Credit") . ""; + print '' . $langs->trans("Debit") . ""; + print '' . $langs->trans("Credit") . ""; print "\n"; $r = ''; @@ -597,20 +597,21 @@ if (empty($action) || $action == 'view') { $userstatic->id = $tabuser[$key]['id']; $userstatic->name = $tabuser[$key]['name']; print "" . $userstatic->getNomUrl(0, 'user', 16) . ' - ' . $accountingaccount->label . ""; - print '' . ($mt >= 0 ? price($mt) : '') . ""; - print '' . ($mt < 0 ? price(- $mt) : '') . ""; + print '' . ($mt >= 0 ? price($mt) : '') . ""; + print '' . ($mt < 0 ? price(- $mt) : '') . ""; print ""; } } // Third party foreach ($tabttc[$key] as $k => $mt) { + $userstatic->id = $tabuser[$key]['id']; + $userstatic->name = $tabuser[$key]['name']; + print ''; print ""; print "" . $date . ""; print "" . $expensereportstatic->getNomUrl(1) . ""; - $userstatic->id = $tabuser[$key]['id']; - $userstatic->name = $tabuser[$key]['name']; // Account print ""; $accountoshow = length_accounta($conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT); @@ -630,8 +631,8 @@ if (empty($action) || $action == 'view') { else print $accountoshow; print ''; print "" . $userstatic->getNomUrl(0, 'user', 16) . ' - ' . $langs->trans("SubledgerAccount") . ""; - print '' . ($mt < 0 ? - price(- $mt) : '') . ""; - print '' . ($mt >= 0 ? price($mt) : '') . ""; + print '' . ($mt < 0 ? - price(- $mt) : '') . ""; + print '' . ($mt >= 0 ? price($mt) : '') . ""; print ""; } @@ -662,8 +663,8 @@ if (empty($action) || $action == 'view') { print ''; print "" . $userstatic->getNomUrl(0, 'user', 16) . ' - ' . $langs->trans("VAT"). ' '.join(', ', $def_tva[$key][$k]).' %'.($numtax?' - Localtax '.$numtax:''); print ""; - print '' . ($mt >= 0 ? price($mt) : '') . ""; - print '' . ($mt < 0 ? price(- $mt) : '') . ""; + print '' . ($mt >= 0 ? price($mt) : '') . ""; + print '' . ($mt < 0 ? price(- $mt) : '') . ""; print ""; } } From eefd30fe1cda3f828b42bbc10c6b79301be61bf3 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 12 Jun 2019 13:01:04 +0200 Subject: [PATCH 213/828] Update purchasesjournal.php --- .../accountancy/journal/purchasesjournal.php | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/htdocs/accountancy/journal/purchasesjournal.php b/htdocs/accountancy/journal/purchasesjournal.php index 8dbcc0989ce..ee59481a419 100644 --- a/htdocs/accountancy/journal/purchasesjournal.php +++ b/htdocs/accountancy/journal/purchasesjournal.php @@ -788,8 +788,8 @@ if (empty($action) || $action == 'view') { print "" . $langs->trans("AccountAccounting") . ""; print "" . $langs->trans("SubledgerAccount") . ""; print "" . $langs->trans("LabelOperation") . ""; - print "" . $langs->trans("Debit") . ""; - print "" . $langs->trans("Credit") . ""; + print '' . $langs->trans("Debit") . ""; + print '' . $langs->trans("Credit") . ""; print "\n"; $r = ''; @@ -893,8 +893,8 @@ if (empty($action) || $action == 'view') { else print $accountoshow; print ''; print "" . $companystatic->getNomUrl(0, 'supplier', 16) . ' - ' . $invoicestatic->ref_supplier . ' - ' . $langs->trans("SubledgerAccount") . ""; - print ''. ($mt < 0 ? price(- $mt) : '') . ""; - print '' . ($mt >= 0 ? price($mt) : '') . ""; + print ''. ($mt < 0 ? price(- $mt) : '') . ""; + print '' . ($mt >= 0 ? price($mt) : '') . ""; print ""; //} } @@ -924,8 +924,8 @@ if (empty($action) || $action == 'view') { $companystatic->id = $tabcompany[$key]['id']; $companystatic->name = $tabcompany[$key]['name']; print "" . $companystatic->getNomUrl(0, 'supplier', 16) . ' - ' . $invoicestatic->ref_supplier . ' - ' . $accountingaccount->label . ""; - print '' . ($mt >= 0 ? price($mt) : '') . ""; - print '' . ($mt < 0 ? price(- $mt) : '') . ""; + print '' . ($mt >= 0 ? price($mt) : '') . ""; + print '' . ($mt < 0 ? price(- $mt) : '') . ""; print ""; //} } @@ -958,8 +958,8 @@ if (empty($action) || $action == 'view') { print ""; print $companystatic->getNomUrl(0, 'supplier', 16) . ' - ' . $invoicestatic->ref_supplier . ' - ' . $langs->trans("VAT"). ' '.join(', ', $def_tva[$key][$k]).' %'.($numtax?' - Localtax '.$numtax:''); print ""; - print '' . ($mt >= 0 ? price($mt) : '') . ""; - print '' . ($mt < 0 ? price(- $mt) : '') . ""; + print '' . ($mt >= 0 ? price($mt) : '') . ""; + print '' . ($mt < 0 ? price(- $mt) : '') . ""; print ""; } } @@ -987,8 +987,8 @@ if (empty($action) || $action == 'view') { print ""; print ''; print "" . $companystatic->getNomUrl(0, 'supplier', 16) . ' - ' . $invoicestatic->ref_supplier . ' - ' . $langs->trans("VAT") . " NPR (counterpart)"; - print '' . ($mt < 0 ? price(- $mt) : '') . ""; - print '' . ($mt >= 0 ? price($mt) : '') . ""; + print '' . ($mt < 0 ? price(- $mt) : '') . ""; + print '' . ($mt >= 0 ? price($mt) : '') . ""; print ""; } } From 1e87635e8ee034bb1974b89424d0ab17ada441ec Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 12 Jun 2019 13:02:59 +0200 Subject: [PATCH 214/828] Update sellsjournal.php --- htdocs/accountancy/journal/sellsjournal.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/htdocs/accountancy/journal/sellsjournal.php b/htdocs/accountancy/journal/sellsjournal.php index da1f14dade5..449f0a278eb 100644 --- a/htdocs/accountancy/journal/sellsjournal.php +++ b/htdocs/accountancy/journal/sellsjournal.php @@ -725,8 +725,8 @@ if (empty($action) || $action == 'view') { print "" . $langs->trans("AccountAccounting") . ""; print "" . $langs->trans("SubledgerAccount") . ""; print "" . $langs->trans("LabelOperation") . ""; - print "" . $langs->trans("Debit") . ""; - print "" . $langs->trans("Credit") . ""; + print '' . $langs->trans("Debit") . ""; + print '' . $langs->trans("Credit") . ""; print "\n"; $r = ''; @@ -829,8 +829,8 @@ if (empty($action) || $action == 'view') { else print $accountoshow; print ''; print "" . $companystatic->getNomUrl(0, 'customer', 16) . ' - ' . $invoicestatic->ref . ' - ' . $langs->trans("SubledgerAccount") . ""; - print '' . ($mt >= 0 ? price($mt) : '') . ""; - print '' . ($mt < 0 ? price(- $mt) : '') . ""; + print '' . ($mt >= 0 ? price($mt) : '') . ""; + print '' . ($mt < 0 ? price(- $mt) : '') . ""; print ""; //} } @@ -861,8 +861,8 @@ if (empty($action) || $action == 'view') { $companystatic->id = $tabcompany[$key]['id']; $companystatic->name = $tabcompany[$key]['name']; print "" . $companystatic->getNomUrl(0, 'customer', 16) . ' - ' . $invoicestatic->ref . ' - ' . $accountingaccount->label . ""; - print "" . ($mt < 0 ? price(- $mt) : '') . ""; - print "" . ($mt >= 0 ? price($mt) : '') . ""; + print '' . ($mt < 0 ? price(- $mt) : '') . ""; + print '' . ($mt >= 0 ? price($mt) : '') . ""; print ""; //} } @@ -895,8 +895,8 @@ if (empty($action) || $action == 'view') { print ''; print "" . $companystatic->getNomUrl(0, 'customer', 16) . ' - ' . $invoicestatic->ref . ' - ' . $langs->trans("VAT"). ' '.join(', ', $def_tva[$key][$k]).' %'.($numtax?' - Localtax '.$numtax:''); print ""; - print '' . ($mt < 0 ? price(- $mt) : '') . ""; - print '' . ($mt >= 0 ? price($mt) : '') . ""; + print '' . ($mt < 0 ? price(- $mt) : '') . ""; + print '' . ($mt >= 0 ? price($mt) : '') . ""; print ""; } } From 9fa6674e3f76794a9fdca44ddb0887cec96800d6 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 12 Jun 2019 13:03:54 +0200 Subject: [PATCH 215/828] Update list.php --- htdocs/accountancy/supplier/list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/accountancy/supplier/list.php b/htdocs/accountancy/supplier/list.php index 1d53fba9aef..b7b74104f14 100644 --- a/htdocs/accountancy/supplier/list.php +++ b/htdocs/accountancy/supplier/list.php @@ -406,7 +406,7 @@ if ($result) { print_liste_field_titre("ProductRef", $_SERVER["PHP_SELF"], "p.ref", "", $param, '', $sortfield, $sortorder); //print_liste_field_titre("ProductLabel", $_SERVER["PHP_SELF"], "p.label", "", $param, '', $sortfield, $sortorder); print_liste_field_titre("Description", $_SERVER["PHP_SELF"], "l.description", "", $param, '', $sortfield, $sortorder); - print_liste_field_titre("Amount", $_SERVER["PHP_SELF"], "l.total_ht", "", $param, '', $sortfield, $sortorder, 'right minwidth100 '); + print_liste_field_titre("Amount", $_SERVER["PHP_SELF"], "l.total_ht", "", $param, '', $sortfield, $sortorder, 'right maxwidth50 '); print_liste_field_titre("VATRate", $_SERVER["PHP_SELF"], "l.tva_tx", "", $param, '', $sortfield, $sortorder, 'right '); print_liste_field_titre("Country", $_SERVER["PHP_SELF"], "co.label", "", $param, '', $sortfield, $sortorder); print_liste_field_titre("VATIntra", $_SERVER["PHP_SELF"], "s.tva_intra", "", $param, '', $sortfield, $sortorder); From aaed26b9b0d87bf162107909ff0f2eee5f9a5d6a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 12 Jun 2019 13:04:28 +0200 Subject: [PATCH 216/828] Update main.lang --- htdocs/langs/en_US/main.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index a89443b345f..400d7179b02 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -973,4 +973,4 @@ SeePrivateNote=See private note PaymentInformation=Payment information ValidFrom=Valid from ValidUntil=Valid until -NoRecordedUsers=No records users \ No newline at end of file +NoRecordedUsers=No users From 509ca489b22c9496d73185c9743ea96a48d84b38 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 12 Jun 2019 13:06:02 +0200 Subject: [PATCH 217/828] Update card.php --- htdocs/compta/paiement/cheque/card.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/htdocs/compta/paiement/cheque/card.php b/htdocs/compta/paiement/cheque/card.php index 9372ec84cfe..3107cf29742 100644 --- a/htdocs/compta/paiement/cheque/card.php +++ b/htdocs/compta/paiement/cheque/card.php @@ -472,14 +472,14 @@ if ($action == 'new') print ''."\n"; print ''; - print ''."\n"; - print '\n"; - print '\n"; - print '\n"; - print '\n"; - print '\n"; - print '\n"; - print ''."\n"; + print '\n"; + print '\n"; + print '\n"; + print '\n"; + print '\n"; + print '\n"; + print ''; print "\n"; From 9d958124958d7f700afceaae2bbdcb321ac5d6f3 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 12 Jun 2019 13:08:26 +0200 Subject: [PATCH 218/828] Update bankentries_list.php --- htdocs/compta/bank/bankentries_list.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/htdocs/compta/bank/bankentries_list.php b/htdocs/compta/bank/bankentries_list.php index be2d8335afa..e28ea5e9af1 100644 --- a/htdocs/compta/bank/bankentries_list.php +++ b/htdocs/compta/bank/bankentries_list.php @@ -935,18 +935,18 @@ if ($resql) print ''; if (! empty($arrayfields['b.rowid']['checked'])) print_liste_field_titre($arrayfields['b.rowid']['label'], $_SERVER['PHP_SELF'], 'b.rowid', '', $param, '', $sortfield, $sortorder); if (! empty($arrayfields['description']['checked'])) print_liste_field_titre($arrayfields['description']['label'], $_SERVER['PHP_SELF'], '', '', $param, '', $sortfield, $sortorder); - if (! empty($arrayfields['b.dateo']['checked'])) print_liste_field_titre($arrayfields['b.dateo']['label'], $_SERVER['PHP_SELF'], 'b.dateo', '', $param, 'align="center"', $sortfield, $sortorder); + if (! empty($arrayfields['b.dateo']['checked'])) print_liste_field_titre($arrayfields['b.dateo']['label'], $_SERVER['PHP_SELF'], 'b.dateo', '', $param, '', $sortfield, $sortorder, "center "); if (! empty($arrayfields['b.datev']['checked'])) print_liste_field_titre($arrayfields['b.datev']['label'], $_SERVER['PHP_SELF'], 'b.datev,b.dateo,b.rowid', '', $param, 'align="center"', $sortfield, $sortorder); if (! empty($arrayfields['type']['checked'])) print_liste_field_titre($arrayfields['type']['label'], $_SERVER['PHP_SELF'], '', '', $param, 'align="center"', $sortfield, $sortorder); - if (! empty($arrayfields['b.num_chq']['checked'])) print_liste_field_titre($arrayfields['b.num_chq']['label'], $_SERVER['PHP_SELF'], 'b.num_chq', '', $param, 'align="center"', $sortfield, $sortorder); + if (! empty($arrayfields['b.num_chq']['checked'])) print_liste_field_titre($arrayfields['b.num_chq']['label'], $_SERVER['PHP_SELF'], 'b.num_chq', '', $param, '', $sortfield, $sortorder, "center "); if (! empty($arrayfields['bu.label']['checked'])) print_liste_field_titre($arrayfields['bu.label']['label'], $_SERVER['PHP_SELF'], 'bu.label', '', $param, '', $sortfield, $sortorder); if (! empty($arrayfields['ba.ref']['checked'])) print_liste_field_titre($arrayfields['ba.ref']['label'], $_SERVER['PHP_SELF'], 'ba.ref', '', $param, '', $sortfield, $sortorder); - if (! empty($arrayfields['b.debit']['checked'])) print_liste_field_titre($arrayfields['b.debit']['label'], $_SERVER['PHP_SELF'], 'b.amount', '', $param, 'align="center" style="min-width: 100px"', $sortfield, $sortorder, "right "); - if (! empty($arrayfields['b.credit']['checked'])) print_liste_field_titre($arrayfields['b.credit']['label'], $_SERVER['PHP_SELF'], 'b.amount', '', $param, 'align="center" style="min-width: 100px"', $sortfield, $sortorder, "right "); - if (! empty($arrayfields['balancebefore']['checked'])) print_liste_field_titre($arrayfields['balancebefore']['label'], $_SERVER['PHP_SELF'], '', '', $param, 'class="right"', $sortfield, $sortorder); - if (! empty($arrayfields['balance']['checked'])) print_liste_field_titre($arrayfields['balance']['label'], $_SERVER['PHP_SELF'], '', '', $param, 'class="right"', $sortfield, $sortorder); - if (! empty($arrayfields['b.num_releve']['checked'])) print_liste_field_titre($arrayfields['b.num_releve']['label'], $_SERVER['PHP_SELF'], 'b.num_releve', '', $param, 'align="center"', $sortfield, $sortorder); - if (! empty($arrayfields['b.conciliated']['checked'])) print_liste_field_titre($arrayfields['b.conciliated']['label'], $_SERVER['PHP_SELF'], 'b.rappro', '', $param, 'align="center"', $sortfield, $sortorder); + if (! empty($arrayfields['b.debit']['checked'])) print_liste_field_titre($arrayfields['b.debit']['label'], $_SERVER['PHP_SELF'], 'b.amount', '', $param, '', $sortfield, $sortorder, "right "); + if (! empty($arrayfields['b.credit']['checked'])) print_liste_field_titre($arrayfields['b.credit']['label'], $_SERVER['PHP_SELF'], 'b.amount', '', $param, '', $sortfield, $sortorder, "right "); + if (! empty($arrayfields['balancebefore']['checked'])) print_liste_field_titre($arrayfields['balancebefore']['label'], $_SERVER['PHP_SELF'], '', '', $param, '', $sortfield, $sortorder, "right "); + if (! empty($arrayfields['balance']['checked'])) print_liste_field_titre($arrayfields['balance']['label'], $_SERVER['PHP_SELF'], '', '', $param, '', $sortfield, $sortorder, "right "); + if (! empty($arrayfields['b.num_releve']['checked'])) print_liste_field_titre($arrayfields['b.num_releve']['label'], $_SERVER['PHP_SELF'], 'b.num_releve', '', $param, '', $sortfield, $sortorder, "center "); + if (! empty($arrayfields['b.conciliated']['checked'])) print_liste_field_titre($arrayfields['b.conciliated']['label'], $_SERVER['PHP_SELF'], 'b.rappro', '', $param, '', $sortfield, $sortorder, "center "); // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; // Hook fields From 475f59cc2ad8e180933183e6aa10ee74026ffeee Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 12 Jun 2019 13:10:17 +0200 Subject: [PATCH 219/828] Update annuel.php --- htdocs/compta/bank/annuel.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/bank/annuel.php b/htdocs/compta/bank/annuel.php index 78705847bfc..c4352b3b97e 100644 --- a/htdocs/compta/bank/annuel.php +++ b/htdocs/compta/bank/annuel.php @@ -217,7 +217,7 @@ for ($mois = 1 ; $mois < 13 ; $mois++) } print ""; - print '"; for ($annee = $year_start ; $annee <= $year_end ; $annee++) { - print ''; + print ''; } print "\n"; From 330842d67eebc30f56ebc7dc9ed00246ec0a19a8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 12 Jun 2019 13:14:44 +0200 Subject: [PATCH 220/828] Update list.php --- htdocs/comm/propal/list.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php index ee8dacde380..555e89e7a61 100644 --- a/htdocs/comm/propal/list.php +++ b/htdocs/comm/propal/list.php @@ -162,8 +162,8 @@ $arrayfields=array( 'p.total_ht'=>array('label'=>"AmountHT", 'checked'=>1), 'p.total_vat'=>array('label'=>"AmountVAT", 'checked'=>0), 'p.total_ttc'=>array('label'=>"AmountTTC", 'checked'=>0), - 'p.total_ht_invoiced'=>array('label'=>$langs->trans("AmountInvoicedHT"), 'checked'=>0), - 'p.total_invoiced'=>array('label'=>$langs->trans("AmountInvoicedTTC"), 'checked'=>0), + 'p.total_ht_invoiced'=>array('label'=>$langs->trans("AmountInvoicedHT"), 'checked'=>0, 'enabled'=>$conf->global->PROPOSAL_SHOW_INVOICED_AMOUNT), + 'p.total_invoiced'=>array('label'=>$langs->trans("AmountInvoicedTTC"), 'checked'=>0, 'enabled'=>$conf->global->PROPOSAL_SHOW_INVOICED_AMOUNT), 'u.login'=>array('label'=>"Author", 'checked'=>1, 'position'=>10), 'sale_representative'=>array('label'=>"SaleRepresentativesOfThirdParty", 'checked'=>1), 'p.datec'=>array('label'=>"DateCreation", 'checked'=>0, 'position'=>500), From 44f383c8b976537de95d045dd802725671365bfa Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 12 Jun 2019 13:57:34 +0200 Subject: [PATCH 221/828] Fix data lost when creation in error --- htdocs/accountancy/bookkeeping/card.php | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/htdocs/accountancy/bookkeeping/card.php b/htdocs/accountancy/bookkeeping/card.php index d94ce0ec315..ca0476f3a3c 100644 --- a/htdocs/accountancy/bookkeeping/card.php +++ b/htdocs/accountancy/bookkeeping/card.php @@ -373,7 +373,7 @@ if ($action == 'create') print ''; print ''; - print ''; + print ''; print ''; /* @@ -615,23 +615,23 @@ if ($action == 'create') if ($action == 'update' && $line->id == $id) { print ''; print ''; - print ''; - print ''; - print ''; + print ''; + print ''; + print ''; print ''; print ''; print ''; - print ''; + print ''; print ''; print ''; print ''; From bf6f9dd7eae4d8904c13717c8bccef7166b2db53 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 12 Jun 2019 13:58:48 +0200 Subject: [PATCH 222/828] Fix phpcs --- htdocs/admin/multicurrency.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/admin/multicurrency.php b/htdocs/admin/multicurrency.php index 3b071f57fa8..206c251309e 100644 --- a/htdocs/admin/multicurrency.php +++ b/htdocs/admin/multicurrency.php @@ -46,7 +46,7 @@ $action = GETPOST('action', 'alpha'); */ -if (preg_match('/set_([a-z0-9_\-]+)/i',$action,$reg)) +if (preg_match('/set_([a-z0-9_\-]+)/i', $action, $reg)) { $code=$reg[1]; $value=GETPOST($code, 'alpha'); @@ -60,7 +60,7 @@ if (preg_match('/set_([a-z0-9_\-]+)/i',$action,$reg)) } } -if (preg_match('/del_([a-z0-9_\-]+)/i',$action,$reg)) +if (preg_match('/del_([a-z0-9_\-]+)/i', $action, $reg)) { $code=$reg[1]; if (dolibarr_del_const($db, $code, 0) > 0) From 47610d0323fb8e51220a9302b56f32069f482622 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 12 Jun 2019 15:42:48 +0200 Subject: [PATCH 223/828] Look and feel v10 --- htdocs/accountancy/customer/lines.php | 4 ++-- htdocs/accountancy/customer/list.php | 6 +++--- htdocs/accountancy/expensereport/lines.php | 4 ++-- htdocs/accountancy/expensereport/list.php | 4 ++-- htdocs/accountancy/supplier/lines.php | 4 ++-- htdocs/accountancy/supplier/list.php | 4 ++-- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/htdocs/accountancy/customer/lines.php b/htdocs/accountancy/customer/lines.php index 83bceb04026..9848c4cf7c5 100644 --- a/htdocs/accountancy/customer/lines.php +++ b/htdocs/accountancy/customer/lines.php @@ -310,9 +310,9 @@ if ($result) { print ''; print ''; print ''; diff --git a/htdocs/accountancy/customer/list.php b/htdocs/accountancy/customer/list.php index 61c22eb2912..14eac87fdaa 100644 --- a/htdocs/accountancy/customer/list.php +++ b/htdocs/accountancy/customer/list.php @@ -377,9 +377,9 @@ if ($result) { print ''; print ''; print ''; @@ -410,7 +410,7 @@ if ($result) { print_liste_field_titre("Amount", $_SERVER["PHP_SELF"], "l.total_ht", "", $param, '', $sortfield, $sortorder, 'right '); print_liste_field_titre("VATRate", $_SERVER["PHP_SELF"], "l.tva_tx", "", $param, '', $sortfield, $sortorder, 'right '); print_liste_field_titre("Country", $_SERVER["PHP_SELF"], "co.label", "", $param, '', $sortfield, $sortorder); - print_liste_field_titre("VATIntra", $_SERVER["PHP_SELF"], "s.tva_intra", "", $param, '', $sortfield, $sortorder, 'center '); + print_liste_field_titre("VATIntra", $_SERVER["PHP_SELF"], "s.tva_intra", "", $param, '', $sortfield, $sortorder); print_liste_field_titre("AccountAccountingSuggest", '', '', '', '', '', '', '', 'center '); print_liste_field_titre("IntoAccount", '', '', '', '', '', '', '', 'center '); $checkpicto=''; diff --git a/htdocs/accountancy/expensereport/lines.php b/htdocs/accountancy/expensereport/lines.php index 734bbfb65d2..3e3a8fd623e 100644 --- a/htdocs/accountancy/expensereport/lines.php +++ b/htdocs/accountancy/expensereport/lines.php @@ -263,8 +263,8 @@ if ($result) { print ''; print ''; print ''; print ''; diff --git a/htdocs/accountancy/expensereport/list.php b/htdocs/accountancy/expensereport/list.php index 4c739a218b9..46d00268174 100644 --- a/htdocs/accountancy/expensereport/list.php +++ b/htdocs/accountancy/expensereport/list.php @@ -309,8 +309,8 @@ if ($result) { print ''; print ''; print ''; print ''; diff --git a/htdocs/accountancy/supplier/lines.php b/htdocs/accountancy/supplier/lines.php index 9b704e21eb3..f68bf107b47 100644 --- a/htdocs/accountancy/supplier/lines.php +++ b/htdocs/accountancy/supplier/lines.php @@ -314,8 +314,8 @@ if ($result) { print ''; print ''; print ''; print ''; diff --git a/htdocs/accountancy/supplier/list.php b/htdocs/accountancy/supplier/list.php index 47e3570bcbe..afd65cdc645 100644 --- a/htdocs/accountancy/supplier/list.php +++ b/htdocs/accountancy/supplier/list.php @@ -376,8 +376,8 @@ if ($result) { print ''; print ''; print ''; print ''; From e81663ec3495597815266713de87ad1d1e0ea025 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 12 Jun 2019 19:00:34 +0200 Subject: [PATCH 224/828] Fix cropping of image files for BOM module was ko --- htdocs/core/class/html.formfile.class.php | 4 ++-- htdocs/core/lib/security.lib.php | 15 ++++++++------- htdocs/core/photos_resize.php | 20 +++++++++++++++++++- htdocs/langs/en_US/mrp.lang | 2 ++ 4 files changed, 31 insertions(+), 10 deletions(-) diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php index b729ad51fc5..8f0aee14424 100644 --- a/htdocs/core/class/html.formfile.class.php +++ b/htdocs/core/class/html.formfile.class.php @@ -1040,7 +1040,7 @@ class FormFile * @param string $relativepath Relative path of docs (autodefined if not provided), relative to module dir, not to MAIN_DATA_ROOT. * @param int $permonobject Permission on object (so permission to delete or crop document) * @param int $useinecm Change output for use in ecm module: - * 0 or 6: Add a preview column. Show also a rename and crop button. + * 0 or 6: Add a preview column. Show also a rename button. Show also a crop button for some values of $modulepart (must be supported into hard coded list in this function + photos_resize.php + restrictedArea + checkUserAccessToObject) * 1: Add link to edit ECM entry * 2: Add rename and crop file * 4: Add a preview column @@ -1068,7 +1068,7 @@ class FormFile global $form; $disablecrop=1; - if (in_array($modulepart, array('expensereport','holiday','member','project','product','produit','service','societe','tax','ticket','user'))) $disablecrop=0; + if (in_array($modulepart, array('bom','expensereport','holiday','member','project','product','produit','service','societe','tax','ticket','user'))) $disablecrop=0; // Define relative path used to store the file if (empty($relativepath)) diff --git a/htdocs/core/lib/security.lib.php b/htdocs/core/lib/security.lib.php index dcdc70c3fe6..69d9173e212 100644 --- a/htdocs/core/lib/security.lib.php +++ b/htdocs/core/lib/security.lib.php @@ -247,11 +247,12 @@ function restrictedArea($user, $features, $objectid = 0, $tableandshare = '', $f { if (! $user->rights->projet->lire && ! $user->rights->projet->all->lire) { $readok=0; $nbko++; } } - elseif (! empty($feature2)) // This should be used for future changes + elseif (! empty($feature2)) // This is for permissions on 2 levels { $tmpreadok=1; foreach($feature2 as $subfeature) { + var_dump($subfeature); if ($subfeature == 'user' && $user->id == $objectid) continue; // A user can always read its own card if (! empty($subfeature) && empty($user->rights->$feature->$subfeature->lire) && empty($user->rights->$feature->$subfeature->read)) { $tmpreadok=0; } elseif (empty($subfeature) && empty($user->rights->$feature->lire) && empty($user->rights->$feature->read)) { $tmpreadok=0; } @@ -263,7 +264,7 @@ function restrictedArea($user, $features, $objectid = 0, $tableandshare = '', $f $nbko++; } } - elseif (! empty($feature) && ($feature!='user' && $feature!='usergroup')) // This is for old permissions + elseif (! empty($feature) && ($feature!='user' && $feature!='usergroup')) // This is permissions on 1 level { if (empty($user->rights->$feature->lire) && empty($user->rights->$feature->read) @@ -307,7 +308,7 @@ function restrictedArea($user, $features, $objectid = 0, $tableandshare = '', $f { if (! $user->rights->banque->cheque) { $createok=0; $nbko++; } } - elseif (! empty($feature2)) // This should be used + elseif (! empty($feature2)) // This is for permissions on one level { foreach($feature2 as $subfeature) { @@ -317,7 +318,7 @@ function restrictedArea($user, $features, $objectid = 0, $tableandshare = '', $f else { $createok=1; break; } // Break to bypass second test if the first is ok } } - elseif (! empty($feature)) // This is for old permissions ('creer' or 'write') + elseif (! empty($feature)) // This is for permissions on 2 levels ('creer' or 'write') { //print '
feature='.$feature.' creer='.$user->rights->$feature->creer.' write='.$user->rights->$feature->write; if (empty($user->rights->$feature->creer) @@ -384,7 +385,7 @@ function restrictedArea($user, $features, $objectid = 0, $tableandshare = '', $f { if (! $user->rights->salaries->delete) $deleteok=0; } - elseif (! empty($feature2)) // This should be used for permissions on 2 levels + elseif (! empty($feature2)) // This is for permissions on 2 levels { foreach($feature2 as $subfeature) { @@ -392,7 +393,7 @@ function restrictedArea($user, $features, $objectid = 0, $tableandshare = '', $f else { $deleteok=1; break; } // For bypass the second test if the first is ok } } - elseif (! empty($feature)) // This is used for permissions on 1 level + elseif (! empty($feature)) // This is used for permissions on 1 level { //print '
feature='.$feature.' creer='.$user->rights->$feature->supprimer.' write='.$user->rights->$feature->delete; if (empty($user->rights->$feature->supprimer) @@ -451,7 +452,7 @@ function checkUserAccessToObject($user, $featuresarray, $objectid = 0, $tableand if ($feature == 'project') $feature='projet'; if ($feature == 'task') $feature='projet_task'; - $check = array('adherent','banque','don','user','usergroup','product','produit','service','produit|service','categorie','resource','expensereport','holiday'); // Test on entity only (Objects with no link to company) + $check = array('adherent','banque','bom','don','user','usergroup','product','produit','service','produit|service','categorie','resource','expensereport','holiday'); // Test on entity only (Objects with no link to company) $checksoc = array('societe'); // Test for societe object $checkother = array('contact','agenda'); // Test on entity and link to third party. Allowed if link is empty (Ex: contacts...). $checkproject = array('projet','project'); // Test for project object diff --git a/htdocs/core/photos_resize.php b/htdocs/core/photos_resize.php index 2ecb127f3b2..47be8cdf974 100644 --- a/htdocs/core/photos_resize.php +++ b/htdocs/core/photos_resize.php @@ -53,6 +53,12 @@ elseif ($modulepart == 'project') if (! $user->rights->projet->lire) accessforbidden(); $accessallowed=1; } +elseif ($modulepart == 'bom') +{ + $result=restrictedArea($user, 'bom', $id, 'bom_bom'); + if (! $user->rights->bom->read) accessforbidden(); + $accessallowed=1; +} elseif ($modulepart == 'expensereport') { $result=restrictedArea($user, 'expensereport', $id, 'expensereport'); @@ -205,8 +211,19 @@ elseif ($modulepart == 'ticket') $dir=$conf->ticket->dir_output; // By default } } +elseif ($modulepart == 'bom') +{ + require_once DOL_DOCUMENT_ROOT.'/bom/class/bom.class.php'; + $object = new BOM($db); + if ($id > 0) + { + $result = $object->fetch($id); + if ($result <= 0) dol_print_error($db, 'Failed to load object'); + $dir=$conf->bom->dir_output; // By default + } +} else { - print 'Action crop for module part '.$modulepart.' is not supported yet.'; + print 'Action crop for modulepart = '.$modulepart.' is not supported yet.'; } if (empty($backtourl)) @@ -220,6 +237,7 @@ if (empty($backtourl)) elseif (in_array($modulepart, array('tax'))) $backtourl=DOL_URL_ROOT."/compta/sociales/document.php?id=".$id.'&file='.urldecode($_POST["file"]); elseif (in_array($modulepart, array('ticket'))) $backtourl=DOL_URL_ROOT."/ticket/document.php?id=".$id.'&file='.urldecode($_POST["file"]); elseif (in_array($modulepart, array('user'))) $backtourl=DOL_URL_ROOT."/user/document.php?id=".$id.'&file='.urldecode($_POST["file"]); + else $backtourl=DOL_URL_ROOT."/".$modulepart."/".$modulepart."_document.php?id=".$id.'&file='.urldecode($_POST["file"]); } diff --git a/htdocs/langs/en_US/mrp.lang b/htdocs/langs/en_US/mrp.lang index c4bb9193a33..360f4303f07 100644 --- a/htdocs/langs/en_US/mrp.lang +++ b/htdocs/langs/en_US/mrp.lang @@ -13,3 +13,5 @@ WatermarkOnDraftBOMs=Watermark on draft BOM ConfirmCloneBillOfMaterials=Are you sure you want to clone this bill of material ? ManufacturingEfficiency=Manufacturing efficiency ValueOfMeansLoss=Value of 0.95 means an average of 5%% of loss during the production +DeleteBillOfMaterials=Delete Bill Of Materials +ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Material? From 2be5e9615d57a0ad568be62f817e8c50ee1f7974 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 12 Jun 2019 19:03:22 +0200 Subject: [PATCH 225/828] Fix look and field v10 --- htdocs/comm/action/card.php | 2 +- htdocs/core/lib/security.lib.php | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/htdocs/comm/action/card.php b/htdocs/comm/action/card.php index 71702c7b507..9381b186582 100644 --- a/htdocs/comm/action/card.php +++ b/htdocs/comm/action/card.php @@ -690,7 +690,7 @@ if ($action == 'create') dol_fiche_head(); - print '
'.$langs->trans("DateChequeReceived").''.$langs->trans("ChequeNumber")."'.$langs->trans("CheckTransmitter")."'.$langs->trans("Bank")."'.$langs->trans("Amount")."'.$langs->trans("Payment")."'.$langs->trans("LineRecord")."'.$langs->trans("Select")."
"; + print '
'.$langs->trans("DateChequeReceived").''.$langs->trans("ChequeNumber")."'.$langs->trans("CheckTransmitter")."'.$langs->trans("Bank")."'.$langs->trans("Amount")."'.$langs->trans("Payment")."'.$langs->trans("LineRecord")."'.$langs->trans("Select")."
"; if ($conf->use_javascript_ajax) print ''.$langs->trans("All").' / '.$langs->trans("None").''; print '
 '; + print ' '; if ($encaiss[$case]>0) { print price($encaiss[$case]); @@ -232,7 +232,7 @@ for ($mois = 1 ; $mois < 13 ; $mois++) print '
'.$langs->trans("Total")."'.price($totsorties[$annee]).''.price($totentrees[$annee]).''.price($totsorties[$annee]).''.price($totentrees[$annee]).'
' . $langs->trans("Piece") . '
'; - print $formaccounting->select_account($line->numero_compte, 'accountingaccount_number', 1, array (), 1, 1, ''); + print $formaccounting->select_account((GETPOSTISSET("accountingaccount_number") ? GETPOST("accountingaccount_number", "alpha") : $line->numero_compte), 'accountingaccount_number', 1, array (), 1, 1, ''); print ''; // TODO For the moment we keep a free input text instead of a combo. The select_auxaccount has problem because it does not // use setup of keypress to select thirdparty and this hang browser on large database. if (! empty($conf->global->ACCOUNTANCY_COMBO_FOR_AUX)) { - print $formaccounting->select_auxaccount($line->subledger_account, 'subledger_account', 1); + print $formaccounting->select_auxaccount((GETPOSTISSET("subledger_account") ? GETPOST("subledger_account", "alpha") : $line->subledger_account), 'subledger_account', 1); } else { - print ''; + print 'subledger_account).'">'; } print 'label_operation). '">debit)) . '">credit)) . '">'; print '' . "\n"; print ''; @@ -672,21 +672,21 @@ if ($action == 'create') if ($action == "" || $action == 'add') { print '
'; - print $formaccounting->select_account($accountingaccount_number, 'accountingaccount_number', 1, array (), 1, 1, ''); + print $formaccounting->select_account('', 'accountingaccount_number', 1, array (), 1, 1, ''); print ''; // TODO For the moment we keep a fre input text instead of a combo. The select_auxaccount has problem because it does not // use setup of keypress to select thirdparty and this hang browser on large database. if (! empty($conf->global->ACCOUNTANCY_COMBO_FOR_AUX)) { - print $formaccounting->select_auxaccount($subledger_account, 'subledger_account', 1); + print $formaccounting->select_auxaccount('', 'subledger_account', 1); } else { print ''; } print ''; if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) { - print ''; + print ''; } - print ''; + print ''; $formother->select_year($search_year, 'search_year', 1, 20, 5); print ''; if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) { - print ''; + print ''; } - print ''; + print ''; $formother->select_year($search_year, 'search_year', 1, 20, 5); print ''; - if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print ''; - print ''; + if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print ''; + print ''; $formother->select_year($search_year, 'search_year', 1, 20, 5); print ''; - if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print ''; - print ''; + if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print ''; + print ''; $formother->select_year($search_year, 'search_year', 1, 20, 5); print ''; - if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print ''; - print ''; + if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print ''; + print ''; $formother->select_year($search_year, 'search_year', 1, 20, 5); print ''; - if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print ''; - print ''; + if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print ''; + print ''; $formother->select_year($search_year, 'search_year', 1, 20, 5); print '
'; + print '
'; // Type of event if (! empty($conf->global->AGENDA_USE_EVENT_TYPE)) diff --git a/htdocs/core/lib/security.lib.php b/htdocs/core/lib/security.lib.php index 69d9173e212..051f3a5392a 100644 --- a/htdocs/core/lib/security.lib.php +++ b/htdocs/core/lib/security.lib.php @@ -252,7 +252,6 @@ function restrictedArea($user, $features, $objectid = 0, $tableandshare = '', $f $tmpreadok=1; foreach($feature2 as $subfeature) { - var_dump($subfeature); if ($subfeature == 'user' && $user->id == $objectid) continue; // A user can always read its own card if (! empty($subfeature) && empty($user->rights->$feature->$subfeature->lire) && empty($user->rights->$feature->$subfeature->read)) { $tmpreadok=0; } elseif (empty($subfeature) && empty($user->rights->$feature->lire) && empty($user->rights->$feature->read)) { $tmpreadok=0; } From 900e860f6dbf9cd8d6ccfb9997e8ae89e8e97baa Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 12 Jun 2019 19:32:29 +0200 Subject: [PATCH 226/828] Fix list of events for BOM module --- htdocs/bom/bom_agenda.php | 10 +++++----- htdocs/comm/action/card.php | 8 ++++---- htdocs/core/lib/company.lib.php | 12 ++++++++++-- htdocs/modulebuilder/template/myobject_agenda.php | 12 ++++++------ 4 files changed, 25 insertions(+), 17 deletions(-) diff --git a/htdocs/bom/bom_agenda.php b/htdocs/bom/bom_agenda.php index a4bf134e3ce..d7d86c50543 100644 --- a/htdocs/bom/bom_agenda.php +++ b/htdocs/bom/bom_agenda.php @@ -196,7 +196,7 @@ if ($object->id > 0) $objthirdparty=$object; $objcon=new stdClass(); - $out=''; + $out='&origin='.$object->element.'&originid='.$object->id; $permok=$user->rights->agenda->myactions->create; if ((! empty($objthirdparty->id) || ! empty($objcon->id)) && $permok) { @@ -227,9 +227,9 @@ if ($object->id > 0) if (! empty($conf->agenda->enabled) && (!empty($user->rights->agenda->myactions->read) || !empty($user->rights->agenda->allactions->read) )) { - $param='&socid='.$socid; - if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage; - if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit; + $param='&id='.$object->id.'&socid='.$socid; + if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.urlencode($contextpage); + if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.urlencode($limit); //print load_fiche_titre($langs->trans("ActionsOnBom"), '', ''); @@ -239,7 +239,7 @@ if ($object->id > 0) $filters['search_agenda_label']=$search_agenda_label; // TODO Replace this with same code than into list.php - //show_actions_done($conf,$langs,$db,$object,null,0,$actioncode, '', $filters, $sortfield, $sortorder); + show_actions_done($conf, $langs, $db, $object, null, 0, $actioncode, '', $filters, $sortfield, $sortorder); } } diff --git a/htdocs/comm/action/card.php b/htdocs/comm/action/card.php index 9381b186582..8e8d21c51b1 100644 --- a/htdocs/comm/action/card.php +++ b/htdocs/comm/action/card.php @@ -238,8 +238,8 @@ if ($action == 'add') $object->fulldayevent = (! empty($fulldayevent)?1:0); $object->location = GETPOST("location"); $object->label = trim(GETPOST('label')); - $object->fk_element = GETPOST("fk_element"); - $object->elementtype = GETPOST("elementtype"); + $object->fk_element = GETPOST("fk_element", 'int'); + $object->elementtype = GETPOST("elementtype", 'alpha'); if (! GETPOST('label')) { if (GETPOST('actioncode') == 'AC_RDV' && $contact->getFullName($langs)) @@ -349,7 +349,7 @@ if ($action == 'add') { $db->begin(); - // On cree l'action + // Creation of action/event $idaction=$object->create($user); if ($idaction > 0) @@ -857,7 +857,7 @@ if ($action == 'create') print '


'; - print '
'; + print '
'; if ($conf->societe->enabled) { diff --git a/htdocs/core/lib/company.lib.php b/htdocs/core/lib/company.lib.php index 99344b12dc1..c3b9bcec2cf 100644 --- a/htdocs/core/lib/company.lib.php +++ b/htdocs/core/lib/company.lib.php @@ -1188,7 +1188,8 @@ function show_actions_todo($conf, $langs, $db, $filterobj, $objcon = '', $noprin } /** - * Show html area with actions (done or not, ignore the name of function) + * Show html area with actions (done or not, ignore the name of function). + * Note: Global parameter $param must be defined. * * @param Conf $conf Object conf * @param Translate $langs Object langs @@ -1208,7 +1209,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon = '', $noprin global $user, $conf; global $form; - global $param; + global $param, $massactionbutton; dol_include_once('/comm/action/class/actioncomm.class.php'); @@ -1251,6 +1252,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon = '', $noprin elseif (is_object($filterobj) && get_class($filterobj) == 'CommandeFournisseur') $sql.= ", o.ref"; elseif (is_object($filterobj) && get_class($filterobj) == 'Product') $sql.= ", o.ref"; elseif (is_object($filterobj) && get_class($filterobj) == 'Ticket') $sql.= ", o.ref"; + elseif (is_object($filterobj) && get_class($filterobj) == 'BOM') $sql.= ", o.ref"; $sql.= " FROM ".MAIN_DB_PREFIX."actioncomm as a"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."user as u on u.rowid = a.fk_user_action"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_actioncomm as c ON a.fk_action = c.id"; @@ -1273,6 +1275,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon = '', $noprin elseif (is_object($filterobj) && get_class($filterobj) == 'CommandeFournisseur') $sql.= ", ".MAIN_DB_PREFIX."commande_fournisseur as o"; elseif (is_object($filterobj) && get_class($filterobj) == 'Product') $sql.= ", ".MAIN_DB_PREFIX."product as o"; elseif (is_object($filterobj) && get_class($filterobj) == 'Ticket') $sql.= ", ".MAIN_DB_PREFIX."ticket as o"; + elseif (is_object($filterobj) && get_class($filterobj) == 'BOM') $sql.= ", ".MAIN_DB_PREFIX."bom_bom as o"; $sql.= " WHERE a.entity IN (".getEntity('agenda').")"; if ($force_filter_contact === false) { @@ -1298,6 +1301,11 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon = '', $noprin $sql.= " AND a.fk_element = o.rowid AND a.elementtype = 'ticket'"; if ($filterobj->id) $sql.= " AND a.fk_element = ".$filterobj->id; } + elseif (is_object($filterobj) && get_class($filterobj) == 'BOM') + { + $sql.= " AND a.fk_element = o.rowid AND a.elementtype = 'bom'"; + if ($filterobj->id) $sql.= " AND a.fk_element = ".$filterobj->id; + } } // Condition on actioncode diff --git a/htdocs/modulebuilder/template/myobject_agenda.php b/htdocs/modulebuilder/template/myobject_agenda.php index 1f693282e5f..183781469ef 100644 --- a/htdocs/modulebuilder/template/myobject_agenda.php +++ b/htdocs/modulebuilder/template/myobject_agenda.php @@ -209,7 +209,7 @@ if ($object->id > 0) $objthirdparty=$object; $objcon=new stdClass(); - $out=''; + $out='&origin='.$object->element.'&originid='.$object->id; $permok=$user->rights->agenda->myactions->create; if ((! empty($objthirdparty->id) || ! empty($objcon->id)) && $permok) { @@ -240,19 +240,19 @@ if ($object->id > 0) if (! empty($conf->agenda->enabled) && (!empty($user->rights->agenda->myactions->read) || !empty($user->rights->agenda->allactions->read) )) { - $param='&socid='.$socid; - if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage; - if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit; + $param='&id='.$object->id.'&socid='.$socid; + if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.urlencode($contextpage); + if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.urlencode($limit); - print load_fiche_titre($langs->trans("ActionsOnMyObject"), '', ''); + //print load_fiche_titre($langs->trans("ActionsOnMyObject"), '', ''); // List of all actions $filters=array(); $filters['search_agenda_label']=$search_agenda_label; // TODO Replace this with same code than into list.php - //show_actions_done($conf,$langs,$db,$object,null,0,$actioncode, '', $filters, $sortfield, $sortorder); + //show_actions_done($conf, $langs, $db, $object, null, 0, $actioncode, '', $filters, $sortfield, $sortorder); } } From a26c86878334b5a29e157ecd8dc83c1aa2c902ac Mon Sep 17 00:00:00 2001 From: Francis Appels Date: Wed, 12 Jun 2019 22:05:10 +0200 Subject: [PATCH 227/828] Fix scrutinizer bugs --- .../barcode/doc/tcpdfbarcode.modules.php | 2 - .../doc/pdf_standard.modules.php | 81 ++++++++++--------- .../printsheet/doc/pdf_tcpdflabel.class.php | 16 ++-- htdocs/expedition/class/expedition.class.php | 6 +- .../fourn/class/fournisseur.product.class.php | 48 +++++------ .../product/class/html.formproduct.class.php | 34 ++++---- 6 files changed, 94 insertions(+), 93 deletions(-) diff --git a/htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php b/htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php index 1b39fe16095..3d2564591da 100644 --- a/htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php +++ b/htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php @@ -116,7 +116,6 @@ class modTcpdfbarcode extends ModeleBarCode $_GET["code"]=$code; $_GET["type"]=$encoding; - $_GET["height"]=$height; $_GET["readable"]=$readable; if ($code) { @@ -166,7 +165,6 @@ class modTcpdfbarcode extends ModeleBarCode $_GET["code"]=$code; $_GET["type"]=$encoding; - $_GET["height"]=$height; $_GET["readable"]=$readable; if ($code) { diff --git a/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php b/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php index 8bb3eaa7804..e0bba62df3b 100644 --- a/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php +++ b/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php @@ -117,13 +117,13 @@ class pdf_standard extends ModeleExpenseReport public $emetteur; - /** - * Constructor - * - * @param DoliDB $db Database handler - */ - public function __construct($db) - { + /** + * Constructor + * + * @param DoliDB $db Database handler + */ + public function __construct($db) + { global $conf, $langs, $mysoc, $user; // Translations @@ -172,12 +172,12 @@ class pdf_standard extends ModeleExpenseReport $this->posxup=145; $this->posxqty=168; $this->postotalttc=178; - // if (empty($conf->projet->enabled)) { - // $this->posxtva-=20; - // $this->posxup-=20; - // $this->posxqty-=20; - // $this->postotalttc-=20; - // } + // if (empty($conf->projet->enabled)) { + // $this->posxtva-=20; + // $this->posxup-=20; + // $this->posxqty-=20; + // $this->postotalttc-=20; + // } if ($this->page_largeur < 210) // To work with US executive format { $this->posxdate-=20; @@ -196,19 +196,19 @@ class pdf_standard extends ModeleExpenseReport } - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps - /** - * Function to build pdf onto disk - * - * @param Object $object Object to generate - * @param Translate $outputlangs Lang output object - * @param string $srctemplatepath Full path of source filename for generator using a template file - * @param int $hidedetails Do not show line details - * @param int $hidedesc Do not show desc - * @param int $hideref Do not show ref - * @return int 1=OK, 0=KO + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + /** + * Function to build pdf onto disk + * + * @param Object $object Object to generate + * @param Translate $outputlangs Lang output object + * @param string $srctemplatepath Full path of source filename for generator using a template file + * @param int $hidedetails Do not show line details + * @param int $hidedesc Do not show desc + * @param int $hideref Do not show ref + * @return int 1=OK, 0=KO */ - public function write_file($object, $outputlangs, $srctemplatepath = '', $hidedetails = 0, $hidedesc = 0, $hideref = 0) + public function write_file($object, $outputlangs, $srctemplatepath = '', $hidedetails = 0, $hidedesc = 0, $hideref = 0) { // phpcs:enable global $user, $langs, $conf, $mysoc, $db, $hookmanager; @@ -501,9 +501,9 @@ class pdf_standard extends ModeleExpenseReport $posy=$this->tablePayments($pdf, $object, $posy_start_of_totals, $outputlangs); } - // Pied de page + // Page footer $this->_pagefoot($pdf, $object, $outputlangs); - if (method_exists($pdf, 'AliasNbPages')) $pdf->AliasNbPage(); + if (method_exists($pdf, 'AliasNbPages')) $pdf->AliasNbPages(); $pdf->Close(); @@ -540,17 +540,17 @@ class pdf_standard extends ModeleExpenseReport } } - /** - * @param TCPDF $pdf Object PDF - * @param Object $object Object to show - * @param int $linenumber line number - * @param int $curY current y position - * @param int $default_font_size default siez of font - * @param Translate $outputlangs Object lang for output - * @param int $hidedetails Hide details (0=no, 1=yes, 2=just special lines) - * @return void - */ - private function printLine(&$pdf, $object, $linenumber, $curY, $default_font_size, $outputlangs, $hidedetails = 0) + /** + * @param TCPDF $pdf Object PDF + * @param Object $object Object to show + * @param int $linenumber line number + * @param int $curY current y position + * @param int $default_font_size default siez of font + * @param Translate $outputlangs Object lang for output + * @param int $hidedetails Hide details (0=no, 1=yes, 2=just special lines) + * @return void + */ + private function printLine(&$pdf, $object, $linenumber, $curY, $default_font_size, $outputlangs, $hidedetails = 0) { global $conf; $pdf->SetFont('', '', $default_font_size - 1); @@ -618,7 +618,7 @@ class pdf_standard extends ModeleExpenseReport } $comment .= $object->lines[$linenumber]->comments; $pdf->writeHTMLCell($this->posxtva-$this->posxcomment-0.8, 4, $this->posxcomment-1, $curY, $comment, 0, 1); - } + } /** * Show top header of page. @@ -846,7 +846,7 @@ class pdf_standard extends ModeleExpenseReport } } } - } + } /** * Show table for lines @@ -1024,6 +1024,7 @@ class pdf_standard extends ModeleExpenseReport if ($resql) { $num = $this->db->num_rows($resql); + $totalpaid = 0; $i=0; while ($i < $num) { $y+=$tab3_height; diff --git a/htdocs/core/modules/printsheet/doc/pdf_tcpdflabel.class.php b/htdocs/core/modules/printsheet/doc/pdf_tcpdflabel.class.php index 7670a623c49..b17403e93e7 100644 --- a/htdocs/core/modules/printsheet/doc/pdf_tcpdflabel.class.php +++ b/htdocs/core/modules/printsheet/doc/pdf_tcpdflabel.class.php @@ -154,7 +154,7 @@ class pdf_tcpdflabel extends CommonStickerGenerator $widthtouse = $maxwidthtouse; $heighttouse = $maxheighttouse; $logoHeight = $heighttouse; - $logoWidth = $heighttouse; + $logoWidth = $widthtouse; //var_dump($this->_Width.'x'.$this->_Height.' with border and scale '.$imgscale.' => max '.$maxwidthtouse.'x'.$maxheighttouse.' => We use '.$widthtouse.'x'.$heighttouse);exit; @@ -175,9 +175,11 @@ class pdf_tcpdflabel extends CommonStickerGenerator } elseif ($textleft!='' && $textright!='') // left and right part { + $logoHeight = $heighttouse/2; + $logoWidth = $widthtouse/2; if (($textleft == '%LOGO%' || $textleft == '%PHOTO%' || $textleft == '%BARCODE%') && !strstr($textright, '%') ) // left part logo/barcode right part text { - if ($textleft == '%LOGO%' && $logo) $pdf->Image($logo, $_PosX+$xleft, $_PosY+$ytop, $widthtouse/2, 0); + if ($textleft == '%LOGO%' && $logo) $pdf->Image($logo, $_PosX+$xleft, $_PosY+$ytop, $logoWidth, $logoHeight); elseif ($code && !empty($encoding)) { $this->writeBarcode($pdf, $code, $encoding, $is2d, $_PosX+$xleft, $_PosY+$ytop, $widthtouse/2, $heighttouse); @@ -187,7 +189,7 @@ class pdf_tcpdflabel extends CommonStickerGenerator } elseif (($textright == '%LOGO%' || $textright == '%PHOTO%' || $textright == '%BARCODE%') && !strstr($textleft, '%')) // right part logo/barcode left part text { - if ($textright == '%LOGO%' && $logo) $pdf->Image($logo, $_PosX+($widthtouse/2), $_PosY+$ytop, $widthtouse/2, 0); + if ($textright == '%LOGO%' && $logo) $pdf->Image($logo, $_PosX+($widthtouse/2), $_PosY+$ytop, $logoWidth, $logoHeight); elseif ($code && !empty($encoding)) { $this->writeBarcode($pdf, $code, $encoding, $is2d, $_PosX+($widthtouse/2), $_PosY+$ytop, $widthtouse/2, $heighttouse); @@ -197,21 +199,21 @@ class pdf_tcpdflabel extends CommonStickerGenerator } elseif ($textleft == '%LOGO%') // left part logo right part text/barcode { - if ($logo) $pdf->Image($logo, $_PosX+$xleft, $_PosY+$ytop, 0, $logoHeight); + if ($logo) $pdf->Image($logo, $_PosX+$xleft, $_PosY+$ytop, $logoWidth, $logoHeight); if ($code && !empty($encoding)) { $this->writeBarcode($pdf, $code, $encoding, $is2d, $_PosX+$xleft+$logoWidth+1, $_PosY+$ytop, $widthtouse-$logoWidth-1, $heighttouse); } else { $pdf->SetXY($_PosX+$xleft+$logoWidth+1, $_PosY+$ytop); - $pdf->MultiCell($widthtouse-$logoWidth1-1, $this->_Line_Height, $outputlangs->convToOutputCharset($textright), 0, 'R'); + $pdf->MultiCell($widthtouse-$logoWidth-1, $this->_Line_Height, $outputlangs->convToOutputCharset($textright), 0, 'R'); } } elseif ($textright == '%LOGO%') // right part logo left part text/barcode { - if ($logo) $pdf->Image($logo, $_PosX+$xleft+$widthtouse-$logoWidth+1, $_PosY+$ytop, 0, $logoHeight); + if ($logo) $pdf->Image($logo, $_PosX+$xleft+$widthtouse-$logoWidth+1, $_PosY+$ytop, $logoWidth, $logoHeight); if ($code && !empty($encoding)) { - $this->writeBarcode($pdf, $code, $encoding, $is2d, $_PosX+$xleft, $_PosY+$ytop, $widthtouse-$logoWidth-1, $heighttouse); + $this->writeBarcode($pdf, $code, $encoding, $is2d, $_Pos%X+$xleft, $_PosY+$ytop, $widthtouse-$logoWidth-1, $heighttouse); } else { $pdf->SetXY($_PosX+$xleft, $_PosY+$ytop); $pdf->MultiCell($widthtouse-$logoWidth-1, $this->_Line_Height, $outputlangs->convToOutputCharset($textleft), 0, 'L'); diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php index a270af13217..1ff48a67107 100644 --- a/htdocs/expedition/class/expedition.class.php +++ b/htdocs/expedition/class/expedition.class.php @@ -1398,6 +1398,8 @@ class Expedition extends CommonObject $this->total_localtax1 = 0; $this->total_localtax2 = 0; + $line = new ExpeditionLigne($this->db); + while ($i < $num) { $obj = $this->db->fetch_object($resql); @@ -2562,8 +2564,6 @@ class ExpeditionLigne extends CommonObjectLine $this->error = 'ErrorMandatoryParametersNotProvided'; return -1; } - // Clean parameters - if (empty($this->entrepot_id)) $this->entrepot_id='null'; $this->db->begin(); @@ -2574,7 +2574,7 @@ class ExpeditionLigne extends CommonObjectLine $sql.= ", qty"; $sql.= ") VALUES ("; $sql.= $this->fk_expedition; - $sql.= ", ".$this->entrepot_id; + $sql.= ", ".(empty($this->entrepot_id) ? 'NULL' : $this->entrepot_id); $sql.= ", ".$this->fk_origin_line; $sql.= ", ".$this->qty; $sql.= ")"; diff --git a/htdocs/fourn/class/fournisseur.product.class.php b/htdocs/fourn/class/fournisseur.product.class.php index 45595471701..f2384b13cf2 100644 --- a/htdocs/fourn/class/fournisseur.product.class.php +++ b/htdocs/fourn/class/fournisseur.product.class.php @@ -247,10 +247,10 @@ class ProductFournisseur extends Product if (empty($supplier_reputation) || $supplier_reputation == -1) $supplier_reputation=''; if ($delivery_time_days != '' && ! is_numeric($delivery_time_days)) $delivery_time_days = ''; if ($price_base_type == 'TTC') - { - $ttx = $tva_tx; - $buyprice = $buyprice/(1+($ttx/100)); - } + { + $ttx = $tva_tx; + $buyprice = $buyprice/(1+($ttx/100)); + } // Multicurrency if ($conf->multicurrency->enabled) { @@ -259,10 +259,10 @@ class ProductFournisseur extends Product if (empty($multicurrency_buyprice)) $multicurrency_buyprice=0; if ($multicurrency_price_base_type == 'TTC') - { - $ttx = $tva_tx; - $multicurrency_buyprice = $multicurrency_buyprice/(1+($ttx/100)); - } + { + $ttx = $tva_tx; + $multicurrency_buyprice = $multicurrency_buyprice/(1+($ttx/100)); + } $multicurrency_buyprice=price2num($multicurrency_buyprice, 'MU'); $multicurrency_unitBuyPrice=price2num($multicurrency_buyprice/$qty, 'MU'); @@ -369,7 +369,7 @@ class ProductFournisseur extends Product // End call triggers if (! $error && empty($conf->global->PRODUCT_PRICE_SUPPLIER_NO_LOG)) { - $result = $this->logPrice($user, $now, $buyprice, $qty, $multicurrency_buyprice, $multicurrency_unitBuyPrice, $multicurrency_tx, $fk_multicurrenc, $multicurrency_code); + $result = $this->logPrice($user, $now, $buyprice, $qty, $multicurrency_buyprice, $multicurrency_unitBuyPrice, $multicurrency_tx, $fk_multicurrency, $multicurrency_code); if ($result < 0) { $error++; } @@ -911,21 +911,21 @@ class ProductFournisseur extends Product return $out; } - /** - * Function used to replace a thirdparty id with another one. - * - * @param DoliDB $db Database handler - * @param int $origin_id Old thirdparty id - * @param int $dest_id New thirdparty id - * @return bool - */ - public static function replaceThirdparty(DoliDB $db, $origin_id, $dest_id) - { - $tables = array( - 'product_fournisseur_price' - ); + /** + * Function used to replace a thirdparty id with another one. + * + * @param DoliDB $db Database handler + * @param int $origin_id Old thirdparty id + * @param int $dest_id New thirdparty id + * @return bool + */ + public static function replaceThirdparty(DoliDB $db, $origin_id, $dest_id) + { + $tables = array( + 'product_fournisseur_price' + ); - return CommonObject::commonReplaceThirdparty($db, $origin_id, $dest_id, $tables); + return CommonObject::commonReplaceThirdparty($db, $origin_id, $dest_id, $tables); } /** @@ -1089,7 +1089,7 @@ class ProductFournisseur extends Product * * @return int < 0 NOK > 0 OK */ - private function logPrice($user, $datec, $buyprice, $qty, $multicurrency_buyprice, $multicurrency_unitBuyPrice, $multicurrency_tx, $fk_multicurrency, $multicurrency_code) + private function logPrice($user, $datec, $buyprice, $qty, $multicurrency_buyprice = null, $multicurrency_unitBuyPrice = null, $multicurrency_tx = null, $fk_multicurrency = null, $multicurrency_code = null) { // Add record into log table $sql = "INSERT INTO " . MAIN_DB_PREFIX . "product_fournisseur_price_log("; diff --git a/htdocs/product/class/html.formproduct.class.php b/htdocs/product/class/html.formproduct.class.php index b4347f82941..a0ebda88cd9 100644 --- a/htdocs/product/class/html.formproduct.class.php +++ b/htdocs/product/class/html.formproduct.class.php @@ -59,12 +59,12 @@ class FormProduct * Load in cache array list of warehouses * If fk_product is not 0, we do not use cache * - * @param int $fk_product Add quantity of stock in label for product with id fk_product. Nothing if 0. - * @param string $batch Add quantity of batch stock in label for product with batch name batch, batch name precedes batch_id. Nothing if ''. - * @param string $status warehouse status filter, following comma separated filter options can be used - * 'warehouseopen' = select products from open warehouses, - * 'warehouseclosed' = select products from closed warehouses, - * 'warehouseinternal' = select products from warehouses for internal correct/transfer only + * @param int $fk_product Add quantity of stock in label for product with id fk_product. Nothing if 0. + * @param string $batch Add quantity of batch stock in label for product with batch name batch, batch name precedes batch_id. Nothing if ''. + * @param string $status warehouse status filter, following comma separated filter options can be used + * 'warehouseopen' = select products from open warehouses, + * 'warehouseclosed' = select products from closed warehouses, + * 'warehouseinternal' = select products from warehouses for internal correct/transfer only * @param boolean $sumStock sum total stock of a warehouse, default true * @param array $exclude warehouses ids to exclude * @return int Nb of loaded lines, 0 if already loaded, <0 if KO @@ -114,9 +114,9 @@ class FormProduct { $sql.= " AND ps.fk_product = '".$fk_product."'"; if (!empty($batch)) - { - $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_batch as pb on pb.fk_product_stock = ps.rowid AND pb.batch = '".$batch."'"; - } + { + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_batch as pb on pb.fk_product_stock = ps.rowid AND pb.batch = '".$batch."'"; + } } $sql.= " WHERE e.entity IN (".getEntity('stock').")"; if (count($warehouseStatus)) @@ -173,9 +173,9 @@ class FormProduct * @param String $final_label full label with all parents, separated by ' >> ' (completed on each call) * @return String full label with all parents, separated by ' >> ' */ - private function get_parent_path($tab, $final_label = '') - { - //phpcs:enable + private function get_parent_path($tab, $final_label = '') + { + //phpcs:enable if(empty($final_label)) $final_label = $tab['label']; if(empty($tab['parent_id'])) return $final_label; @@ -195,9 +195,9 @@ class FormProduct * @param int $selected Id of preselected warehouse ('' for no value, 'ifone'=select value if one value otherwise no value) * @param string $htmlname Name of html select html * @param string $filterstatus warehouse status filter, following comma separated filter options can be used - * 'warehouseopen' = select products from open warehouses, - * 'warehouseclosed' = select products from closed warehouses, - * 'warehouseinternal' = select products from warehouses for internal correct/transfer only + * 'warehouseopen' = select products from open warehouses, + * 'warehouseclosed' = select products from closed warehouses, + * 'warehouseinternal' = select products from warehouses for internal correct/transfer only * @param int $empty 1=Can be empty, 0 if not * @param int $disabled 1=Select is disabled * @param int $fk_product Add quantity of stock in label for product with id fk_product. Nothing if 0. @@ -379,9 +379,9 @@ class FormProduct */ public function selectLotStock($selected = '', $htmlname = 'batch_id', $filterstatus = '', $empty = 0, $disabled = 0, $fk_product = 0, $fk_entrepot = 0, $objectLines = array(), $empty_label = '', $forcecombo = 0, $events = array(), $morecss = 'minwidth200') { - global $langs; + global $conf, $langs; - dol_syslog(get_class($this)."::selectLot $selected, $htmlname, $filterstatus, $empty, $disabled, $fk_product, $fk_entrepot, $empty_label, $showstock, $forcecombo, $morecss", LOG_DEBUG); + dol_syslog(get_class($this)."::selectLot $selected, $htmlname, $filterstatus, $empty, $disabled, $fk_product, $fk_entrepot, $empty_label, $forcecombo, $morecss", LOG_DEBUG); $out=''; $productIdArray = array(); From 3f63be60457e0440c777f54769bd527dd369eb94 Mon Sep 17 00:00:00 2001 From: Francis Appels Date: Wed, 12 Jun 2019 22:10:40 +0200 Subject: [PATCH 228/828] fix typo --- htdocs/core/modules/printsheet/doc/pdf_tcpdflabel.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/modules/printsheet/doc/pdf_tcpdflabel.class.php b/htdocs/core/modules/printsheet/doc/pdf_tcpdflabel.class.php index b17403e93e7..a6d8aa19161 100644 --- a/htdocs/core/modules/printsheet/doc/pdf_tcpdflabel.class.php +++ b/htdocs/core/modules/printsheet/doc/pdf_tcpdflabel.class.php @@ -213,7 +213,7 @@ class pdf_tcpdflabel extends CommonStickerGenerator if ($logo) $pdf->Image($logo, $_PosX+$xleft+$widthtouse-$logoWidth+1, $_PosY+$ytop, $logoWidth, $logoHeight); if ($code && !empty($encoding)) { - $this->writeBarcode($pdf, $code, $encoding, $is2d, $_Pos%X+$xleft, $_PosY+$ytop, $widthtouse-$logoWidth-1, $heighttouse); + $this->writeBarcode($pdf, $code, $encoding, $is2d, $_PosX+$xleft, $_PosY+$ytop, $widthtouse-$logoWidth-1, $heighttouse); } else { $pdf->SetXY($_PosX+$xleft, $_PosY+$ytop); $pdf->MultiCell($widthtouse-$logoWidth-1, $this->_Line_Height, $outputlangs->convToOutputCharset($textleft), 0, 'L'); From 989cf823dd6858936e8fa33660c8c092fecd85f5 Mon Sep 17 00:00:00 2001 From: Francis Appels Date: Wed, 12 Jun 2019 22:55:08 +0200 Subject: [PATCH 229/828] Fix scrutinizer --- htdocs/expedition/class/expedition.class.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php index e1cabb72e31..e4f2ce31acd 100644 --- a/htdocs/expedition/class/expedition.class.php +++ b/htdocs/expedition/class/expedition.class.php @@ -446,7 +446,9 @@ class Expedition extends CommonObject */ public function create_line($entrepot_id, $origin_line_id, $qty, $array_options = 0) { - //phpcs:enable + //phpcs:enable + global $user; + $expeditionline = new ExpeditionLigne($this->db); $expeditionline->fk_expedition = $this->id; $expeditionline->entrepot_id = $entrepot_id; @@ -454,7 +456,7 @@ class Expedition extends CommonObject $expeditionline->qty = $qty; $expeditionline->array_options = $array_options; - if (($lineId = $expeditionline->insert()) < 0) + if (($lineId = $expeditionline->insert($user)) < 0) { $this->errors[]=$expeditionline->error; } @@ -2552,7 +2554,7 @@ class ExpeditionLigne extends CommonObjectLine * @param int $notrigger 1 = disable triggers * @return int <0 if KO, line id >0 if OK */ - public function insert($user = null, $notrigger = 0) + public function insert($user, $notrigger = 0) { global $langs, $conf; From 4cbfb67d63b10f6ac189c809ba6c95c1fbff62ae Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 13 Jun 2019 09:59:10 +0200 Subject: [PATCH 230/828] Update html.formother.class.php --- htdocs/core/class/html.formother.class.php | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/htdocs/core/class/html.formother.class.php b/htdocs/core/class/html.formother.class.php index b3d41d80ffb..6cf3c816a24 100644 --- a/htdocs/core/class/html.formother.class.php +++ b/htdocs/core/class/html.formother.class.php @@ -374,7 +374,6 @@ class FormOther */ function select_salesrepresentatives($selected, $htmlname, $user, $showstatus=0, $showempty=1, $morecss='') { - // phpcs:enable global $conf, $langs; $langs->load('users'); @@ -395,7 +394,7 @@ class FormOther if ($showempty) $out.=''; // Get list of users allowed to be viewed - $sql_usr = "SELECT DISTINCT u.rowid, u.lastname, u.firstname, u.statut, u.login"; + $sql_usr = "SELECT u.rowid, u.lastname, u.firstname, u.statut, u.login"; $sql_usr.= " FROM ".MAIN_DB_PREFIX."user as u"; if (! empty($conf->global->MULTICOMPANY_TRANSVERSE_MODE)) @@ -403,10 +402,9 @@ class FormOther if (! empty($user->admin) && empty($user->entity) && $conf->entity == 1) { $sql_usr.= " WHERE u.entity IS NOT NULL"; // Show all users } else { - $sql_usr.= ",".MAIN_DB_PREFIX."usergroup_user as ug"; - $sql_usr.= " WHERE ((ug.fk_user = u.rowid"; - $sql_usr.= " AND ug.entity IN (".getEntity('user')."))"; - $sql_usr.= " OR u.entity = 0)"; // Show always superadmin + $sql_usr.= ", + $sql_usr.= " WHERE EXISTS (SELECT ug.fk_user FROM ".MAIN_DB_PREFIX."usergroup_user as ug WHERE u.rowid = ug.fk_user AND ug.entity IN (".getEntity('user')."))"; + $sql_usr.= " OR u.entity = 0"; // Show always superadmin } } else @@ -428,7 +426,7 @@ class FormOther if (! empty($user->admin) && empty($user->entity) && $conf->entity == 1) { $sql_usr.= " WHERE u2.entity IS NOT NULL"; // Show all users } else { - $sql_usr.= " WHERE EXISTS (SELECT ug2.fk_user FROM ".MAIN_DB_PREFIX."usergroup_user as ug2 WHERE u2.rowid = ug2.fk_user AND ug2.entity IN (".getEntity('user').") )"; + $sql_usr.= " WHERE EXISTS (SELECT ug2.fk_user FROM ".MAIN_DB_PREFIX."usergroup_user as ug2 WHERE u2.rowid = ug2.fk_user AND ug2.entity IN (".getEntity('user')."))"; } } else From 2bc821d9003d80ed7309375d910c55917be9fd1c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 13 Jun 2019 10:08:35 +0200 Subject: [PATCH 231/828] Try to keep proportions of logo --- htdocs/core/modules/printsheet/doc/pdf_tcpdflabel.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/modules/printsheet/doc/pdf_tcpdflabel.class.php b/htdocs/core/modules/printsheet/doc/pdf_tcpdflabel.class.php index a6d8aa19161..4384bd49cf6 100644 --- a/htdocs/core/modules/printsheet/doc/pdf_tcpdflabel.class.php +++ b/htdocs/core/modules/printsheet/doc/pdf_tcpdflabel.class.php @@ -179,7 +179,7 @@ class pdf_tcpdflabel extends CommonStickerGenerator $logoWidth = $widthtouse/2; if (($textleft == '%LOGO%' || $textleft == '%PHOTO%' || $textleft == '%BARCODE%') && !strstr($textright, '%') ) // left part logo/barcode right part text { - if ($textleft == '%LOGO%' && $logo) $pdf->Image($logo, $_PosX+$xleft, $_PosY+$ytop, $logoWidth, $logoHeight); + if ($textleft == '%LOGO%' && $logo) $pdf->Image($logo, $_PosX+$xleft, $_PosY+$ytop, $logoWidth, 0); elseif ($code && !empty($encoding)) { $this->writeBarcode($pdf, $code, $encoding, $is2d, $_PosX+$xleft, $_PosY+$ytop, $widthtouse/2, $heighttouse); @@ -189,7 +189,7 @@ class pdf_tcpdflabel extends CommonStickerGenerator } elseif (($textright == '%LOGO%' || $textright == '%PHOTO%' || $textright == '%BARCODE%') && !strstr($textleft, '%')) // right part logo/barcode left part text { - if ($textright == '%LOGO%' && $logo) $pdf->Image($logo, $_PosX+($widthtouse/2), $_PosY+$ytop, $logoWidth, $logoHeight); + if ($textright == '%LOGO%' && $logo) $pdf->Image($logo, $_PosX+($widthtouse/2), $_PosY+$ytop, $logoWidth, 0); elseif ($code && !empty($encoding)) { $this->writeBarcode($pdf, $code, $encoding, $is2d, $_PosX+($widthtouse/2), $_PosY+$ytop, $widthtouse/2, $heighttouse); From ab9742f4df2ced56a1513289bd1d99829cc3114d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 13 Jun 2019 10:09:20 +0200 Subject: [PATCH 232/828] Try to keep proportion of logo --- htdocs/core/modules/printsheet/doc/pdf_tcpdflabel.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/modules/printsheet/doc/pdf_tcpdflabel.class.php b/htdocs/core/modules/printsheet/doc/pdf_tcpdflabel.class.php index 4384bd49cf6..f6bb3bc46a7 100644 --- a/htdocs/core/modules/printsheet/doc/pdf_tcpdflabel.class.php +++ b/htdocs/core/modules/printsheet/doc/pdf_tcpdflabel.class.php @@ -199,7 +199,7 @@ class pdf_tcpdflabel extends CommonStickerGenerator } elseif ($textleft == '%LOGO%') // left part logo right part text/barcode { - if ($logo) $pdf->Image($logo, $_PosX+$xleft, $_PosY+$ytop, $logoWidth, $logoHeight); + if ($logo) $pdf->Image($logo, $_PosX+$xleft, $_PosY+$ytop, 0, $logoHeight); if ($code && !empty($encoding)) { $this->writeBarcode($pdf, $code, $encoding, $is2d, $_PosX+$xleft+$logoWidth+1, $_PosY+$ytop, $widthtouse-$logoWidth-1, $heighttouse); @@ -210,7 +210,7 @@ class pdf_tcpdflabel extends CommonStickerGenerator } elseif ($textright == '%LOGO%') // right part logo left part text/barcode { - if ($logo) $pdf->Image($logo, $_PosX+$xleft+$widthtouse-$logoWidth+1, $_PosY+$ytop, $logoWidth, $logoHeight); + if ($logo) $pdf->Image($logo, $_PosX+$xleft+$widthtouse-$logoWidth+1, $_PosY+$ytop, 0, $logoHeight); if ($code && !empty($encoding)) { $this->writeBarcode($pdf, $code, $encoding, $is2d, $_PosX+$xleft, $_PosY+$ytop, $widthtouse-$logoWidth-1, $heighttouse); From 28218a00b384a3c3071c067500cdc4e877d7e2f9 Mon Sep 17 00:00:00 2001 From: gauthier Date: Thu, 13 Jun 2019 11:01:12 +0200 Subject: [PATCH 233/828] FIX : syntax error --- htdocs/core/class/html.formother.class.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/core/class/html.formother.class.php b/htdocs/core/class/html.formother.class.php index 6cf3c816a24..79aa4cc8c77 100644 --- a/htdocs/core/class/html.formother.class.php +++ b/htdocs/core/class/html.formother.class.php @@ -402,7 +402,6 @@ class FormOther if (! empty($user->admin) && empty($user->entity) && $conf->entity == 1) { $sql_usr.= " WHERE u.entity IS NOT NULL"; // Show all users } else { - $sql_usr.= ", $sql_usr.= " WHERE EXISTS (SELECT ug.fk_user FROM ".MAIN_DB_PREFIX."usergroup_user as ug WHERE u.rowid = ug.fk_user AND ug.entity IN (".getEntity('user')."))"; $sql_usr.= " OR u.entity = 0"; // Show always superadmin } From 04a085e4f7795a11440d13a3ab95f62296f8ebfb Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 13 Jun 2019 11:07:08 +0200 Subject: [PATCH 234/828] Update doc --- COPYRIGHT | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/COPYRIGHT b/COPYRIGHT index 4ce5efff40b..ea0c6453486 100644 --- a/COPYRIGHT +++ b/COPYRIGHT @@ -14,15 +14,14 @@ Component Version License GPL Compatible PHP libraries: AdoDb-Date 0.36 Modified BSD License Yes Date convertion (not into rpm package) CKEditor 4.11.4 LGPL-2.1+ Yes Editor WYSIWYG -PHPDebugBar 1.15.0 MIT License Yes Used only by the module "debugbar" for developers EvalMath 1.0 BSD Yes Safe math expressions evaluation Escpos-php ? MIT License Yes Thermal receipt printer library, for use with ESC/POS compatible printers GeoIP 1.4 LGPL-2.1+ Yes Sample code to make geoip convert (not into deb package) Mobiledetect 2.8.83 MIT License Yes Detect mobile devices browsers NuSoap 0.9.5 LGPL 2.1+ Yes Library to develop SOAP Web services (not into rpm and deb package) PEAR Mail_MIME 1.8.9 BSD Yes NuSoap dependency -odtPHP 1.0.1 GPL-2+ Yes Library to build/edit ODT files ParseDown 1.6 MIT License Yes Markdown parser +PHPDebugBar 1.15.0 MIT License Yes Used only by the module "debugbar" for developers PHPExcel 1.8.1 LGPL-2.1+ Yes Read/Write XLS files, read ODS files PHPSpreadSheet ? LGPL-2.1+ Yes Read/Write XLS files, read ODS files php-iban 1.4.7 LGPL-3+ Yes Parse and validate IBAN (and IIBAN) bank account information in PHP From 4b26702516bec66953ae9187c48ad51e515473a1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 13 Jun 2019 11:07:38 +0200 Subject: [PATCH 235/828] code comment --- htdocs/core/class/html.formfile.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php index b729ad51fc5..419862229e1 100644 --- a/htdocs/core/class/html.formfile.class.php +++ b/htdocs/core/class/html.formfile.class.php @@ -1040,9 +1040,9 @@ class FormFile * @param string $relativepath Relative path of docs (autodefined if not provided), relative to module dir, not to MAIN_DATA_ROOT. * @param int $permonobject Permission on object (so permission to delete or crop document) * @param int $useinecm Change output for use in ecm module: - * 0 or 6: Add a preview column. Show also a rename and crop button. + * 0 or 6: Add a preview column. Show also a rename button. Show also a crop button (if modulepart into a specific list) * 1: Add link to edit ECM entry - * 2: Add rename and crop file + * 2: Add rename and crop link * 4: Add a preview column * 5: Add link to edit ECM entry and Add a preview column * @param string $textifempty Text to show if filearray is empty ('NoFileFound' if not defined) From 319bc7ec8a1f23908063a80e50de989f6d392a72 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 13 Jun 2019 12:12:20 +0200 Subject: [PATCH 236/828] Fix syntax error --- htdocs/core/class/html.formother.class.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/core/class/html.formother.class.php b/htdocs/core/class/html.formother.class.php index 6cf3c816a24..79aa4cc8c77 100644 --- a/htdocs/core/class/html.formother.class.php +++ b/htdocs/core/class/html.formother.class.php @@ -402,7 +402,6 @@ class FormOther if (! empty($user->admin) && empty($user->entity) && $conf->entity == 1) { $sql_usr.= " WHERE u.entity IS NOT NULL"; // Show all users } else { - $sql_usr.= ", $sql_usr.= " WHERE EXISTS (SELECT ug.fk_user FROM ".MAIN_DB_PREFIX."usergroup_user as ug WHERE u.rowid = ug.fk_user AND ug.entity IN (".getEntity('user')."))"; $sql_usr.= " OR u.entity = 0"; // Show always superadmin } From 357c5244f7daa8a3a7662676364221b604798280 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 13 Jun 2019 13:26:35 +0200 Subject: [PATCH 237/828] Fix phpcs --- htdocs/core/actions_massactions.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php index 8192f85f44f..9017ece676e 100644 --- a/htdocs/core/actions_massactions.inc.php +++ b/htdocs/core/actions_massactions.inc.php @@ -281,7 +281,7 @@ if (! $error && $massaction == 'confirm_presend') // For supplier invoices, we use the file provided by supplier, not the one we generate if ($objectobj->element == 'invoice_supplier') { - $fileparams = dol_most_recent_file($uploaddir . '/' . get_exdir($objectobj->id,2,0,0,$objectobj,$objectobj->element).$objectobj->ref, preg_quote($objectobj->ref,'/').'([^\-])+'); + $fileparams = dol_most_recent_file($uploaddir.'/'.get_exdir($objectobj->id, 2, 0, 0, $objectobj, $objectobj->element).$objectobj->ref, preg_quote($objectobj->ref, '/').'([^\-])+'); $file = $fileparams['fullname']; } From 53be6492b84043f49ea39fc5e0cb5a2624f76728 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 13 Jun 2019 14:20:13 +0200 Subject: [PATCH 238/828] Finish module BOM --- htdocs/bom/bom_card.php | 29 +++ htdocs/bom/class/bom.class.php | 10 +- htdocs/bom/tpl/objectline_create.tpl.php | 17 +- htdocs/bom/tpl/objectline_edit.tpl.php | 244 +++-------------------- 4 files changed, 70 insertions(+), 230 deletions(-) diff --git a/htdocs/bom/bom_card.php b/htdocs/bom/bom_card.php index 15a7385f891..c2ed2ca6705 100644 --- a/htdocs/bom/bom_card.php +++ b/htdocs/bom/bom_card.php @@ -145,6 +145,35 @@ if (empty($reshook)) $action = ''; } } + + // Add line + if ($action == 'updateline' && $user->rights->bom->write) + { + $langs->load('errors'); + $error = 0; + + // Set if we used free entry or predefined product + $qty=GETPOST('qty', 'int'); + $efficiency=GETPOST('efficiency', 'int'); + + if ($qty == '') { + setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Qty')), null, 'errors'); + $error++; + } + + $bomline = new BOMLine($db); + $bomline->fetch($lineid); + $bomline->qty = $qty; + $bomline->efficiency = $efficiency; + + $result = $bomline->update($user); + if ($result <= 0) + { + setEventMessages($bomline->error, $bomline->errors, 'errors'); + $action = ''; + } + } + } diff --git a/htdocs/bom/class/bom.class.php b/htdocs/bom/class/bom.class.php index e7083e767a2..731136fb7f4 100644 --- a/htdocs/bom/class/bom.class.php +++ b/htdocs/bom/class/bom.class.php @@ -203,6 +203,8 @@ class BOM extends CommonObject */ public function create(User $user, $notrigger = false) { + if ($this->efficiency < 0 || $this->efficiency > 1) $this->efficiency = 1; + return $this->createCommon($user, $notrigger); } @@ -411,6 +413,8 @@ class BOM extends CommonObject */ public function update(User $user, $notrigger = false) { + if ($this->efficiency < 0 || $this->efficiency > 1) $this->efficiency = 1; + return $this->updateCommon($user, $notrigger); } @@ -1100,6 +1104,8 @@ class BOMLine extends CommonObject */ public function create(User $user, $notrigger = false) { + if ($this->efficiency < 0 || $this->efficiency > 1) $this->efficiency = 1; + return $this->createCommon($user, $notrigger); } @@ -1201,6 +1207,8 @@ class BOMLine extends CommonObject */ public function update(User $user, $notrigger = false) { + if ($this->efficiency < 0 || $this->efficiency > 1) $this->efficiency = 1; + return $this->updateCommon($user, $notrigger); } @@ -1230,8 +1238,6 @@ class BOMLine extends CommonObject public function getNomUrl($withpicto = 0, $option = '', $notooltip = 0, $morecss = '', $save_lastsearch_value = -1) { global $db, $conf, $langs, $hookmanager; - global $dolibarr_main_authentication, $dolibarr_main_demo; - global $menumanager; if (! empty($conf->dol_no_mouse_hover)) $notooltip=1; // Force disable tooltips diff --git a/htdocs/bom/tpl/objectline_create.tpl.php b/htdocs/bom/tpl/objectline_create.tpl.php index 0101024df40..e266c142480 100644 --- a/htdocs/bom/tpl/objectline_create.tpl.php +++ b/htdocs/bom/tpl/objectline_create.tpl.php @@ -26,10 +26,7 @@ * $object (invoice, order, ...) * $conf * $langs - * $dateSelector * $forceall (0 by default, 1 for supplier invoices/orders) - * $senderissupplier (0 by default, 1 or 2 for supplier invoices/orders) - * $inputalsopricewithtax (0 by default, 1 to also show column with unit price including tax) */ // Protection to avoid direct call of template @@ -39,20 +36,13 @@ if (empty($object) || ! is_object($object)) { } -if (! isset($dateSelector)) global $dateSelector; // Take global var only if not already defined into function calling (for example formAddObjectLine) -global $forceall, $forcetoshowtitlelines, $senderissupplier, $inputalsopricewithtax; +global $forceall, $forcetoshowtitlelines; -if (! isset($dateSelector)) $dateSelector=1; // For backward compatibility -elseif (empty($dateSelector)) $dateSelector=0; if (empty($forceall)) $forceall=0; -if (empty($senderissupplier)) $senderissupplier=0; -if (empty($inputalsopricewithtax)) $inputalsopricewithtax=0; // Define colspan for the button 'Add' $colspan = 3; // Columns: total ht + col edit + col delete -if (!empty($conf->multicurrency->enabled) && $this->multicurrency_code != $conf->currency) $colspan++;//Add column for Total (currency) if required -if (in_array($object->element, array('propal','commande','order','facture','facturerec','invoice','supplier_proposal','order_supplier','invoice_supplier'))) $colspan++; // With this, there is a column move button //print $object->element; // Lines for extrafield @@ -135,11 +125,6 @@ if ($nolinesbefore) { print $form->selectUnits($line->fk_unit, "units"); print ''; } - $remise_percent = $buyer->remise_percent; - if($object->element == 'supplier_proposal' || $object->element == 'order_supplier' || $object->element == 'invoice_supplier') - { - $remise_percent = $seller->remise_supplier_percent; - } $coldisplay++; ?> diff --git a/htdocs/bom/tpl/objectline_edit.tpl.php b/htdocs/bom/tpl/objectline_edit.tpl.php index 3763b771854..2c099ab89f8 100644 --- a/htdocs/bom/tpl/objectline_edit.tpl.php +++ b/htdocs/bom/tpl/objectline_edit.tpl.php @@ -39,18 +39,16 @@ if (empty($object) || ! is_object($object)) } -global $forceall, $senderissupplier, $inputalsopricewithtax; -if (empty($dateSelector)) $dateSelector=0; +global $forceall; + if (empty($forceall)) $forceall=0; -if (empty($senderissupplier)) $senderissupplier=0; -if (empty($inputalsopricewithtax)) $inputalsopricewithtax=0; // Define colspan for the button 'Add' -$colspan = 3; // Col total ht + col edit + col delete -if (! empty($inputalsopricewithtax)) $colspan++; // We add 1 if col total ttc -if (in_array($object->element, array('propal','supplier_proposal','facture','facturerec','invoice','commande','order','order_supplier','invoice_supplier'))) $colspan++; // With this, there is a column move button -if (!empty($conf->multicurrency->enabled) && $this->multicurrency_code != $conf->currency) $colspan+=2; +$colspan = 3; // Columns: total ht + col edit + col delete + +// Lines for extrafield +$objectline = new BOMLine($this->db); ?> @@ -59,7 +57,9 @@ if (!empty($conf->multicurrency->enabled) && $this->multicurrency_code != $conf- $coldisplay=0; ?> - global->MAIN_VIEW_LINE_NUMBER)) { ?> + global->MAIN_VIEW_LINE_NUMBER)) { ?> special_code; ?>"> - fk_product > 0) { ?> - - fk_parent_line > 0) echo img_picto('', 'rightarrow'); - ?> - - product_type==1) echo img_object($langs->trans('ShowService'), 'service'); - else print img_object($langs->trans('ShowProduct'), 'product'); - echo ' '.$line->ref; - ?> - - product_label); - ?> - -

- - - fk_product > 0) { + $tmpproduct = new Product($object->db); + $tmpproduct->fetch($line->fk_product); + print $tmpproduct->getNomUrl(1); + } + if (is_object($hookmanager)) { $fk_parent_line = (GETPOST('fk_parent_line') ? GETPOST('fk_parent_line') : $line->fk_parent_line); @@ -106,220 +93,53 @@ $coldisplay=0; element == 'supplier_proposal' || $object->element == 'order_supplier' || $object->element == 'invoice_supplier') // We must have same test in printObjectLines + /*if ($object->element == 'supplier_proposal' || $object->element == 'order_supplier' || $object->element == 'invoice_supplier') // We must have same test in printObjectLines { $coldisplay++; ?> fk_prev_id == null) { - print ''; - } else { - print ''; - } - - $coldisplay++; - print ''; - - if (!empty($conf->multicurrency->enabled) && $this->multicurrency_code != $conf->currency) { - $coldisplay++; - print ''; - } - - if ($inputalsopricewithtax) - { - $coldisplay++; - print ''; - } ?> - global->PRODUCT_USE_UNITS) { $coldisplay++; - print ''; } + + $coldisplay++; ?> + + - info_bits & 2) != 2) { - print 'fk_prev_id != null ) print ' readonly'; - print '>%'; - } else { ?> -   - - - - - showOptionals($extrafieldsline, 'edit', array('style'=>$bc[$var],'colspan'=>$coldisplay), '', '', empty($conf->global->MAIN_EXTRAFIELDS_IN_ONE_TD)?0:1); +if (is_object($objectline)) { + print $objectline->showOptionals($extrafieldsline, 'edit', array('style'=>$bcnd[$var], 'colspan'=>$coldisplay), '', '', empty($conf->global->MAIN_EXTRAFIELDS_IN_ONE_TD)?0:1); } ?> -service->enabled) && $line->product_type == 1 && $dateSelector) { ?> - - global->MAIN_VIEW_LINE_NUMBER)) { ?> - - - - - - - - From 787e1319b9744ea9d5f8950827e3a7e699fe2ca3 Mon Sep 17 00:00:00 2001 From: "atm-florian.m" Date: Thu, 13 Jun 2019 16:21:07 +0200 Subject: [PATCH 239/828] FIX: in edit mode, dictionary inputs do not escape the string inside the 'value' attribute, causing errors if there are any double quotes --- htdocs/admin/dict.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/admin/dict.php b/htdocs/admin/dict.php index e1e0c0d419e..07b8a9d7119 100644 --- a/htdocs/admin/dict.php +++ b/htdocs/admin/dict.php @@ -1976,7 +1976,7 @@ function fieldList($fieldlist, $obj='', $tabname='', $context='') } if (! $transfound) { - print ''; + print ''; } print ''; } From b13b089c58b562a407ef93fec3b0e2192e675ac0 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Thu, 13 Jun 2019 20:52:52 +0200 Subject: [PATCH 240/828] Fix measuring_units_string display function --- htdocs/core/lib/product.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/product.lib.php b/htdocs/core/lib/product.lib.php index c8640f9928f..2bb75967727 100644 --- a/htdocs/core/lib/product.lib.php +++ b/htdocs/core/lib/product.lib.php @@ -494,7 +494,7 @@ function measuring_units_string($unit, $measuring_style = '') require_once DOL_DOCUMENT_ROOT.'/core/class/cunits.class.php'; $measuringUnits= new CUnits($db); $result = $measuringUnits->fetchAll('', '', 0, 0, array( - 't.code' => $unit, + 't.rowid => $unit, 't.unit_type' => $measuring_style, 't.active' => 1 )); From a30f029bbfef5c2c054e2c7513c35d860ec53cba Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Thu, 13 Jun 2019 20:53:24 +0200 Subject: [PATCH 241/828] Update product.lib.php --- htdocs/core/lib/product.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/product.lib.php b/htdocs/core/lib/product.lib.php index 2bb75967727..b6f8983f284 100644 --- a/htdocs/core/lib/product.lib.php +++ b/htdocs/core/lib/product.lib.php @@ -494,7 +494,7 @@ function measuring_units_string($unit, $measuring_style = '') require_once DOL_DOCUMENT_ROOT.'/core/class/cunits.class.php'; $measuringUnits= new CUnits($db); $result = $measuringUnits->fetchAll('', '', 0, 0, array( - 't.rowid => $unit, + 't.rowid' => $unit, 't.unit_type' => $measuring_style, 't.active' => 1 )); From 0ef9a8843a83ff8e4a8f2ed0d07208d9b0db6ddd Mon Sep 17 00:00:00 2001 From: ATM john Date: Thu, 13 Jun 2019 21:57:30 +0200 Subject: [PATCH 242/828] Fix empty test --- htdocs/core/lib/functions.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 19b39fd776d..d726c84e2ae 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -8123,7 +8123,7 @@ function dolGetButtonAction($label, $html = '', $actionType = 'default', $url = $attr['href'] = ''; } - if(empty($id)){ + if(!empty($id)){ $attr['id'] = $id; } From ff1adb39349c505ee5e692294d1eda2c0b21b0b5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 13 Jun 2019 22:11:25 +0200 Subject: [PATCH 243/828] Fix dead code --- htdocs/fourn/class/fournisseur.facture.class.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php index 883fe383de7..f8e9dbcdbd1 100644 --- a/htdocs/fourn/class/fournisseur.facture.class.php +++ b/htdocs/fourn/class/fournisseur.facture.class.php @@ -205,7 +205,7 @@ class FactureFournisseur extends CommonInvoice public $multicurrency_total_ht; public $multicurrency_total_tva; public $multicurrency_total_ttc; - //! id of source invoice if replacement invoice or credit note + //! id of source var_dump($$this);invoice if replacement invoice or credit note /** * @var int ID */ @@ -312,7 +312,6 @@ class FactureFournisseur extends CommonInvoice $this->db->begin(); if (! $remise) $remise = 0 ; - $totalht = ($amount - $remise); $sql = "INSERT INTO ".MAIN_DB_PREFIX."facture_fourn ("; $sql.= "ref"; @@ -424,7 +423,7 @@ class FactureFournisseur extends CommonInvoice if (count($this->lines) && is_object($this->lines[0])) // If this->lines is array of InvoiceLines (preferred mode) { - dol_syslog("There is ".count($this->lines)." lines that are invoice lines objects"); + dol_syslog("There is ".count($this->lines)." lines that are invoice lines objects"); foreach ($this->lines as $i => $val) { $sql = 'INSERT INTO '.MAIN_DB_PREFIX.'facture_fourn_det (fk_facture_fourn, special_code)'; From e7d81a68f063b15df8e9f4e4104a6a9e566c3329 Mon Sep 17 00:00:00 2001 From: ATM john Date: Thu, 13 Jun 2019 22:11:47 +0200 Subject: [PATCH 244/828] Fix Override Attribute --- htdocs/core/lib/functions.lib.php | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index d726c84e2ae..31442cd7364 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -8130,7 +8130,15 @@ function dolGetButtonAction($label, $html = '', $actionType = 'default', $url = // Override attr if(!empty($params['attr']) && is_array($params['attr'])){ foreach($params['attr'] as $key => $value){ - $attr[$key] = $value; + if($key == 'class'){ + $attr['class'].= ' '.$value; + } + elseif($key == 'classOverride'){ + $attr['class'] = $value; + } + else{ + $attr[$key] = $value; + } } } @@ -8202,10 +8210,10 @@ function dolGetButtonTitle($label, $helpText = '', $iconClass = 'fa fa-file', $u $attr['href'] = ''; - if($status == -1){ // Not enough permissions + if($status == -1){ // disable $attr['title'] = dol_escape_htmltag($langs->transnoentitiesnoconv("FeatureDisabled")); } - elseif($status == 0){ // disable + elseif($status == 0){ // Not enough permissions $attr['title'] = dol_escape_htmltag($langs->transnoentitiesnoconv("NotEnoughPermissions")); } } From e8b139d1c64a647434f7dd6c7a6e39e820224b41 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 13 Jun 2019 22:48:31 +0200 Subject: [PATCH 245/828] Fix repeated logs and fetch --- htdocs/comm/action/class/actioncomm.class.php | 13 ++++--- htdocs/core/class/discount.class.php | 4 +- htdocs/core/class/html.formactions.class.php | 39 +++++++++++-------- .../modules/facture/mod_facture_terre.php | 4 +- 4 files changed, 34 insertions(+), 26 deletions(-) diff --git a/htdocs/comm/action/class/actioncomm.class.php b/htdocs/comm/action/class/actioncomm.class.php index 905b562ab5d..6e4e3fb941b 100644 --- a/htdocs/comm/action/class/actioncomm.class.php +++ b/htdocs/comm/action/class/actioncomm.class.php @@ -120,7 +120,7 @@ class ActionComm extends CommonObject * Object user that create action * @var User * @deprecated - * @see authorid + * @see $authorid */ public $author; @@ -128,7 +128,7 @@ class ActionComm extends CommonObject * Object user that modified action * @var User * @deprecated - * @see usermodid + * @see $usermodid */ public $usermod; @@ -1010,7 +1010,7 @@ class ActionComm extends CommonObject /** * Load all objects with filters. - * WARNING: This make a fetch on all records instead of making one request with a join. + * @TODO WARNING: This make a fetch on all records instead of making one request with a join. * * @param DoliDb $db Database handler * @param int $socid Filter by thirdparty @@ -1020,7 +1020,7 @@ class ActionComm extends CommonObject * @param string $sortfield Sort on this field * @param string $sortorder ASC or DESC * @param string $limit Limit number of answers - * @return array or string Error string if KO, array with actions if OK + * @return array|string Error string if KO, array with actions if OK */ public static function getActions($db, $socid = 0, $fk_element = 0, $elementtype = '', $filter = '', $sortfield = 'a.datep', $sortorder = 'DESC', $limit = 0) { @@ -1028,6 +1028,8 @@ class ActionComm extends CommonObject $resarray=array(); + dol_syslog(get_class()."::getActions", LOG_DEBUG); + $sql = "SELECT a.id"; $sql.= " FROM ".MAIN_DB_PREFIX."actioncomm as a"; $sql.= " WHERE a.entity IN (".getEntity('agenda').")"; @@ -1041,7 +1043,6 @@ class ActionComm extends CommonObject if ($sortorder && $sortfield) $sql.=$db->order($sortfield, $sortorder); $sql.=$db->plimit($limit, 0); - dol_syslog(get_class()."::getActions", LOG_DEBUG); $resql=$db->query($sql); if ($resql) { @@ -1285,7 +1286,7 @@ class ActionComm extends CommonObject if (! empty($conf->dol_no_mouse_hover)) $notooltip=1; // Force disable tooltips - if ((!$user->rights->agenda->allactions->read && $this->author->id != $user->id) || (!$user->rights->agenda->myactions->read && $this->author->id == $user->id)) + if ((!$user->rights->agenda->allactions->read && $this->authorid != $user->id) || (!$user->rights->agenda->myactions->read && $this->authorid == $user->id)) $option = 'nolink'; $label = $this->label; diff --git a/htdocs/core/class/discount.class.php b/htdocs/core/class/discount.class.php index 93b51d0ddf8..8e66b29a3f8 100644 --- a/htdocs/core/class/discount.class.php +++ b/htdocs/core/class/discount.class.php @@ -497,8 +497,9 @@ class DiscountAbsolute { global $conf; + dol_syslog(get_class($this)."::getAvailableDiscounts discount_type=".$discount_type, LOG_DEBUG); + $sql = "SELECT SUM(rc.amount_ttc) as amount"; - //$sql = "SELECT rc.amount_ttc as amount"; $sql.= " FROM ".MAIN_DB_PREFIX."societe_remise_except as rc"; $sql.= " WHERE rc.entity = " . $conf->entity; $sql.= " AND rc.discount_type=".intval($discount_type); @@ -512,7 +513,6 @@ class DiscountAbsolute if ($filter) $sql.=' AND ('.$filter.')'; if ($maxvalue) $sql.=' AND rc.amount_ttc <= '.price2num($maxvalue); - dol_syslog(get_class($this)."::getAvailableDiscounts", LOG_DEBUG); $resql=$this->db->query($sql); if ($resql) { diff --git a/htdocs/core/class/html.formactions.class.php b/htdocs/core/class/html.formactions.class.php index 31353ea3d10..bb1cf5fbfe7 100644 --- a/htdocs/core/class/html.formactions.class.php +++ b/htdocs/core/class/html.formactions.class.php @@ -213,24 +213,22 @@ class FormActions $page=0; $param=''; - $total = 0; - print '
'; print '
' . $form->load_tva('tva_tx', $line->tva_tx.($line->vat_src_code?(' ('.$line->vat_src_code.')'):''), $seller, $buyer, 0, $line->info_bits, $line->product_type, false, 1) . '%fk_prev_id != null) print ' readonly'; - print '>fk_prev_id != null) print ' readonly'; - print '> + info_bits & 2) != 2) { // I comment this because it shows info even when not required // for example always visible on invoice but must be visible only if stock module on and stock decrease option is on invoice validation and status is not validated // must also not be output for most entities (proposal, intervention, ...) //if($line->qty > $line->stock) print img_picto($langs->trans("StockTooLow"),"warning", 'style="vertical-align: bottom;"')." "; - print 'fk_prev_id != null ) print ' readonly'; - print '>'; - } else { ?> -   - + print ''; + } + ?> '; + print ''; print $form->selectUnits($line->fk_unit, "units"); print ' + $coldisplay+=$colspan; + ?> + ">
">
trans('ServiceLimitedDuration').' '.$langs->trans('From').' '; ?> - global->MAIN_USE_HOURMIN_IN_DATE_RANGE)?$conf->global->MAIN_USE_HOURMIN_IN_DATE_RANGE:''); - print $form->selectDate($line->date_start, 'date_start', $hourmin, $hourmin, $line->date_start?0:1, "updateline", 1, 0); - print ' '.$langs->trans('to').' '; - print $form->selectDate($line->date_end, 'date_end', $hourmin, $hourmin, $line->date_end?0:1, "updateline", 1, 0); - print '' - ?> -
'; print ''; - print getTitleFieldOfList('Ref', 0, $_SERVER["PHP_SELF"], '', $page, $param, '', $sortfield, $sortorder, '', 1); - print getTitleFieldOfList('By', 0, $_SERVER["PHP_SELF"], '', $page, $param, '', $sortfield, $sortorder, '', 1); - print getTitleFieldOfList('Type', 0, $_SERVER["PHP_SELF"], '', $page, $param, '', $sortfield, $sortorder, '', 1); + print getTitleFieldOfList('Ref', 0, $_SERVER["PHP_SELF"], '', $page, $param, '', $sortfield, $sortorder, '', 1); + print getTitleFieldOfList('By', 0, $_SERVER["PHP_SELF"], '', $page, $param, '', $sortfield, $sortorder, '', 1); + print getTitleFieldOfList('Type', 0, $_SERVER["PHP_SELF"], '', $page, $param, '', $sortfield, $sortorder, '', 1); print getTitleFieldOfList('Title', 0, $_SERVER["PHP_SELF"], '', $page, $param, '', $sortfield, $sortorder, '', 1); - print getTitleFieldOfList('Date', 0, $_SERVER["PHP_SELF"], 'a.datep', $page, $param, '', $sortfield, $sortorder, 'center ', 1); - print getTitleFieldOfList('', 0, $_SERVER["PHP_SELF"], '', $page, $param, '', $sortfield, $sortorder, 'right ', 1); + print getTitleFieldOfList('Date', 0, $_SERVER["PHP_SELF"], 'a.datep', $page, $param, '', $sortfield, $sortorder, 'center ', 1); + print getTitleFieldOfList('', 0, $_SERVER["PHP_SELF"], '', $page, $param, '', $sortfield, $sortorder, 'right ', 1); print ''; print "\n"; - $userstatic = new User($this->db); - - if (count($listofactions)) + if (is_array($listofactions) && count($listofactions)) { + $cacheusers=array(); + $cursorevent = 0; foreach($listofactions as $action) { @@ -246,8 +244,20 @@ class FormActions print ''; // Type @@ -284,10 +294,7 @@ class FormActions } print ''; print ''; print ''; diff --git a/htdocs/core/modules/facture/mod_facture_terre.php b/htdocs/core/modules/facture/mod_facture_terre.php index c01fa9d2e09..a4cc1762766 100644 --- a/htdocs/core/modules/facture/mod_facture_terre.php +++ b/htdocs/core/modules/facture/mod_facture_terre.php @@ -184,6 +184,8 @@ class mod_facture_terre extends ModeleNumRefFactures { global $db; + dol_syslog(get_class($this)."::getNextValue mode=".$mode, LOG_DEBUG); + if ($invoice->type == 2) $prefix=$this->prefixcreditnote; elseif ($invoice->type == 3) $prefix=$this->prefixdeposit; else $prefix=$this->prefixinvoice; @@ -195,7 +197,6 @@ class mod_facture_terre extends ModeleNumRefFactures $sql.= " AND entity IN (".getEntity('invoicenumber', 1, $invoice).")"; $resql=$db->query($sql); - dol_syslog(get_class($this)."::getNextValue", LOG_DEBUG); if ($resql) { $obj = $db->fetch_object($resql); @@ -219,7 +220,6 @@ class mod_facture_terre extends ModeleNumRefFactures $sql.= " AND entity IN (".getEntity('invoicenumber', 1, $invoice).")"; $sql.= " ORDER BY ref DESC"; - dol_syslog(get_class($this)."::getNextValue", LOG_DEBUG); $resql=$db->query($sql); if ($resql) { From e6c28188db335b61a58efb454f1c5ec8f7349236 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 14 Jun 2019 13:38:52 +0200 Subject: [PATCH 246/828] Update product.lib.php --- htdocs/core/lib/product.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/product.lib.php b/htdocs/core/lib/product.lib.php index b6f8983f284..61f2fd05b00 100644 --- a/htdocs/core/lib/product.lib.php +++ b/htdocs/core/lib/product.lib.php @@ -494,7 +494,7 @@ function measuring_units_string($unit, $measuring_style = '') require_once DOL_DOCUMENT_ROOT.'/core/class/cunits.class.php'; $measuringUnits= new CUnits($db); $result = $measuringUnits->fetchAll('', '', 0, 0, array( - 't.rowid' => $unit, + 't.scale' => $unit, 't.unit_type' => $measuring_style, 't.active' => 1 )); From 1fa1b91916a1adeb06102f763e1ca5f0aac25a95 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 14 Jun 2019 13:46:59 +0200 Subject: [PATCH 247/828] Update product.lib.php --- htdocs/core/lib/product.lib.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/product.lib.php b/htdocs/core/lib/product.lib.php index 61f2fd05b00..4d79d0d4db3 100644 --- a/htdocs/core/lib/product.lib.php +++ b/htdocs/core/lib/product.lib.php @@ -483,7 +483,7 @@ function show_stats_for_company($product, $socid) /** * Return translation label of a unit key * - * @param int $unit Unit key (-3,0,3,98,99...) + * @param int $unit ID of unit (rowid in llx_c_units table) * @param string $measuring_style Style of unit: weight, volume,... * @return string Unit string * @see formproduct->selectMeasuringUnits @@ -494,7 +494,7 @@ function measuring_units_string($unit, $measuring_style = '') require_once DOL_DOCUMENT_ROOT.'/core/class/cunits.class.php'; $measuringUnits= new CUnits($db); $result = $measuringUnits->fetchAll('', '', 0, 0, array( - 't.scale' => $unit, + 't.rowid' => $unit, 't.unit_type' => $measuring_style, 't.active' => 1 )); From bc8c7e0d4f68817095de0a1404f6b8f94ebdbfe7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 14 Jun 2019 15:03:37 +0200 Subject: [PATCH 248/828] Code comment --- htdocs/societe/paymentmodes.php | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/htdocs/societe/paymentmodes.php b/htdocs/societe/paymentmodes.php index e37d7caf91f..3b1a2dd0459 100644 --- a/htdocs/societe/paymentmodes.php +++ b/htdocs/societe/paymentmodes.php @@ -48,7 +48,7 @@ if ($user->societe_id) $socid=$user->societe_id; $result = restrictedArea($user, 'societe', '', ''); $id=GETPOST("id", "int"); -$source=GETPOST("source", "alpha"); +$source=GETPOST("source", "alpha"); // source can be a source or a paymentmode $ribid=GETPOST("ribid", "int"); $action=GETPOST("action", 'alpha', 3); $cancel=GETPOST('cancel', 'alpha'); @@ -419,6 +419,15 @@ if (empty($reshook)) $companypaymentmode = new CompanyPaymentMode($db); if ($companypaymentmode->fetch($ribid?$ribid:$id)) { + /*if ($companypaymentmode->stripe_card_ref && preg_match('/pm_/', $companypaymentmode->stripe_card_ref)) + { + $payment_method = \Stripe\PaymentMethod::retrieve($companypaymentmode->stripe_card_ref); + if ($payment_method) + { + $payment_method->detach(); + } + }*/ + $result = $companypaymentmode->delete($user); if ($result > 0) { @@ -586,7 +595,7 @@ if (empty($reshook)) $db->rollback(); } } - if ($action == 'setlocalassourcedefault') + if ($action == 'setlocalassourcedefault') // Set as default when payment mode defined locally (and may be also remotely) { try { $companypaymentmode->setAsDefault($id); @@ -601,11 +610,12 @@ if (empty($reshook)) setEventMessages($e->getMessage(), null, 'errors'); } } - elseif ($action == 'setassourcedefault') + elseif ($action == 'setassourcedefault') // Set as default when payment mode defined remotely only { try { $cu=$stripe->customerStripe($object, $stripeacc, $servicestatus); - $cu->default_source = (string) $source; + $cu->default_source = (string) $source; // Old + $cu->invoice_settings->default_payment_method = (string) $source; // New $result = $cu->save(); $url=DOL_URL_ROOT.'/societe/paymentmodes.php?socid='.$object->id; From baf95c3c86a9fa6f3c24a5253794c48c14f673d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Fri, 14 Jun 2019 16:47:53 +0200 Subject: [PATCH 249/828] Update agenda.lang --- htdocs/langs/en_US/agenda.lang | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/langs/en_US/agenda.lang b/htdocs/langs/en_US/agenda.lang index 88f41d2c3c9..30c2a3d4038 100644 --- a/htdocs/langs/en_US/agenda.lang +++ b/htdocs/langs/en_US/agenda.lang @@ -38,6 +38,7 @@ ActionsEvents=Events for which Dolibarr will create an action in agenda automati EventRemindersByEmailNotEnabled=Event reminders by email was not enabled into %s module setup. ##### Agenda event labels ##### NewCompanyToDolibarr=Third party %s created +COMPANY_DELETEInDolibarr=Third party %s deleted ContractValidatedInDolibarr=Contract %s validated CONTRACT_DELETEInDolibarr=Contract %s deleted PropalClosedSignedInDolibarr=Proposal %s signed From 8afffc87627f1236d1355080c835a1dfc840dd76 Mon Sep 17 00:00:00 2001 From: Juanjo Menent Date: Fri, 14 Jun 2019 18:28:01 +0200 Subject: [PATCH 250/828] FIX: #11335 --- htdocs/fourn/facture/card.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/fourn/facture/card.php b/htdocs/fourn/facture/card.php index 3956684d9b2..bca9cb8ad4e 100644 --- a/htdocs/fourn/facture/card.php +++ b/htdocs/fourn/facture/card.php @@ -4,7 +4,7 @@ * Copyright (C) 2004 Christophe Combelles * Copyright (C) 2005 Marc Barilley * Copyright (C) 2005-2013 Regis Houssin - * Copyright (C) 2010-2014 Juanjo Menent + * Copyright (C) 2010-2019 Juanjo Menent * Copyright (C) 2013-2015 Philippe Grand * Copyright (C) 2013 Florian Henry * Copyright (C) 2014-2016 Marcos García @@ -831,6 +831,8 @@ if (empty($reshook)) // Auto calculation of date due if not filled by user if(empty($object->date_echeance)) $object->date_echeance = $object->calculate_date_lim_reglement(); + $object->fetch_thirdparty(); + // If creation from another object of another module if (! $error && $_POST['origin'] && $_POST['originid']) { From cd5c2c324959eb12569c077788cfe8d5b2363733 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Fri, 14 Jun 2019 18:39:05 +0200 Subject: [PATCH 251/828] Update llx_bom_bom.sql --- htdocs/install/mysql/tables/llx_bom_bom.sql | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/htdocs/install/mysql/tables/llx_bom_bom.sql b/htdocs/install/mysql/tables/llx_bom_bom.sql index 4e559566817..9c6e014586d 100644 --- a/htdocs/install/mysql/tables/llx_bom_bom.sql +++ b/htdocs/install/mysql/tables/llx_bom_bom.sql @@ -26,7 +26,8 @@ CREATE TABLE llx_bom_bom( fk_product integer, qty double(24,8), efficiency double(8,4) DEFAULT 1, - date_creation datetime NOT NULL, + date_creation datetime NOT NULL, + date_valid datetime NOT NULL, tms timestamp, date_valid datetime, fk_user_creat integer NOT NULL, @@ -35,4 +36,4 @@ CREATE TABLE llx_bom_bom( import_key varchar(14), status integer NOT NULL -- END MODULEBUILDER FIELDS -) ENGINE=innodb; \ No newline at end of file +) ENGINE=innodb; From d838ced12e568acb58c23fc4b5b48d736832578b Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Fri, 14 Jun 2019 18:41:38 +0200 Subject: [PATCH 252/828] Update 9.0.0-10.0.0.sql --- htdocs/install/mysql/migration/9.0.0-10.0.0.sql | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql index e353f317b45..385b740a685 100644 --- a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql +++ b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql @@ -228,6 +228,7 @@ CREATE TABLE llx_bom_bom( ALTER TABLE llx_bom_bom ADD COLUMN efficiency double(8,4) DEFAULT 1; ALTER TABLE llx_bom_bom ADD COLUMN entity integer DEFAULT 1 NOT NULL; +ALTER TABLE llx_bom_bom ADD COLUMN date_valid datetime NOT NULL; create table llx_bom_bom_extrafields ( From a73ae49c4d623b3e9aabb31230187c4b5d264b04 Mon Sep 17 00:00:00 2001 From: Juanjo Menent Date: Fri, 14 Jun 2019 18:56:30 +0200 Subject: [PATCH 253/828] FIX: #11296 --- htdocs/projet/class/project.class.php | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/htdocs/projet/class/project.class.php b/htdocs/projet/class/project.class.php index 549865c63cd..5abf7e76d33 100644 --- a/htdocs/projet/class/project.class.php +++ b/htdocs/projet/class/project.class.php @@ -5,6 +5,7 @@ * Copyright (C) 2013 Florian Henry * Copyright (C) 2014-2017 Marcos García * Copyright (C) 2017 Ferran Marcet + * Copyright (C) 2019 Juanjo Menent * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -695,6 +696,27 @@ class Project extends CommonObject $ret = $this->deleteTasks($user); if ($ret < 0) $error++; + + // Delete all child tables + if (! $error) { + $elements = array('categorie_project'); // elements to delete. TODO Make goodway to delete + foreach($elements as $table) + { + if (! $error) { + $sql = "DELETE FROM ".MAIN_DB_PREFIX.$table; + $sql.= " WHERE fk_project = ".$this->id; + + $result = $this->db->query($sql); + if (! $result) { + $error++; + $this->errors[] = $this->db->lasterror(); + } + } + } + } + + + // Delete project if (! $error) { From 651f4158ac6c4b122d544adb50df49fb90a00f97 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sun, 16 Jun 2019 14:18:26 +0200 Subject: [PATCH 254/828] Fix add / delete contact access --- htdocs/commande/class/api_orders.class.php | 34 +++++++++------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/htdocs/commande/class/api_orders.class.php b/htdocs/commande/class/api_orders.class.php index 27b55f9e57f..36df0c0eacb 100644 --- a/htdocs/commande/class/api_orders.class.php +++ b/htdocs/commande/class/api_orders.class.php @@ -415,21 +415,16 @@ class Orders extends DolibarrApi */ public function postContact($id, $contactid, $type) { - if(!DolibarrApiAccess::$user->rights->commande->creer) { - throw new RestException(401); - } - - $result = $this->commande->fetch($id); - - if(!$result) { - throw new RestException(404, 'Order not found'); + if (! DolibarrApiAccess::$user->rights->commande->creer) { + throw new RestException(401); } - if (!in_array($type, array('BILLING', 'SHIPPING', 'CUSTOMER'), true)) { - throw new RestException(500, 'Availables types: BILLING, SHIPPING OR CUSTOMER'); + $result = $this->commande->fetch($id); + if (! $result) { + throw new RestException(404, 'Order not found'); } - if(!DolibarrApi::_checkAccessToResource('order', $this->commande->id)) { + if (! DolibarrApi::_checkAccessToResource('commande', $this->commande->id)) { throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); } @@ -457,17 +452,16 @@ class Orders extends DolibarrApi */ public function deleteContact($id, $rowid) { - if(!DolibarrApiAccess::$user->rights->commande->creer) { - throw new RestException(401); - } - - $result = $this->commande->fetch($id); - - if(!$result) { - throw new RestException(404, 'Order not found'); + if (! DolibarrApiAccess::$user->rights->commande->creer) { + throw new RestException(401); } - if(!DolibarrApi::_checkAccessToResource('order', $this->commande->id)) { + $result = $this->commande->fetch($id); + if (! $result) { + throw new RestException(404, 'Order not found'); + } + + if (! DolibarrApi::_checkAccessToResource('commande', $this->commande->id)) { throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); } From 48b2cb83af29a9d54b333d224e6847faa3e6a969 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 16 Jun 2019 17:08:23 +0200 Subject: [PATCH 255/828] Close #11152 by a manual merge to keep only required things --- .../interface_80_modStripe_Stripe.class.php | 30 +++++-- htdocs/public/stripe/ipn.php | 89 ++++++++++++++++++- .../class/companypaymentmode.class.php | 20 ++--- htdocs/societe/class/societeaccount.class.php | 36 +++++++- htdocs/societe/paymentmodes.php | 3 +- htdocs/stripe/class/stripe.class.php | 64 +++++++++---- 6 files changed, 205 insertions(+), 37 deletions(-) diff --git a/htdocs/core/triggers/interface_80_modStripe_Stripe.class.php b/htdocs/core/triggers/interface_80_modStripe_Stripe.class.php index 8282a09a43d..f9d28a0b984 100644 --- a/htdocs/core/triggers/interface_80_modStripe_Stripe.class.php +++ b/htdocs/core/triggers/interface_80_modStripe_Stripe.class.php @@ -148,32 +148,50 @@ class InterfaceStripe { $namecleaned = $object->name ? $object->name : null; $vatcleaned = $object->tva_intra ? $object->tva_intra : null; - - $taxinfo = array('type'=>'vat'); + $desccleaned = $object->name_alias ? $object->name_alias : null; + $taxexemptcleaned = $object->tva_assuj ? 'none' : 'exempt'; + $langcleaned = $object->default_lang ? array(substr($object->default_lang, 0, 2)) : null; + /*$taxinfo = array('type'=>'vat'); if ($vatcleaned) { $taxinfo["tax_id"] = $vatcleaned; } // We force data to "null" if not defined as expected by Stripe - if (empty($vatcleaned)) $taxinfo=null; + if (empty($vatcleaned)) $taxinfo=null;*/ // Detect if we change a Stripe info (email, description, vat id) $changerequested = 0; if (! empty($object->email) && $object->email != $customer->email) $changerequested++; - if ($namecleaned != $customer->description) $changerequested++; + /* if ($namecleaned != $customer->description) $changerequested++; if (! isset($customer->tax_info['tax_id']) && ! is_null($vatcleaned)) $changerequested++; elseif (isset($customer->tax_info['tax_id']) && is_null($vatcleaned)) $changerequested++; elseif (isset($customer->tax_info['tax_id']) && ! is_null($vatcleaned)) { if ($vatcleaned != $customer->tax_info['tax_id']) $changerequested++; + } */ + if ($namecleaned != $customer->name) $changerequested++; + if ($desccleaned != $customer->description) $changerequested++; + if (($customer->tax_exempt == 'exempt' && ! $object->tva_assuj) || (! $customer->tax_exempt == 'exempt' && empty($object->tva_assuj))) $changerequested++; + if (! isset($customer->tax_ids['data']) && ! is_null($vatcleaned)) $changerequested++; + elseif (isset($customer->tax_ids['data']) && is_null($vatcleaned)) $changerequested++; + elseif (isset($customer->tax_ids['data']) && ! is_null($vatcleaned)) + { + $taxinfo = reset($customer->tax_ids['data']); + if (isset($taxinfo->value) && $vatcleaned != $taxinfo->value) $changerequested++; } if ($changerequested) { - if (! empty($object->email)) $customer->email = $object->email; + /*if (! empty($object->email)) $customer->email = $object->email; $customer->description = $namecleaned; if (empty($taxinfo)) $customer->tax_info = array('type'=>'vat', 'tax_id'=>null); - else $customer->tax_info = $taxinfo; + else $customer->tax_info = $taxinfo; */ + $customer->name = $namecleaned; + $customer->description = $desccleaned; + $customer->preferred_locales = $langcleaned; + $customer->tax_exempt = $taxexemptcleaned; + if (! empty($vatcleaned)) $customer->tax_ids = array('object'=>'list', 'data'=>array('value'=>$vatcleaned)); + else $customer->tax_ids = null; $customer->save(); } diff --git a/htdocs/public/stripe/ipn.php b/htdocs/public/stripe/ipn.php index 8795031592a..bfd1788e12f 100644 --- a/htdocs/public/stripe/ipn.php +++ b/htdocs/public/stripe/ipn.php @@ -293,7 +293,6 @@ elseif ($event->type == 'customer.source.delete') { elseif ($event->type == 'customer.deleted') { $db->begin(); $sql = "DELETE FROM ".MAIN_DB_PREFIX."societe_account WHERE key_account = '".$db->escape($event->data->object->id)."' and site='stripe'"; - dol_syslog(get_class($this) . "::delete sql=" . $sql, LOG_DEBUG); $db->query($sql); $db->commit(); } @@ -309,6 +308,94 @@ elseif ($event->type == 'checkout.session.completed') // Called when making pay // TODO: create fees // TODO: Redirect to paymentok.php } +elseif ($event->type == 'payment_method.attached') { + require_once DOL_DOCUMENT_ROOT.'/societe/class/companypaymentmode.class.php'; + require_once DOL_DOCUMENT_ROOT.'/societe/class/societeaccount.class.php'; + $societeaccount = new SocieteAccount($db); + + $companypaymentmode = new CompanyPaymentMode($db); + + $idthirdparty = $societeaccount->getThirdPartyID($db->escape($event->data->object->customer), 'stripe', $servicestatus); + if ($idthirdparty > 0) // If the payment mode is on an external customer that is known in societeaccount, we can create the payment mode + { + $companypaymentmode->stripe_card_ref = $db->escape($event->data->object->id); + $companypaymentmode->fk_soc = $idthirdparty; + $companypaymentmode->bank = null; + $companypaymentmode->label = null; + $companypaymentmode->number = $db->escape($event->data->object->id); + $companypaymentmode->last_four = $db->escape($event->data->object->card->last4); + $companypaymentmode->card_type = $db->escape($event->data->object->card->branding); + $companypaymentmode->proprio = $db->escape($event->data->object->billing_details->name); + $companypaymentmode->exp_date_month = $db->escape($event->data->object->card->exp_month); + $companypaymentmode->exp_date_year = $db->escape($event->data->object->card->exp_year); + $companypaymentmode->cvn = null; + $companypaymentmode->datec = $db->escape($event->data->object->created); + $companypaymentmode->default_rib = 0; + $companypaymentmode->type = $db->escape($event->data->object->type); + $companypaymentmode->country_code = $db->escape($event->data->object->card->country); + $companypaymentmode->status = $servicestatus; + + $db->begin(); + if (! $error) + { + $result = $companypaymentmode->create($user); + if ($result < 0) + { + $error++; + } + } + if (! $error) + { + $db->commit(); + } + else + { + $db->rollback(); + } + } +} +elseif ($event->type == 'payment_method.updated') { + require_once DOL_DOCUMENT_ROOT.'/societe/class/companypaymentmode.class.php'; + $companypaymentmode = new CompanyPaymentMode($db); + $companypaymentmode->fetch(0, '', 0, '', " AND stripe_card_ref = '".$db->escape($event->data->object->id)."'"); + $companypaymentmode->bank = null; + $companypaymentmode->label = null; + $companypaymentmode->number = $db->escape($event->data->object->id); + $companypaymentmode->last_four = $db->escape($event->data->object->card->last4); + $companypaymentmode->proprio = $db->escape($event->data->object->billing_details->name); + $companypaymentmode->exp_date_month = $db->escape($event->data->object->card->exp_month); + $companypaymentmode->exp_date_year = $db->escape($event->data->object->card->exp_year); + $companypaymentmode->cvn = null; + $companypaymentmode->datec = $db->escape($event->data->object->created); + $companypaymentmode->default_rib = 0; + $companypaymentmode->type = $db->escape($event->data->object->type); + $companypaymentmode->country_code = $db->escape($event->data->object->card->country); + $companypaymentmode->status = $servicestatus; + + $db->begin(); + if (! $error) + { + $result = $companypaymentmode->update($user); + if ($result < 0) + { + $error++; + } + } + if (! $error) + { + $db->commit(); + } + else + { + $db->rollback(); + } +} +elseif ($event->type == 'payment_method.detached') { + $db->begin(); + $sql = "DELETE FROM ".MAIN_DB_PREFIX."societe_rib WHERE ref = '".$db->escape($event->data->object->id)."' and status = ".$servicestatus; + $db->query($sql); + $db->commit(); +} elseif ($event->type == 'charge.succeeded') { // TODO: create fees // TODO: Redirect to paymentok.php diff --git a/htdocs/societe/class/companypaymentmode.class.php b/htdocs/societe/class/companypaymentmode.class.php index ae9f0a44b32..e3e86e2cf4a 100644 --- a/htdocs/societe/class/companypaymentmode.class.php +++ b/htdocs/societe/class/companypaymentmode.class.php @@ -169,21 +169,21 @@ class CompanyPaymentMode extends CommonObject public $starting_date; public $ending_date; - + /** * Date creation record (datec) * * @var integer */ public $datec; - + /** * Date modification record (tms) * * @var integer */ public $tms; - + public $import_key; // END MODULEBUILDER PROPERTIES @@ -297,15 +297,15 @@ class CompanyPaymentMode extends CommonObject /** * Load object in memory from the database * - * @param int $id Id object - * @param string $ref Ref - * @param int $socid Id of company to get first default payment mode - * @param string $type Filter on type ('ban', 'card', ...) - * @return int <0 if KO, 0 if not found, >0 if OK + * @param int $id Id object + * @param string $ref Ref + * @param int $socid Id of company to get first default payment mode + * @param string $type Filter on type ('ban', 'card', ...) + * @param string $morewhere More SQL filters (' AND ...') + * @return int <0 if KO, 0 if not found, >0 if OK */ - public function fetch($id, $ref = null, $socid = 0, $type = '') + public function fetch($id, $ref = null, $socid = 0, $type = '', $morewhere = '') { - $morewhere = ''; if ($socid) $morewhere.= " AND fk_soc = ".$this->db->escape($socid)." AND default_rib = 1"; if ($type) $morewhere.= " AND type = '".$this->db->escape($type)."'"; diff --git a/htdocs/societe/class/societeaccount.class.php b/htdocs/societe/class/societeaccount.class.php index 6f24471a295..3fc7b225c77 100644 --- a/htdocs/societe/class/societeaccount.class.php +++ b/htdocs/societe/class/societeaccount.class.php @@ -3,7 +3,6 @@ * Copyright (C) 2014-2016 Juanjo Menent * Copyright (C) 2015 Florian Henry * Copyright (C) 2015 Raphaël Doursenaud - * Copyright (C) ---Put here your own copyright and developer email--- * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -281,12 +280,13 @@ class SocieteAccount extends CommonObject } /** - * Try to find the external customer id of a thirdparty for an another site/system. + * Try to find the external customer id of a thirdparty for another site/system. * * @param int $id Id of third party * @param string $site Site (example: 'stripe', '...') * @param int $status Status (0=test, 1=live) * @return string Stripe customer ref 'cu_xxxxxxxxxxxxx' or '' + * @see getThirdPartyID() */ public function getCustomerAccount($id, $site, $status = 0) { @@ -314,6 +314,38 @@ class SocieteAccount extends CommonObject return $key; } + /** + * Try to find the thirdparty id for an another site/system external id. + * + * @param string $id Id of customer in external system (example: 'cu_xxxxxxxxxxxxx', ...) + * @param string $site Site (example: 'stripe', '...') + * @param int $status Status (0=test, 1=live) + * @return string Id of third party + * @see getCustomerAccount() + */ + public function getThirdPartyID($id, $site, $status = 0) + { + $socid = 0; + + $sql = "SELECT sa.fk_soc as fk_soc, sa.key_account, sa.entity"; + $sql.= " FROM " . MAIN_DB_PREFIX . "societe_account as sa"; + $sql.= " WHERE sa.key_account = '".$this->db->escape($id)."'"; + $sql.= " AND sa.entity IN (".getEntity('societe').")"; + $sql.= " AND sa.site = '".$this->db->escape($site)."' AND sa.status = ".((int) $status); + $sql.= " AND sa.fk_soc > 0"; + + dol_syslog(get_class($this) . "::getCustomerAccount Try to find the first thirdparty id for ".$site." for external id=".$id, LOG_DEBUG); + $result = $this->db->query($sql); + if ($result) { + if ($this->db->num_rows($result)) { + $obj = $this->db->fetch_object($result); + $socid = $obj->fk_soc; + } + } + + return $socid; + } + /** * Update object into database * diff --git a/htdocs/societe/paymentmodes.php b/htdocs/societe/paymentmodes.php index 3b1a2dd0459..24329a48a33 100644 --- a/htdocs/societe/paymentmodes.php +++ b/htdocs/societe/paymentmodes.php @@ -1123,7 +1123,8 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard' print ''; // Default print ''; // Progress declared From c0a30d1ff5484471a9bb9aa8ab4f6c1dad0472c4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 16 Jun 2019 22:17:04 +0200 Subject: [PATCH 259/828] FIX #11325 FIX #5249 Conflicts: htdocs/projet/tasks/time.php --- htdocs/projet/tasks/time.php | 61 +++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 29 deletions(-) diff --git a/htdocs/projet/tasks/time.php b/htdocs/projet/tasks/time.php index 48167edcc1d..e69f4fcd899 100644 --- a/htdocs/projet/tasks/time.php +++ b/htdocs/projet/tasks/time.php @@ -317,7 +317,8 @@ if (($id > 0 || ! empty($ref)) || $projectidforalltimes > 0) $object->project = clone $projectstatic; } - $userWrite = $projectstatic->restrictedProjectArea($user,'write'); + $userRead = $projectstatic->restrictedProjectArea($user, 'read'); + $linktocreatetime = ''; if ($projectstatic->id > 0) { @@ -427,33 +428,30 @@ if (($id > 0 || ! empty($ref)) || $projectidforalltimes > 0) print '
'; // Link to create time - //if ((empty($id) && empty($ref)) || ! empty($projectidforalltimes)) - //{ - if ($user->rights->projet->all->creer || $user->rights->projet->creer) - { - if ($projectstatic->public || $userWrite > 0) - { - if (! empty($projectidforalltimes)) // We are on tab 'Time Spent' of project - { - $backtourl = $_SERVER['PHP_SELF'].'?projectid='.$projectstatic->id.($withproject?'&withproject=1':''); - $linktocreatetime = ''.$langs->trans('AddTimeSpent').''; - } - else // We are on tab 'Time Spent' of task - { - $backtourl = $_SERVER['PHP_SELF'].'?id='.$object->id.($withproject?'&withproject=1':''); - $linktocreatetime = ''.$langs->trans('AddTimeSpent').''; - } - } - else - { - $linktocreatetime = ''.$langs->trans('AddTime').''; - } - } - else - { - $linktocreatetime = ''.$langs->trans('AddTime').''; - } - //} + if ($user->rights->projet->all->lire || $user->rights->projet->lire)) // To enter time, read permission is enough + { + if ($projectstatic->public || $userRead > 0) + { + if (! empty($projectidforalltimes)) // We are on tab 'Time Spent' of project + { + $backtourl = $_SERVER['PHP_SELF'].'?projectid='.$projectstatic->id.($withproject?'&withproject=1':''); + $linktocreatetime = ''.$langs->trans('AddTimeSpent').''; + } + else // We are on tab 'Time Spent' of task + { + $backtourl = $_SERVER['PHP_SELF'].'?id='.$object->id.($withproject?'&withproject=1':''); + $linktocreatetime = ''.$langs->trans('AddTimeSpent').''; + } + } + else + { + $linktocreatetime = ''.$langs->trans('AddTime').''; + } + } + else + { + $linktocreatetime = ''.$langs->trans('AddTime').''; + } } } @@ -803,7 +801,12 @@ if (($id > 0 || ! empty($ref)) || $projectidforalltimes > 0) // Duration - Time spent print '
'; // Progress declared From 157526205d267c0d73aaefb525e97f45b4e0a9aa Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 16 Jun 2019 23:00:40 +0200 Subject: [PATCH 260/828] Fix css --- htdocs/projet/tasks.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/projet/tasks.php b/htdocs/projet/tasks.php index ccc8a0548c8..b05b27b5e90 100644 --- a/htdocs/projet/tasks.php +++ b/htdocs/projet/tasks.php @@ -667,7 +667,7 @@ elseif ($id > 0 || ! empty($ref)) print ''; $title=$langs->trans("ListOfTasks"); - $linktotasks = dolGetButtonTitle($langs->trans('GoToGanttView'), '', 'fa fa-calendar-minus-o', DOL_URL_ROOT.'/projet/ganttview.php?id='.$object->id.'&withproject=1'); + $linktotasks = dolGetButtonTitle($langs->trans('GoToGanttView'), '', 'fa fa-calendar-minus-o paddingleft', DOL_URL_ROOT.'/projet/ganttview.php?id='.$object->id.'&withproject=1'); //print_barre_liste($title, 0, $_SERVER["PHP_SELF"], '', $sortfield, $sortorder, $linktotasks, $num, $totalnboflines, 'title_generic.png', 0, '', '', 0, 1); print load_fiche_titre($title, $linktotasks.'   '.$linktocreatetask, 'title_generic.png'); From 3afd4e15ad135b74b781a0170d79547fde4208da Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Mon, 17 Jun 2019 07:09:19 +0200 Subject: [PATCH 261/828] FIX try to remove ob_* functions --- htdocs/core/lib/pdf.lib.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/pdf.lib.php b/htdocs/core/lib/pdf.lib.php index 1932fca31a2..56ca215e118 100644 --- a/htdocs/core/lib/pdf.lib.php +++ b/htdocs/core/lib/pdf.lib.php @@ -186,11 +186,11 @@ function pdf_getEncryption($pathoffile) $content = file_get_contents($pathoffile); - ob_start(); + //ob_start(); @($parser = new \TCPDF_PARSER(ltrim($content))); list($xref, $data) = $parser->getParsedData(); unset($parser); - ob_end_clean(); + //ob_end_clean(); if (isset($xref['trailer']['encrypt'])) { $isencrypted = true; // Secured pdf file are currently not supported From 8330078de18ddd00c322398e94c5bf560161f5b5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 17 Jun 2019 12:33:09 +0200 Subject: [PATCH 262/828] Fix default value --- htdocs/core/class/html.formcompany.class.php | 4 ++-- htdocs/societe/card.php | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/htdocs/core/class/html.formcompany.class.php b/htdocs/core/class/html.formcompany.class.php index d2fb93000a9..d1366cb8511 100644 --- a/htdocs/core/class/html.formcompany.class.php +++ b/htdocs/core/class/html.formcompany.class.php @@ -908,7 +908,7 @@ class FormCompany $out = ''; print ''; From a399e3f63de7b2c652789a069886decd3777c51f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 17 Jun 2019 13:33:44 +0200 Subject: [PATCH 263/828] Update companies.lang --- htdocs/langs/fr_FR/companies.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/langs/fr_FR/companies.lang b/htdocs/langs/fr_FR/companies.lang index 7a423b0b007..dc2cf3b95b2 100644 --- a/htdocs/langs/fr_FR/companies.lang +++ b/htdocs/langs/fr_FR/companies.lang @@ -318,7 +318,7 @@ CompanyDeleted=La société "%s" a été supprimée de la base. ListOfContacts=Liste des contacts ListOfContactsAddresses=Liste des contacts/adresses ListOfThirdParties=Liste des tiers -ShowCompany=Affichier tiers +ShowCompany=Afficher tiers ShowContact=Afficher contact ContactsAllShort=Tous (pas de filtre) ContactType=Type de contact From 1a1f3493c90d5297509af0bf592a51b43bf8d6c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 17 Jun 2019 14:03:57 +0200 Subject: [PATCH 264/828] NEW can specify hour start end for selectDate and step for minutes --- htdocs/core/class/html.form.class.php | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 63246fb0287..29f2dd6ed6a 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -5234,10 +5234,12 @@ class Form * @param int $fullday When a checkbox with this html name is on, hour and day are set with 00:00 or 23:59 * @param string $addplusone Add a link "+1 hour". Value must be name of another selectDate field. * @param datetime $adddateof Add a link "Date of invoice" using the following date. + * @param string $openinghours Specify hour strat and hour end for the select ex 8,20 + * @param int $stepminutes Specify step for minutes between 1 and 30 * @return string Html for selectDate * @see form_date(), select_month(), select_year(), select_dayofweek() */ - public function selectDate($set_time = '', $prefix = 're', $h = 0, $m = 0, $empty = 0, $form_name = "", $d = 1, $addnowlink = 0, $disabled = 0, $fullday = '', $addplusone = '', $adddateof = '') + public function selectDate($set_time = '', $prefix = 're', $h = 0, $m = 0, $empty = 0, $form_name = "", $d = 1, $addnowlink = 0, $disabled = 0, $fullday = '', $addplusone = '', $adddateof = '', $openinghours = '', $stepminutes = 1) { global $conf,$langs; @@ -5248,6 +5250,7 @@ class Form if ($m == '') $m=0; $emptydate=0; $emptyhours=0; + if ($stepminutes<=0 || $stepminutes>30) $stepminutes = 1; if ($empty == 1) { $emptydate=1; $emptyhours=1; } if ($empty == 2) { $emptydate=0; $emptyhours=1; } $orig_set_time=$set_time; @@ -5468,10 +5471,18 @@ class Form if ($h) { + $hourstart = 0; + $hourend = 24; + if ($openinghours != '') { + $openinghours = explode(',', $openinghours); + $hourstart = $openinghours[0]; + $hourend = $openinghours[1]; + if ($hourend<$hourstart) $hourend = $hourstart; + } // Show hour $retstring.=''; if ($emptyhours) $retstring.=''; - for ($hour = 0; $hour < 24; $hour++) + for ($hour = $hourstart; $hour < $hourend; $hour++) { if (strlen($hour) < 2) $hour = "0" . $hour; $retstring.=''; @@ -5485,7 +5496,7 @@ class Form // Show minutes $retstring.=''; if ($emptyhours) $retstring.=''; - for ($min = 0; $min < 60 ; $min++) + for ($min = 0; $min < 60 ; $min+=$stepminutes) { if (strlen($min) < 2) $min = "0" . $min; $retstring.=''; From 71d984483d5883a1b9ac3fd928175df45bf90031 Mon Sep 17 00:00:00 2001 From: Eric Seigne <1468823+rycks@users.noreply.github.com> Date: Mon, 17 Jun 2019 14:45:49 +0200 Subject: [PATCH 265/828] Update print VAT document: remove form part and add right title --- htdocs/compta/tva/quadri_detail.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/htdocs/compta/tva/quadri_detail.php b/htdocs/compta/tva/quadri_detail.php index 8b58bde4199..0f359dd9721 100644 --- a/htdocs/compta/tva/quadri_detail.php +++ b/htdocs/compta/tva/quadri_detail.php @@ -5,6 +5,7 @@ * Copyright (C) 2006-2015 Yannick Warnier * Copyright (C) 2014 Ferran Marcet * Copyright (C) 2018 Frédéric France + * Copyright (C) 2019 Eric Seigne * * 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 @@ -116,7 +117,8 @@ foreach ($listofparams as $param) if (GETPOST($param)!='') $morequerystring.=($morequerystring?'&':'').$param.'='.GETPOST($param); } -llxHeader('', $langs->trans("VATReport"), '', '', 0, 0, '', '', $morequerystring); +$title = $langs->trans("VATReport") . " " . dol_print_date($date_start) . " -> " . dol_print_date($date_end); +llxHeader('',$title,'','',0,0,'','',$morequerystring); //print load_fiche_titre($langs->trans("VAT"),""); @@ -184,8 +186,10 @@ if ($mysoc->tva_assuj) { $vatsup.=' ('.$langs->trans("ToGetBack").')'; } - -report_header($name, '', $period, $periodlink, $description, $builddate, $exportlink, array(), $calcmode); +$optioncss = GETPOST('optioncss'); +if($optioncss != "print") { + report_header($name, '', $period, $periodlink, $description, $builddate, $exportlink, array(), $calcmode); +} $vatcust=$langs->trans("VATReceived"); $vatsup=$langs->trans("VATPaid"); From cf825875040fbe5235d59ba32c9727e9471b6d6d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 17 Jun 2019 15:02:44 +0200 Subject: [PATCH 266/828] Fix menu entry --- htdocs/core/menus/standard/eldy.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index 3073ffe6032..3576f35642e 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -1285,7 +1285,7 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM $newmenu->add("/accountancy/bookkeeping/balance.php?mainmenu=accountancy&leftmenu=accountancy_accountancy", $langs->trans("AccountBalance"), 1, $user->rights->accounting->mouvements->lire); // Files - if (! empty($conf->global->MAIN_FEATURES_LEVEL) && $conf->global->MAIN_FEATURES_LEVEL >= 2) + if (! empty($conf->global->MAIN_FEATURES_LEVEL) && $conf->global->MAIN_FEATURES_LEVEL >= 1) { $newmenu->add("/compta/compta-files.php?mainmenu=accountancy&leftmenu=accountancy_files", $langs->trans("AccountantFiles"), 1, $user->rights->accounting->mouvements->lire); } From aa92bfd1e0a42fea433c2668ebc44533b895d404 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 17 Jun 2019 15:31:48 +0200 Subject: [PATCH 267/828] Update bom_card.php --- htdocs/bom/bom_card.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/bom/bom_card.php b/htdocs/bom/bom_card.php index c2ed2ca6705..d788be5354a 100644 --- a/htdocs/bom/bom_card.php +++ b/htdocs/bom/bom_card.php @@ -173,7 +173,6 @@ if (empty($reshook)) $action = ''; } } - } From a74eaaff4d1c9f84af74de2a4872fde45136c177 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 17 Jun 2019 15:54:54 +0200 Subject: [PATCH 268/828] Fix sort of linked elements --- htdocs/comm/propal/tpl/linkedobjectblock.tpl.php | 2 ++ htdocs/commande/tpl/linkedobjectblock.tpl.php | 2 ++ htdocs/compta/facture/tpl/linkedobjectblock.tpl.php | 2 ++ htdocs/core/class/html.form.class.php | 7 +++---- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/htdocs/comm/propal/tpl/linkedobjectblock.tpl.php b/htdocs/comm/propal/tpl/linkedobjectblock.tpl.php index 1b78370048a..61d79e4abbb 100644 --- a/htdocs/comm/propal/tpl/linkedobjectblock.tpl.php +++ b/htdocs/comm/propal/tpl/linkedobjectblock.tpl.php @@ -43,6 +43,8 @@ $linkedObjectBlock = $GLOBALS['linkedObjectBlock']; // Load translation files required by the page $langs->load("propal"); +$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc'); + $total=0; $ilink=0; foreach($linkedObjectBlock as $key => $objectlink) { diff --git a/htdocs/commande/tpl/linkedobjectblock.tpl.php b/htdocs/commande/tpl/linkedobjectblock.tpl.php index cce17b32695..1f8b440749f 100644 --- a/htdocs/commande/tpl/linkedobjectblock.tpl.php +++ b/htdocs/commande/tpl/linkedobjectblock.tpl.php @@ -39,6 +39,8 @@ $linkedObjectBlock = $GLOBALS['linkedObjectBlock']; // Load translation files required by the page $langs->load("orders"); +$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc'); + $total=0; $ilink=0; foreach($linkedObjectBlock as $key => $objectlink) { diff --git a/htdocs/compta/facture/tpl/linkedobjectblock.tpl.php b/htdocs/compta/facture/tpl/linkedobjectblock.tpl.php index 97f0b876abc..a9fbb5da2eb 100644 --- a/htdocs/compta/facture/tpl/linkedobjectblock.tpl.php +++ b/htdocs/compta/facture/tpl/linkedobjectblock.tpl.php @@ -38,6 +38,8 @@ $linkedObjectBlock = $GLOBALS['linkedObjectBlock']; $langs->load("bills"); +$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc'); + $total=0; $ilink=0; foreach($linkedObjectBlock as $key => $objectlink) { diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 63246fb0287..c4aaab27a84 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -6480,7 +6480,7 @@ class Form public function showLinkedObjectBlock($object, $morehtmlright = '', $compatibleImportElementsList = false) { global $conf,$langs,$hookmanager; - global $bc; + global $bc, $action; $object->fetchObjectLinked(); @@ -6525,6 +6525,7 @@ class Form $showImportButton=true; } + $regs = array(); if ($objecttype != 'supplier_proposal' && preg_match('/^([^_]+)_([^_]+)/i', $objecttype, $regs)) { $element = $regs[1]; @@ -6628,7 +6629,7 @@ class Form public function showLinkToObjectBlock($object, $restrictlinksto = array(), $excludelinksto = array()) { global $conf, $langs, $hookmanager; - global $bc; + global $bc, $action; $linktoelem=''; $linktoelemlist=''; @@ -6663,8 +6664,6 @@ class Form ); } - global $action; - // Can complete the possiblelink array $hookmanager->initHooks(array('commonobject')); $parameters=array('listofidcompanytoscan' => $listofidcompanytoscan); From c62f37095909cc179b3c1b10fdf120b85e2fb395 Mon Sep 17 00:00:00 2001 From: Ferran Marcet Date: Mon, 17 Jun 2019 16:30:56 +0200 Subject: [PATCH 269/828] FIX: Wrong stock movement on supplier credit notes --- htdocs/fourn/class/fournisseur.facture.class.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php index 3a27690e7ac..f96caf89207 100644 --- a/htdocs/fourn/class/fournisseur.facture.class.php +++ b/htdocs/fourn/class/fournisseur.facture.class.php @@ -9,7 +9,7 @@ * Copyright (C) 2013 Florian Henry * Copyright (C) 2014-2016 Marcos García * Copyright (C) 2015 Bahfir Abbes - * Copyright (C) 2015 Ferran Marcet + * Copyright (C) 2015-2019 Ferran Marcet * Copyright (C) 2016 Alexandre Spangaro * Copyright (C) 2018 Nicolas ZABOURI * @@ -1318,7 +1318,8 @@ class FactureFournisseur extends CommonInvoice // We increase stock for product $up_ht_disc=$this->lines[$i]->pu_ht; if (! empty($this->lines[$i]->remise_percent) && empty($conf->global->STOCK_EXCLUDE_DISCOUNT_FOR_PMP)) $up_ht_disc=price2num($up_ht_disc * (100 - $this->lines[$i]->remise_percent) / 100, 'MU'); - $result=$mouvP->reception($user, $this->lines[$i]->fk_product, $idwarehouse, $this->lines[$i]->qty, $up_ht_disc, $langs->trans("InvoiceValidatedInDolibarr",$num)); + if ($this->type == FactureFournisseur::TYPE_CREDIT_NOTE) $result=$mouvP->livraison($user, $this->lines[$i]->fk_product, $idwarehouse, $this->lines[$i]->qty, $up_ht_disc, $langs->trans("InvoiceValidatedInDolibarr",$num)); + else $result=$mouvP->reception($user, $this->lines[$i]->fk_product, $idwarehouse, $this->lines[$i]->qty, $up_ht_disc, $langs->trans("InvoiceValidatedInDolibarr",$num)); if ($result < 0) { $error++; } unset($this->line); } @@ -1441,7 +1442,8 @@ class FactureFournisseur extends CommonInvoice $mouvP = new MouvementStock($this->db); $mouvP->origin = &$this; // We increase stock for product - $result=$mouvP->livraison($user, $this->lines[$i]->fk_product, $idwarehouse, $this->lines[$i]->qty, $this->lines[$i]->subprice, $langs->trans("InvoiceBackToDraftInDolibarr", $this->ref)); + if ($this->type == FactureFournisseur::TYPE_CREDIT_NOTE) $result=$mouvP->reception($user, $this->lines[$i]->fk_product, $idwarehouse, $this->lines[$i]->qty, $this->lines[$i]->subprice, $langs->trans("InvoiceBackToDraftInDolibarr", $this->ref)); + else $result=$mouvP->livraison($user, $this->lines[$i]->fk_product, $idwarehouse, $this->lines[$i]->qty, $this->lines[$i]->subprice, $langs->trans("InvoiceBackToDraftInDolibarr", $this->ref)); } } } From 2fab35c28715a96d2a41efda693fc428bc54a81a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 17 Jun 2019 17:20:22 +0200 Subject: [PATCH 270/828] Debug page to export file --- htdocs/compta/compta-files.php | 87 ++++++++++--------------- htdocs/core/menus/init_menu_auguria.sql | 2 + 2 files changed, 37 insertions(+), 52 deletions(-) diff --git a/htdocs/compta/compta-files.php b/htdocs/compta/compta-files.php index 87efafd3405..656824298fe 100644 --- a/htdocs/compta/compta-files.php +++ b/htdocs/compta/compta-files.php @@ -106,7 +106,7 @@ if(($action=="searchfiles" || $action=="dl" ) && $date_start && $date_stop) { $sql.=" AND entity IN (".($entity==1?'0,1':$entity).')'; $sql.=" AND fk_statut <> ".ExpenseReport::STATUS_DRAFT; $sql.=" UNION ALL"; - $sql.=" SELECT rowid as id, ref,paid,amount as total_ttc, '0' as fk_soc, datedon as date, 'Donation' as item FROM ".MAIN_DB_PREFIX."don"; + $sql.=" SELECT rowid as id, ref, paid, amount as total_ttc, '0' as fk_soc, datedon as date, 'Donation' as item FROM ".MAIN_DB_PREFIX."don"; $sql.=" WHERE datedon between ".$wheretail; $sql.=" AND entity IN (".($entity==1?'0,1':$entity).')'; $sql.=" AND fk_statut <> ".Don::STATUS_DRAFT; @@ -143,56 +143,63 @@ if(($action=="searchfiles" || $action=="dl" ) && $date_start && $date_stop) { switch($objd->item) { case "Invoice": - $subdir=dol_sanitizeFileName($objd->ref); + $subdir = ''; + $subdir.=($subdir ? '/' : '').dol_sanitizeFileName($objd->ref); $upload_dir = $conf->facture->dir_output.'/'.$subdir; $link="document.php?modulepart=facture&file=".str_replace('/', '%2F', $subdir).'%2F'; break; case "SupplierInvoice": - $tmpinvoicesupplier->fetch($objd->id); - $subdir=get_exdir($tmpinvoicesupplier->id, 2, 0, 0, $tmpinvoicesupplier, 'invoice_supplier').'/'.dol_sanitizeFileName($objd->ref); + $tmpinvoicesupplier->fetch($objd->id); + $subdir = get_exdir($tmpinvoicesupplier->id, 2, 0, 1, $tmpinvoicesupplier, 'invoice_supplier'); // TODO Use first file + $subdir.=($subdir ? '/' : '').dol_sanitizeFileName($objd->ref); $upload_dir = $conf->fournisseur->facture->dir_output.'/'.$subdir; $link="document.php?modulepart=facture_fournisseur&file=".str_replace('/', '%2F', $subdir).'%2F'; break; case "ExpenseReport": - $subdir=dol_sanitizeFileName($objd->ref); + $subdir = ''; + $subdir.=($subdir ? '/' : '').dol_sanitizeFileName($objd->ref); $upload_dir = $conf->expensereport->dir_output.'/'.$subdir; $link="document.php?modulepart=expensereport&file=".str_replace('/', '%2F', $subdir).'%2F'; break; case "SalaryPayment": - $subdir=dol_sanitizeFileName($objd->id); + $subdir = ''; + $subdir.=($subdir ? '/' : '').dol_sanitizeFileName($objd->id); $upload_dir = $conf->salaries->dir_output.'/'.$subdir; $link="document.php?modulepart=salaries&file=".str_replace('/', '%2F', $subdir).'%2F'; break; case "Donation": $tmpdonation->fetch($objp->id); - $subdir=get_exdir(0, 0, 0, 1, $tmpdonation, 'donation'). '/'. dol_sanitizeFileName($objd->id); + $subdir=get_exdir(0, 0, 0, 0, $tmpdonation, 'donation'); + $subdir.=($subdir ? '/' : '').dol_sanitizeFileName($objd->id); $upload_dir = $conf->don->dir_output . '/' . $subdir; $link="document.php?modulepart=don&file=".str_replace('/', '%2F', $subdir).'%2F'; break; case "SocialContributions": - $subdir=dol_sanitizeFileName($objd->id); + $subdir = ''; + $subdir.=($subdir ? '/' : '').dol_sanitizeFileName($objd->id); $upload_dir = $conf->tax->dir_output . '/' . $subdir; $link="document.php?modulepart=tax&file=".str_replace('/', '%2F', $subdir).'%2F'; break; default: - $subdir=''; - $upload_dir=''; - $link=''; + $subdir = ''; + $upload_dir = ''; + $link = ''; break; } if (!empty($upload_dir)) { $result=true; + $files=dol_dir_list($upload_dir, "files", 0, '', '(\.meta|_preview\.png)$', '', SORT_ASC, 1); - //var_dump($upload_dir); + if (count($files) < 1) { $nofile['id']=$objd->id; $nofile['date']=$db->idate($objd->date); $nofile['paid']=$objd->paid; $nofile['amount']=$objd->total_ttc; - $nofile['ref']=$objd->ref; + $nofile['ref']=($objd->ref ? $objd->ref : $objd->id); $nofile['fk']=$objd->fk_soc; $nofile['item']=$objd->item; @@ -206,7 +213,7 @@ if(($action=="searchfiles" || $action=="dl" ) && $date_start && $date_stop) { $file['date']=$db->idate($objd->date); $file['paid']=$objd->paid; $file['amount']=$objd->total_ttc; - $file['ref']=$objd->ref; + $file['ref']=($objd->ref ? $objd->ref : $objd->id); $file['fk']=$objd->fk_soc; $file['item']=$objd->item; $file['link']=$link.$file['name']; @@ -300,42 +307,15 @@ print ''; print $langs->trans("ReportPeriod").': '.$form->selectDate($date_start, 'date_start', 0, 0, 0, "", 1, 1, 0); print ' - '.$form->selectDate($date_stop, 'date_stop', 0, 0, 0, "", 1, 1, 0)."\n"; -// Multicompany -/*if (! empty($conf->multicompany->enabled) && is_object($mc)) - { - print '
'; - // This is now done with hook formObjectOptions. Keep this code for backward compatibility with old multicompany module - if (method_exists($mc, 'formObjectOptions')) - { - if (empty($conf->global->MULTICOMPANY_TRANSVERSE_MODE) && $conf->entity == 1 && $user->admin && ! $user->entity) // condition must be same for create and edit mode - { - print "
".''; - print "\n"; - } - else - { - print ''; - } - } - $object = new stdClass(); - // Other attributes - $parameters=array('objectsrc' => null, 'colspan' => ' colspan="3"'); - $reshook=$hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook - print $hookmanager->resPrint; - if (empty($reshook)) - { - print $object->showOptionals($extrafields, 'edit'); - } - }*/ +// Export is for current company only ! if (! empty($conf->multicompany->enabled) && is_object($mc)) { - print '   -   '.$langs->trans("Entity").' : '; + print '('.$langs->trans("Entity").' : '; $mc->dao->getEntities(); $mc->dao->fetch($conf->entity); print $mc->dao->label; - print "
\n"; + print ")
\n"; } print ''."\n"; @@ -376,10 +356,10 @@ if (!empty($date_start) && !empty($date_stop)) print '
'; // You can use div-table-responsive-no-min if you dont need reserved height for your table print '
'; if (! empty($action->userownerid)) { - $userstatic->fetch($action->userownerid); // TODO Introduce a cache on users fetched - print $userstatic->getNomUrl(-1, '', 0, 0, 16, 0, 'firstelselast', ''); + if (is_object($cacheusers[$action->userownerid])) + { + $tmpuser = $cacheusers[$action->userownerid]; + } + else + { + $tmpuser = new User($this->db); + $tmpuser->fetch($action->userownerid); + $cacheusers[$action->userownerid] = $tmpuser; + } + if ($tmpuser->id > 0) + { + print $tmpuser->getNomUrl(-1, '', 0, 0, 16, 0, 'firstelselast', ''); + } } print ''; - if (! empty($action->author->id)) - { - print $action->getLibStatut(3); - } + print $action->getLibStatut(3); print '
'; - if (($customerstripe->default_source != $src->id)) + if ((empty($customerstripe->invoice_settings) && $customerstripe->default_source != $src->id) || + (! empty($customerstripe->invoice_settings) && $customerstripe->invoice_settings->default_payment_method != $src->id)) { print ''; print img_picto($langs->trans("Default"), 'off'); diff --git a/htdocs/stripe/class/stripe.class.php b/htdocs/stripe/class/stripe.class.php index de43c063922..dd66c7607e5 100644 --- a/htdocs/stripe/class/stripe.class.php +++ b/htdocs/stripe/class/stripe.class.php @@ -237,6 +237,33 @@ class Stripe extends CommonObject return $customer; } + /** + * Get the Stripe payment method Object from its ID + * + * @param string $paymentmethod Payment Method ID + * @param string $key ''=Use common API. If not '', it is the Stripe connect account 'acc_....' to use Stripe connect + * @param int $status Status (0=test, 1=live) + * @return \Stripe\PaymentMethod|null Stripe PaymentMethod or null if not found + */ + public function getPaymentMethodStripe($paymentmethod, $key = '', $status = 0) + { + try { + // Force to use the correct API key + global $stripearrayofkeysbyenv; + \Stripe\Stripe::setApiKey($stripearrayofkeysbyenv[$status]['secret_key']); + if (empty($key)) { // If the Stripe connect account not set, we use common API usage + $stripepaymentmethod = \Stripe\PaymentMethod::retrieve(''.$paymentmethod->id.''); + } else { + $stripepaymentmethod = \Stripe\PaymentMethod::retrieve(''.$paymentmethod->id.'', array("stripe_account" => $key)); + } + } + catch(Exception $e) + { + $this->error = $e->getMessage(); + } + return $stripepaymentmethod; + } + /** * Get the Stripe payment intent. Create it with confirm=false * Warning. If a payment was tried and failed, a payment intent was created. @@ -259,7 +286,7 @@ class Stripe extends CommonObject */ public function getPaymentIntent($amount, $currency_code, $tag, $description = '', $object = null, $customer = null, $key = null, $status = 0, $usethirdpartyemailforreceiptemail = 0, $mode = 'automatic', $confirmnow = false) { - global $conf, $user, $mysoc; + global $conf; dol_syslog("getPaymentIntent"); @@ -272,12 +299,14 @@ class Stripe extends CommonObject if (! in_array($currency_code, $arrayzerounitcurrency)) $stripeamount = $amount * 100; else $stripeamount = $amount; - $fee = round(($$stripeamount * ($conf->global->STRIPE_APPLICATION_FEE_PERCENT / 100) + $conf->global->STRIPE_APPLICATION_FEE) * 100); - if ($fee >= ($conf->global->STRIPE_APPLICATION_FEE_MAXIMAL * 100) && $conf->global->STRIPE_APPLICATION_FEE_MAXIMAL>$conf->global->STRIPE_APPLICATION_FEE_MINIMAL) { - $fee = round($conf->global->STRIPE_APPLICATION_FEE_MAXIMAL * 100); - } elseif ($fee < ($conf->global->STRIPE_APPLICATION_FEE_MINIMAL * 100)) { - $fee = round($conf->global->STRIPE_APPLICATION_FEE_MINIMAL * 100); + $fee = round($amount * ($conf->global->STRIPE_APPLICATION_FEE_PERCENT / 100) + $conf->global->STRIPE_APPLICATION_FEE); + if ($fee >= $conf->global->STRIPE_APPLICATION_FEE_MAXIMAL && $conf->global->STRIPE_APPLICATION_FEE_MAXIMAL > $conf->global->STRIPE_APPLICATION_FEE_MINIMAL) { + $fee = round($conf->global->STRIPE_APPLICATION_FEE_MAXIMAL); + } elseif ($fee < $conf->global->STRIPE_APPLICATION_FEE_MINIMAL) { + $fee = round($conf->global->STRIPE_APPLICATION_FEE_MINIMAL); } + if (! in_array($currency_code, $arrayzerounitcurrency)) $stripefee = $fee * 100; + else $stripefee = $fee; $paymentintent = null; @@ -352,9 +381,9 @@ class Stripe extends CommonObject // payment_method_types = array('card') //var_dump($dataforintent); - if ($conf->entity!=$conf->global->STRIPECONNECT_PRINCIPAL && $fee>0) + if ($conf->entity!=$conf->global->STRIPECONNECT_PRINCIPAL && $stripefee > 0) { - $dataforintent["application_fee"] = $fee; + $dataforintent["application_fee"] = $stripefee; } if ($usethirdpartyemailforreceiptemail && is_object($object) && $object->thirdparty->email) { @@ -461,8 +490,7 @@ class Stripe extends CommonObject $sql = "SELECT sa.stripe_card_ref, sa.proprio, sa.exp_date_month, sa.exp_date_year, sa.number, sa.cvn"; // stripe_card_ref is card_.... $sql.= " FROM " . MAIN_DB_PREFIX . "societe_rib as sa"; - $sql.= " WHERE sa.rowid = " . $object->id; - //$sql.= " AND sa.entity IN (".getEntity('societe').")"; + $sql.= " WHERE sa.rowid = " . $object->id; // We get record from ID, no need for filter on entity $sql.= " AND sa.type = 'card'"; dol_syslog(get_class($this) . "::fetch search stripe card id for paymentmode id=".$object->id.", stripeacc=".$stripeacc.", status=".$status.", createifnotlinkedtostripe=".$createifnotlinkedtostripe, LOG_DEBUG); @@ -660,13 +688,15 @@ class Stripe extends CommonObject $charge = \Stripe\Charge::create($paymentarray, array("idempotency_key" => "$description")); } } else { - $fee = round(($object->total_ttc * ($conf->global->STRIPE_APPLICATION_FEE_PERCENT / 100) + $conf->global->STRIPE_APPLICATION_FEE) * 100); - if ($fee >= ($conf->global->STRIPE_APPLICATION_FEE_MAXIMAL * 100) && $conf->global->STRIPE_APPLICATION_FEE_MAXIMAL>$conf->global->STRIPE_APPLICATION_FEE_MINIMAL) { - $fee = round($conf->global->STRIPE_APPLICATION_FEE_MAXIMAL * 100); + $fee = round($amount * ($conf->global->STRIPE_APPLICATION_FEE_PERCENT / 100) + $conf->global->STRIPE_APPLICATION_FEE); + if ($fee >= $conf->global->STRIPE_APPLICATION_FEE_MAXIMAL && $conf->global->STRIPE_APPLICATION_FEE_MAXIMAL > $conf->global->STRIPE_APPLICATION_FEE_MINIMAL) { + $fee = round($conf->global->STRIPE_APPLICATION_FEE_MAXIMAL); } - elseif ($fee < ($conf->global->STRIPE_APPLICATION_FEE_MINIMAL * 100)) { - $fee = round($conf->global->STRIPE_APPLICATION_FEE_MINIMAL * 100); + elseif ($fee < $conf->global->STRIPE_APPLICATION_FEE_MINIMAL) { + $fee = round($conf->global->STRIPE_APPLICATION_FEE_MINIMAL); } + if (! in_array($currency, $arrayzerounitcurrency)) $stripefee = $fee * 100; + else $stripefee = $fee; $paymentarray = array( "amount" => "$stripeamount", @@ -678,9 +708,9 @@ class Stripe extends CommonObject "source" => "$source", "customer" => "$customer" ); - if ($conf->entity!=$conf->global->STRIPECONNECT_PRINCIPAL && $fee>0) + if ($conf->entity!=$conf->global->STRIPECONNECT_PRINCIPAL && $stripefee > 0) { - $paymentarray["application_fee"] = $fee; + $paymentarray["application_fee"] = $stripefee; } if ($societe->email && $usethirdpartyemailforreceiptemail) { From efb9a30ec16c800c527df927e97a1248710aeaae Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 16 Jun 2019 17:17:07 +0200 Subject: [PATCH 256/828] Fix compatibility with payment modes --- htdocs/societe/paymentmodes.php | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/htdocs/societe/paymentmodes.php b/htdocs/societe/paymentmodes.php index 24329a48a33..6a3596f6e24 100644 --- a/htdocs/societe/paymentmodes.php +++ b/htdocs/societe/paymentmodes.php @@ -614,8 +614,14 @@ if (empty($reshook)) { try { $cu=$stripe->customerStripe($object, $stripeacc, $servicestatus); - $cu->default_source = (string) $source; // Old - $cu->invoice_settings->default_payment_method = (string) $source; // New + if (preg_match('/pm_/', $source)) + { + $cu->invoice_settings->default_payment_method = (string) $source; // New + } + else + { + $cu->default_source = (string) $source; // Old + } $result = $cu->save(); $url=DOL_URL_ROOT.'/societe/paymentmodes.php?socid='.$object->id; From badfd47ee79122c46e6f5a3e4ef2f3570156051f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 16 Jun 2019 17:25:42 +0200 Subject: [PATCH 257/828] Fix migration --- htdocs/install/mysql/migration/9.0.0-10.0.0.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql index e353f317b45..40f7da3fa95 100644 --- a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql +++ b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql @@ -228,6 +228,7 @@ CREATE TABLE llx_bom_bom( ALTER TABLE llx_bom_bom ADD COLUMN efficiency double(8,4) DEFAULT 1; ALTER TABLE llx_bom_bom ADD COLUMN entity integer DEFAULT 1 NOT NULL; +ALTER TABLE llx_bom_bom ADD COLUMN date_valid datetime; create table llx_bom_bom_extrafields ( @@ -254,7 +255,6 @@ CREATE TABLE llx_bom_bomline( ALTER TABLE llx_bom_bomline ADD COLUMN efficiency double(8,4) DEFAULT 1; ALTER TABLE llx_bom_bomline ADD COLUMN fk_bom_child integer NULL; - create table llx_bom_bomline_extrafields ( rowid integer AUTO_INCREMENT PRIMARY KEY, From dd5e42e3253b22d69a0c465e101a97e6f0871dc7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 16 Jun 2019 22:17:04 +0200 Subject: [PATCH 258/828] FIX #11325 FIX #5249 --- htdocs/projet/tasks/time.php | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/htdocs/projet/tasks/time.php b/htdocs/projet/tasks/time.php index f3da816fabd..766c2b38e2d 100644 --- a/htdocs/projet/tasks/time.php +++ b/htdocs/projet/tasks/time.php @@ -467,7 +467,7 @@ if (($id > 0 || ! empty($ref)) || $projectidforalltimes > 0) $object->project = clone $projectstatic; } - $userWrite = $projectstatic->restrictedProjectArea($user, 'write'); + $userRead = $projectstatic->restrictedProjectArea($user, 'read'); $linktocreatetime = ''; if ($projectstatic->id > 0) @@ -582,9 +582,9 @@ if (($id > 0 || ! empty($ref)) || $projectidforalltimes > 0) $linktocreatetimeBtnStatus = 0; $linktocreatetimeUrl = ''; $linktocreatetimeHelpText = ''; - if ($user->rights->projet->all->creer || $user->rights->projet->creer) + if ($user->rights->projet->all->lire || $user->rights->projet->lire) // To enter time, read permission is enough { - if ($projectstatic->public || $userWrite > 0) + if ($projectstatic->public || $userRead > 0) { $linktocreatetimeBtnStatus = 1; @@ -1017,7 +1017,12 @@ if (($id > 0 || ! empty($ref)) || $projectidforalltimes > 0) // Duration - Time spent print ''; - print $form->select_duration('timespent_duration', ($_POST['timespent_duration']?$_POST['timespent_duration']:''), 0, 'text'); + $durationtouse = ($_POST['timespent_duration']?$_POST['timespent_duration']:''); + if (GETPOSTISSET('timespent_durationhour') || GETPOSTISSET('timespent_durationmin')) + { + $durationtouse = (GETPOST('timespent_durationhour') * 3600 + GETPOST('timespent_durationmin') * 60); + } + print $form->select_duration('timespent_duration', $durationtouse, 0, 'text'); print ''; - print $form->select_duration('timespent_duration', ($_POST['timespent_duration']?$_POST['timespent_duration']:''), 0, 'text'); + $durationtouse = ($_POST['timespent_duration']?$_POST['timespent_duration']:''); + if (GETPOSTISSET('timespent_durationhour') || GETPOSTISSET('timespent_durationmin')) + { + $durationtouse = (GETPOST('timespent_durationhour') * 3600 + GETPOST('timespent_durationmin') * 60); + } + print $form->select_duration('timespent_duration', $durationtouse, 0, 'text'); print '
'.$form->editfieldkey('ProspectCustomer', 'customerprospect', '', $object, 0, 'string', '', 1).''; - $selected=GETPOST('client', 'int')!=''?GETPOST('client', 'int'):$object->client; + $selected=(GETPOSTISSET('client', 'int')?GETPOST('client', 'int'):$object->client); print $formcompany->selectProspectCustomerType($selected); print '
'.$langs->trans("Entity").'".$mc->select_entities($entity); - print "
'; print ''; - print_liste_field_titre($arrayfields['date']['label'], $_SERVER["PHP_SELF"], "date", "", $param, 'align="center" class="nowrap"', $sortfield, $sortorder); + print_liste_field_titre($arrayfields['date']['label'], $_SERVER["PHP_SELF"], "date", "", $param, 'class="nowrap"', $sortfield, $sortorder); print ''; print ''; - print ''; + print ''; print ''; print ''; print ''; @@ -402,12 +382,10 @@ if (!empty($date_start) && !empty($date_stop)) // Balance calculation $balance = 0; foreach($TData as &$data1) { - if ($data1['item']!='Invoice'&& $data1['item']!='Donation' ){ + if ($data1['item']!='Invoice' && $data1['item']!='Donation') + { $data1['amount']=-$data1['amount']; } - if ($data1['amount']>0){ - }else{ - } $balance += $data1['amount']; $data1['balance'] = $balance; } @@ -419,14 +397,19 @@ if (!empty($date_start) && !empty($date_stop)) //if (!empty($data['fk_facture'])) $html_class = 'facid-'.$data['fk_facture']; //elseif (!empty($data['fk_paiement'])) $html_class = 'payid-'.$data['fk_paiement']; print ''; - print "\n"; print ''; print ''; // File link - print '\n"; + print '\n"; print ''; print '\n"; diff --git a/htdocs/core/menus/init_menu_auguria.sql b/htdocs/core/menus/init_menu_auguria.sql index 3a4ec85ec58..c7b2c8a69a7 100644 --- a/htdocs/core/menus/init_menu_auguria.sql +++ b/htdocs/core/menus/init_menu_auguria.sql @@ -281,6 +281,8 @@ insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, left insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->accounting->enabled', __HANDLER__, 'left', 2430__+MAX_llx_menu__, 'accountancy', 'bookkeeping', 2400__+MAX_llx_menu__, '/accountancy/bookkeeping/list.php?mainmenu=accountancy&leftmenu=accountancy_bookeeping', 'Bookkeeping', 1, 'accountancy', '$user->rights->accounting->mouvements->lire', '', 0, 15, __ENTITY__); -- Balance insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->accounting->enabled', __HANDLER__, 'left', 2435__+MAX_llx_menu__, 'accountancy', 'balance', 2400__+MAX_llx_menu__, '/accountancy/bookkeeping/balance.php?mainmenu=accountancy&leftmenu=accountancy_balance', 'AccountBalance', 1, 'accountancy', '$user->rights->accounting->mouvements->lire', '', 0, 16, __ENTITY__); + -- Export accounting documents + insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->accounting->enabled', __HANDLER__, 'left', 2436__+MAX_llx_menu__, 'accountancy', 'accountancy_files', 2400__+MAX_llx_menu__, '/compta/compta-files.php?mainmenu=accountancy&leftmenu=accountancy_files', 'AccountantFiles', 1, 'accountancy', '$user->rights->accounting->mouvements->lire', '', 0, 17, __ENTITY__); -- Reports insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->accounting->enabled', __HANDLER__, 'left', 2440__+MAX_llx_menu__, 'accountancy', 'accountancy_report', 2400__+MAX_llx_menu__, '/compta/resultat/index.php?mainmenu=accountancy&leftmenu=accountancy_report', 'Reportings', 1, 'main', '$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire', '', 0, 17, __ENTITY__); insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->accounting->enabled && $leftmenu=="accountancy_report"', __HANDLER__, 'left', 2441__+MAX_llx_menu__, 'accountancy', 'accountancy_report', 2440__+MAX_llx_menu__, '/compta/resultat/index.php?mainmenu=accountancy&leftmenu=accountancy_report', 'MenuReportInOut', 2, 'main', '$user->rights->compta->resultat->lire || $user->rights->accounting->comptarapport->lire', '', 0, 18, __ENTITY__); From 08d5ca4ddbc47fcbcddf94a471657dda1e81cb9e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 17 Jun 2019 17:53:43 +0200 Subject: [PATCH 271/828] Debug page to export accounting documents --- htdocs/admin/delais.php | 1 - htdocs/admin/mails_emailing.php | 3 +- htdocs/admin/menus/edit.php | 1 - htdocs/admin/sms.php | 2 +- htdocs/cashdesk/css/style.css | 2 +- ...{compta-files.php => accounting-files.php} | 292 ++++++++++-------- htdocs/core/menus/standard/eldy.lib.php | 8 +- htdocs/expensereport/list.php | 2 +- htdocs/fourn/facture/card.php | 2 +- htdocs/holiday/card.php | 5 +- htdocs/holiday/list.php | 3 +- .../modulebuilder/template/myobject_card.php | 1 + htdocs/opensurvey/results.php | 2 +- htdocs/opensurvey/wizard/choix_date.php | 10 +- htdocs/opensurvey/wizard/create_survey.php | 2 +- htdocs/product/admin/product_tools.php | 3 +- htdocs/theme/eldy/btn.inc.php | 2 +- htdocs/theme/eldy/global.inc.php | 2 +- htdocs/theme/md/style.css.php | 4 +- 19 files changed, 188 insertions(+), 159 deletions(-) rename htdocs/compta/{compta-files.php => accounting-files.php} (60%) diff --git a/htdocs/admin/delais.php b/htdocs/admin/delais.php index 1d05d5e0afe..6b46468b916 100644 --- a/htdocs/admin/delais.php +++ b/htdocs/admin/delais.php @@ -418,7 +418,6 @@ if($action == 'edit') { print '
'; } else { - // Boutons d'action print '
'; } diff --git a/htdocs/admin/mails_emailing.php b/htdocs/admin/mails_emailing.php index 1e54fdea3dd..12076a00579 100644 --- a/htdocs/admin/mails_emailing.php +++ b/htdocs/admin/mails_emailing.php @@ -493,7 +493,8 @@ else } - // Boutons actions + // Buttons for actions + print '
'; print ''.$langs->trans("Modify").''; diff --git a/htdocs/admin/menus/edit.php b/htdocs/admin/menus/edit.php index b4f5fbd3355..cf42f294d03 100644 --- a/htdocs/admin/menus/edit.php +++ b/htdocs/admin/menus/edit.php @@ -415,7 +415,6 @@ if ($action == 'create') dol_fiche_end(); - // Boutons print '
'; print ''; print '     '; diff --git a/htdocs/admin/sms.php b/htdocs/admin/sms.php index 2fb1e5a8a29..d6f2ee170d8 100644 --- a/htdocs/admin/sms.php +++ b/htdocs/admin/sms.php @@ -243,7 +243,7 @@ else print '
'.$langs->trans("Type").''.$langs->trans("Ref").''.$langs->trans("Link").''.$langs->trans("Document").''.$langs->trans("Paid").''.$langs->trans("Debit").''.$langs->trans("Credit").'
"; + print ""; print dol_print_date($data['date'], 'day'); print "'.$langs->trans($data['item']).''.$data['ref'].'".$data['name']."'; + if ($data['link']) + { + print ''.($data['name'] ? $data['name'] : $data['ref']).''; + } + print "'.$data['paid'].''.(($data['amount'] > 0) ? price(abs($data['amount'])) : '')."
'; - // Boutons actions + // Buttons for actions print '
'; diff --git a/htdocs/cashdesk/css/style.css b/htdocs/cashdesk/css/style.css index dc579711aa3..9d9be27f3ce 100644 --- a/htdocs/cashdesk/css/style.css +++ b/htdocs/cashdesk/css/style.css @@ -320,7 +320,7 @@ p.titre { padding: 2px 2px; } -/* -------------- Boutons --------------------- */ +/* -------------- Buttons for SimplePOS --------------------- */ .bouton_ajout_article { margin-top: 10px; width: 60%; diff --git a/htdocs/compta/compta-files.php b/htdocs/compta/accounting-files.php similarity index 60% rename from htdocs/compta/compta-files.php rename to htdocs/compta/accounting-files.php index 656824298fe..5a3097f6aa8 100644 --- a/htdocs/compta/compta-files.php +++ b/htdocs/compta/accounting-files.php @@ -1,6 +1,6 @@ - * Copyright (C) 2004-2018 Laurent Destailleur + * Copyright (C) 2004-2019 Laurent Destailleur * Copyright (C) 2017 Pierre-Henry Favre * * This program is free software; you can redistribute it and/or modify @@ -16,11 +16,13 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -/** - * \file htdocs/compta/compta-files.php + + /** + * \file htdocs/compta/accounting-files.php * \ingroup compta * \brief Page to show portoflio and files of a thirdparty and download it */ + require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; @@ -89,149 +91,165 @@ $entity = GETPOST('entity', 'int')?GETPOST('entity', 'int'):$conf->entity; $filesarray=array(); $result=false; -if(($action=="searchfiles" || $action=="dl" ) && $date_start && $date_stop) { - $wheretail=" '".$db->idate($date_start)."' AND '".$db->idate($date_stop)."'"; - $sql="SELECT rowid as id, ref as ref, paye as paid, total_ttc, fk_soc, datef as date, 'Invoice' as item FROM ".MAIN_DB_PREFIX."facture"; - $sql.=" WHERE datef between ".$wheretail; - $sql.=" AND entity IN (".($entity==1?'0,1':$entity).')'; - $sql.=" AND fk_statut <> ".Facture::STATUS_DRAFT; - $sql.=" UNION ALL"; - $sql.=" SELECT rowid as id, ref, paye as paid, total_ttc, fk_soc, datef as date, 'SupplierInvoice' as item FROM ".MAIN_DB_PREFIX."facture_fourn"; - $sql.=" WHERE datef between ".$wheretail; - $sql.=" AND entity IN (".($entity==1?'0,1':$entity).')'; - $sql.=" AND fk_statut <> ".FactureFournisseur::STATUS_DRAFT; - $sql.=" UNION ALL"; - $sql.=" SELECT rowid as id, ref, paid, total_ttc, fk_user_author as fk_soc, date_fin as date, 'ExpenseReport' as item FROM ".MAIN_DB_PREFIX."expensereport"; - $sql.=" WHERE date_fin between ".$wheretail; - $sql.=" AND entity IN (".($entity==1?'0,1':$entity).')'; - $sql.=" AND fk_statut <> ".ExpenseReport::STATUS_DRAFT; - $sql.=" UNION ALL"; - $sql.=" SELECT rowid as id, ref, paid, amount as total_ttc, '0' as fk_soc, datedon as date, 'Donation' as item FROM ".MAIN_DB_PREFIX."don"; - $sql.=" WHERE datedon between ".$wheretail; - $sql.=" AND entity IN (".($entity==1?'0,1':$entity).')'; - $sql.=" AND fk_statut <> ".Don::STATUS_DRAFT; - $sql.=" UNION ALL"; - $sql.=" SELECT rowid as id, label as ref, 1 as paid, amount as total_ttc, fk_user as fk_soc,datep as date, 'SalaryPayment' as item FROM ".MAIN_DB_PREFIX."payment_salary"; - $sql.=" WHERE datep between ".$wheretail; - $sql.=" AND entity IN (".($entity==1?'0,1':$entity).')'; - //$sql.=" AND fk_statut <> ".PaymentSalary::STATUS_DRAFT; - $sql.=" UNION ALL"; - $sql.=" SELECT rowid as id, libelle as ref, paye as paid, amount as total_ttc, 0 as fk_soc, date_creation as date, 'SocialContributions' as item FROM ".MAIN_DB_PREFIX."chargesociales"; - $sql.=" WHERE date_creation between ".$wheretail; - $sql.=" AND entity IN (".($entity==1?'0,1':$entity).')'; - //$sql.=" AND fk_statut <> ".ChargeSociales::STATUS_DRAFT; - $sql.= $db->order($sortfield, $sortorder); +if (($action=="searchfiles" || $action=="dl" )) { - $resd = $db->query($sql); - $files=array(); - $link=''; + if (empty($date_start)) + { + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("DateStart")), null, 'errors'); + $error++; + } + if (empty($date_stop)) + { + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("DateEnd")), null, 'errors'); + $error++; + } - if ($resd) - { - $numd = $db->num_rows($resd); + if (! $error) + { + $wheretail=" '".$db->idate($date_start)."' AND '".$db->idate($date_stop)."'"; - $tmpinvoice=new Facture($db); - $tmpinvoicesupplier=new FactureFournisseur($db); - $tmpdonation=new Don($db); + $sql="SELECT rowid as id, ref as ref, paye as paid, total_ttc, fk_soc, datef as date, 'Invoice' as item FROM ".MAIN_DB_PREFIX."facture"; + $sql.=" WHERE datef between ".$wheretail; + $sql.=" AND entity IN (".($entity==1?'0,1':$entity).')'; + $sql.=" AND fk_statut <> ".Facture::STATUS_DRAFT; + $sql.=" UNION ALL"; + $sql.=" SELECT rowid as id, ref, paye as paid, total_ttc, fk_soc, datef as date, 'SupplierInvoice' as item FROM ".MAIN_DB_PREFIX."facture_fourn"; + $sql.=" WHERE datef between ".$wheretail; + $sql.=" AND entity IN (".($entity==1?'0,1':$entity).')'; + $sql.=" AND fk_statut <> ".FactureFournisseur::STATUS_DRAFT; + $sql.=" UNION ALL"; + $sql.=" SELECT rowid as id, ref, paid, total_ttc, fk_user_author as fk_soc, date_fin as date, 'ExpenseReport' as item FROM ".MAIN_DB_PREFIX."expensereport"; + $sql.=" WHERE date_fin between ".$wheretail; + $sql.=" AND entity IN (".($entity==1?'0,1':$entity).')'; + $sql.=" AND fk_statut <> ".ExpenseReport::STATUS_DRAFT; + $sql.=" UNION ALL"; + $sql.=" SELECT rowid as id, ref, paid, amount as total_ttc, '0' as fk_soc, datedon as date, 'Donation' as item FROM ".MAIN_DB_PREFIX."don"; + $sql.=" WHERE datedon between ".$wheretail; + $sql.=" AND entity IN (".($entity==1?'0,1':$entity).')'; + $sql.=" AND fk_statut <> ".Don::STATUS_DRAFT; + $sql.=" UNION ALL"; + $sql.=" SELECT rowid as id, label as ref, 1 as paid, amount as total_ttc, fk_user as fk_soc,datep as date, 'SalaryPayment' as item FROM ".MAIN_DB_PREFIX."payment_salary"; + $sql.=" WHERE datep between ".$wheretail; + $sql.=" AND entity IN (".($entity==1?'0,1':$entity).')'; + //$sql.=" AND fk_statut <> ".PaymentSalary::STATUS_DRAFT; + $sql.=" UNION ALL"; + $sql.=" SELECT rowid as id, libelle as ref, paye as paid, amount as total_ttc, 0 as fk_soc, date_creation as date, 'SocialContributions' as item FROM ".MAIN_DB_PREFIX."chargesociales"; + $sql.=" WHERE date_creation between ".$wheretail; + $sql.=" AND entity IN (".($entity==1?'0,1':$entity).')'; + //$sql.=" AND fk_statut <> ".ChargeSociales::STATUS_DRAFT; + $sql.= $db->order($sortfield, $sortorder); - $upload_dir =''; - $i=0; - while ($i < $numd) - { - $objd = $db->fetch_object($resd); + $resd = $db->query($sql); + $files=array(); + $link=''; - switch($objd->item) - { - case "Invoice": - $subdir = ''; - $subdir.=($subdir ? '/' : '').dol_sanitizeFileName($objd->ref); - $upload_dir = $conf->facture->dir_output.'/'.$subdir; - $link="document.php?modulepart=facture&file=".str_replace('/', '%2F', $subdir).'%2F'; - break; - case "SupplierInvoice": - $tmpinvoicesupplier->fetch($objd->id); - $subdir = get_exdir($tmpinvoicesupplier->id, 2, 0, 1, $tmpinvoicesupplier, 'invoice_supplier'); // TODO Use first file - $subdir.=($subdir ? '/' : '').dol_sanitizeFileName($objd->ref); - $upload_dir = $conf->fournisseur->facture->dir_output.'/'.$subdir; - $link="document.php?modulepart=facture_fournisseur&file=".str_replace('/', '%2F', $subdir).'%2F'; - break; - case "ExpenseReport": - $subdir = ''; - $subdir.=($subdir ? '/' : '').dol_sanitizeFileName($objd->ref); - $upload_dir = $conf->expensereport->dir_output.'/'.$subdir; - $link="document.php?modulepart=expensereport&file=".str_replace('/', '%2F', $subdir).'%2F'; - break; - case "SalaryPayment": - $subdir = ''; - $subdir.=($subdir ? '/' : '').dol_sanitizeFileName($objd->id); - $upload_dir = $conf->salaries->dir_output.'/'.$subdir; - $link="document.php?modulepart=salaries&file=".str_replace('/', '%2F', $subdir).'%2F'; - break; - case "Donation": - $tmpdonation->fetch($objp->id); - $subdir=get_exdir(0, 0, 0, 0, $tmpdonation, 'donation'); - $subdir.=($subdir ? '/' : '').dol_sanitizeFileName($objd->id); - $upload_dir = $conf->don->dir_output . '/' . $subdir; - $link="document.php?modulepart=don&file=".str_replace('/', '%2F', $subdir).'%2F'; - break; - case "SocialContributions": - $subdir = ''; - $subdir.=($subdir ? '/' : '').dol_sanitizeFileName($objd->id); - $upload_dir = $conf->tax->dir_output . '/' . $subdir; - $link="document.php?modulepart=tax&file=".str_replace('/', '%2F', $subdir).'%2F'; - break; - default: - $subdir = ''; - $upload_dir = ''; - $link = ''; - break; - } + if ($resd) + { + $numd = $db->num_rows($resd); - if (!empty($upload_dir)) - { - $result=true; + $tmpinvoice=new Facture($db); + $tmpinvoicesupplier=new FactureFournisseur($db); + $tmpdonation=new Don($db); - $files=dol_dir_list($upload_dir, "files", 0, '', '(\.meta|_preview\.png)$', '', SORT_ASC, 1); + $upload_dir =''; + $i=0; + while ($i < $numd) + { + $objd = $db->fetch_object($resd); - if (count($files) < 1) - { - $nofile['id']=$objd->id; - $nofile['date']=$db->idate($objd->date); - $nofile['paid']=$objd->paid; - $nofile['amount']=$objd->total_ttc; - $nofile['ref']=($objd->ref ? $objd->ref : $objd->id); - $nofile['fk']=$objd->fk_soc; - $nofile['item']=$objd->item; + switch($objd->item) + { + case "Invoice": + $subdir = ''; + $subdir.=($subdir ? '/' : '').dol_sanitizeFileName($objd->ref); + $upload_dir = $conf->facture->dir_output.'/'.$subdir; + $link="document.php?modulepart=facture&file=".str_replace('/', '%2F', $subdir).'%2F'; + break; + case "SupplierInvoice": + $tmpinvoicesupplier->fetch($objd->id); + $subdir = get_exdir($tmpinvoicesupplier->id, 2, 0, 1, $tmpinvoicesupplier, 'invoice_supplier'); // TODO Use first file + $subdir.=($subdir ? '/' : '').dol_sanitizeFileName($objd->ref); + $upload_dir = $conf->fournisseur->facture->dir_output.'/'.$subdir; + $link="document.php?modulepart=facture_fournisseur&file=".str_replace('/', '%2F', $subdir).'%2F'; + break; + case "ExpenseReport": + $subdir = ''; + $subdir.=($subdir ? '/' : '').dol_sanitizeFileName($objd->ref); + $upload_dir = $conf->expensereport->dir_output.'/'.$subdir; + $link="document.php?modulepart=expensereport&file=".str_replace('/', '%2F', $subdir).'%2F'; + break; + case "SalaryPayment": + $subdir = ''; + $subdir.=($subdir ? '/' : '').dol_sanitizeFileName($objd->id); + $upload_dir = $conf->salaries->dir_output.'/'.$subdir; + $link="document.php?modulepart=salaries&file=".str_replace('/', '%2F', $subdir).'%2F'; + break; + case "Donation": + $tmpdonation->fetch($objp->id); + $subdir=get_exdir(0, 0, 0, 0, $tmpdonation, 'donation'); + $subdir.=($subdir ? '/' : '').dol_sanitizeFileName($objd->id); + $upload_dir = $conf->don->dir_output . '/' . $subdir; + $link="document.php?modulepart=don&file=".str_replace('/', '%2F', $subdir).'%2F'; + break; + case "SocialContributions": + $subdir = ''; + $subdir.=($subdir ? '/' : '').dol_sanitizeFileName($objd->id); + $upload_dir = $conf->tax->dir_output . '/' . $subdir; + $link="document.php?modulepart=tax&file=".str_replace('/', '%2F', $subdir).'%2F'; + break; + default: + $subdir = ''; + $upload_dir = ''; + $link = ''; + break; + } - $filesarray[]=$nofile; - } - else - { - foreach ($files as $key => $file) - { - $file['id']=$objd->id; - $file['date']=$db->idate($objd->date); - $file['paid']=$objd->paid; - $file['amount']=$objd->total_ttc; - $file['ref']=($objd->ref ? $objd->ref : $objd->id); - $file['fk']=$objd->fk_soc; - $file['item']=$objd->item; - $file['link']=$link.$file['name']; - $file['relpathnamelang'] = $langs->trans($file['item']).'/'.$file['name']; + if (!empty($upload_dir)) + { + $result=true; - $filesarray[]=$file; - } - } - } - $i++; - } - } - else - { - dol_print_error($db); - } + $files=dol_dir_list($upload_dir, "files", 0, '', '(\.meta|_preview\.png)$', '', SORT_ASC, 1); - $db->free($resd); + if (count($files) < 1) + { + $nofile['id']=$objd->id; + $nofile['date']=$db->idate($objd->date); + $nofile['paid']=$objd->paid; + $nofile['amount']=$objd->total_ttc; + $nofile['ref']=($objd->ref ? $objd->ref : $objd->id); + $nofile['fk']=$objd->fk_soc; + $nofile['item']=$objd->item; + + $filesarray[]=$nofile; + } + else + { + foreach ($files as $key => $file) + { + $file['id']=$objd->id; + $file['date']=$db->idate($objd->date); + $file['paid']=$objd->paid; + $file['amount']=$objd->total_ttc; + $file['ref']=($objd->ref ? $objd->ref : $objd->id); + $file['fk']=$objd->fk_soc; + $file['item']=$objd->item; + $file['link']=$link.$file['name']; + $file['relpathnamelang'] = $langs->trans($file['item']).'/'.$file['name']; + + $filesarray[]=$file; + } + } + } + $i++; + } + } + else + { + dol_print_error($db); + } + + $db->free($resd); + } } /* @@ -318,7 +336,9 @@ if (! empty($conf->multicompany->enabled) && is_object($mc)) print ")\n"; } -print ''."\n"; +print ''; + +print ''."\n"; dol_fiche_end(); diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index 3576f35642e..7518093bf77 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -1287,7 +1287,7 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM // Files if (! empty($conf->global->MAIN_FEATURES_LEVEL) && $conf->global->MAIN_FEATURES_LEVEL >= 1) { - $newmenu->add("/compta/compta-files.php?mainmenu=accountancy&leftmenu=accountancy_files", $langs->trans("AccountantFiles"), 1, $user->rights->accounting->mouvements->lire); + $newmenu->add("/compta/accounting-files.php?mainmenu=accountancy&leftmenu=accountancy_files", $langs->trans("AccountantFiles"), 1, $user->rights->accounting->mouvements->lire); } // Reports @@ -1329,6 +1329,12 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM // Accountancy (simple) if (! empty($conf->comptabilite->enabled)) { + // Files + if (! empty($conf->global->MAIN_FEATURES_LEVEL) && $conf->global->MAIN_FEATURES_LEVEL >= 1) + { + $newmenu->add("/compta/accounting-files.php?mainmenu=accountancy&leftmenu=accountancy_files", $langs->trans("AccountantFiles"), 0, $user->rights->compta->resultat->lire, '', $mainmenu, 'files'); + } + // Bilan, resultats $newmenu->add("/compta/resultat/index.php?leftmenu=report&mainmenu=accountancy", $langs->trans("Reportings"), 0, $user->rights->compta->resultat->lire, '', $mainmenu, 'ca'); diff --git a/htdocs/expensereport/list.php b/htdocs/expensereport/list.php index 94033912a69..34cbdfe89bd 100644 --- a/htdocs/expensereport/list.php +++ b/htdocs/expensereport/list.php @@ -434,7 +434,7 @@ if ($resql) $canedit=((in_array($user_id, $childids) && $user->rights->expensereport->creer) || ($conf->global->MAIN_USE_ADVANCED_PERMS && $user->rights->expensereport->writeall_advance)); - // Boutons d'actions + // Buttons for actions if ($canedit) { print ''.$langs->trans("AddTrip").''; diff --git a/htdocs/fourn/facture/card.php b/htdocs/fourn/facture/card.php index 2cd27d6d688..1eb38cec66c 100644 --- a/htdocs/fourn/facture/card.php +++ b/htdocs/fourn/facture/card.php @@ -3021,7 +3021,7 @@ else if ($action != 'presend') { /* - * Boutons actions + * Buttons actions */ print '
'; diff --git a/htdocs/holiday/card.php b/htdocs/holiday/card.php index 6c4cb05a17e..c67daf8f92b 100644 --- a/htdocs/holiday/card.php +++ b/htdocs/holiday/card.php @@ -1391,9 +1391,10 @@ else if (! $edit) { - print '
'; + // Buttons for actions + + print '
'; - // Boutons d'actions if ($cancreate && $object->statut == Holiday::STATUS_DRAFT) { print ''.$langs->trans("EditCP").''; diff --git a/htdocs/holiday/list.php b/htdocs/holiday/list.php index 84e7b36c239..ce038709fcf 100644 --- a/htdocs/holiday/list.php +++ b/htdocs/holiday/list.php @@ -319,11 +319,12 @@ if ($id > 0) // For user tab dol_fiche_end(); + // Buttons for actions + print '
'; $canedit=(($user->id == $user_id && $user->rights->holiday->write) || ($user->id != $user_id && $user->rights->holiday->write_all)); - // Boutons d'actions if ($canedit) { print ''.$langs->trans("AddCP").''; diff --git a/htdocs/modulebuilder/template/myobject_card.php b/htdocs/modulebuilder/template/myobject_card.php index da6f3c5a466..cc2eb5062cb 100644 --- a/htdocs/modulebuilder/template/myobject_card.php +++ b/htdocs/modulebuilder/template/myobject_card.php @@ -421,6 +421,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea // Buttons for actions + if ($action != 'presend' && $action != 'editline') { print '
'."\n"; $parameters=array(); diff --git a/htdocs/opensurvey/results.php b/htdocs/opensurvey/results.php index 076461043b8..c648b15664e 100644 --- a/htdocs/opensurvey/results.php +++ b/htdocs/opensurvey/results.php @@ -619,7 +619,7 @@ print ''."\n"; print ''."\n"; print ''."\n"; -//boucle pour l'affichage des boutons de suppression de colonne +// loop to show the delete link if ($user->rights->opensurvey->write) { for ($i = 0; isset($toutsujet[$i]); $i++) { diff --git a/htdocs/opensurvey/wizard/choix_date.php b/htdocs/opensurvey/wizard/choix_date.php index 8840da3f3e7..76f390c470b 100644 --- a/htdocs/opensurvey/wizard/choix_date.php +++ b/htdocs/opensurvey/wizard/choix_date.php @@ -471,7 +471,7 @@ for ($i = 0; $i < $nbrejourmois + $premierjourmois; $i++) { { $nbofchoice=count($_SESSION["totalchoixjour"]); for ($j = 0; $j < $nbofchoice; $j++) { - //affichage des boutons ROUGES + // show red buttons if (date("j", $_SESSION["totalchoixjour"][$j]) == $numerojour && date("n", $_SESSION["totalchoixjour"][$j]) == $_SESSION["mois"] && date("Y", $_SESSION["totalchoixjour"][$j]) == $_SESSION["annee"]) { print ''."\n"; $dejafait = $numerojour; @@ -479,13 +479,13 @@ for ($i = 0; $i < $nbrejourmois + $premierjourmois; $i++) { } } - //Si pas de bouton ROUGE alors on affiche un bouton VERT ou GRIS avec le numéro du jour dessus + // If no red button, we show green or grey button with number of day if (isset($dejafait) === false || $dejafait != $numerojour){ - //bouton vert + // green button if (($numerojour >= $jourAJ && $_SESSION["mois"] == $moisAJ && $_SESSION["annee"] == $anneeAJ) || ($_SESSION["mois"] > $moisAJ && $_SESSION["annee"] == $anneeAJ) || $_SESSION["annee"] > $anneeAJ) { print ''."\n"; } else { - //bouton gris + // grey button print ''.$numerojour.''."\n"; } } @@ -547,7 +547,7 @@ if (issetAndNoEmpty('totalchoixjour', $_SESSION) || $erreur) print ''."\n"; - //affichage des boutons de formulaire pour annuler, effacer les jours ou créer le sondage + // show buttons to cancel, delete days or create survey print ''."\n"; print ''."\n"; print ''."\n"; diff --git a/htdocs/opensurvey/wizard/create_survey.php b/htdocs/opensurvey/wizard/create_survey.php index 0c746fcf8b2..c2e6db1a709 100644 --- a/htdocs/opensurvey/wizard/create_survey.php +++ b/htdocs/opensurvey/wizard/create_survey.php @@ -194,7 +194,7 @@ if (GETPOST('choix_sondage')) } else { - // affichage des boutons pour choisir sondage date ou autre + // Show image to selecte between date survey or other survey print '
'."\n"; print ' '."\n"; print ''."\n"; diff --git a/htdocs/product/admin/product_tools.php b/htdocs/product/admin/product_tools.php index e76c6884b7f..cfbedbcb7f1 100644 --- a/htdocs/product/admin/product_tools.php +++ b/htdocs/product/admin/product_tools.php @@ -333,7 +333,8 @@ else print '
'; - // Boutons actions + // Buttons for actions + print '
'; print ''; print '
'; diff --git a/htdocs/theme/eldy/btn.inc.php b/htdocs/theme/eldy/btn.inc.php index c0cd029126d..1d00718401b 100644 --- a/htdocs/theme/eldy/btn.inc.php +++ b/htdocs/theme/eldy/btn.inc.php @@ -5,7 +5,7 @@ if (! defined('ISLOADEDBYSTEELSHEET')) die('Must be call by steelsheet'); ?> /* ============================================================================== */ -/* Boutons actions */ +/* Buttons for actions */ /* ============================================================================== */ div.divButAction { diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index e5e68e59c48..9061595dd1d 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -2362,7 +2362,7 @@ span.tabspan { } /* ============================================================================== */ -/* Boutons actions */ +/* Buttons for actions */ /* ============================================================================== */ diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 752f60541d1..8020a490181 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -2400,7 +2400,7 @@ div.tabBar table.tableforservicepart2:last-child { } /* ============================================================================== */ -/* Boutons actions */ +/* Buttons for actions */ /* ============================================================================== */ div.divButAction { @@ -2503,7 +2503,7 @@ span.tabspan { } /* ============================================================================== */ -/* Boutons actions */ +/* Buttons for actions */ /* ============================================================================== */ div.divButAction { From f6f66f2a77ed56e5dc2798fc92792d29d59c11b8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 17 Jun 2019 18:11:38 +0200 Subject: [PATCH 272/828] Fix syntax error --- htdocs/projet/tasks/time.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/projet/tasks/time.php b/htdocs/projet/tasks/time.php index e69f4fcd899..f98c9c4ace5 100644 --- a/htdocs/projet/tasks/time.php +++ b/htdocs/projet/tasks/time.php @@ -428,7 +428,7 @@ if (($id > 0 || ! empty($ref)) || $projectidforalltimes > 0) print '
'; // Link to create time - if ($user->rights->projet->all->lire || $user->rights->projet->lire)) // To enter time, read permission is enough + if ($user->rights->projet->all->lire || $user->rights->projet->lire) // To enter time, read permission is enough { if ($projectstatic->public || $userRead > 0) { From f6f86927113f99e52343b10db1438a4f666cd3db Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 17 Jun 2019 18:12:28 +0200 Subject: [PATCH 273/828] Fix phpcs --- htdocs/bom/bom_card.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/bom/bom_card.php b/htdocs/bom/bom_card.php index c2ed2ca6705..d788be5354a 100644 --- a/htdocs/bom/bom_card.php +++ b/htdocs/bom/bom_card.php @@ -173,7 +173,6 @@ if (empty($reshook)) $action = ''; } } - } From bde49e05e7aca32b0da06eff0ed0b0235720134e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 17 Jun 2019 18:23:38 +0200 Subject: [PATCH 274/828] Fix doc --- htdocs/societe/class/societeaccount.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/societe/class/societeaccount.class.php b/htdocs/societe/class/societeaccount.class.php index 3fc7b225c77..a82ad69091b 100644 --- a/htdocs/societe/class/societeaccount.class.php +++ b/htdocs/societe/class/societeaccount.class.php @@ -320,7 +320,7 @@ class SocieteAccount extends CommonObject * @param string $id Id of customer in external system (example: 'cu_xxxxxxxxxxxxx', ...) * @param string $site Site (example: 'stripe', '...') * @param int $status Status (0=test, 1=live) - * @return string Id of third party + * @return int Id of third party * @see getCustomerAccount() */ public function getThirdPartyID($id, $site, $status = 0) From a6d4475afff68f0ce1c0e808aec631a553d97f6a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 17 Jun 2019 18:24:45 +0200 Subject: [PATCH 275/828] Fix scrutinizer --- htdocs/stripe/class/stripe.class.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/htdocs/stripe/class/stripe.class.php b/htdocs/stripe/class/stripe.class.php index dd66c7607e5..d754b8d3962 100644 --- a/htdocs/stripe/class/stripe.class.php +++ b/htdocs/stripe/class/stripe.class.php @@ -247,6 +247,8 @@ class Stripe extends CommonObject */ public function getPaymentMethodStripe($paymentmethod, $key = '', $status = 0) { + $stripepaymentmethod = null; + try { // Force to use the correct API key global $stripearrayofkeysbyenv; @@ -261,6 +263,7 @@ class Stripe extends CommonObject { $this->error = $e->getMessage(); } + return $stripepaymentmethod; } From 80d4d8754d5e548902878c50fca8a7571349e2a2 Mon Sep 17 00:00:00 2001 From: Eric Seigne <1468823+rycks@users.noreply.github.com> Date: Mon, 17 Jun 2019 18:28:11 +0200 Subject: [PATCH 276/828] allow zero as accountancy code nomber (replace all empty tests by != '') --- .../accountancy/bookkeeping/listbyaccount.php | 2 +- htdocs/accountancy/class/lettering.class.php | 30 +++++++++--------- htdocs/accountancy/journal/bankjournal.php | 14 ++++----- .../journal/expensereportsjournal.php | 14 ++++----- .../accountancy/journal/purchasesjournal.php | 2 +- htdocs/accountancy/journal/sellsjournal.php | 14 ++++----- htdocs/compta/journal/purchasesjournal.php | 4 +-- htdocs/compta/journal/sellsjournal.php | 2 +- .../core/class/html.formaccounting.class.php | 2 +- htdocs/core/lib/accounting.lib.php | 31 ++++++++++++++----- .../societe/mod_codecompta_panicum.php | 4 +-- htdocs/societe/class/societe.class.php | 4 +-- 12 files changed, 70 insertions(+), 53 deletions(-) diff --git a/htdocs/accountancy/bookkeeping/listbyaccount.php b/htdocs/accountancy/bookkeeping/listbyaccount.php index d1ef1377994..bacfdcb714a 100644 --- a/htdocs/accountancy/bookkeeping/listbyaccount.php +++ b/htdocs/accountancy/bookkeeping/listbyaccount.php @@ -348,7 +348,7 @@ while ($i < min($num, $limit)) $colspan = 9; print "
"; print ''; print ''; diff --git a/htdocs/accountancy/class/lettering.class.php b/htdocs/accountancy/class/lettering.class.php index a0c977a8d5a..2a89c6c1c96 100644 --- a/htdocs/accountancy/class/lettering.class.php +++ b/htdocs/accountancy/class/lettering.class.php @@ -67,11 +67,11 @@ class Lettering extends BookKeeping $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping as bk"; $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "bank_url as bu ON(bk.fk_doc = bu.fk_bank AND bu.type IN ('payment', 'payment_supplier') ) "; $sql .= " WHERE ( "; - if (! empty($object->code_compta)) + if ($object->code_compta != "") $sql .= " bk.subledger_account = '" . $object->code_compta . "' "; - if (! empty($object->code_compta) && ! empty($object->code_compta_fournisseur)) + if ($object->code_compta != "" && $object->code_compta_fournisseur != "") $sql .= " OR "; - if (! empty($object->code_compta_fournisseur)) + if ($object->code_compta_fournisseur != "") $sql .= " bk.subledger_account = '" . $object->code_compta_fournisseur . "' "; $sql .= " ) AND (bk.date_lettering ='' OR bk.date_lettering IS NULL) "; @@ -99,13 +99,13 @@ class Lettering extends BookKeeping $sql .= " AND facf.entity = ".$conf->entity; $sql .= " AND code_journal IN (SELECT code FROM " . MAIN_DB_PREFIX . "accounting_journal WHERE nature=4 AND entity=".$conf->entity.") "; $sql .= " AND ( "; - if (! empty($object->code_compta)) { + if ($object->code_compta != "") { $sql .= " bk.subledger_account = '" . $object->code_compta . "' "; } - if (! empty($object->code_compta) && ! empty($object->code_compta_fournisseur)) { + if ($object->code_compta != "" && $object->code_compta_fournisseur != "") { $sql .= " OR "; } - if (! empty($object->code_compta_fournisseur)) { + if ($object->code_compta_fournisseur != "") { $sql .= " bk.subledger_account = '" . $object->code_compta_fournisseur . "' "; } $sql .= " ) "; @@ -127,13 +127,13 @@ class Lettering extends BookKeeping $sql .= " WHERE bk.code_journal IN (SELECT code FROM " . MAIN_DB_PREFIX . "accounting_journal WHERE nature=3 AND entity=".$conf->entity.") "; $sql .= " AND facf.entity = ".$conf->entity; $sql .= " AND ( "; - if (! empty($object->code_compta)) { + if ($object->code_compta != "") { $sql .= " bk.subledger_account = '" . $object->code_compta . "' "; } - if (! empty($object->code_compta) && ! empty($object->code_compta_fournisseur)) { + if ($object->code_compta != "" && $object->code_compta_fournisseur != "") { $sql .= " OR "; } - if (! empty($object->code_compta_fournisseur)) { + if ($object->code_compta_fournisseur != "") { $sql .= " bk.subledger_account = '" . $object->code_compta_fournisseur . "' "; } $sql .= ") "; @@ -159,13 +159,13 @@ class Lettering extends BookKeeping $sql .= " AND bk.code_journal IN (SELECT code FROM " . MAIN_DB_PREFIX . "accounting_journal WHERE nature=4 AND entity=".$conf->entity.") "; $sql .= " AND fac.entity IN (".getEntity('invoice', 0).")";// We don't share object for accountancy $sql .= " AND ( "; - if (! empty($object->code_compta)) { + if ($object->code_compta != "") { $sql .= " bk.subledger_account = '" . $object->code_compta . "' "; } - if (! empty($object->code_compta) && ! empty($object->code_compta_fournisseur)) { + if ($object->code_compta != "" && $object->code_compta_fournisseur != "") { $sql .= " OR "; } - if (! empty($object->code_compta_fournisseur)) { + if ($object->code_compta_fournisseur != "") { $sql .= " bk.subledger_account = '" . $object->code_compta_fournisseur . "' "; } $sql .= " ) "; @@ -187,13 +187,13 @@ class Lettering extends BookKeeping $sql .= " WHERE code_journal IN (SELECT code FROM " . MAIN_DB_PREFIX . "accounting_journal WHERE nature=2 AND entity=".$conf->entity.") "; $sql .= " AND fac.entity IN (".getEntity('invoice', 0).")";// We don't share object for accountancy $sql .= " AND ( "; - if (! empty($object->code_compta)) { + if ($object->code_compta != "") { $sql .= " bk.subledger_account = '" . $object->code_compta . "' "; } - if (! empty($object->code_compta) && ! empty($object->code_compta_fournisseur)) { + if ($object->code_compta != "" && $object->code_compta_fournisseur != "") { $sql .= " OR "; } - if (! empty($object->code_compta_fournisseur)) { + if ($object->code_compta_fournisseur != "") { $sql .= " bk.subledger_account = '" . $object->code_compta_fournisseur . "' "; } $sql .= " ) "; diff --git a/htdocs/accountancy/journal/bankjournal.php b/htdocs/accountancy/journal/bankjournal.php index e4e07831b44..0f22789d630 100644 --- a/htdocs/accountancy/journal/bankjournal.php +++ b/htdocs/accountancy/journal/bankjournal.php @@ -171,8 +171,8 @@ if ($result) { //print $sql; // Variables - $account_supplier = (! empty($conf->global->ACCOUNTING_ACCOUNT_SUPPLIER) ? $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER : 'NotDefined'); // NotDefined is a reserved word - $account_customer = (! empty($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER) ? $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER : 'NotDefined'); // NotDefined is a reserved word + $account_supplier = (($conf->global->ACCOUNTING_ACCOUNT_SUPPLIER != "") ? $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER : 'NotDefined'); // NotDefined is a reserved word + $account_customer = ($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER != "") ? $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER : 'NotDefined'); // NotDefined is a reserved word $account_employee = (! empty($conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT) ? $conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT : 'NotDefined'); // NotDefined is a reserved word $account_pay_vat = (! empty($conf->global->ACCOUNTING_VAT_PAY_ACCOUNT) ? $conf->global->ACCOUNTING_VAT_PAY_ACCOUNT : 'NotDefined'); // NotDefined is a reserved word $account_pay_donation = (! empty($conf->global->DONATION_ACCOUNTINGACCOUNT) ? $conf->global->DONATION_ACCOUNTINGACCOUNT : 'NotDefined'); // NotDefined is a reserved word @@ -218,7 +218,7 @@ if ($result) { // Set accountancy code for thirdparty $compta_soc = 'NotDefined'; if ($lineisapurchase > 0) - $compta_soc = (! empty($obj->code_compta_fournisseur) ? $obj->code_compta_fournisseur : $account_supplier); + $compta_soc = (($obj->code_compta_fournisseur != "") ? $obj->code_compta_fournisseur : $account_supplier); if ($lineisasale > 0) $compta_soc = (! empty($obj->code_compta) ? $obj->code_compta : $account_customer); @@ -938,8 +938,8 @@ if (empty($action) || $action == 'view') { // Button to write into Ledger - if (empty($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER) || $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == '-1' - || empty($conf->global->ACCOUNTING_ACCOUNT_SUPPLIER) || $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER == '-1' + if (($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == "") || $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == '-1' + || ($conf->global->ACCOUNTING_ACCOUNT_SUPPLIER == "") || $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER == '-1' || empty($conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT) || $conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT == '-1') { print '
'.img_warning().' '.$langs->trans("SomeMandatoryStepsOfSetupWereNotDone"); print ' : '.$langs->trans("AccountancyAreaDescMisc", 4, ''.$langs->transnoentitiesnoconv("MenuAccountancy").'-'.$langs->transnoentitiesnoconv("MenuAccountancy").'-'.$langs->transnoentitiesnoconv("Setup")."-".$langs->transnoentitiesnoconv("MenuDefaultAccounts").''); @@ -950,8 +950,8 @@ if (empty($action) || $action == 'view') { if (! empty($conf->global->ACCOUNTING_ENABLE_EXPORT_DRAFT_JOURNAL)) print ''; - if (empty($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER) || $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == '-1' - || empty($conf->global->ACCOUNTING_ACCOUNT_SUPPLIER) || $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER == '-1') { + if (($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == "") || $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == '-1' + || ($conf->global->ACCOUNTING_ACCOUNT_SUPPLIER == "") || $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER == '-1') { print ''; } else { diff --git a/htdocs/accountancy/journal/expensereportsjournal.php b/htdocs/accountancy/journal/expensereportsjournal.php index 4c50015a2ba..d82381533cf 100644 --- a/htdocs/accountancy/journal/expensereportsjournal.php +++ b/htdocs/accountancy/journal/expensereportsjournal.php @@ -444,10 +444,10 @@ if ($action == 'exportcsv') { // ISO and not UTF8 ! foreach ($taber as $key => $val) { $date = dol_print_date($val["date"], 'day'); - + $userstatic->id = $tabuser[$key]['id']; $userstatic->name = $tabuser[$key]['name']; - + // Fees foreach ($tabht[$key] as $k => $mt) { $accountingaccount = new AccountingAccount($db); @@ -474,7 +474,7 @@ if ($action == 'exportcsv') { // ISO and not UTF8 ! print "\n"; } } - + // Third party foreach ($tabttc[$key] as $k => $mt) { print '"' . $date . '"' . $sep; @@ -585,7 +585,7 @@ if (empty($action) || $action == 'view') { // Account print "
'. $langs->trans("CreateSurveyDate") .'
'; - if (! empty($line->numero_compte) && $line->numero_compte != '-1') print length_accountg($line->numero_compte) . ' : ' . $object->get_compte_desc($line->numero_compte); + if ($line->numero_compte != "" && $line->numero_compte != '-1') print length_accountg($line->numero_compte) . ' : ' . $object->get_compte_desc($line->numero_compte); else print ''.$langs->trans("Unknown").''; print '
"; $accountoshow = length_accountg($k); - if (empty($accountoshow) || $accountoshow == 'NotDefined') + if (($accountoshow == "") || $accountoshow == 'NotDefined') { print ''.$langs->trans("FeeAccountNotDefined").''; } @@ -615,7 +615,7 @@ if (empty($action) || $action == 'view') { // Account print ""; $accountoshow = length_accounta($conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT); - if (empty($accountoshow) || $accountoshow == 'NotDefined') + if (($accountoshow == "") || $accountoshow == 'NotDefined') { print ''.$langs->trans("MainAccountForUsersNotDefined").''; } @@ -624,7 +624,7 @@ if (empty($action) || $action == 'view') { // Subledger account print ""; $accountoshow = length_accounta($k); - if (empty($accountoshow) || $accountoshow == 'NotDefined') + if (($accountoshow == "") || $accountoshow == 'NotDefined') { print ''.$langs->trans("UserAccountNotDefined").''; } @@ -652,7 +652,7 @@ if (empty($action) || $action == 'view') { // Account print ""; $accountoshow = length_accountg($k); - if (empty($accountoshow) || $accountoshow == 'NotDefined') + if (($accountoshow == "") || $accountoshow == 'NotDefined') { print ''.$langs->trans("VATAccountNotDefined").''; } diff --git a/htdocs/accountancy/journal/purchasesjournal.php b/htdocs/accountancy/journal/purchasesjournal.php index cab5069e1f8..cd82e9f2f27 100644 --- a/htdocs/accountancy/journal/purchasesjournal.php +++ b/htdocs/accountancy/journal/purchasesjournal.php @@ -749,7 +749,7 @@ if (empty($action) || $action == 'view') { } print '
'; if (! empty($conf->global->ACCOUNTING_ENABLE_EXPORT_DRAFT_JOURNAL)) print ''; - if (empty($conf->global->ACCOUNTING_ACCOUNT_SUPPLIER) || $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER == '-1') { + if (($conf->global->ACCOUNTING_ACCOUNT_SUPPLIER == "") || $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER == '-1') { print ''; } else { diff --git a/htdocs/accountancy/journal/sellsjournal.php b/htdocs/accountancy/journal/sellsjournal.php index 8f82fd95afb..3b0607d34a7 100644 --- a/htdocs/accountancy/journal/sellsjournal.php +++ b/htdocs/accountancy/journal/sellsjournal.php @@ -146,7 +146,7 @@ if ($result) { $num = $db->num_rows($result); // Variables - $cptcli = (! empty($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER)) ? $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER : 'NotDefined'; + $cptcli = (($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER != "")) ? $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER : 'NotDefined'; $cpttva = (! empty($conf->global->ACCOUNTING_VAT_SOLD_ACCOUNT)) ? $conf->global->ACCOUNTING_VAT_SOLD_ACCOUNT : 'NotDefined'; $i = 0; @@ -679,14 +679,14 @@ if (empty($action) || $action == 'view') { journalHead($nom, $nomlink, $period, $periodlink, $description, $builddate, $exportlink, array('action' => ''), '', $varlink); // Button to write into Ledger - if (empty($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER) || $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == '-1') { + if (($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == "") || $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == '-1') { print '
'; print img_warning().' '.$langs->trans("SomeMandatoryStepsOfSetupWereNotDone"); print ' : '.$langs->trans("AccountancyAreaDescMisc", 4, ''.$langs->transnoentitiesnoconv("MenuAccountancy").'-'.$langs->transnoentitiesnoconv("MenuAccountancy").'-'.$langs->transnoentitiesnoconv("Setup")."-".$langs->transnoentitiesnoconv("MenuDefaultAccounts").''); } print '
'; if (! empty($conf->global->ACCOUNTING_ENABLE_EXPORT_DRAFT_JOURNAL)) print ''; - if (empty($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER) || $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == '-1') { + if (($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == "") || $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == '-1') { print ''; } else { @@ -813,7 +813,7 @@ if (empty($action) || $action == 'view') { // Account print "
"; $accountoshow = length_accounta($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER); - if (empty($accountoshow) || $accountoshow == 'NotDefined') + if (($accountoshow == "") || $accountoshow == 'NotDefined') { print ''.$langs->trans("MainAccountForCustomersNotDefined").''; } @@ -822,7 +822,7 @@ if (empty($action) || $action == 'view') { // Subledger account print ""; $accountoshow = length_accounta($k); - if (empty($accountoshow) || $accountoshow == 'NotDefined') + if (($accountoshow == "") || $accountoshow == 'NotDefined') { print ''.$langs->trans("ThirdpartyAccountNotDefined").''; } @@ -849,7 +849,7 @@ if (empty($action) || $action == 'view') { // Account print ""; $accountoshow = length_accountg($k); - if (empty($accountoshow) || $accountoshow == 'NotDefined') + if (($accountoshow == "") || $accountoshow == 'NotDefined') { print ''.$langs->trans("ProductNotDefined").''; } @@ -884,7 +884,7 @@ if (empty($action) || $action == 'view') { // Account print ""; $accountoshow = length_accountg($k); - if (empty($accountoshow) || $accountoshow == 'NotDefined') + if (($accountoshow == "") || $accountoshow == 'NotDefined') { print ''.$langs->trans("VATAccountNotDefined").' ('.$langs->trans("Sale").')'.''; } diff --git a/htdocs/compta/journal/purchasesjournal.php b/htdocs/compta/journal/purchasesjournal.php index cd3bf06f43a..5b4e54fd807 100644 --- a/htdocs/compta/journal/purchasesjournal.php +++ b/htdocs/compta/journal/purchasesjournal.php @@ -123,7 +123,7 @@ if ($result) { $num = $db->num_rows($result); // les variables - $cptfour = (! empty($conf->global->ACCOUNTING_ACCOUNT_SUPPLIER)?$conf->global->ACCOUNTING_ACCOUNT_SUPPLIER:$langs->trans("CodeNotDef")); + $cptfour = (($conf->global->ACCOUNTING_ACCOUNT_SUPPLIER != "")?$conf->global->ACCOUNTING_ACCOUNT_SUPPLIER:$langs->trans("CodeNotDef")); $cpttva = (! empty($conf->global->ACCOUNTING_VAT_BUY_ACCOUNT)?$conf->global->ACCOUNTING_VAT_BUY_ACCOUNT:$langs->trans("CodeNotDef")); $tabfac = array(); @@ -139,7 +139,7 @@ if ($result) { $obj = $db->fetch_object($result); // contrôles - $compta_soc = (! empty($obj->code_compta_fournisseur)?$obj->code_compta_fournisseur:$cptfour); + $compta_soc = (($obj->code_compta_fournisseur != "")?$obj->code_compta_fournisseur:$cptfour); $compta_prod = $obj->accountancy_code_buy; if (empty($compta_prod)) { diff --git a/htdocs/compta/journal/sellsjournal.php b/htdocs/compta/journal/sellsjournal.php index fe51665163e..123bb3c7770 100644 --- a/htdocs/compta/journal/sellsjournal.php +++ b/htdocs/compta/journal/sellsjournal.php @@ -146,7 +146,7 @@ if ($result) { $obj = $db->fetch_object($result); // les variables - $cptcli = (! empty($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER)?$conf->global->ACCOUNTING_ACCOUNT_CUSTOMER:$langs->trans("CodeNotDef")); + $cptcli = (($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER != "")?$conf->global->ACCOUNTING_ACCOUNT_CUSTOMER:$langs->trans("CodeNotDef")); $compta_soc = (! empty($obj->code_compta)?$obj->code_compta:$cptcli); $compta_prod = $obj->accountancy_code_sell; if (empty($compta_prod)) diff --git a/htdocs/core/class/html.formaccounting.class.php b/htdocs/core/class/html.formaccounting.class.php index 87b32902684..cf95e471ddd 100644 --- a/htdocs/core/class/html.formaccounting.class.php +++ b/htdocs/core/class/html.formaccounting.class.php @@ -392,7 +392,7 @@ class FormAccounting extends Form $resql = $this->db->query($sql); if ($resql) { while ($obj = $this->db->fetch_object($resql)) { - if (!empty($obj->code_compta_fournisseur)) { + if ($obj->code_compta_fournisseur != "") { $aux_account[$obj->code_compta_fournisseur] = $obj->code_compta_fournisseur.' ('.$obj->nom.')'; } } diff --git a/htdocs/core/lib/accounting.lib.php b/htdocs/core/lib/accounting.lib.php index 889d9da8a2c..4b5345da62b 100644 --- a/htdocs/core/lib/accounting.lib.php +++ b/htdocs/core/lib/accounting.lib.php @@ -2,6 +2,7 @@ /* Copyright (C) 2013-2014 Olivier Geffroy * Copyright (C) 2013-2017 Alexandre Spangaro * Copyright (C) 2014 Florian Henry + * Copyright (C) 2019 Eric Seigne * * 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 @@ -23,6 +24,22 @@ * \brief Library of accountancy functions */ + /** + * Check if a value is empty with some options + * + * @param allow_false : setting this to true will make the function consider a boolean value of false as NOT empty. This parameter is false by default. + * @param allow_ws : setting this to true will make the function consider a string with nothing but white space as NOT empty. This parameter is false by default. + * @return array Bool + * @author Michael - https://www.php.net/manual/fr/function.empty.php#90767 + */ + function is_empty($var, $allow_false = false, $allow_ws = false) { + if (!isset($var) || is_null($var) || ($allow_ws == false && trim($var) == "" && !is_bool($var)) || ($allow_false === false && is_bool($var) && $var === false) || (is_array($var) && empty($var))) { + return true; + } else { + return false; + } + } + /** * Prepare array with list of tabs * @@ -75,12 +92,12 @@ function length_accountg($account) { global $conf; - if ($account < 0 || empty($account)) return ''; + if ($account < 0 || is_empty($account)) return ''; - if (! empty($conf->global->ACCOUNTING_MANAGE_ZERO)) return $account; + if (! is_empty($conf->global->ACCOUNTING_MANAGE_ZERO)) return $account; $g = $conf->global->ACCOUNTING_LENGTH_GACCOUNT; - if (! empty($g)) { + if (! is_empty($g)) { // Clean parameters $i = strlen($account); @@ -110,12 +127,12 @@ function length_accounta($accounta) { global $conf; - if ($accounta < 0 || empty($accounta)) return ''; + if ($accounta < 0 || is_empty($accounta)) return ''; - if (! empty($conf->global->ACCOUNTING_MANAGE_ZERO)) return $accounta; + if (! is_empty($conf->global->ACCOUNTING_MANAGE_ZERO)) return $accounta; $a = $conf->global->ACCOUNTING_LENGTH_AACCOUNT; - if (! empty($a)) { + if (! is_empty($a)) { // Clean parameters $i = strlen($accounta); @@ -158,7 +175,7 @@ function journalHead($nom, $variante, $period, $periodlink, $description, $build print "\n\n\n"; - if(! empty($varlink)) $varlink = '?'.$varlink; + if(! is_empty($varlink)) $varlink = '?'.$varlink; $head=array(); $h=0; diff --git a/htdocs/core/modules/societe/mod_codecompta_panicum.php b/htdocs/core/modules/societe/mod_codecompta_panicum.php index 4c5ffcd66c5..f3106cef761 100644 --- a/htdocs/core/modules/societe/mod_codecompta_panicum.php +++ b/htdocs/core/modules/societe/mod_codecompta_panicum.php @@ -96,8 +96,8 @@ class mod_codecompta_panicum extends ModeleAccountancyCode $this->code=''; if (is_object($societe)) { - if ($type == 'supplier') $this->code = (! empty($societe->code_compta_fournisseur)?$societe->code_compta_fournisseur:''); - else $this->code = (! empty($societe->code_compta)?$societe->code_compta:''); + if ($type == 'supplier') $this->code = (($societe->code_compta_fournisseur != "")?$societe->code_compta_fournisseur:''); + else $this->code = (($societe->code_compta != "")?$societe->code_compta:''); } return 0; // return ok diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index 84bda8abd54..ce7617f003d 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -928,7 +928,7 @@ class Societe extends CommonObject if (! empty($allowmodcodefournisseur) && ! empty($this->fournisseur)) { // Attention get_codecompta peut modifier le code suivant le module utilise - if (empty($this->code_compta_fournisseur)) + if ($this->code_compta_fournisseur == "") { $ret=$this->get_codecompta('supplier'); if ($ret < 0) return -1; @@ -1085,7 +1085,7 @@ class Societe extends CommonObject if ($supplier) { $sql .= ", code_fournisseur = ".(! empty($this->code_fournisseur)?"'".$this->db->escape($this->code_fournisseur)."'":"null"); - $sql .= ", code_compta_fournisseur = ".(! empty($this->code_compta_fournisseur)?"'".$this->db->escape($this->code_compta_fournisseur)."'":"null"); + $sql .= ", code_compta_fournisseur = ".(($this->code_compta_fournisseur != "")?"'".$this->db->escape($this->code_compta_fournisseur)."'":"null"); } $sql .= ", fk_user_modif = ".($user->id > 0 ? $user->id:"null"); $sql .= ", fk_multicurrency = ".(int) $this->fk_multicurrency; From 42e58d9ea59f6231dc08836f0e719fb7a83253bb Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 17 Jun 2019 18:38:14 +0200 Subject: [PATCH 277/828] Fix preview of interventions --- htdocs/core/lib/functions.lib.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 4bbd030b1eb..7341bc0c2cb 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -1330,10 +1330,10 @@ function dol_banner_tab($object, $paramid, $morehtml = '', $shownav = 1, $fieldi $nophoto=''; $morehtmlleft.='
'; } - //elseif ($conf->browser->layout != 'phone') { // Show no photo link + else { // Show no photo link $nophoto='/public/theme/common/nophoto.png'; $morehtmlleft.='
No photo
'; - //} + } } } elseif ($object->element == 'ticket') @@ -1349,10 +1349,10 @@ function dol_banner_tab($object, $paramid, $morehtml = '', $shownav = 1, $fieldi $nophoto=''; $morehtmlleft.='
'; } - //elseif ($conf->browser->layout != 'phone') { // Show no photo link - $nophoto='/public/theme/common/nophoto.png'; - $morehtmlleft.='
No photo
'; - //} + else { // Show no photo link + $nophoto='/public/theme/common/nophoto.png'; + $morehtmlleft.='
No photo
'; + } } } else @@ -5260,7 +5260,7 @@ function get_exdir($num, $level, $alpha, $withoutslash, $object, $modulepart) // Here, object->id, object->ref and modulepart are required. //var_dump($modulepart); if (in_array($modulepart, array('thirdparty','contact','member','propal','proposal','commande','order','facture','invoice', - 'supplier_order','supplier_proposal','shipment','contract','expensereport'))) + 'supplier_order','supplier_proposal','shipment','contract','expensereport','ficheinter'))) { $path=($object->ref?$object->ref:$object->id); } From 0123a18ff86c89272404e57ae6cb65ccfd3c4566 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 17 Jun 2019 18:44:08 +0200 Subject: [PATCH 278/828] Look and feel v10 --- htdocs/core/tpl/resource_view.tpl.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/core/tpl/resource_view.tpl.php b/htdocs/core/tpl/resource_view.tpl.php index d2e0441b60b..014560e0299 100644 --- a/htdocs/core/tpl/resource_view.tpl.php +++ b/htdocs/core/tpl/resource_view.tpl.php @@ -53,11 +53,11 @@ if( (array) $linked_resources && count($linked_resources) > 0) } else { - $style=''; + $class=''; if ($linked_resource['rowid'] == GETPOST('lineid')) - $style='style="background: orange;"'; + $class='highlight'; - print '
'; + print '
'; print '
'; print $object_resource->getNomUrl(1); @@ -81,7 +81,7 @@ if( (array) $linked_resources && count($linked_resources) > 0) print ''; print ' '; print ''; - print img_delete(); + print img_picto($langs->trans("Unlink"), 'unlink'); print ''; print '
'; From e4f5ca79f8d20ddff3c8b5d305c78d4bba9c9a96 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Mon, 17 Jun 2019 19:36:21 +0200 Subject: [PATCH 279/828] Fix access category API --- htdocs/categories/class/api_categories.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/categories/class/api_categories.class.php b/htdocs/categories/class/api_categories.class.php index c82d803f31c..c389e1b63d1 100644 --- a/htdocs/categories/class/api_categories.class.php +++ b/htdocs/categories/class/api_categories.class.php @@ -86,7 +86,7 @@ class Categories extends DolibarrApi throw new RestException(404, 'category not found'); } - if ( ! DolibarrApi::_checkAccessToResource('category', $this->category->id)) { + if ( ! DolibarrApi::_checkAccessToResource('categorie', $this->category->id)) { throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); } From 27c928d9d9f5685c2b6da463ae8ba652f649ad9a Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Mon, 17 Jun 2019 20:53:10 +0200 Subject: [PATCH 280/828] NEW list of measuring units API --- htdocs/api/class/api_setup.class.php | 61 ++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/htdocs/api/class/api_setup.class.php b/htdocs/api/class/api_setup.class.php index 783ec6540e3..a38a7cd83c2 100644 --- a/htdocs/api/class/api_setup.class.php +++ b/htdocs/api/class/api_setup.class.php @@ -4,6 +4,7 @@ * Copyright (C) 2017 Regis Houssin * Copyright (C) 2017 Neil Orley * Copyright (C) 2018 Frédéric France + * Copyright (C) 2019 Thibault FOUCART * * * This program is free software; you can redistribute it and/or modify @@ -707,6 +708,66 @@ class Setup extends DolibarrApi return $list; } + /** + * Get the list of measuring units. + * + * @param string $sortfield Sort field + * @param string $sortorder Sort order + * @param int $limit Number of items per page + * @param int $page Page number (starting from zero) + * @param int $active Payment term is active or not {@min 0} {@max 1} + * @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.code:like:'A%') and (t.active:>=:0)" + * @return List of events types + * + * @url GET dictionary/units + * + * @throws RestException + */ + public function getListOfMeasuringUnits($sortfield = "rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $active = 1, $sqlfilters = '') + { + $list = array(); + //TODO link with multicurrency module + $sql = "SELECT t.rowid, t.code, t.label,t.short_label, t.active, t.scale, t.unit_type"; + $sql.= " FROM ".MAIN_DB_PREFIX."c_units as t"; + $sql.= " WHERE t.active = ".$active; + // Add sql filters + if ($sqlfilters) + { + if (! DolibarrApi::_checkFilters($sqlfilters)) + { + throw new RestException(503, 'Error when validating parameter sqlfilters '.$sqlfilters); + } + $regexstring='\(([^:\'\(\)]+:[^:\'\(\)]+:[^:\(\)]+)\)'; + $sql.=" AND (".preg_replace_callback('/'.$regexstring.'/', 'DolibarrApi::_forge_criteria_callback', $sqlfilters).")"; + } + + + $sql.= $this->db->order($sortfield, $sortorder); + + if ($limit) { + if ($page < 0) { + $page = 0; + } + $offset = $limit * $page; + + $sql .= $this->db->plimit($limit, $offset); + } + + $result = $this->db->query($sql); + + if ($result) { + $num = $this->db->num_rows($result); + $min = min($num, ($limit <= 0 ? $num : $limit)); + for ($i = 0; $i < $min; $i++) { + $list[] = $this->db->fetch_object($result); + } + } else { + throw new RestException(503, 'Error when retrieving list of measuring units: '.$this->db->lasterror()); + } + + return $list; + } + /** * Get the list of tickets categories. * From f1d64ad164152252a9cb901a966493e6b82aeb1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 17 Jun 2019 23:02:54 +0200 Subject: [PATCH 281/828] Update peruser.php --- htdocs/comm/action/peruser.php | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/htdocs/comm/action/peruser.php b/htdocs/comm/action/peruser.php index 754cb736bc9..d4020f4df92 100644 --- a/htdocs/comm/action/peruser.php +++ b/htdocs/comm/action/peruser.php @@ -1186,33 +1186,34 @@ function show_day_events2($username, $day, $month, $year, $monthshown, $style, & } } - $ids1='';$ids2=''; - if (count($cases1[$h]) && array_keys($cases1[$h])) $ids1=join(',', array_keys($cases1[$h])); - if (count($cases2[$h]) && array_keys($cases2[$h])) $ids2=join(',', array_keys($cases2[$h])); + $ids1=''; + $ids2=''; + if (is_array($cases1[$h]) && count($cases1[$h]) && array_keys($cases1[$h])) $ids1=join(',', array_keys($cases1[$h])); + if (is_array($cases2[$h]) && count($cases2[$h]) && array_keys($cases2[$h])) $ids2=join(',', array_keys($cases2[$h])); if ($h == $begin_h) echo '
'; else echo ''; - if (count($cases1[$h]) == 1) // only 1 event + if (is_array($cases1[$h]) && count($cases1[$h]) == 1) // only 1 event { $output = array_slice($cases1[$h], 0, 1); $title1=$langs->trans("Ref").' '.$ids1.($title1?' - '.$title1:''); if ($output[0]['string']) $title1.=($title1?' - ':'').$output[0]['string']; if ($output[0]['color']) $color1 = $output[0]['color']; } - elseif (count($cases1[$h]) > 1) + elseif (is_array($cases1[$h]) && count($cases1[$h]) > 1) { $title1=$langs->trans("Ref").' '.$ids1.($title1?' - '.$title1:''); $color1='222222'; } - if (count($cases2[$h]) == 1) // only 1 event + if (is_array($cases2[$h]) && count($cases2[$h]) == 1) // only 1 event { $output = array_slice($cases2[$h], 0, 1); $title2=$langs->trans("Ref").' '.$ids2.($title2?' - '.$title2:''); if ($output[0]['string']) $title2.=($title2?' - ':'').$output[0]['string']; if ($output[0]['color']) $color2 = $output[0]['color']; } - elseif (count($cases2[$h]) > 1) + elseif (is_array($cases2[$h]) && count($cases2[$h]) > 1) { $title2=$langs->trans("Ref").' '.$ids2.($title2?' - '.$title2:''); $color2='222222'; From fd263cb316b34100ec1c4bd0d76a858b0fb0f0fe Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Tue, 18 Jun 2019 07:15:59 +0200 Subject: [PATCH 282/828] FIX add v10 in virtualmin script --- build/perl/virtualmin/dolibarr.pl | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/build/perl/virtualmin/dolibarr.pl b/build/perl/virtualmin/dolibarr.pl index a28fc430caa..343cebc6abe 100644 --- a/build/perl/virtualmin/dolibarr.pl +++ b/build/perl/virtualmin/dolibarr.pl @@ -1,7 +1,7 @@ #---------------------------------------------------------------------------- # \file dolibarr.pl # \brief Dolibarr script install for Virtualmin Pro -# \author (c)2009-2018 Regis Houssin +# \author (c)2009-2019 Regis Houssin #---------------------------------------------------------------------------- @@ -30,7 +30,7 @@ return "Regis Houssin"; # script_dolibarr_versions() sub script_dolibarr_versions { -return ( "9.0.0", "8.0.3", "7.0.4", "6.0.8", "5.0.7" ); +return ( "10.0.0", "9.0.3", "8.0.5", "7.0.5", "6.0.8" ); } sub script_dolibarr_release @@ -390,6 +390,7 @@ sub script_dolibarr_check_latest { local ($ver) = @_; local @vers = &osdn_package_versions("dolibarr", + $ver >= 10.0 ? "dolibarr\\-(10\\.0\\.[0-9\\.]+)\\.tgz" : $ver >= 9.0 ? "dolibarr\\-(9\\.0\\.[0-9\\.]+)\\.tgz" : $ver >= 8.0 ? "dolibarr\\-(8\\.0\\.[0-9\\.]+)\\.tgz" : $ver >= 7.0 ? "dolibarr\\-(7\\.0\\.[0-9\\.]+)\\.tgz" : From 96c699482791ebd62614a0209849057799cdb924 Mon Sep 17 00:00:00 2001 From: Nicolas ZABOURI Date: Tue, 18 Jun 2019 10:55:16 +0200 Subject: [PATCH 283/828] =?UTF-8?q?FIX=202=20d=C3=A9clarations=20of=20date?= =?UTF-8?q?=5Fvalid=20in=20SQL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- htdocs/install/mysql/tables/llx_bom_bom.sql | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/htdocs/install/mysql/tables/llx_bom_bom.sql b/htdocs/install/mysql/tables/llx_bom_bom.sql index 9c6e014586d..11e1ce74ffd 100644 --- a/htdocs/install/mysql/tables/llx_bom_bom.sql +++ b/htdocs/install/mysql/tables/llx_bom_bom.sql @@ -27,10 +27,9 @@ CREATE TABLE llx_bom_bom( qty double(24,8), efficiency double(8,4) DEFAULT 1, date_creation datetime NOT NULL, - date_valid datetime NOT NULL, + date_valid datetime, tms timestamp, - date_valid datetime, - fk_user_creat integer NOT NULL, + fk_user_creat integer NOT NULL, fk_user_modif integer, fk_user_valid integer, import_key varchar(14), From 820c420ae5221f0d96a19624a72828c28e7cdd45 Mon Sep 17 00:00:00 2001 From: ICstage Date: Tue, 18 Jun 2019 14:07:52 +0200 Subject: [PATCH 284/828] FIX Missing hooks --- htdocs/adherents/index.php | 15 ++++++++++++--- htdocs/comm/index.php | 9 +++++++++ htdocs/comm/mailing/index.php | 9 +++++++++ htdocs/comm/propal/index.php | 9 +++++++++ htdocs/commande/index.php | 8 ++++++++ htdocs/compta/charges/index.php | 12 +++++++++++- htdocs/compta/index.php | 7 ++++++- htdocs/contrat/index.php | 8 ++++++++ htdocs/don/index.php | 8 ++++++++ htdocs/expedition/index.php | 9 +++++++++ htdocs/expensereport/index.php | 11 ++++++++++- htdocs/fichinter/index.php | 11 +++++++++-- htdocs/fourn/commande/index.php | 15 ++++++++++++--- htdocs/hrm/index.php | 8 ++++++++ htdocs/mrp/index.php | 15 ++++++++++++--- htdocs/opensurvey/index.php | 12 +++++++++++- htdocs/product/index.php | 4 ++++ htdocs/product/stock/index.php | 9 +++++++++ htdocs/projet/activity/index.php | 9 +++++++++ htdocs/projet/index.php | 9 +++++++++ htdocs/reception/index.php | 16 ++++++++++++---- htdocs/societe/index.php | 11 ++++++++++- htdocs/supplier_proposal/index.php | 9 +++++++++ htdocs/ticket/index.php | 11 ++++++++++- htdocs/user/home.php | 5 +++++ 25 files changed, 228 insertions(+), 21 deletions(-) diff --git a/htdocs/adherents/index.php b/htdocs/adherents/index.php index 1d1232a9d58..481a8e8fffd 100644 --- a/htdocs/adherents/index.php +++ b/htdocs/adherents/index.php @@ -1,8 +1,9 @@ - * Copyright (C) 2003 Jean-Louis Bergamo - * Copyright (C) 2004-2017 Laurent Destailleur - * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2003 Jean-Louis Bergamo + * Copyright (C) 2004-2017 Laurent Destailleur + * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -29,6 +30,11 @@ require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php'; require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent_type.class.php'; require_once DOL_DOCUMENT_ROOT.'/adherents/class/subscription.class.php'; +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('membersindex')); + // Load translation files required by the page $langs->loadLangs(array("companies","members")); @@ -435,6 +441,9 @@ print ""; print ''; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardUsersGroups', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/comm/index.php b/htdocs/comm/index.php index 651d2c54ec7..15e4e226587 100644 --- a/htdocs/comm/index.php +++ b/htdocs/comm/index.php @@ -3,6 +3,7 @@ * Copyright (C) 2004-2015 Laurent Destailleur * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2015 Jean-François Ferry + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -37,6 +38,11 @@ if (! empty($conf->fournisseur->enabled)) require_once DOL_DOCUMENT_ROOT.'/fourn if (! $user->rights->societe->lire) accessforbidden(); +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('commercialindex')); + // Load translation files required by the page $langs->loadLangs(array("commercial", "propal")); @@ -897,6 +903,9 @@ if (! empty($conf->commande->enabled) && $user->rights->commande->lire) print ''; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardCommercials', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/comm/mailing/index.php b/htdocs/comm/mailing/index.php index c5d8bc47232..a835ca241a3 100644 --- a/htdocs/comm/mailing/index.php +++ b/htdocs/comm/mailing/index.php @@ -2,6 +2,7 @@ /* Copyright (C) 2005 Rodolphe Quiedeville * Copyright (C) 2005-2009 Laurent Destailleur * Copyright (C) 2010 Regis Houssin + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -27,6 +28,11 @@ require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT .'/comm/mailing/class/mailing.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('mailingindex')); + // Load translation files required by the page $langs->loadLangs(array('commercial', 'orders')); @@ -207,6 +213,9 @@ if ($langs->file_exists("html/spam.html", 0)) { print '
'; } +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardEmailings', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/comm/propal/index.php b/htdocs/comm/propal/index.php index e69dbbc8b6c..309712ae76b 100644 --- a/htdocs/comm/propal/index.php +++ b/htdocs/comm/propal/index.php @@ -2,6 +2,7 @@ /* Copyright (C) 2003-2004 Rodolphe Quiedeville * Copyright (C) 2004-2017 Laurent Destailleur * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -27,6 +28,11 @@ require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; require_once DOL_DOCUMENT_ROOT .'/comm/propal/class/propal.class.php'; +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('proposalindex')); + // Load translation files required by the page $langs->loadLangs(array('propal', 'companies')); @@ -540,6 +546,9 @@ if (! empty($conf->propal->enabled)) //print '
'; print '
'; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardPropals', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/commande/index.php b/htdocs/commande/index.php index c0091b43af0..a0e87bf63a3 100644 --- a/htdocs/commande/index.php +++ b/htdocs/commande/index.php @@ -2,6 +2,7 @@ /* Copyright (C) 2003-2004 Rodolphe Quiedeville * Copyright (C) 2004-2011 Laurent Destailleur * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -31,6 +32,11 @@ require_once DOL_DOCUMENT_ROOT .'/commande/class/commande.class.php'; if (!$user->rights->commande->lire) accessforbidden(); +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('ordersindex')); + // Load translation files required by the page $langs->loadLangs(array('orders', 'bills')); @@ -478,6 +484,8 @@ if (! empty($conf->commande->enabled)) print '
'; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardOrders', $parameters, $object); // Note that $action and $object may have been modified by hook // End of page llxFooter(); diff --git a/htdocs/compta/charges/index.php b/htdocs/compta/charges/index.php index 33a06e09136..4b62a98b80b 100644 --- a/htdocs/compta/charges/index.php +++ b/htdocs/compta/charges/index.php @@ -3,8 +3,9 @@ * Copyright (C) 2004-2016 Laurent Destailleur * Copyright (C) 2005-2010 Regis Houssin * Copyright (C) 2011-2016 Alexandre Spangaro - * Copyright (C) 2011-2014 Juanjo Menent + * Copyright (C) 2011-2014 Juanjo Menent * Copyright (C) 2015 Jean-François Ferry + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -34,6 +35,12 @@ require_once DOL_DOCUMENT_ROOT.'/compta/salaries/class/paymentsalary.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; + +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('specialexpensesindex')); + // Load translation files required by the page $langs->loadLangs(array('compta', 'bills')); @@ -568,6 +575,9 @@ if (! empty($conf->salaries->enabled) && ! empty($user->rights->salaries->read)) print ''; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardSpecialBills', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/compta/index.php b/htdocs/compta/index.php index c57b073b487..932d9ed758c 100644 --- a/htdocs/compta/index.php +++ b/htdocs/compta/index.php @@ -2,10 +2,11 @@ /* Copyright (C) 2001-2005 Rodolphe Quiedeville * Copyright (C) 2004-2013 Laurent Destailleur * Copyright (C) 2005-2015 Regis Houssin - * Copyright (C) 2015-2016 Juanjo Menent + * Copyright (C) 2015-2016 Juanjo Menent * Copyright (C) 2015 Jean-François Ferry * Copyright (C) 2015 Raphaël Doursenaud * Copyright (C) 2016 Marcos García + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -63,6 +64,7 @@ if ($user->societe_id > 0) $max=3; +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array $hookmanager->initHooks(array('invoiceindex')); /* @@ -1080,6 +1082,9 @@ if ($resql) print '
'; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardAccountancy', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/contrat/index.php b/htdocs/contrat/index.php index 10c2e2915b9..3bf047c87c8 100644 --- a/htdocs/contrat/index.php +++ b/htdocs/contrat/index.php @@ -3,6 +3,7 @@ * Copyright (C) 2004-2011 Laurent Destailleur * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2015 Jean-François Ferry + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -28,6 +29,11 @@ require "../main.inc.php"; require_once DOL_DOCUMENT_ROOT."/contrat/class/contrat.class.php"; require_once DOL_DOCUMENT_ROOT."/product/class/product.class.php"; +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('contractindex')); + // Load translation files required by the page $langs->loadLangs(array('products', 'companies', 'contracts')); @@ -609,6 +615,8 @@ else //print ''; print ''; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardContracts', $parameters, $object); // Note that $action and $object may have been modified by hook llxFooter(); diff --git a/htdocs/don/index.php b/htdocs/don/index.php index d632f316a25..4af0f0d81b0 100644 --- a/htdocs/don/index.php +++ b/htdocs/don/index.php @@ -2,6 +2,7 @@ /* Copyright (C) 2001-2002 Rodolphe Quiedeville * Copyright (C) 2004-2015 Laurent Destailleur * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -26,6 +27,11 @@ require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/don/class/don.class.php'; +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('donationindex')); + $langs->load("donations"); // Security check @@ -238,6 +244,8 @@ else dol_print_error($db); print ''; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardDonation', $parameters, $object); // Note that $action and $object may have been modified by hook llxFooter(); diff --git a/htdocs/expedition/index.php b/htdocs/expedition/index.php index bbb5ef58c36..61838cc321b 100644 --- a/htdocs/expedition/index.php +++ b/htdocs/expedition/index.php @@ -2,6 +2,7 @@ /* Copyright (C) 2003-2005 Rodolphe Quiedeville * Copyright (C) 2004-2011 Laurent Destailleur * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -27,6 +28,11 @@ require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php'; require_once DOL_DOCUMENT_ROOT.'/expedition/class/expedition.class.php'; +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('sendingindex')); + // Load translation files required by the page $langs->loadLangs(array('orders', 'sendings')); @@ -291,6 +297,9 @@ else dol_print_error($db); print ''; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardWarehouseSendings', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/expensereport/index.php b/htdocs/expensereport/index.php index f7d4e2a8405..461a7aec4fe 100644 --- a/htdocs/expensereport/index.php +++ b/htdocs/expensereport/index.php @@ -3,7 +3,8 @@ * Copyright (C) 2004-2015 Laurent Destailleur * Copyright (C) 2004 Eric Seigne * Copyright (C) 2005-2011 Regis Houssin - * Copyright (C) 2015 Alexandre Spangaro + * Copyright (C) 2015 Alexandre Spangaro + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -30,6 +31,11 @@ require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT . '/compta/tva/class/tva.class.php'; require_once DOL_DOCUMENT_ROOT . '/expensereport/class/expensereport.class.php'; +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('expensereportindex')); + // Load translation files required by the page $langs->loadLangs(array('companies', 'users', 'trips')); @@ -230,6 +236,9 @@ else dol_print_error($db); print ''; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardExpenseReport', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/fichinter/index.php b/htdocs/fichinter/index.php index d240aadf42d..f97c99dc839 100644 --- a/htdocs/fichinter/index.php +++ b/htdocs/fichinter/index.php @@ -2,8 +2,8 @@ /* Copyright (C) 2003-2004 Rodolphe Quiedeville * Copyright (C) 2004-2015 Laurent Destailleur * Copyright (C) 2005-2012 Regis Houssin - * Copyright (C) 2015 Charlie Benke - + * Copyright (C) 2015 Charlie Benke + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -32,6 +32,11 @@ require_once DOL_DOCUMENT_ROOT .'/fichinter/class/fichinter.class.php'; if (!$user->rights->ficheinter->lire) accessforbidden(); +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('interventionindex')); + // Load translation files required by the page $langs->load("interventions"); @@ -356,6 +361,8 @@ if (! empty($conf->ficheinter->enabled)) print ''; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardInterventions', $parameters, $object); // Note that $action and $object may have been modified by hook llxFooter(); diff --git a/htdocs/fourn/commande/index.php b/htdocs/fourn/commande/index.php index 6c2b66bc7f3..e66054dc750 100644 --- a/htdocs/fourn/commande/index.php +++ b/htdocs/fourn/commande/index.php @@ -1,8 +1,9 @@ - * Copyright (C) 2004-2012 Laurent Destailleur - * Copyright (C) 2005-2012 Regis Houssin - * Copyright (C) 2012 Vinicius Nogueira + * Copyright (C) 2004-2012 Laurent Destailleur + * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2012 Vinicius Nogueira + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -34,6 +35,11 @@ $orderid = GETPOST('orderid'); if ($user->societe_id) $socid=$user->societe_id; $result = restrictedArea($user, 'fournisseur', $orderid, '', 'commande'); +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('orderssuppliersindex')); + // Load translation files required by the page $langs->loadLangs(array("suppliers", "orders")); @@ -432,6 +438,9 @@ print "
"; print ''; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardOrdersSuppliers', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/hrm/index.php b/htdocs/hrm/index.php index 066a21ebad0..0dad608a5a5 100644 --- a/htdocs/hrm/index.php +++ b/htdocs/hrm/index.php @@ -3,6 +3,7 @@ * Copyright (C) 2013-2015 Laurent Destailleur * Copyright (C) 2012-2014 Regis Houssin * Copyright (C) 2015-2016 Alexandre Spangaro + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -36,6 +37,9 @@ if ($conf->deplacement->enabled) require_once DOL_DOCUMENT_ROOT.'/compta/deplace if ($conf->expensereport->enabled) require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php'; require_once DOL_DOCUMENT_ROOT.'/holiday/class/holiday.class.php'; +$hookmanager = new HookManager($db); +$hookmanager->initHooks('hrmindex'); + // Load translation files required by the page $langs->loadLangs(array('users', 'holidays', 'trips', 'boxes')); @@ -392,6 +396,10 @@ if (! empty($conf->expensereport->enabled) && $user->rights->expensereport->lire print ''; +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardHRM', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/mrp/index.php b/htdocs/mrp/index.php index c30d75b1d40..a587706dbb7 100644 --- a/htdocs/mrp/index.php +++ b/htdocs/mrp/index.php @@ -1,8 +1,9 @@ - * Copyright (C) 2003 Jean-Louis Bergamo - * Copyright (C) 2004-2017 Laurent Destailleur - * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2003 Jean-Louis Bergamo + * Copyright (C) 2004-2017 Laurent Destailleur + * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -27,6 +28,11 @@ require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/bom/class/bom.class.php'; +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('mrpindex')); + // Load translation files required by the page $langs->loadLangs(array("companies","mrp")); @@ -122,6 +128,9 @@ else print ''; +$parameters = array('type' => $type, 'user' => $user); +$reshook = $hookmanager->executeHooks('dashboardBOM', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/opensurvey/index.php b/htdocs/opensurvey/index.php index 413572ca4f6..0a9e3483348 100644 --- a/htdocs/opensurvey/index.php +++ b/htdocs/opensurvey/index.php @@ -1,6 +1,7 @@ - * + * Copyright (C) 2019 Nicolas ZABOURI + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or @@ -32,6 +33,12 @@ if (!$user->rights->opensurvey->read) accessforbidden(); * View */ + +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('opensurveyindex')); + // Load translation files required by the page $langs->load("opensurvey"); @@ -78,6 +85,9 @@ print ''; print ''; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardOpenSurvey', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/product/index.php b/htdocs/product/index.php index 950f4d47b5f..fe93c4b5e6e 100644 --- a/htdocs/product/index.php +++ b/htdocs/product/index.php @@ -6,6 +6,7 @@ * Copyright (C) 2015 Jean-François Ferry * Copyright (C) 2019 Pierre Ardoin * Copyright (C) 2019 Frédéric France + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -397,6 +398,9 @@ if (! empty($conf->global->MAIN_SHOW_PRODUCT_ACTIVITY_TRIM)) print ''; +$parameters = array('type' => $type, 'user' => $user); +$reshook = $hookmanager->executeHooks('dashboardProductsServices', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/product/stock/index.php b/htdocs/product/stock/index.php index a19025b5dd6..a0b4895b669 100644 --- a/htdocs/product/stock/index.php +++ b/htdocs/product/stock/index.php @@ -2,6 +2,7 @@ /* Copyright (C) 2003-2006 Rodolphe Quiedeville * Copyright (C) 2004-2016 Laurent Destailleur * Copyright (C) 2005-2009 Regis Houssin + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -27,6 +28,11 @@ require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/product/stock/class/entrepot.class.php'; require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php'; +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('stockindex')); + // Load translation files required by the page $langs->loadLangs(array('stocks', 'productbatch')); @@ -184,6 +190,9 @@ if ($resql) //print ''; print ''; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardWarehouse', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/projet/activity/index.php b/htdocs/projet/activity/index.php index b3fb66116bf..2148ba576d8 100644 --- a/htdocs/projet/activity/index.php +++ b/htdocs/projet/activity/index.php @@ -2,6 +2,7 @@ /* Copyright (C) 2001-2005 Rodolphe Quiedeville * Copyright (C) 2006-2015 Laurent Destailleur * Copyright (C) 2010 Regis Houssin + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -39,6 +40,11 @@ if ($user->societe_id > 0) $socid=$user->societe_id; //$result = restrictedArea($user, 'projet', $projectid); if (!$user->rights->projet->lire) accessforbidden(); +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('activityindex')); + // Load translation files required by the page $langs->load("projects"); @@ -573,6 +579,9 @@ if (empty($conf->global->PROJECT_HIDE_TASKS) && ! empty($conf->global->PROJECT_S print ''; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardActivities', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/projet/index.php b/htdocs/projet/index.php index fa77cb4b52c..da148c1eda6 100644 --- a/htdocs/projet/index.php +++ b/htdocs/projet/index.php @@ -2,6 +2,7 @@ /* Copyright (C) 2001-2005 Rodolphe Quiedeville * Copyright (C) 2004-2016 Laurent Destailleur * Copyright (C) 2005-2010 Regis Houssin + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -30,6 +31,11 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('projectsindex')); + // Load translation files required by the page $langs->loadLangs(array('projects', 'companies')); @@ -319,6 +325,9 @@ if (! empty($conf->global->PROJECT_SHOW_PROJECT_LIST_ON_PROJECT_AREA)) print ''; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardProjects', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/reception/index.php b/htdocs/reception/index.php index 3b0bb7a05e0..97e25ab39e5 100644 --- a/htdocs/reception/index.php +++ b/htdocs/reception/index.php @@ -1,8 +1,9 @@ - * Copyright (C) 2004-2011 Laurent Destailleur - * Copyright (C) 2005-2012 Regis Houssin - * Copyright (C) 2018 Quentin Vial-Gouteyron +/* Copyright (C) 2003-2005 Rodolphe Quiedeville + * Copyright (C) 2004-2011 Laurent Destailleur + * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2018 Quentin Vial-Gouteyron + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -28,6 +29,11 @@ require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.class.php'; require_once DOL_DOCUMENT_ROOT.'/reception/class/reception.class.php'; +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('receptionindex')); + $langs->load("orders"); $langs->load("receptions"); @@ -292,6 +298,8 @@ else dol_print_error($db); print ''; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardWarehouseReceptions', $parameters, $object); // Note that $action and $object may have been modified by hook llxFooter(); $db->close(); diff --git a/htdocs/societe/index.php b/htdocs/societe/index.php index 2404c11861e..d6df59f4740 100644 --- a/htdocs/societe/index.php +++ b/htdocs/societe/index.php @@ -2,9 +2,10 @@ /* Copyright (C) 2001-2006 Rodolphe Quiedeville * Copyright (C) 2004-2018 Laurent Destailleur * Copyright (C) 2005-2012 Regis Houssin - * Copyright (C) 2014 Charles-Fr Benke + * Copyright (C) 2014 Charles-Fr Benke * Copyright (C) 2015 Jean-François Ferry * Copyright (C) 2016 Ferran Marcet + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -29,6 +30,11 @@ require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php'; +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('thirdpartiesindex')); + $langs->load("companies"); $socid = GETPOST('socid', 'int'); @@ -366,6 +372,9 @@ else //print ''; print ''; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardThirdparties', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/supplier_proposal/index.php b/htdocs/supplier_proposal/index.php index 5a2e6df2f29..d75d0c1647c 100644 --- a/htdocs/supplier_proposal/index.php +++ b/htdocs/supplier_proposal/index.php @@ -2,6 +2,7 @@ /* Copyright (C) 2003-2004 Rodolphe Quiedeville * Copyright (C) 2004-2011 Laurent Destailleur * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -27,6 +28,11 @@ require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; require_once DOL_DOCUMENT_ROOT .'/supplier_proposal/class/supplier_proposal.class.php'; +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('suppliersproposalsindex')); + // Load translation files required by the page $langs->loadLangs(array('supplier_proposal', 'companies')); @@ -375,6 +381,9 @@ if (! empty($conf->supplier_proposal->enabled) && $user->rights->supplier_propos print ''; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardSupplierProposal', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/ticket/index.php b/htdocs/ticket/index.php index 824b1f1833e..09b8a208c3c 100644 --- a/htdocs/ticket/index.php +++ b/htdocs/ticket/index.php @@ -1,5 +1,6 @@ +/* Copyright (C) - 2013-2016 Jean-François FERRY + * Copyright (C) - 2019 Nicolas ZABOURI * * 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 @@ -25,6 +26,11 @@ require_once DOL_DOCUMENT_ROOT . '/ticket/class/actions_ticket.class.php'; require_once DOL_DOCUMENT_ROOT . '/ticket/class/ticketstats.class.php'; require_once DOL_DOCUMENT_ROOT . '/core/class/dolgraph.class.php'; +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('ticketsindex')); + // Load translation files required by the page $langs->loadLangs(array('companies', 'other', 'ticket')); @@ -371,6 +377,9 @@ if ($result) { print ''; print '
'; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardTickets', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(''); $db->close(); diff --git a/htdocs/user/home.php b/htdocs/user/home.php index 9a7d0ab94fd..bc766f4dc4b 100644 --- a/htdocs/user/home.php +++ b/htdocs/user/home.php @@ -1,6 +1,7 @@ * Copyright (C) 2005-2018 Regis Houssin + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -286,6 +287,10 @@ if ($canreadperms) //print ''; print ''; +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardUsersGroups', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); From 8835b49f3fccc90cbe52d2a83c61d61323017f2e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 18 Jun 2019 14:30:13 +0200 Subject: [PATCH 285/828] Debug the accounting-file tool --- htdocs/compta/accounting-files.php | 278 +++++++++++------- .../install/mysql/migration/9.0.0-10.0.0.sql | 2 + htdocs/install/mysql/migration/repair.sql | 1 + htdocs/user/param_ihm.php | 2 +- 4 files changed, 177 insertions(+), 106 deletions(-) diff --git a/htdocs/compta/accounting-files.php b/htdocs/compta/accounting-files.php index 5a3097f6aa8..c663a179d6d 100644 --- a/htdocs/compta/accounting-files.php +++ b/htdocs/compta/accounting-files.php @@ -16,13 +16,11 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - - /** +/** * \file htdocs/compta/accounting-files.php * \ingroup compta * \brief Page to show portoflio and files of a thirdparty and download it */ - require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; @@ -34,7 +32,7 @@ require_once DOL_DOCUMENT_ROOT.'/don/class/don.class.php'; require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php'; require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php'; -$langs->loadLangs(array("accountancy", "bills", "companies")); +$langs->loadLangs(array("accountancy", "bills", "companies", "salaries")); $date_start =GETPOST('date_start', 'alpha'); $date_startDay= GETPOST('date_startday', 'int'); @@ -46,11 +44,11 @@ $date_stopDay= GETPOST('date_stopday', 'int'); $date_stopMonth= GETPOST('date_stopmonth', 'int'); $date_stopYear= GETPOST('date_stopyear', 'int'); //FIXME doldate -$date_stop=($date_stopDay)?dol_mktime(0, 0, 0, $date_stopMonth, $date_stopDay, $date_stopYear):strtotime($date_stop); +$date_stop=($date_stopDay)?dol_mktime(23, 59, 59, $date_stopMonth, $date_stopDay, $date_stopYear):strtotime($date_stop); $action =GETPOST('action', 'alpha'); // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context -$hookmanager->initHooks(array('comptafileslist', 'globallist')); +$hookmanager->initHooks(array('comptafileslist','globallist')); // Load variable for pagination $limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; @@ -66,6 +64,7 @@ if (! $sortorder) $sortorder="DESC"; $arrayfields=array( + 'type'=>array('label'=>"Type", 'checked'=>1), 'date'=>array('label'=>"Date", 'checked'=>1), //... ); @@ -83,7 +82,7 @@ if ($user->societe_id > 0) * Actions */ -$entity = GETPOST('entity', 'int')?GETPOST('entity', 'int'):$conf->entity; +$entity = GETPOST('entity','int')?GETPOST('entity','int'):$conf->entity; //$parameters = array('socid' => $id); //$reshook = $hookmanager->executeHooks('doActions', $parameters, $object); // Note that $object may have been modified by some hooks @@ -106,38 +105,45 @@ if (($action=="searchfiles" || $action=="dl" )) { if (! $error) { - $wheretail=" '".$db->idate($date_start)."' AND '".$db->idate($date_stop)."'"; + $wheretail=" '".$db->idate($date_start)."' AND '".$db->idate($date_stop)."'"; - $sql="SELECT rowid as id, ref as ref, paye as paid, total_ttc, fk_soc, datef as date, 'Invoice' as item FROM ".MAIN_DB_PREFIX."facture"; + $sql="SELECT t.rowid as id, t.ref, t.paye as paid, total as total_ht, total_ttc, tva as total_vat, fk_soc, t.datef as date, 'Invoice' as item, s.nom as thirdparty_name, s.code_client as thirdparty_code, c.code as country_code, s.tva_intra as vatnum"; + $sql.=" FROM ".MAIN_DB_PREFIX."facture as t LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON s.rowid = t.fk_soc LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON c.rowid = s.fk_pays"; $sql.=" WHERE datef between ".$wheretail; - $sql.=" AND entity IN (".($entity==1?'0,1':$entity).')'; - $sql.=" AND fk_statut <> ".Facture::STATUS_DRAFT; + $sql.=" AND t.entity IN (".($entity==1?'0,1':$entity).')'; + $sql.=" AND t.fk_statut <> ".Facture::STATUS_DRAFT; $sql.=" UNION ALL"; - $sql.=" SELECT rowid as id, ref, paye as paid, total_ttc, fk_soc, datef as date, 'SupplierInvoice' as item FROM ".MAIN_DB_PREFIX."facture_fourn"; + $sql.=" SELECT t.rowid as id, t.ref, paye as paid, total_ht, total_ttc, total_tva as total_vat, fk_soc, datef as date, 'SupplierInvoice' as item, s.nom as thirdparty_name, s.code_fournisseur as thirdparty_code, c.code as country_code, s.tva_intra as vatnum"; + $sql.=" FROM ".MAIN_DB_PREFIX."facture_fourn as t LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON s.rowid = t.fk_soc LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON c.rowid = s.fk_pays"; $sql.=" WHERE datef between ".$wheretail; - $sql.=" AND entity IN (".($entity==1?'0,1':$entity).')'; - $sql.=" AND fk_statut <> ".FactureFournisseur::STATUS_DRAFT; + $sql.=" AND t.entity IN (".($entity==1?'0,1':$entity).')'; + $sql.=" AND t.fk_statut <> ".FactureFournisseur::STATUS_DRAFT; $sql.=" UNION ALL"; - $sql.=" SELECT rowid as id, ref, paid, total_ttc, fk_user_author as fk_soc, date_fin as date, 'ExpenseReport' as item FROM ".MAIN_DB_PREFIX."expensereport"; + $sql.=" SELECT t.rowid as id, t.ref, paid, total_ht, total_ttc, total_tva as total_vat, fk_user_author as fk_soc, date_fin as date, 'ExpenseReport' as item, CONCAT(CONCAT(u.lastname, ' '), u.firstname) as thirdparty_name, '' as thirdparty_code, c.code as country_code, '' as vatnum"; + $sql.=" FROM ".MAIN_DB_PREFIX."expensereport as t LEFT JOIN ".MAIN_DB_PREFIX."user as u ON u.rowid = t.fk_user_author LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON c.rowid = u.fk_country"; $sql.=" WHERE date_fin between ".$wheretail; - $sql.=" AND entity IN (".($entity==1?'0,1':$entity).')'; - $sql.=" AND fk_statut <> ".ExpenseReport::STATUS_DRAFT; + $sql.=" AND t.entity IN (".($entity==1?'0,1':$entity).')'; + $sql.=" AND t.fk_statut <> ".ExpenseReport::STATUS_DRAFT; $sql.=" UNION ALL"; - $sql.=" SELECT rowid as id, ref, paid, amount as total_ttc, '0' as fk_soc, datedon as date, 'Donation' as item FROM ".MAIN_DB_PREFIX."don"; + $sql.=" SELECT t.rowid as id, t.ref, paid, amount as total_ht, amount as total_ttc, 0 as total_vat, 0 as fk_soc, datedon as date, 'Donation' as item, t.societe as thirdparty_name, '' as thirdparty_code, c.code as country_code, '' as vatnum"; + $sql.=" FROM ".MAIN_DB_PREFIX."don as t LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON c.rowid = t.fk_country"; $sql.=" WHERE datedon between ".$wheretail; - $sql.=" AND entity IN (".($entity==1?'0,1':$entity).')'; - $sql.=" AND fk_statut <> ".Don::STATUS_DRAFT; + $sql.=" AND t.entity IN (".($entity==1?'0,1':$entity).')'; + $sql.=" AND t.fk_statut <> ".Don::STATUS_DRAFT; $sql.=" UNION ALL"; - $sql.=" SELECT rowid as id, label as ref, 1 as paid, amount as total_ttc, fk_user as fk_soc,datep as date, 'SalaryPayment' as item FROM ".MAIN_DB_PREFIX."payment_salary"; + $sql.=" SELECT t.rowid as id, t.label as ref, 1 as paid, amount as total_ht, amount as total_ttc, 0 as total_vat, t.fk_user as fk_soc, datep as date, 'SalaryPayment' as item, CONCAT(CONCAT(u.lastname, ' '), u.firstname) as thirdparty_name, '' as thirdparty_code, c.code as country_code, '' as vatnum"; + $sql.=" FROM ".MAIN_DB_PREFIX."payment_salary as t LEFT JOIN ".MAIN_DB_PREFIX."user as u ON u.rowid = t.fk_user LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON c.rowid = u.fk_country"; $sql.=" WHERE datep between ".$wheretail; - $sql.=" AND entity IN (".($entity==1?'0,1':$entity).')'; + $sql.=" AND t.entity IN (".($entity==1?'0,1':$entity).')'; //$sql.=" AND fk_statut <> ".PaymentSalary::STATUS_DRAFT; $sql.=" UNION ALL"; - $sql.=" SELECT rowid as id, libelle as ref, paye as paid, amount as total_ttc, 0 as fk_soc, date_creation as date, 'SocialContributions' as item FROM ".MAIN_DB_PREFIX."chargesociales"; + $sql.=" SELECT t.rowid as id, t.libelle as ref, paye as paid, amount as total_ht, amount as total_ttc, 0 as total_tva, 0 as fk_soc, date_creation as date, 'SocialContributions' as item, '' as thirdparty_name, '' as thirdparty_code, '' as country_code, '' as vatnum"; + $sql.=" FROM ".MAIN_DB_PREFIX."chargesociales as t"; $sql.=" WHERE date_creation between ".$wheretail; - $sql.=" AND entity IN (".($entity==1?'0,1':$entity).')'; + $sql.=" AND t.entity IN (".($entity==1?'0,1':$entity).')'; //$sql.=" AND fk_statut <> ".ChargeSociales::STATUS_DRAFT; $sql.= $db->order($sortfield, $sortorder); + //print $sql; $resd = $db->query($sql); $files=array(); @@ -162,63 +168,68 @@ if (($action=="searchfiles" || $action=="dl" )) { case "Invoice": $subdir = ''; $subdir.=($subdir ? '/' : '').dol_sanitizeFileName($objd->ref); - $upload_dir = $conf->facture->dir_output.'/'.$subdir; - $link="document.php?modulepart=facture&file=".str_replace('/', '%2F', $subdir).'%2F'; - break; + $upload_dir = $conf->facture->dir_output.'/'.$subdir; + $link="document.php?modulepart=facture&file=".str_replace('/', '%2F', $subdir).'%2F'; + break; case "SupplierInvoice": $tmpinvoicesupplier->fetch($objd->id); $subdir = get_exdir($tmpinvoicesupplier->id, 2, 0, 1, $tmpinvoicesupplier, 'invoice_supplier'); // TODO Use first file - $subdir.=($subdir ? '/' : '').dol_sanitizeFileName($objd->ref); - $upload_dir = $conf->fournisseur->facture->dir_output.'/'.$subdir; - $link="document.php?modulepart=facture_fournisseur&file=".str_replace('/', '%2F', $subdir).'%2F'; - break; + $subdir.=($subdir ? '/' : '').dol_sanitizeFileName($objd->ref); + $upload_dir = $conf->fournisseur->facture->dir_output.'/'.$subdir; + $link="document.php?modulepart=facture_fournisseur&file=".str_replace('/', '%2F', $subdir).'%2F'; + break; case "ExpenseReport": $subdir = ''; $subdir.=($subdir ? '/' : '').dol_sanitizeFileName($objd->ref); - $upload_dir = $conf->expensereport->dir_output.'/'.$subdir; - $link="document.php?modulepart=expensereport&file=".str_replace('/', '%2F', $subdir).'%2F'; - break; + $upload_dir = $conf->expensereport->dir_output.'/'.$subdir; + $link="document.php?modulepart=expensereport&file=".str_replace('/', '%2F', $subdir).'%2F'; + break; case "SalaryPayment": $subdir = ''; $subdir.=($subdir ? '/' : '').dol_sanitizeFileName($objd->id); - $upload_dir = $conf->salaries->dir_output.'/'.$subdir; - $link="document.php?modulepart=salaries&file=".str_replace('/', '%2F', $subdir).'%2F'; - break; + $upload_dir = $conf->salaries->dir_output.'/'.$subdir; + $link="document.php?modulepart=salaries&file=".str_replace('/', '%2F', $subdir).'%2F'; + break; case "Donation": - $tmpdonation->fetch($objp->id); - $subdir=get_exdir(0, 0, 0, 0, $tmpdonation, 'donation'); - $subdir.=($subdir ? '/' : '').dol_sanitizeFileName($objd->id); - $upload_dir = $conf->don->dir_output . '/' . $subdir; - $link="document.php?modulepart=don&file=".str_replace('/', '%2F', $subdir).'%2F'; - break; + $tmpdonation->fetch($objp->id); + $subdir=get_exdir(0, 0, 0, 0, $tmpdonation, 'donation'); + $subdir.=($subdir ? '/' : '').dol_sanitizeFileName($objd->id); + $upload_dir = $conf->don->dir_output . '/' . $subdir; + $link="document.php?modulepart=don&file=".str_replace('/', '%2F', $subdir).'%2F'; + break; case "SocialContributions": $subdir = ''; $subdir.=($subdir ? '/' : '').dol_sanitizeFileName($objd->id); - $upload_dir = $conf->tax->dir_output . '/' . $subdir; - $link="document.php?modulepart=tax&file=".str_replace('/', '%2F', $subdir).'%2F'; - break; + $upload_dir = $conf->tax->dir_output . '/' . $subdir; + $link="document.php?modulepart=tax&file=".str_replace('/', '%2F', $subdir).'%2F'; + break; default: - $subdir = ''; - $upload_dir = ''; - $link = ''; + $subdir=''; + $upload_dir=''; + $link=''; break; } if (!empty($upload_dir)) { $result=true; - $files=dol_dir_list($upload_dir, "files", 0, '', '(\.meta|_preview\.png)$', '', SORT_ASC, 1); - + //var_dump($upload_dir); if (count($files) < 1) { - $nofile['id']=$objd->id; - $nofile['date']=$db->idate($objd->date); + $nofile['id']=$objd->id; + $nofile['date']=$db->idate($objd->date); $nofile['paid']=$objd->paid; - $nofile['amount']=$objd->total_ttc; + $nofile['amount_ht']=$objd->total_ht; + $nofile['amount_ttc']=$objd->total_ttc; + $nofile['amount_vat']=$objd->total_vat; $nofile['ref']=($objd->ref ? $objd->ref : $objd->id); $nofile['fk']=$objd->fk_soc; $nofile['item']=$objd->item; + $nofile['thirdparty_name']=$objd->thirdparty_name; + $nofile['thirdparty_code']=$objd->thirdparty_code; + $nofile['country_code']=$objd->country_code; + $nofile['vatnum']=$objd->vatnum; $filesarray[]=$nofile; } @@ -226,13 +237,21 @@ if (($action=="searchfiles" || $action=="dl" )) { { foreach ($files as $key => $file) { - $file['id']=$objd->id; - $file['date']=$db->idate($objd->date); + $file['id']=$objd->id; + $file['date']=$db->idate($objd->date); $file['paid']=$objd->paid; - $file['amount']=$objd->total_ttc; + $file['amount_ht']=$objd->total_ht; + $file['amount_ttc']=$objd->total_ttc; + $file['amount_vat']=$objd->total_vat; $file['ref']=($objd->ref ? $objd->ref : $objd->id); $file['fk']=$objd->fk_soc; $file['item']=$objd->item; + + $file['thirdparty_name']=$objd->thirdparty_name; + $file['thirdparty_code']=$objd->thirdparty_code; + $file['country_code']=$objd->country_code; + $file['vatnum']=$objd->vatnum; + $file['link']=$link.$file['name']; $file['relpathnamelang'] = $langs->trans($file['item']).'/'.$file['name']; @@ -252,27 +271,30 @@ if (($action=="searchfiles" || $action=="dl" )) { } } -/* - * cleanup of old ZIP - */ -//FIXME + /* *ZIP creation */ -if ($result && $action == "dl") +$dirfortmpfile = ($conf->accounting->dir_temp ? $conf->accounting->dir_temp : $conf->comptabilite->dir_temp); +if (empty($dirfortmpfile)) { - if (! extension_loaded('zip')) - { - setEventMessages('PHPZIPExtentionNotLoaded', null, 'errors'); - exit; - } + setEventMessages($langs->trans("ErrorNoAccountingModuleEnabled"), null, 'errors'); + $error++; +} - $dirfortmpfile = ($conf->accounting->dir_temp ? $conf->accounting->dir_temp : $conf->compta->dir_temp); + +if ($result && $action == "dl" && ! $error) +{ + if (! extension_loaded('zip')) + { + setEventMessages('PHPZIPExtentionNotLoaded', null, 'errors'); + exit; + } dol_mkdir($dirfortmpfile); - $log='date,type,ref,total,paid,filename,item_id'."\n"; + $log=$langs->transnoentitiesnoconv("Type").','.$langs->transnoentitiesnoconv("Date").','.$langs->transnoentitiesnoconv("Ref").','.$langs->transnoentitiesnoconv("TotalHT").','.$langs->transnoentitiesnoconv("TotalTTC").','.$langs->transnoentitiesnoconv("TotalVAT").','.$langs->transnoentitiesnoconv("Paid").',filename,item_id,'.$langs->trans("ThirdParty").','.$langs->trans("Code").','.$langs->trans("Country").','.$langs->trans("VATIntra")."\n"; $zipname = $dirfortmpfile.'/'.dol_print_date($date_start, 'dayrfc')."-".dol_print_date($date_stop, 'dayrfc').'_export.zip'; dol_delete_file($zipname); @@ -281,10 +303,10 @@ if ($result && $action == "dl") $res = $zip->open($zipname, ZipArchive::OVERWRITE|ZipArchive::CREATE); if ($res) { - foreach ($filesarray as $key=> $file) + foreach ($filesarray as $key => $file) { if (file_exists($file["fullname"])) $zip->addFile($file["fullname"], $file["relpathnamelang"]); // - $log.=dol_print_date($file['date'], 'dayrfc').','.$file['item'].','.$file['ref'].','.$file['amount'].','.$file['paid'].','.$file["name"].','.$file['fk']."\n"; + $log.=$file['item'].','.dol_print_date($file['date'], 'dayrfc').','.$file['ref'].','.$file['amount_ht'].','.$file['amount_ttc'].','.$file['amount_vat'].','.$file['paid'].','.$file["name"].','.$file['fk'].','.$file['thirdparty_name'].','.$file['thirdparty_code'].','.$file['country_code'].',"'.$file['vatnum'].'"'."\n"; } $zip->addFromString('transactions.csv', $log); $zip->close(); @@ -299,6 +321,10 @@ if ($result && $action == "dl") exit(); } + else + { + setEventMessages($langs->trans("FailedToOpenFile", $zipname), null, 'errors'); + } } @@ -329,11 +355,11 @@ print ' - '.$form->selectDate($date_stop, 'date_stop', 0, 0, 0, "", 1, 1, 0)."\n // Export is for current company only ! if (! empty($conf->multicompany->enabled) && is_object($mc)) { - print '('.$langs->trans("Entity").' : '; - $mc->dao->getEntities(); - $mc->dao->fetch($conf->entity); - print $mc->dao->label; - print ")\n"; + print '('.$langs->trans("Entity").' : '; + $mc->dao->getEntities(); + $mc->dao->fetch($conf->entity); + print $mc->dao->label; + print ")\n"; } print ''; @@ -376,14 +402,18 @@ if (!empty($date_start) && !empty($date_stop)) print '
'; // You can use div-table-responsive-no-min if you dont need reserved height for your table print ''; print ''; - print_liste_field_titre($arrayfields['date']['label'], $_SERVER["PHP_SELF"], "date", "", $param, 'class="nowrap"', $sortfield, $sortorder); - print ''; + print_liste_field_titre($arrayfields['type']['label'], $_SERVER["PHP_SELF"], "type", "", $param, '', $sortfield, $sortorder, 'nowrap '); + print_liste_field_titre($arrayfields['date']['label'], $_SERVER["PHP_SELF"], "date", "", $param, '', $sortfield, $sortorder, 'center nowrap '); print ''; print ''; print ''; - print ''; - print ''; - print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; print ''; if ($result) { @@ -397,18 +427,11 @@ if (!empty($date_start) && !empty($date_stop)) { // Sort array by date ASC to calculate balance + $totalET = 0; + $totalIT = 0; + $totalVAT = 0; $totalDebit = 0; $totalCredit = 0; - // Balance calculation - $balance = 0; - foreach($TData as &$data1) { - if ($data1['item']!='Invoice' && $data1['item']!='Donation') - { - $data1['amount']=-$data1['amount']; - } - $balance += $data1['amount']; - $data1['balance'] = $balance; - } // Display array foreach($TData as $data) @@ -417,11 +440,17 @@ if (!empty($date_start) && !empty($date_stop)) //if (!empty($data['fk_facture'])) $html_class = 'facid-'.$data['fk_facture']; //elseif (!empty($data['fk_paiement'])) $html_class = 'payid-'.$data['fk_paiement']; print ''; - print "'; + + // Date + print '\n"; - print ''; - print ''; + + // Ref + print ''; // File link print '\n"; + print "\n"; + + // Paid + print ''; + + // Total ET + print '\n"; + // Total IT + print '\n"; + // Total VAT + print '\n"; + + print '\n"; + + print '\n"; + + print '\n"; + + print '\n"; + + // Debit + //print '\n"; + // Credit + //print '\n"; + + $totalET += $data['amount_ht']; + $totalIT += $data['amount_ttc']; + $totalVAT += $data['amount_vat']; + + $totalDebit += ($data['amount_ttc'] > 0) ? abs($data['amount_ttc']) : 0; + $totalCredit += ($data['amount_ttc'] > 0) ? 0 : abs($data['amount_ttc']); - print ''; - print '\n"; - $totalDebit += ($data['amount'] > 0) ? abs($data['amount']) : 0; - print '\n"; - $totalCredit += ($data['amount'] > 0) ? 0 : abs($data['amount']); // Balance - print '\n"; + //print '\n"; + print "\n"; } print ''; - print ''; - print ''; - print ''; - print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + /*print ''; + print ''; + print ''; + */ print "\n"; } } @@ -453,5 +520,6 @@ if (!empty($date_start) && !empty($date_stop)) print ''; } + llxFooter(); $db->close(); diff --git a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql index 40f7da3fa95..1270b8b279a 100644 --- a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql +++ b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql @@ -60,6 +60,8 @@ CREATE TABLE llx_pos_cash_fence( -- For 10.0 +UPDATE llx_chargesociales SET date_creation = tms WHERE date_creation IS NULL; + DROP TABLE llx_cotisation; ALTER TABLE llx_accounting_bookkeeping DROP COLUMN validated; ALTER TABLE llx_accounting_bookkeeping_tmp DROP COLUMN validated; diff --git a/htdocs/install/mysql/migration/repair.sql b/htdocs/install/mysql/migration/repair.sql index 387f8e159ec..37d3f984824 100755 --- a/htdocs/install/mysql/migration/repair.sql +++ b/htdocs/install/mysql/migration/repair.sql @@ -400,6 +400,7 @@ ALTER TABLE llx_accounting_account ADD UNIQUE INDEX uk_accounting_account (accou -- p.tva_tx = 0 -- where price = 17.5 +UPDATE llx_chargesociales SET date_creation = tms WHERE date_creation IS NULL; -- VMYSQL4.1 SET sql_mode = 'ALLOW_INVALID_DATES'; -- VMYSQL4.1 update llx_accounting_account set tms = datec where DATE(STR_TO_DATE(tms, '%Y-%m-%d')) IS NULL; diff --git a/htdocs/user/param_ihm.php b/htdocs/user/param_ihm.php index 2ded2013601..90228aa952e 100644 --- a/htdocs/user/param_ihm.php +++ b/htdocs/user/param_ihm.php @@ -173,7 +173,7 @@ if (! empty($conf->projet->enabled)) $tmparray['projet/index.php?mainmenu=projec if (! empty($conf->holiday->enabled) || ! empty($conf->expensereport->enabled)) $tmparray['hrm/index.php?mainmenu=hrm&leftmenu=']='HRMArea'; // TODO Complete list with first level of menus if (! empty($conf->product->enabled) || ! empty($conf->service->enabled)) $tmparray['product/index.php?mainmenu=products&leftmenu=']='ProductsAndServicesArea'; if (! empty($conf->propal->enabled) || ! empty($conf->commande->enabled) || ! empty($conf->ficheinter->enabled) || ! empty($conf->contrat->enabled)) $tmparray['comm/index.php?mainmenu=commercial&leftmenu=']='CommercialArea'; -if (! empty($conf->compta->enabled) || ! empty($conf->accounting->enabled)) $tmparray['compta/index.php?mainmenu=compta&leftmenu=']='AccountancyTreasuryArea'; +if (! empty($conf->comptabilite->enabled) || ! empty($conf->accounting->enabled)) $tmparray['compta/index.php?mainmenu=compta&leftmenu=']='AccountancyTreasuryArea'; if (! empty($conf->adherent->enabled)) $tmparray['adherents/index.php?mainmenu=members&leftmenu=']='MembersArea'; if (! empty($conf->agenda->enabled)) $tmparray['comm/action/index.php?mainmenu=agenda&leftmenu=']='Agenda'; From ad20a5158c2abe0a04efa3b4fa74a265b5071ead Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 18 Jun 2019 14:32:28 +0200 Subject: [PATCH 286/828] Fix columns in csv --- htdocs/compta/accounting-files.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/accounting-files.php b/htdocs/compta/accounting-files.php index c663a179d6d..0954a194b73 100644 --- a/htdocs/compta/accounting-files.php +++ b/htdocs/compta/accounting-files.php @@ -294,7 +294,7 @@ if ($result && $action == "dl" && ! $error) dol_mkdir($dirfortmpfile); - $log=$langs->transnoentitiesnoconv("Type").','.$langs->transnoentitiesnoconv("Date").','.$langs->transnoentitiesnoconv("Ref").','.$langs->transnoentitiesnoconv("TotalHT").','.$langs->transnoentitiesnoconv("TotalTTC").','.$langs->transnoentitiesnoconv("TotalVAT").','.$langs->transnoentitiesnoconv("Paid").',filename,item_id,'.$langs->trans("ThirdParty").','.$langs->trans("Code").','.$langs->trans("Country").','.$langs->trans("VATIntra")."\n"; + $log=$langs->transnoentitiesnoconv("Type").','.$langs->transnoentitiesnoconv("Date").','.$langs->transnoentitiesnoconv("Ref").','.$langs->transnoentitiesnoconv("TotalHT").','.$langs->transnoentitiesnoconv("TotalTTC").','.$langs->transnoentitiesnoconv("TotalVAT").','.$langs->transnoentitiesnoconv("Paid").',filename,item_id,'.$langs->transnoentitiesnoconv("ThirdParty").','.$langs->transnoentitiesnoconv("Code").','.$langs->transnoentitiesnoconv("Country").','.$langs->transnoentitiesnoconv("VATIntra")."\n"; $zipname = $dirfortmpfile.'/'.dol_print_date($date_start, 'dayrfc')."-".dol_print_date($date_stop, 'dayrfc').'_export.zip'; dol_delete_file($zipname); From 27f52dd0bd73fdb2faa9c121ec95fb7fb512839c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 18 Jun 2019 14:32:35 +0200 Subject: [PATCH 287/828] Fix columns in csv --- htdocs/compta/compta-files.php | 474 +++++++++++++++++++-------------- 1 file changed, 276 insertions(+), 198 deletions(-) diff --git a/htdocs/compta/compta-files.php b/htdocs/compta/compta-files.php index be08e264a02..e28df61e658 100644 --- a/htdocs/compta/compta-files.php +++ b/htdocs/compta/compta-files.php @@ -1,6 +1,6 @@ - * Copyright (C) 2004-2018 Laurent Destailleur + * Copyright (C) 2004-2019 Laurent Destailleur * Copyright (C) 2017 Pierre-Henry Favre * * This program is free software; you can redistribute it and/or modify @@ -17,7 +17,7 @@ * along with this program. If not, see . */ /** - * \file htdocs/compta/compta-files.php + * \file htdocs/compta/accounting-files.php * \ingroup compta * \brief Page to show portoflio and files of a thirdparty and download it */ @@ -25,15 +25,14 @@ require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; -require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php'; -require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; -require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php'; +require_once DOL_DOCUMENT_ROOT.'/compta/salaries/class/paymentsalary.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/chargesociales.class.php'; -require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php'; require_once DOL_DOCUMENT_ROOT.'/don/class/don.class.php'; +require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php'; +require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php'; -$langs->loadLangs(array("accountancy","bills")); +$langs->loadLangs(array("accountancy", "bills", "companies", "salaries")); $date_start =GETPOST('date_start', 'alpha'); $date_startDay= GETPOST('date_startday', 'int'); @@ -45,7 +44,7 @@ $date_stopDay= GETPOST('date_stopday', 'int'); $date_stopMonth= GETPOST('date_stopmonth', 'int'); $date_stopYear= GETPOST('date_stopyear', 'int'); //FIXME doldate -$date_stop=($date_stopDay)?dol_mktime(0, 0, 0, $date_stopMonth, $date_stopDay, $date_stopYear):strtotime($date_stop); +$date_stop=($date_stopDay)?dol_mktime(23, 59, 59, $date_stopMonth, $date_stopDay, $date_stopYear):strtotime($date_stop); $action =GETPOST('action', 'alpha'); // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context @@ -65,6 +64,7 @@ if (! $sortorder) $sortorder="DESC"; $arrayfields=array( + 'type'=>array('label'=>"Type", 'checked'=>1), 'date'=>array('label'=>"Date", 'checked'=>1), //... ); @@ -74,8 +74,9 @@ if (empty($conf->comptabilite->enabled) && empty($conf->accounting->enabled)) { accessforbidden(); } if ($user->societe_id > 0) +{ accessforbidden(); - +} /* @@ -90,157 +91,211 @@ $entity = GETPOST('entity','int')?GETPOST('entity','int'):$conf->entity; $filesarray=array(); $result=false; -if(($action=="searchfiles"||$action=="dl" ) && $date_start && $date_stop){ - $wheretail=" '".$db->idate($date_start)."' AND '".$db->idate($date_stop)."'"; - $sql="SELECT rowid as id, facnumber as ref,paye as paid, total_ttc, fk_soc, datef as date, 'Invoice' as item FROM ".MAIN_DB_PREFIX."facture"; - $sql.=" WHERE datef between ".$wheretail; - $sql.=" AND entity IN (".($entity==1?'0,1':$entity).')'; - $sql.=" AND fk_statut <> ".Facture::STATUS_DRAFT; - $sql.=" UNION ALL"; - $sql.=" SELECT rowid as id, ref, paye as paid, total_ttc, fk_soc, datef as date, 'SupplierInvoice' as item FROM ".MAIN_DB_PREFIX."facture_fourn"; - $sql.=" WHERE datef between ".$wheretail; - $sql.=" AND entity IN (".($entity==1?'0,1':$entity).')'; - $sql.=" AND fk_statut <> ".FactureFournisseur::STATUS_DRAFT; - $sql.=" UNION ALL"; - $sql.=" SELECT rowid as id, ref, paid, total_ttc, fk_user_author as fk_soc, date_fin as date,'ExpenseReport' as item FROM ".MAIN_DB_PREFIX."expensereport"; - $sql.=" WHERE date_fin between ".$wheretail; - $sql.=" AND entity IN (".($entity==1?'0,1':$entity).')'; - $sql.=" AND fk_statut <> ".ExpenseReport::STATUS_DRAFT; - $sql.=" UNION ALL"; - $sql.=" SELECT rowid as id, ref,paid,amount as total_ttc, '0' as fk_soc, datedon as date,'Donation' as item FROM ".MAIN_DB_PREFIX."don"; - $sql.=" WHERE datedon between ".$wheretail; - $sql.=" AND entity IN (".($entity==1?'0,1':$entity).')'; - $sql.=" AND fk_statut <> ".Don::STATUS_DRAFT; - $sql.=" UNION ALL"; - $sql.=" SELECT rowid as id, label as ref, 1 as paid, amount as total_ttc, fk_user as fk_soc,datep as date,'SalaryPayment' as item FROM ".MAIN_DB_PREFIX."payment_salary"; - $sql.=" WHERE datep between ".$wheretail; - $sql.=" AND entity IN (".($entity==1?'0,1':$entity).')'; - //$sql.=" AND fk_statut <> ".PaymentSalary::STATUS_DRAFT; - $sql.=" UNION ALL"; - $sql.=" SELECT rowid as id, libelle as ref, paye as paid, amount as total_ttc, 0 as fk_soc, date_creation as date, 'SocialContributions' as item FROM ".MAIN_DB_PREFIX."chargesociales"; - $sql.=" WHERE date_creation between ".$wheretail; - $sql.=" AND entity IN (".($entity==1?'0,1':$entity).')'; - //$sql.=" AND fk_statut <> ".ChargeSociales::STATUS_DRAFT; - $sql.= $db->order($sortfield, $sortorder); +if (($action=="searchfiles" || $action=="dl" )) { - $resd = $db->query($sql); - $files=array(); - $link=''; - - if ($resd) + if (empty($date_start)) { - $numd = $db->num_rows($resd); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("DateStart")), null, 'errors'); + $error++; + } + if (empty($date_stop)) + { + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("DateEnd")), null, 'errors'); + $error++; + } - $tmpinvoice=new Facture($db); - $tmpinvoicesupplier=new FactureFournisseur($db); - $tmpdonation=new Don($db); + if (! $error) + { + $wheretail=" '".$db->idate($date_start)."' AND '".$db->idate($date_stop)."'"; - $upload_dir =''; - $i=0; - while ($i < $numd) + $sql="SELECT t.rowid as id, t.facnumber as ref, t.paye as paid, total as total_ht, total_ttc, tva as total_vat, fk_soc, t.datef as date, 'Invoice' as item, s.nom as thirdparty_name, s.code_client as thirdparty_code, c.code as country_code, s.tva_intra as vatnum"; + $sql.=" FROM ".MAIN_DB_PREFIX."facture as t LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON s.rowid = t.fk_soc LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON c.rowid = s.fk_pays"; + $sql.=" WHERE datef between ".$wheretail; + $sql.=" AND t.entity IN (".($entity==1?'0,1':$entity).')'; + $sql.=" AND t.fk_statut <> ".Facture::STATUS_DRAFT; + $sql.=" UNION ALL"; + $sql.=" SELECT t.rowid as id, t.ref, paye as paid, total_ht, total_ttc, total_tva as total_vat, fk_soc, datef as date, 'SupplierInvoice' as item, s.nom as thirdparty_name, s.code_fournisseur as thirdparty_code, c.code as country_code, s.tva_intra as vatnum"; + $sql.=" FROM ".MAIN_DB_PREFIX."facture_fourn as t LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON s.rowid = t.fk_soc LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON c.rowid = s.fk_pays"; + $sql.=" WHERE datef between ".$wheretail; + $sql.=" AND t.entity IN (".($entity==1?'0,1':$entity).')'; + $sql.=" AND t.fk_statut <> ".FactureFournisseur::STATUS_DRAFT; + $sql.=" UNION ALL"; + $sql.=" SELECT t.rowid as id, t.ref, paid, total_ht, total_ttc, total_tva as total_vat, fk_user_author as fk_soc, date_fin as date, 'ExpenseReport' as item, CONCAT(CONCAT(u.lastname, ' '), u.firstname) as thirdparty_name, '' as thirdparty_code, c.code as country_code, '' as vatnum"; + $sql.=" FROM ".MAIN_DB_PREFIX."expensereport as t LEFT JOIN ".MAIN_DB_PREFIX."user as u ON u.rowid = t.fk_user_author LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON c.rowid = u.fk_country"; + $sql.=" WHERE date_fin between ".$wheretail; + $sql.=" AND t.entity IN (".($entity==1?'0,1':$entity).')'; + $sql.=" AND t.fk_statut <> ".ExpenseReport::STATUS_DRAFT; + $sql.=" UNION ALL"; + $sql.=" SELECT t.rowid as id, t.ref, paid, amount as total_ht, amount as total_ttc, 0 as total_vat, 0 as fk_soc, datedon as date, 'Donation' as item, t.societe as thirdparty_name, '' as thirdparty_code, c.code as country_code, '' as vatnum"; + $sql.=" FROM ".MAIN_DB_PREFIX."don as t LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON c.rowid = t.fk_country"; + $sql.=" WHERE datedon between ".$wheretail; + $sql.=" AND t.entity IN (".($entity==1?'0,1':$entity).')'; + $sql.=" AND t.fk_statut <> ".Don::STATUS_DRAFT; + $sql.=" UNION ALL"; + $sql.=" SELECT t.rowid as id, t.label as ref, 1 as paid, amount as total_ht, amount as total_ttc, 0 as total_vat, t.fk_user as fk_soc, datep as date, 'SalaryPayment' as item, CONCAT(CONCAT(u.lastname, ' '), u.firstname) as thirdparty_name, '' as thirdparty_code, c.code as country_code, '' as vatnum"; + $sql.=" FROM ".MAIN_DB_PREFIX."payment_salary as t LEFT JOIN ".MAIN_DB_PREFIX."user as u ON u.rowid = t.fk_user LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON c.rowid = u.fk_country"; + $sql.=" WHERE datep between ".$wheretail; + $sql.=" AND t.entity IN (".($entity==1?'0,1':$entity).')'; + //$sql.=" AND fk_statut <> ".PaymentSalary::STATUS_DRAFT; + $sql.=" UNION ALL"; + $sql.=" SELECT t.rowid as id, t.libelle as ref, paye as paid, amount as total_ht, amount as total_ttc, 0 as total_tva, 0 as fk_soc, date_creation as date, 'SocialContributions' as item, '' as thirdparty_name, '' as thirdparty_code, '' as country_code, '' as vatnum"; + $sql.=" FROM ".MAIN_DB_PREFIX."chargesociales as t"; + $sql.=" WHERE date_creation between ".$wheretail; + $sql.=" AND t.entity IN (".($entity==1?'0,1':$entity).')'; + //$sql.=" AND fk_statut <> ".ChargeSociales::STATUS_DRAFT; + $sql.= $db->order($sortfield, $sortorder); + //print $sql; + + $resd = $db->query($sql); + $files=array(); + $link=''; + + if ($resd) { - $objd = $db->fetch_object($resd); + $numd = $db->num_rows($resd); - switch($objd->item) - { - case "Invoice": - $subdir=dol_sanitizeFileName($objd->ref); - $upload_dir = $conf->facture->dir_output.'/'.$subdir; - $link="document.php?modulepart=facture&file=".str_replace('/', '%2F', $subdir).'%2F'; - break; - case "SupplierInvoice": - $tmpinvoicesupplier->fetch($objd->id); - $subdir=get_exdir($tmpinvoicesupplier->id, 2, 0, 0, $tmpinvoicesupplier, 'invoice_supplier').'/'.dol_sanitizeFileName($objd->ref); - $upload_dir = $conf->fournisseur->facture->dir_output.'/'.$subdir; - $link="document.php?modulepart=facture_fournisseur&file=".str_replace('/', '%2F', $subdir).'%2F'; - break; - case "ExpenseReport": - $subdir=dol_sanitizeFileName($objd->ref); - $upload_dir = $conf->expensereport->dir_output.'/'.$subdir; - $link="document.php?modulepart=expensereport&file=".str_replace('/', '%2F', $subdir).'%2F'; - break; - case "SalaryPayment": - $subdir=dol_sanitizeFileName($objd->id); - $upload_dir = $conf->salaries->dir_output.'/'.$subdir; - $link="document.php?modulepart=salaries&file=".str_replace('/', '%2F', $subdir).'%2F'; - break; - case "Donation": - $tmpdonation->fetch($objp->id); - $subdir=get_exdir(0, 0, 0, 1, $tmpdonation, 'donation'). '/'. dol_sanitizeFileName($objd->id); - $upload_dir = $conf->don->dir_output . '/' . $subdir; - $link="document.php?modulepart=don&file=".str_replace('/', '%2F', $subdir).'%2F'; - break; - case "SocialContributions": - $subdir=dol_sanitizeFileName($objd->id); - $upload_dir = $conf->tax->dir_output . '/' . $subdir; - $link="document.php?modulepart=tax&file=".str_replace('/', '%2F', $subdir).'%2F'; - break; - default: - $subdir=''; - $upload_dir=''; - $link=''; - break; - } + $tmpinvoice=new Facture($db); + $tmpinvoicesupplier=new FactureFournisseur($db); + $tmpdonation=new Don($db); - if (!empty($upload_dir)) + $upload_dir =''; + $i=0; + while ($i < $numd) { - $result=true; - $files=dol_dir_list($upload_dir, "files", 0, '', '(\.meta|_preview\.png)$', '', SORT_ASC, 1); - //var_dump($upload_dir); - if (count($files) < 1) + $objd = $db->fetch_object($resd); + + switch($objd->item) { - $nofile['date']=$db->idate($objd->date); - $nofile['paid']=$objd->paid; - $nofile['amount']=$objd->total_ttc; - $nofile['ref']=$objd->ref; - $nofile['fk']=$objd->fk_soc; - $nofile['item']=$objd->item; - - $filesarray[]=$nofile; + case "Invoice": + $subdir = ''; + $subdir.=($subdir ? '/' : '').dol_sanitizeFileName($objd->ref); + $upload_dir = $conf->facture->dir_output.'/'.$subdir; + $link="document.php?modulepart=facture&file=".str_replace('/', '%2F', $subdir).'%2F'; + break; + case "SupplierInvoice": + $tmpinvoicesupplier->fetch($objd->id); + $subdir = get_exdir($tmpinvoicesupplier->id, 2, 0, 1, $tmpinvoicesupplier, 'invoice_supplier'); // TODO Use first file + $subdir.=($subdir ? '/' : '').dol_sanitizeFileName($objd->ref); + $upload_dir = $conf->fournisseur->facture->dir_output.'/'.$subdir; + $link="document.php?modulepart=facture_fournisseur&file=".str_replace('/', '%2F', $subdir).'%2F'; + break; + case "ExpenseReport": + $subdir = ''; + $subdir.=($subdir ? '/' : '').dol_sanitizeFileName($objd->ref); + $upload_dir = $conf->expensereport->dir_output.'/'.$subdir; + $link="document.php?modulepart=expensereport&file=".str_replace('/', '%2F', $subdir).'%2F'; + break; + case "SalaryPayment": + $subdir = ''; + $subdir.=($subdir ? '/' : '').dol_sanitizeFileName($objd->id); + $upload_dir = $conf->salaries->dir_output.'/'.$subdir; + $link="document.php?modulepart=salaries&file=".str_replace('/', '%2F', $subdir).'%2F'; + break; + case "Donation": + $tmpdonation->fetch($objp->id); + $subdir=get_exdir(0, 0, 0, 0, $tmpdonation, 'donation'); + $subdir.=($subdir ? '/' : '').dol_sanitizeFileName($objd->id); + $upload_dir = $conf->don->dir_output . '/' . $subdir; + $link="document.php?modulepart=don&file=".str_replace('/', '%2F', $subdir).'%2F'; + break; + case "SocialContributions": + $subdir = ''; + $subdir.=($subdir ? '/' : '').dol_sanitizeFileName($objd->id); + $upload_dir = $conf->tax->dir_output . '/' . $subdir; + $link="document.php?modulepart=tax&file=".str_replace('/', '%2F', $subdir).'%2F'; + break; + default: + $subdir=''; + $upload_dir=''; + $link=''; + break; } - else - { - foreach ($files as $key => $file) - { - $file['date']=$db->idate($objd->date); - $file['paid']=$objd->paid; - $file['amount']=$objd->total_ttc; - $file['ref']=$objd->ref; - $file['fk']=$objd->fk_soc; - $file['item']=$objd->item; - $file['link']=$link.$file['name']; - $file['relpathnamelang'] = $langs->trans($file['item']).'/'.$file['name']; - $filesarray[]=$file; + if (!empty($upload_dir)) + { + $result=true; + $files=dol_dir_list($upload_dir, "files", 0, '', '(\.meta|_preview\.png)$', '', SORT_ASC, 1); + //var_dump($upload_dir); + if (count($files) < 1) + { + $nofile['id']=$objd->id; + $nofile['date']=$db->idate($objd->date); + $nofile['paid']=$objd->paid; + $nofile['amount_ht']=$objd->total_ht; + $nofile['amount_ttc']=$objd->total_ttc; + $nofile['amount_vat']=$objd->total_vat; + $nofile['ref']=($objd->ref ? $objd->ref : $objd->id); + $nofile['fk']=$objd->fk_soc; + $nofile['item']=$objd->item; + $nofile['thirdparty_name']=$objd->thirdparty_name; + $nofile['thirdparty_code']=$objd->thirdparty_code; + $nofile['country_code']=$objd->country_code; + $nofile['vatnum']=$objd->vatnum; + + $filesarray[]=$nofile; + } + else + { + foreach ($files as $key => $file) + { + $file['id']=$objd->id; + $file['date']=$db->idate($objd->date); + $file['paid']=$objd->paid; + $file['amount_ht']=$objd->total_ht; + $file['amount_ttc']=$objd->total_ttc; + $file['amount_vat']=$objd->total_vat; + $file['ref']=($objd->ref ? $objd->ref : $objd->id); + $file['fk']=$objd->fk_soc; + $file['item']=$objd->item; + + $file['thirdparty_name']=$objd->thirdparty_name; + $file['thirdparty_code']=$objd->thirdparty_code; + $file['country_code']=$objd->country_code; + $file['vatnum']=$objd->vatnum; + + $file['link']=$link.$file['name']; + $file['relpathnamelang'] = $langs->trans($file['item']).'/'.$file['name']; + + $filesarray[]=$file; + } } } + $i++; } - $i++; } - } - else - { - dol_print_error($db); - } + else + { + dol_print_error($db); + } - $db->free($resd); + $db->free($resd); + } } -/* - * cleanup of old ZIP - */ -//FIXME + /* *ZIP creation */ -if ($result && $action == "dl") +$dirfortmpfile = ($conf->accounting->dir_temp ? $conf->accounting->dir_temp : $conf->comptabilite->dir_temp); +if (empty($dirfortmpfile)) { - $dirfortmpfile = ($conf->accounting->dir_temp ? $conf->accounting->dir_temp : $conf->compta->dir_temp); + setEventMessages($langs->trans("ErrorNoAccountingModuleEnabled"), null, 'errors'); + $error++; +} + + +if ($result && $action == "dl" && ! $error) +{ + if (! extension_loaded('zip')) + { + setEventMessages('PHPZIPExtentionNotLoaded', null, 'errors'); + exit; + } dol_mkdir($dirfortmpfile); - $log='date,type,ref,total,paid,filename,item_id'."\n"; + $log=$langs->transnoentitiesnoconv("Type").','.$langs->transnoentitiesnoconv("Date").','.$langs->transnoentitiesnoconv("Ref").','.$langs->transnoentitiesnoconv("TotalHT").','.$langs->transnoentitiesnoconv("TotalTTC").','.$langs->transnoentitiesnoconv("TotalVAT").','.$langs->transnoentitiesnoconv("Paid").',filename,item_id,'.$langs->transnoentitiesnoconv("ThirdParty").','.$langs->transnoentitiesnoconv("Code").','.$langs->transnoentitiesnoconv("Country").','.$langs->transnoentitiesnoconv("VATIntra")."\n"; $zipname = $dirfortmpfile.'/'.dol_print_date($date_start, 'dayrfc')."-".dol_print_date($date_stop, 'dayrfc').'_export.zip'; dol_delete_file($zipname); @@ -249,10 +304,10 @@ if ($result && $action == "dl") $res = $zip->open($zipname, ZipArchive::OVERWRITE|ZipArchive::CREATE); if ($res) { - foreach ($filesarray as $key=> $file) + foreach ($filesarray as $key => $file) { if (file_exists($file["fullname"])) $zip->addFile($file["fullname"], $file["relpathnamelang"]); // - $log.=dol_print_date($file['date'], 'dayrfc').','.$file['item'].','.$file['ref'].','.$file['amount'].','.$file['paid'].','.$file["name"].','.$file['fk']."\n"; + $log.=$file['item'].','.dol_print_date($file['date'], 'dayrfc').','.$file['ref'].','.$file['amount_ht'].','.$file['amount_ttc'].','.$file['amount_vat'].','.$file['paid'].','.$file["name"].','.$file['fk'].','.$file['thirdparty_name'].','.$file['thirdparty_code'].','.$file['country_code'].',"'.$file['vatnum'].'"'."\n"; } $zip->addFromString('transactions.csv', $log); $zip->close(); @@ -267,6 +322,10 @@ if ($result && $action == "dl") exit(); } + else + { + setEventMessages($langs->trans("FailedToOpenFile", $zipname), null, 'errors'); + } } @@ -283,7 +342,7 @@ llxHeader('', $title, $help_url); $h=0; $head[$h][0] = $_SERVER["PHP_SELF"].$varlink; -$head[$h][1] = $langs->trans("AccountancyFiles"); +$head[$h][1] = $langs->trans("AccountantFiles"); $head[$h][2] = 'AccountancyFiles'; dol_fiche_head($head, 'AccountancyFiles'); @@ -293,45 +352,20 @@ print '
'; print $langs->trans("ReportPeriod").': '.$form->selectDate($date_start, 'date_start', 0, 0, 0, "", 1, 1, 0); print ' - '.$form->selectDate($date_stop, 'date_stop', 0, 0, 0, "", 1, 1, 0)."\n"; -// Multicompany -/*if (! empty($conf->multicompany->enabled) && is_object($mc)) - { - print '
'; - // This is now done with hook formObjectOptions. Keep this code for backward compatibility with old multicompany module - if (method_exists($mc, 'formObjectOptions')) - { - if (empty($conf->global->MULTICOMPANY_TRANSVERSE_MODE) && $conf->entity == 1 && $user->admin && ! $user->entity) // condition must be same for create and edit mode - { - print "
".''; - print "\n"; - } - else - { - print ''; - } - } - $object = new stdClass(); - // Other attributes - $parameters=array('objectsrc' => null, 'colspan' => ' colspan="3"'); - $reshook=$hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook - print $hookmanager->resPrint; - if (empty($reshook)) - { - print $object->showOptionals($extrafields, 'edit'); - } - }*/ +// Export is for current company only ! if (! empty($conf->multicompany->enabled) && is_object($mc)) { - print '   -   '.$langs->trans("Entity").' : '; + print '('.$langs->trans("Entity").' : '; $mc->dao->getEntities(); $mc->dao->fetch($conf->entity); print $mc->dao->label; - print "
\n"; + print ")
\n"; } -print ''."\n"; +print ''; + +print ''."\n"; dol_fiche_end(); @@ -369,14 +403,18 @@ if (!empty($date_start) && !empty($date_stop)) print '
'; // You can use div-table-responsive-no-min if you dont need reserved height for your table print '
'.$langs->trans("Type").''.$langs->trans("Ref").''.$langs->trans("Document").''.$langs->trans("Paid").''.$langs->trans("Debit").''.$langs->trans("Credit").''.$langs->trans("Balance").''.$langs->trans("TotalHT").''.$langs->trans("TotalTTC").''.$langs->trans("TotalVAT").''.$langs->trans("ThirdParty").''.$langs->trans("Code").''.$langs->trans("Country").''.$langs->trans("VATIntra").'
"; + + // Type + print ''.$langs->trans($data['item']).''; print dol_print_date($data['date'], 'day'); print "'.$langs->trans($data['item']).''.$data['ref'].''.$data['ref'].''; @@ -429,23 +458,61 @@ if (!empty($date_start) && !empty($date_stop)) { print ''.($data['name'] ? $data['name'] : $data['ref']).''; } - print "'.$data['paid'].''.price($data['amount_ht'])."'.price($data['amount_ttc'])."'.price($data['amount_vat'])."'.$data['thirdparty_name']."'.$data['thirdparty_code']."'.$data['country_code']."'.$data['vatnum']."'.(($data['amount_ttc'] > 0) ? price(abs($data['amount_ttc'])) : '')."'.(($data['amount_ttc'] > 0) ? '' : price(abs($data['amount_ttc'])))."'.$data['paid'].''.(($data['amount'] > 0) ? price(abs($data['amount'])) : '')."'.(($data['amount'] > 0) ? '' : price(abs($data['amount'])))."'.price($data['balance'])."'.price($data['balance'])."
 '.price($totalDebit).''.price($totalCredit).''.price(price2num($totalDebit - $totalCredit, 'MT')).''.price($totalET).''.price($totalIT).''.price($totalVAT).''.price($totalDebit).''.price($totalCredit).''.price(price2num($totalDebit - $totalCredit, 'MT')).'
'.$langs->trans("Entity").'".$mc->select_entities($entity); - print "
'; print ''; - print_liste_field_titre($arrayfields['date']['label'], $_SERVER["PHP_SELF"], "date", "", $param, 'align="center" class="nowrap"', $sortfield, $sortorder); - print ''; + print_liste_field_titre($arrayfields['type']['label'], $_SERVER["PHP_SELF"], "type", "", $param, '', $sortfield, $sortorder, 'nowrap '); + print_liste_field_titre($arrayfields['date']['label'], $_SERVER["PHP_SELF"], "date", "", $param, '', $sortfield, $sortorder, 'center nowrap '); print ''; - print ''; + print ''; print ''; - print ''; - print ''; - print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; print ''; if ($result) { @@ -390,20 +428,11 @@ if (!empty($date_start) && !empty($date_stop)) { // Sort array by date ASC to calculate balance + $totalET = 0; + $totalIT = 0; + $totalVAT = 0; $totalDebit = 0; $totalCredit = 0; - // Balance calculation - $balance = 0; - foreach($TData as &$data1) { - if ($data1['item']!='Invoice'&& $data1['item']!='Donation' ){ - $data1['amount']=-$data1['amount']; - } - if ($data1['amount']>0){ - }else{ - } - $balance += $data1['amount']; - $data1['balance'] = $balance; - } // Display array foreach($TData as $data) @@ -412,30 +441,79 @@ if (!empty($date_start) && !empty($date_stop)) //if (!empty($data['fk_facture'])) $html_class = 'facid-'.$data['fk_facture']; //elseif (!empty($data['fk_paiement'])) $html_class = 'payid-'.$data['fk_paiement']; print ''; - print "'; + + // Date + print '\n"; - print ''; + + // Ref print ''; // File link - print '\n"; + print '\n"; + // Paid print ''; - print '\n"; - $totalDebit += ($data['amount'] > 0) ? abs($data['amount']) : 0; - print '\n"; - $totalCredit += ($data['amount'] > 0) ? 0 : abs($data['amount']); + + // Total ET + print '\n"; + // Total IT + print '\n"; + // Total VAT + print '\n"; + + print '\n"; + + print '\n"; + + print '\n"; + + print '\n"; + + // Debit + //print '\n"; + // Credit + //print '\n"; + + $totalET += $data['amount_ht']; + $totalIT += $data['amount_ttc']; + $totalVAT += $data['amount_vat']; + + $totalDebit += ($data['amount_ttc'] > 0) ? abs($data['amount_ttc']) : 0; + $totalCredit += ($data['amount_ttc'] > 0) ? 0 : abs($data['amount_ttc']); + // Balance - print '\n"; + //print '\n"; + print "\n"; } print ''; - print ''; - print ''; - print ''; - print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + /*print ''; + print ''; + print ''; + */ print "\n"; } } From 6bda130835a347b075ae79f4132a0969c418e426 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 18 Jun 2019 14:51:57 +0200 Subject: [PATCH 288/828] Protect from dir scan --- htdocs/bom/admin/index.html | 0 htdocs/bom/class/index.html | 0 htdocs/bom/index.html | 0 htdocs/bom/lib/index.html | 0 htdocs/datapolicy/admin/index.html | 0 htdocs/datapolicy/class/index.html | 0 htdocs/datapolicy/index.html | 0 htdocs/datapolicy/lib/index.html | 0 htdocs/debugbar/index.html | 0 htdocs/website/class/index.html | 0 htdocs/website/lib/index.html | 0 11 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 htdocs/bom/admin/index.html create mode 100644 htdocs/bom/class/index.html create mode 100644 htdocs/bom/index.html create mode 100644 htdocs/bom/lib/index.html create mode 100644 htdocs/datapolicy/admin/index.html create mode 100644 htdocs/datapolicy/class/index.html create mode 100644 htdocs/datapolicy/index.html create mode 100644 htdocs/datapolicy/lib/index.html create mode 100644 htdocs/debugbar/index.html create mode 100644 htdocs/website/class/index.html create mode 100644 htdocs/website/lib/index.html diff --git a/htdocs/bom/admin/index.html b/htdocs/bom/admin/index.html new file mode 100644 index 00000000000..e69de29bb2d diff --git a/htdocs/bom/class/index.html b/htdocs/bom/class/index.html new file mode 100644 index 00000000000..e69de29bb2d diff --git a/htdocs/bom/index.html b/htdocs/bom/index.html new file mode 100644 index 00000000000..e69de29bb2d diff --git a/htdocs/bom/lib/index.html b/htdocs/bom/lib/index.html new file mode 100644 index 00000000000..e69de29bb2d diff --git a/htdocs/datapolicy/admin/index.html b/htdocs/datapolicy/admin/index.html new file mode 100644 index 00000000000..e69de29bb2d diff --git a/htdocs/datapolicy/class/index.html b/htdocs/datapolicy/class/index.html new file mode 100644 index 00000000000..e69de29bb2d diff --git a/htdocs/datapolicy/index.html b/htdocs/datapolicy/index.html new file mode 100644 index 00000000000..e69de29bb2d diff --git a/htdocs/datapolicy/lib/index.html b/htdocs/datapolicy/lib/index.html new file mode 100644 index 00000000000..e69de29bb2d diff --git a/htdocs/debugbar/index.html b/htdocs/debugbar/index.html new file mode 100644 index 00000000000..e69de29bb2d diff --git a/htdocs/website/class/index.html b/htdocs/website/class/index.html new file mode 100644 index 00000000000..e69de29bb2d diff --git a/htdocs/website/lib/index.html b/htdocs/website/lib/index.html new file mode 100644 index 00000000000..e69de29bb2d From 492c3b5625f28f2fe117ed6c8041d9415a0eaac8 Mon Sep 17 00:00:00 2001 From: Nicolas ZABOURI Date: Tue, 18 Jun 2019 15:13:08 +0200 Subject: [PATCH 289/828] FIX hook --- htdocs/adherents/index.php | 2 +- htdocs/mrp/index.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/adherents/index.php b/htdocs/adherents/index.php index 481a8e8fffd..3e26ae1ce3a 100644 --- a/htdocs/adherents/index.php +++ b/htdocs/adherents/index.php @@ -442,7 +442,7 @@ print ""; print ''; $parameters = array('user' => $user); -$reshook = $hookmanager->executeHooks('dashboardUsersGroups', $parameters, $object); // Note that $action and $object may have been modified by hook +$reshook = $hookmanager->executeHooks('dashboardMembers', $parameters, $object); // Note that $action and $object may have been modified by hook // End of page llxFooter(); diff --git a/htdocs/mrp/index.php b/htdocs/mrp/index.php index a587706dbb7..325017c4fb7 100644 --- a/htdocs/mrp/index.php +++ b/htdocs/mrp/index.php @@ -129,7 +129,7 @@ else print ''; $parameters = array('type' => $type, 'user' => $user); -$reshook = $hookmanager->executeHooks('dashboardBOM', $parameters, $object); // Note that $action and $object may have been modified by hook +$reshook = $hookmanager->executeHooks('dashboardMRP', $parameters, $object); // Note that $action and $object may have been modified by hook // End of page llxFooter(); From 6afda6a47a8db60cf16e11d3475862c41c435016 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 18 Jun 2019 15:57:22 +0200 Subject: [PATCH 290/828] FIX invalid link on user.fk_user --- htdocs/install/mysql/migration/repair.sql | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/htdocs/install/mysql/migration/repair.sql b/htdocs/install/mysql/migration/repair.sql index 22409441eac..dc9fcc86df6 100755 --- a/htdocs/install/mysql/migration/repair.sql +++ b/htdocs/install/mysql/migration/repair.sql @@ -199,6 +199,15 @@ delete from llx_element_element where sourcetype='commande' and fk_source not in DELETE FROM llx_actioncomm_resources WHERE fk_actioncomm not in (select id from llx_actioncomm); +-- Fix link on parent that were removed +DROP table tmp_user; +CREATE TABLE tmp_user as (select * from llx_user); +UPDATE llx_user SET fk_user = NULL where fk_user NOT IN (select rowid from tmp_user); + + +update llx_user set fk_user = null where fk_user not in (select rowid from llx_user); + + UPDATE llx_product SET canvas = NULL where canvas = 'default@product'; UPDATE llx_product SET canvas = NULL where canvas = 'service@product'; From 6e9874b95ad50d6011fbd5677442cc9d69944804 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 18 Jun 2019 16:01:24 +0200 Subject: [PATCH 291/828] FIX A user may read holiday and expense report without permissions --- htdocs/expensereport/list.php | 16 +++++++++++++++- htdocs/holiday/list.php | 12 ++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/htdocs/expensereport/list.php b/htdocs/expensereport/list.php index 3b153bcf843..8b5ef11f128 100644 --- a/htdocs/expensereport/list.php +++ b/htdocs/expensereport/list.php @@ -46,10 +46,25 @@ $confirm=GETPOST('confirm','alpha'); $toselect = GETPOST('toselect', 'array'); $contextpage=GETPOST('contextpage','aZ')?GETPOST('contextpage','aZ'):'expensereportlist'; +$childids = $user->getAllChildIds(1); + // Security check $socid = GETPOST('socid','int'); if ($user->societe_id) $socid=$user->societe_id; $result = restrictedArea($user, 'expensereport','',''); +$id = GETPOST('id', 'int'); +// If we are on the view of a specific user +if ($id > 0) +{ + $canread=0; + if ($id == $user->id) $canread=1; + if (! empty($user->rights->holiday->read_all)) $canread=1; + if (! empty($user->rights->holiday->read) && in_array($id, $childids)) $canread=1; + if (! $canread) + { + accessforbidden(); + } +} $diroutputmassaction=$conf->expensereport->dir_output . '/temp/massgeneration/'.$user->id; @@ -66,7 +81,6 @@ $pagenext = $page + 1; if (!$sortorder) $sortorder="DESC"; if (!$sortfield) $sortfield="d.date_debut"; -$id = GETPOST('id', 'int'); $sall = trim((GETPOST('search_all', 'alphanohtml')!='')?GETPOST('search_all', 'alphanohtml'):GETPOST('sall', 'alphanohtml')); $search_ref = GETPOST('search_ref', 'alpha'); diff --git a/htdocs/holiday/list.php b/htdocs/holiday/list.php index 5df3fdb314b..d07ec98ca4c 100644 --- a/htdocs/holiday/list.php +++ b/htdocs/holiday/list.php @@ -60,6 +60,18 @@ if ($user->societe_id > 0) // Protection if external user } $result = restrictedArea($user, 'holiday', $id, ''); $id = GETPOST('id','int'); +// If we are on the view of a specific user +if ($id > 0) +{ + $canread=0; + if ($id == $user->id) $canread=1; + if (! empty($user->rights->holiday->read_all)) $canread=1; + if (! empty($user->rights->holiday->read) && in_array($id, $childids)) $canread=1; + if (! $canread) + { + accessforbidden(); + } +} // Load variable for pagination $limit = GETPOST('limit','int')?GETPOST('limit','int'):$conf->liste_limit; From 81bca34a08186b79909c41f87ea95c087530c219 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 18 Jun 2019 16:04:25 +0200 Subject: [PATCH 292/828] FIX A user may read holiday and expense report without permissions --- htdocs/expensereport/list.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/expensereport/list.php b/htdocs/expensereport/list.php index 8b5ef11f128..0014cb7999c 100644 --- a/htdocs/expensereport/list.php +++ b/htdocs/expensereport/list.php @@ -58,8 +58,8 @@ if ($id > 0) { $canread=0; if ($id == $user->id) $canread=1; - if (! empty($user->rights->holiday->read_all)) $canread=1; - if (! empty($user->rights->holiday->read) && in_array($id, $childids)) $canread=1; + if (! empty($user->rights->expensereport->readall)) $canread=1; + if (! empty($user->rights->expensereport->lire) && in_array($id, $childids)) $canread=1; if (! $canread) { accessforbidden(); From 13abfc3140298227cbaaa02aef53503efe2b0db3 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 18 Jun 2019 16:46:12 +0200 Subject: [PATCH 293/828] Code comment --- htdocs/install/mysql/tables/llx_societe.sql | 34 ++++++++++----------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/htdocs/install/mysql/tables/llx_societe.sql b/htdocs/install/mysql/tables/llx_societe.sql index ed4919c3fc5..e7a948d67c2 100644 --- a/htdocs/install/mysql/tables/llx_societe.sql +++ b/htdocs/install/mysql/tables/llx_societe.sql @@ -65,34 +65,34 @@ create table llx_societe fk_typent integer DEFAULT 0, -- fk_forme_juridique integer DEFAULT 0, -- juridical status fk_currency varchar(3), -- default currency - siren varchar(128), -- IDProf1: siren or RCS for france, ... - siret varchar(128), -- IDProf2: siret for france, ... - ape varchar(128), -- IDProf3: code ape for france, ... - idprof4 varchar(128), -- IDProf4: nu for france - idprof5 varchar(128), -- IDProf5: nu for france - idprof6 varchar(128), -- IDProf6: nu for france - tva_intra varchar(20), -- tva - capital double(24,8) DEFAULT NULL, -- capital de la societe - fk_stcomm integer DEFAULT 0 NOT NULL, -- commercial statut + siren varchar(128), -- IDProf1: depends on country (example: siren or RCS for france, ...) + siret varchar(128), -- IDProf2: depends on country (example: siret for france, ...) + ape varchar(128), -- IDProf3: depends on country (example: code ape for france, ...) + idprof4 varchar(128), -- IDProf4: depends on country (example: nu for france, ...) + idprof5 varchar(128), -- IDProf5: depends on country (example: nu for france, ...) + idprof6 varchar(128), -- IDProf6: depends on country (example: nu for france, ... + tva_intra varchar(20), -- vat numero + capital double(24,8) DEFAULT NULL, -- capital of company + fk_stcomm integer DEFAULT 0 NOT NULL, -- commercial status note_private text, -- note_public text, -- model_pdf varchar(255), - prefix_comm varchar(5), -- prefix commercial + prefix_comm varchar(5), -- prefix commercial (deprecated) client tinyint DEFAULT 0, -- client 0/1/2 fournisseur tinyint DEFAULT 0, -- fournisseur 0/1 - supplier_account varchar(32), -- compte client chez un fournisseur + supplier_account varchar(32), -- Id of our customer account known by the supplier fk_prospectlevel varchar(12), -- prospect level (in llx_c_prospectlevel) fk_incoterms integer, -- for incoterms location_incoterms varchar(255), -- for incoterms customer_bad tinyint DEFAULT 0, -- mauvais payeur 0/1 customer_rate real DEFAULT 0, -- taux fiabilite client (0 a 1) supplier_rate real DEFAULT 0, -- taux fiabilite fournisseur (0 a 1) - remise_client real DEFAULT 0, -- remise systematique pour le client - remise_supplier real DEFAULT 0, -- remise systematique auprès du fournisseur - mode_reglement tinyint, -- mode de reglement - cond_reglement tinyint, -- condition de reglement - mode_reglement_supplier tinyint, -- mode de reglement fournisseur - cond_reglement_supplier tinyint, -- condition de reglement fournisseur + remise_client real DEFAULT 0, -- discount by default granted to this customer + remise_supplier real DEFAULT 0, -- discount by default granted by this supplier + mode_reglement tinyint, -- payment mode customer + cond_reglement tinyint, -- payment term customer + mode_reglement_supplier tinyint, -- payment mode supplier + cond_reglement_supplier tinyint, -- payment term supplier fk_shipping_method integer, -- preferred shipping method id tva_assuj tinyint DEFAULT 1, -- assujeti ou non a la TVA localtax1_assuj tinyint DEFAULT 0, -- assujeti ou non a local tax 1 From 181375ff958955a0bd55684d8e4cd97592811672 Mon Sep 17 00:00:00 2001 From: Nicolas ZABOURI Date: Tue, 18 Jun 2019 17:09:46 +0200 Subject: [PATCH 294/828] FIX travis space left --- htdocs/opensurvey/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/opensurvey/index.php b/htdocs/opensurvey/index.php index 0a9e3483348..6ed0f2148fa 100644 --- a/htdocs/opensurvey/index.php +++ b/htdocs/opensurvey/index.php @@ -1,7 +1,7 @@ * Copyright (C) 2019 Nicolas ZABOURI - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or From c000d897d7f38096a9980fb1dd009712b8c8b3ec Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 18 Jun 2019 17:42:45 +0200 Subject: [PATCH 295/828] Fix rendering of amount --- htdocs/compta/facture/list.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index d12fc90fd77..b6beba5e12e 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -959,11 +959,11 @@ if ($resql) $totalcreditnotes = $facturestatic->getSumCreditNotesUsed(); $totaldeposits = $facturestatic->getSumDepositsUsed(); $totalpay = $paiement + $totalcreditnotes + $totaldeposits; - $remaintopay = $facturestatic->total_ttc - $totalpay; + $remaintopay = price2num($facturestatic->total_ttc - $totalpay); if ($facturestatic->type == Facture::TYPE_CREDIT_NOTE && $obj->paye == 1) { $remaincreditnote = $discount->getAvailableDiscounts($obj->fk_soc, '', 'rc.fk_facture_source='.$facturestatic->id); $remaintopay = -$remaincreditnote; - $totalpay = $facturestatic->total_ttc - $remaintopay; + $totalpay = price2num($facturestatic->total_ttc - $remaintopay); } print ' Date: Tue, 18 Jun 2019 17:42:45 +0200 Subject: [PATCH 296/828] Fix rendering of amount --- htdocs/compta/facture/list.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index d12fc90fd77..b6beba5e12e 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -959,11 +959,11 @@ if ($resql) $totalcreditnotes = $facturestatic->getSumCreditNotesUsed(); $totaldeposits = $facturestatic->getSumDepositsUsed(); $totalpay = $paiement + $totalcreditnotes + $totaldeposits; - $remaintopay = $facturestatic->total_ttc - $totalpay; + $remaintopay = price2num($facturestatic->total_ttc - $totalpay); if ($facturestatic->type == Facture::TYPE_CREDIT_NOTE && $obj->paye == 1) { $remaincreditnote = $discount->getAvailableDiscounts($obj->fk_soc, '', 'rc.fk_facture_source='.$facturestatic->id); $remaintopay = -$remaincreditnote; - $totalpay = $facturestatic->total_ttc - $remaintopay; + $totalpay = price2num($facturestatic->total_ttc - $remaintopay); } print ' Date: Tue, 18 Jun 2019 18:07:47 +0200 Subject: [PATCH 297/828] Fix phpcs --- htdocs/compta/accounting-files.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/accounting-files.php b/htdocs/compta/accounting-files.php index 0954a194b73..9069045c8b3 100644 --- a/htdocs/compta/accounting-files.php +++ b/htdocs/compta/accounting-files.php @@ -73,16 +73,17 @@ $arrayfields=array( if (empty($conf->comptabilite->enabled) && empty($conf->accounting->enabled)) { accessforbidden(); } -if ($user->societe_id > 0) +if ($user->societe_id > 0) { accessforbidden(); +} +$entity = GETPOST('entity', 'int')?GETPOST('entity', 'int'):$conf->entity; /* * Actions */ -$entity = GETPOST('entity','int')?GETPOST('entity','int'):$conf->entity; //$parameters = array('socid' => $id); //$reshook = $hookmanager->executeHooks('doActions', $parameters, $object); // Note that $object may have been modified by some hooks From 20e00ca2905f05474fb441d637c7eafb4029cdb2 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 18 Jun 2019 19:41:16 +0200 Subject: [PATCH 298/828] FIX if last char of customercode is accent making the truncate of first chars wrong. --- htdocs/core/lib/functions2.lib.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/htdocs/core/lib/functions2.lib.php b/htdocs/core/lib/functions2.lib.php index 649988e785b..5d0f25892c8 100644 --- a/htdocs/core/lib/functions2.lib.php +++ b/htdocs/core/lib/functions2.lib.php @@ -716,8 +716,8 @@ function get_next_value($db,$mask,$table,$field,$where='',$objsoc='',$date='',$m global $conf,$user; if (! is_object($objsoc)) $valueforccc=$objsoc; - else if ($table == "commande_fournisseur" || $table == "facture_fourn" ) $valueforccc=$objsoc->code_fournisseur; - else $valueforccc=$objsoc->code_client; + else if ($table == "commande_fournisseur" || $table == "facture_fourn" ) $valueforccc=dol_string_unaccent($objsoc->code_fournisseur); + else $valueforccc=dol_string_unaccent($objsoc->code_client); $sharetable = $table; if ($table == 'facture' || $table == 'invoice') $sharetable = 'invoicenumber'; // for getEntity function @@ -965,6 +965,7 @@ function get_next_value($db,$mask,$table,$field,$where='',$objsoc='',$date='',$m // Define $maskLike $maskLike = dol_string_nospecial($mask); $maskLike = str_replace("%","_",$maskLike); + // Replace protected special codes with matching number of _ as wild card caracter $maskLike = preg_replace('/\{yyyy\}/i','____',$maskLike); $maskLike = preg_replace('/\{yy\}/i','__',$maskLike); @@ -1140,7 +1141,7 @@ function get_next_value($db,$mask,$table,$field,$where='',$objsoc='',$date='',$m // Now we replace the refclient if ($maskrefclient) { - //print "maskrefclient=".$maskrefclient." maskwithonlyymcode=".$maskwithonlyymcode." maskwithnocode=".$maskwithnocode."\n
"; + //print "maskrefclient=".$maskrefclient." maskwithonlyymcode=".$maskwithonlyymcode." maskwithnocode=".$maskwithnocode." maskrefclient_clientcode=".$maskrefclient_clientcode."\n
";exit; $maskrefclient_maskbefore='{'.$maskrefclient.'}'; $maskrefclient_maskafter=$maskrefclient_clientcode.str_pad($maskrefclient_counter,dol_strlen($maskrefclient_maskcounter),"0",STR_PAD_LEFT); $numFinal = str_replace($maskrefclient_maskbefore,$maskrefclient_maskafter,$numFinal); From 525598f6aa925b0aeb8f7c02ebdd0edaeb065bde Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 18 Jun 2019 20:01:28 +0200 Subject: [PATCH 299/828] Fix scrutinizer warnings --- htdocs/adherents/class/adherent.class.php | 8 ++++---- htdocs/contact/class/contact.class.php | 2 +- htdocs/user/class/user.class.php | 1 - htdocs/user/class/usergroup.class.php | 3 +-- 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php index 3119e044be0..1856de6182f 100644 --- a/htdocs/adherents/class/adherent.class.php +++ b/htdocs/adherents/class/adherent.class.php @@ -183,14 +183,14 @@ class Adherent extends CommonObject * @var integer */ public $datec; - + /** * Date modification record (tms) * * @var integer */ public $datem; - + public $datevalid; public $gender; @@ -1268,7 +1268,7 @@ class Adherent extends CommonObject $this->ref = $obj->rowid; $this->id = $obj->rowid; $this->ref_ext = $obj->ref_ext; - + $this->civility_id = $obj->civility_code; // Bad. Kept for backard compatibility $this->civility_code = $obj->civility_code; $this->civility = $obj->civility_code?($langs->trans("Civility".$obj->civility_code) != ("Civility".$obj->civility_code) ? $langs->trans("Civility".$obj->civility_code) : $obj->civility_code):''; @@ -2465,7 +2465,7 @@ class Adherent extends CommonObject * * @return array Tableau info des attributs */ - private function _load_ldap_info() + public function _load_ldap_info() { // phpcs:enable global $conf,$langs; diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index dfefb8060fe..5c4df6ab3f9 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -525,7 +525,7 @@ class Contact extends CommonObject * * @return array Tableau info des attributs */ - private function _load_ldap_info() + public function _load_ldap_info() { // phpcs:enable global $conf, $langs; diff --git a/htdocs/user/class/user.class.php b/htdocs/user/class/user.class.php index 34651304b95..c5ac20e8cc7 100644 --- a/htdocs/user/class/user.class.php +++ b/htdocs/user/class/user.class.php @@ -2300,7 +2300,6 @@ class User extends CommonObject if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER) && $withpictoimg) $withpictoimg=0; $result=''; $label=''; - $link=''; $linkstart=''; $linkend=''; if (! empty($this->photo)) { diff --git a/htdocs/user/class/usergroup.class.php b/htdocs/user/class/usergroup.class.php index c3fe000292c..9fb6e600a3b 100644 --- a/htdocs/user/class/usergroup.class.php +++ b/htdocs/user/class/usergroup.class.php @@ -867,7 +867,6 @@ class UserGroup extends CommonObject if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER) && $withpicto) $withpicto=0; $result=''; $label=''; - $link=''; $linkstart=''; $linkend=''; $label.= '
'; $label.= '' . $langs->trans("Group") . '
'; @@ -957,7 +956,7 @@ class UserGroup extends CommonObject public function _load_ldap_info() { // phpcs:enable - global $conf,$langs; + global $conf; $info=array(); From 663998bab11a371b4162c89c2f5893a8075b352d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 18 Jun 2019 20:15:04 +0200 Subject: [PATCH 300/828] Fix scrutinizer errors --- htdocs/includes/odtphp/odf.php | 2 +- htdocs/opensurvey/results.php | 4 ++-- htdocs/product/price.php | 2 +- htdocs/user/class/user.class.php | 12 ++++++------ htdocs/user/class/usergroup.class.php | 6 +++--- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/htdocs/includes/odtphp/odf.php b/htdocs/includes/odtphp/odf.php index 6b3a6400bc3..21e9b56b4bb 100644 --- a/htdocs/includes/odtphp/odf.php +++ b/htdocs/includes/odtphp/odf.php @@ -745,7 +745,7 @@ IMG; private function _rrmdir($dir) { if ($handle = opendir($dir)) { - while (false !== ($file = readdir($handle))) { + while (($file = readdir($handle)) !== false) { if ($file != '.' && $file != '..') { if (is_dir($dir . '/' . $file)) { $this->_rrmdir($dir . '/' . $file); diff --git a/htdocs/opensurvey/results.php b/htdocs/opensurvey/results.php index c648b15664e..1b3034bb82c 100644 --- a/htdocs/opensurvey/results.php +++ b/htdocs/opensurvey/results.php @@ -249,8 +249,8 @@ if (isset($_POST["ajoutercolonne"]) && $object->format == "D") $dateinsertion = substr("$dateinsertion", 1); - //mise a jour avec les nouveaux sujets dans la base - if (isset($erreur_ajout_date) && !$erreur_ajout_date) + // update with new topics into database + if (isset($erreur_ajout_date) && empty($erreur_ajout_date)) { $sql = 'UPDATE '.MAIN_DB_PREFIX."opensurvey_sondage"; $sql.= " SET sujet = '".$db->escape($dateinsertion)."'"; diff --git a/htdocs/product/price.php b/htdocs/product/price.php index 5b5b9ad48fa..26970f1dd13 100644 --- a/htdocs/product/price.php +++ b/htdocs/product/price.php @@ -153,7 +153,7 @@ if (empty($reshook)) $db->begin(); $resql = $object->update($object->id, $user); - if (! $resql || $resql < 0) + if ($resql <= 0) { $error++; setEventMessages($object->error, $object->errors, 'errors'); diff --git a/htdocs/user/class/user.class.php b/htdocs/user/class/user.class.php index c5ac20e8cc7..a151fdb5574 100644 --- a/htdocs/user/class/user.class.php +++ b/htdocs/user/class/user.class.php @@ -774,7 +774,7 @@ class User extends CommonObject dol_syslog(get_class($this)."::clearrights reset user->rights"); $this->rights=''; $this->nb_rights=0; - $this->all_permissions_are_loaded=false; + $this->all_permissions_are_loaded=0; $this->_tab_loaded=array(); } @@ -799,16 +799,16 @@ class User extends CommonObject return; } - if ($this->all_permissions_are_loaded) + if (! empty($this->all_permissions_are_loaded)) { // We already loaded all rights for this user, so we leave return; } } - // Recuperation des droits utilisateurs + recuperation des droits groupes + // Get permission of users + Get permissions of groups - // D'abord les droits utilisateurs + // First user permissions $sql = "SELECT DISTINCT r.module, r.perms, r.subperms"; $sql.= " FROM ".MAIN_DB_PREFIX."user_rights as ur"; $sql.= ", ".MAIN_DB_PREFIX."rights_def as r"; @@ -862,7 +862,7 @@ class User extends CommonObject $this->db->free($resql); } - // Maintenant les droits groupes + // Now permissions of groups $sql = "SELECT DISTINCT r.module, r.perms, r.subperms"; $sql.= " FROM ".MAIN_DB_PREFIX."usergroup_rights as gr,"; $sql.= " ".MAIN_DB_PREFIX."usergroup_user as gu,"; @@ -933,7 +933,7 @@ class User extends CommonObject } else { - // Si module defini, on le marque comme charge en cache + // If module defined, we flag it as loaded into cache $this->_tab_loaded[$moduletag]=1; } } diff --git a/htdocs/user/class/usergroup.class.php b/htdocs/user/class/usergroup.class.php index 9fb6e600a3b..d51d82c8d13 100644 --- a/htdocs/user/class/usergroup.class.php +++ b/htdocs/user/class/usergroup.class.php @@ -552,13 +552,13 @@ class UserGroup extends CommonObject if ($moduletag && isset($this->_tab_loaded[$moduletag]) && $this->_tab_loaded[$moduletag]) { - // Le fichier de ce module est deja charge + // Rights for this module are already loaded, so we leave return; } if (! empty($this->all_permissions_are_loaded)) { - // Si les permissions ont deja ete chargees, on quitte + // We already loaded all rights for this group, so we leave return; } @@ -618,7 +618,7 @@ class UserGroup extends CommonObject } else { - // Si module defini, on le marque comme charge en cache + // If module defined, we flag it as loaded into cache $this->_tab_loaded[$moduletag]=1; } From 53923a8581e5a710a46f289b0df61769df1b4f56 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 18 Jun 2019 20:21:22 +0200 Subject: [PATCH 301/828] Fix scrutinizer warnings --- htdocs/core/db/sqlite3.class.php | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/htdocs/core/db/sqlite3.class.php b/htdocs/core/db/sqlite3.class.php index b7d06870ff5..360b72f80d9 100644 --- a/htdocs/core/db/sqlite3.class.php +++ b/htdocs/core/db/sqlite3.class.php @@ -403,9 +403,13 @@ class DoliDBSqlite3 extends DoliDB */ public function query($query, $usesavepoint = 0, $type = 'auto') { + global $conf; + $ret=null; + $query = trim($query); - $this->error = 0; + + $this->error = ''; // Convert MySQL syntax to SQLite syntax if (preg_match('/ALTER\s+TABLE\s*(.*)\s*ADD\s+CONSTRAINT\s+(.*)\s*FOREIGN\s+KEY\s*\(([\w,\s]+)\)\s*REFERENCES\s+(\w+)\s*\(([\w,\s]+)\)/i', $query, $reg)) { @@ -449,7 +453,8 @@ class DoliDBSqlite3 extends DoliDB } //print "After convertSQLFromMysql:\n".$query."
\n"; - dol_syslog('sql='.$query, LOG_DEBUG); + if (! in_array($query, array('BEGIN','COMMIT','ROLLBACK'))) dol_syslog('sql='.$query, LOG_DEBUG); + if (empty($query)) return false; // Return false = error if empty request // Ordre SQL ne necessitant pas de connexion a une base (exemple: CREATE DATABASE) try { @@ -481,7 +486,8 @@ class DoliDBSqlite3 extends DoliDB $errormsg .= ' ('.$this->lasterrno.')'; } - dol_syslog($errormsg, LOG_ERR); + if ($conf->global->SYSLOG_LEVEL < LOG_DEBUG) dol_syslog(get_class($this)."::query SQL Error query: ".$query, LOG_ERR); // Log of request was not yet done previously + dol_syslog(get_class($this)."::query SQL Error message: ".$errormsg, LOG_ERR); } $this->lastquery=$query; $this->_results = $ret; From bcd5949bacffd3fdd722bc268e70d3556d5419e4 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Tue, 18 Jun 2019 21:39:30 +0200 Subject: [PATCH 302/828] Responsive on project index --- htdocs/projet/index.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/projet/index.php b/htdocs/projet/index.php index fa77cb4b52c..38ef7ee7cf2 100644 --- a/htdocs/projet/index.php +++ b/htdocs/projet/index.php @@ -179,6 +179,7 @@ $sql.= $db->plimit($max, 0); $resql=$db->query($sql); if ($resql) { + print '
'; print '
'.$langs->trans("Type").''.$langs->trans("Ref").''.$langs->trans("Link").''.$langs->trans("Document").''.$langs->trans("Paid").''.$langs->trans("Debit").''.$langs->trans("Credit").''.$langs->trans("Balance").''.$langs->trans("TotalHT").''.$langs->trans("TotalTTC").''.$langs->trans("TotalVAT").''.$langs->trans("ThirdParty").''.$langs->trans("Code").''.$langs->trans("Country").''.$langs->trans("VATIntra").'
"; + + // Type + print ''.$langs->trans($data['item']).''; print dol_print_date($data['date'], 'day'); print "'.$langs->trans($data['item']).''.$data['ref'].'".$data['name']."'; + if ($data['link']) + { + print ''.($data['name'] ? $data['name'] : $data['ref']).''; + } + print "'.$data['paid'].''.(($data['amount'] > 0) ? price(abs($data['amount'])) : '')."'.(($data['amount'] > 0) ? '' : price(abs($data['amount'])))."'.price($data['amount_ht'])."'.price($data['amount_ttc'])."'.price($data['amount_vat'])."'.$data['thirdparty_name']."'.$data['thirdparty_code']."'.$data['country_code']."'.$data['vatnum']."'.(($data['amount_ttc'] > 0) ? price(abs($data['amount_ttc'])) : '')."'.(($data['amount_ttc'] > 0) ? '' : price(abs($data['amount_ttc'])))."'.price($data['balance'])."'.price($data['balance'])."
 '.price($totalDebit).''.price($totalCredit).''.price(price2num($totalDebit - $totalCredit, 'MT')).''.price($totalET).''.price($totalIT).''.price($totalVAT).''.price($totalDebit).''.price($totalCredit).''.price(price2num($totalDebit - $totalCredit, 'MT')).'
'; print ''; print ''; @@ -242,7 +243,7 @@ if ($resql) $i++; } } - print "
'.$langs->trans("LatestModifiedProjects", $max).'

"; + print "

"; } else dol_print_error($db); From 30fb89ad5e55b520588327de1bea36f93c6a8d03 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Tue, 18 Jun 2019 22:03:29 +0200 Subject: [PATCH 303/828] Responsive HRM index --- htdocs/hrm/index.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/hrm/index.php b/htdocs/hrm/index.php index 066a21ebad0..54a0837e1fe 100644 --- a/htdocs/hrm/index.php +++ b/htdocs/hrm/index.php @@ -134,6 +134,7 @@ if (! empty($conf->holiday->enabled)) { $user_id = $user->id; + print '
'; print ''; print ''; print ""; @@ -152,7 +153,7 @@ if (! empty($conf->holiday->enabled)) print ''; print ''; - print '
'.$langs->trans("Holidays").'

'; + print '

'; } elseif (! is_numeric($conf->global->HOLIDAY_HIDE_BALANCE)) { From c59de4989455dfc1e438908c4c6d2bc49950e261 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Tue, 18 Jun 2019 22:38:52 +0200 Subject: [PATCH 304/828] Translate rights --- htdocs/core/class/html.formaccounting.class.php | 2 +- htdocs/core/lib/accounting.lib.php | 2 +- htdocs/langs/en_US/admin.lang | 6 ++++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/htdocs/core/class/html.formaccounting.class.php b/htdocs/core/class/html.formaccounting.class.php index 87b32902684..7d9e778ac41 100644 --- a/htdocs/core/class/html.formaccounting.class.php +++ b/htdocs/core/class/html.formaccounting.class.php @@ -21,7 +21,7 @@ /** * \file htdocs/core/class/html.formaccounting.class.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief File of class with all html predefined components */ require_once DOL_DOCUMENT_ROOT .'/core/class/html.form.class.php'; diff --git a/htdocs/core/lib/accounting.lib.php b/htdocs/core/lib/accounting.lib.php index 889d9da8a2c..e55083c4822 100644 --- a/htdocs/core/lib/accounting.lib.php +++ b/htdocs/core/lib/accounting.lib.php @@ -19,7 +19,7 @@ /** * \file htdocs/core/lib/accounting.lib.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief Library of accountancy functions */ diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 5fc1994247c..5f69be03dba 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -885,6 +885,12 @@ Permission2802=Use FTP client in write mode (delete or upload files) Permission50101=Use Point of Sale Permission50201=Read transactions Permission50202=Import transactions +Permission50401=Bind products and invoices with accounting accounts +Permission50411=Read operations in ledger +Permission50412=Write/Edit operations in ledger +Permission50420=Report and export reports (turnover, balance, journals, ledger) +Permission50430=Define and close a fiscal year +Permission50440=Manage chart of accounts, setup of accountancy Permission54001=Print Permission55001=Read polls Permission55002=Create/modify polls From ce375440884d31c60a60e80e422870a966c8b47d Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Tue, 18 Jun 2019 22:41:18 +0200 Subject: [PATCH 305/828] Translate rights --- htdocs/langs/en_US/admin.lang | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 5f69be03dba..f26088f747c 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -804,6 +804,7 @@ Permission401=Read discounts Permission402=Create/modify discounts Permission403=Validate discounts Permission404=Delete discounts +Permission430=Use Debug Bar Permission511=Read payments of salaries Permission512=Create/modify payments of salaries Permission514=Delete payments of salaries From 4de0a57f5cc435afb5c1192e55bac6cf5753dff1 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Tue, 18 Jun 2019 22:44:43 +0200 Subject: [PATCH 306/828] Translate rights --- htdocs/langs/en_US/admin.lang | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index f26088f747c..56a8381021e 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -883,6 +883,10 @@ Permission2503=Submit or delete documents Permission2515=Setup documents directories Permission2801=Use FTP client in read mode (browse and download only) Permission2802=Use FTP client in write mode (delete or upload files) +Permission10001=Read website content +Permission10002=Create/modify website content (html and javascript content) +Permission10003=Create/modify website content (dynamic php code). Dangerous, must be reserved to restricted developers. +Permission10005=Delete website content Permission50101=Use Point of Sale Permission50201=Read transactions Permission50202=Import transactions From a0ae1e96a374e4e243b73f6b4f53757b49da3d5f Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Tue, 18 Jun 2019 22:52:37 +0200 Subject: [PATCH 307/828] Translate rights --- htdocs/langs/en_US/admin.lang | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 56a8381021e..cfc244b0fe0 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -838,6 +838,12 @@ Permission1101=Read delivery orders Permission1102=Create/modify delivery orders Permission1104=Validate delivery orders Permission1109=Delete delivery orders +Permission1121=Read supplier proposals +Permission1122=Create/modify supplier proposals +Permission1123=Validate supplier proposals +Permission1124=Send supplier proposals +Permission1125=Delete supplier proposals +Permission1126=Close supplier price requests Permission1181=Read suppliers Permission1182=Read purchase orders Permission1183=Create/modify purchase orders From 42b03ec85893b0083161abcafa33b7082e118209 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Tue, 18 Jun 2019 22:53:50 +0200 Subject: [PATCH 308/828] Translate rights --- htdocs/langs/en_US/admin.lang | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index cfc244b0fe0..60a80bb15bc 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -902,6 +902,10 @@ Permission50412=Write/Edit operations in ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) Permission50430=Define and close a fiscal year Permission50440=Manage chart of accounts, setup of accountancy +Permission51001=Read assets +Permission51002=Create/Update assets +Permission51003=Delete assets +Permission51005=Setup types of asset Permission54001=Print Permission55001=Read polls Permission55002=Create/modify polls From e1c476e744da16429c72e99b80263e844b0818dc Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 19 Jun 2019 05:48:04 +0200 Subject: [PATCH 309/828] Translate rights --- htdocs/langs/en_US/admin.lang | 3 +++ 1 file changed, 3 insertions(+) diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 60a80bb15bc..0c4d7de3962 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -819,6 +819,9 @@ Permission532=Create/modify services Permission534=Delete services Permission536=See/manage hidden services Permission538=Export services +Permission650=Read bom of Bom +Permission651=Create/Update bom of Bom +Permission652=Delete bom of Bom Permission701=Read donations Permission702=Create/modify donations Permission703=Delete donations From 9234a5446872983f6cfa4bf01f46234c1b17a445 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 19 Jun 2019 05:49:23 +0200 Subject: [PATCH 310/828] Translate rights --- htdocs/langs/en_US/admin.lang | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 0c4d7de3962..820fac9e2d4 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -892,6 +892,7 @@ Permission2503=Submit or delete documents Permission2515=Setup documents directories Permission2801=Use FTP client in read mode (browse and download only) Permission2802=Use FTP client in write mode (delete or upload files) +Permission3200=Read archived events and fingerprints Permission10001=Read website content Permission10002=Create/modify website content (html and javascript content) Permission10003=Create/modify website content (dynamic php code). Dangerous, must be reserved to restricted developers. From f91c40a45c2907c9cd927330b9e58b8f4f8466c3 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 19 Jun 2019 06:00:11 +0200 Subject: [PATCH 311/828] Translate rights --- htdocs/langs/en_US/admin.lang | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 820fac9e2d4..c135fe86206 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -869,16 +869,6 @@ Permission1251=Run mass imports of external data into database (data load) Permission1321=Export customer invoices, attributes and payments Permission1322=Reopen a paid bill Permission1421=Export sales orders and attributes -Permission20001=Read leave requests (your leave and those of your subordinates) -Permission20002=Create/modify your leave requests (your leave and those of your subordinates) -Permission20003=Delete leave requests -Permission20004=Read all leave requests (even of user not subordinates) -Permission20005=Create/modify leave requests for everybody (even of user not subordinates) -Permission20006=Admin leave requests (setup and update balance) -Permission23001=Read Scheduled job -Permission23002=Create/update Scheduled job -Permission23003=Delete Scheduled job -Permission23004=Execute Scheduled job Permission2401=Read actions (events or tasks) linked to his account Permission2402=Create/modify actions (events or tasks) linked to his account Permission2403=Delete actions (events or tasks) linked to his account @@ -893,10 +883,24 @@ Permission2515=Setup documents directories Permission2801=Use FTP client in read mode (browse and download only) Permission2802=Use FTP client in write mode (delete or upload files) Permission3200=Read archived events and fingerprints +Permission4001=See employees +Permission4002=Create employees +Permission4003=Delete employees +Permission4004=Export employees Permission10001=Read website content Permission10002=Create/modify website content (html and javascript content) Permission10003=Create/modify website content (dynamic php code). Dangerous, must be reserved to restricted developers. Permission10005=Delete website content +Permission20001=Read leave requests (your leave and those of your subordinates) +Permission20002=Create/modify your leave requests (your leave and those of your subordinates) +Permission20003=Delete leave requests +Permission20004=Read all leave requests (even of user not subordinates) +Permission20005=Create/modify leave requests for everybody (even of user not subordinates) +Permission20006=Admin leave requests (setup and update balance) +Permission23001=Read Scheduled job +Permission23002=Create/update Scheduled job +Permission23003=Delete Scheduled job +Permission23004=Execute Scheduled job Permission50101=Use Point of Sale Permission50201=Read transactions Permission50202=Import transactions From 13836d3e219514d5aaf84c1287fd9835c65d0634 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 19 Jun 2019 06:21:53 +0200 Subject: [PATCH 312/828] Missing language ley --- htdocs/core/modules/modSalaries.class.php | 2 +- htdocs/langs/en_US/salaries.lang | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/core/modules/modSalaries.class.php b/htdocs/core/modules/modSalaries.class.php index e111e81ef6b..ed3aec4a48b 100644 --- a/htdocs/core/modules/modSalaries.class.php +++ b/htdocs/core/modules/modSalaries.class.php @@ -144,7 +144,7 @@ class modSalaries extends DolibarrModules $r++; $this->export_code[$r]=$this->rights_class.'_'.$r; - $this->export_label[$r]='Salaries and payments'; + $this->export_label[$r]='SalariesAndPayments'; $this->export_permission[$r]=array(array("salaries","export")); $this->export_fields_array[$r]=array('u.firstname'=>"Firstname",'u.lastname'=>"Lastname",'u.login'=>"Login",'u.salary'=>'CurrentSalary','p.datep'=>'DatePayment','p.datesp'=>'DateStartPeriod','p.dateep'=>'DateEndPeriod','p.amount'=>'AmountPayment','p.num_payment'=>'Numero','p.label'=>'Label','p.note'=>'Note'); $this->export_TypeFields_array[$r]=array('u.firstname'=>"Text",'u.lastname'=>"Text",'u.login'=>'Text','u.salary'=>"Numeric",'p.datep'=>'Date','p.datesp'=>'Date','p.dateep'=>'Date','p.amount'=>'Numeric','p.num_payment'=>'Numeric','p.label'=>'Text'); diff --git a/htdocs/langs/en_US/salaries.lang b/htdocs/langs/en_US/salaries.lang index 1e3607ce7cc..7c3c08a65bd 100644 --- a/htdocs/langs/en_US/salaries.lang +++ b/htdocs/langs/en_US/salaries.lang @@ -17,3 +17,5 @@ TJMDescription=This value is currently for information only and is not used for LastSalaries=Latest %s salary payments AllSalaries=All salary payments SalariesStatistics=Salary statistics +# Export +SalariesAndPayments=Salaries and payments From ffbb14f40ef59410e0a01efcf7f51af2fbfbe1c6 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 19 Jun 2019 06:28:22 +0200 Subject: [PATCH 313/828] Missing language key --- htdocs/langs/en_US/website.lang | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/website.lang b/htdocs/langs/en_US/website.lang index 43f82e9f1fb..2683c9a90eb 100644 --- a/htdocs/langs/en_US/website.lang +++ b/htdocs/langs/en_US/website.lang @@ -100,4 +100,6 @@ DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contai NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. ReplaceWebsiteContent=Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? -DeleteAlsoMedias=Delete also all medias files specific to this website? \ No newline at end of file +DeleteAlsoMedias=Delete also all medias files specific to this website? +# Export +MyWebsitePages=My website pages \ No newline at end of file From a849fbe42e812929ac43c6e90b40c506d03ac8bc Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 19 Jun 2019 07:15:52 +0200 Subject: [PATCH 314/828] Nowrap on amount --- htdocs/compta/bank/treso.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/compta/bank/treso.php b/htdocs/compta/bank/treso.php index 5a4374f47dd..1318dbd4e2d 100644 --- a/htdocs/compta/bank/treso.php +++ b/htdocs/compta/bank/treso.php @@ -293,9 +293,9 @@ if ($_REQUEST["account"] || $_REQUEST["ref"]) }else print ""; } print "".$refcomp.""; - if ($obj->total_ttc < 0) { print "".price(abs($total_ttc))." "; }; - if ($obj->total_ttc >= 0) { print " ".price($total_ttc).""; }; - print ''.price($solde).''; + if ($obj->total_ttc < 0) { print "".price(abs($total_ttc))." "; }; + if ($obj->total_ttc >= 0) { print " ".price($total_ttc).""; }; + print ''.price($solde).''; print ""; } From 9a32117b1d172f6a5e31cf086639be9e5c2cd286 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 19 Jun 2019 08:43:57 +0200 Subject: [PATCH 315/828] Nowrap on amount --- htdocs/compta/resultat/index.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/compta/resultat/index.php b/htdocs/compta/resultat/index.php index addc56a240b..70129e80403 100644 --- a/htdocs/compta/resultat/index.php +++ b/htdocs/compta/resultat/index.php @@ -943,7 +943,7 @@ for ($mois = 1+$nb_mois_decalage ; $mois <= 12+$nb_mois_decalage ; $mois++) } print ""; - print ' '; + print ' '; if ($modecompta == 'BOOKKEEPING') { if (isset($encaiss[$case])) @@ -978,8 +978,8 @@ print ''; for ($annee = $year_start ; $annee <= $year_end ; $annee++) { $nbcols+=2; - print ''.(isset($totsorties[$annee])?price(price2num($totsorties[$annee], 'MT')):' ').''; - print ''.(isset($totentrees[$annee])?price(price2num($totentrees[$annee], 'MT')):' ').''; + print ''.(isset($totsorties[$annee])?price(price2num($totsorties[$annee], 'MT')):' ').''; + print ''.(isset($totentrees[$annee])?price(price2num($totentrees[$annee], 'MT')):' ').''; } print "\n"; From b8311da26212e95c0a727e542dc2a7e60c8cbc5b Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 19 Jun 2019 08:56:45 +0200 Subject: [PATCH 316/828] Nowrap on amount --- htdocs/accountancy/customer/index.php | 20 ++++++++++---------- htdocs/accountancy/customer/lines.php | 2 +- htdocs/accountancy/customer/list.php | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/htdocs/accountancy/customer/index.php b/htdocs/accountancy/customer/index.php index 0131f51d515..f063f832f54 100644 --- a/htdocs/accountancy/customer/index.php +++ b/htdocs/accountancy/customer/index.php @@ -211,10 +211,10 @@ if ($resql) { else print $row[1]; print ''; for($i = 2; $i <= 12; $i ++) { - print '' . price($row[$i]) . ''; + print '' . price($row[$i]) . ''; } - print '' . price($row[13]) . ''; - print '' . price($row[14]) . ''; + print '' . price($row[13]) . ''; + print '' . price($row[14]) . ''; print ''; } $db->free($resql); @@ -289,10 +289,10 @@ if ($resql) { print ''; for($i = 2; $i <= 12; $i++) { - print '' . price($row[$i]) . ''; + print '' . price($row[$i]) . ''; } - print '' . price($row[13]) . ''; - print '' . price($row[14]) . ''; + print '' . price($row[13]) . ''; + print '' . price($row[14]) . ''; print ''; } $db->free($resql); @@ -348,9 +348,9 @@ if ($conf->global->MAIN_FEATURES_LEVEL > 0) // This part of code looks strange. while ($row = $db->fetch_row($resql)) { print '' . $row[0] . ''; for($i = 1; $i <= 12; $i ++) { - print '' . price($row[$i]) . ''; + print '' . price($row[$i]) . ''; } - print '' . price($row[13]) . ''; + print '' . price($row[13]) . ''; print ''; } $db->free($resql); @@ -401,9 +401,9 @@ if ($conf->global->MAIN_FEATURES_LEVEL > 0) // This part of code looks strange. print '' . $row[0] . ''; for($i = 1; $i <= 12; $i ++) { - print '' . price(price2num($row[$i])) . ''; + print '' . price(price2num($row[$i])) . ''; } - print '' . price(price2num($row[13])) . ''; + print '' . price(price2num($row[13])) . ''; print ''; } $db->free($resql); diff --git a/htdocs/accountancy/customer/lines.php b/htdocs/accountancy/customer/lines.php index 19e85cdb651..ea174638a2a 100644 --- a/htdocs/accountancy/customer/lines.php +++ b/htdocs/accountancy/customer/lines.php @@ -385,7 +385,7 @@ if ($result) { print $form->textwithtooltip(dol_trunc($text, $trunclength), $objp->description); print ''; - print '' . price($objp->total_ht) . ''; + print '' . price($objp->total_ht) . ''; print '' . vatrate($objp->tva_tx.($objp->vat_src_code?' ('.$objp->vat_src_code.')':'')) . ''; diff --git a/htdocs/accountancy/customer/list.php b/htdocs/accountancy/customer/list.php index ed1c40a6ad7..5314099db1f 100644 --- a/htdocs/accountancy/customer/list.php +++ b/htdocs/accountancy/customer/list.php @@ -503,7 +503,7 @@ if ($result) { print $form->textwithtooltip(dol_trunc($text, $trunclength), $objp->description); print ''; - print ''; + print ''; print price($objp->total_ht); print ''; From ec7523d3d2906975fab9e1cf662ff3eae3c074ee Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 19 Jun 2019 09:01:37 +0200 Subject: [PATCH 317/828] Nowrap on amount --- htdocs/accountancy/expensereport/index.php | 16 ++++++++-------- htdocs/accountancy/supplier/index.php | 16 ++++++++-------- htdocs/accountancy/supplier/lines.php | 2 +- htdocs/accountancy/supplier/list.php | 2 +- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/htdocs/accountancy/expensereport/index.php b/htdocs/accountancy/expensereport/index.php index a5026f920a0..4fe2ee3120b 100644 --- a/htdocs/accountancy/expensereport/index.php +++ b/htdocs/accountancy/expensereport/index.php @@ -203,10 +203,10 @@ if ($resql) { else print $row[1]; print ''; for($i = 2; $i <= 12; $i ++) { - print '' . price($row[$i]) . ''; + print '' . price($row[$i]) . ''; } - print '' . price($row[13]) . ''; - print '' . price($row[14]) . ''; + print '' . price($row[13]) . ''; + print '' . price($row[14]) . ''; print ''; } $db->free($resql); @@ -276,10 +276,10 @@ if ($resql) { else print $row[1]; print ''; for($i = 2; $i <= 12; $i ++) { - print '' . price($row[$i]) . ''; + print '' . price($row[$i]) . ''; } - print '' . price($row[13]) . ''; - print '' . price($row[14]) . ''; + print '' . price($row[13]) . ''; + print '' . price($row[14]) . ''; print ''; } $db->free($resql); @@ -331,9 +331,9 @@ if ($conf->global->MAIN_FEATURES_LEVEL > 0) // This part of code looks strange. while ($row = $db->fetch_row($resql)) { print '' . $row[0] . ''; for($i = 1; $i <= 12; $i ++) { - print '' . price($row[$i]) . ''; + print '' . price($row[$i]) . ''; } - print '' . price($row[13]) . ''; + print '' . price($row[13]) . ''; print ''; } diff --git a/htdocs/accountancy/supplier/index.php b/htdocs/accountancy/supplier/index.php index ca60735fcf0..bc632118da7 100644 --- a/htdocs/accountancy/supplier/index.php +++ b/htdocs/accountancy/supplier/index.php @@ -203,10 +203,10 @@ if ($resql) { else print $row[1]; print ''; for($i = 2; $i <= 12; $i ++) { - print '' . price($row[$i]) . ''; + print '' . price($row[$i]) . ''; } - print '' . price($row[13]) . ''; - print '' . price($row[14]) . ''; + print '' . price($row[13]) . ''; + print '' . price($row[14]) . ''; print ''; } $db->free($resql); @@ -274,10 +274,10 @@ if ($resql) { else print $row[1]; print ''; for($i = 2; $i <= 12; $i++) { - print '' . price($row[$i]) . ''; + print '' . price($row[$i]) . ''; } - print '' . price($row[13]) . ''; - print '' . price($row[14]) . ''; + print '' . price($row[13]) . ''; + print '' . price($row[14]) . ''; print ''; } $db->free($resql); @@ -329,9 +329,9 @@ if ($conf->global->MAIN_FEATURES_LEVEL > 0) // This part of code looks strange. while ($row = $db->fetch_row($resql)) { print '' . $row[0] . ''; for($i = 1; $i <= 12; $i ++) { - print '' . price($row[$i]) . ''; + print '' . price($row[$i]) . ''; } - print '' . price($row[13]) . ''; + print '' . price($row[13]) . ''; print ''; } $db->free($resql); diff --git a/htdocs/accountancy/supplier/lines.php b/htdocs/accountancy/supplier/lines.php index 352a73200fb..a67386f6fbd 100644 --- a/htdocs/accountancy/supplier/lines.php +++ b/htdocs/accountancy/supplier/lines.php @@ -396,7 +396,7 @@ if ($result) { print $form->textwithtooltip(dol_trunc($text, $trunclength), $objp->description); print ''; - print '' . price($objp->total_ht) . ''; + print '' . price($objp->total_ht) . ''; print '' . vatrate($objp->tva_tx.($objp->vat_src_code?' ('.$objp->vat_src_code.')':'')) . ''; diff --git a/htdocs/accountancy/supplier/list.php b/htdocs/accountancy/supplier/list.php index fc8cc10fec4..17284513650 100644 --- a/htdocs/accountancy/supplier/list.php +++ b/htdocs/accountancy/supplier/list.php @@ -491,7 +491,7 @@ if ($result) { print $form->textwithtooltip(dol_trunc($text, $trunclength), $objp->description); print ''; - print ''; + print ''; print price($objp->total_ht); print ''; From e44b9113b7410a71ca423c1830f05c4ca3208d98 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 19 Jun 2019 09:01:57 +0200 Subject: [PATCH 318/828] Nowrap on amount --- htdocs/accountancy/expensereport/lines.php | 2 +- htdocs/accountancy/expensereport/list.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/accountancy/expensereport/lines.php b/htdocs/accountancy/expensereport/lines.php index 508dfb7136e..d15ef52ad39 100644 --- a/htdocs/accountancy/expensereport/lines.php +++ b/htdocs/accountancy/expensereport/lines.php @@ -319,7 +319,7 @@ if ($result) { print $form->textwithtooltip(dol_trunc($text, $trunclength), $objp->comments); print ''; - print '' . price($objp->total_ht) . ''; + print '' . price($objp->total_ht) . ''; print '' . vatrate($objp->tva_tx.($objp->vat_src_code?' ('.$objp->vat_src_code.')':'')) . ''; diff --git a/htdocs/accountancy/expensereport/list.php b/htdocs/accountancy/expensereport/list.php index 9f70d175d40..60b24638775 100644 --- a/htdocs/accountancy/expensereport/list.php +++ b/htdocs/accountancy/expensereport/list.php @@ -376,7 +376,7 @@ if ($result) { print $form->textwithtooltip(dol_trunc($text, $trunclength), $objp->comments); print ''; - print ''; + print ''; print price($objp->price); print ''; From b6bd4119d9a9f02b00d12b551b43fc600b893452 Mon Sep 17 00:00:00 2001 From: Nicolas ZABOURI Date: Wed, 19 Jun 2019 09:12:01 +0200 Subject: [PATCH 319/828] FIX travis Public underscore in load_ldap_info --- htdocs/adherents/class/adherent.class.php | 4 +++- htdocs/contact/class/contact.class.php | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php index 1856de6182f..cda3a461027 100644 --- a/htdocs/adherents/class/adherent.class.php +++ b/htdocs/adherents/class/adherent.class.php @@ -11,6 +11,7 @@ * Copyright (C) 2015 Raphaël Doursenaud * Copyright (C) 2016 Juanjo Menent * Copyright (C) 2018-2019 Thibault FOUCART + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -2460,7 +2461,8 @@ class Adherent extends CommonObject // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps - /** + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore + /** * Initialise tableau info (tableau des attributs LDAP) * * @return array Tableau info des attributs diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index 5c4df6ab3f9..ca58882b224 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -9,6 +9,7 @@ * Copyright (C) 2013 Alexandre Spangaro * Copyright (C) 2013 Juanjo Menent * Copyright (C) 2015 Marcos García + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -520,6 +521,7 @@ class Contact extends CommonObject // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore /** * Initialise tableau info (tableau des attributs LDAP) * From 9bde7c5229fc3584af4853e4f9707dd7751b238f Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 19 Jun 2019 09:21:18 +0200 Subject: [PATCH 320/828] Nowrap on amount --- htdocs/core/boxes/box_activity.php | 2 +- htdocs/core/boxes/box_commandes.php | 2 +- htdocs/core/boxes/box_factures_fourn_imp.php | 2 +- htdocs/core/boxes/box_factures_imp.php | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/core/boxes/box_activity.php b/htdocs/core/boxes/box_activity.php index 300040639a8..995ba93fb64 100644 --- a/htdocs/core/boxes/box_activity.php +++ b/htdocs/core/boxes/box_activity.php @@ -422,7 +422,7 @@ class box_activity extends ModeleBoxes ); $totalnb += $data[$j]->nb; $this->info_box_contents[$line][3] = array( - 'td' => 'class="right"', + 'td' => 'class="nowrap right"', 'text' => price($data[$j]->Mnttot, 1, $langs, 0, 0, -1, $conf->currency), ); $this->info_box_contents[$line][4] = array( diff --git a/htdocs/core/boxes/box_commandes.php b/htdocs/core/boxes/box_commandes.php index 8575e739946..956e73b4acf 100644 --- a/htdocs/core/boxes/box_commandes.php +++ b/htdocs/core/boxes/box_commandes.php @@ -146,7 +146,7 @@ class box_commandes extends ModeleBoxes ); $this->info_box_contents[$line][] = array( - 'td' => 'class="right"', + 'td' => 'class="nowrap right"', 'text' => price($objp->total_ht, 0, $langs, 0, -1, -1, $conf->currency), ); diff --git a/htdocs/core/boxes/box_factures_fourn_imp.php b/htdocs/core/boxes/box_factures_fourn_imp.php index 09de3b874e3..74f8cbc6b64 100644 --- a/htdocs/core/boxes/box_factures_fourn_imp.php +++ b/htdocs/core/boxes/box_factures_fourn_imp.php @@ -151,7 +151,7 @@ class box_factures_fourn_imp extends ModeleBoxes ); $this->info_box_contents[$line][] = array( - 'td' => 'class="right"', + 'td' => 'class="nowrap right"', 'text' => price($objp->total_ht, 0, $langs, 0, -1, -1, $conf->currency), ); diff --git a/htdocs/core/boxes/box_factures_imp.php b/htdocs/core/boxes/box_factures_imp.php index fd85f136f96..a0692c791b2 100644 --- a/htdocs/core/boxes/box_factures_imp.php +++ b/htdocs/core/boxes/box_factures_imp.php @@ -161,7 +161,7 @@ class box_factures_imp extends ModeleBoxes ); $this->info_box_contents[$line][] = array( - 'td' => 'class="right"', + 'td' => 'class="nowrap right"', 'text' => price($objp->total_ht, 0, $langs, 0, -1, -1, $conf->currency), ); From 7331e43db8e12ac4ee3ae0f2602c39053a1eb696 Mon Sep 17 00:00:00 2001 From: gauthier Date: Wed, 19 Jun 2019 10:19:33 +0200 Subject: [PATCH 321/828] FIX : we need to fetch fourn invoice with ref in current entity --- htdocs/fourn/class/fournisseur.facture.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php index 3a27690e7ac..d7ded8546f1 100644 --- a/htdocs/fourn/class/fournisseur.facture.class.php +++ b/htdocs/fourn/class/fournisseur.facture.class.php @@ -504,7 +504,7 @@ class FactureFournisseur extends CommonInvoice */ public function fetch($id='',$ref='') { - global $langs; + global $langs, $conf; $sql = "SELECT"; $sql.= " t.rowid,"; @@ -555,7 +555,7 @@ class FactureFournisseur extends CommonInvoice $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_paiement as p ON t.fk_mode_reglement = p.id"; $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_incoterms as i ON t.fk_incoterms = i.rowid'; if ($id) $sql.= " WHERE t.rowid=".$id; - if ($ref) $sql.= " WHERE t.ref='".$this->db->escape($ref)."'"; + if ($ref) $sql.= " WHERE t.ref='".$this->db->escape($ref)."' AND t.entity = ".$conf->entity; dol_syslog(get_class($this)."::fetch", LOG_DEBUG); $resql=$this->db->query($sql); From 3ad13adf31d6925760587c685f79bd6e694e90fd Mon Sep 17 00:00:00 2001 From: gauthier Date: Wed, 19 Jun 2019 10:43:42 +0200 Subject: [PATCH 322/828] FIX : better syntax --- htdocs/fourn/class/fournisseur.facture.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php index d7ded8546f1..4f9cd93021f 100644 --- a/htdocs/fourn/class/fournisseur.facture.class.php +++ b/htdocs/fourn/class/fournisseur.facture.class.php @@ -504,7 +504,7 @@ class FactureFournisseur extends CommonInvoice */ public function fetch($id='',$ref='') { - global $langs, $conf; + global $langs; $sql = "SELECT"; $sql.= " t.rowid,"; @@ -555,7 +555,7 @@ class FactureFournisseur extends CommonInvoice $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_paiement as p ON t.fk_mode_reglement = p.id"; $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_incoterms as i ON t.fk_incoterms = i.rowid'; if ($id) $sql.= " WHERE t.rowid=".$id; - if ($ref) $sql.= " WHERE t.ref='".$this->db->escape($ref)."' AND t.entity = ".$conf->entity; + if ($ref) $sql.= " WHERE t.ref='".$this->db->escape($ref)."' AND t.entity IN (".getEntity('supplier_invoice').")"; dol_syslog(get_class($this)."::fetch", LOG_DEBUG); $resql=$this->db->query($sql); From 7afcdb46eb9fe7e989b1cf884f157c5e6615f930 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 19 Jun 2019 12:10:05 +0200 Subject: [PATCH 323/828] Debug module ticket --- htdocs/admin/ticket.php | 2 +- htdocs/public/ticket/index.php | 34 +++++++++++++++++++--------------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/htdocs/admin/ticket.php b/htdocs/admin/ticket.php index 331d7e992ba..8cb1e85afe4 100644 --- a/htdocs/admin/ticket.php +++ b/htdocs/admin/ticket.php @@ -190,7 +190,7 @@ $head = ticketAdminPrepareHead(); dol_fiche_head($head, 'settings', $langs->trans("Module56000Name"), -1, "ticket"); -print ''.$langs->trans("TicketSetupDictionaries") . ' : ' . dol_buildpath('/admin/dict.php', 2) . '
'; +print ''.$langs->trans("TicketSetupDictionaries") . ' : '.$langs->trans("ClickHereToGoTo", $langs->transnoentitiesnoconv("DictionarySetup")).'
'; dol_fiche_end(); diff --git a/htdocs/public/ticket/index.php b/htdocs/public/ticket/index.php index 05b992b3e40..a3e4d63a4bc 100644 --- a/htdocs/public/ticket/index.php +++ b/htdocs/public/ticket/index.php @@ -1,5 +1,6 @@ +/* Copyright (C) - 2013-2016 Jean-François FERRY + * Copyright (C) - 2019 Laurent Destailleur * * 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 +19,7 @@ /** * \file htdocs/public/ticket/index.php * \ingroup ticket - * \brief Public file to add and manage ticket + * \brief Public page to add and manage ticket */ if (!defined('NOCSRFCHECK')) define('NOCSRFCHECK', '1'); @@ -56,21 +57,24 @@ $formticket = new FormTicket($db); $arrayofjs = array(); $arrayofcss = array('/ticket/css/styles.css.php'); + +if (empty($conf->global->TICKET_ENABLE_PUBLIC_INTERFACE)) +{ + print $langs->trans('TicketPublicInterfaceForbidden'); + exit; +} + llxHeaderTicket($langs->trans("Tickets"), "", 0, 0, $arrayofjs, $arrayofcss); -if (!$conf->global->TICKET_ENABLE_PUBLIC_INTERFACE) { - print '
' . $langs->trans('TicketPublicInterfaceForbidden') . '
'; -} else { - print '
'; - print '

' . ($conf->global->TICKET_PUBLIC_TEXT_HOME ? $conf->global->TICKET_PUBLIC_TEXT_HOME : $langs->trans("TicketPublicDesc")) . '

'; - print ''; - print '
'; -} +print '
'; +print '

' . ($conf->global->TICKET_PUBLIC_TEXT_HOME ? $conf->global->TICKET_PUBLIC_TEXT_HOME : $langs->trans("TicketPublicDesc")) . '

'; +print ''; +print '
'; // End of page htmlPrintOnlinePaymentFooter($mysoc, $langs, 1, $suffix, $object); From f9cc120d7569ae08e698d4e536e73eb8180c6b94 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 19 Jun 2019 12:53:28 +0200 Subject: [PATCH 324/828] Debug module ticket --- htdocs/core/class/dolgraph.class.php | 2 +- htdocs/core/modules/modTicket.class.php | 1 + htdocs/langs/en_US/ticket.lang | 1 + htdocs/ticket/index.php | 71 +++++++++++++------------ 4 files changed, 39 insertions(+), 36 deletions(-) diff --git a/htdocs/core/class/dolgraph.class.php b/htdocs/core/class/dolgraph.class.php index d70a63293c5..5cec0232603 100644 --- a/htdocs/core/class/dolgraph.class.php +++ b/htdocs/core/class/dolgraph.class.php @@ -229,7 +229,7 @@ class DolGraph /** * Set width * - * @param int $w Width + * @param int|string $w Width (Example: 320 or '100%') * @return boolean|null True */ public function SetWidth($w) diff --git a/htdocs/core/modules/modTicket.class.php b/htdocs/core/modules/modTicket.class.php index 9436bfa84e8..e16b6e87fd0 100644 --- a/htdocs/core/modules/modTicket.class.php +++ b/htdocs/core/modules/modTicket.class.php @@ -99,6 +99,7 @@ class modTicket extends DolibarrModules $this->conflictwith = array(); // List of module class names as string this module is in conflict with $this->phpmin = array(5,4); // Minimum version of PHP required by module $this->langfiles = array("ticket"); + // Constants // List of particular constants to add when module is enabled // (key, 'chaine', value, desc, visible, 'current' or 'allentities', deleteonunactive) diff --git a/htdocs/langs/en_US/ticket.lang b/htdocs/langs/en_US/ticket.lang index 6a2d7e89cb7..70bd8220af0 100644 --- a/htdocs/langs/en_US/ticket.lang +++ b/htdocs/langs/en_US/ticket.lang @@ -133,6 +133,7 @@ TicketsIndex=Ticket - home TicketList=List of tickets TicketAssignedToMeInfos=This page display ticket list created by or assigned to current user NoTicketsFound=No ticket found +NoUnreadTicketsFound=No unread ticket found TicketViewAllTickets=View all tickets TicketViewNonClosedOnly=View only open tickets TicketStatByStatus=Tickets by status diff --git a/htdocs/ticket/index.php b/htdocs/ticket/index.php index 824b1f1833e..e7f7c6bff2f 100644 --- a/htdocs/ticket/index.php +++ b/htdocs/ticket/index.php @@ -24,6 +24,7 @@ require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT . '/ticket/class/actions_ticket.class.php'; require_once DOL_DOCUMENT_ROOT . '/ticket/class/ticketstats.class.php'; require_once DOL_DOCUMENT_ROOT . '/core/class/dolgraph.class.php'; +require_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php'; // Load translation files required by the page $langs->loadLangs(array('companies', 'other', 'ticket')); @@ -102,8 +103,8 @@ if (empty($endyear)) { } $startyear = $endyear - 1; -$WIDTH = (($shownb && $showtot) || !empty($conf->dol_optimize_smallscreen)) ? '256' : '320'; -$HEIGHT = '192'; +$WIDTH = (($shownb && $showtot) || !empty($conf->dol_optimize_smallscreen)) ? '100%' : '80%'; +$HEIGHT = '228'; print '
'; @@ -120,16 +121,14 @@ $tick = array( 'closed' => 0, 'deleted' => 0, ); -$total = 0; + $sql = "SELECT t.fk_statut, COUNT(t.fk_statut) as nb"; $sql .= " FROM " . MAIN_DB_PREFIX . "ticket as t"; if (!$user->rights->societe->client->voir && !$socid) { $sql .= ", " . MAIN_DB_PREFIX . "societe_commerciaux as sc"; } - -$sql .= ' WHERE t.entity IN (' . getEntity('ticket', 1) . ')'; -$sql .= " AND t.fk_statut IS NOT NULL"; -$sql .= " AND date_format(datec,'%Y') = '" . $endyear . "'"; +$sql .= ' WHERE t.entity IN (' . getEntity('ticket') . ')'; +$sql .= dolSqlDateFilter('datec', 0, 0, $endyear); if (!$user->rights->societe->client->voir && !$socid) { $sql .= " AND t.fk_soc = sc.fk_soc AND sc.fk_user = " . $user->id; } @@ -149,44 +148,41 @@ $result = $db->query($sql); if ($result) { while ($objp = $db->fetch_object($result)) { $found = 0; - if ($objp->fk_statut == 0) { + if ($objp->fk_statut == Ticket::STATUS_NOT_READ) { $tick['unread'] = $objp->nb; } - if ($objp->fk_statut == 1) { + if ($objp->fk_statut == Ticket::STATUS_READ) { $tick['read'] = $objp->nb; } - if ($objp->fk_statut == 3) { - $tick['answered'] = $objp->nb; + if ($objp->fk_statut == Ticket::STATUS_NEED_MORE_INFO) { + $tick['needmoreinfo'] = $objp->nb; } - if ($objp->fk_statut == 4) { + if ($objp->fk_statut == Ticket::STATUS_ASSIGNED) { $tick['assigned'] = $objp->nb; } - if ($objp->fk_statut == 5) { + if ($objp->fk_statut == Ticket::STATUS_IN_PROGRESS) { $tick['inprogress'] = $objp->nb; } - if ($objp->fk_statut == 6) { + if ($objp->fk_statut == Ticket::STATUS_WAITING) { $tick['waiting'] = $objp->nb; } - if ($objp->fk_statut == 8) { + if ($objp->fk_statut == Ticket::STATUS_CLOSED) { $tick['closed'] = $objp->nb; } - if ($objp->fk_statut == 9) { - $tick['deleted'] = $objp->nb; + if ($objp->fk_statut == Ticket::STATUS_CANCELED) { + $tick['canceled'] = $objp->nb; } } - if ((round($tick['unread']) ? 1 : 0) +(round($tick['read']) ? 1 : 0) +(round($tick['answered']) ? 1 : 0) +(round($tick['assigned']) ? 1 : 0) +(round($tick['inprogress']) ? 1 : 0) +(round($tick['waiting']) ? 1 : 0) +(round($tick['closed']) ? 1 : 0) +(round($tick['deleted']) ? 1 : 0) >= 2 - ) { - $dataseries = array(); - $dataseries[] = array('label' => $langs->trans("Unread"), 'data' => round($tick['unread'])); - $dataseries[] = array('label' => $langs->trans("Read"), 'data' => round($tick['read'])); - $dataseries[] = array('label' => $langs->trans("Answered"), 'data' => round($tick['answered'])); - $dataseries[] = array('label' => $langs->trans("Assigned"), 'data' => round($tick['assigned'])); - $dataseries[] = array('label' => $langs->trans("InProgress"), 'data' => round($tick['inprogress'])); - $dataseries[] = array('label' => $langs->trans("Waiting"), 'data' => round($tick['waiting'])); - $dataseries[] = array('label' => $langs->trans("Closed"), 'data' => round($tick['closed'])); - $dataseries[] = array('label' => $langs->trans("Deleted"), 'data' => round($tick['deleted'])); - } + $dataseries = array(); + $dataseries[] = array('label' => $langs->trans("Unread"), 'data' => round($tick['unread'])); + $dataseries[] = array('label' => $langs->trans("Read"), 'data' => round($tick['read'])); + $dataseries[] = array('label' => $langs->trans("NeedMoreInformation"), 'data' => round($tick['needmoreinfo'])); + $dataseries[] = array('label' => $langs->trans("Assigned"), 'data' => round($tick['assigned'])); + $dataseries[] = array('label' => $langs->trans("InProgress"), 'data' => round($tick['inprogress'])); + $dataseries[] = array('label' => $langs->trans("Waiting"), 'data' => round($tick['waiting'])); + $dataseries[] = array('label' => $langs->trans("Closed"), 'data' => round($tick['closed'])); + $dataseries[] = array('label' => $langs->trans("Canceled"), 'data' => round($tick['canceled'])); } else { dol_print_error($db); } @@ -210,11 +206,17 @@ $stringtoshow .= '
'; print ''; print ''; -print ''; print '
' . $langs->trans("Statistics") . ' ' . img_picto('', 'filter.png', 'id="idsubimgDOLUSERCOOKIE_ticket_by_status" class="linkobject"') . '
'; +print '
'; +print $stringtoshow; // don't display graph if no series if (! empty($dataseries) && count($dataseries) > 1) { - $data = array(); + $totalnb=0; + foreach ($dataseries as $key => $value) { + $totalnb += $value['data']; + } + + $data = array(); foreach ($dataseries as $key => $value) { $data[] = array($value['label'], $value['data']); } @@ -244,10 +246,9 @@ if (! empty($dataseries) && count($dataseries) > 1) { //$px1->SetTitle($langs->trans("TicketStatByStatus")); $px1->draw($filenamenb, $fileurlnb); - print $px1->show(); + print $px1->show($totalnb?0:1); } } -print $stringtoshow; print '
'; @@ -303,7 +304,7 @@ if ($result) { print '
'; print ''; print ''; - print ''; + print ''; print ''; if ($num > 0) { @@ -359,7 +360,7 @@ if ($result) { $db->free(); } else { - print ''; + print ''; } print "
' . $transRecordedType . ''.$langs->trans("FullList").''.$langs->trans("FullList").'
' . $langs->trans('NoTicketsFound') . '
' . $langs->trans('NoUnreadTicketsFound') . '
"; From df8fff843cb7fb6beece1a36b2e47a7eaf1ea045 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 19 Jun 2019 13:16:46 +0200 Subject: [PATCH 325/828] Standardize code --- htdocs/includes/odtphp/odf.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/includes/odtphp/odf.php b/htdocs/includes/odtphp/odf.php index 6b3a6400bc3..a5ce9e3ba68 100644 --- a/htdocs/includes/odtphp/odf.php +++ b/htdocs/includes/odtphp/odf.php @@ -745,7 +745,7 @@ IMG; private function _rrmdir($dir) { if ($handle = opendir($dir)) { - while (false !== ($file = readdir($handle))) { + while (($file = readdir($handle))!==false) { if ($file != '.' && $file != '..') { if (is_dir($dir . '/' . $file)) { $this->_rrmdir($dir . '/' . $file); From 8e8199cc0f963530735ada6a083c1470ec363889 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 19 Jun 2019 13:17:02 +0200 Subject: [PATCH 326/828] Fix scrutinizer --- htdocs/ticket/class/ticket.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/ticket/class/ticket.class.php b/htdocs/ticket/class/ticket.class.php index 132cce1e52b..69708e06516 100644 --- a/htdocs/ticket/class/ticket.class.php +++ b/htdocs/ticket/class/ticket.class.php @@ -2374,7 +2374,7 @@ class Ticket extends CommonObject if (file_exists($dir_osencoded)) { $handle = opendir($dir_osencoded); if (is_resource($handle)) { - while (($file = readdir($handle)) != false) { + while (($file = readdir($handle)) !== false) { if (!utf8_check($file)) { $file = utf8_encode($file); } From a11c816a176da9b0fd930d3767208ad60aff4377 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 19 Jun 2019 14:24:48 +0200 Subject: [PATCH 327/828] Fix tooltip --- htdocs/compta/facture/card.php | 3 ++- htdocs/fourn/facture/card.php | 3 ++- htdocs/langs/en_US/bills.lang | 6 ++++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index 0f2669014a8..10de9581dfe 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -3444,6 +3444,7 @@ elseif ($id > 0 || ! empty($ref)) elseif($object->type == Facture::TYPE_CREDIT_NOTE) $type_fac = 'CreditNote'; elseif($object->type == Facture::TYPE_DEPOSIT) $type_fac = 'Deposit'; $text = $langs->trans('ConfirmConvertToReduc', strtolower($langs->transnoentities($type_fac))); + $text.='
'.$langs->trans('ConfirmConvertToReduc2'); $formconfirm = $form->formconfirm($_SERVER['PHP_SELF'] . '?facid=' . $object->id, $langs->trans('ConvertToReduc'), $text, 'confirm_converttoreduc', '', "yes", 2); } @@ -4746,7 +4747,7 @@ elseif ($id > 0 || ! empty($ref)) } // For credit note if ($object->type == Facture::TYPE_CREDIT_NOTE && $object->statut == 1 && $object->paye == 0 && $usercancreate && $object->getSommePaiement() == 0) { - print ''; + print ''; } // For deposit invoice if ($object->type == Facture::TYPE_DEPOSIT && $usercancreate && $object->statut > 0 && empty($discount->id)) diff --git a/htdocs/fourn/facture/card.php b/htdocs/fourn/facture/card.php index 1eb38cec66c..c25b0afa15b 100644 --- a/htdocs/fourn/facture/card.php +++ b/htdocs/fourn/facture/card.php @@ -2221,6 +2221,7 @@ else elseif($object->type == FactureFournisseur::TYPE_CREDIT_NOTE) $type_fac = 'CreditNote'; elseif($object->type == FactureFournisseur::TYPE_DEPOSIT) $type_fac = 'Deposit'; $text = $langs->trans('ConfirmConvertToReducSupplier', strtolower($langs->transnoentities($type_fac))); + $text .= '
'.$langs->trans('ConfirmConvertToReducSupplier2'); $formconfirm = $form->formconfirm($_SERVER['PHP_SELF'] . '?facid=' . $object->id, $langs->trans('ConvertToReduc'), $text, 'confirm_converttoreduc', '', "yes", 2); } @@ -3107,7 +3108,7 @@ else } // For credit note if ($object->type == FactureFournisseur::TYPE_CREDIT_NOTE && $object->statut == 1 && $object->paye == 0 && $user->rights->fournisseur->facture->creer && $object->getSommePaiement() == 0) { - print ''; + print ''; } // For deposit invoice if ($object->type == FactureFournisseur::TYPE_DEPOSIT && $object->paye == 1 && $resteapayer == 0 && $user->rights->fournisseur->facture->creer && empty($discount->id)) diff --git a/htdocs/langs/en_US/bills.lang b/htdocs/langs/en_US/bills.lang index 17882b3b270..9a86e941035 100644 --- a/htdocs/langs/en_US/bills.lang +++ b/htdocs/langs/en_US/bills.lang @@ -66,8 +66,10 @@ paymentInInvoiceCurrency=in invoices currency PaidBack=Paid back DeletePayment=Delete payment ConfirmDeletePayment=Are you sure you want to delete this payment? -ConfirmConvertToReduc=Do you want to convert this %s into an absolute discount?
The amount will be saved among all discounts and could be used as a discount for a current or a future invoice for this customer. -ConfirmConvertToReducSupplier=Do you want to convert this %s into an absolute discount?
The amount will be saved among all discounts and could be used as a discount for a current or a future invoice for this vendor. +ConfirmConvertToReduc=Do you want to convert this %s into an absolute discount? +ConfirmConvertToReduc2=The amount will be saved among all discounts and could be used as a discount for a current or a future invoice for this customer. +ConfirmConvertToReducSupplier=Do you want to convert this %s into an absolute discount? +ConfirmConvertToReducSupplier2=The amount will be saved among all discounts and could be used as a discount for a current or a future invoice for this vendor. SupplierPayments=Vendor payments ReceivedPayments=Received payments ReceivedCustomersPayments=Payments received from customers From c109eebe383f240b4340732d5457e26a3f9e0384 Mon Sep 17 00:00:00 2001 From: Abbes Bahfir Date: Wed, 19 Jun 2019 14:42:56 +0100 Subject: [PATCH 328/828] New:Show c_country elements in modulebuilder --- htdocs/core/class/ccountry.class.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/htdocs/core/class/ccountry.class.php b/htdocs/core/class/ccountry.class.php index a97d992bf89..5e744fbdb73 100644 --- a/htdocs/core/class/ccountry.class.php +++ b/htdocs/core/class/ccountry.class.php @@ -47,8 +47,8 @@ class Ccountry // extends CommonObject */ public $errors = array(); - //var $element='ccountry'; //!< Id that identify managed objects - //var $table_element='ccountry'; //!< Name of table without prefix where object is stored + var $element='ccountry'; //!< Id that identify managed objects + var $table_element='c_country'; //!< Name of table without prefix where object is stored /** * @var int ID @@ -65,7 +65,8 @@ class Ccountry // extends CommonObject public $active; - + public $fields=array( + 'label' => array('type'=>'varchar(250)', 'label'=>'Label', 'enabled'=>1, 'visible'=>1, 'position'=>15, 'notnull'=>-1, 'showoncombobox'=>'1',)); /** From 2034faf280528cdd444502dca25b4743c05d17f1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 19 Jun 2019 15:48:04 +0200 Subject: [PATCH 329/828] Fix duplicate 'option_' in prefix --- htdocs/core/class/extrafields.class.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index 8e0cf0946dc..eeb653aec8a 100644 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -972,7 +972,10 @@ class ExtraFields $out=''; - $keyprefix = $keyprefix.'options_'; // Because we work on extrafields + if (! preg_match('/options_$/', $keyprefix)) // Because we work on extrafields, we add 'options_' to prefix if not already added + { + $keyprefix = $keyprefix.'options_'; + } if (! empty($extrafieldsobjectkey)) { From 04f2fb604f680575acfcacd0e0f179cdbfb5b97a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 19 Jun 2019 15:48:04 +0200 Subject: [PATCH 330/828] Fix duplicate 'option_' in prefix --- htdocs/core/class/extrafields.class.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index 8e0cf0946dc..eeb653aec8a 100644 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -972,7 +972,10 @@ class ExtraFields $out=''; - $keyprefix = $keyprefix.'options_'; // Because we work on extrafields + if (! preg_match('/options_$/', $keyprefix)) // Because we work on extrafields, we add 'options_' to prefix if not already added + { + $keyprefix = $keyprefix.'options_'; + } if (! empty($extrafieldsobjectkey)) { From daa8b43732d43ec6f391e601855737c691079541 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 19 Jun 2019 15:51:48 +0200 Subject: [PATCH 331/828] css --- htdocs/compta/facture/list.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index b6beba5e12e..6c325c865a9 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -1075,7 +1075,7 @@ if ($resql) // Town if (! empty($arrayfields['s.town']['checked'])) { - print ''; + print ''; print $obj->town; print ''; if (! $i) $totalarray['nbfield']++; @@ -1083,7 +1083,7 @@ if ($resql) // Zip if (! empty($arrayfields['s.zip']['checked'])) { - print ''; + print ''; print $obj->zip; print ''; if (! $i) $totalarray['nbfield']++; From c3b8582076b7144cf8d23bb07189a39cb1918263 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 19 Jun 2019 15:55:18 +0200 Subject: [PATCH 332/828] Fix use of deprecated function --- htdocs/stripe/class/stripe.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/stripe/class/stripe.class.php b/htdocs/stripe/class/stripe.class.php index d754b8d3962..27346a15f5e 100644 --- a/htdocs/stripe/class/stripe.class.php +++ b/htdocs/stripe/class/stripe.class.php @@ -536,7 +536,7 @@ class Stripe extends CommonObject //$a = \Stripe\Stripe::getApiKey(); //var_dump($a);var_dump($stripeacc);exit; - dol_syslog("Try to create card dataforcard = ".dol_json_encode($dataforcard)); + dol_syslog("Try to create card dataforcard = ".json_encode($dataforcard)); try { if (empty($stripeacc)) { // If the Stripe connect account not set, we use common API usage $card = $cu->sources->create($dataforcard); From 5b5028254f8d33215d96c60fdb83a9c526de1f3f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 19 Jun 2019 16:30:03 +0200 Subject: [PATCH 333/828] Fix label --- htdocs/langs/en_US/accountancy.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/accountancy.lang b/htdocs/langs/en_US/accountancy.lang index 449a30acbbb..91234f72aef 100644 --- a/htdocs/langs/en_US/accountancy.lang +++ b/htdocs/langs/en_US/accountancy.lang @@ -291,7 +291,7 @@ Modelcsv_cogilog=Export for Cogilog Modelcsv_agiris=Export for Agiris Modelcsv_openconcerto=Export for OpenConcerto (Test) Modelcsv_configurable=Export CSV Configurable -Modelcsv_FEC=Export FEC (Art. L47 A) +Modelcsv_FEC=Export FEC Modelcsv_Sage50_Swiss=Export for Sage 50 Switzerland ChartofaccountsId=Chart of accounts Id From 7c4cddf28d3aacf718d226078b3d23dfcb78fc07 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 19 Jun 2019 16:34:01 +0200 Subject: [PATCH 334/828] Fix missing trad --- htdocs/langs/en_US/accountancy.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/accountancy.lang b/htdocs/langs/en_US/accountancy.lang index 91234f72aef..7797fdef7b1 100644 --- a/htdocs/langs/en_US/accountancy.lang +++ b/htdocs/langs/en_US/accountancy.lang @@ -336,7 +336,7 @@ UseMenuToSetBindindManualy=Lines not yet bound, use menu %s to ## Import ImportAccountingEntries=Accounting entries - +DateExport=Date export WarningReportNotReliable=Warning, this report is not based on the Ledger, so does not contains transaction modified manually in the Ledger. If your journalization is up to date, the bookkeeping view is more accurate. ExpenseReportJournal=Expense Report Journal InventoryJournal=Inventory Journal From 31a53b72aec1bcd2b6524e17bd922a8eda05f028 Mon Sep 17 00:00:00 2001 From: John Botella Date: Wed, 19 Jun 2019 16:55:45 +0200 Subject: [PATCH 335/828] FIX var name --- htdocs/core/actions_massactions.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php index 34ba465ebff..07766ac7fef 100644 --- a/htdocs/core/actions_massactions.inc.php +++ b/htdocs/core/actions_massactions.inc.php @@ -209,7 +209,7 @@ if (! $error && $massaction == 'confirm_presend') $resaction.='
'.$langs->trans('ErrorOnlyProposalNotDraftCanBeSentInMassAction',$objectobj->ref).'

'; continue; // Payment done or started or canceled } - if ($objectclass == 'Commande' && $objectoj->statut == Commande::STATUS_DRAFT) + if ($objectclass == 'Commande' && $objectobj->statut == Commande::STATUS_DRAFT) { $langs->load("errors"); $nbignored++; From 1079535894f73cedb822d4fea049efe4e571b50e Mon Sep 17 00:00:00 2001 From: Abbes Bahfir Date: Wed, 19 Jun 2019 17:49:31 +0100 Subject: [PATCH 336/828] Fix:modulebuilder output folder --- htdocs/modulebuilder/template/myobject_document.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/modulebuilder/template/myobject_document.php b/htdocs/modulebuilder/template/myobject_document.php index 0f4df0012f4..12da4769cf7 100644 --- a/htdocs/modulebuilder/template/myobject_document.php +++ b/htdocs/modulebuilder/template/myobject_document.php @@ -81,8 +81,8 @@ $extralabels = $extrafields->fetch_name_optionals_label('myobject'); // Load object include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once // Must be include, not include_once. Include fetch and fetch_thirdparty but not fetch_optionals -//if ($id > 0 || ! empty($ref)) $upload_dir = $conf->mymodule->multidir_output[$object->entity?$object->entity:1] . "/myobject/" . dol_sanitizeFileName($object->id); -if ($id > 0 || ! empty($ref)) $upload_dir = $conf->mymodule->multidir_output[$object->entity?$object->entity:1] . "/myobject/" . dol_sanitizeFileName($object->ref); +//if ($id > 0 || ! empty($ref)) $upload_dir = $conf->sellyoursaas->multidir_output[$object->entity] . "/myobject/" . dol_sanitizeFileName($object->id); +if ($id > 0 || ! empty($ref)) $upload_dir = $conf->mymodule->multidir_output[$conf->entity] . "/myobject/" . dol_sanitizeFileName($object->ref); /* From 47c2f6fac4be2b9a56854d0df42e4182622f1647 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 19 Jun 2019 21:35:35 +0200 Subject: [PATCH 337/828] NEW Add column VAT rate in product list --- htdocs/product/list.php | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/htdocs/product/list.php b/htdocs/product/list.php index 7677e82e1b4..5e348c2fe70 100644 --- a/htdocs/product/list.php +++ b/htdocs/product/list.php @@ -56,6 +56,7 @@ $search_barcode=GETPOST("search_barcode", 'alpha'); $search_label=GETPOST("search_label", 'alpha'); $search_type = GETPOST("search_type", 'int'); $search_sale = GETPOST("search_sale", 'int'); +$search_vatrate=GETPOST("search_vatrate", 'alpha'); $search_categ = GETPOST("search_categ", 'int'); $search_tosell = GETPOST("search_tosell", 'int'); $search_tobuy = GETPOST("search_tobuy", 'int'); @@ -174,7 +175,8 @@ $arrayfields=array( 'p.sellprice'=>array('label'=>$langs->trans("SellingPrice"), 'checked'=>1, 'enabled'=>empty($conf->global->PRODUIT_MULTIPRICES)), 'p.minbuyprice'=>array('label'=>$langs->trans("BuyingPriceMinShort"), 'checked'=>1, 'enabled'=>(! empty($user->rights->fournisseur->lire))), 'p.numbuyprice'=>array('label'=>$langs->trans("BuyingPriceNumShort"), 'checked'=>0, 'enabled'=>(! empty($user->rights->fournisseur->lire))), - 'p.pmp'=>array('label'=>$langs->trans("PMPValueShort"), 'checked'=>0, 'enabled'=>(! empty($user->rights->fournisseur->lire))), + 'p.tva_tx'=>array('label'=>$langs->trans("VATRate"), 'checked'=>0, 'enabled'=>(! empty($user->rights->fournisseur->lire))), + 'p.pmp'=>array('label'=>$langs->trans("PMPValueShort"), 'checked'=>0, 'enabled'=>(! empty($user->rights->fournisseur->lire))), 'p.seuil_stock_alerte'=>array('label'=>$langs->trans("StockLimit"), 'checked'=>0, 'enabled'=>(! empty($conf->stock->enabled) && $user->rights->stock->lire && $contextpage != 'service')), 'p.desiredstock'=>array('label'=>$langs->trans("DesiredStock"), 'checked'=>1, 'enabled'=>(! empty($conf->stock->enabled) && $user->rights->stock->lire && $contextpage != 'service')), 'p.stock'=>array('label'=>$langs->trans("PhysicalStock"), 'checked'=>1, 'enabled'=>(! empty($conf->stock->enabled) && $user->rights->stock->lire && $contextpage != 'service')), @@ -229,6 +231,7 @@ if (empty($reshook)) $search_categ=0; $search_tosell=""; $search_tobuy=""; + $search_vatrate=""; $search_tobatch=''; //$search_type=''; // There is 2 types of list: a list of product and a list of services. No list with both. So when we clear search criteria, we must keep the filter on type. @@ -276,7 +279,7 @@ else $texte = $langs->trans("ProductsAndServices"); } -$sql = 'SELECT DISTINCT p.rowid, p.ref, p.label, p.fk_product_type, p.barcode, p.price, p.price_ttc, p.price_base_type, p.entity,'; +$sql = 'SELECT DISTINCT p.rowid, p.ref, p.label, p.fk_product_type, p.barcode, p.price, p.tva_tx, p.price_ttc, p.price_base_type, p.entity,'; $sql.= ' p.fk_product_type, p.duration, p.tosell, p.tobuy, p.seuil_stock_alerte, p.desiredstock,'; $sql.= ' p.tobatch, p.accountancy_code_sell, p.accountancy_code_sell_intra, p.accountancy_code_sell_export, p.accountancy_code_buy,'; $sql.= ' p.datec as date_creation, p.tms as date_update, p.pmp, p.stock,'; @@ -323,6 +326,7 @@ if ($search_label) $sql .= natural_search('p.label', $search_label); if ($search_barcode) $sql .= natural_search('p.barcode', $search_barcode); if (isset($search_tosell) && dol_strlen($search_tosell) > 0 && $search_tosell!=-1) $sql.= " AND p.tosell = ".$db->escape($search_tosell); if (isset($search_tobuy) && dol_strlen($search_tobuy) > 0 && $search_tobuy!=-1) $sql.= " AND p.tobuy = ".$db->escape($search_tobuy); +if ($search_vatrate) $sql .= natural_search('p.tva_tx', $search_vatrate); if (dol_strlen($canvas) > 0) $sql.= " AND p.canvas = '".$db->escape($canvas)."'"; if ($catid > 0) $sql.= " AND cp.fk_categorie = ".$catid; if ($catid == -2) $sql.= " AND cp.fk_categorie IS NULL"; @@ -341,7 +345,7 @@ include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php'; $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListWhere', $parameters); // Note that $action and $object may have been modified by hook $sql.=$hookmanager->resPrint; -$sql.= " GROUP BY p.rowid, p.ref, p.label, p.barcode, p.price, p.price_ttc, p.price_base_type,"; +$sql.= " GROUP BY p.rowid, p.ref, p.label, p.barcode, p.price, p.tva_tx, p.price_ttc, p.price_base_type,"; $sql.= " p.fk_product_type, p.duration, p.tosell, p.tobuy, p.seuil_stock_alerte, p.desiredstock,"; $sql.= ' p.datec, p.tms, p.entity, p.tobatch, p.accountancy_code_sell, p.accountancy_code_sell_intra, p.accountancy_code_sell_export, p.accountancy_code_buy, p.pmp, p.stock,'; $sql.= ' p.weight, p.weight_units, p.length, p.length_units, p.surface, p.surface_units, p.volume, p.volume_units, p.width, p.width_units, p.height, p.height_units'; @@ -421,6 +425,7 @@ if ($resql) if ($search_label) $param.="&search_label=".urlencode($search_label); if ($search_tosell != '') $param.="&search_tosell=".urlencode($search_tosell); if ($search_tobuy != '') $param.="&search_tobuy=".urlencode($search_tobuy); + if ($search_vatrate) $sql .= natural_search('p.tva_tx', $search_vatrate); if ($fourn_id > 0) $param.=($fourn_id?"&fourn_id=".$fourn_id:""); if ($seach_categ) $param.=($search_categ?"&search_categ=".urlencode($search_categ):""); if ($show_childproducts) $param.=($show_childproducts?"&search_show_childproducts=".urlencode($show_childproducts):""); @@ -613,6 +618,13 @@ if ($resql) print ' '; print ''; } + // Sell price + if (! empty($arrayfields['p.tva_tx']['checked'])) + { + print ''; + print ''; + print ''; + } // WAP if (! empty($arrayfields['p.pmp']['checked'])) { @@ -715,6 +727,9 @@ if ($resql) if (! empty($arrayfields['p.numbuyprice']['checked'])) { print_liste_field_titre($arrayfields['p.numbuyprice']['label'], $_SERVER["PHP_SELF"], "", "", $param, '', $sortfield, $sortorder, 'right '); } + if (! empty($arrayfields['p.tva_tx']['checked'])) { + print_liste_field_titre($arrayfields['p.tva_tx']['label'], $_SERVER["PHP_SELF"], "", "", $param, '', $sortfield, $sortorder, 'right '); + } if (! empty($arrayfields['p.pmp']['checked'])) { print_liste_field_titre($arrayfields['p.pmp']['label'], $_SERVER["PHP_SELF"], "", "", $param, '', $sortfield, $sortorder, 'right '); } @@ -983,6 +998,15 @@ if ($resql) print ''; } + // Sell Tax Rate + if (! empty($arrayfields['p.tva_tx']['checked'])) + { + print ''; + print vatrate($obj->tva_tx,true); + print ''; + if (! $i) $totalarray['nbfield']++; + } + // WAP if (! empty($arrayfields['p.pmp']['checked'])) { From 68e9712f0c30e17b7c4a78bd593cb8a60ceaf33d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 19 Jun 2019 22:05:38 +0200 Subject: [PATCH 338/828] Fix support domains with 3 levels --- htdocs/core/lib/geturl.lib.php | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/geturl.lib.php b/htdocs/core/lib/geturl.lib.php index 714bc26b7da..83e483b3e97 100644 --- a/htdocs/core/lib/geturl.lib.php +++ b/htdocs/core/lib/geturl.lib.php @@ -172,14 +172,21 @@ function getURLContent($url, $postorget = 'GET', $param = '', $followlocation = * For example: https://www.abc.mydomain.com/dir/page.html return 'mydomain' * * @param string $url Full URL. - * @param int $mode 0=return 'mydomain', 1=return 'mydomain.com' + * @param int $mode 0=return 'mydomain', 1=return 'mydomain.com', 2=return 'abc.mydomain.com' * @return string Returns domaine name */ function getDomainFromURL($url, $mode = 0) { $tmpdomain = preg_replace('/^https?:\/\//i', '', $url); // Remove http(s):// $tmpdomain = preg_replace('/\/.*$/i', '', $tmpdomain); // Remove part after domain - $tmpdomain = preg_replace('/^.*\.([^\.]+)\.([^\.]+)$/', '\1.\2', $tmpdomain); // Remove part www.abc before domain name + if ($mode == 2) + { + $tmpdomain = preg_replace('/^.*\.([^\.]+)\.([^\.]+)\.([^\.]+)$/', '\1.\2.\3', $tmpdomain); // Remove part 'www.' before 'abc.mydomain.com' + } + else + { + $tmpdomain = preg_replace('/^.*\.([^\.]+)\.([^\.]+)$/', '\1.\2', $tmpdomain); // Remove part 'www.abc.' before 'mydomain.com' + } if (empty($mode)) { $tmpdomain = preg_replace('/\.[^\.]+$/', '', $tmpdomain); // Remove first level domain (.com, .net, ...) From d6b6f77e74beeab3cb41cbdbbd59b255e4c0614c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 19 Jun 2019 22:05:38 +0200 Subject: [PATCH 339/828] Fix support domains with 3 levels --- htdocs/core/lib/geturl.lib.php | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/geturl.lib.php b/htdocs/core/lib/geturl.lib.php index 714bc26b7da..83e483b3e97 100644 --- a/htdocs/core/lib/geturl.lib.php +++ b/htdocs/core/lib/geturl.lib.php @@ -172,14 +172,21 @@ function getURLContent($url, $postorget = 'GET', $param = '', $followlocation = * For example: https://www.abc.mydomain.com/dir/page.html return 'mydomain' * * @param string $url Full URL. - * @param int $mode 0=return 'mydomain', 1=return 'mydomain.com' + * @param int $mode 0=return 'mydomain', 1=return 'mydomain.com', 2=return 'abc.mydomain.com' * @return string Returns domaine name */ function getDomainFromURL($url, $mode = 0) { $tmpdomain = preg_replace('/^https?:\/\//i', '', $url); // Remove http(s):// $tmpdomain = preg_replace('/\/.*$/i', '', $tmpdomain); // Remove part after domain - $tmpdomain = preg_replace('/^.*\.([^\.]+)\.([^\.]+)$/', '\1.\2', $tmpdomain); // Remove part www.abc before domain name + if ($mode == 2) + { + $tmpdomain = preg_replace('/^.*\.([^\.]+)\.([^\.]+)\.([^\.]+)$/', '\1.\2.\3', $tmpdomain); // Remove part 'www.' before 'abc.mydomain.com' + } + else + { + $tmpdomain = preg_replace('/^.*\.([^\.]+)\.([^\.]+)$/', '\1.\2', $tmpdomain); // Remove part 'www.abc.' before 'mydomain.com' + } if (empty($mode)) { $tmpdomain = preg_replace('/\.[^\.]+$/', '', $tmpdomain); // Remove first level domain (.com, .net, ...) From bf71731fc945afdf66216daf3e37359813638d15 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 19 Jun 2019 22:28:33 +0200 Subject: [PATCH 340/828] Fix phpcs --- htdocs/adherents/class/adherent.class.php | 1 + htdocs/contact/class/contact.class.php | 1 + 2 files changed, 2 insertions(+) diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php index 1856de6182f..c1bb04d90fc 100644 --- a/htdocs/adherents/class/adherent.class.php +++ b/htdocs/adherents/class/adherent.class.php @@ -2460,6 +2460,7 @@ class Adherent extends CommonObject // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore /** * Initialise tableau info (tableau des attributs LDAP) * diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index 5c4df6ab3f9..de9494fca8b 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -520,6 +520,7 @@ class Contact extends CommonObject // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore /** * Initialise tableau info (tableau des attributs LDAP) * From b4e47d289b5bb183fcb845b236aa6615a62cc8ff Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 20 Jun 2019 02:43:56 +0200 Subject: [PATCH 341/828] Code comment --- htdocs/user/class/user.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/user/class/user.class.php b/htdocs/user/class/user.class.php index a151fdb5574..8e52ba3028b 100644 --- a/htdocs/user/class/user.class.php +++ b/htdocs/user/class/user.class.php @@ -520,8 +520,8 @@ class User extends CommonObject * Add a right to the user * * @param int $rid Id of permission to add or 0 to add several permissions - * @param string $allmodule Add all permissions of module $allmodule - * @param string $allperms Add all permissions of module $allmodule, subperms $allperms only + * @param string $allmodule Add all permissions of module $allmodule or 'allmodules' to include all modules. + * @param string $allperms Add all permissions of module $allmodule, subperms $allperms only or '' to include all permissions. * @param int $entity Entity to use * @param int $notrigger 1=Does not execute triggers, 0=Execute triggers * @return int > 0 if OK, < 0 if KO From e060af5c977b9a37cf6c054e77f483d617f583c5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 20 Jun 2019 02:50:23 +0200 Subject: [PATCH 342/828] Update treso.php --- htdocs/compta/bank/treso.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/bank/treso.php b/htdocs/compta/bank/treso.php index 1318dbd4e2d..f17e622210e 100644 --- a/htdocs/compta/bank/treso.php +++ b/htdocs/compta/bank/treso.php @@ -293,8 +293,8 @@ if ($_REQUEST["account"] || $_REQUEST["ref"]) }else print ""; } print "".$refcomp.""; - if ($obj->total_ttc < 0) { print "".price(abs($total_ttc))." "; }; - if ($obj->total_ttc >= 0) { print " ".price($total_ttc).""; }; + if ($obj->total_ttc < 0) { print ''.price(abs($total_ttc))." "; }; + if ($obj->total_ttc >= 0) { print ' '.price($total_ttc).""; }; print ''.price($solde).''; print ""; } From 6d38f5ec9cb1fe927106243ab6463c3a39e6d630 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 20 Jun 2019 02:56:44 +0200 Subject: [PATCH 343/828] FIX #11369 --- htdocs/bom/class/bom.class.php | 16 ++++++++-------- .../class/emailcollector.class.php | 6 +++--- .../class/emailcollectoraction.class.php | 8 ++++---- .../class/emailcollectorfilter.class.php | 8 ++++---- .../template/class/myobject.class.php | 6 +++--- 5 files changed, 22 insertions(+), 22 deletions(-) diff --git a/htdocs/bom/class/bom.class.php b/htdocs/bom/class/bom.class.php index 731136fb7f4..99331de8c62 100644 --- a/htdocs/bom/class/bom.class.php +++ b/htdocs/bom/class/bom.class.php @@ -165,7 +165,7 @@ class BOM extends CommonObject */ public function __construct(DoliDB $db) { - global $conf, $langs, $user; + global $conf, $langs; $this->db = $db; @@ -184,11 +184,11 @@ class BOM extends CommonObject // Translate some data of arrayofkeyval foreach($this->fields as $key => $val) { - if (is_array($this->fields['status']['arrayofkeyval'])) + if (is_array($this->fields[$key]['arrayofkeyval'])) { - foreach($this->fields['status']['arrayofkeyval'] as $key2 => $val2) + foreach($this->fields[$key]['arrayofkeyval'] as $key2 => $val2) { - $this->fields['status']['arrayofkeyval'][$key2]=$langs->trans($val2); + $this->fields[$key]['arrayofkeyval'][$key2]=$langs->trans($val2); } } } @@ -1066,7 +1066,7 @@ class BOMLine extends CommonObject */ public function __construct(DoliDB $db) { - global $conf, $langs, $user; + global $conf, $langs; $this->db = $db; @@ -1085,11 +1085,11 @@ class BOMLine extends CommonObject // Translate some data of arrayofkeyval foreach($this->fields as $key => $val) { - if (is_array($this->fields['status']['arrayofkeyval'])) + if (is_array($this->fields[$key]['arrayofkeyval'])) { - foreach($this->fields['status']['arrayofkeyval'] as $key2 => $val2) + foreach($this->fields[$key]['arrayofkeyval'] as $key2 => $val2) { - $this->fields['status']['arrayofkeyval'][$key2]=$langs->trans($val2); + $this->fields[$key]['arrayofkeyval'][$key2]=$langs->trans($val2); } } } diff --git a/htdocs/emailcollector/class/emailcollector.class.php b/htdocs/emailcollector/class/emailcollector.class.php index f60051df970..ff4be06fcab 100644 --- a/htdocs/emailcollector/class/emailcollector.class.php +++ b/htdocs/emailcollector/class/emailcollector.class.php @@ -205,11 +205,11 @@ class EmailCollector extends CommonObject // Translate some data of arrayofkeyval foreach($this->fields as $key => $val) { - if (is_array($this->fields['status']['arrayofkeyval'])) + if (is_array($this->fields[$key]['arrayofkeyval'])) { - foreach($this->fields['status']['arrayofkeyval'] as $key2 => $val2) + foreach($this->fields[$key]['arrayofkeyval'] as $key2 => $val2) { - $this->fields['status']['arrayofkeyval'][$key2]=$langs->trans($val2); + $this->fields[$key]['arrayofkeyval'][$key2]=$langs->trans($val2); } } } diff --git a/htdocs/emailcollector/class/emailcollectoraction.class.php b/htdocs/emailcollector/class/emailcollectoraction.class.php index 11ccfbc858e..ca710f99216 100644 --- a/htdocs/emailcollector/class/emailcollectoraction.class.php +++ b/htdocs/emailcollector/class/emailcollectoraction.class.php @@ -145,7 +145,7 @@ class EmailCollectorAction extends CommonObject */ public function __construct(DoliDB $db) { - global $conf, $langs, $user; + global $conf, $langs; $this->db = $db; @@ -164,11 +164,11 @@ class EmailCollectorAction extends CommonObject // Translate some data of arrayofkeyval foreach($this->fields as $key => $val) { - if (is_array($this->fields['status']['arrayofkeyval'])) + if (is_array($this->fields[$key]['arrayofkeyval'])) { - foreach($this->fields['status']['arrayofkeyval'] as $key2 => $val2) + foreach($this->fields[$key]['arrayofkeyval'] as $key2 => $val2) { - $this->fields['status']['arrayofkeyval'][$key2]=$langs->trans($val2); + $this->fields[$key]['arrayofkeyval'][$key2]=$langs->trans($val2); } } } diff --git a/htdocs/emailcollector/class/emailcollectorfilter.class.php b/htdocs/emailcollector/class/emailcollectorfilter.class.php index f93ac51f673..5c7c7184ffc 100644 --- a/htdocs/emailcollector/class/emailcollectorfilter.class.php +++ b/htdocs/emailcollector/class/emailcollectorfilter.class.php @@ -114,7 +114,7 @@ class EmailCollectorFilter extends CommonObject */ public function __construct(DoliDB $db) { - global $conf, $langs, $user; + global $conf, $langs; $this->db = $db; @@ -133,11 +133,11 @@ class EmailCollectorFilter extends CommonObject // Translate some data of arrayofkeyval foreach($this->fields as $key => $val) { - if (is_array($this->fields['status']['arrayofkeyval'])) + if (is_array($this->fields[$key]['arrayofkeyval'])) { - foreach($this->fields['status']['arrayofkeyval'] as $key2 => $val2) + foreach($this->fields[$key]['arrayofkeyval'] as $key2 => $val2) { - $this->fields['status']['arrayofkeyval'][$key2]=$langs->trans($val2); + $this->fields[$key]['arrayofkeyval'][$key2]=$langs->trans($val2); } } } diff --git a/htdocs/modulebuilder/template/class/myobject.class.php b/htdocs/modulebuilder/template/class/myobject.class.php index 266b8d1925f..1b4d1c7b52d 100644 --- a/htdocs/modulebuilder/template/class/myobject.class.php +++ b/htdocs/modulebuilder/template/class/myobject.class.php @@ -227,11 +227,11 @@ class MyObject extends CommonObject // Translate some data of arrayofkeyval foreach($this->fields as $key => $val) { - if (is_array($this->fields['status']['arrayofkeyval'])) + if (is_array($this->fields[$key]['arrayofkeyval'])) { - foreach($this->fields['status']['arrayofkeyval'] as $key2 => $val2) + foreach($this->fields[$key]['arrayofkeyval'] as $key2 => $val2) { - $this->fields['status']['arrayofkeyval'][$key2]=$langs->trans($val2); + $this->fields[$key]['arrayofkeyval'][$key2]=$langs->trans($val2); } } } From 2b0b7b0dab0603a99d9a379a0dcef814976a0ebe Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 20 Jun 2019 03:32:28 +0200 Subject: [PATCH 344/828] Update ccountry.class.php --- htdocs/core/class/ccountry.class.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/core/class/ccountry.class.php b/htdocs/core/class/ccountry.class.php index 5e744fbdb73..ef89fbcd9b6 100644 --- a/htdocs/core/class/ccountry.class.php +++ b/htdocs/core/class/ccountry.class.php @@ -66,7 +66,8 @@ class Ccountry // extends CommonObject public $active; public $fields=array( - 'label' => array('type'=>'varchar(250)', 'label'=>'Label', 'enabled'=>1, 'visible'=>1, 'position'=>15, 'notnull'=>-1, 'showoncombobox'=>'1',)); + 'label' => array('type'=>'varchar(250)', 'label'=>'Label', 'enabled'=>1, 'visible'=>1, 'position'=>15, 'notnull'=>-1, 'showoncombobox'=>'1') + ); /** From d8c2007d920200b0ac057c03b1eb0c522f3ea263 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 20 Jun 2019 03:53:33 +0200 Subject: [PATCH 345/828] Prepare v11 alpha --- htdocs/install/check.php | 3 +- .../install/mysql/migration/10.0.0-11.0.0.sql | 31 ++++++++++++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/htdocs/install/check.php b/htdocs/install/check.php index 55331634aff..6075ad14702 100644 --- a/htdocs/install/check.php +++ b/htdocs/install/check.php @@ -451,7 +451,8 @@ else array('from'=>'6.0.0', 'to'=>'7.0.0'), array('from'=>'7.0.0', 'to'=>'8.0.0'), array('from'=>'8.0.0', 'to'=>'9.0.0'), - array('from'=>'9.0.0', 'to'=>'10.0.0') + array('from'=>'9.0.0', 'to'=>'10.0.0'), + array('from'=>'10.0.0', 'to'=>'11.0.0') ); $count=0; diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index 9f758b6bc40..520007e453c 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -2,6 +2,30 @@ -- Be carefull to requests order. -- This file must be loaded by calling /install/index.php page -- when current version is 11.0.0 or higher. +-- +-- To restrict request to Mysql version x.y minimum use -- VMYSQLx.y +-- To restrict request to Pgsql version x.y minimum use -- VPGSQLx.y +-- To rename a table: ALTER TABLE llx_table RENAME TO llx_table_new; +-- To add a column: ALTER TABLE llx_table ADD COLUMN newcol varchar(60) NOT NULL DEFAULT '0' AFTER existingcol; +-- To rename a column: ALTER TABLE llx_table CHANGE COLUMN oldname newname varchar(60); +-- To drop a column: ALTER TABLE llx_table DROP COLUMN oldname; +-- To change type of field: ALTER TABLE llx_table MODIFY COLUMN name varchar(60); +-- To drop a foreign key: ALTER TABLE llx_table DROP FOREIGN KEY fk_name; +-- To create a unique index ALTER TABLE llx_table ADD UNIQUE INDEX uk_table_field (field); +-- To drop an index: -- VMYSQL4.1 DROP INDEX nomindex on llx_table +-- To drop an index: -- VPGSQL8.2 DROP INDEX nomindex +-- To make pk to be auto increment (mysql): -- VMYSQL4.3 ALTER TABLE llx_table CHANGE COLUMN rowid rowid INTEGER NOT NULL AUTO_INCREMENT; +-- To make pk to be auto increment (postgres): +-- -- VPGSQL8.2 CREATE SEQUENCE llx_table_rowid_seq OWNED BY llx_table.rowid; +-- -- VPGSQL8.2 ALTER TABLE llx_table ADD PRIMARY KEY (rowid); +-- -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN rowid SET DEFAULT nextval('llx_table_rowid_seq'); +-- -- VPGSQL8.2 SELECT setval('llx_table_rowid_seq', MAX(rowid)) FROM llx_table; +-- To set a field as NULL: -- VMYSQL4.3 ALTER TABLE llx_table MODIFY COLUMN name varchar(60) NULL; +-- To set a field as NULL: -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name DROP NOT NULL; +-- To set a field as NOT NULL: -- VMYSQL4.3 ALTER TABLE llx_table MODIFY COLUMN name varchar(60) NOT NULL; +-- To set a field as NOT NULL: -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name SET NOT NULL; +-- To set a field as default NULL: -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name SET DEFAULT NULL; +-- Note: fields with type BLOB/TEXT can't have default value. create table llx_entrepot_extrafields @@ -12,4 +36,9 @@ create table llx_entrepot_extrafields import_key varchar(14) -- import key ) ENGINE=innodb; -ALTER TABLE llx_entrepot_extrafields ADD INDEX idx_entrepot_extrafields (fk_object); \ No newline at end of file +ALTER TABLE llx_entrepot_extrafields ADD INDEX idx_entrepot_extrafields (fk_object); + + +ALTER TABLE llx_c_shipment_mode ADD COLUMN entity integer DEFAULT 1; +ALTER TABLE llx_c_shipment_mode DROP INDEX uk_c_shipment_mode; +ALTER TABLE llx_c_shipment_mode ADD UNIQUE INDEX uk_c_shipment_mode (code, entity); From 5f32b5e23e79664156f01c02500a97c30df6acd4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 20 Jun 2019 03:54:11 +0200 Subject: [PATCH 346/828] Prepare v11 alpha --- htdocs/filefunc.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/filefunc.inc.php b/htdocs/filefunc.inc.php index 6f1a773b7c1..d3aafe94f26 100644 --- a/htdocs/filefunc.inc.php +++ b/htdocs/filefunc.inc.php @@ -31,7 +31,7 @@ */ if (! defined('DOL_APPLICATION_TITLE')) define('DOL_APPLICATION_TITLE', 'Dolibarr'); -if (! defined('DOL_VERSION')) define('DOL_VERSION', '10.0.0'); // a.b.c-alpha, a.b.c-beta, a.b.c-rcX or a.b.c +if (! defined('DOL_VERSION')) define('DOL_VERSION', '11.0.0-alpha'); // a.b.c-alpha, a.b.c-beta, a.b.c-rcX or a.b.c if (! defined('EURO')) define('EURO', chr(128)); From 5fe91afdc29e0aed5e87a7456e4aef69c94f390b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 20 Jun 2019 03:54:50 +0200 Subject: [PATCH 347/828] Update 9.0.0-10.0.0.sql --- htdocs/install/mysql/migration/9.0.0-10.0.0.sql | 4 ---- 1 file changed, 4 deletions(-) diff --git a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql index 43e12c6c05f..e5b925b0d83 100644 --- a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql +++ b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql @@ -107,10 +107,6 @@ ALTER TABLE llx_prelevement_facture_demande ADD COLUMN sourcetype varchar(32); ALTER TABLE llx_prelevement_facture_demande ADD COLUMN ext_payment_id varchar(128) NULL; ALTER TABLE llx_prelevement_facture_demande ADD COLUMN ext_payment_site varchar(128) NULL; -ALTER TABLE llx_c_shipment_mode ADD COLUMN entity integer DEFAULT 1; -ALTER TABLE llx_c_shipment_mode DROP INDEX uk_c_shipment_mode; -ALTER TABLE llx_c_shipment_mode ADD UNIQUE INDEX uk_c_shipment_mode (code, entity); - -- Fix if table exists ALTER TABLE llx_c_units DROP INDEX uk_c_units_code; ALTER TABLE llx_c_units ADD COLUMN scale integer; From 77a45b878b94d2b6223effe83da164a29d37e89a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 20 Jun 2019 03:56:42 +0200 Subject: [PATCH 348/828] Fix migration --- htdocs/install/mysql/migration/10.0.0-11.0.0.sql | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index 520007e453c..5f0d04040de 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -39,6 +39,7 @@ create table llx_entrepot_extrafields ALTER TABLE llx_entrepot_extrafields ADD INDEX idx_entrepot_extrafields (fk_object); -ALTER TABLE llx_c_shipment_mode ADD COLUMN entity integer DEFAULT 1; +ALTER TABLE llx_c_shipment_mode ADD COLUMN entity integer DEFAULT 1 NOT NULL; + ALTER TABLE llx_c_shipment_mode DROP INDEX uk_c_shipment_mode; ALTER TABLE llx_c_shipment_mode ADD UNIQUE INDEX uk_c_shipment_mode (code, entity); From d15a300f02e0feec85e411e83a882de42cdec564 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 20 Jun 2019 04:10:58 +0200 Subject: [PATCH 349/828] Removed not used var --- htdocs/compta/facture/card.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index 10de9581dfe..44be21898f8 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -1295,7 +1295,6 @@ if (empty($reshook)) $TTotalByTva[$line->tva_tx] += $line->total_ttc ; } - $amount_to_diff = 0; foreach ($TTotalByTva as $tva => &$total) { $coef = $total / $srcobject->total_ttc; // Calc coef From e60020140d01d3a17b4ca467641c083c410854fa Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 20 Jun 2019 04:11:10 +0200 Subject: [PATCH 350/828] Update societe.class.php --- htdocs/societe/class/societe.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index 6419eb11420..44b38856b90 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -3455,7 +3455,7 @@ class Societe extends CommonObject } else // For backward compatibility { - dol_syslog("Your country setup use an old syntax. Reedit it using setup area.", LOG_ERR); + dol_syslog("Your country setup use an old syntax. Reedit it using setup area.", LOG_WARNING); include_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; $country_code=getCountry($country_id, 2, $this->db); // This need a SQL request, but it's the old feature that should not be used anymore $country_label=getCountry($country_id, 0, $this->db); // This need a SQL request, but it's the old feature that should not be used anymore From 7c29fb614c34119ed919b3eb5fa86ba53eb4665f Mon Sep 17 00:00:00 2001 From: John Botella Date: Thu, 20 Jun 2019 09:21:35 +0200 Subject: [PATCH 351/828] Fix replacement and vars names --- htdocs/core/actions_massactions.inc.php | 77 ++++++++++++++++++------- 1 file changed, 55 insertions(+), 22 deletions(-) diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php index 00ffe03c7ed..c40bd73eff5 100644 --- a/htdocs/core/actions_massactions.inc.php +++ b/htdocs/core/actions_massactions.inc.php @@ -93,7 +93,7 @@ if (! $error && $massaction == 'confirm_presend') } // Check mandatory parameters - if (empty($user->email)) + if (GETPOST('fromtype','alpha') === 'user' && empty($user->email)) { $error++; setEventMessages($langs->trans("NoSenderEmailDefined"), null, 'warnings'); @@ -208,7 +208,7 @@ if (! $error && $massaction == 'confirm_presend') $resaction.='
'.$langs->trans('ErrorOnlyProposalNotDraftCanBeSentInMassAction',$objectobj->ref).'

'; continue; // Payment done or started or canceled } - if ($objectclass == 'Commande' && $objectoj->statut == Commande::STATUS_DRAFT) + if ($objectclass == 'Commande' && $objectobj->statut == Commande::STATUS_DRAFT) { $langs->load("errors"); $nbignored++; @@ -333,12 +333,16 @@ if (! $error && $massaction == 'confirm_presend') if ($objectclass == 'CommandeFournisseur') $sendtobcc .= (empty($conf->global->MAIN_MAIL_AUTOCOPY_SUPPLIER_ORDER_TO) ? '' : (($sendtobcc?", ":"").$conf->global->MAIN_MAIL_AUTOCOPY_SUPPLIER_ORDER_TO)); if ($objectclass == 'FactureFournisseur') $sendtobcc .= (empty($conf->global->MAIN_MAIL_AUTOCOPY_SUPPLIER_INVOICE_TO) ? '' : (($sendtobcc?", ":"").$conf->global->MAIN_MAIL_AUTOCOPY_SUPPLIER_INVOICE_TO)); - // $listofqualifiedobj is array with key = object id of qualified objects for the current thirdparty + // $listofqualifiedobj is array with key = object id and value is instance of qualified objects, for the current thirdparty (but thirdparty property is not loaded yet) $oneemailperrecipient=(GETPOST('oneemailperrecipient')=='on'?1:0); $looparray=array(); if (! $oneemailperrecipient) { $looparray = $listofqualifiedobj; + foreach ($looparray as $key => $objecttmp) + { + $looparray[$key]->thirdparty = $thirdparty; + } } else { @@ -347,8 +351,9 @@ if (! $error && $massaction == 'confirm_presend') $looparray[0]=$objectforloop; } //var_dump($looparray);exit; - - foreach ($looparray as $objecttmp) // $objecttmp is a real object or an empty if we choose to send one email per thirdparty instead of per record + dol_syslog("We have set an array of ".count($looparray)." emails to send. oneemailperrecipient=".$oneemailperrecipient); + //var_dump($oneemailperrecipient); var_dump($listofqualifiedobj); var_dump($listofqualifiedref); + foreach ($looparray as $objectid => $objecttmp) // $objecttmp is a real object or an empty object if we choose to send one email per thirdparty instead of one per object { // Make substitution in email content $substitutionarray=getCommonSubstitutionArray($langs, 0, null, $objecttmp); @@ -358,10 +363,18 @@ if (! $error && $massaction == 'confirm_presend') $substitutionarray['__CHECK_READ__'] = ''; $parameters=array('mode'=>'formemail'); + + if ( ! empty( $listofobjectthirdparties ) ) { + $parameters['listofobjectthirdparties'] = $listofobjectthirdparties; + } + if ( ! empty( $listofobjectref ) ) { + $parameters['listofobjectref'] = $listofobjectref; + } + complete_substitutions_array($substitutionarray, $langs, $objecttmp, $parameters); - $subject=make_substitutions($subject, $substitutionarray); - $message=make_substitutions($message, $substitutionarray); + $subjectreplaced=make_substitutions($subject, $substitutionarray); + $messagereplaced=make_substitutions($message, $substitutionarray); $filepath = $attachedfiles['paths']; $filename = $attachedfiles['names']; @@ -370,8 +383,8 @@ if (! $error && $massaction == 'confirm_presend') //var_dump($filepath); // Send mail (substitutionarray must be done just before this) - require_once(DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php'); - $mailfile = new CMailFile($subject,$sendto,$from,$message,$filepath,$mimetype,$filename,$sendtocc,$sendtobcc,$deliveryreceipt,-1); + require_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php'; + $mailfile = new CMailFile($subjectreplaced, $sendto, $from, $messagereplaced, $filepath, $mimetype, $filename, $sendtocc, $sendtobcc, $deliveryreceipt, -1); if ($mailfile->error) { $resaction.='
'.$mailfile->error.'
'; @@ -386,8 +399,12 @@ if (! $error && $massaction == 'confirm_presend') $error=0; // Insert logs into agenda - foreach($listofqualifiedobj as $objid => $objectobj) + foreach($listofqualifiedobj as $objid2 => $objectobj2) { + if ((! $oneemailperrecipient) && $objid2 != $objectid) continue; // We discard this pass to avoid duplicate with other pass in looparray at higher level + + dol_syslog("Try to insert email event into agenda for objid=".$objid2." => objectobj=".get_class($objectobj2)); + /*if ($objectclass == 'Propale') $actiontypecode='AC_PROP'; if ($objectclass == 'Commande') $actiontypecode='AC_COM'; if ($objectclass == 'Facture') $actiontypecode='AC_FAC'; @@ -399,18 +416,18 @@ if (! $error && $massaction == 'confirm_presend') if ($message) { if ($sendtocc) $actionmsg = dol_concatdesc($actionmsg, $langs->transnoentities('Bcc') . ": " . $sendtocc); - $actionmsg = dol_concatdesc($actionmsg, $langs->transnoentities('MailTopic') . ": " . $subject); + $actionmsg = dol_concatdesc($actionmsg, $langs->transnoentities('MailTopic') . ": " . $subjectreplaced); $actionmsg = dol_concatdesc($actionmsg, $langs->transnoentities('TextUsedInTheMessageBody') . ":"); - $actionmsg = dol_concatdesc($actionmsg, $message); + $actionmsg = dol_concatdesc($actionmsg, $messagereplaced); } $actionmsg2=''; // Initialisation donnees - $objectobj->sendtoid = 0; - $objectobj->actionmsg = $actionmsg; // Long text - $objectobj->actionmsg2 = $actionmsg2; // Short text - $objectobj->fk_element = $objid; - $objectobj->elementtype = $objectobj->element; + $objectobj2->sendtoid = 0; + $objectobj2->actionmsg = $actionmsg; // Long text + $objectobj2->actionmsg2 = $actionmsg2; // Short text + $objectobj2->fk_element = $objid2; + $objectobj2->elementtype = $objectobj2->element; $triggername = strtoupper(get_class($objectobj)) .'_SENTBYMAIL'; if ($triggername == 'SOCIETE_SENTBYMAIL') $triggername = 'COMPANY_SENTBYEMAIL'; @@ -425,9 +442,9 @@ if (! $error && $massaction == 'confirm_presend') if (! empty($triggername)) { // Appel des triggers - include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php"); + include_once DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php"; $interface=new Interfaces($db); - $result=$interface->run_triggers($triggername, $objectobj, $user, $langs, $conf); + $result=$interface->run_triggers($triggername, $objectobj2, $user, $langs, $conf); if ($result < 0) { $error++; $errors=$interface->errors; } // Fin appel triggers @@ -437,9 +454,9 @@ if (! $error && $massaction == 'confirm_presend') dol_syslog("Error in trigger ".$triggername.' '.$db->lasterror(), LOG_ERR); } } - - $nbsent++; } + + $nbsent++; // Nb of email sent (may be lower than number of record selected if we group thirdparties) } else { @@ -504,6 +521,8 @@ if ($massaction == 'confirm_createbills') $objecttmp = new Facture($db); if (!empty($createbills_onebythird) && !empty($TFactThird[$cmd->socid])) $objecttmp = $TFactThird[$cmd->socid]; // If option "one bill per third" is set, we use already created order. else { + // Load extrafields of order + $cmd->fetch_optionals(); $objecttmp->socid = $cmd->socid; $objecttmp->type = Facture::TYPE_STANDARD; @@ -521,6 +540,8 @@ if ($massaction == 'confirm_createbills') $objecttmp->origin = 'commande'; $objecttmp->origin_id = $id_order; + $objecttmp->array_options = $cmd->array_options; // Copy extrafields + $res = $objecttmp->create($user); if($res > 0) $nb_bills_created++; @@ -560,6 +581,12 @@ if ($massaction == 'confirm_createbills') for ($i=0;$i<$num;$i++) { $desc=($lines[$i]->desc?$lines[$i]->desc:$lines[$i]->libelle); + // If we build one invoice for several order, we must put the invoice of order on the line + if (! empty($createbills_onebythird)) + { + $desc=dol_concatdesc($desc, $langs->trans("Order").' '.$cmd->ref.' - '.dol_print_date($cmd->date, 'day', $langs)); + } + if ($lines[$i]->subprice < 0) { // Negative line, we create a discount line @@ -670,6 +697,7 @@ if ($massaction == 'confirm_createbills') if (! $error && $validate_invoices) { $massaction = $action = 'builddoc'; + foreach($TAllFact as &$objecttmp) { $result = $objecttmp->validate($user); @@ -687,7 +715,12 @@ if ($massaction == 'confirm_createbills') $donotredirect = 1; $upload_dir = $conf->facture->dir_output; $permissioncreate=$user->rights->facture->creer; + + // Call action to build doc + $savobject = $object; + $object = $objecttmp; include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php'; + $object = $savobject; } $massaction = $action = 'confirm_createbills'; @@ -696,7 +729,7 @@ if ($massaction == 'confirm_createbills') if (! $error) { $db->commit(); - setEventMessage($langs->trans('BillCreated', $nb_bills_created)); + setEventMessages($langs->trans('BillCreated', $nb_bills_created), null, 'mesgs'); // Make a redirect to avoid to bill twice if we make a refresh or back $param=''; From 252bd6d9ba7122447790e6d48c83e4dd64474762 Mon Sep 17 00:00:00 2001 From: John Botella Date: Thu, 20 Jun 2019 09:48:08 +0200 Subject: [PATCH 352/828] FIX condition --- htdocs/core/tpl/massactions_pre.tpl.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/htdocs/core/tpl/massactions_pre.tpl.php b/htdocs/core/tpl/massactions_pre.tpl.php index 48989b2daec..0a273072e29 100644 --- a/htdocs/core/tpl/massactions_pre.tpl.php +++ b/htdocs/core/tpl/massactions_pre.tpl.php @@ -36,11 +36,12 @@ if ($massaction == 'presend') { $langs->load("mails"); + $listofselectedid = array(); + $listofselectedthirdparties = array(); + $listofselectedref = array(); + if (! GETPOST('cancel', 'alpha')) { - $listofselectedid = array(); - $listofselectedthirdparties = array(); - $listofselectedref = array(); foreach ($arrayofselected as $toselectid) { $result = $objecttmp->fetch($toselectid); @@ -106,7 +107,7 @@ if ($massaction == 'presend') $formmail->withtoreadonly = 1; } - $formmail->withoptiononeemailperrecipient = empty($liste)?0:((GETPOST('oneemailperrecipient')=='on')?1:-1); + $formmail->withoptiononeemailperrecipient = (count($listofselectedref) == 1 || empty($liste))? 0 : ((GETPOST('oneemailperrecipient')=='on')?1:-1); $formmail->withto = empty($liste)?(GETPOST('sendto','alpha')?GETPOST('sendto','alpha'):array()):$liste; $formmail->withtofree = empty($liste)?1:0; $formmail->withtocc = 1; From 9305403bea79f07eef481067718110e03172dab5 Mon Sep 17 00:00:00 2001 From: John Botella Date: Thu, 20 Jun 2019 10:32:32 +0200 Subject: [PATCH 353/828] Fix duplicate pdf in mass sendmail --- htdocs/core/actions_massactions.inc.php | 40 ++++++++++++++++++++----- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php index c40bd73eff5..1d3d4b2adea 100644 --- a/htdocs/core/actions_massactions.inc.php +++ b/htdocs/core/actions_massactions.inc.php @@ -69,6 +69,8 @@ if (! $error && $massaction == 'confirm_presend') $listofobjectid=array(); $listofobjectthirdparties=array(); $listofobjectref=array(); + $attachedfilesThirdpartyObj=array(); + $oneemailperrecipient=(GETPOST('oneemailperrecipient')=='on'?1:0); if (! $error) { @@ -193,7 +195,6 @@ if (! $error && $massaction == 'confirm_presend') $sendtocc=implode(',',$tmparray); //var_dump($listofobjectref);exit; - $attachedfiles=array('paths'=>array(), 'names'=>array(), 'mimes'=>array()); $listofqualifiedobj=array(); $listofqualifiedref=array(); $thirdpartywithoutemail=array(); @@ -263,12 +264,12 @@ if (! $error && $massaction == 'confirm_presend') if (dol_is_file($file)) { - // Create form object - $attachedfiles=array( - 'paths'=>array_merge($attachedfiles['paths'],array($file)), - 'names'=>array_merge($attachedfiles['names'],array($filename)), - 'mimes'=>array_merge($attachedfiles['mimes'],array($mime)) - ); + // Create form object + $attachedfilesThirdpartyObj[$thirdpartyid][$objectid]=array( + 'paths'=>array($file), + 'names'=>array($filename), + 'mimes'=>array($mime) + ); } else { @@ -334,7 +335,7 @@ if (! $error && $massaction == 'confirm_presend') if ($objectclass == 'FactureFournisseur') $sendtobcc .= (empty($conf->global->MAIN_MAIL_AUTOCOPY_SUPPLIER_INVOICE_TO) ? '' : (($sendtobcc?", ":"").$conf->global->MAIN_MAIL_AUTOCOPY_SUPPLIER_INVOICE_TO)); // $listofqualifiedobj is array with key = object id and value is instance of qualified objects, for the current thirdparty (but thirdparty property is not loaded yet) - $oneemailperrecipient=(GETPOST('oneemailperrecipient')=='on'?1:0); + $looparray=array(); if (! $oneemailperrecipient) { @@ -376,10 +377,33 @@ if (! $error && $massaction == 'confirm_presend') $subjectreplaced=make_substitutions($subject, $substitutionarray); $messagereplaced=make_substitutions($message, $substitutionarray); + $attachedfiles=array('paths'=>array(), 'names'=>array(), 'mimes'=>array()); + if($oneemailperrecipient) + { + if(is_array($attachedfilesThirdpartyObj[$thirdparty->id]) && count($attachedfilesThirdpartyObj[$thirdparty->id])) + { + foreach ($attachedfilesThirdpartyObj[$thirdparty->id] as $keyObjId => $objAttachedFiles){ + // Create form object + $attachedfiles=array( + 'paths'=>array_merge($attachedfiles['paths'], $objAttachedFiles['paths']), + 'names'=>array_merge($attachedfiles['names'], $objAttachedFiles['names']), + 'mimes'=>array_merge($attachedfiles['mimes'], $objAttachedFiles['mimes']) + ); + } + } + } + elseif(!empty($attachedfilesThirdpartyObj[$thirdparty->id][$objectid])){ + // Create form object + $attachedfiles=$attachedfilesThirdpartyObj[$thirdparty->id][$objectid]; + } + $filepath = $attachedfiles['paths']; $filename = $attachedfiles['names']; $mimetype = $attachedfiles['mimes']; + + + //var_dump($filepath); // Send mail (substitutionarray must be done just before this) From 6a68c8cd996318c4d5997de97035157bddfbd87e Mon Sep 17 00:00:00 2001 From: John Botella Date: Thu, 20 Jun 2019 11:09:37 +0200 Subject: [PATCH 354/828] Fix display option email per participient --- htdocs/core/actions_massactions.inc.php | 3 +++ htdocs/core/tpl/massactions_pre.tpl.php | 4 +++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php index 1d3d4b2adea..300c06216f7 100644 --- a/htdocs/core/actions_massactions.inc.php +++ b/htdocs/core/actions_massactions.inc.php @@ -377,9 +377,11 @@ if (! $error && $massaction == 'confirm_presend') $subjectreplaced=make_substitutions($subject, $substitutionarray); $messagereplaced=make_substitutions($message, $substitutionarray); + $attachedfiles=array('paths'=>array(), 'names'=>array(), 'mimes'=>array()); if($oneemailperrecipient) { + // if "one email per recipient" isn't check we must collate $attachedfiles by thirdparty if(is_array($attachedfilesThirdpartyObj[$thirdparty->id]) && count($attachedfilesThirdpartyObj[$thirdparty->id])) { foreach ($attachedfilesThirdpartyObj[$thirdparty->id] as $keyObjId => $objAttachedFiles){ @@ -394,6 +396,7 @@ if (! $error && $massaction == 'confirm_presend') } elseif(!empty($attachedfilesThirdpartyObj[$thirdparty->id][$objectid])){ // Create form object + // if "one email per recipient" isn't check we must separate $attachedfiles by object $attachedfiles=$attachedfilesThirdpartyObj[$thirdparty->id][$objectid]; } diff --git a/htdocs/core/tpl/massactions_pre.tpl.php b/htdocs/core/tpl/massactions_pre.tpl.php index 0a273072e29..e525bd739a3 100644 --- a/htdocs/core/tpl/massactions_pre.tpl.php +++ b/htdocs/core/tpl/massactions_pre.tpl.php @@ -107,7 +107,8 @@ if ($massaction == 'presend') $formmail->withtoreadonly = 1; } - $formmail->withoptiononeemailperrecipient = (count($listofselectedref) == 1 || empty($liste))? 0 : ((GETPOST('oneemailperrecipient')=='on')?1:-1); + $formmail->withoptiononeemailperrecipient = ((count($listofselectedref) == 1 && count(reset($listofselectedref)) == 1) || empty($liste)) ? 0 : ((GETPOST('oneemailperrecipient')=='on')?1:-1); + $formmail->withto = empty($liste)?(GETPOST('sendto','alpha')?GETPOST('sendto','alpha'):array()):$liste; $formmail->withtofree = empty($liste)?1:0; $formmail->withtocc = 1; @@ -126,6 +127,7 @@ if ($massaction == 'presend') // Make substitution in email content $substitutionarray = getCommonSubstitutionArray($langs, 0, null, $object); + $substitutionarray['__EMAIL__'] = $sendto; $substitutionarray['__CHECK_READ__'] = (is_object($object) && is_object($object->thirdparty)) ? '' : ''; $substitutionarray['__PERSONALIZED__'] = ''; // deprecated From b21006614c874e9a59c7f25d2a711a0795474a11 Mon Sep 17 00:00:00 2001 From: John Botella Date: Thu, 20 Jun 2019 12:00:44 +0200 Subject: [PATCH 355/828] Fix substitutions null --- htdocs/core/class/html.formmail.class.php | 1 - htdocs/core/lib/functions.lib.php | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/core/class/html.formmail.class.php b/htdocs/core/class/html.formmail.class.php index 9b9bb32865e..38987b36185 100644 --- a/htdocs/core/class/html.formmail.class.php +++ b/htdocs/core/class/html.formmail.class.php @@ -908,7 +908,6 @@ class FormMail extends Form $defaultmessage=preg_replace("/^(
)+/","",$defaultmessage); $defaultmessage=preg_replace("/^\n+/","",$defaultmessage); } - $out.= ''; $out.= ''.$langs->trans("MailText").''; $out.= ''; diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 7a70608f303..05024437a63 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -5733,6 +5733,8 @@ function make_substitutions($text, $substitutionarray, $outputlangs=null) // Make substitition for array $substitutionarray foreach ($substitutionarray as $key => $value) { + if (! isset($value)) continue; // If value is null, it same than not having substitution key at all into array, we do not replace. + if ($key == '__SIGNATURE__' && (! empty($conf->global->MAIN_MAIL_DO_NOT_USE_SIGN))) $value=''; // Protection if ($key == '__USER_SIGNATURE__' && (! empty($conf->global->MAIN_MAIL_DO_NOT_USE_SIGN))) $value=''; // Protection From 0865bdb60f77460b969b730f9bd175bfd90a660b Mon Sep 17 00:00:00 2001 From: florian HENRY Date: Thu, 20 Jun 2019 12:16:48 +0200 Subject: [PATCH 356/828] fix depending extrafeilds list --- htdocs/core/class/commonobject.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 78729519775..006c80428f7 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -6446,7 +6446,7 @@ abstract class CommonObject jQuery(document).ready(function() { function showOptions(child_list, parent_list) { - var val = $("select[name=\"options_"+parent_list+"\"]").val(); + var val = $("select[name=\""+parent_list+"\"]").val(); var parentVal = parent_list + ":" + val; if(val > 0) { $("select[name=\""+child_list+"\"] option[parent]").hide(); From 1a6dc83d4c886cb69c5c845dd6339fc9f71e3522 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 20 Jun 2019 12:25:58 +0200 Subject: [PATCH 357/828] Fix: default accounting account for eec and export sales were not used. --- htdocs/accountancy/customer/list.php | 66 +++++++++++++------ htdocs/accountancy/supplier/list.php | 44 ++++++++----- .../fourn/class/fournisseur.product.class.php | 6 +- htdocs/langs/en_US/accountancy.lang | 3 + htdocs/product/class/product.class.php | 14 ++-- 5 files changed, 90 insertions(+), 43 deletions(-) diff --git a/htdocs/accountancy/customer/list.php b/htdocs/accountancy/customer/list.php index 5314099db1f..192585ccedd 100644 --- a/htdocs/accountancy/customer/list.php +++ b/htdocs/accountancy/customer/list.php @@ -92,9 +92,6 @@ if (! $user->rights->accounting->bind->write) $hookmanager->initHooks(array('accountancycustomerlist')); $formaccounting = new FormAccounting($db); -$accounting = new AccountingAccount($db); -$aarowid_s = $accounting->fetch('', $conf->global->ACCOUNTING_SERVICE_SOLD_ACCOUNT, 1); -$aarowid_p = $accounting->fetch('', $conf->global->ACCOUNTING_PRODUCT_SOLD_ACCOUNT, 1); $chartaccountcode = dol_getIdFromCode($db, $conf->global->CHARTOFACCOUNTS, 'accounting_system', 'rowid', 'pcg_version'); @@ -384,11 +381,11 @@ if ($result) { print ''; print ''; //print ''; - print ''; + print ''; print ''; print ''; print ''; - print $form->select_country($search_country, 'search_country', '', 0, 'maxwidth200', 'code2', 1, 0, 1); + print $form->select_country($search_country, 'search_country', '', 0, 'maxwidth150', 'code2', 1, 0, 1); //print ''; print ''; print ''; @@ -444,29 +441,50 @@ if ($result) { $isBuyerInEEC = isInEEC($objp); + $suggestedaccountingaccountbydefaultfor = ''; if ($objp->type_l == 1) { - $objp->code_sell_l = (! empty($conf->global->ACCOUNTING_SERVICE_SOLD_ACCOUNT) ? $conf->global->ACCOUNTING_SERVICE_SOLD_ACCOUNT : ''); - if ($objp->aarowid == '') { - $objp->aarowid_suggest = $aarowid_s; - } + if ($objp->country_code == $mysoc->country_code || empty($objp->country_code)) { // If buyer in same country than seller (if not defined, we assume it is same country) + $objp->code_sell_l = (! empty($conf->global->ACCOUNTING_SERVICE_SOLD_ACCOUNT) ? $conf->global->ACCOUNTING_SERVICE_SOLD_ACCOUNT : ''); + $suggestedaccountingaccountbydefaultfor = ''; + } else { + if ($isSellerInEEC && $isBuyerInEEC) { // European intravat sale + $objp->code_sell_l = (! empty($conf->global->ACCOUNTING_SERVICE_SOLD_INTRA_ACCOUNT) ? $conf->global->ACCOUNTING_SERVICE_SOLD_INTRA_ACCOUNT : ''); + $suggestedaccountingaccountbydefaultfor = 'eec'; + } else { // Foreign sale + $objp->code_sell_l = (! empty($conf->global->ACCOUNTING_SERVICE_SOLD_EXPORT_ACCOUNT) ? $conf->global->ACCOUNTING_SERVICE_SOLD_EXPORT_ACCOUNT : ''); + $suggestedaccountingaccountbydefaultfor = 'export'; + } + } } elseif ($objp->type_l == 0) { - $objp->code_sell_l = (! empty($conf->global->ACCOUNTING_PRODUCT_SOLD_ACCOUNT) ? $conf->global->ACCOUNTING_PRODUCT_SOLD_ACCOUNT : ''); - if ($objp->aarowid == '') { - $objp->aarowid_suggest = $aarowid_p; + if ($objp->country_code == $mysoc->country_code || empty($objp->country_code)) { // If buyer in same country than seller (if not defined, we assume it is same country) + $objp->code_sell_l = (! empty($conf->global->ACCOUNTING_PRODUCT_SOLD_ACCOUNT) ? $conf->global->ACCOUNTING_PRODUCT_SOLD_ACCOUNT : ''); + $suggestedaccountingaccountbydefaultfor = ''; + } else { + if ($isSellerInEEC && $isBuyerInEEC) { // European intravat sale + $objp->code_sell_l = (! empty($conf->global->ACCOUNTING_PRODUCT_SOLD_INTRA_ACCOUNT) ? $conf->global->ACCOUNTING_PRODUCT_SOLD_INTRA_ACCOUNT : ''); + $suggestedaccountingaccountbydefaultfor = 'eec'; + } else { + $objp->code_sell_l = (! empty($conf->global->ACCOUNTING_PRODUCT_SOLD_EXPORT_ACCOUNT) ? $conf->global->ACCOUNTING_PRODUCT_SOLD_EXPORT_ACCOUNT : ''); + $suggestedaccountingaccountbydefaultfor = 'export'; + } } } if ($objp->code_sell_l == -1) $objp->code_sell_l=''; + $suggestedaccountingaccountfor = ''; if ($objp->country_code == $mysoc->country_code || empty($objp->country_code)) { // If buyer in same country than seller (if not defined, we assume it is same country) $objp->code_sell_p = $objp->code_sell; $objp->aarowid_suggest = $objp->aarowid; + $suggestedaccountingaccountfor = ''; } else { if ($isSellerInEEC && $isBuyerInEEC) { // European intravat sale $objp->code_sell_p = $objp->code_sell_intra; $objp->aarowid_suggest = $objp->aarowid_intra; + $suggestedaccountingaccountfor = 'eec'; } else { // Foreign sale $objp->code_sell_p = $objp->code_sell_export; $objp->aarowid_suggest = $objp->aarowid_export; + $suggestedaccountingaccountfor = 'export'; } } @@ -477,8 +495,8 @@ if ($result) { } if (empty($objp->code_sell_l) && empty($objp->code_sell_p)) $code_sell_p_notset = 'color:red'; - // $objp->code_sell_p is now code of product/service // $objp->code_sell_l is now default code of product/service + // $objp->code_sell_p is now code of product/service print ''; @@ -492,7 +510,7 @@ if ($result) { // Ref Product print ''; - if ($product_static->id) + if ($product_static->id > 0) print $product_static->getNomUrl(1); if ($objp->product_label) print '
'.$objp->product_label; print ''; @@ -514,7 +532,7 @@ if ($result) { print vatrate($objp->tva_tx_line.($objp->vat_src_code?' ('.$objp->vat_src_code.')':'')); print ''; - print ''; + print ''; $labelcountry=($objp->country_code && ($langs->trans("Country".$objp->country_code)!="Country".$objp->country_code))?$langs->trans("Country".$objp->country_code):$objp->country_label; print $labelcountry; print ''; @@ -523,17 +541,27 @@ if ($result) { // Current account print ''; - print (($objp->type_l == 1)?$langs->trans("DefaultForService"):$langs->trans("DefaultForProduct")) . ' = ' . ($objp->code_sell_l > 0 ? length_accountg($objp->code_sell_l) : $langs->trans("Unknown")); - if ($objp->product_id > 0) + $s = (($objp->type_l == 1)?$langs->trans("DefaultForService"):$langs->trans("DefaultForProduct")).': '; + $shelp = ''; + if ($suggestedaccountingaccountbydefaultfor == 'eec') $shelp.= $langs->trans("SaleEEC"); + elseif ($suggestedaccountingaccountbydefaultfor == 'export') $shelp.= $langs->trans("SaleExport"); + $s.= ($objp->code_sell_l > 0 ? length_accountg($objp->code_sell_l) : $langs->trans("NotDefined")); + print $form->textwithpicto($s, $shelp, 1, 'help', '', 0, 2, '', 1); + if ($objp->product_id > 0) { print '
'; - print (($objp->type_l == 1)?$langs->trans("ThisService"):$langs->trans("ThisProduct")) . ' = ' . (empty($objp->code_sell_p) ? $langs->trans("Unknown") : length_accountg($objp->code_sell_p)); + $s = (($objp->type_l == 1)?$langs->trans("ThisService"):$langs->trans("ThisProduct")).': '; + $shelp = ''; + if ($suggestedaccountingaccountfor == 'eec') $shelp = $langs->trans("SaleEEC"); + elseif ($suggestedaccountingaccountfor == 'export') $shelp = $langs->trans("SaleExport"); + $s.= (empty($objp->code_sell_p) ? $langs->trans("NotDefined") : length_accountg($objp->code_sell_p)); + print $form->textwithpicto($s, $shelp, 1, 'help', '', 0, 2, '', 1); } print ''; // Suggested accounting account print ''; - print $formaccounting->select_account($objp->aarowid_suggest, 'codeventil'.$objp->rowid, 1, array(), 0, 0, 'codeventil maxwidth300 maxwidthonsmartphone', 'cachewithshowemptyone'); + print $formaccounting->select_account($objp->aarowid_suggest, 'codeventil'.$objp->rowid, 1, array(), 0, 0, 'codeventil maxwidth200 maxwidthonsmartphone', 'cachewithshowemptyone'); print ''; // Column with checkbox diff --git a/htdocs/accountancy/supplier/list.php b/htdocs/accountancy/supplier/list.php index 17284513650..b3a426bbf5e 100644 --- a/htdocs/accountancy/supplier/list.php +++ b/htdocs/accountancy/supplier/list.php @@ -332,8 +332,8 @@ if ($result) { if ($search_desc) $param.='&search_desc='.urlencode($search_desc); if ($search_amount) $param.='&search_amount='.urlencode($search_amount); if ($search_vat) $param.='&search_vat='.urlencode($search_vat); - if ($search_country) $param .= "&search_country=" . urlencode($search_country); - if ($search_tvaintra) $param .= "&search_tvaintra=" . urlencode($search_tvaintra); + if ($search_country) $param.="&search_country=".urlencode($search_country); + if ($search_tvaintra) $param.="&search_tvaintra=".urlencode($search_tvaintra); $arrayofmassactions = array( 'ventil'=>$langs->trans("Ventilate") @@ -382,11 +382,11 @@ if ($result) { print ''; print ''; //print ''; - print ''; + print ''; print ''; print ''; print ''; - print $form->select_country($search_country, 'search_country', '', 0, 'maxwidth200', 'code2', 1, 0, 1); + print $form->select_country($search_country, 'search_country', '', 0, 'maxwidth150', 'code2', 1, 0, 1); //print ''; print ''; print ''; @@ -418,7 +418,7 @@ if ($result) { print "\n"; $facturefourn_static = new FactureFournisseur($db); - $productfourn_static = new ProductFournisseur($db); + $product_static = new Product($db); while ($i < min($num_lines, $limit)) { $objp = $db->fetch_object($result); @@ -430,10 +430,10 @@ if ($result) { $objp->code_buy_p = ''; $objp->aarowid_suggest = ''; - $productfourn_static->ref = $objp->product_ref; - $productfourn_static->id = $objp->product_id; - $productfourn_static->type = $objp->type; - $productfourn_static->label = $objp->product_label; + $product_static->ref = $objp->product_ref; + $product_static->id = $objp->product_id; + $product_static->type = $objp->type; + $product_static->label = $objp->product_label; $facturefourn_static->ref = $objp->ref; $facturefourn_static->id = $objp->facid; @@ -479,8 +479,8 @@ if ($result) { // Ref product print ''; - if ($productfourn_static->id) - print $productfourn_static->getNomUrl(1); + if ($product_static->id > 0) + print $product_static->getNomUrl(1); if ($objp->product_label) print '
'.$objp->product_label; print ''; @@ -502,26 +502,38 @@ if ($result) { print vatrate($objp->tva_tx_line.($objp->vat_src_code?' ('.$objp->vat_src_code.')':'')); print ''; - print ''; + // Country + print ''; $labelcountry=($objp->country_code && ($langs->trans("Country".$objp->country_code)!="Country".$objp->country_code))?$langs->trans("Country".$objp->country_code):$objp->country_label; print $labelcountry; print ''; + // VAT Num print '' . $objp->tva_intra . ''; // Current account print ''; - print (($objp->type_l == 1)?$langs->trans("DefaultForService"):$langs->trans("DefaultForProduct")) . ' = ' . ($objp->code_buy_l > 0 ? length_accountg($objp->code_buy_l) : $langs->trans("Unknown")); + $s = (($objp->type_l == 1)?$langs->trans("DefaultForService"):$langs->trans("DefaultForProduct")).': '; + $shelp = ''; + if ($suggestedaccountingaccountbydefaultfor == 'eec') $shelp.= $langs->trans("SaleEEC"); + elseif ($suggestedaccountingaccountbydefaultfor == 'export') $shelp.= $langs->trans("SaleExport"); + $s.= ($objp->code_buy_l > 0 ? length_accountg($objp->code_buy_l) : $langs->trans("NotDefined")); + print $form->textwithpicto($s, $shelp, 1, 'help', '', 0, 2, '', 1); if ($objp->product_id > 0) { - print '
'; - print (($objp->type_l == 1)?$langs->trans("ThisService"):$langs->trans("ThisProduct")) . ' = ' . (empty($objp->code_buy_p) ? $langs->trans("Unknown") : length_accountg($objp->code_buy_p)); + print '
'; + $s = (($objp->type_l == 1)?$langs->trans("ThisService"):$langs->trans("ThisProduct")).': '; + $shelp = ''; + if ($suggestedaccountingaccountfor == 'eec') $shelp = $langs->trans("SaleEEC"); + elseif ($suggestedaccountingaccountfor == 'export') $shelp = $langs->trans("SaleExport"); + $s.= (empty($objp->code_buy_p) ? $langs->trans("NotDefined") : length_accountg($objp->code_buy_p)); + print $form->textwithpicto($s, $shelp, 1, 'help', '', 0, 2, '', 1); } print ''; // Suggested accounting account print ''; - print $formaccounting->select_account($objp->aarowid_suggest, 'codeventil'.$objp->rowid, 1, array(), 0, 0, 'codeventil maxwidth300 maxwidthonsmartphone', 'cachewithshowemptyone'); + print $formaccounting->select_account($objp->aarowid_suggest, 'codeventil'.$objp->rowid, 1, array(), 0, 0, 'codeventil maxwidth200 maxwidthonsmartphone', 'cachewithshowemptyone'); print ''; // Column with checkbox diff --git a/htdocs/fourn/class/fournisseur.product.class.php b/htdocs/fourn/class/fournisseur.product.class.php index f2384b13cf2..fc74890f150 100644 --- a/htdocs/fourn/class/fournisseur.product.class.php +++ b/htdocs/fourn/class/fournisseur.product.class.php @@ -1009,7 +1009,8 @@ class ProductFournisseur extends Product /** - * Return a link to the object card (with optionaly the picto) + * Return a link to the object card (with optionaly the picto). + * Used getNomUrl of ProductFournisseur if a specific supplier ref is loaded. Otherwise use Product->getNomUrl(). * * @param int $withpicto Include picto in link (0=No picto, 1=Include picto into link, 2=Only picto) * @param string $option On what the link point to ('nolink', ...) @@ -1025,11 +1026,10 @@ class ProductFournisseur extends Product if (! empty($conf->dol_no_mouse_hover)) $notooltip=1; // Force disable tooltips $result = ''; - $companylink = ''; $label = '' . $langs->trans("SupplierRef") . ''; $label.= '
'; - $label.= '' . $langs->trans('Ref') . ': ' . $this->fourn_ref; + $label.= '' . $langs->trans('Ref') . ': ' . $this->ref_supplier; $logPrices = $this->listProductFournisseurPriceLog($this->product_fourn_price_id, 'pfpl.datec', 'DESC'); // set sort order here if (is_array($logPrices) && count($logPrices) > 0) { diff --git a/htdocs/langs/en_US/accountancy.lang b/htdocs/langs/en_US/accountancy.lang index 7797fdef7b1..3a08e422600 100644 --- a/htdocs/langs/en_US/accountancy.lang +++ b/htdocs/langs/en_US/accountancy.lang @@ -316,6 +316,9 @@ WithoutValidAccount=Without valid dedicated account WithValidAccount=With valid dedicated account ValueNotIntoChartOfAccount=This value of accounting account does not exist into chart of account AccountRemovedFromGroup=Account removed from group +SaleLocal=Local sale +SaleExport=Export sale +SaleEEC=Sale in EEC ## Dictionary Range=Range of accounting account diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index de0d28cee83..a5491045c16 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -4059,16 +4059,18 @@ class Product extends CommonObject } } - $linkstart = ''; $linkend=''; $result.=$linkstart; if ($withpicto) { - if ($this->type == Product::TYPE_PRODUCT) { $result.=(img_object(($notooltip?'':$label), 'product', ($notooltip?'class="paddingright"':'class="paddingright classfortooltip"'), 0, 0, $notooltip?0:1)); + if ($this->type == Product::TYPE_PRODUCT) { + $result.=(img_object(($notooltip?'':$label), 'product', ($notooltip?'class="paddingright"':'class="paddingright classfortooltip"'), 0, 0, $notooltip?0:1)); } - if ($this->type == Product::TYPE_SERVICE) { $result.=(img_object(($notooltip?'':$label), 'service', ($notooltip?'class="paddinright"':'class="paddingright classfortooltip"'), 0, 0, $notooltip?0:1)); + if ($this->type == Product::TYPE_SERVICE) { + $result.=(img_object(($notooltip?'':$label), 'service', ($notooltip?'class="paddinright"':'class="paddingright classfortooltip"'), 0, 0, $notooltip?0:1)); } } $result.= $newref; @@ -4078,8 +4080,10 @@ class Product extends CommonObject $hookmanager->initHooks(array('productdao')); $parameters=array('id'=>$this->id, 'getnomurl'=>$result); $reshook=$hookmanager->executeHooks('getNomUrl', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks - if ($reshook > 0) { $result = $hookmanager->resPrint; - } else { $result .= $hookmanager->resPrint; + if ($reshook > 0) { + $result = $hookmanager->resPrint; + } else { + $result .= $hookmanager->resPrint; } return $result; From cb057e9c6db20b120fbebb0b11239cfb554904d1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 20 Jun 2019 12:32:14 +0200 Subject: [PATCH 358/828] NEW Add hidden option to be ready for BREXIT --- htdocs/core/lib/company.lib.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/htdocs/core/lib/company.lib.php b/htdocs/core/lib/company.lib.php index c3b9bcec2cf..1e27cb112d3 100644 --- a/htdocs/core/lib/company.lib.php +++ b/htdocs/core/lib/company.lib.php @@ -649,6 +649,8 @@ function getFormeJuridiqueLabel($code) */ function getCountriesInEEC() { + global $conf; + // List of all country codes that are in europe for european vat rules // List found on http://ec.europa.eu/taxation_customs/common/faq/faq_1179_en.htm#9 $country_code_in_EEC=array( @@ -687,6 +689,12 @@ function getCountriesInEEC() //'CH', // Switzerland - No. Swizerland in not in EEC ); + if (! empty($conf->global->MAIN_COUNTRIES_IN_EEC)) + { + // For example MAIN_COUNTRIES_IN_EEC = 'AT,BE,BG,CY,CZ,DE,DK,EE,ES,FI,FR,GB,GR,HR,NL,HU,IE,IM,IT,LT,LU,LV,MC,MT,PL,PT,RO,SE,SK,SI,UK' + $country_code_in_EEC = explode(',', $conf->global->MAIN_COUNTRIES_IN_EEC); + } + return $country_code_in_EEC; } From 6e069385bc054a2bd2c0032f32f500cfc755b3eb Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 20 Jun 2019 12:32:38 +0200 Subject: [PATCH 359/828] Update doc --- ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/ChangeLog b/ChangeLog index e0f4159c49e..9b91afd128f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -114,6 +114,7 @@ NEW: Option in workflow module to set a reception billed on validate supplier bi NEW: Autocompletion on lists should be available on mobile applications. NEW: Add mass action to close several members. NEW: Add hidden option ADD_UNSPLASH_LOGIN_BACKGROUND for random background +NEW: Add hidden option to be ready for BREXIT For Developers: NEW: Module "DebugBar" is available as a stable module. From bff6260983d0a47f49d04f4e6b1629023b1e013a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 20 Jun 2019 12:34:29 +0200 Subject: [PATCH 360/828] Fix syntax error --- htdocs/accountancy/journal/bankjournal.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/accountancy/journal/bankjournal.php b/htdocs/accountancy/journal/bankjournal.php index 0f22789d630..a9009e725b8 100644 --- a/htdocs/accountancy/journal/bankjournal.php +++ b/htdocs/accountancy/journal/bankjournal.php @@ -172,7 +172,7 @@ if ($result) { // Variables $account_supplier = (($conf->global->ACCOUNTING_ACCOUNT_SUPPLIER != "") ? $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER : 'NotDefined'); // NotDefined is a reserved word - $account_customer = ($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER != "") ? $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER : 'NotDefined'); // NotDefined is a reserved word + $account_customer = (($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER != "") ? $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER : 'NotDefined'); // NotDefined is a reserved word $account_employee = (! empty($conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT) ? $conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT : 'NotDefined'); // NotDefined is a reserved word $account_pay_vat = (! empty($conf->global->ACCOUNTING_VAT_PAY_ACCOUNT) ? $conf->global->ACCOUNTING_VAT_PAY_ACCOUNT : 'NotDefined'); // NotDefined is a reserved word $account_pay_donation = (! empty($conf->global->DONATION_ACCOUNTINGACCOUNT) ? $conf->global->DONATION_ACCOUNTINGACCOUNT : 'NotDefined'); // NotDefined is a reserved word From afb63623178365f31be9b37658f805ead993c4b5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 20 Jun 2019 13:37:06 +0200 Subject: [PATCH 361/828] Fix look and feel v10 Fix link to direct debit payment order --- htdocs/accountancy/admin/accountmodel.php | 4 +- htdocs/accountancy/admin/categories_list.php | 2 +- htdocs/accountancy/admin/closure.php | 5 +- htdocs/accountancy/admin/defaultaccounts.php | 3 +- htdocs/accountancy/admin/export.php | 5 +- htdocs/accountancy/admin/productaccount.php | 2 +- .../class/accountancyexport.class.php | 78 +++++++++---------- htdocs/accountancy/journal/bankjournal.php | 4 +- .../journal/expensereportsjournal.php | 2 +- .../accountancy/journal/purchasesjournal.php | 2 +- htdocs/accountancy/journal/sellsjournal.php | 2 +- htdocs/admin/dict.php | 3 +- htdocs/compta/bank/bankentries_list.php | 12 ++- .../class/bonprelevement.class.php | 70 +++++++++++++---- htdocs/langs/en_US/banks.lang | 2 +- htdocs/langs/en_US/withdrawals.lang | 4 +- 16 files changed, 121 insertions(+), 79 deletions(-) diff --git a/htdocs/accountancy/admin/accountmodel.php b/htdocs/accountancy/admin/accountmodel.php index f44ff0071d2..102d268e218 100644 --- a/htdocs/accountancy/admin/accountmodel.php +++ b/htdocs/accountancy/admin/accountmodel.php @@ -1,6 +1,6 @@ - * Copyright (C) 2004-2015 Laurent Destailleur + * Copyright (C) 2004-2019 Laurent Destailleur * Copyright (C) 2004 Benoit Mortier * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2010-2016 Juanjo Menent @@ -462,8 +462,6 @@ $linkback=''; print load_fiche_titre($titre, $linkback, 'title_accountancy'); -print "
\n"; - // Confirmation de la suppression de la ligne if ($action == 'delete') diff --git a/htdocs/accountancy/admin/categories_list.php b/htdocs/accountancy/admin/categories_list.php index 3a55e092d94..e7cdc800aee 100644 --- a/htdocs/accountancy/admin/categories_list.php +++ b/htdocs/accountancy/admin/categories_list.php @@ -412,7 +412,7 @@ $titlepicto='title_setup'; print load_fiche_titre($titre, $linkback, $titlepicto); -print $langs->trans("AccountingAccountGroupsDesc", $langs->transnoentitiesnoconv("ByPersonalizedAccountGroups")).'

'; +print ''.$langs->trans("AccountingAccountGroupsDesc", $langs->transnoentitiesnoconv("ByPersonalizedAccountGroups")).'

'; // Confirmation de la suppression de la ligne if ($action == 'delete') diff --git a/htdocs/accountancy/admin/closure.php b/htdocs/accountancy/admin/closure.php index a638d598ac9..479dd410f33 100644 --- a/htdocs/accountancy/admin/closure.php +++ b/htdocs/accountancy/admin/closure.php @@ -21,9 +21,8 @@ * \ingroup Accountancy (Double entries) * \brief Setup page to configure accounting expert module */ -require '../../main.inc.php'; -// Class +require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT . '/core/lib/admin.lib.php'; require_once DOL_DOCUMENT_ROOT . '/core/lib/accounting.lib.php'; require_once DOL_DOCUMENT_ROOT . '/core/class/html.formaccounting.class.php'; @@ -89,7 +88,7 @@ llxHeader(); $linkback = ''; print load_fiche_titre($langs->trans('MenuClosureAccounts'), $linkback, 'title_accountancy'); -print $langs->trans("DefaultClosureDesc").'
'; +print ''.$langs->trans("DefaultClosureDesc").'
'; print '
'; print '
'; diff --git a/htdocs/accountancy/admin/defaultaccounts.php b/htdocs/accountancy/admin/defaultaccounts.php index cba9ac92f3b..079e3585341 100644 --- a/htdocs/accountancy/admin/defaultaccounts.php +++ b/htdocs/accountancy/admin/defaultaccounts.php @@ -78,7 +78,6 @@ $list_account = array ( $accounting_mode = empty($conf->global->ACCOUNTING_MODE) ? 'RECETTES-DEPENSES' : $conf->global->ACCOUNTING_MODE; - if (GETPOST('change_chart', 'alpha')) { $chartofaccounts = GETPOST('chartofaccounts', 'int'); @@ -132,7 +131,7 @@ llxHeader(); $linkback = ''; print load_fiche_titre($langs->trans('MenuDefaultAccounts'), $linkback, 'title_accountancy'); -print $langs->trans("DefaultBindingDesc").'
'; +print ''.$langs->trans("DefaultBindingDesc").'
'; print '
'; print ''; diff --git a/htdocs/accountancy/admin/export.php b/htdocs/accountancy/admin/export.php index 74090e54120..81dc83b2ae5 100644 --- a/htdocs/accountancy/admin/export.php +++ b/htdocs/accountancy/admin/export.php @@ -76,6 +76,7 @@ $model_option = array ( ), ); + /* * Actions */ @@ -138,6 +139,7 @@ $form = new Form($db); // $linkback = '' . $langs->trans("BackToModuleList") . ''; print load_fiche_titre($langs->trans('ConfigAccountingExpert'), $linkback, 'title_setup'); + print "\n".''; $stringtoshow.='
'; // hideobject is to start hidden $stringtoshow.=''; + $stringtoshow.=''; $stringtoshow.=''; $stringtoshow.=''; $stringtoshow.=''; diff --git a/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php b/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php index bba5185c94a..b95cffdb499 100644 --- a/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php +++ b/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php @@ -221,6 +221,7 @@ class box_graph_invoices_supplier_permonth extends ModeleBoxes '; $stringtoshow.='
'; // hideobject is to start hidden $stringtoshow.=''; + $stringtoshow.=''; $stringtoshow.=''; $stringtoshow.=''; $stringtoshow.=''; diff --git a/htdocs/core/boxes/box_graph_orders_permonth.php b/htdocs/core/boxes/box_graph_orders_permonth.php index b06558393aa..271ed4911b4 100644 --- a/htdocs/core/boxes/box_graph_orders_permonth.php +++ b/htdocs/core/boxes/box_graph_orders_permonth.php @@ -220,6 +220,7 @@ class box_graph_orders_permonth extends ModeleBoxes '; $stringtoshow.='
'; // hideobject is to start hidden $stringtoshow.=''; + $stringtoshow.=''; $stringtoshow.=''; $stringtoshow.=''; $stringtoshow.=''; diff --git a/htdocs/core/boxes/box_graph_orders_supplier_permonth.php b/htdocs/core/boxes/box_graph_orders_supplier_permonth.php index 9cb11aed7c1..b7589e0efd2 100644 --- a/htdocs/core/boxes/box_graph_orders_supplier_permonth.php +++ b/htdocs/core/boxes/box_graph_orders_supplier_permonth.php @@ -219,6 +219,7 @@ class box_graph_orders_supplier_permonth extends ModeleBoxes '; $stringtoshow.='
'; // hideobject is to start hidden $stringtoshow.=''; + $stringtoshow.=''; $stringtoshow.=''; $stringtoshow.=''; $stringtoshow.=''; diff --git a/htdocs/core/boxes/box_graph_product_distribution.php b/htdocs/core/boxes/box_graph_product_distribution.php index 0fe5c66d532..0cdffafa050 100644 --- a/htdocs/core/boxes/box_graph_product_distribution.php +++ b/htdocs/core/boxes/box_graph_product_distribution.php @@ -338,6 +338,7 @@ class box_graph_product_distribution extends ModeleBoxes '; $stringtoshow.='
'; // hideobject is to start hidden $stringtoshow.=''; + $stringtoshow.=''; $stringtoshow.=''; $stringtoshow.=''; $stringtoshow.=''; diff --git a/htdocs/core/boxes/box_graph_propales_permonth.php b/htdocs/core/boxes/box_graph_propales_permonth.php index b21381473c2..42643fb72bc 100644 --- a/htdocs/core/boxes/box_graph_propales_permonth.php +++ b/htdocs/core/boxes/box_graph_propales_permonth.php @@ -223,6 +223,7 @@ class box_graph_propales_permonth extends ModeleBoxes '; $stringtoshow.='
'; // hideobject is to start hidden $stringtoshow.=''; + $stringtoshow.=''; $stringtoshow.=''; $stringtoshow.=''; $stringtoshow.=''; diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index d283abd7d15..5456e2ce1eb 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -374,6 +374,7 @@ if (! defined('NOTOKENRENEWAL')) //var_dump(GETPOST('token').' '.$_SESSION['token'].' - '.$_SESSION['newtoken'].' '.$_SERVER['SCRIPT_FILENAME']); // Check token +//var_dump((! defined('NOCSRFCHECK')).' '.empty($dolibarr_nocsrfcheck).' '.(! empty($conf->global->MAIN_SECURITY_CSRF_WITH_TOKEN)).' '.$_SERVER['REQUEST_METHOD'].' '.(! GETPOSTISSET('token'))); if ((! defined('NOCSRFCHECK') && empty($dolibarr_nocsrfcheck) && ! empty($conf->global->MAIN_SECURITY_CSRF_WITH_TOKEN)) || defined('CSRFCHECK_WITH_TOKEN')) // Check validity of token, only if option MAIN_SECURITY_CSRF_WITH_TOKEN enabled or if constant CSRFCHECK_WITH_TOKEN is set { From a75a2ae8e45a730e9a74ac9944acb43aac4c4ee2 Mon Sep 17 00:00:00 2001 From: John Botella Date: Tue, 2 Jul 2019 15:44:42 +0200 Subject: [PATCH 601/828] Fix missing hidden input and short label --- htdocs/admin/dict.php | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/htdocs/admin/dict.php b/htdocs/admin/dict.php index d160793b735..6bffb7fe535 100644 --- a/htdocs/admin/dict.php +++ b/htdocs/admin/dict.php @@ -1889,6 +1889,9 @@ function fieldList($fieldlist, $obj='', $tabname='', $context='') { print ''; } + else{ + print ''; + } print ''; } elseif ($fieldlist[$field] == 'price' || preg_match('/^amount/i',$fieldlist[$field])) { @@ -1951,7 +1954,13 @@ function fieldList($fieldlist, $obj='', $tabname='', $context='') } else { - if ($fieldlist[$field]=='sortorder') $fieldlist[$field]='position'; + + $fieldValue = isset($obj->{$fieldlist[$field]})?$obj->{$fieldlist[$field]}:''; + + if ($fieldlist[$field]=='sortorder') + { + $fieldlist[$field]='position'; + } $classtd=''; $class=''; if ($fieldlist[$field]=='code') $classtd='width100'; @@ -1972,7 +1981,7 @@ function fieldList($fieldlist, $obj='', $tabname='', $context='') } if ($tabname == MAIN_DB_PREFIX.'c_payment_term') { $langs->load("bills"); - $transkey="PaymentCondition".strtoupper($obj->code); + $transkey="PaymentConditionShort".strtoupper($obj->code); } if ($transkey && $langs->trans($transkey) != $transkey) { @@ -1982,8 +1991,11 @@ function fieldList($fieldlist, $obj='', $tabname='', $context='') } if (! $transfound) { - print ''; + print ''; } + else{ + print ''; + } print ''; } } From d9560dbb6187a26c6badf7af3be04e467cccc1bf Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 2 Jul 2019 18:02:06 +0200 Subject: [PATCH 602/828] Fix var not initialized --- htdocs/core/modules/export/export_csv.modules.php | 3 +++ htdocs/core/modules/export/export_excel.modules.php | 2 ++ htdocs/core/modules/export/export_excel2007new.modules.php | 2 ++ 3 files changed, 7 insertions(+) diff --git a/htdocs/core/modules/export/export_csv.modules.php b/htdocs/core/modules/export/export_csv.modules.php index c3c8431962e..9d606aadc33 100644 --- a/htdocs/core/modules/export/export_csv.modules.php +++ b/htdocs/core/modules/export/export_csv.modules.php @@ -261,6 +261,9 @@ class ExportCsv extends ModeleExports } $this->col=0; + + $reg=array(); + foreach($array_selected_sorted as $code => $value) { if (strpos($code, ' as ') == 0) $alias=str_replace(array('.','-','(',')'), '_', $code); diff --git a/htdocs/core/modules/export/export_excel.modules.php b/htdocs/core/modules/export/export_excel.modules.php index ffb1fd83cce..0e7fd0f1169 100644 --- a/htdocs/core/modules/export/export_excel.modules.php +++ b/htdocs/core/modules/export/export_excel.modules.php @@ -345,6 +345,8 @@ class ExportExcel extends ModeleExports // Define first row $this->col=0; + $reg=array(); + foreach($array_selected_sorted as $code => $value) { if (strpos($code, ' as ') == 0) $alias=str_replace(array('.','-','(',')'), '_', $code); diff --git a/htdocs/core/modules/export/export_excel2007new.modules.php b/htdocs/core/modules/export/export_excel2007new.modules.php index 266cedc1310..038446643a2 100644 --- a/htdocs/core/modules/export/export_excel2007new.modules.php +++ b/htdocs/core/modules/export/export_excel2007new.modules.php @@ -304,6 +304,8 @@ class ExportExcel2007new extends ModeleExports // Define first row $this->col=0; + $reg=array(); + foreach($array_selected_sorted as $code => $value) { if (strpos($code, ' as ') == 0) $alias=str_replace(array('.','-','(',')'), '_', $code); From 9d50c672088b16a6208358e4f1e890ca3ab0eaab Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 2 Jul 2019 18:06:51 +0200 Subject: [PATCH 603/828] FIX option EXPORT_LABEL_FOR_SELECT to restore compatibility in export --- htdocs/core/extrafieldsinexport.inc.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/htdocs/core/extrafieldsinexport.inc.php b/htdocs/core/extrafieldsinexport.inc.php index 13b2d1ae520..78dbba9934e 100644 --- a/htdocs/core/extrafieldsinexport.inc.php +++ b/htdocs/core/extrafieldsinexport.inc.php @@ -34,6 +34,15 @@ if ($resql) // This can fail when class is used on old database (during migra case 'boolean': $typeFilter="Boolean"; break; + case 'select': + if (! empty($conf->global->EXPORT_LABEL_FOR_SELECT)) + { + $tmpparam=unserialize($obj->param); // $tmpparam may be array with 'options' = array(key1=>val1, key2=>val2 ...) + if ($tmpparam['options'] && is_array($tmpparam['options'])) { + $typeFilter="Select:".$obj->param; + } + } + break; case 'sellist': $tmp=''; $tmpparam=unserialize($obj->param); // $tmp ay be array 'options' => array 'c_currencies:code_iso:code_iso' => null From 126479b5a9408bc3c6c55fa640e276fc44d36c4e Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Tue, 2 Jul 2019 21:46:00 +0200 Subject: [PATCH 604/828] Fix paymentmethod detach --- htdocs/societe/paymentmodes.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/htdocs/societe/paymentmodes.php b/htdocs/societe/paymentmodes.php index 6a3596f6e24..21af1f0a35c 100644 --- a/htdocs/societe/paymentmodes.php +++ b/htdocs/societe/paymentmodes.php @@ -637,6 +637,16 @@ if (empty($reshook)) elseif ($action == 'deletecard' && $source) { try { + if (preg_match('/pm_/', $source)) + { + $payment_method = \Stripe\PaymentMethod::retrieve($source); + if ($payment_method) + { + $payment_method->detach(); + } + } + else + { $cu=$stripe->customerStripe($object, $stripeacc, $servicestatus); $card=$cu->sources->retrieve("$source"); if ($card) @@ -645,6 +655,7 @@ if (empty($reshook)) if (method_exists($card, 'detach')) $card->detach(); else $card->delete(); } + } $url=DOL_URL_ROOT.'/societe/paymentmodes.php?socid='.$object->id; header('Location: '.$url); From 03938e21239396b44353f234a2d8219694722332 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Tue, 2 Jul 2019 21:56:50 +0200 Subject: [PATCH 605/828] Update paymentmodes.php --- htdocs/societe/paymentmodes.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/societe/paymentmodes.php b/htdocs/societe/paymentmodes.php index 21af1f0a35c..0e41e11cbaa 100644 --- a/htdocs/societe/paymentmodes.php +++ b/htdocs/societe/paymentmodes.php @@ -639,7 +639,7 @@ if (empty($reshook)) try { if (preg_match('/pm_/', $source)) { - $payment_method = \Stripe\PaymentMethod::retrieve($source); + $payment_method = \Stripe\PaymentMethod::retrieve($source, ["stripe_account" => $stripeacc]); if ($payment_method) { $payment_method->detach(); From ff68b110b27aca9c0f76b12d0ddc38acdd73726a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 2 Jul 2019 23:14:22 +0200 Subject: [PATCH 606/828] Fix phpcs --- .../debugbar/class/DataCollector/DolRequestDataCollector.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/htdocs/debugbar/class/DataCollector/DolRequestDataCollector.php b/htdocs/debugbar/class/DataCollector/DolRequestDataCollector.php index d6e939a9964..ebf9e2bfbd2 100644 --- a/htdocs/debugbar/class/DataCollector/DolRequestDataCollector.php +++ b/htdocs/debugbar/class/DataCollector/DolRequestDataCollector.php @@ -8,6 +8,11 @@ use \DebugBar\DataCollector\RequestDataCollector; class DolRequestDataCollector extends RequestDataCollector { + /** + * Collects the data from the collectors + * + * @return array + */ public function collect() { $vars = array('_GET', '_POST', '_SESSION', '_COOKIE', '_SERVER'); From 221c202add5821ed95c81d855446fbdac86df68e Mon Sep 17 00:00:00 2001 From: Frans Bosman Date: Wed, 3 Jul 2019 06:59:52 +0200 Subject: [PATCH 607/828] Update commonobject.class.php --- htdocs/core/class/commonobject.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index b065bb27470..8949dbc5f97 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -5026,7 +5026,7 @@ abstract class CommonObject //dol_syslog("attributeLabel=".$attributeLabel, LOG_DEBUG); //dol_syslog("attributeType=".$attributeType, LOG_DEBUG); - if (!empty($attrfieldcomputed)) + if ((!empty($attrfieldcomputed) && (! empty($conf->global->MAIN_STORE_COMPUTED_EXTRAFIELDS))) { $value = dol_eval($attrfieldcomputed, 1, 0); $new_array_options[$key] = $value; From 9064737930307a62f75c0f406794925ddf7056df Mon Sep 17 00:00:00 2001 From: Frans Bosman Date: Wed, 3 Jul 2019 07:08:53 +0200 Subject: [PATCH 608/828] Update commonobject.class.php --- htdocs/core/class/commonobject.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 8949dbc5f97..d164761366d 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -5026,7 +5026,7 @@ abstract class CommonObject //dol_syslog("attributeLabel=".$attributeLabel, LOG_DEBUG); //dol_syslog("attributeType=".$attributeType, LOG_DEBUG); - if ((!empty($attrfieldcomputed) && (! empty($conf->global->MAIN_STORE_COMPUTED_EXTRAFIELDS))) + if ((!empty($attrfieldcomputed)) && (!empty($conf->global->MAIN_STORE_COMPUTED_EXTRAFIELDS))) { $value = dol_eval($attrfieldcomputed, 1, 0); $new_array_options[$key] = $value; From 818a8c7d5963c719f26ebaa92f069aef345c8ab4 Mon Sep 17 00:00:00 2001 From: Louis Sautier Date: Wed, 3 Jul 2019 10:44:12 +0200 Subject: [PATCH 609/828] Fix missing form end tag in prelevement --- htdocs/compta/prelevement/create.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/compta/prelevement/create.php b/htdocs/compta/prelevement/create.php index d9298c9f607..747bbdf828d 100644 --- a/htdocs/compta/prelevement/create.php +++ b/htdocs/compta/prelevement/create.php @@ -181,6 +181,7 @@ else print 'transnoentitiesnoconv("StandingOrders"))).'">'.$langs->trans("CreateAll")."\n"; } +print "\n"; print "
\n"; print '
'; From 116c6d7a6a9b03eb61ba8564646b4a22fe1a7cc1 Mon Sep 17 00:00:00 2001 From: Frans Bosman Date: Wed, 3 Jul 2019 11:09:24 +0200 Subject: [PATCH 610/828] Update commonobject.class.php --- htdocs/core/class/commonobject.class.php | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index d164761366d..67d75a62169 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -5026,10 +5026,19 @@ abstract class CommonObject //dol_syslog("attributeLabel=".$attributeLabel, LOG_DEBUG); //dol_syslog("attributeType=".$attributeType, LOG_DEBUG); - if ((!empty($attrfieldcomputed)) && (!empty($conf->global->MAIN_STORE_COMPUTED_EXTRAFIELDS))) + + if (!empty($attrfieldcomputed)) { + if (!empty($conf->global->MAIN_STORE_COMPUTED_EXTRAFIELDS)) + { $value = dol_eval($attrfieldcomputed, 1, 0); + dol_syslog($langs->trans("Extrafieldcomputed")." sur ".$attributeLabel."(".$value.")", LOG_DEBUG); $new_array_options[$key] = $value; + } + else + { + $new_array_options[$key] = null; + } } From 433835860c2cbf470b9421d75f035a2567c33aee Mon Sep 17 00:00:00 2001 From: Ferran Marcet Date: Wed, 3 Jul 2019 13:12:41 +0200 Subject: [PATCH 611/828] FIX: When saving an action it didn't save the label based on the type of event if the label is empty and the type is customized --- htdocs/comm/action/card.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/htdocs/comm/action/card.php b/htdocs/comm/action/card.php index 470a90c355f..8989807a645 100644 --- a/htdocs/comm/action/card.php +++ b/htdocs/comm/action/card.php @@ -7,6 +7,7 @@ * Copyright (C) 2013 Florian Henry * Copyright (C) 2014 Cedric GROSS * Copyright (C) 2015 Alexandre Spangaro + * Copyright (C) 2019 Ferran Marcet * * 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 @@ -246,7 +247,10 @@ if ($action == 'add') { $object->label = $langs->transnoentitiesnoconv("Action".$object->type_code)."\n"; } - else $object->label = $cactioncomm->libelle; + else { + $cactioncomm->fetch($object->type_code); + $object->label = $cactioncomm->label; + } } } $object->fk_project = isset($_POST["projectid"])?$_POST["projectid"]:0; From 135e47892bcd7f62b27c801feec835b02be84692 Mon Sep 17 00:00:00 2001 From: Frans Bosman Date: Wed, 3 Jul 2019 16:15:20 +0200 Subject: [PATCH 612/828] Update admin_extrafields_add.tpl.php --- htdocs/core/tpl/admin_extrafields_add.tpl.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/tpl/admin_extrafields_add.tpl.php b/htdocs/core/tpl/admin_extrafields_add.tpl.php index 04720004492..a7ae00b9ac9 100644 --- a/htdocs/core/tpl/admin_extrafields_add.tpl.php +++ b/htdocs/core/tpl/admin_extrafields_add.tpl.php @@ -179,7 +179,7 @@ $langs->load("modulebuilder"); trans("LanguageFile"); ?> -textwithpicto($langs->trans("ComputedFormula"), $langs->trans("ComputedFormulaDesc"), 1, 'help', '', 0, 2, 'tooltipcompute'); ?> +textwithpicto($langs->trans("ComputedFormula"), $langs->trans("ComputedFormulaDesc")).$form->textwithpicto($langs->trans("Computedpersistent"), $langs->trans("ComputedpersistentDesc"), 1, 'warning', '', 0, 2, 'tooltipcompute'); ?> trans("DefaultValue").' ('.$langs->trans("Database").')'; ?> From 123cf7ce502d494915c25ba03b1bd71f2faa8169 Mon Sep 17 00:00:00 2001 From: Frans Bosman Date: Wed, 3 Jul 2019 16:16:45 +0200 Subject: [PATCH 613/828] Update admin_extrafields_add.tpl.php --- htdocs/core/tpl/admin_extrafields_add.tpl.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/tpl/admin_extrafields_add.tpl.php b/htdocs/core/tpl/admin_extrafields_add.tpl.php index a7ae00b9ac9..5bd161c9893 100644 --- a/htdocs/core/tpl/admin_extrafields_add.tpl.php +++ b/htdocs/core/tpl/admin_extrafields_add.tpl.php @@ -179,7 +179,7 @@ $langs->load("modulebuilder"); trans("LanguageFile"); ?> -textwithpicto($langs->trans("ComputedFormula"), $langs->trans("ComputedFormulaDesc")).$form->textwithpicto($langs->trans("Computedpersistent"), $langs->trans("ComputedpersistentDesc"), 1, 'warning', '', 0, 2, 'tooltipcompute'); ?> +textwithpicto($langs->trans("ComputedFormula"), $langs->trans("ComputedFormulaDesc")).$form->textwithpicto($langs->trans("Computedpersistent"), $langs->trans("ComputedpersistentDesc"), 1, 'warning'); ?> trans("DefaultValue").' ('.$langs->trans("Database").')'; ?> From 3e53a06b2ef93b487dbb4b18ffb3b4c82292ad40 Mon Sep 17 00:00:00 2001 From: "atm-florian.m" Date: Wed, 3 Jul 2019 16:17:47 +0200 Subject: [PATCH 614/828] minor spelling issues --- htdocs/fourn/commande/dispatch.php | 4 ++-- htdocs/langs/fr_FR/stocks.lang | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/fourn/commande/dispatch.php b/htdocs/fourn/commande/dispatch.php index 77fd4b1aa69..dd6fd76a46a 100644 --- a/htdocs/fourn/commande/dispatch.php +++ b/htdocs/fourn/commande/dispatch.php @@ -245,7 +245,7 @@ if ($action == 'dispatch' && $user->rights->fournisseur->commande->receptionner) // We ask to move a qty if (GETPOST($qty) != 0) { if (! (GETPOST($ent, 'int') > 0)) { - dol_syslog('No dispatch for line ' . $key . ' as no warehouse choosed'); + dol_syslog('No dispatch for line ' . $key . ' as no warehouse was chosen.'); $text = $langs->transnoentities('Warehouse') . ', ' . $langs->transnoentities('Line') . ' ' . ($numline); setEventMessages($langs->trans('ErrorFieldRequired', $text), null, 'errors'); $error ++; @@ -282,7 +282,7 @@ if ($action == 'dispatch' && $user->rights->fournisseur->commande->receptionner) // We ask to move a qty if (GETPOST($qty) > 0) { if (! (GETPOST($ent, 'int') > 0)) { - dol_syslog('No dispatch for line ' . $key . ' as no warehouse choosed'); + dol_syslog('No dispatch for line ' . $key . ' as no warehouse was chosen.'); $text = $langs->transnoentities('Warehouse') . ', ' . $langs->transnoentities('Line') . ' ' . ($numline) . '-' . ($reg[1] + 1); setEventMessages($langs->trans('ErrorFieldRequired', $text), null, 'errors'); $error ++; diff --git a/htdocs/langs/fr_FR/stocks.lang b/htdocs/langs/fr_FR/stocks.lang index 5898f7384e5..df9f738f4d8 100644 --- a/htdocs/langs/fr_FR/stocks.lang +++ b/htdocs/langs/fr_FR/stocks.lang @@ -65,7 +65,7 @@ RuleForStockManagementIncrease=Règle de gestion des incrémentations de stock ( DeStockOnBill=Décrémenter les stocks physiques sur validation des factures/avoirs clients DeStockOnValidateOrder=Décrémenterr les stocks physiques sur validation des commandes clients DeStockOnShipment=Décrémenter les stocks physiques sur validation des expéditions -DeStockOnShipmentOnClosing=Décrémenter les stocks phisiques au classement "clôturée" de l'expédition +DeStockOnShipmentOnClosing=Décrémenter les stocks physiques au classement "clôturée" de l'expédition ReStockOnBill=Incrémenter les stocks physiques sur validation des factures/avoirs fournisseurs ReStockOnValidateOrder=Incrémenter les stocks physiques sur approbation des commandes fournisseurs ReStockOnDispatchOrder=Incrémenter les stocks physiques sur ventilation manuelle dans les entrepôts, après réception de la marchandise From 9962243df3b772c64018c782bc15195856a8906f Mon Sep 17 00:00:00 2001 From: Frans Bosman Date: Wed, 3 Jul 2019 16:19:51 +0200 Subject: [PATCH 615/828] Update admin_extrafields_edit.tpl.php --- htdocs/core/tpl/admin_extrafields_edit.tpl.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/tpl/admin_extrafields_edit.tpl.php b/htdocs/core/tpl/admin_extrafields_edit.tpl.php index 7ed41af9281..2acdf7e864f 100644 --- a/htdocs/core/tpl/admin_extrafields_edit.tpl.php +++ b/htdocs/core/tpl/admin_extrafields_edit.tpl.php @@ -243,7 +243,7 @@ else trans("LanguageFile"); ?> -textwithpicto($langs->trans("ComputedFormula"), $langs->trans("ComputedFormulaDesc"), 1, 'help', '', 0, 2, 'tooltipcompute'); ?> +textwithpicto($langs->trans("ComputedFormula"), $langs->trans("ComputedFormulaDesc")).$form->textwithpicto($langs->trans("Computedpersistent"), $langs->trans("ComputedpersistentDesc"), 1, 'warning'); ?> trans("DefaultValue").' ('.$langs->trans("Database").')'; ?> From f8a5ae90e3cf8ac89feae9f4eb8d8e616528931e Mon Sep 17 00:00:00 2001 From: Frans Bosman Date: Wed, 3 Jul 2019 16:43:47 +0200 Subject: [PATCH 616/828] Update admin.lang --- htdocs/langs/en_US/admin.lang | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 7480550195a..73d825d8320 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -1924,4 +1926,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? \ No newline at end of file +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? From cd7d4de6ecae99d7723ed55d7e9e1141242c6bbc Mon Sep 17 00:00:00 2001 From: Frans Bosman Date: Wed, 3 Jul 2019 16:53:26 +0200 Subject: [PATCH 617/828] Update commonobject.class.php --- htdocs/core/class/commonobject.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 67d75a62169..0a300476fb5 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -5029,7 +5029,7 @@ abstract class CommonObject if (!empty($attrfieldcomputed)) { - if (!empty($conf->global->MAIN_STORE_COMPUTED_EXTRAFIELDS)) + if (!empty($conf->global->MAIN_STORE_COMPUTED_EXTRAFIELDS)) { $value = dol_eval($attrfieldcomputed, 1, 0); dol_syslog($langs->trans("Extrafieldcomputed")." sur ".$attributeLabel."(".$value.")", LOG_DEBUG); From 2f5b9ccb22b9bcd3cce64d3a234bdf3e945b6d1e Mon Sep 17 00:00:00 2001 From: atm-greg Date: Wed, 3 Jul 2019 17:00:18 +0200 Subject: [PATCH 618/828] fix case objecttmp is an invoice --- htdocs/core/class/html.form.class.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index fe8a812a8a2..a8d96ed4b34 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -5558,7 +5558,8 @@ class Form if ($prefixforautocompletemode == 'societe') $prefixforautocompletemode='company'; $confkeyforautocompletemode=strtoupper($prefixforautocompletemode).'_USE_SEARCH_TO_SELECT'; // For example COMPANY_USE_SEARCH_TO_SELECT - $fieldstoshow='t.ref'; + if (DOL_VERSION < 10 && $objecttmp->element == 'facture') $fieldstoshow = 't.facnumber'; + else $fieldstoshow='t.ref'; if (! empty($objecttmp->fields)) // For object that declare it, it is better to use declared fields ( like societe, contact, ...) { $tmpfieldstoshow=''; From 95b6f03bf52d019b3b978e73b686d441a5bfd169 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 01:58:25 +0200 Subject: [PATCH 619/828] Code comment --- htdocs/core/triggers/interface_20_all_Logevents.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/triggers/interface_20_all_Logevents.class.php b/htdocs/core/triggers/interface_20_all_Logevents.class.php index 1ce13ff2193..92d93eef10f 100644 --- a/htdocs/core/triggers/interface_20_all_Logevents.class.php +++ b/htdocs/core/triggers/interface_20_all_Logevents.class.php @@ -27,7 +27,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/triggers/dolibarrtriggers.class.php'; /** - * Class of triggers for security events + * Class of triggers for security audit events */ class InterfaceLogevents extends DolibarrTriggers { @@ -47,7 +47,7 @@ class InterfaceLogevents extends DolibarrTriggers public $version = self::VERSION_DOLIBARR; /** - * Function called when a Dolibarrr business event is done. + * Function called when a Dolibarrr security audit event is done. * All functions "runTrigger" are triggered if file is inside directory htdocs/core/triggers or htdocs/module/code/triggers (and declared) * * @param string $action Event action code From 27ba3408b43b1e990571c16ec6b8e6ab92f4bd49 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 02:01:55 +0200 Subject: [PATCH 620/828] Fix code comment --- htdocs/core/class/events.class.php | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/htdocs/core/class/events.class.php b/htdocs/core/class/events.class.php index 50fc116611a..af87e25fad1 100644 --- a/htdocs/core/class/events.class.php +++ b/htdocs/core/class/events.class.php @@ -1,5 +1,5 @@ +/* Copyright (C) 2007-2019 Laurent Destailleur * Copyright (C) 2005-2009 Regis Houssin * * This program is free software; you can redistribute it and/or modify @@ -20,14 +20,8 @@ * \file htdocs/core/class/events.class.php * \ingroup core * \brief File of class to manage security events. - * \author Laurent Destailleur */ -// Put here all includes required by your class file -//require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php'; -//require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php'; -//require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php'; - /** * Events class @@ -133,7 +127,7 @@ class Events // extends CommonObject */ public function create($user) { - global $conf, $langs; + global $conf; // Clean parameters $this->description=trim($this->description); @@ -185,8 +179,6 @@ class Events // extends CommonObject */ public function update($user = null, $notrigger = 0) { - global $conf, $langs; - // Clean parameters $this->id=trim($this->id); $this->type=trim($this->type); @@ -222,8 +214,6 @@ class Events // extends CommonObject */ public function fetch($id, $user = null) { - global $langs; - $sql = "SELECT"; $sql.= " t.rowid,"; $sql.= " t.tms,"; @@ -273,8 +263,6 @@ class Events // extends CommonObject */ public function delete($user) { - global $conf, $langs; - $sql = "DELETE FROM ".MAIN_DB_PREFIX."events"; $sql.= " WHERE rowid=".$this->id; From 75aa11e5269efcccf6d3b4de08ebfa7f7dc6a217 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 01:58:25 +0200 Subject: [PATCH 621/828] Code comment --- htdocs/core/triggers/interface_20_all_Logevents.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/triggers/interface_20_all_Logevents.class.php b/htdocs/core/triggers/interface_20_all_Logevents.class.php index 1ce13ff2193..92d93eef10f 100644 --- a/htdocs/core/triggers/interface_20_all_Logevents.class.php +++ b/htdocs/core/triggers/interface_20_all_Logevents.class.php @@ -27,7 +27,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/triggers/dolibarrtriggers.class.php'; /** - * Class of triggers for security events + * Class of triggers for security audit events */ class InterfaceLogevents extends DolibarrTriggers { @@ -47,7 +47,7 @@ class InterfaceLogevents extends DolibarrTriggers public $version = self::VERSION_DOLIBARR; /** - * Function called when a Dolibarrr business event is done. + * Function called when a Dolibarrr security audit event is done. * All functions "runTrigger" are triggered if file is inside directory htdocs/core/triggers or htdocs/module/code/triggers (and declared) * * @param string $action Event action code From 10e3e37c6c2d560b283263e673ad46d86cc6981a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 10:39:30 +0200 Subject: [PATCH 622/828] Update don.class.php --- htdocs/don/class/don.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/don/class/don.class.php b/htdocs/don/class/don.class.php index caeb70aca94..638de5580e4 100644 --- a/htdocs/don/class/don.class.php +++ b/htdocs/don/class/don.class.php @@ -396,7 +396,7 @@ class Don extends CommonObject $sql.= ", ".$conf->entity; $sql.= ", ".price2num($this->amount); $sql.= ", ".($this->modepaymentid?$this->modepaymentid:"null"); - $sql.= ", ".($this->socid?$this->socid:"null"); + $sql.= ", ".($this->socid > 0 ? $this->socid : "null"); $sql.= ", '".$this->db->escape($this->firstname)."'"; $sql.= ", '".$this->db->escape($this->lastname)."'"; $sql.= ", '".$this->db->escape($this->societe)."'"; From cf458c77dccb086aae2cb485e72c3f1fbba7be1a Mon Sep 17 00:00:00 2001 From: "atm-florian.m" Date: Thu, 4 Jul 2019 11:43:17 +0200 Subject: [PATCH 623/828] FIX: hook added on fileupload.class.php to enable modules to override upload options --- htdocs/core/class/fileupload.class.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/htdocs/core/class/fileupload.class.php b/htdocs/core/class/fileupload.class.php index c3a40599877..17444cb5358 100644 --- a/htdocs/core/class/fileupload.class.php +++ b/htdocs/core/class/fileupload.class.php @@ -45,6 +45,8 @@ class FileUpload { global $db, $conf; global $object; + global $hookmanager; + $hookmanager->initHooks(array('fileupload')); $this->fk_element=$fk_element; $this->element=$element; @@ -183,6 +185,18 @@ class FileUpload ) ) ); + + $hookmanager->executeHooks( + 'overrideUploadOptions', + array( + 'options' => &$options, + 'element' => $element + ), + $object, + $action, + $hookmanager + ); + if ($options) { $this->options = array_replace_recursive($this->options, $options); } From b065cbc6f88023a7f6bef9a2c225bd3098c7a5e8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 12:09:04 +0200 Subject: [PATCH 624/828] FIX #11446 --- htdocs/product/class/product.class.php | 39 ++++++++++++++------------ test/phpunit/ProductTest.php | 27 +++++++++++++++++- 2 files changed, 47 insertions(+), 19 deletions(-) diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index 69cd6ba077c..c0038ac17d8 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -3716,7 +3716,7 @@ class Product extends CommonObject // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** * Fonction recursive uniquement utilisee par get_arbo_each_prod, recompose l'arborescence des sousproduits - * Define value of this->res + * Define value of this->res * * @param array $prod Products array * @param string $compl_path Directory path of parents to add before @@ -3730,7 +3730,7 @@ class Product extends CommonObject // phpcs:enable global $conf,$langs; - $product = new Product($this->db); + $tmpproduct = null; //var_dump($prod); foreach($prod as $id_product => $desc_pere) // $id_product is 0 (first call starting with root top) or an id of a sub_product { @@ -3746,23 +3746,26 @@ class Product extends CommonObject } //print "XXX We add id=".$id." - label=".$label." - nb=".$nb." - multiply=".$multiply." fullpath=".$compl_path.$label."\n"; - $this->fetch($id); // Load product - $this->load_stock('nobatch,novirtual'); // Load stock to get true this->stock_reel + if (is_null($tmpproduct)) $tmpproduct = new Product($this->db); // So we initialize tmpproduct only once for all loop. + $tmpproduct->fetch($id); // Load product to get ->ref + $tmpproduct->load_stock('nobatch,novirtual'); // Load stock to get true ->stock_reel + //$this->fetch($id); // Load product to get ->ref + //$this->load_stock('nobatch,novirtual'); // Load stock to get true ->stock_reel $this->res[]= array( - 'id'=>$id, // Id product - 'id_parent'=>$id_parent, - 'ref'=>$this->ref, // Ref product - 'nb'=>$nb, // Nb of units that compose parent product - 'nb_total'=>$nb*$multiply, // Nb of units for all nb of product - 'stock'=>$this->stock_reel, // Stock - 'stock_alert'=>$this->seuil_stock_alerte, // Stock alert - 'label'=>$label, - 'fullpath'=>$compl_path.$label, // Label - 'type'=>$type, // Nb of units that compose parent product - 'desiredstock'=>$this->desiredstock, - 'level'=>$level, - 'incdec'=>$incdec, - 'entity'=>$this->entity + 'id'=>$id, // Id product + 'id_parent'=>$id_parent, + 'ref'=>$tmpproduct->ref, // Ref product + 'nb'=>$nb, // Nb of units that compose parent product + 'nb_total'=>$nb*$multiply, // Nb of units for all nb of product + 'stock'=>$tmpproduct->stock_reel, // Stock + 'stock_alert'=>$tmpproduct->seuil_stock_alerte, // Stock alert + 'label'=>$label, + 'fullpath'=>$compl_path.$label, // Label + 'type'=>$type, // Nb of units that compose parent product + 'desiredstock'=>$tmpproduct->desiredstock, + 'level'=>$level, + 'incdec'=>$incdec, + 'entity'=>$tmpproduct->entity ); // Recursive call if there is childs to child diff --git a/test/phpunit/ProductTest.php b/test/phpunit/ProductTest.php index c57ef426d0b..782d5f076e8 100644 --- a/test/phpunit/ProductTest.php +++ b/test/phpunit/ProductTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class ProductTest extends PHPUnit_Framework_TestCase +class ProductTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; @@ -168,6 +168,31 @@ class ProductTest extends PHPUnit_Framework_TestCase return $localobject; } + /** + * testProductGetArboEachProd + * + * @return void + */ + public function testProductGetArboEachProd() + { + global $conf,$user,$langs,$db; + $conf=$this->savconf; + $user=$this->savuser; + $langs=$this->savlangs; + $db=$this->savdb; + + /* + $localobject=new Product($db); + $localobject->fetch(208); + $localobject->get_sousproduits_arbo(); + $localobject->get_arbo_each_prod(); + + var_dump($localobject->res); print (json_encode($localobject->res)); exit; + */ + + return; + } + /** * testProductUpdate * From fb69f23bbaaa9270f0f3fd2cd78ca2c281e0ff79 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 12:10:29 +0200 Subject: [PATCH 625/828] Fix phpunit --- test/phpunit/ProductTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/phpunit/ProductTest.php b/test/phpunit/ProductTest.php index 782d5f076e8..115475113fa 100644 --- a/test/phpunit/ProductTest.php +++ b/test/phpunit/ProductTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class ProductTest extends PHPUnit\Framework\TestCase +class ProductTest extends PHPUnit_Framework_TestCase { protected $savconf; protected $savuser; From 63c93be94e0a28be0cb05fb08ecc3c76c2f2e7cc Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 12:20:34 +0200 Subject: [PATCH 626/828] Update html.form.class.php --- htdocs/core/class/html.form.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index a8d96ed4b34..a462f40ebdc 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -5558,7 +5558,7 @@ class Form if ($prefixforautocompletemode == 'societe') $prefixforautocompletemode='company'; $confkeyforautocompletemode=strtoupper($prefixforautocompletemode).'_USE_SEARCH_TO_SELECT'; // For example COMPANY_USE_SEARCH_TO_SELECT - if (DOL_VERSION < 10 && $objecttmp->element == 'facture') $fieldstoshow = 't.facnumber'; + if (((float) DOL_VERSION) < 10 && $objecttmp->element == 'facture') $fieldstoshow = 't.facnumber'; else $fieldstoshow='t.ref'; if (! empty($objecttmp->fields)) // For object that declare it, it is better to use declared fields ( like societe, contact, ...) { From 657a3ae4c5bfd5d9f7c8d0f561a87922832e979b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 12:43:32 +0200 Subject: [PATCH 627/828] FIX permission to delete a draft purchase order --- htdocs/fourn/commande/card.php | 2 +- htdocs/modulebuilder/template/myobject_card.php | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/htdocs/fourn/commande/card.php b/htdocs/fourn/commande/card.php index da2930ed667..3e42552a942 100644 --- a/htdocs/fourn/commande/card.php +++ b/htdocs/fourn/commande/card.php @@ -2516,7 +2516,7 @@ elseif (! empty($object->id)) } // Delete - if ($user->rights->fournisseur->commande->supprimer) + if (! empty($user->rights->fournisseur->commande->supprimer) || ($object->statut == CommandeFournisseur::STATUS_DRAFT && ! empty($user->rights->fournisseur->commande->creer))) { print ''.$langs->trans("Delete").''; } diff --git a/htdocs/modulebuilder/template/myobject_card.php b/htdocs/modulebuilder/template/myobject_card.php index cc2eb5062cb..28c817658f6 100644 --- a/htdocs/modulebuilder/template/myobject_card.php +++ b/htdocs/modulebuilder/template/myobject_card.php @@ -434,7 +434,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea print '' . $langs->trans('SendMail') . ''."\n"; // Modify - if ($user->rights->mymodule->write) + if (! empty($user->rights->mymodule->write)) { print ''.$langs->trans("Modify").''."\n"; } @@ -444,7 +444,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } // Clone - if ($user->rights->mymodule->write) + if (! empty($user->rights->mymodule->write)) { print ''; } @@ -463,7 +463,8 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } */ - if ($user->rights->mymodule->delete) + // Delete (need delete permission, or if draft, just need create/modify permission) + if (! empty($user->rights->mymodule->delete) || (! empty($object->fields['status']) && $object->status == $object::STATUS_DRAFT && ! empty($user->rights->mymodule->write))) { print ''.$langs->trans('Delete').''."\n"; } From 512b832c77bd1247cd0684f54b7d77e4aca457bc Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 13:26:20 +0200 Subject: [PATCH 628/828] CSS --- htdocs/theme/eldy/global.inc.php | 2 +- htdocs/theme/md/style.css.php | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 15b986d4bff..6f4fd4fa660 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -1349,7 +1349,7 @@ img.photorefnoborder { } .trextrafieldseparator td { /* border-bottom: 2px solid rgb() !important; */ - border-bottom: 2px solid rgb() !important; + border-bottom: 2px dashed rgb() !important; } .tdhrthin { diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 6fd50fa42b3..332b4964a94 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -1562,6 +1562,10 @@ img.photorefnoborder { .underbanner { border-bottom: px solid rgb(); } + +.trextrafieldseparator td { + border-bottom: 1px solid rgb() !important; +} .tdhrthin { margin: 0; padding-bottom: 0 !important; From bfa7f22209ecc36cb4c12bd2b0ab20b742645974 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Wed, 22 May 2019 11:53:36 +0200 Subject: [PATCH 629/828] FIX missing "dropdown-icon" replacement --- htdocs/main.inc.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 5456e2ce1eb..4e1a6ecf01d 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -1741,7 +1741,7 @@ function top_menu_user(User $user, Translate $langs) $userImage = Form::showphoto('userphoto', $user, 0, 0, 0, 'photouserphoto userphoto', 'small', 0, 1); $userDropDownImage = Form::showphoto('userphoto', $user, 0, 0, 0, 'dropdown-user-image', 'small', 0, 1); } - else{ + else { $nophoto='/public/theme/common/user_anonymous.png'; if ($user->gender == 'man') $nophoto='/public/theme/common/user_man.png'; if ($user->gender == 'woman') $nophoto='/public/theme/common/user_woman.png'; @@ -1755,7 +1755,7 @@ function top_menu_user(User $user, Translate $langs) $dropdownBody.= '
'; // login infos - if (!empty($user->admin)) { + if (! empty($user->admin)) { $dropdownBody.= '
' . $langs->trans("Administrator").': '.yn($user->admin); } if (! empty($user->socid)) // Add thirdparty for external users @@ -1808,7 +1808,7 @@ function top_menu_user(User $user, Translate $langs) $profilName = $user->getFullName($langs).' ('.$user->login.')'; - if($user->admin){ + if (! empty($user->admin)) { $profilName = ' '.$profilName; } @@ -1868,6 +1868,8 @@ function top_menu_user(User $user, Translate $langs) if (!$(event.target).closest("#topmenu-login-dropdown").length) { // Hide the menus. $("#topmenu-login-dropdown").removeClass("open"); + $("#dropdown-icon-down").show(); // use show/hide instead toggle for avoid conflict + $("#dropdown-icon-up").hide(); // use show/hide instead toggle for avoid conflict } }); From 64d1ebf59cd6ee27117cca10fc552257d0e17ea4 Mon Sep 17 00:00:00 2001 From: "atm-florian.m" Date: Thu, 4 Jul 2019 15:06:39 +0200 Subject: [PATCH 630/828] FIX: on shipment delete confirm dialog, a new checkbox allows the user to choose if they want their stock re-incremented after the deletion. --- htdocs/expedition/card.php | 24 ++++++++++++++++++-- htdocs/expedition/class/expedition.class.php | 4 ++-- htdocs/langs/fr_FR/sendings.lang | 2 ++ 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/htdocs/expedition/card.php b/htdocs/expedition/card.php index aa85132b243..ed6b0227f91 100644 --- a/htdocs/expedition/card.php +++ b/htdocs/expedition/card.php @@ -468,7 +468,8 @@ if (empty($reshook)) else if ($action == 'confirm_delete' && $confirm == 'yes' && $user->rights->expedition->supprimer) { - $result = $object->delete(); + $also_update_stock = GETPOST('alsoUpdateStock', 'alpha') ?: 0; + $result = $object->delete($also_update_stock); if ($result > 0) { header("Location: ".DOL_URL_ROOT.'/expedition/index.php'); @@ -1648,7 +1649,26 @@ else if ($id || $ref) // Confirm deleteion if ($action == 'delete') { - $formconfirm=$form->formconfirm($_SERVER['PHP_SELF'].'?id='.$object->id,$langs->trans('DeleteSending'),$langs->trans("ConfirmDeleteSending",$object->ref),'confirm_delete','',0,1); + $formquestion = array(); + if ($object->statut == Expedition::STATUS_CLOSED && !empty($conf->global->STOCK_CALCULATE_ON_SHIPMENT_CLOSE)) { + $formquestion = array( + array( + 'label' => $langs->trans('ShipmentIncrementStockOnDelete'), + 'name' => 'alsoUpdateStock', + 'type' => 'checkbox', + 'value' => 0 + ), + ); + } + $formconfirm=$form->formconfirm( + $_SERVER['PHP_SELF'].'?id='.$object->id, + $langs->trans('DeleteSending'), + $langs->trans("ConfirmDeleteSending",$object->ref), + 'confirm_delete', + $formquestion, + 0, + 1 + ); } // Confirmation validation diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php index 3ab96fed1fa..814d8ccc5a1 100644 --- a/htdocs/expedition/class/expedition.class.php +++ b/htdocs/expedition/class/expedition.class.php @@ -1079,7 +1079,7 @@ class Expedition extends CommonObject * * @return int >0 if OK, 0 if deletion done but failed to delete files, <0 if KO */ - function delete() + function delete($also_update_stock = false) { global $conf, $langs, $user; @@ -1111,7 +1111,7 @@ class Expedition extends CommonObject } // Stock control - if (! $error && $conf->stock->enabled && $conf->global->STOCK_CALCULATE_ON_SHIPMENT && $this->statut > self::STATUS_DRAFT) + if (! $error && $conf->stock->enabled && $conf->global->STOCK_CALCULATE_ON_SHIPMENT && $this->statut > self::STATUS_DRAFT && $also_update_stock) { require_once(DOL_DOCUMENT_ROOT."/product/stock/class/mouvementstock.class.php"); diff --git a/htdocs/langs/fr_FR/sendings.lang b/htdocs/langs/fr_FR/sendings.lang index 1071d5f23f9..4f4bfc514e2 100644 --- a/htdocs/langs/fr_FR/sendings.lang +++ b/htdocs/langs/fr_FR/sendings.lang @@ -60,6 +60,8 @@ NoProductToShipFoundIntoStock=Aucun produit à expédier n'a été trouver dans WeightVolShort=Poids/vol. ValidateOrderFirstBeforeShipment=Vous devez d'abord valider la commande pour pouvoir créer une expédition. +ShipmentIncrementStockOnDelete=Remettre en stock les éléments de cette expédition + # Sending methods # ModelDocument DocumentModelTyphon=Modèle de bon de réception/livraison complet (logo…) From f2c1568d0939125d81007dec93f1cced15ac285f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 15:43:05 +0200 Subject: [PATCH 631/828] NEW Extrafields separator can be collapsed or not --- htdocs/core/tpl/admin_extrafields_add.tpl.php | 31 ++++++++------- .../core/tpl/admin_extrafields_edit.tpl.php | 39 +++++++++++-------- htdocs/langs/en_US/admin.lang | 1 + 3 files changed, 39 insertions(+), 32 deletions(-) diff --git a/htdocs/core/tpl/admin_extrafields_add.tpl.php b/htdocs/core/tpl/admin_extrafields_add.tpl.php index 04720004492..5d55009737e 100644 --- a/htdocs/core/tpl/admin_extrafields_add.tpl.php +++ b/htdocs/core/tpl/admin_extrafields_add.tpl.php @@ -44,7 +44,7 @@ $langs->load("modulebuilder"); jQuery(document).ready(function() { function init_typeoffields(type) { - console.log("We select a new type = "+type); + console.log("select a new type (add) = "+type); var size = jQuery("#size"); var computed_value = jQuery("#computed_value"); var langfile = jQuery("#langfile"); @@ -68,7 +68,6 @@ $langs->load("modulebuilder"); ?> // Case of computed field - console.log(type); if (type == '' || type == 'varchar' || type == 'int' || type == 'double' || type == 'price') { jQuery("tr.extra_computed_value").show(); } else { @@ -96,18 +95,19 @@ $langs->load("modulebuilder"); else if (type == 'text') { size.val('2000').removeAttr('disabled'); unique.prop('disabled', true).removeAttr('checked'); jQuery("#value_choice").hide();jQuery("#helpchkbxlst").hide(); } else if (type == 'html') { size.val('2000').removeAttr('disabled'); unique.prop('disabled', true).removeAttr('checked'); jQuery("#value_choice").hide();jQuery("#helpchkbxlst").hide(); } else if (type == 'varchar') { size.val('255').removeAttr('disabled'); unique.removeAttr('disabled'); jQuery("#value_choice").hide();jQuery("#helpchkbxlst").hide(); } - else if (type == 'password') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); required.val('').prop('disabled', true); default_value.val('').prop('disabled', true); jQuery("#value_choice").show();jQuery("#helpselect").hide();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").hide();jQuery("#helplink").hide();jQuery("#helppassword").show();} + else if (type == 'password') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); required.val('').prop('disabled', true); default_value.val('').prop('disabled', true); jQuery("#value_choice").show(); jQuery(".spanforparamtooltip").hide(); jQuery("#helppassword").show();} else if (type == 'boolean') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").hide();jQuery("#helpchkbxlst").hide();} else if (type == 'price') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").hide();jQuery("#helpchkbxlst").hide();} - else if (type == 'select') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show();jQuery("#helpselect").show();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").hide();jQuery("#helplink").hide();jQuery("#helppassword").hide();} - else if (type == 'sellist') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show();jQuery("#helpselect").hide();jQuery("#helpsellist").show();jQuery("#helpchkbxlst").hide();jQuery("#helplink").hide();jQuery("#helppassword").hide();} - else if (type == 'radio') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show();jQuery("#helpselect").show();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").hide();jQuery("#helplink").hide();jQuery("#helppassword").hide();} - else if (type == 'checkbox') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show();jQuery("#helpselect").show();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").hide();jQuery("#helplink").hide();jQuery("#helppassword").hide();} - else if (type == 'chkbxlst') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show();jQuery("#helpselect").hide();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").show();jQuery("#helplink").hide();jQuery("#helppassword").hide();} - else if (type == 'link') { size.val('').prop('disabled', true); unique.removeAttr('disabled'); jQuery("#value_choice").show();jQuery("#helpselect").hide();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").hide();jQuery("#helplink").show();jQuery("#helppassword").hide();} + else if (type == 'select') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show(); jQuery(".spanforparamtooltip").hide(); jQuery("#helpselect").show();} + else if (type == 'sellist') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show(); jQuery(".spanforparamtooltip").hide(); jQuery("#helpsellist").show();} + else if (type == 'radio') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show(); jQuery(".spanforparamtooltip").hide(); jQuery("#helpselect").show();} + else if (type == 'checkbox') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show(); jQuery(".spanforparamtooltip").hide(); jQuery("#helpselect").show();} + else if (type == 'chkbxlst') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show(); jQuery(".spanforparamtooltip").hide(); jQuery("#helpchkbxlst").show();} + else if (type == 'link') { size.val('').prop('disabled', true); unique.removeAttr('disabled'); jQuery("#value_choice").show(); jQuery(".spanforparamtooltip").hide(); jQuery("#helplink").show();} else if (type == 'separate') { langfile.val('').prop('disabled',true);size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); required.val('').prop('disabled', true); - jQuery("#value_choice").show();jQuery("#helpselect").hide();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").hide();jQuery("#helplink").hide();jQuery("#helppassword").hide(); + jQuery("#value_choice").show(); + jQuery(".spanforparamtooltip").hide(); jQuery("#helpseparate").show(); } else { // type = string size.val('').prop('disabled', true); @@ -165,11 +165,12 @@ $langs->load("modulebuilder"); - textwithpicto('', $langs->trans("ExtrafieldParamHelpselect"), 1, 0, '', 0, 2, 'helpvalue1')?> - textwithpicto('', $langs->trans("ExtrafieldParamHelpsellist"), 1, 0, '', 0, 2, 'helpvalue2')?> - textwithpicto('', $langs->trans("ExtrafieldParamHelpchkbxlst"), 1, 0, '', 0, 2, 'helpvalue3')?> - textwithpicto('', $langs->trans("ExtrafieldParamHelplink"), 1, 0, '', 0, 2, 'helpvalue4')?> - textwithpicto('', $langs->trans("ExtrafieldParamHelpPassword"), 1, 0, '', 0, 2, 'helpvalue5')?> + textwithpicto('', $langs->trans("ExtrafieldParamHelpselect"), 1, 0, '', 0, 2, 'helpvalue1')?> + textwithpicto('', $langs->trans("ExtrafieldParamHelpsellist"), 1, 0, '', 0, 2, 'helpvalue2')?> + textwithpicto('', $langs->trans("ExtrafieldParamHelpchkbxlst"), 1, 0, '', 0, 2, 'helpvalue3')?> + textwithpicto('', $langs->trans("ExtrafieldParamHelplink"), 1, 0, '', 0, 2, 'helpvalue4')?> + textwithpicto('', $langs->trans("ExtrafieldParamHelpPassword"), 1, 0, '', 0, 2, 'helpvalue5')?> + textwithpicto('', $langs->trans("ExtrafieldParamHelpSeparator"), 1, 0, '', 0, 2, 'helpvalue6')?> diff --git a/htdocs/core/tpl/admin_extrafields_edit.tpl.php b/htdocs/core/tpl/admin_extrafields_edit.tpl.php index 7ed41af9281..119d3db7478 100644 --- a/htdocs/core/tpl/admin_extrafields_edit.tpl.php +++ b/htdocs/core/tpl/admin_extrafields_edit.tpl.php @@ -43,7 +43,7 @@ $langs->load("modulebuilder"); jQuery(document).ready(function() { function init_typeoffields(type) { - console.log("select new type "+type); + console.log("select a new type (edit) = "+type); var size = jQuery("#size"); var computed_value = jQuery("#computed_value"); var langfile = jQuery("#langfile"); @@ -54,7 +54,7 @@ $langs->load("modulebuilder"); var list = jQuery("#list"); var totalizable = jQuery("#totalizable"); load("modulebuilder"); else if (type == 'text') { size.removeAttr('disabled'); unique.prop('disabled', true).removeAttr('checked'); jQuery("#value_choice").hide();jQuery("#helpchkbxlst").hide(); } else if (type == 'html') { size.removeAttr('disabled'); unique.prop('disabled', true).removeAttr('checked'); jQuery("#value_choice").hide();jQuery("#helpchkbxlst").hide(); } else if (type == 'varchar') { size.removeAttr('disabled'); unique.removeAttr('disabled'); jQuery("#value_choice").hide();jQuery("#helpchkbxlst").hide(); } - else if (type == 'password') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); required.val('').prop('disabled', true); default_value.val('').prop('disabled', true); jQuery("#value_choice").show();jQuery("#helpselect").hide();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").hide();jQuery("#helplink").hide();jQuery("#helppassword").show();} - else if (type == 'boolean') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").hide();jQuery("#helpchkbxlst").hide();} - else if (type == 'price') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").hide();jQuery("#helpchkbxlst").hide();} - else if (type == 'select') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show();jQuery("#helpselect").show();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").hide();jQuery("#helplink").hide();jQuery("#helppassword").hide();} - else if (type == 'sellist') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show();jQuery("#helpselect").hide();jQuery("#helpsellist").show();jQuery("#helpchkbxlst").hide();jQuery("#helplink").hide();jQuery("#helppassword").hide();} - else if (type == 'radio') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show();jQuery("#helpselect").show();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").hide();jQuery("#helplink").hide();jQuery("#helppassword").hide();} - else if (type == 'checkbox') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show();jQuery("#helpselect").show();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").hide();jQuery("#helplink").hide();jQuery("#helppassword").hide();} - else if (type == 'chkbxlst') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show();jQuery("#helpselect").hide();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").show();jQuery("#helplink").hide();jQuery("#helppassword").hide();} - else if (type == 'link') { size.val('').prop('disabled', true); unique.removeAttr('disabled'); jQuery("#value_choice").show();jQuery("#helpselect").hide();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").hide();jQuery("#helplink").show();jQuery("#helppassword").hide();} - else if (type == 'separate') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); required.val('').prop('disabled', true); default_value.val('').prop('disabled', true); jQuery("#value_choice").show();jQuery("#helpselect").hide();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").hide();jQuery("#helplink").hide();jQuery("#helppassword").hide();} + else if (type == 'password') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); required.val('').prop('disabled', true); default_value.val('').prop('disabled', true); jQuery("#value_choice").show(); jQuery(".spanforparamtooltip").hide(); jQuery("#helppassword").show();} + else if (type == 'boolean') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").hide(); jQuery("#helpchkbxlst").hide();} + else if (type == 'price') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").hide(); jQuery("#helpchkbxlst").hide();} + else if (type == 'select') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show(); jQuery(".spanforparamtooltip").hide(); jQuery("#helpselect").show();} + else if (type == 'sellist') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show(); jQuery(".spanforparamtooltip").hide(); jQuery("#helpsellist").show();} + else if (type == 'radio') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show(); jQuery(".spanforparamtooltip").hide(); jQuery("#helpselect").show();} + else if (type == 'checkbox') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show(); jQuery(".spanforparamtooltip").hide(); jQuery("#helpselect").show();} + else if (type == 'chkbxlst') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show(); jQuery(".spanforparamtooltip").hide(); jQuery("#helpchkbxlst").show();} + else if (type == 'link') { size.val('').prop('disabled', true); unique.removeAttr('disabled'); jQuery("#value_choice").show(); jQuery(".spanforparamtooltip").hide(); jQuery("#helplink").show();} + else if (type == 'separate') { + size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); required.val('').prop('disabled', true); default_value.val('').prop('disabled', true); + jQuery("#value_choice").show(); + jQuery(".spanforparamtooltip").hide(); jQuery("#helpseparate").show(); + } else { // type = string size.val('').prop('disabled', true); unique.removeAttr('disabled'); @@ -229,11 +233,12 @@ else - textwithpicto('', $langs->trans("ExtrafieldParamHelpselect"), 1, 0, '', 0, 2, 'helpvalue1')?> - textwithpicto('', $langs->trans("ExtrafieldParamHelpsellist"), 1, 0, '', 0, 2, 'helpvalue2')?> - textwithpicto('', $langs->trans("ExtrafieldParamHelpchkbxlst"), 1, 0, '', 0, 2, 'helpvalue3')?> - textwithpicto('', $langs->trans("ExtrafieldParamHelplink"), 1, 0, '', 0, 2, 'helpvalue4')?> - textwithpicto('', $langs->trans("ExtrafieldParamHelpPassword"), 1, 0, '', 0, 2, 'helpvalue5')?> + textwithpicto('', $langs->trans("ExtrafieldParamHelpselect"), 1, 0, '', 0, 2, 'helpvalue1')?> + textwithpicto('', $langs->trans("ExtrafieldParamHelpsellist"), 1, 0, '', 0, 2, 'helpvalue2')?> + textwithpicto('', $langs->trans("ExtrafieldParamHelpchkbxlst"), 1, 0, '', 0, 2, 'helpvalue3')?> + textwithpicto('', $langs->trans("ExtrafieldParamHelplink"), 1, 0, '', 0, 2, 'helpvalue4')?> + textwithpicto('', $langs->trans("ExtrafieldParamHelpPassword"), 1, 0, '', 0, 2, 'helpvalue5')?> + textwithpicto('', $langs->trans("ExtrafieldParamHelpSeparator"), 1, 0, '', 0, 2, 'helpvalue6')?> diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 7480550195a..e3aec89e613 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -429,6 +429,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS From 1de499a320f7ca5bd4726ebe3d4f3eafdab1cfa8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 15:52:03 +0200 Subject: [PATCH 632/828] Update card.php --- htdocs/fourn/commande/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/fourn/commande/card.php b/htdocs/fourn/commande/card.php index ff1b1020ae6..2c3df524109 100644 --- a/htdocs/fourn/commande/card.php +++ b/htdocs/fourn/commande/card.php @@ -2547,7 +2547,7 @@ elseif (! empty($object->id)) print load_fiche_titre($langs->trans("ToOrder"), '', ''); print ''; //print ''; - print '\n"; - print "'; } // Town - if (! empty($arrayfields['s.town']['checked'])) print ''; + if (! empty($arrayfields['s.town']['checked'])) print ''; // Zip - if (! empty($arrayfields['s.zip']['checked'])) print ''; + if (! empty($arrayfields['s.zip']['checked'])) print ''; // State if (! empty($arrayfields['state.nom']['checked'])) { print ''; } // Country @@ -1004,7 +1004,7 @@ if ($resql) // Town if (! empty($arrayfields['s.town']['checked'])) { - print ''; if (! $i) $totalarray['nbfield']++; @@ -1012,7 +1012,7 @@ if ($resql) // Zip if (! empty($arrayfields['s.zip']['checked'])) { - print ''; if (! $i) $totalarray['nbfield']++; From b691396fceedcda48a57550efd694c3e9724bf44 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 16:19:24 +0200 Subject: [PATCH 636/828] Update admin_extrafields_add.tpl.php --- htdocs/core/tpl/admin_extrafields_add.tpl.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/htdocs/core/tpl/admin_extrafields_add.tpl.php b/htdocs/core/tpl/admin_extrafields_add.tpl.php index 5bd161c9893..0db5d6afb68 100644 --- a/htdocs/core/tpl/admin_extrafields_add.tpl.php +++ b/htdocs/core/tpl/admin_extrafields_add.tpl.php @@ -179,7 +179,11 @@ $langs->load("modulebuilder"); - +global->STORE_COMPUTED_EXTRAFIELDS)) { > + + + + From f14b0b4fcc79fa01ff5b1fb514ce6bb9c78550f0 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 16:20:01 +0200 Subject: [PATCH 637/828] Update admin_extrafields_add.tpl.php --- htdocs/core/tpl/admin_extrafields_add.tpl.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/tpl/admin_extrafields_add.tpl.php b/htdocs/core/tpl/admin_extrafields_add.tpl.php index 0db5d6afb68..834462aab5f 100644 --- a/htdocs/core/tpl/admin_extrafields_add.tpl.php +++ b/htdocs/core/tpl/admin_extrafields_add.tpl.php @@ -179,7 +179,7 @@ $langs->load("modulebuilder"); -global->STORE_COMPUTED_EXTRAFIELDS)) { > +global->MAIN_STORE_COMPUTED_EXTRAFIELDS)) { > From 0d738a04f9d617b4efe0a6b1d2d24e48feaeab0c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 16:22:10 +0200 Subject: [PATCH 638/828] Update admin_extrafields_edit.tpl.php --- htdocs/core/tpl/admin_extrafields_edit.tpl.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/htdocs/core/tpl/admin_extrafields_edit.tpl.php b/htdocs/core/tpl/admin_extrafields_edit.tpl.php index 2acdf7e864f..17399b0a824 100644 --- a/htdocs/core/tpl/admin_extrafields_edit.tpl.php +++ b/htdocs/core/tpl/admin_extrafields_edit.tpl.php @@ -243,7 +243,11 @@ else - +global->MAIN_STORE_COMPUTED_EXTRAFIELDS)) { ?> + + + + From 4c03aa6547bd927da00d023746ca26a84b2c9f4f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 17:03:36 +0200 Subject: [PATCH 639/828] Fix selection of profile for demo --- htdocs/public/demo/index.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/htdocs/public/demo/index.php b/htdocs/public/demo/index.php index 0f6e21f0984..62de885eac6 100644 --- a/htdocs/public/demo/index.php +++ b/htdocs/public/demo/index.php @@ -97,7 +97,7 @@ if (empty($reshook)) ), // All demo profile array('default'=>'0', 'key'=>'profdemoall','label'=>'ChooseYourDemoProfilMore', - 'disablemodules'=>'adherent,don,externalsite,mailmanspip', + 'disablemodules'=>'adherent,don,externalsite,mailmanspip,takepos', //'icon'=>DOL_URL_ROOT.'/public/demo/dolibarr_screenshot9.png' 'icon'=>DOL_URL_ROOT.'/public/demo/demo-profile-all.jpg' ) @@ -106,10 +106,10 @@ if (empty($reshook)) // Visible $alwayscheckedmodules=array('barcode','bookmark','categorie','externalrss','fckeditor','geoipmaxmind','gravatar','memcached','syslog','user','webservices'); // Technical module we always want - $alwaysuncheckedmodules=array('dav','dynamicprices','incoterm','loan','multicurrency','paybox','paypal','stripe','google','printing','scanner','skype','takepos','workflow','website'); // Module we dont want by default + $alwaysuncheckedmodules=array('dav','dynamicprices','incoterm','loan','multicurrency','paybox','paypal','stripe','google','printing','scanner','skype','website'); // Module we dont want by default // Not visible $alwayshiddencheckedmodules=array('accounting','api','barcode','blockedlog','bookmark','clicktodial','comptabilite','cron','document','domain','externalrss','externalsite','fckeditor','geoipmaxmind','gravatar','label','ldap', - 'mailmanspip','notification','oauth','syslog','user','webservices', + 'mailmanspip','notification','oauth','syslog','user','webservices','workflow', // Extended modules 'memcached','numberwords','zipautofillfr'); $alwayshiddenuncheckedmodules=array('debugbar','emailcollector','ftp','hrm','modulebuilder','webservicesclient','websites', @@ -392,10 +392,10 @@ foreach ($demoprofiles as $profilearray) //if ($modulo == 0) print ''; print ''; print '
'; - print '
'.$val->getName().'

'; + print '>
'; print '
'; //if ($modulo == ($nbcolsmod - 1)) print ''; $j++; From 01b1b2e4a7879319cc46c81b818f3dda3b6aa9c0 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 17:07:26 +0200 Subject: [PATCH 640/828] Fix syntax error --- htdocs/core/tpl/admin_extrafields_add.tpl.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/tpl/admin_extrafields_add.tpl.php b/htdocs/core/tpl/admin_extrafields_add.tpl.php index 552d74955b2..360db1e94b0 100644 --- a/htdocs/core/tpl/admin_extrafields_add.tpl.php +++ b/htdocs/core/tpl/admin_extrafields_add.tpl.php @@ -180,9 +180,9 @@ $langs->load("modulebuilder"); -global->MAIN_STORE_COMPUTED_EXTRAFIELDS)) { > +global->MAIN_STORE_COMPUTED_EXTRAFIELDS)) { ?> - + From c3715646e746bd8b4ebeaee71b4b8b314d4857df Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 21:29:27 +0200 Subject: [PATCH 641/828] Missing trans --- htdocs/langs/en_US/companies.lang | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/langs/en_US/companies.lang b/htdocs/langs/en_US/companies.lang index ae189111c15..616b565496a 100644 --- a/htdocs/langs/en_US/companies.lang +++ b/htdocs/langs/en_US/companies.lang @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=None Vendor=Vendor +Supplier=Vendor AddContact=Create contact AddContactAddress=Create contact/address EditContact=Edit contact From 3d076d8bf91d3b0512de2d34588144afcace2757 Mon Sep 17 00:00:00 2001 From: ATM-Nicolas Date: Fri, 5 Jul 2019 11:15:43 +0200 Subject: [PATCH 642/828] FIX : We must save code instead of value in database for template invoice modelpdf --- htdocs/compta/facture/fiche-rec.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/facture/fiche-rec.php b/htdocs/compta/facture/fiche-rec.php index 8c45012085d..31a4affb95d 100644 --- a/htdocs/compta/facture/fiche-rec.php +++ b/htdocs/compta/facture/fiche-rec.php @@ -1423,8 +1423,8 @@ else include_once DOL_DOCUMENT_ROOT . '/core/modules/facture/modules_facture.php'; $list = array(); $models = ModelePDFFactures::liste_modeles($db); - foreach ($models as $model) { - $list[] = $model . ':' . $model; + foreach ($models as $k => $model) { + $list[] = $k . ':' . $model; } $select = 'select;'.implode(',', $list); print $form->editfieldval($langs->trans("Model"), 'modelpdf', $object->modelpdf, $object, $user->rights->facture->creer, $select); From e3359c6f0fd861515e3c87b3fff52b1519e19da9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 5 Jul 2019 11:21:04 +0200 Subject: [PATCH 643/828] FIX Can't submit a ticket from public interface --- htdocs/core/class/html.formticket.class.php | 2 +- htdocs/core/lib/ticket.lib.php | 2 +- htdocs/public/ticket/create_ticket.php | 35 +++++++++++-------- htdocs/public/ticket/index.php | 8 ++--- htdocs/public/ticket/list.php | 15 ++++---- htdocs/public/ticket/view.php | 14 ++++---- htdocs/theme/eldy/global.inc.php | 3 ++ htdocs/theme/md/style.css.php | 38 +++++++++++---------- 8 files changed, 65 insertions(+), 52 deletions(-) diff --git a/htdocs/core/class/html.formticket.class.php b/htdocs/core/class/html.formticket.class.php index 1d681d2672b..6f712fa6c4d 100644 --- a/htdocs/core/class/html.formticket.class.php +++ b/htdocs/core/class/html.formticket.class.php @@ -419,7 +419,7 @@ class FormTicket if ($withdolfichehead) dol_fiche_end(); - print '
'; + print '
'; print ''; if ($this->withcancel) { diff --git a/htdocs/core/lib/ticket.lib.php b/htdocs/core/lib/ticket.lib.php index c5791e5c89e..9e0c357be05 100644 --- a/htdocs/core/lib/ticket.lib.php +++ b/htdocs/core/lib/ticket.lib.php @@ -159,7 +159,7 @@ function llxHeaderTicket($title, $head = "", $disablejs = 0, $disablehead = 0, $ top_htmlhead($head, $title, $disablejs, $disablehead, $arrayofjs, $arrayofcss); // Show html headers - print ''; + print ''; if (! empty($conf->global->TICKET_SHOW_COMPANY_LOGO) || ! empty($conf->global->TICKET_PUBLIC_INTERFACE_TOPIC)) { print '
'; diff --git a/htdocs/public/ticket/create_ticket.php b/htdocs/public/ticket/create_ticket.php index 42774772eb5..b663aaa43c3 100644 --- a/htdocs/public/ticket/create_ticket.php +++ b/htdocs/public/ticket/create_ticket.php @@ -59,7 +59,7 @@ $extralabels = $extrafields->fetch_name_optionals_label($object->table_element); */ // Add file in email form -if (GETPOST('addfile') && !GETPOST('add_ticket')) { +if (GETPOST('addfile', 'alpha') && ! GETPOST('add', 'alpha')) { ////$res = $object->fetch('','',GETPOST('track_id')); ////if($res > 0) ////{ @@ -77,7 +77,7 @@ if (GETPOST('addfile') && !GETPOST('add_ticket')) { } // Remove file -if (GETPOST('removedfile') && !GETPOST('add_ticket')) { +if (GETPOST('removedfile', 'alpha') && !GETPOST('add', 'alpha')) { include_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php'; @@ -89,7 +89,7 @@ if (GETPOST('removedfile') && !GETPOST('add_ticket')) { dol_remove_file_process($_POST['removedfile'], 0, 0); $action = 'create_ticket'; } -if ($action == 'create_ticket' && GETPOST('add_ticket')) { +if ($action == 'create_ticket' && GETPOST('add', 'alpha')) { $error = 0; $origin_email = GETPOST('email', 'alpha'); if (empty($origin_email)) { @@ -311,7 +311,13 @@ if ($action == 'create_ticket' && GETPOST('add_ticket')) { $formmail->remove_attached_files($i); } - setEventMessages($langs->trans('YourTicketSuccessfullySaved'), null, 'mesgs'); + //setEventMessages($langs->trans('YourTicketSuccessfullySaved'), null, 'mesgs'); + + // Make a redirect to avoid to have ticket submitted twice if we make back + setEventMessages($langs->trans('MesgInfosPublicTicketCreatedWithTrackId', '' . $object->track_id . ''), null, 'warnings'); + setEventMessages($langs->trans('PleaseRememberThisId'), null, 'warnings'); + header("Location: index.php"); + exit; } } else { setEventMessages($object->error, $object->errors, 'errors'); @@ -324,21 +330,23 @@ if ($action == 'create_ticket' && GETPOST('add_ticket')) { * View */ -$arrayofjs = array(); -$arrayofcss = array('/opensurvey/css/style.css', '/ticket/css/styles.css.php'); - -llxHeaderTicket($langs->trans("CreateTicket"), "", 0, 0, $arrayofjs, $arrayofcss); - $form = new Form($db); $formticket = new FormTicket($db); -if (!$conf->global->TICKET_ENABLE_PUBLIC_INTERFACE) { +if (!$conf->global->TICKET_ENABLE_PUBLIC_INTERFACE) +{ print '
' . $langs->trans('TicketPublicInterfaceForbidden') . '
'; $db->close(); exit(); } -print '
'; +$arrayofjs = array(); +$arrayofcss = array('/opensurvey/css/style.css', '/ticket/css/styles.css.php'); + +llxHeaderTicket($langs->trans("CreateTicket"), "", 0, 0, $arrayofjs, $arrayofcss); + + +print '
'; if ($action != "infos_success") { $formticket->withfromsocid = isset($socid) ? $socid : $user->societe_id; @@ -361,11 +369,8 @@ if ($action != "infos_success") { print '
' . $langs->trans('TicketPublicInfoCreateTicket') . '
'; $formticket->showForm(); -} else { - print '
' . $langs->trans('MesgInfosPublicTicketCreatedWithTrackId', '' . $object->track_id . ''); - print '
'; - print $langs->trans('PleaseRememberThisId'); } + print '
'; // End of page diff --git a/htdocs/public/ticket/index.php b/htdocs/public/ticket/index.php index a3e4d63a4bc..2e138312102 100644 --- a/htdocs/public/ticket/index.php +++ b/htdocs/public/ticket/index.php @@ -55,18 +55,18 @@ $action = GETPOST('action', 'alpha'); $form = new Form($db); $formticket = new FormTicket($db); -$arrayofjs = array(); -$arrayofcss = array('/ticket/css/styles.css.php'); - if (empty($conf->global->TICKET_ENABLE_PUBLIC_INTERFACE)) { print $langs->trans('TicketPublicInterfaceForbidden'); exit; } +$arrayofjs = array(); +$arrayofcss = array('/ticket/css/styles.css.php'); + llxHeaderTicket($langs->trans("Tickets"), "", 0, 0, $arrayofjs, $arrayofcss); -print '
'; +print '
'; print '

' . ($conf->global->TICKET_PUBLIC_TEXT_HOME ? $conf->global->TICKET_PUBLIC_TEXT_HOME : $langs->trans("TicketPublicDesc")) . '

'; print '
'; print '
' . dol_escape_htmltag($langs->trans("CreateTicket")) . '
'; diff --git a/htdocs/public/ticket/list.php b/htdocs/public/ticket/list.php index 443af658cb5..9da0a4272e1 100644 --- a/htdocs/public/ticket/list.php +++ b/htdocs/public/ticket/list.php @@ -155,21 +155,23 @@ $user_assign = new User($db); $user_create = new User($db); $formTicket = new FormTicket($db); +if (!$conf->global->TICKET_ENABLE_PUBLIC_INTERFACE) { + print '
' . $langs->trans('TicketPublicInterfaceForbidden') . '
'; + $db->close(); + exit(); +} + $arrayofjs = array(); $arrayofcss = array('/ticket/css/styles.css.php'); llxHeaderTicket($langs->trans("Tickets"), "", 0, 0, $arrayofjs, $arrayofcss); -if (!$conf->global->TICKET_ENABLE_PUBLIC_INTERFACE) { - print '
' . $langs->trans('TicketPublicInterfaceForbidden') . '
'; - $db->close(); - exit(); -} -print '
'; +print '
'; if ($action == "view_ticketlist") { + print '
'; if ($display_ticket_list) { // Filters $search_fk_status = GETPOST("search_fk_status", 'alpha'); @@ -676,6 +678,7 @@ if ($action == "view_ticketlist") } } else { print '

' . $langs->trans("TicketPublicMsgViewLogIn") . '

'; + print '
'; print '
'; print ''; diff --git a/htdocs/public/ticket/view.php b/htdocs/public/ticket/view.php index a0311ce1430..4886a0cc3be 100644 --- a/htdocs/public/ticket/view.php +++ b/htdocs/public/ticket/view.php @@ -133,18 +133,18 @@ if ($action == "view_ticket" || $action == "add_message" || $action == "close" | $form = new Form($db); $formticket = new FormTicket($db); +if (!$conf->global->TICKET_ENABLE_PUBLIC_INTERFACE) { + print '
' . $langs->trans('TicketPublicInterfaceForbidden') . '
'; + $db->close(); + exit(); +} + $arrayofjs = array(); $arrayofcss = array('/ticket/css/styles.css.php'); llxHeaderTicket($langs->trans("Tickets"), "", 0, 0, $arrayofjs, $arrayofcss); -if (!$conf->global->TICKET_ENABLE_PUBLIC_INTERFACE) { - print '
' . $langs->trans('TicketPublicInterfaceForbidden') . '
'; - $db->close(); - exit(); -} - -print '
'; +print '
'; if ($action == "view_ticket" || $action == "add_message" || $action == "close" || $action == "confirm_public_close") { if ($display_ticket) { diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 6f4fd4fa660..44c66a979d5 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -5248,6 +5248,9 @@ div.tabsElem a.tab { /* Ticket module */ /* ============================================================================== */ +.publicnewticketform { + margin-top: 25px !important; +} #cd-timeline { position: relative; padding: 2em 0; diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 332b4964a94..c15bbf26eef 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -1936,7 +1936,6 @@ a.tmenuimage:focus { } - /* Login */ .bodylogin @@ -5388,7 +5387,6 @@ border-top-right-radius: 6px; } - /* ============================================================================== */ /* Public */ /* ============================================================================== */ @@ -5402,26 +5400,14 @@ border-top-right-radius: 6px; } - -::-webkit-scrollbar { - width: 12px; -} -::-webkit-scrollbar-button { - background: #aaa -} -::-webkit-scrollbar-track-piece { - background: #fff -} -::-webkit-scrollbar-thumb { - background: #ddd -}​ - - - /* ============================================================================== */ /* Ticket module */ /* ============================================================================== */ +.publicnewticketform { + margin-top: 25px !important; +} + #cd-timeline { position: relative; padding: 2em 0; @@ -5833,6 +5819,22 @@ border-top-right-radius: 6px; +/* This must be at end */ +::-webkit-scrollbar { + width: 12px; +} +::-webkit-scrollbar-button { + background: #aaa; +} +::-webkit-scrollbar-track-piece { + background: #fff; +} +::-webkit-scrollbar-thumb { + background: #ddd; +}​ + + + global->MAIN_DISABLE_FONT_AWESOME_5)) { ?> Date: Fri, 5 Jul 2019 11:45:10 +0200 Subject: [PATCH 644/828] Fix css --- htdocs/public/ticket/view.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/public/ticket/view.php b/htdocs/public/ticket/view.php index 4886a0cc3be..69a77413b2e 100644 --- a/htdocs/public/ticket/view.php +++ b/htdocs/public/ticket/view.php @@ -298,7 +298,7 @@ if ($action == "view_ticket" || $action == "add_message" || $action == "close" | print ''; } } else { - print '

' . $langs->trans("TicketPublicMsgViewLogIn") . '

'; + print '

' . $langs->trans("TicketPublicMsgViewLogIn") . '

'; print '
'; print ''; From 5c6684bb734fc963838cda82d9d82f40e7bcee25 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 5 Jul 2019 11:53:33 +0200 Subject: [PATCH 645/828] Fix setup of ticket module --- htdocs/admin/ticket_public.php | 29 ++++------------------------- 1 file changed, 4 insertions(+), 25 deletions(-) diff --git a/htdocs/admin/ticket_public.php b/htdocs/admin/ticket_public.php index 1bcff705aef..4e6b6d75e85 100644 --- a/htdocs/admin/ticket_public.php +++ b/htdocs/admin/ticket_public.php @@ -185,12 +185,6 @@ if ($action == 'setvarother') { if (!$res > 0) { $error++; } - - $param_auto_assign = GETPOST('TICKET_AUTO_ASSIGN_USER_CREATE', 'alpha'); - $res = dolibarr_set_const($db, 'TICKET_AUTO_ASSIGN_USER_CREATE', $param_auto_assign, 'chaine', 0, '', $conf->entity); - if (!$res > 0) { - $error++; - } } @@ -260,7 +254,7 @@ if (! empty($conf->global->TICKET_ENABLE_PUBLIC_INTERFACE)) print ''; // Check if email exists - print '
'; + print ''; print ''; + print ''; print ''; + print ''; print ''; + print ''; print ''; } - // Auto assign ticket at user who created it - print ''; - print ''; - print ''; - print ''; - print '
'.$langs->trans("ToOrder").'
'.$langs->trans("OrderDate").''; + print '
'.$langs->trans("OrderDate").''; $date_com = dol_mktime(GETPOST('rehour', 'int'), GETPOST('remin', 'int'), GETPOST('resec', 'int'), GETPOST('remonth', 'int'), GETPOST('reday', 'int'), GETPOST('reyear', 'int')); if (empty($date_com)) $date_com=dol_now(); print $form->selectDate($date_com, '', 1, 1, '', "commande", 1, 1); From fb8c93a69ded1430d62baedf987707be0cec45a5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 16:00:14 +0200 Subject: [PATCH 633/828] FIX Bad sql request --- htdocs/core/lib/files.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index f4a25334e00..3e9b2ba8797 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -2568,7 +2568,7 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity, $accessallowed=1; } $original_file=$conf->fournisseur->facture->dir_output.'/'.$original_file; - $sqlprotectagainstexternals = "SELECT fk_soc as fk_soc FROM ".MAIN_DB_PREFIX."facture_fourn WHERE facnumber='".$db->escape($refname)."' AND entity=".$conf->entity; + $sqlprotectagainstexternals = "SELECT fk_soc as fk_soc FROM ".MAIN_DB_PREFIX."facture_fourn WHERE ref='".$db->escape($refname)."' AND entity=".$conf->entity; } // Wrapping pour les rapport de paiements elseif ($modulepart == 'supplier_payment') From 4e00cfb455d93861e50a770619d5ae2780b6cc9e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 16:02:04 +0200 Subject: [PATCH 634/828] Clean code --- htdocs/core/lib/files.lib.php | 2 +- htdocs/fourn/commande/card.php | 14 ++++++-------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index 8fe5f5b0db4..b578a6f5b8a 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -2568,7 +2568,7 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity, $accessallowed=1; } $original_file=$conf->fournisseur->facture->dir_output.'/'.$original_file; - $sqlprotectagainstexternals = "SELECT fk_soc as fk_soc FROM ".MAIN_DB_PREFIX."facture_fourn WHERE facnumber='".$db->escape($refname)."' AND entity=".$conf->entity; + $sqlprotectagainstexternals = "SELECT fk_soc as fk_soc FROM ".MAIN_DB_PREFIX."facture_fourn WHERE ref='".$db->escape($refname)."' AND entity=".$conf->entity; } // Wrapping pour les rapport de paiements elseif ($modulepart == 'supplier_payment') diff --git a/htdocs/fourn/commande/card.php b/htdocs/fourn/commande/card.php index d96ce6cbd17..bae5741d4ea 100644 --- a/htdocs/fourn/commande/card.php +++ b/htdocs/fourn/commande/card.php @@ -2536,11 +2536,11 @@ elseif (! empty($object->id)) - if ($user->rights->fournisseur->commande->commander && $object->statut == 2 && $action == 'makeorder') + if ($user->rights->fournisseur->commande->commander && $object->statut == CommandeFournisseur::STATUS_ACCEPTED && $action == 'makeorder') { // Set status to ordered (action=commande) print ''."\n"; - print '
'; + print ''; print ''; print ''; @@ -2574,9 +2574,7 @@ elseif (! empty($object->id)) { print '
'; - /* - * Documents generes - */ + // Generated documents $comfournref = dol_sanitizeFileName($object->ref); $file = $conf->fournisseur->dir_output . '/commande/' . $comfournref . '/' . $comfournref . '.pdf'; $relativepath = $comfournref.'/'.$comfournref.'.pdf'; @@ -2594,10 +2592,10 @@ elseif (! empty($object->id)) print '
'; - if ($user->rights->fournisseur->commande->receptionner && ($object->statut == 3 || $object->statut == 4)) + if ($user->rights->fournisseur->commande->receptionner && ($object->statut == CommandeFournisseur::STATUS_ORDERSENT || $object->statut == CommandeFournisseur::STATUS_RECEIVED_PARTIALLY)) { // Set status to received (action=livraison) - print ''."\n"; + print ''."\n"; print ''; print ''; print ''; @@ -2610,7 +2608,7 @@ elseif (! empty($object->id)) print $form->selectDate($datepreselected, '', 1, 1, '', "commande", 1, 1); print "
".$langs->trans("Delivery")."\n"; + print '
'.$langs->trans("Delivery")."\n"; $liv = array(); $liv[''] = ' '; $liv['tot'] = $langs->trans("CompleteOrNoMoreReceptionExpected"); From ed39849d335252923059502df9f1e857b1d13505 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 16:14:10 +0200 Subject: [PATCH 635/828] Fix css --- htdocs/fourn/commande/list.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/htdocs/fourn/commande/list.php b/htdocs/fourn/commande/list.php index 80645e2a486..18ba697bc20 100644 --- a/htdocs/fourn/commande/list.php +++ b/htdocs/fourn/commande/list.php @@ -777,14 +777,14 @@ if ($resql) print ''; - print ''; + print ''; print ''; + print ''; print $obj->town; print ''; + print ''; print $obj->zip; print '
trans("LanguageFile"); ?>
textwithpicto($langs->trans("ComputedFormula"), $langs->trans("ComputedFormulaDesc")).$form->textwithpicto($langs->trans("Computedpersistent"), $langs->trans("ComputedpersistentDesc"), 1, 'warning'); ?>
textwithpicto($langs->trans("ComputedFormula"), $langs->trans("ComputedFormulaDesc"), 1, 'help', '', 0, 2, 'tooltipcompute'); ?>
textwithpicto($langs->trans("ComputedFormula"), $langs->trans("ComputedFormulaDesc")).$form->textwithpicto($langs->trans("Computedpersistent"), $langs->trans("ComputedpersistentDesc"), 1, 'warning'); ?>
trans("DefaultValue").' ('.$langs->trans("Database").')'; ?>
trans("LanguageFile"); ?>
textwithpicto($langs->trans("ComputedFormula"), $langs->trans("ComputedFormulaDesc"), 1, 'help', '', 0, 2, 'tooltipcompute'); ?>
textwithpicto($langs->trans("ComputedFormula"), $langs->trans("ComputedFormulaDesc")).$form->textwithpicto($langs->trans("Computedpersistent"), $langs->trans("ComputedpersistentDesc"), 1, 'warning'); ?>
trans("LanguageFile"); ?>
textwithpicto($langs->trans("ComputedFormula"), $langs->trans("ComputedFormulaDesc")).$form->textwithpicto($langs->trans("Computedpersistent"), $langs->trans("ComputedpersistentDesc"), 1, 'warning'); ?>
textwithpicto($langs->trans("ComputedFormula"), $langs->trans("ComputedFormulaDesc"), 1, 'help', '', 0, 2, 'tooltipcompute'); ?>
textwithpicto($langs->trans("ComputedFormula"), $langs->trans("ComputedFormulaDesc")).$form->textwithpicto($langs->trans("Computedpersistent"), $langs->trans("ComputedpersistentDesc"), 1, 'warning'); ?>
trans("DefaultValue").' ('.$langs->trans("Database").')'; ?>
trans("LanguageFile"); ?>
textwithpicto($langs->trans("ComputedFormula"), $langs->trans("ComputedFormulaDesc"), 1, 'help', '', 0, 2, 'tooltipcompute'); ?>
textwithpicto($langs->trans("ComputedFormula"), $langs->trans("ComputedFormulaDesc")).$form->textwithpicto($langs->trans("Computedpersistent"), $langs->trans("ComputedpersistentDesc"), 1, 'warning'); ?>
' . $langs->trans("TicketsEmailMustExist") . '
' . $langs->trans("TicketsEmailMustExist") . ''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('TICKET_EMAIL_MUST_EXISTS'); @@ -277,7 +271,7 @@ if (! empty($conf->global->TICKET_ENABLE_PUBLIC_INTERFACE)) /*if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { // Show logo for module - print '
' . $langs->trans("TicketsShowModuleLogo") . '
' . $langs->trans("TicketsShowModuleLogo") . ''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('TICKET_SHOW_MODULE_LOGO'); @@ -293,7 +287,7 @@ if (! empty($conf->global->TICKET_ENABLE_PUBLIC_INTERFACE)) }*/ // Show logo for company - print '
' . $langs->trans("TicketsShowCompanyLogo") . '
' . $langs->trans("TicketsShowCompanyLogo") . ''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('TICKET_SHOW_COMPANY_LOGO'); @@ -310,7 +304,7 @@ if (! empty($conf->global->TICKET_ENABLE_PUBLIC_INTERFACE)) // Also send to main email address if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { - print '
' . $langs->trans("TicketsEmailAlsoSendToMainAddress") . '
' . $langs->trans("TicketsEmailAlsoSendToMainAddress") . ''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('TICKET_NOTIFICATION_ALSO_MAIN_ADDRESS'); @@ -330,21 +324,6 @@ if (! empty($conf->global->TICKET_ENABLE_PUBLIC_INTERFACE)) print '
' . $langs->trans("TicketsAutoAssignTicket") . ''; - if ($conf->use_javascript_ajax) { - print ajax_constantonoff('TICKET_AUTO_ASSIGN_USER_CREATE'); - } else { - $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); - print $form->selectarray("TICKET_AUTO_ASSIGN_USER_CREATE", $arrval, $conf->global->TICKET_AUTO_ASSIGN_USER_CREATE); - } - print ''; - print $form->textwithpicto('', $langs->trans("TicketsAutoAssignTicketHelp"), 1, 'help'); - print '

'; if (!$conf->use_javascript_ajax) { From 575dce2dffb7cb0e2aee91d4a9b802c3ed0298eb Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 5 Jul 2019 12:17:36 +0200 Subject: [PATCH 646/828] Fix css --- htdocs/compta/bank/bankentries_list.php | 5 +++-- htdocs/user/hierarchy.php | 2 +- htdocs/user/list.php | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/htdocs/compta/bank/bankentries_list.php b/htdocs/compta/bank/bankentries_list.php index 811fe663f8c..5609bb6b598 100644 --- a/htdocs/compta/bank/bankentries_list.php +++ b/htdocs/compta/bank/bankentries_list.php @@ -603,12 +603,13 @@ if ($resql) print $langs->trans("EventualyAddCategory").': '; print Form::selectarray('cat', $options, GETPOST('cat'), 1); } - print '
'.$langs->trans("ThenCheckLinesAndConciliate").' '; + print '
'.$langs->trans("ThenCheckLinesAndConciliate").' '; print ''; print ' '.$langs->trans("or").' '; print ''; print ' '.$langs->trans("or").' '; print ''; + print '
'; // Show last bank statements $nbmax=15; // We accept to show last 15 receipts (so we can have more than one year) @@ -617,7 +618,7 @@ if ($resql) $sql.= " WHERE fk_account=".$object->id." AND num_releve IS NOT NULL"; $sql.= $db->order("num_releve", "DESC"); $sql.= $db->plimit($nbmax+1); - print '

'; + print '
'; print $langs->trans("LastAccountStatements").' : '; $resqlr=$db->query($sql); if ($resqlr) diff --git a/htdocs/user/hierarchy.php b/htdocs/user/hierarchy.php index be18cb4051a..ca5e0b1862b 100644 --- a/htdocs/user/hierarchy.php +++ b/htdocs/user/hierarchy.php @@ -150,7 +150,7 @@ if ($canadduser) $newcardbutton.= dolGetButtonTitle($langs->trans('NewUser'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/user/card.php?action=create'.($mode == 'employee' ? '&employee=1': '').'&leftmenu='); } -$morehtmlright.= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-list', DOL_URL_ROOT.'/user/list.php'.(($search_statut != '' && $search_statut >= 0) ?'?search_statut='.$search_statut:'')); +$morehtmlright.= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-list paddingleft', DOL_URL_ROOT.'/user/list.php'.(($search_statut != '' && $search_statut >= 0) ?'?search_statut='.$search_statut:'')); print load_fiche_titre($title, $morehtmlright.' '.$newcardbutton); diff --git a/htdocs/user/list.php b/htdocs/user/list.php index ad310b0041e..8c780c703f7 100644 --- a/htdocs/user/list.php +++ b/htdocs/user/list.php @@ -304,7 +304,7 @@ print ''; print ''; -$morehtmlright.= dolGetButtonTitle($langs->trans("HierarchicView"), '', 'fa fa-sitemap', DOL_URL_ROOT.'/user/hierarchy.php'.(($search_statut != '' && $search_statut >= 0) ?'?search_statut='.$search_statut:'')); +$morehtmlright.= dolGetButtonTitle($langs->trans("HierarchicView"), '', 'fa fa-sitemap paddingleft', DOL_URL_ROOT.'/user/hierarchy.php'.(($search_statut != '' && $search_statut >= 0) ?'?search_statut='.$search_statut:'')); print_barre_liste($text, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, "", $num, $nbtotalofrecords, 'title_generic', 0, $morehtmlright.' '.$newcardbutton, '', $limit); From 675b7b2e3215a950ff47415c449d0483b7d72e1e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 5 Jul 2019 13:11:30 +0200 Subject: [PATCH 647/828] Fix link to reconcile --- htdocs/compta/bank/releve.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/bank/releve.php b/htdocs/compta/bank/releve.php index ac4d17e4c49..b93f381c555 100644 --- a/htdocs/compta/bank/releve.php +++ b/htdocs/compta/bank/releve.php @@ -415,7 +415,7 @@ if (empty($numref)) if ($object->canBeConciliated() > 0) { // If not cash account and can be reconciliate if ($user->rights->banque->consolidate) { - print ''.$langs->trans("Conciliate").''; + print ''.$langs->trans("Conciliate").''; } else { print ''.$langs->trans("Conciliate").''; } From 9b327639197692f9eb5cf3ac970d594f6f79107f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 5 Jul 2019 15:25:29 +0200 Subject: [PATCH 648/828] Fix label for report n ledger for transitionnal bank account on tranfer --- htdocs/accountancy/journal/bankjournal.php | 32 ++++++++++++++++++---- htdocs/core/lib/accounting.lib.php | 5 ++-- htdocs/langs/en_US/accountancy.lang | 1 + 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/htdocs/accountancy/journal/bankjournal.php b/htdocs/accountancy/journal/bankjournal.php index cfe49764c74..d4a9ff0d3f6 100644 --- a/htdocs/accountancy/journal/bankjournal.php +++ b/htdocs/accountancy/journal/bankjournal.php @@ -573,7 +573,14 @@ if (! $error && $action == 'writebookkeeping') { { $reflabel = ''; if (! empty($val['lib'])) $reflabel .= dol_string_nohtmltag($val['lib']) . ($val['soclib']?" - ":""); - $reflabel.= dol_string_nohtmltag($val['soclib']); + if ($tabtype[$key] == 'banktransfert') + { + $reflabel.= dol_string_nohtmltag($langs->transnoentitiesnoconv('TransitionalAccount').' '.$account_transfer); + } + else + { + $reflabel.= dol_string_nohtmltag($val['soclib']); + } $bookkeeping = new BookKeeping($db); $bookkeeping->doc_date = $val["date"]; @@ -702,7 +709,7 @@ if (! $error && $action == 'writebookkeeping') { } } } - else { // If thirdparty unkown, output the waiting account + else { // If thirdparty unknown, output the waiting account foreach ($tabbq[$key] as $k => $mt) { if ($mt) { @@ -831,7 +838,6 @@ if ($action == 'exportcsv') { // ISO and not UTF8 ! print '"' . $langs->transnoentitiesnoconv("Note") . '"' . $sep; print "\n"; - foreach ($tabpay as $key => $val) { $date = dol_print_date($db->jdate($val["date"]), 'day'); @@ -869,7 +875,14 @@ if ($action == 'exportcsv') { // ISO and not UTF8 ! { $reflabel = ''; if (! empty($val['lib'])) $reflabel .= dol_string_nohtmltag($val['lib']) . ($val['soclib']?" - ":""); - $reflabel.= dol_string_nohtmltag($val['soclib']); + if ($tabtype[$key] == 'banktransfert') + { + $reflabel.= dol_string_nohtmltag($langs->transnoentitiesnoconv('TransitionalAccount').' '.$account_transfer); + } + else + { + $reflabel.= dol_string_nohtmltag($val['soclib']); + } print '"' . $key . '"' . $sep; print '"' . $date . '"' . $sep; @@ -1087,7 +1100,14 @@ if (empty($action) || $action == 'view') { { $reflabel = ''; if (! empty($val['lib'])) $reflabel .= $val['lib'] . ($val['soclib']?" - ":""); - $reflabel.= $val['soclib']; + if ($tabtype[$key] == 'banktransfert') + { + $reflabel.= $langs->trans('TransitionalAccount').' '.$account_transfer; + } + else + { + $reflabel.= $val['soclib']; + } print ''; print ''; @@ -1115,7 +1135,7 @@ if (empty($action) || $action == 'view') { } else { - print ''.$langs->trans('UnknownAccountForThirdparty', length_accountg($conf->global->ACCOUNTING_ACCOUNT_SUSPENSE)).''; // We will a waiting account + print ''.$langs->trans('UnknownAccountForThirdparty', length_accountg($conf->global->ACCOUNTING_ACCOUNT_SUSPENSE)).''; // We will use a waiting account } } else diff --git a/htdocs/core/lib/accounting.lib.php b/htdocs/core/lib/accounting.lib.php index 9545b6961fd..d6bd38b5030 100644 --- a/htdocs/core/lib/accounting.lib.php +++ b/htdocs/core/lib/accounting.lib.php @@ -175,7 +175,7 @@ function journalHead($nom, $variante, $period, $periodlink, $description, $build { global $langs; - print "\n\n\n"; + print "\n\n\n"; if(! is_empty($varlink)) $varlink = '?'.$varlink; @@ -186,6 +186,7 @@ function journalHead($nom, $variante, $period, $periodlink, $description, $build $head[$h][2] = 'journal'; print ''; + print ''; dol_fiche_head($head, 'journal'); @@ -240,5 +241,5 @@ function journalHead($nom, $variante, $period, $periodlink, $description, $build print ''; - print "\n\n\n"; + print "\n\n\n"; } diff --git a/htdocs/langs/en_US/accountancy.lang b/htdocs/langs/en_US/accountancy.lang index 3bb0df59812..ece95cfca29 100644 --- a/htdocs/langs/en_US/accountancy.lang +++ b/htdocs/langs/en_US/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations From 42576eb27a820cae0a756e932b6a0e02c6beac04 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 5 Jul 2019 17:22:13 +0200 Subject: [PATCH 649/828] Fix status of email templates not visible for non admin users --- htdocs/admin/mails_templates.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/admin/mails_templates.php b/htdocs/admin/mails_templates.php index e2f36f96fe9..b62009c2ba6 100644 --- a/htdocs/admin/mails_templates.php +++ b/htdocs/admin/mails_templates.php @@ -873,6 +873,7 @@ if ($resql) // Status / Active print ''; if ($canbedisabled) print ''.$actl[$obj->active].''; + else print ''.$actl[$obj->active].''; print ""; // Modify link / Delete link From 93d9f73f1d03c7786d3927c20247cd7bcb630cbc Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 5 Jul 2019 17:44:31 +0200 Subject: [PATCH 650/828] Trans --- htdocs/langs/en_US/accountancy.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/accountancy.lang b/htdocs/langs/en_US/accountancy.lang index ece95cfca29..6dfe4fc8c4f 100644 --- a/htdocs/langs/en_US/accountancy.lang +++ b/htdocs/langs/en_US/accountancy.lang @@ -301,7 +301,7 @@ ChartofaccountsId=Chart of accounts Id InitAccountancy=Init accountancy InitAccountancyDesc=This page can be used to initialize an accounting account on products and services that does not have accounting account defined for sales and purchases. DefaultBindingDesc=This page can be used to set a default account to use to link transactions record about payment salaries, donation, taxes and vat when no specific accounting account were already set. -DefaultClosureDesc=This page can be used to set parameters to use to enclose a balance sheet. +DefaultClosureDesc=This page can be used to set parameters used for accounting closures. Options=Options OptionModeProductSell=Mode sales OptionModeProductSellIntra=Mode sales exported in EEC From 69db6e6aa7e834740eb3eb72ae325058aa2fb299 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 5 Jul 2019 18:45:13 +0200 Subject: [PATCH 651/828] Fix look and feel v10 --- htdocs/admin/supplier_proposal.php | 2 +- .../supplier_proposal/admin/supplier_proposal_extrafields.php | 2 +- .../admin/supplier_proposaldet_extrafields.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/admin/supplier_proposal.php b/htdocs/admin/supplier_proposal.php index 8b17c860fd4..e627068b692 100644 --- a/htdocs/admin/supplier_proposal.php +++ b/htdocs/admin/supplier_proposal.php @@ -220,7 +220,7 @@ print load_fiche_titre($langs->trans("SupplierProposalSetup"), $linkback, 'title $head = supplier_proposal_admin_prepare_head(); -dol_fiche_head($head, 'general', $langs->trans("CommRequests"), 0, 'supplier_proposal'); +dol_fiche_head($head, 'general', $langs->trans("CommRequests"), -1, 'supplier_proposal'); /* * Module numerotation diff --git a/htdocs/supplier_proposal/admin/supplier_proposal_extrafields.php b/htdocs/supplier_proposal/admin/supplier_proposal_extrafields.php index 1b5c08119d1..c97ea508448 100644 --- a/htdocs/supplier_proposal/admin/supplier_proposal_extrafields.php +++ b/htdocs/supplier_proposal/admin/supplier_proposal_extrafields.php @@ -64,7 +64,7 @@ print load_fiche_titre($langs->trans("SupplierProposalSetup"), $linkback, 'title $head = supplier_proposal_admin_prepare_head(); -dol_fiche_head($head, 'attributes', $langs->trans("CommRequests"), 0, 'supplier_proposal'); +dol_fiche_head($head, 'attributes', $langs->trans("CommRequests"), -1, 'supplier_proposal'); print $langs->trans("DefineHereComplementaryAttributes", $textobject).'
'."\n"; diff --git a/htdocs/supplier_proposal/admin/supplier_proposaldet_extrafields.php b/htdocs/supplier_proposal/admin/supplier_proposaldet_extrafields.php index b3b0e482f62..c54e65ad825 100644 --- a/htdocs/supplier_proposal/admin/supplier_proposaldet_extrafields.php +++ b/htdocs/supplier_proposal/admin/supplier_proposaldet_extrafields.php @@ -69,7 +69,7 @@ print load_fiche_titre($langs->trans("SupplierProposalSetup"), $linkback, 'title $head = supplier_proposal_admin_prepare_head(); -dol_fiche_head($head, 'attributeslines', $langs->trans("CommRequests"), 0, 'supplier_proposal'); +dol_fiche_head($head, 'attributeslines', $langs->trans("CommRequests"), -1, 'supplier_proposal'); print $langs->trans("DefineHereComplementaryAttributes", $textobject).'
'."\n"; From 709b738d7579b7ebda9365182b3b9bd31666771c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 5 Jul 2019 18:54:51 +0200 Subject: [PATCH 652/828] Fix regression --- htdocs/core/class/conf.class.php | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/htdocs/core/class/conf.class.php b/htdocs/core/class/conf.class.php index 6e3fc66f89a..9c403b98104 100644 --- a/htdocs/core/class/conf.class.php +++ b/htdocs/core/class/conf.class.php @@ -364,6 +364,7 @@ class Conf $this->livraison_bon->enabled=(! empty($this->global->MAIN_SUBMODULE_LIVRAISON)?$this->global->MAIN_SUBMODULE_LIVRAISON:0); // Module fournisseur + // TODO To split into module supplier_invoice and supplier_order if (! empty($this->fournisseur)) { $this->fournisseur->commande=new stdClass(); @@ -376,11 +377,7 @@ class Conf $this->fournisseur->facture->multidir_temp =array($this->entity => $rootfordata."/fournisseur/facture/temp"); $this->fournisseur->facture->dir_output =$rootfordata."/fournisseur/facture"; // For backward compatibility $this->fournisseur->facture->dir_temp =$rootfordata."/fournisseur/facture/temp"; // For backward compatibility - $this->supplierproposal=new stdClass(); - $this->supplierproposal->multidir_output=array($this->entity => $rootfordata."/supplier_proposal"); - $this->supplierproposal->multidir_temp =array($this->entity => $rootfordata."/supplier_proposal/temp"); - $this->supplierproposal->dir_output=$rootfordata."/supplier_proposal"; // For backward compatibility - $this->supplierproposal->dir_temp=$rootfordata."/supplier_proposal/temp"; // For backward compatibility + $this->fournisseur->payment=new stdClass(); $this->fournisseur->payment->multidir_output=array($this->entity => $rootfordata."/fournisseur/payment"); $this->fournisseur->payment->multidir_temp =array($this->entity => $rootfordata."/fournisseur/payment/temp"); @@ -409,15 +406,6 @@ class Conf $this->supplier_invoice->dir_output=$rootfordata."/fournisseur/facture"; // For backward compatibility $this->supplier_invoice->dir_temp=$rootfordata."/fournisseur/facture/temp"; // For backward compatibility } - - if (empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)) // This can be set to 1 once modules purchase order and supplier invoice exists - { - $this->supplier_proposal=new stdClass(); - $this->supplier_proposal->multidir_output=array($this->entity => $rootfordata."/supplier_proposal"); - $this->supplier_proposal->multidir_temp =array($this->entity => $rootfordata."/supplier_proposal/temp"); - $this->supplier_proposal->dir_output=$rootfordata."/supplier_proposal"; // For backward compatibility - $this->supplier_proposal->dir_temp=$rootfordata."/supplier_proposal/temp"; // For backward compatibility - } } } From bbb5b43e948367a8428df1ff3e5f95354299f0ec Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 5 Jul 2019 19:03:16 +0200 Subject: [PATCH 653/828] Fix duplicate trans --- htdocs/fourn/commande/card.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/htdocs/fourn/commande/card.php b/htdocs/fourn/commande/card.php index bae5741d4ea..4742774b868 100644 --- a/htdocs/fourn/commande/card.php +++ b/htdocs/fourn/commande/card.php @@ -392,7 +392,7 @@ if (empty($reshook)) } if ($prod_entry_mode =='free' && GETPOST('price_ht')==='' && GETPOST('price_ttc')==='' && $price_ht_devise === '') // Unit price can be 0 but not '' { - setEventMessages($langs->trans($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('UnitPrice'))), null, 'errors'); + setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('UnitPrice')), null, 'errors'); $error++; } if ($prod_entry_mode =='free' && ! GETPOST('dp_desc')) @@ -2281,14 +2281,13 @@ elseif (! empty($object->id)) print ''; // Add free products/services form - global $forceall, $senderissupplier, $dateSelector; - $forceall=1; $dateSelector=0; + global $forceall, $senderissupplier, $dateSelector, $inputalsopricewithtax; + $forceall=1; $dateSelector=0; $inputalsopricewithtax=0; $senderissupplier=2; // $senderissupplier=2 is same than 1 but disable test on minimum qty and disable autofill qty with minimum. //if (! empty($conf->global->SUPPLIER_ORDER_WITH_NOPRICEDEFINED)) $senderissupplier=2; if (! empty($conf->global->SUPPLIER_ORDER_WITH_PREDEFINED_PRICES_ONLY)) $senderissupplier=1; // Show object lines - $inputalsopricewithtax=0; if (! empty($object->lines)) $ret = $object->printObjectLines($action, $societe, $mysoc, $lineid, 1); From d3b4a91f41b763ff07551b94383d3accf1031bdb Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 5 Jul 2019 20:24:22 +0200 Subject: [PATCH 654/828] NEW Can enter price tax incl on vendor proposal and purchase orders --- htdocs/fourn/commande/card.php | 39 ++++---- htdocs/fourn/facture/card.php | 4 +- htdocs/supplier_proposal/card.php | 96 ++++++++++++++----- .../class/supplier_proposal.class.php | 20 +++- 4 files changed, 106 insertions(+), 53 deletions(-) diff --git a/htdocs/fourn/commande/card.php b/htdocs/fourn/commande/card.php index 4742774b868..ff33a42e2a9 100644 --- a/htdocs/fourn/commande/card.php +++ b/htdocs/fourn/commande/card.php @@ -114,6 +114,7 @@ elseif (! empty($socid) && $socid > 0) $permissionnote=$user->rights->fournisseur->commande->creer; // Used by the include of actions_setnotes.inc.php $permissiondellink=$user->rights->fournisseur->commande->creer; // Used by the include of actions_dellink.inc.php $permissiontoedit=$user->rights->fournisseur->commande->creer; // Used by the include of actions_lineupdown.inc.php +$permissiontoadd=$user->rights->fournisseur->commande->creer; // Used by the include of actions_addupdatedelete.inc.php /* @@ -432,7 +433,7 @@ if (empty($reshook)) if (preg_match('/^idprod_([0-9]+)$/', GETPOST('idprodfournprice', 'alpha'), $reg)) { $idprod=$reg[1]; - $res=$productsupplier->fetch($idprod); // Load product from its ID + $res=$productsupplier->fetch($idprod); // Load product from its id // Call to init some price properties of $productsupplier // So if a supplier price already exists for another thirdparty (first one found), we use it as reference price if (! empty($conf->global->SUPPLIER_TAKE_FIRST_PRICE_IF_NO_PRICE_FOR_CURRENT_SUPPLIER)) @@ -494,7 +495,7 @@ if (empty($reshook)) 0, // We already have the $idprod always defined $ref_supplier, $remise_percent, - 'HT', + $price_base_type, $pu_ttc, $type, $tva_npr, @@ -511,7 +512,7 @@ if (empty($reshook)) // Product not selected $error++; $langs->load("errors"); - setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("ProductOrService")).' '.$langs->trans("or").' '.$langs->trans("NoPriceDefinedForThisSupplier"), null, 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("ProductOrService")), null, 'errors'); } if ($idprod == -1) { @@ -523,8 +524,6 @@ if (empty($reshook)) } elseif (empty($error)) // $price_ht is already set { - $pu_ht = price2num($price_ht, 'MU'); - $pu_ttc = price2num(GETPOST('price_ttc'), 'MU'); $tva_npr = (preg_match('/\*/', $tva_tx) ? 1 : 0); $tva_tx = str_replace('*', '', $tva_tx); $label = (GETPOST('product_label') ? GETPOST('product_label') : ''); @@ -552,7 +551,7 @@ if (empty($reshook)) $price_base_type = 'HT'; $pu_ht_devise = price2num($price_ht_devise, 'MU'); - $result=$object->addline($desc, $pu_ht, $qty, $tva_tx, $localtax1_tx, $localtax2_tx, 0, 0, $ref_supplier, $remise_percent, $price_base_type, $pu_ttc, $type, '', '', $date_start, $date_end, $array_options, $fk_unit, $pu_ht_devise); + $result = $object->addline($desc, $pu_ht, $qty, $tva_tx, $localtax1_tx, $localtax2_tx, 0, 0, $ref_supplier, $remise_percent, $price_base_type, $pu_ttc, $type, '', '', $date_start, $date_end, $array_options, $fk_unit, $pu_ht_devise); } //print "xx".$tva_tx; exit; @@ -652,28 +651,28 @@ if (empty($reshook)) if (preg_match('/\*/', $vat_rate)) $info_bits |= 0x01; - // Define vat_rate + // Define vat_rate $vat_rate = str_replace('*', '', $vat_rate); $localtax1_rate = get_localtax($vat_rate, 1, $mysoc, $object->thirdparty); $localtax2_rate = get_localtax($vat_rate, 2, $mysoc, $object->thirdparty); if (GETPOST('price_ht') != '') { - $price_base_type = 'HT'; - $ht = price2num(GETPOST('price_ht')); + $price_base_type = 'HT'; + $ht = price2num(GETPOST('price_ht')); } else { - $vatratecleaned = $vat_rate; - if (preg_match('/^(.*)\s*\((.*)\)$/', $vat_rate, $reg)) // If vat is "xx (yy)" - { - $vatratecleaned = trim($reg[1]); - $vatratecode = $reg[2]; - } + $vatratecleaned = $vat_rate; + if (preg_match('/^(.*)\s*\((.*)\)$/', $vat_rate, $reg)) // If vat is "xx (yy)" + { + $vatratecleaned = trim($reg[1]); + $vatratecode = $reg[2]; + } - $ttc = price2num(GETPOST('price_ttc')); - $ht = $ttc / (1 + ($vatratecleaned / 100)); - $price_base_type = 'HT'; + $ttc = price2num(GETPOST('price_ttc')); + $ht = $ttc / (1 + ($vatratecleaned / 100)); + $price_base_type = 'HT'; } $pu_ht_devise = GETPOST('multicurrency_subprice'); @@ -689,7 +688,7 @@ if (empty($reshook)) } } -$result = $object->updateline( + $result = $object->updateline( $lineid, $_POST['product_desc'], $ht, @@ -2282,7 +2281,7 @@ elseif (! empty($object->id)) // Add free products/services form global $forceall, $senderissupplier, $dateSelector, $inputalsopricewithtax; - $forceall=1; $dateSelector=0; $inputalsopricewithtax=0; + $forceall=1; $dateSelector=0; $inputalsopricewithtax=1; $senderissupplier=2; // $senderissupplier=2 is same than 1 but disable test on minimum qty and disable autofill qty with minimum. //if (! empty($conf->global->SUPPLIER_ORDER_WITH_NOPRICEDEFINED)) $senderissupplier=2; if (! empty($conf->global->SUPPLIER_ORDER_WITH_PREDEFINED_PRICES_ONLY)) $senderissupplier=1; diff --git a/htdocs/fourn/facture/card.php b/htdocs/fourn/facture/card.php index a0a966e7210..ae042b4c4b8 100644 --- a/htdocs/fourn/facture/card.php +++ b/htdocs/fourn/facture/card.php @@ -1175,7 +1175,7 @@ if (empty($reshook)) } if ($prod_entry_mode =='free' && GETPOST('price_ht')==='' && GETPOST('price_ttc')==='' && $price_ht_devise==='') // Unit price can be 0 but not '' { - setEventMessages($langs->trans($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('UnitPrice'))), null, 'errors'); + setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('UnitPrice')), null, 'errors'); $error++; } if ($prod_entry_mode =='free' && ! GETPOST('dp_desc')) @@ -1332,7 +1332,7 @@ if (empty($reshook)) $price_base_type = 'HT'; $pu_ht_devise = price2num($price_ht_devise, 'MU'); - $result=$object->addline($product_desc, $pu_ht, $tva_tx, $localtax1_tx, $localtax2_tx, $qty, 0, $remise_percent, $date_start, $date_end, 0, $tva_npr, $price_base_type, $type, -1, 0, $array_options, $fk_unit, 0, $pu_ht_devise, $ref_supplier); + $result = $object->addline($product_desc, $pu_ht, $tva_tx, $localtax1_tx, $localtax2_tx, $qty, 0, $remise_percent, $date_start, $date_end, 0, $tva_npr, $price_base_type, $type, -1, 0, $array_options, $fk_unit, 0, $pu_ht_devise, $ref_supplier); } //print "xx".$tva_tx; exit; diff --git a/htdocs/supplier_proposal/card.php b/htdocs/supplier_proposal/card.php index 56473959a39..60034cc7bc0 100644 --- a/htdocs/supplier_proposal/card.php +++ b/htdocs/supplier_proposal/card.php @@ -77,6 +77,9 @@ $NBLINES = 4; if (! empty($user->societe_id)) $socid = $user->societe_id; $result = restrictedArea($user, 'supplier_proposal', $id); +// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context +$hookmanager->initHooks(array('supplier_proposalcard','globalcard')); + $object = new SupplierProposal($db); $extrafields = new ExtraFields($db); @@ -92,9 +95,6 @@ if ($id > 0 || ! empty($ref)) { dol_print_error('', $object->error); } -// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context -$hookmanager->initHooks(array('supplier_proposalcard','globalcard')); - $permissionnote = $user->rights->supplier_proposal->creer; // Used by the include of actions_setnotes.inc.php $permissiondellink=$user->rights->supplier_proposal->creer; // Used by the include of actions_dellink.inc.php $permissiontoedit=$user->rights->supplier_proposal->creer; // Used by the include of actions_lineupdown.inc.php @@ -565,9 +565,9 @@ if (empty($reshook)) $error ++; } - if ($prod_entry_mode == 'free' && empty($idprod) && $price_ht == '') // Unit price can be 0 but not ''. Also price can be negative for proposal. + 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. { - setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("UnitPriceHT")), null, 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("UnitPrice")), null, 'errors'); $error ++; } if ($prod_entry_mode == 'free' && empty($idprod) && empty($product_desc)) { @@ -585,7 +585,7 @@ if (empty($reshook)) // Ecrase $pu par celui du produit // Ecrase $desc par celui du produit // Ecrase $txtva par celui du produit - if ($prod_entry_mode != 'free' && empty($error)) // With combolist mode idprodfournprice is > 0 or -1. With autocomplete, idprodfournprice is > 0 or '' + if (($prod_entry_mode != 'free') && empty($error)) // With combolist mode idprodfournprice is > 0 or -1. With autocomplete, idprodfournprice is > 0 or '' { $productsupplier = new ProductFournisseur($db); @@ -595,7 +595,7 @@ if (empty($reshook)) if (preg_match('/^idprod_([0-9]+)$/', GETPOST('idprodfournprice', 'alpha'), $reg)) { $idprod=$reg[1]; - $res=$productsupplier->fetch($idprod); + $res=$productsupplier->fetch($idprod); // Load product from its ID // Call to init some price properties of $productsupplier // So if a supplier price already exists for another thirdparty (first one found), we use it as reference price if (! empty($conf->global->SUPPLIER_TAKE_FIRST_PRICE_IF_NO_PRICE_FOR_CURRENT_SUPPLIER)) @@ -632,23 +632,21 @@ if (empty($reshook)) if (trim($product_desc) != trim($desc)) $desc = dol_concatdesc($desc, $product_desc, '', !empty($conf->global->MAIN_CHANGE_ORDER_CONCAT_DESCRIPTION)); - $pu_ht = $productsupplier->fourn_pu; - $type = $productsupplier->type; $price_base_type = ($productsupplier->fourn_price_base_type?$productsupplier->fourn_price_base_type:'HT'); $ref_supplier = $productsupplier->ref_supplier; - $fk_unit = $productsupplier->fk_unit; - $tva_tx = get_default_tva($object->thirdparty, $mysoc, $productsupplier->id, GETPOST('idprodfournprice', 'alpha')); $tva_npr = get_default_npr($object->thirdparty, $mysoc, $productsupplier->id, GETPOST('idprodfournprice', 'alpha')); - if (empty($tva_tx)) $tva_npr=0; $localtax1_tx= get_localtax($tva_tx, 1, $mysoc, $object->thirdparty, $tva_npr); $localtax2_tx= get_localtax($tva_tx, 2, $mysoc, $object->thirdparty, $tva_npr); - $result=$object->addline( + $pu_ht = $productsupplier->fourn_pu; + if (empty($pu_ht)) $pu_ht = 0; // If pu is '' or null, we force to have a numeric value + + $result=$object->addline( $desc, $pu_ht, $qty, @@ -669,7 +667,7 @@ if (empty($reshook)) $label, $array_options, $ref_supplier, - $fk_unit, + $productsupplier->fk_unit, '', 0, $productsupplier->fourn_multicurrency_unitprice @@ -730,6 +728,8 @@ if (empty($reshook)) { $db->commit(); + $ret=$object->fetch($object->id); // Reload to get new records + // Define output language if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) { @@ -798,32 +798,52 @@ if (empty($reshook)) // Mise a jour d'une ligne dans la demande de prix elseif ($action == 'updateline' && $user->rights->supplier_proposal->creer && GETPOST('save') == $langs->trans("Save")) { + $vat_rate=(GETPOST('tva_tx')?GETPOST('tva_tx'):0); + // Define info_bits $info_bits = 0; - if (preg_match('/\*/', GETPOST('tva_tx'))) + if (preg_match('/\*/', $vat_rate)) $info_bits |= 0x01; - // Clean parameters + // Clean parameters $description = dol_htmlcleanlastbr(GETPOST('product_desc', 'none')); // Define vat_rate - $vat_rate = (GETPOST('tva_tx') ? GETPOST('tva_tx') : 0); $vat_rate = str_replace('*', '', $vat_rate); - $localtax1_rate = get_localtax($vat_rate, 1, $object->thirdparty); - $localtax2_rate = get_localtax($vat_rate, 2, $object->thirdparty); - $pu_ht = GETPOST('price_ht') ? GETPOST('price_ht') : 0; + $localtax1_rate = get_localtax($vat_rate, 1, $mysoc, $object->thirdparty); + $localtax2_rate = get_localtax($vat_rate, 2, $mysoc, $object->thirdparty); + + if (GETPOST('price_ht') != '') + { + $price_base_type = 'HT'; + $ht = price2num(GETPOST('price_ht')); + } + else + { + $vatratecleaned = $vat_rate; + if (preg_match('/^(.*)\s*\((.*)\)$/', $vat_rate, $reg)) // If vat is "xx (yy)" + { + $vatratecleaned = trim($reg[1]); + $vatratecode = $reg[2]; + } + + $ttc = price2num(GETPOST('price_ttc')); + $ht = $ttc / (1 + ($vatratecleaned / 100)); + $price_base_type = 'HT'; + } + + $pu_ht_devise = GETPOST('multicurrency_subprice'); // Add buying price $fournprice = (GETPOST('fournprice') ? GETPOST('fournprice') : ''); $buyingprice = (GETPOST('buying_price') != '' ? GETPOST('buying_price') : ''); // If buying_price is '0', we muste keep this value - // Extrafields + // Extrafields Lines $extrafieldsline = new ExtraFields($db); $extralabelsline = $extrafieldsline->fetch_name_optionals_label($object->table_element_line); $array_options = $extrafieldsline->getOptionalsFromPost($object->table_element_line); - // Unset extrafield + // Unset extrafield POST Data if (is_array($extralabelsline)) { - // Get extra fields foreach ($extralabelsline as $key => $value) { unset($_POST["options_" . $key]); } @@ -869,9 +889,33 @@ if (empty($reshook)) if (! $error) { $db->begin(); + $ref_supplier = GETPOST('fourn_ref', 'alpha'); $fk_unit = GETPOST('units'); - $result = $object->updateline(GETPOST('lineid'), $pu_ht, GETPOST('qty'), GETPOST('remise_percent'), $vat_rate, $localtax1_rate, $localtax2_rate, $description, 'HT', $info_bits, $special_code, GETPOST('fk_parent_line'), 0, $fournprice, $buyingprice, $label, $type, $array_options, $ref_supplier, $fk_unit); + + $result = $object->updateline( + GETPOST('lineid'), + $ht, + GETPOST('qty'), + GETPOST('remise_percent'), + $vat_rate, + $localtax1_rate, + $localtax2_rate, + $description, + $price_base_type, + $info_bits, + $special_code, + GETPOST('fk_parent_line'), + 0, + $fournprice, + $buyingprice, + $label, + $type, + $array_options, + $ref_supplier, + $fk_unit, + $pu_ht_devise + ); if ($result >= 0) { $db->commit(); @@ -1705,8 +1749,8 @@ if ($action == 'create') print '
'; // Add free products/services form - global $forceall, $senderissupplier, $dateSelector; - $forceall=1; $dateSelector=0; + global $forceall, $senderissupplier, $dateSelector, $inputalsopricewithtax; + $forceall=1; $dateSelector=0; $inputalsopricewithtax=1; $senderissupplier=2; // $senderissupplier=2 is same than 1 but disable test on minimum qty. if (! empty($conf->global->SUPPLIER_PROPOSAL_WITH_PREDEFINED_PRICES_ONLY)) $senderissupplier=1; diff --git a/htdocs/supplier_proposal/class/supplier_proposal.class.php b/htdocs/supplier_proposal/class/supplier_proposal.class.php index 74073c0d7e4..2725cd18190 100644 --- a/htdocs/supplier_proposal/class/supplier_proposal.class.php +++ b/htdocs/supplier_proposal/class/supplier_proposal.class.php @@ -655,9 +655,10 @@ class SupplierProposal extends CommonObject * @param array $array_option extrafields array * @param string $ref_supplier Supplier price reference * @param int $fk_unit Id of the unit to use. + * @param double $pu_ht_devise Unit price in currency * @return int 0 if OK, <0 if KO */ - public function updateline($rowid, $pu, $qty, $remise_percent, $txtva, $txlocaltax1 = 0, $txlocaltax2 = 0, $desc = '', $price_base_type = 'HT', $info_bits = 0, $special_code = 0, $fk_parent_line = 0, $skip_update_total = 0, $fk_fournprice = 0, $pa_ht = 0, $label = '', $type = 0, $array_option = 0, $ref_supplier = '', $fk_unit = '') + public function updateline($rowid, $pu, $qty, $remise_percent, $txtva, $txlocaltax1 = 0, $txlocaltax2 = 0, $desc = '', $price_base_type = 'HT', $info_bits = 0, $special_code = 0, $fk_parent_line = 0, $skip_update_total = 0, $fk_fournprice = 0, $pa_ht = 0, $label = '', $type = 0, $array_option = 0, $ref_supplier = '', $fk_unit = '', $pu_ht_devise = 0) { global $conf,$user,$langs, $mysoc; @@ -684,10 +685,17 @@ class SupplierProposal extends CommonObject // TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker // la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva. - $localtaxes_type=getLocalTaxesFromRate($txtva, 0, $this->thirdparty, $mysoc); - $txtva = preg_replace('/\s*\(.*\)/', '', $txtva); // Remove code into vatrate. + $localtaxes_type=getLocalTaxesFromRate($txtva, 0, $mysoc, $this->thirdparty); - $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $type, $this->thirdparty, $localtaxes_type, 100, $this->multicurrency_tx); + // Clean vat code + $vat_src_code=''; + if (preg_match('/\((.*)\)/', $txtva, $reg)) + { + $vat_src_code = $reg[1]; + $txtva = preg_replace('/\s*\(.*\)/', '', $txtva); // Remove code into vatrate. + } + + $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $type, $this->thirdparty, $localtaxes_type, 100, $this->multicurrency_tx, $pu_ht_devise); $total_ht = $tabprice[0]; $total_tva = $tabprice[1]; $total_ttc = $tabprice[2]; @@ -726,7 +734,9 @@ class SupplierProposal extends CommonObject $this->line->label = $label; $this->line->desc = $desc; $this->line->qty = $qty; - $this->line->product_type = $type; + $this->line->product_type = $type; + + $this->line->vat_src_code = $vat_src_code; $this->line->tva_tx = $txtva; $this->line->localtax1_tx = $txlocaltax1; $this->line->localtax2_tx = $txlocaltax2; From ac9282667dfbc908d52e976f80be87e0cf49272e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 5 Jul 2019 21:09:21 +0200 Subject: [PATCH 655/828] Try new phpunit syntax --- test/phpunit/ActionCommTest.php | 2 +- test/phpunit/AdherentTest.php | 2 +- test/phpunit/AdminLibTest.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/phpunit/ActionCommTest.php b/test/phpunit/ActionCommTest.php index f9c0928bad2..921d0e6d70d 100644 --- a/test/phpunit/ActionCommTest.php +++ b/test/phpunit/ActionCommTest.php @@ -44,7 +44,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class ActionCommTest extends PHPUnit_Framework_TestCase +class ActionCommTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/AdherentTest.php b/test/phpunit/AdherentTest.php index bd5ae5571cc..c83df4da0d2 100644 --- a/test/phpunit/AdherentTest.php +++ b/test/phpunit/AdherentTest.php @@ -46,7 +46,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class AdherentTest extends PHPUnit_Framework_TestCase +class AdherentTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/AdminLibTest.php b/test/phpunit/AdminLibTest.php index bbf5ae2da00..21133d21072 100644 --- a/test/phpunit/AdminLibTest.php +++ b/test/phpunit/AdminLibTest.php @@ -44,7 +44,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class AdminLibTest extends PHPUnit_Framework_TestCase +class AdminLibTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; From 3af4ad7fc36f4861f54f104f01d321e0eff933c1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 5 Jul 2019 21:28:27 +0200 Subject: [PATCH 656/828] Compatibility with phpunit v6 --- test/phpunit/BOMTest.php | 2 +- test/phpunit/BankAccountTest.php | 2 +- test/phpunit/BonPrelevementTest.php | 2 +- test/phpunit/BuildDocTest.php | 2 +- test/phpunit/CMailFileTest.php | 2 +- test/phpunit/CategorieTest.php | 2 +- test/phpunit/ChargeSocialesTest.php | 2 +- test/phpunit/CodingPhpTest.php | 2 +- test/phpunit/CommandeFournisseurTest.php | 2 +- test/phpunit/CommandeTest.php | 2 +- test/phpunit/CommonObjectTest.php | 2 +- test/phpunit/CompanyBankAccountTest.php | 2 +- test/phpunit/CompanyLibTest.php | 2 +- test/phpunit/ContactTest.php | 2 +- test/phpunit/ContratTest.php | 2 +- test/phpunit/CoreTest.php | 2 +- test/phpunit/DateLibTest.php | 2 +- test/phpunit/DateLibTzFranceTest.php | 2 +- test/phpunit/DiscountTest.php | 2 +- test/phpunit/EntrepotTest.php | 2 +- test/phpunit/ExpenseReportTest.php | 2 +- test/phpunit/ExportTest.php | 2 +- test/phpunit/FactureFournisseurTest.php | 2 +- test/phpunit/FactureRecTest.php | 2 +- test/phpunit/FactureTest.php | 2 +- test/phpunit/FactureTestRounding.php | 2 +- test/phpunit/FichinterTest.php | 2 +- test/phpunit/FilesLibTest.php | 2 +- test/phpunit/FormAdminTest.php | 2 +- test/phpunit/Functions2LibTest.php | 2 +- test/phpunit/HolidayTest.php | 2 +- test/phpunit/ImagesLibTest.php | 2 +- test/phpunit/ImportTest.php | 2 +- test/phpunit/JsonLibTest.php | 2 +- test/phpunit/LangTest.php | 2 +- test/phpunit/LoanTest.php | 2 +- test/phpunit/MarginsLibTest.php | 2 +- test/phpunit/ModulesTest.php | 2 +- test/phpunit/MouvementStockTest.php | 2 +- test/phpunit/NumberingModulesTest.php | 2 +- test/phpunit/PaypalTest.php | 2 +- test/phpunit/PdfDocTest.php | 2 +- test/phpunit/PgsqlTest.php | 2 +- test/phpunit/PricesTest.php | 2 +- test/phpunit/ProductTest.php | 2 +- test/phpunit/ProjectTest.php | 2 +- test/phpunit/PropalTest.php | 2 +- test/phpunit/RestAPIDocumentTest.php | 2 +- test/phpunit/RestAPIUserTest.php | 2 +- test/phpunit/ScriptsTest.php | 2 +- test/phpunit/SecurityTest.php | 2 +- test/phpunit/SocieteTest.php | 2 +- test/phpunit/SupplierProposalTest.php | 2 +- test/phpunit/TicketTest.php | 2 +- test/phpunit/UserGroupTest.php | 2 +- test/phpunit/UserTest.php | 2 +- test/phpunit/UtilsTest.php | 2 +- test/phpunit/WebservicesInvoicesTest.php | 2 +- test/phpunit/WebservicesOrdersTest.php | 2 +- test/phpunit/WebservicesOtherTest.php | 2 +- test/phpunit/WebservicesProductsTest.php | 2 +- test/phpunit/WebservicesThirdpartyTest.php | 2 +- test/phpunit/WebservicesUserTest.php | 2 +- test/phpunit/XCalLibTest.php | 2 +- 64 files changed, 64 insertions(+), 64 deletions(-) diff --git a/test/phpunit/BOMTest.php b/test/phpunit/BOMTest.php index ace04f7ba71..1179b35e6e1 100644 --- a/test/phpunit/BOMTest.php +++ b/test/phpunit/BOMTest.php @@ -28,7 +28,7 @@ namespace test\unit; * Class BillOfMaterialsTest * @package Testbillofmaterials */ -class BOMTest extends \PHPUnit_Framework_TestCase +class BOMTest extends \PHPUnit\Framework\TestCase { /** * Global test setup diff --git a/test/phpunit/BankAccountTest.php b/test/phpunit/BankAccountTest.php index fa150742c4b..94149bd0ad5 100644 --- a/test/phpunit/BankAccountTest.php +++ b/test/phpunit/BankAccountTest.php @@ -46,7 +46,7 @@ $langs->load("main"); * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class BankAccountTest extends PHPUnit_Framework_TestCase +class BankAccountTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/BonPrelevementTest.php b/test/phpunit/BonPrelevementTest.php index 4ba05b2c0b6..d65d2066c2a 100644 --- a/test/phpunit/BonPrelevementTest.php +++ b/test/phpunit/BonPrelevementTest.php @@ -47,7 +47,7 @@ $langs->load("main"); * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class BonPrelevementTest extends PHPUnit_Framework_TestCase +class BonPrelevementTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/BuildDocTest.php b/test/phpunit/BuildDocTest.php index e8fa72a8f40..442b76091ff 100644 --- a/test/phpunit/BuildDocTest.php +++ b/test/phpunit/BuildDocTest.php @@ -74,7 +74,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class BuildDocTest extends PHPUnit_Framework_TestCase +class BuildDocTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/CMailFileTest.php b/test/phpunit/CMailFileTest.php index b664b345c26..9941eaa67da 100755 --- a/test/phpunit/CMailFileTest.php +++ b/test/phpunit/CMailFileTest.php @@ -44,7 +44,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class CMailFileTest extends PHPUnit_Framework_TestCase +class CMailFileTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/CategorieTest.php b/test/phpunit/CategorieTest.php index 80761a6e594..46d8dbe875b 100644 --- a/test/phpunit/CategorieTest.php +++ b/test/phpunit/CategorieTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class CategorieTest extends PHPUnit_Framework_TestCase +class CategorieTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/ChargeSocialesTest.php b/test/phpunit/ChargeSocialesTest.php index b037e50752d..9eabbf20fa0 100644 --- a/test/phpunit/ChargeSocialesTest.php +++ b/test/phpunit/ChargeSocialesTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class ChargeSocialesTest extends PHPUnit_Framework_TestCase +class ChargeSocialesTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/CodingPhpTest.php b/test/phpunit/CodingPhpTest.php index db6b3299bd5..b7636a5c934 100644 --- a/test/phpunit/CodingPhpTest.php +++ b/test/phpunit/CodingPhpTest.php @@ -57,7 +57,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class CodingPhpTest extends PHPUnit_Framework_TestCase +class CodingPhpTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/CommandeFournisseurTest.php b/test/phpunit/CommandeFournisseurTest.php index 277328339ee..c249c47bd91 100644 --- a/test/phpunit/CommandeFournisseurTest.php +++ b/test/phpunit/CommandeFournisseurTest.php @@ -46,7 +46,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class CommandeFournisseurTest extends PHPUnit_Framework_TestCase +class CommandeFournisseurTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/CommandeTest.php b/test/phpunit/CommandeTest.php index 00a0a4983c9..570165f3382 100644 --- a/test/phpunit/CommandeTest.php +++ b/test/phpunit/CommandeTest.php @@ -44,7 +44,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class CommandeTest extends PHPUnit_Framework_TestCase +class CommandeTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/CommonObjectTest.php b/test/phpunit/CommonObjectTest.php index 549540bb0d0..e4bd0f73518 100644 --- a/test/phpunit/CommonObjectTest.php +++ b/test/phpunit/CommonObjectTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class CommonObjectTest extends PHPUnit_Framework_TestCase +class CommonObjectTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/CompanyBankAccountTest.php b/test/phpunit/CompanyBankAccountTest.php index 58eebfd0207..08749d12619 100644 --- a/test/phpunit/CompanyBankAccountTest.php +++ b/test/phpunit/CompanyBankAccountTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class CompanyBankAccountTest extends PHPUnit_Framework_TestCase +class CompanyBankAccountTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/CompanyLibTest.php b/test/phpunit/CompanyLibTest.php index 0fb1722aee9..9e211441103 100644 --- a/test/phpunit/CompanyLibTest.php +++ b/test/phpunit/CompanyLibTest.php @@ -44,7 +44,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class CompanyLibTest extends PHPUnit_Framework_TestCase +class CompanyLibTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/ContactTest.php b/test/phpunit/ContactTest.php index ef43bd06311..c0ed8d7843f 100755 --- a/test/phpunit/ContactTest.php +++ b/test/phpunit/ContactTest.php @@ -53,7 +53,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class ContactTest extends PHPUnit_Framework_TestCase +class ContactTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/ContratTest.php b/test/phpunit/ContratTest.php index c5342865979..c763a976172 100644 --- a/test/phpunit/ContratTest.php +++ b/test/phpunit/ContratTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class ContratTest extends PHPUnit_Framework_TestCase +class ContratTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/CoreTest.php b/test/phpunit/CoreTest.php index 51a0f54698f..4720df9014c 100644 --- a/test/phpunit/CoreTest.php +++ b/test/phpunit/CoreTest.php @@ -47,7 +47,7 @@ if (! defined("NOLOGIN")) define("NOLOGIN", '1'); // If this page i * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class CoreTest extends PHPUnit_Framework_TestCase +class CoreTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/DateLibTest.php b/test/phpunit/DateLibTest.php index 6424cb4d8df..cc4f50705e0 100644 --- a/test/phpunit/DateLibTest.php +++ b/test/phpunit/DateLibTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class DateLibTest extends PHPUnit_Framework_TestCase +class DateLibTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/DateLibTzFranceTest.php b/test/phpunit/DateLibTzFranceTest.php index fa7aef2bed8..8913c56a77d 100644 --- a/test/phpunit/DateLibTzFranceTest.php +++ b/test/phpunit/DateLibTzFranceTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class DateLibTzFranceTest extends PHPUnit_Framework_TestCase +class DateLibTzFranceTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/DiscountTest.php b/test/phpunit/DiscountTest.php index cd73a7ad173..8c461aba88a 100644 --- a/test/phpunit/DiscountTest.php +++ b/test/phpunit/DiscountTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class DiscountTest extends PHPUnit_Framework_TestCase +class DiscountTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/EntrepotTest.php b/test/phpunit/EntrepotTest.php index a2c0e78ee96..61bb5fe1b49 100644 --- a/test/phpunit/EntrepotTest.php +++ b/test/phpunit/EntrepotTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class EntrepotTest extends PHPUnit_Framework_TestCase +class EntrepotTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/ExpenseReportTest.php b/test/phpunit/ExpenseReportTest.php index c4b3e2a707a..570afd8bb18 100644 --- a/test/phpunit/ExpenseReportTest.php +++ b/test/phpunit/ExpenseReportTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class ExpenseReportTest extends PHPUnit_Framework_TestCase +class ExpenseReportTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/ExportTest.php b/test/phpunit/ExportTest.php index 7403cba3ddf..5497f88cd67 100644 --- a/test/phpunit/ExportTest.php +++ b/test/phpunit/ExportTest.php @@ -49,7 +49,7 @@ if (! defined("NOLOGIN")) define("NOLOGIN", '1'); // If this page i * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class ExportTest extends PHPUnit_Framework_TestCase +class ExportTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/FactureFournisseurTest.php b/test/phpunit/FactureFournisseurTest.php index 33d503825ac..4d7df1f0ed7 100644 --- a/test/phpunit/FactureFournisseurTest.php +++ b/test/phpunit/FactureFournisseurTest.php @@ -46,7 +46,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class FactureFournisseurTest extends PHPUnit_Framework_TestCase +class FactureFournisseurTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/FactureRecTest.php b/test/phpunit/FactureRecTest.php index de1bb164451..5d9021032a2 100644 --- a/test/phpunit/FactureRecTest.php +++ b/test/phpunit/FactureRecTest.php @@ -46,7 +46,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class FactureRecTest extends PHPUnit_Framework_TestCase +class FactureRecTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/FactureTest.php b/test/phpunit/FactureTest.php index 4f680ba32db..3c066380b09 100644 --- a/test/phpunit/FactureTest.php +++ b/test/phpunit/FactureTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class FactureTest extends PHPUnit_Framework_TestCase +class FactureTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/FactureTestRounding.php b/test/phpunit/FactureTestRounding.php index a0df47cd97f..1716bd51153 100644 --- a/test/phpunit/FactureTestRounding.php +++ b/test/phpunit/FactureTestRounding.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class FactureTestRounding extends PHPUnit_Framework_TestCase +class FactureTestRounding extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/FichinterTest.php b/test/phpunit/FichinterTest.php index 35680559581..c81e1c99e1a 100644 --- a/test/phpunit/FichinterTest.php +++ b/test/phpunit/FichinterTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class FichinterTest extends PHPUnit_Framework_TestCase +class FichinterTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/FilesLibTest.php b/test/phpunit/FilesLibTest.php index 2411c5c9cf3..cbe6ad948d8 100644 --- a/test/phpunit/FilesLibTest.php +++ b/test/phpunit/FilesLibTest.php @@ -46,7 +46,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class FilesLibTest extends PHPUnit_Framework_TestCase +class FilesLibTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/FormAdminTest.php b/test/phpunit/FormAdminTest.php index 8532d6ac283..20c22a76cd8 100644 --- a/test/phpunit/FormAdminTest.php +++ b/test/phpunit/FormAdminTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class FormAdminTest extends PHPUnit_Framework_TestCase +class FormAdminTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/Functions2LibTest.php b/test/phpunit/Functions2LibTest.php index 50efabf9403..a83ba0f4859 100644 --- a/test/phpunit/Functions2LibTest.php +++ b/test/phpunit/Functions2LibTest.php @@ -48,7 +48,7 @@ if (! defined("NOLOGIN")) define("NOLOGIN", '1'); // If this page i * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class Functions2LibTest extends PHPUnit_Framework_TestCase +class Functions2LibTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/HolidayTest.php b/test/phpunit/HolidayTest.php index a352a1722b9..7e3fc6a8069 100644 --- a/test/phpunit/HolidayTest.php +++ b/test/phpunit/HolidayTest.php @@ -47,7 +47,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class HolidayTest extends PHPUnit_Framework_TestCase +class HolidayTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/ImagesLibTest.php b/test/phpunit/ImagesLibTest.php index 4ecaab49d39..445fe572b61 100644 --- a/test/phpunit/ImagesLibTest.php +++ b/test/phpunit/ImagesLibTest.php @@ -46,7 +46,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class ImagesLibTest extends PHPUnit_Framework_TestCase +class ImagesLibTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/ImportTest.php b/test/phpunit/ImportTest.php index 10d906f2ede..5a11a770842 100644 --- a/test/phpunit/ImportTest.php +++ b/test/phpunit/ImportTest.php @@ -47,7 +47,7 @@ if (! defined("NOLOGIN")) define("NOLOGIN", '1'); // If this page i * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class ImportTest extends PHPUnit_Framework_TestCase +class ImportTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/JsonLibTest.php b/test/phpunit/JsonLibTest.php index a84a78a7c75..c123f2e6ff6 100644 --- a/test/phpunit/JsonLibTest.php +++ b/test/phpunit/JsonLibTest.php @@ -47,7 +47,7 @@ if (! defined("NOLOGIN")) define("NOLOGIN", '1'); // If this page i * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class JsonLibTest extends PHPUnit_Framework_TestCase +class JsonLibTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/LangTest.php b/test/phpunit/LangTest.php index 228cde51901..71d467b78d3 100644 --- a/test/phpunit/LangTest.php +++ b/test/phpunit/LangTest.php @@ -57,7 +57,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class LangTest extends PHPUnit_Framework_TestCase +class LangTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/LoanTest.php b/test/phpunit/LoanTest.php index b0ecd583514..e0cc1f5b5ff 100644 --- a/test/phpunit/LoanTest.php +++ b/test/phpunit/LoanTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class LoanTest extends PHPUnit_Framework_TestCase +class LoanTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/MarginsLibTest.php b/test/phpunit/MarginsLibTest.php index 81f4a512e4f..84fb59c81ec 100644 --- a/test/phpunit/MarginsLibTest.php +++ b/test/phpunit/MarginsLibTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class MarginsLibTest extends PHPUnit_Framework_TestCase +class MarginsLibTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/ModulesTest.php b/test/phpunit/ModulesTest.php index ea16813d873..38a630b46e0 100755 --- a/test/phpunit/ModulesTest.php +++ b/test/phpunit/ModulesTest.php @@ -44,7 +44,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class ModulesTest extends PHPUnit_Framework_TestCase +class ModulesTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/MouvementStockTest.php b/test/phpunit/MouvementStockTest.php index cac49f34a7a..ba7b093596f 100644 --- a/test/phpunit/MouvementStockTest.php +++ b/test/phpunit/MouvementStockTest.php @@ -47,7 +47,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class MouvementStockTest extends PHPUnit_Framework_TestCase +class MouvementStockTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/NumberingModulesTest.php b/test/phpunit/NumberingModulesTest.php index 66c4c670128..57c376b702b 100644 --- a/test/phpunit/NumberingModulesTest.php +++ b/test/phpunit/NumberingModulesTest.php @@ -44,7 +44,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class NumberingModulesTest extends PHPUnit_Framework_TestCase +class NumberingModulesTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/PaypalTest.php b/test/phpunit/PaypalTest.php index 98300a6a86a..54913b1e5f9 100644 --- a/test/phpunit/PaypalTest.php +++ b/test/phpunit/PaypalTest.php @@ -46,7 +46,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class PaypalTest extends PHPUnit_Framework_TestCase +class PaypalTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/PdfDocTest.php b/test/phpunit/PdfDocTest.php index 634a931da56..bece387b93f 100644 --- a/test/phpunit/PdfDocTest.php +++ b/test/phpunit/PdfDocTest.php @@ -48,7 +48,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class PdfDocTest extends PHPUnit_Framework_TestCase +class PdfDocTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/PgsqlTest.php b/test/phpunit/PgsqlTest.php index a1fcc180528..743328abb71 100644 --- a/test/phpunit/PgsqlTest.php +++ b/test/phpunit/PgsqlTest.php @@ -47,7 +47,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class PgsqlTest extends PHPUnit_Framework_TestCase +class PgsqlTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/PricesTest.php b/test/phpunit/PricesTest.php index 0203a1d4275..32babae209c 100755 --- a/test/phpunit/PricesTest.php +++ b/test/phpunit/PricesTest.php @@ -52,7 +52,7 @@ if (! empty($conf->global->MAIN_ROUNDING_RULE_TOT)) * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class PricesTest extends PHPUnit_Framework_TestCase +class PricesTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/ProductTest.php b/test/phpunit/ProductTest.php index 115475113fa..782d5f076e8 100644 --- a/test/phpunit/ProductTest.php +++ b/test/phpunit/ProductTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class ProductTest extends PHPUnit_Framework_TestCase +class ProductTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/ProjectTest.php b/test/phpunit/ProjectTest.php index faa533e2c00..886463be104 100644 --- a/test/phpunit/ProjectTest.php +++ b/test/phpunit/ProjectTest.php @@ -46,7 +46,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class ProjectTest extends PHPUnit_Framework_TestCase +class ProjectTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/PropalTest.php b/test/phpunit/PropalTest.php index 6a3d17d7806..b0331a5575f 100644 --- a/test/phpunit/PropalTest.php +++ b/test/phpunit/PropalTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class PropalTest extends PHPUnit_Framework_TestCase +class PropalTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/RestAPIDocumentTest.php b/test/phpunit/RestAPIDocumentTest.php index f0d3efe34e6..08ea79352d3 100644 --- a/test/phpunit/RestAPIDocumentTest.php +++ b/test/phpunit/RestAPIDocumentTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_UMASK = '0666'; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class RestAPIDocumentTest extends PHPUnit_Framework_TestCase +class RestAPIDocumentTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/RestAPIUserTest.php b/test/phpunit/RestAPIUserTest.php index 39f924e7e04..b44fb7aaccc 100644 --- a/test/phpunit/RestAPIUserTest.php +++ b/test/phpunit/RestAPIUserTest.php @@ -47,7 +47,7 @@ $conf->global->MAIN_UMASK='0666'; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class RestAPIUserTest extends PHPUnit_Framework_TestCase +class RestAPIUserTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/ScriptsTest.php b/test/phpunit/ScriptsTest.php index 4e43a036c7e..e4a2263e849 100644 --- a/test/phpunit/ScriptsTest.php +++ b/test/phpunit/ScriptsTest.php @@ -57,7 +57,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class ScriptsTest extends PHPUnit_Framework_TestCase +class ScriptsTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/SecurityTest.php b/test/phpunit/SecurityTest.php index 636fa923bc0..b457c4c0fa7 100644 --- a/test/phpunit/SecurityTest.php +++ b/test/phpunit/SecurityTest.php @@ -57,7 +57,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class SecurityTest extends PHPUnit_Framework_TestCase +class SecurityTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/SocieteTest.php b/test/phpunit/SocieteTest.php index 11eb6711862..f823d8a4803 100755 --- a/test/phpunit/SocieteTest.php +++ b/test/phpunit/SocieteTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class SocieteTest extends PHPUnit_Framework_TestCase +class SocieteTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/SupplierProposalTest.php b/test/phpunit/SupplierProposalTest.php index 14a63776444..ee95e882572 100644 --- a/test/phpunit/SupplierProposalTest.php +++ b/test/phpunit/SupplierProposalTest.php @@ -48,7 +48,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class SupplierProposalTest extends PHPUnit_Framework_TestCase +class SupplierProposalTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/TicketTest.php b/test/phpunit/TicketTest.php index e5367d03fbe..4d7ce3363ed 100644 --- a/test/phpunit/TicketTest.php +++ b/test/phpunit/TicketTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class TicketTest extends PHPUnit_Framework_TestCase +class TicketTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/UserGroupTest.php b/test/phpunit/UserGroupTest.php index e524b989172..be230655fe1 100644 --- a/test/phpunit/UserGroupTest.php +++ b/test/phpunit/UserGroupTest.php @@ -44,7 +44,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class UserGroupTest extends PHPUnit_Framework_TestCase +class UserGroupTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/UserTest.php b/test/phpunit/UserTest.php index b87dfd84494..e993ed981a6 100644 --- a/test/phpunit/UserTest.php +++ b/test/phpunit/UserTest.php @@ -44,7 +44,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class UserTest extends PHPUnit_Framework_TestCase +class UserTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/UtilsTest.php b/test/phpunit/UtilsTest.php index 58074af1c1f..5a913977ccc 100644 --- a/test/phpunit/UtilsTest.php +++ b/test/phpunit/UtilsTest.php @@ -44,7 +44,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class UtilsTest extends PHPUnit_Framework_TestCase +class UtilsTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/WebservicesInvoicesTest.php b/test/phpunit/WebservicesInvoicesTest.php index fb8e36af6a1..77ad0902ec2 100644 --- a/test/phpunit/WebservicesInvoicesTest.php +++ b/test/phpunit/WebservicesInvoicesTest.php @@ -49,7 +49,7 @@ $conf->global->MAIN_UMASK='0666'; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class WebservicesInvoicesTest extends PHPUnit_Framework_TestCase +class WebservicesInvoicesTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/WebservicesOrdersTest.php b/test/phpunit/WebservicesOrdersTest.php index 8b989df273f..8e6312ac039 100644 --- a/test/phpunit/WebservicesOrdersTest.php +++ b/test/phpunit/WebservicesOrdersTest.php @@ -48,7 +48,7 @@ $conf->global->MAIN_UMASK='0666'; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class WebservicesOrdersTest extends PHPUnit_Framework_TestCase +class WebservicesOrdersTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/WebservicesOtherTest.php b/test/phpunit/WebservicesOtherTest.php index bdc3a15b2b9..5c19414966b 100644 --- a/test/phpunit/WebservicesOtherTest.php +++ b/test/phpunit/WebservicesOtherTest.php @@ -48,7 +48,7 @@ $conf->global->MAIN_UMASK='0666'; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class WebservicesOtherTest extends PHPUnit_Framework_TestCase +class WebservicesOtherTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/WebservicesProductsTest.php b/test/phpunit/WebservicesProductsTest.php index 90147a429a4..ff78d9d91bb 100644 --- a/test/phpunit/WebservicesProductsTest.php +++ b/test/phpunit/WebservicesProductsTest.php @@ -55,7 +55,7 @@ if (empty($conf->service->enabled)) * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class WebservicesProductsTest extends PHPUnit_Framework_TestCase +class WebservicesProductsTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/WebservicesThirdpartyTest.php b/test/phpunit/WebservicesThirdpartyTest.php index cb1f26d1980..4effe555d2f 100644 --- a/test/phpunit/WebservicesThirdpartyTest.php +++ b/test/phpunit/WebservicesThirdpartyTest.php @@ -48,7 +48,7 @@ $conf->global->MAIN_UMASK='0666'; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class WebservicesThirdpartyTest extends PHPUnit_Framework_TestCase +class WebservicesThirdpartyTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/WebservicesUserTest.php b/test/phpunit/WebservicesUserTest.php index 7ca0d9e8ee8..d7df632e413 100644 --- a/test/phpunit/WebservicesUserTest.php +++ b/test/phpunit/WebservicesUserTest.php @@ -48,7 +48,7 @@ $conf->global->MAIN_UMASK='0666'; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class WebservicesUserTest extends PHPUnit_Framework_TestCase +class WebservicesUserTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/XCalLibTest.php b/test/phpunit/XCalLibTest.php index 4783bf4bc8f..602ec11e46d 100644 --- a/test/phpunit/XCalLibTest.php +++ b/test/phpunit/XCalLibTest.php @@ -44,7 +44,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class XCalLibTest extends PHPUnit_Framework_TestCase +class XCalLibTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; From 0a7d70829f566b63eb1c1d1b3674c3462ec6f20f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 5 Jul 2019 21:37:25 +0200 Subject: [PATCH 657/828] Translation of some comments --- htdocs/adherents/type.php | 2 +- htdocs/admin/tools/listevents.php | 2 +- htdocs/comm/propal/list.php | 2 +- htdocs/commande/customer.php | 2 +- htdocs/commande/orderstoinvoice.php | 2 +- htdocs/compta/clients.php | 2 +- htdocs/compta/paiement/cheque/list.php | 2 +- htdocs/expedition/list.php | 2 +- htdocs/fourn/commande/list.php | 2 +- htdocs/fourn/commande/orderstoinvoice.php | 2 +- htdocs/fourn/product/list.php | 2 +- htdocs/product/reassort.php | 2 +- htdocs/product/reassortlot.php | 2 +- htdocs/product/stock/list.php | 2 +- htdocs/product/stock/movement_card.php | 2 +- htdocs/product/stock/movement_list.php | 2 +- htdocs/product/stock/replenish.php | 2 +- htdocs/reception/list.php | 2 +- htdocs/supplier_proposal/list.php | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) diff --git a/htdocs/adherents/type.php b/htdocs/adherents/type.php index 19790159c22..2c8c108b3d5 100644 --- a/htdocs/adherents/type.php +++ b/htdocs/adherents/type.php @@ -603,7 +603,7 @@ if ($rowid > 0) print '
'; print '
'."\n"; - // Lignes des champs de filtre + // Fields title search print ''; print '
'; diff --git a/htdocs/admin/tools/listevents.php b/htdocs/admin/tools/listevents.php index d508afe63d2..39ed6162f0f 100644 --- a/htdocs/admin/tools/listevents.php +++ b/htdocs/admin/tools/listevents.php @@ -233,7 +233,7 @@ if ($result) print '
'; print ''; - // Lignes des champs de filtres + // Fields title search print ''; print ''; diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php index 555e89e7a61..241f22cfe38 100644 --- a/htdocs/comm/propal/list.php +++ b/htdocs/comm/propal/list.php @@ -446,7 +446,7 @@ if ($resql) $newcardbutton.= dolGetButtonTitle($langs->trans('NewPropal'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/comm/propal/card.php?action=create'); } - // Lignes des champs de filtre + // Fields title search print ''; if ($optioncss != '') print ''; print ''; diff --git a/htdocs/commande/customer.php b/htdocs/commande/customer.php index 8b7fef878ed..3fa3f90774f 100644 --- a/htdocs/commande/customer.php +++ b/htdocs/commande/customer.php @@ -133,7 +133,7 @@ if ($resql) print_liste_field_titre("DateCreation", $_SERVER["PHP_SELF"], "datec", $addu, "", 'class="right"', $sortfield, $sortorder); print "\n"; - // Lignes des champs de filtre + // Fields title search print ''; print ''; - // Lignes des champs de filtre + // Fields title search print ''; print ''; print ''; diff --git a/htdocs/compta/clients.php b/htdocs/compta/clients.php index 36cc40c851c..58631937955 100644 --- a/htdocs/compta/clients.php +++ b/htdocs/compta/clients.php @@ -151,7 +151,7 @@ if ($resql) print_liste_field_titre("DateCreation", $_SERVER["PHP_SELF"], "datec", $addu, "", '', $sortfield, $sortorder, 'right '); print "\n"; - // Lignes des champs de filtre + // Fields title search print ''; print '
'.$form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0).'
'; diff --git a/htdocs/commande/orderstoinvoice.php b/htdocs/commande/orderstoinvoice.php index 0d0b202a8c3..33acc2b4969 100644 --- a/htdocs/commande/orderstoinvoice.php +++ b/htdocs/commande/orderstoinvoice.php @@ -615,7 +615,7 @@ if (($action != 'create' && $action != 'add') || ($action == 'create' && $error) print_liste_field_titre('GenerateBill', '', '', '', '', 'align="center"'); print '
'; diff --git a/htdocs/compta/paiement/cheque/list.php b/htdocs/compta/paiement/cheque/list.php index 11de8aa48a2..64ae1dea1f2 100644 --- a/htdocs/compta/paiement/cheque/list.php +++ b/htdocs/compta/paiement/cheque/list.php @@ -157,7 +157,7 @@ if ($resql) print '
'; print ''."\n"; - // Lignes des champs de filtre + // Fields title search print ''; print '\n"; From 65e9d8f239048afcfea1d73a96917363090e245f Mon Sep 17 00:00:00 2001 From: Florian Mortgat Date: Thu, 25 Jul 2019 11:14:59 +0200 Subject: [PATCH 816/828] FIX: tk9877 - PDF rouget requires product.lib.php (otherwise measuring_units_string() is not defined) --- htdocs/core/modules/expedition/doc/pdf_rouget.modules.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php b/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php index fc242e47e52..087b4a373aa 100644 --- a/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php +++ b/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php @@ -29,6 +29,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/modules/expedition/modules_expedition.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/product.lib.php'; /** From 0bb92ff10ddd87c6a0179dddbb9efc0eabc0dbdc Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 25 Jul 2019 13:48:13 +0200 Subject: [PATCH 817/828] NEW Add method getStructuredDataForBlogPost for website --- htdocs/core/lib/website.lib.php | 58 ++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 29a2ab27d8f..532ae51da97 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -397,7 +397,7 @@ function redirectToContainer($containerref, $containeraliasalt = '', $containeri */ function includeContainer($containerref) { - global $conf, $db, $hookmanager, $langs, $mysoc, $user, $website, $websitepage, $weblangs; // Very important. Required to have var available when running inluded containers. + global $conf, $db, $hookmanager, $langs, $mysoc, $user, $website, $websitepage, $weblangs; // Very important. Required to have var available when running included containers. global $includehtmlcontentopened; global $websitekey, $websitepagefile; @@ -434,7 +434,63 @@ function includeContainer($containerref) $includehtmlcontentopened--; } +/** + * Return HTML content to add structured data for an article, news or Blog Post. + * + * @param WebsitePage $websitepage Website page object + * @return string HTML content + */ +function getStructuredDataForBlogPost(WebsitePage $websitepage) +{ + global $conf, $db, $hookmanager, $langs, $mysoc, $user, $website, $weblangs; // Very important. Required to have var available when running inluded containers. + global $includehtmlcontentopened; + global $websitekey, $websitepagefile; + if ($websitepage->fk_user_creat > 0) + { + include_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php'; + $tmpuser = new User($db); + $restmpuser = $tmpuser->fetch($websitepage->fk_user_creat); + + if ($restmpuser > 0) + { + $ret = ''."\n"; + $ret .= ''."\n"; + } + } + + return $ret; +} /** * Download all images found into page content $tmp. From d1aa15004e1adcf8a2ab18fb54e2c4912ed5b4eb Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 25 Jul 2019 13:48:13 +0200 Subject: [PATCH 818/828] NEW Add method getStructuredData for website --- htdocs/core/lib/website.lib.php | 62 ++++++++++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 29a2ab27d8f..7b1f8756252 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -397,7 +397,7 @@ function redirectToContainer($containerref, $containeraliasalt = '', $containeri */ function includeContainer($containerref) { - global $conf, $db, $hookmanager, $langs, $mysoc, $user, $website, $websitepage, $weblangs; // Very important. Required to have var available when running inluded containers. + global $conf, $db, $hookmanager, $langs, $mysoc, $user, $website, $websitepage, $weblangs; // Very important. Required to have var available when running included containers. global $includehtmlcontentopened; global $websitekey, $websitepagefile; @@ -434,7 +434,67 @@ function includeContainer($containerref) $includehtmlcontentopened--; } +/** + * Return HTML content to add structured data for an article, news or Blog Post. + * + * @param string $type 'blogpost', 'product', ... + * @param WebsitePage $websitepage Website page object + * @return string HTML content + */ +function getStructuredData($type='blogpost', WebsitePage $websitepage) +{ + global $conf, $db, $hookmanager, $langs, $mysoc, $user, $website, $weblangs; // Very important. Required to have var available when running inluded containers. + global $includehtmlcontentopened; + global $websitekey, $websitepagefile; + if ($type == 'blogpost') + { + if ($websitepage->fk_user_creat > 0) + { + include_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php'; + $tmpuser = new User($db); + $restmpuser = $tmpuser->fetch($websitepage->fk_user_creat); + + if ($restmpuser > 0) + { + $ret = ''."\n"; + $ret .= ''."\n"; + } + } + } + + return $ret; +} /** * Download all images found into page content $tmp. From e29023f155df4d69d24b725689e96f017b375935 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 25 Jul 2019 14:12:22 +0200 Subject: [PATCH 819/828] Fix --- htdocs/core/lib/website.lib.php | 4 ++-- htdocs/website/class/websitepage.class.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 3d74e981e10..735d730e579 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -464,11 +464,11 @@ function getStructuredData($type, WebsitePage $websitepage) "@type": "NewsArticle", "mainEntityOfPage": { "@type": "WebPage", - "@id": "'.'/'.$websitepage->pageurl.'" + "@id": "'.$websitepage->pageurl.'" }, "headline": "'.$websitepage->title.'", "image": [ - "'."/".$websitepage->image.'", + "'.$websitepage->image.'" ], "datePublished": "'.dol_print_date($websitepage->date_creation, 'dayhourrfc').'", "dateModified": "'.dol_print_date($websitepage->date_modification, 'dayhourrfc').'", diff --git a/htdocs/website/class/websitepage.class.php b/htdocs/website/class/websitepage.class.php index 8814756284c..417a1bfc305 100644 --- a/htdocs/website/class/websitepage.class.php +++ b/htdocs/website/class/websitepage.class.php @@ -99,7 +99,7 @@ class WebsitePage extends CommonObject 'type_container' =>array('type'=>'varchar(16)', 'label'=>'Type', 'enabled'=>1, 'visible'=>1, 'notnull'=>1, 'index'=>0, 'position'=>12, 'comment'=>'Type of container'), 'title' =>array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>1, 'visible'=>1, 'position'=>30, 'searchall'=>1), 'description' =>array('type'=>'varchar(255)', 'label'=>'Description', 'enabled'=>1, 'visible'=>1, 'position'=>30, 'searchall'=>1), - 'image' =>array('type'=>'varchar(255)', 'label'=>'Image', 'enabled'=>1, 'visible'=>1, 'position'=>32, 'searchall'=>0, 'help'=>'Relative path of media. Used if Type is "blog_post"'), + 'image' =>array('type'=>'varchar(255)', 'label'=>'Image', 'enabled'=>1, 'visible'=>1, 'position'=>32, 'searchall'=>0, 'help'=>'Relative path of media. Used if Type is "blogpost"'), 'keywords' =>array('type'=>'varchar(255)', 'label'=>'Keywords', 'enabled'=>1, 'visible'=>1, 'position'=>45, 'searchall'=>0), 'lang' =>array('type'=>'varchar(6)', 'label'=>'Lang', 'enabled'=>1, 'visible'=>1, 'position'=>45, 'searchall'=>0), //'status' =>array('type'=>'integer', 'label'=>'Status', 'enabled'=>1, 'visible'=>1, 'index'=>true, 'position'=>1000), From 1978ffb370e5cca90246125b34a603d0291fd1e5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 25 Jul 2019 14:21:39 +0200 Subject: [PATCH 820/828] Fix --- htdocs/core/lib/website.lib.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 735d730e579..bacd62960d0 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -476,17 +476,17 @@ function getStructuredData($type, WebsitePage $websitepage) "@type": "Person", "name": "'.$tmpuser->getFullName($weblangs).'" }, + "publisher": { + "@type": "Organization", + "name": "'.$mysoc->name.'" + }, "description": "'.$websitepage->description.'" }'."\n"; /* - "publisher": { - "@type": "Organization", - "name": "Google", - "logo": { - "@type": "ImageObject", - "url": "https://google.com/logo.jpg" - } - }, + "logo": { + "@type": "ImageObject", + "url": "https://google.com/logo.jpg" + } */ $ret .= ''."\n"; } From 6674b8975b58f71b30a7dd170eb532fdc062d8af Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 25 Jul 2019 14:26:48 +0200 Subject: [PATCH 821/828] Fix logo of organization --- htdocs/core/lib/website.lib.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index bacd62960d0..79864f3879d 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -479,14 +479,14 @@ function getStructuredData($type, WebsitePage $websitepage) "publisher": { "@type": "Organization", "name": "'.$mysoc->name.'" + "logo": { + "@type": "ImageObject", + "url": "/viewimage.php?modulepart=mycompany&file=logos%2F'.urlencode($mysoc->logo).'" + } }, "description": "'.$websitepage->description.'" }'."\n"; /* - "logo": { - "@type": "ImageObject", - "url": "https://google.com/logo.jpg" - } */ $ret .= ''."\n"; } From fb2a9e371c81286176cbb84d79fb493ff4b807b6 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 25 Jul 2019 14:27:53 +0200 Subject: [PATCH 822/828] Fix syntax --- htdocs/core/lib/website.lib.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 79864f3879d..10ba1707bf1 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -477,12 +477,12 @@ function getStructuredData($type, WebsitePage $websitepage) "name": "'.$tmpuser->getFullName($weblangs).'" }, "publisher": { - "@type": "Organization", - "name": "'.$mysoc->name.'" - "logo": { + "@type": "Organization", + "name": "'.$mysoc->name.'", + "logo": { "@type": "ImageObject", "url": "/viewimage.php?modulepart=mycompany&file=logos%2F'.urlencode($mysoc->logo).'" - } + } }, "description": "'.$websitepage->description.'" }'."\n"; From 351b877c05ceb7f7d5227b0f79736bd19e220a9f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 25 Jul 2019 14:39:22 +0200 Subject: [PATCH 823/828] Add structured data product --- htdocs/core/lib/website.lib.php | 70 ++++++++++++++++++++++++++++++--- 1 file changed, 64 insertions(+), 6 deletions(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 10ba1707bf1..08ccdb05246 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -437,17 +437,41 @@ function includeContainer($containerref) /** * Return HTML content to add structured data for an article, news or Blog Post. * - * @param string $type 'blogpost', 'product', ... + * @param string $type 'blogpost', 'product', 'software'... * @param WebsitePage $websitepage Website page object + * @param array $data Array of data parameters for structured data * @return string HTML content */ -function getStructuredData($type, WebsitePage $websitepage) +function getStructuredData($type, WebsitePage $websitepage, $data = array()) { global $conf, $db, $hookmanager, $langs, $mysoc, $user, $website, $weblangs; // Very important. Required to have var available when running inluded containers. global $includehtmlcontentopened; global $websitekey, $websitepagefile; - if ($type == 'blogpost') + if ($type == 'software') + { + $ret = ''."\n"; + $ret .= ''."\n"; + } + elseif ($type == 'blogpost') { if ($websitepage->fk_user_creat > 0) { @@ -486,13 +510,47 @@ function getStructuredData($type, WebsitePage $websitepage) }, "description": "'.$websitepage->description.'" }'."\n"; - /* - */ $ret .= ''."\n"; } } } - + elseif ($type == 'product') + { + $ret = ''."\n"; + $ret.= ''."\n"; + } return $ret; } From fe22f11f10854e2d53f9d142d99e320734939d35 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 25 Jul 2019 15:07:00 +0200 Subject: [PATCH 824/828] More generic code --- htdocs/core/lib/website.lib.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 08ccdb05246..a4c187f2ffa 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -438,13 +438,12 @@ function includeContainer($containerref) * Return HTML content to add structured data for an article, news or Blog Post. * * @param string $type 'blogpost', 'product', 'software'... - * @param WebsitePage $websitepage Website page object * @param array $data Array of data parameters for structured data * @return string HTML content */ -function getStructuredData($type, WebsitePage $websitepage, $data = array()) +function getStructuredData($type, $data = array()) { - global $conf, $db, $hookmanager, $langs, $mysoc, $user, $website, $weblangs; // Very important. Required to have var available when running inluded containers. + global $conf, $db, $hookmanager, $langs, $mysoc, $user, $website, $websitepage, $weblangs; // Very important. Required to have var available when running inluded containers. global $includehtmlcontentopened; global $websitekey, $websitepagefile; From e88ca8ae89c1fa2e6c39a9bd6c352e0f1d43198d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 25 Jul 2019 15:07:24 +0200 Subject: [PATCH 825/828] Fix migration --- htdocs/install/mysql/migration/9.0.0-10.0.0.sql | 3 +++ 1 file changed, 3 insertions(+) diff --git a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql index 6484fe572df..eb66c37bb4f 100644 --- a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql +++ b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql @@ -398,3 +398,6 @@ insert into llx_c_type_contact(rowid, element, source, code, libelle, active ) v insert into llx_c_type_contact(rowid, element, source, code, libelle, active ) values (113, 'supplier_proposal', 'external', 'SERVICE', 'Contact fournisseur prestation', 1); ALTER TABLE llx_ticket_extrafields ADD INDEX idx_ticket_extrafields (fk_object); + +UPDATE llx_website_page set fk_user_creat = fk_user_modif WHERE fk_user_creat IS NULL and fk_user_modif IS NOT NULL; + From 1d7885bc0cb0a142095f908137ea10429dbdbfc2 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 25 Jul 2019 16:58:24 +0200 Subject: [PATCH 826/828] FIX We should remove property comments only for project and task api. --- htdocs/api/class/api.class.php | 1 - htdocs/projet/class/api_projects.class.php | 2 ++ htdocs/projet/class/api_tasks.class.php | 2 ++ 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/htdocs/api/class/api.class.php b/htdocs/api/class/api.class.php index de5a1e75d0a..0d9971b0929 100644 --- a/htdocs/api/class/api.class.php +++ b/htdocs/api/class/api.class.php @@ -145,7 +145,6 @@ class DolibarrApi unset($object->picto); unset($object->fieldsforcombobox); - unset($object->comments); unset($object->skip_update_total); unset($object->context); diff --git a/htdocs/projet/class/api_projects.class.php b/htdocs/projet/class/api_projects.class.php index 9680cd66591..93da94184a3 100644 --- a/htdocs/projet/class/api_projects.class.php +++ b/htdocs/projet/class/api_projects.class.php @@ -582,6 +582,8 @@ class Projects extends DolibarrApi unset($object->total_localtax2); unset($object->total_ttc); + unset($object->comments); + return $object; } diff --git a/htdocs/projet/class/api_tasks.class.php b/htdocs/projet/class/api_tasks.class.php index 9fafcb98343..337cef3ccb5 100644 --- a/htdocs/projet/class/api_tasks.class.php +++ b/htdocs/projet/class/api_tasks.class.php @@ -592,6 +592,8 @@ class Tasks extends DolibarrApi unset($object->total_localtax2); unset($object->total_ttc); + unset($object->comments); + return $object; } From 6e3fad8f8380e2c722b7c8e73d740f54f2ee7aba Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 25 Jul 2019 17:42:44 +0200 Subject: [PATCH 827/828] Fix phpcs --- .../accountancy/class/bookkeeping.class.php | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/htdocs/accountancy/class/bookkeeping.class.php b/htdocs/accountancy/class/bookkeeping.class.php index 0034723ec4c..faad238d7e4 100644 --- a/htdocs/accountancy/class/bookkeeping.class.php +++ b/htdocs/accountancy/class/bookkeeping.class.php @@ -324,8 +324,8 @@ class BookKeeping extends CommonObject $sql .= ", piece_num"; $sql .= ', entity'; $sql .= ") VALUES ("; - $sql .= "'" . $this->db->idate($this->doc_date) . "'"; - $sql .= ", ".(! isset($this->date_lim_reglement) || dol_strlen($this->date_lim_reglement) == 0 ? 'NULL' : "'" . $this->db->idate($this->date_lim_reglement) . "'"); + $sql .= "'".$this->db->idate($this->doc_date)."'"; + $sql .= ", ".(! isset($this->date_lim_reglement) || dol_strlen($this->date_lim_reglement) == 0 ? 'NULL' : "'".$this->db->idate($this->date_lim_reglement)."'"); $sql .= ",'" . $this->db->escape($this->doc_type) . "'"; $sql .= ",'" . $this->db->escape($this->doc_ref) . "'"; $sql .= "," . $this->fk_doc; @@ -341,7 +341,7 @@ class BookKeeping extends CommonObject $sql .= "," . $this->montant; $sql .= ",'" . $this->db->escape($this->sens) . "'"; $sql .= ",'" . $this->db->escape($this->fk_user_author) . "'"; - $sql .= ",'" . $this->db->idate($now). "'"; + $sql .= ",'".$this->db->idate($now)."'"; $sql .= ",'" . $this->db->escape($this->code_journal) . "'"; $sql .= ",'" . $this->db->escape($this->journal_label) . "'"; $sql .= "," . $this->db->escape($this->piece_num); @@ -573,7 +573,7 @@ class BookKeeping extends CommonObject $sql .= 'piece_num,'; $sql .= 'entity'; $sql .= ') VALUES ('; - $sql .= ' ' . (! isset($this->doc_date) || dol_strlen($this->doc_date) == 0 ? 'NULL' : "'" . $this->db->idate($this->doc_date) . "'") . ','; + $sql .= ' ' . (! isset($this->doc_date) || dol_strlen($this->doc_date) == 0 ? 'NULL' : "'".$this->db->idate($this->doc_date)."'") . ','; $sql .= ' ' . (! isset($this->date_lim_reglement) || dol_strlen($this->date_lim_reglement) == 0 ? 'NULL' : "'" . $this->db->idate($this->date_lim_reglement) . "'") . ','; $sql .= ' ' . (! isset($this->doc_type) ? 'NULL' : "'" . $this->db->escape($this->doc_type) . "'") . ','; $sql .= ' ' . (! isset($this->doc_ref) ? 'NULL' : "'" . $this->db->escape($this->doc_ref) . "'") . ','; @@ -590,7 +590,7 @@ class BookKeeping extends CommonObject $sql .= ' ' . (! isset($this->montant) ? 'NULL' : $this->montant ). ','; $sql .= ' ' . (! isset($this->sens) ? 'NULL' : "'" . $this->db->escape($this->sens) . "'") . ','; $sql .= ' ' . $user->id . ','; - $sql .= ' ' . "'" . $this->db->idate($now) . "',"; + $sql .= ' ' . "'".$this->db->idate($now)."',"; $sql .= ' ' . (empty($this->code_journal) ? 'NULL' : "'" . $this->db->escape($this->code_journal) . "'") . ','; $sql .= ' ' . (empty($this->journal_label) ? 'NULL' : "'" . $this->db->escape($this->journal_label) . "'") . ','; $sql .= ' ' . (empty($this->piece_num) ? 'NULL' : $this->db->escape($this->piece_num)).','; @@ -1163,7 +1163,7 @@ class BookKeeping extends CommonObject // Update request $sql = 'UPDATE ' . MAIN_DB_PREFIX . $this->table_element . $mode.' SET'; - $sql .= ' doc_date = ' . (! isset($this->doc_date) || dol_strlen($this->doc_date) != 0 ? "'" . $this->db->idate($this->doc_date) . "'" : 'null') . ','; + $sql .= ' doc_date = ' . (! isset($this->doc_date) || dol_strlen($this->doc_date) != 0 ? "'".$this->db->idate($this->doc_date)."'" : 'null') . ','; $sql .= ' doc_type = ' . (isset($this->doc_type) ? "'" . $this->db->escape($this->doc_type) . "'" : "null") . ','; $sql .= ' doc_ref = ' . (isset($this->doc_ref) ? "'" . $this->db->escape($this->doc_ref) . "'" : "null") . ','; $sql .= ' fk_doc = ' . (isset($this->fk_doc) ? $this->fk_doc : "null") . ','; @@ -1687,7 +1687,7 @@ class BookKeeping extends CommonObject * @param string $piece_num Piece num * @return int int <0 if KO, >0 if OK */ - public function transformTransaction($direction=0,$piece_num='') + public function transformTransaction($direction = 0, $piece_num = '') { $error = 0; @@ -1708,15 +1708,15 @@ class BookKeeping extends CommonObject $sql .= ' SELECT doc_date, doc_type,'; $sql .= ' doc_ref, fk_doc, fk_docdet, entity, thirdparty_code, subledger_account, subledger_label,'; $sql .= ' numero_compte, label_compte, label_operation, debit, credit,'; - $sql .= ' montant, sens, fk_user_author, import_key, code_journal, journal_label, ' . $next_piecenum . ', "' . $this->db->idate($now) . '"'; - $sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element . '_tmp WHERE piece_num = ' . $piece_num; + $sql .= ' montant, sens, fk_user_author, import_key, code_journal, journal_label, ' . $next_piecenum . ", '".$this->db->idate($now)."'"; + $sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element . '_tmp WHERE piece_num = ' . $this->db->escape($piece_num); $resql = $this->db->query($sql); if (! $resql) { $error ++; $this->errors[] = 'Error ' . $this->db->lasterror(); dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR); } - $sql = 'DELETE FROM ' . MAIN_DB_PREFIX . $this->table_element . '_tmp WHERE piece_num = ' . $piece_num; + $sql = 'DELETE FROM ' . MAIN_DB_PREFIX . $this->table_element . '_tmp WHERE piece_num = ' . $this->db->escape($piece_num); $resql = $this->db->query($sql); if (! $resql) { $error ++; From 111c0dcadd03fdfd9faa29e16d17cb8f26505501 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 25 Jul 2019 17:46:48 +0200 Subject: [PATCH 828/828] Comment --- htdocs/core/class/html.formcompany.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/html.formcompany.class.php b/htdocs/core/class/html.formcompany.class.php index d1366cb8511..dfd0bd6a065 100644 --- a/htdocs/core/class/html.formcompany.class.php +++ b/htdocs/core/class/html.formcompany.class.php @@ -391,7 +391,7 @@ class FormCompany /** * Return combo list with people title * - * @param string $selected Title preselected + * @param string $selected Civility/Title code preselected * @param string $htmlname Name of HTML select combo field * @param string $morecss Add more css on SELECT element * @return string String with HTML select
'; print ''; diff --git a/htdocs/expedition/list.php b/htdocs/expedition/list.php index f5c111f2268..8bd8c702d03 100644 --- a/htdocs/expedition/list.php +++ b/htdocs/expedition/list.php @@ -318,7 +318,7 @@ if ($resql) print '
'; print ''."\n"; - // Lignes des champs de filtre + // Fields title search print ''; // Ref if (! empty($arrayfields['e.ref']['checked'])) diff --git a/htdocs/fourn/commande/list.php b/htdocs/fourn/commande/list.php index 18ba697bc20..475d42f66dc 100644 --- a/htdocs/fourn/commande/list.php +++ b/htdocs/fourn/commande/list.php @@ -635,7 +635,7 @@ if ($resql) $newcardbutton.= dolGetButtonTitle($langs->trans('NewOrder'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/fourn/commande/card.php?action=create'); } - // Lignes des champs de filtre + // Fields title search print ''; if ($optioncss != '') print ''; print ''; diff --git a/htdocs/fourn/commande/orderstoinvoice.php b/htdocs/fourn/commande/orderstoinvoice.php index 093e0fd331b..6775e9f9b65 100644 --- a/htdocs/fourn/commande/orderstoinvoice.php +++ b/htdocs/fourn/commande/orderstoinvoice.php @@ -509,7 +509,7 @@ if (($action != 'create' && $action != 'add') && !$error) { print_liste_field_titre('GenerateBill', '', '', '', '', '', '', '', 'center '); print "\n"; - // Lignes des champs de filtre + // Fields title search print ''; print '
'; // REF diff --git a/htdocs/fourn/product/list.php b/htdocs/fourn/product/list.php index 7b319490815..8fd7b809587 100644 --- a/htdocs/fourn/product/list.php +++ b/htdocs/fourn/product/list.php @@ -228,7 +228,7 @@ if ($resql) print ''; - // Lignes des champs de filtre + // Fields title search print ''; print ''; print ''; if (! empty($conf->global->MAIN_SHOW_HT_ON_SUMMARY)) print ''; - print ''; - print ''; + print ''; + print ''; print ''; print ''; @@ -924,8 +924,8 @@ if (! empty($conf->facture->enabled) && $user->rights->facture->lire) print ''; print ''; if (! empty($conf->global->MAIN_SHOW_HT_ON_SUMMARY)) print ''; - print ''; - print ''; + print ''; + print ''; print ''; print ''; } @@ -1021,8 +1021,8 @@ if (! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->facture- print ''; print ''; if (! empty($conf->global->MAIN_SHOW_HT_ON_SUMMARY)) print ''; - print ''; - print ''; + print ''; + print ''; print ''; print ''; $total += $obj->total_ht; @@ -1034,8 +1034,8 @@ if (! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->facture- print ''; print ''; if (! empty($conf->global->MAIN_SHOW_HT_ON_SUMMARY)) print ''; - print ''; - print ''; + print ''; + print ''; print ''; print ''; } From 323d2df21086510932a8f5840732e78b85d1657f Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 24 Jul 2019 10:42:00 +0200 Subject: [PATCH 810/828] Presentation nowrap on amount --- htdocs/product/index.php | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/htdocs/product/index.php b/htdocs/product/index.php index 950f4d47b5f..caeb5e5d873 100644 --- a/htdocs/product/index.php +++ b/htdocs/product/index.php @@ -357,7 +357,7 @@ if ($result) $objp->price = $price_result; } } - print ''; @@ -442,6 +442,7 @@ function activitytrim($product_type) if ($num > 0 ) { + print '
'; print '
'; print ''; diff --git a/htdocs/product/reassort.php b/htdocs/product/reassort.php index 476fec36c2a..f75ba10a03c 100644 --- a/htdocs/product/reassort.php +++ b/htdocs/product/reassort.php @@ -274,7 +274,7 @@ if ($resql) print '
'; print ''; - // Lignes des champs de filtre + // Fields title search print ''; print '
'; print ''; diff --git a/htdocs/product/reassortlot.php b/htdocs/product/reassortlot.php index faf91184dd1..d0803f40b95 100644 --- a/htdocs/product/reassortlot.php +++ b/htdocs/product/reassortlot.php @@ -271,7 +271,7 @@ if ($resql) print '
'; print ''; - // Lignes des champs de filtre + // Fields title search print ''; print ''; print ''; print '
'; print ''; diff --git a/htdocs/product/stock/list.php b/htdocs/product/stock/list.php index 8178df6b03c..8e19242d1c1 100644 --- a/htdocs/product/stock/list.php +++ b/htdocs/product/stock/list.php @@ -187,7 +187,7 @@ if ($result) print '
'; print ''."\n"; - // Lignes des champs de filtre + // Fields title search print ''; print ''; print ''; print ''; @@ -1816,6 +1812,11 @@ if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES)) dol_fiche_end(); print '
'; + print '
'; + print ' '; + print $langs->trans('ForceUpdateChildPriceSoc'); + print "
"; + print ''; print '     '; print ''; @@ -2162,7 +2163,7 @@ if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES)) // Action if ($user->rights->produit->supprimer || $user->rights->service->supprimer) { - print '
'; // Title - print ''; + print ''; // Url print ''; diff --git a/htdocs/admin/menus/index.php b/htdocs/admin/menus/index.php index d1b56d51cee..1790eaf5aee 100644 --- a/htdocs/admin/menus/index.php +++ b/htdocs/admin/menus/index.php @@ -244,13 +244,13 @@ print "
\n"; // Confirmation for remove menu entry if ($action == 'delete') { - $sql = "SELECT m.titre"; + $sql = "SELECT m.titre as title"; $sql.= " FROM ".MAIN_DB_PREFIX."menu as m"; $sql.= " WHERE m.rowid = ".GETPOST('menuId', 'int'); $result = $db->query($sql); $obj = $db->fetch_object($result); - print $form->formconfirm("index.php?menu_handler=".$menu_handler."&menuId=".GETPOST('menuId', 'int'), $langs->trans("DeleteMenu"), $langs->trans("ConfirmDeleteMenu", $obj->titre), "confirm_delete"); + print $form->formconfirm("index.php?menu_handler=".$menu_handler."&menuId=".GETPOST('menuId', 'int'), $langs->trans("DeleteMenu"), $langs->trans("ConfirmDeleteMenu", $obj->title), "confirm_delete"); } $newcardbutton=''; diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index 968469ff1e0..2f017b485d6 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -2773,7 +2773,7 @@ if ($action == 'create') $note_public = $invoice_predefined->note_public; $note_private = $invoice_predefined->note_private; - $sql = 'SELECT r.rowid, r.titre, r.total_ttc'; + $sql = 'SELECT r.rowid, r.titre as title, r.total_ttc'; $sql .= ' FROM ' . MAIN_DB_PREFIX . 'facture_rec as r'; $sql .= ' WHERE r.fk_soc = ' . $invoice_predefined->socid; @@ -2797,7 +2797,7 @@ if ($action == 'create') print ' selected'; $exampletemplateinvoice->fetch(GETPOST('fac_rec')); } - print '>' . $objp->titre . ' (' . price($objp->total_ttc) . ' ' . $langs->trans("TTC") . ')'; + print '>' . $objp->title . ' (' . price($objp->total_ttc) . ' ' . $langs->trans("TTC") . ')'; $i ++; } print ''; diff --git a/htdocs/compta/facture/class/facture-rec.class.php b/htdocs/compta/facture/class/facture-rec.class.php index f6b148d308c..37a031198bc 100644 --- a/htdocs/compta/facture/class/facture-rec.class.php +++ b/htdocs/compta/facture/class/facture-rec.class.php @@ -123,7 +123,8 @@ class FactureRec extends CommonInvoice $now=dol_now(); // Clean parameters - $this->titre=trim($this->titre); + $this->titre=trim($this->titre); // deprecated + $this->title=trim($this->title); $this->usenewprice=empty($this->usenewprice)?0:$this->usenewprice; if (empty($this->suspended)) $this->suspended=0; @@ -180,7 +181,7 @@ class FactureRec extends CommonInvoice $sql.= ", multicurrency_tx"; $sql.= ", suspended"; $sql.= ") VALUES ("; - $sql.= "'".$this->db->escape($this->titre)."'"; + $sql.= "'".$this->db->escape($this->titre ? $this->titre : $this->title)."'"; $sql.= ", ".$facsrc->socid; $sql.= ", ".$conf->entity; $sql.= ", '".$this->db->idate($now)."'"; @@ -376,7 +377,7 @@ class FactureRec extends CommonInvoice */ public function fetch($rowid, $ref = '', $ref_ext = '', $ref_int = '') { - $sql = 'SELECT f.rowid, f.entity, f.titre, f.suspended, f.fk_soc, f.amount, f.tva, f.localtax1, f.localtax2, f.total, f.total_ttc'; + $sql = 'SELECT f.rowid, f.entity, f.titre as title, f.suspended, f.fk_soc, f.amount, f.tva, f.localtax1, f.localtax2, f.total, f.total_ttc'; $sql.= ', f.remise_percent, f.remise_absolue, f.remise'; $sql.= ', f.date_lim_reglement as dlr'; $sql.= ', f.note_private, f.note_public, f.fk_user_author'; @@ -410,8 +411,9 @@ class FactureRec extends CommonInvoice $this->id = $obj->rowid; $this->entity = $obj->entity; - $this->titre = $obj->titre; - $this->ref = $obj->titre; + $this->titre = $obj->title; // deprecated + $this->title = $obj->title; + $this->ref = $obj->title; $this->ref_client = $obj->ref_client; $this->suspended = $obj->suspended; $this->type = $obj->type; diff --git a/htdocs/compta/facture/fiche-rec.php b/htdocs/compta/facture/fiche-rec.php index dd4a2af11ee..39f913fbf76 100644 --- a/htdocs/compta/facture/fiche-rec.php +++ b/htdocs/compta/facture/fiche-rec.php @@ -187,7 +187,8 @@ if (empty($reshook)) if (! $error) { - $object->titre = GETPOST('titre', 'alpha'); + $object->titre = GETPOST('titre', 'alpha'); // deprecated + $object->title = GETPOST('titre', 'alpha'); $object->note_private = GETPOST('note_private', 'none'); $object->note_public = GETPOST('note_public', 'none'); $object->modelpdf = GETPOST('modelpdf', 'alpha'); @@ -295,8 +296,9 @@ if (empty($reshook)) $result=$object->setValueFrom('titre', GETPOST('ref', 'alpha'), '', null, 'text', '', $user, 'BILLREC_MODIFY'); if ($result > 0) { - $object->titre = GETPOST('ref', 'alpha'); - $object->ref = $object->titre; + $object->titre = GETPOST('ref', 'alpha'); // deprecated + $object->title = GETPOST('ref', 'alpha'); + $object->ref = $object->title; } else dol_print_error($db, $object->error, $object->errors); } diff --git a/htdocs/compta/facture/invoicetemplate_list.php b/htdocs/compta/facture/invoicetemplate_list.php index 5da37d46fd5..1226f7c8a79 100644 --- a/htdocs/compta/facture/invoicetemplate_list.php +++ b/htdocs/compta/facture/invoicetemplate_list.php @@ -213,7 +213,7 @@ $today = dol_mktime(23, 59, 59, $tmparray['mon'], $tmparray['mday'], $tmparray[' /* * List mode */ -$sql = "SELECT s.nom as name, s.rowid as socid, f.rowid as facid, f.titre, f.total, f.tva as total_vat, f.total_ttc, f.frequency, f.unit_frequency,"; +$sql = "SELECT s.nom as name, s.rowid as socid, f.rowid as facid, f.titre as title, f.total, f.tva as total_vat, f.total_ttc, f.frequency, f.unit_frequency,"; $sql.= " f.nb_gen_done, f.nb_gen_max, f.date_last_gen, f.date_when, f.suspended,"; $sql.= " f.datec, f.tms,"; $sql.= " f.fk_cond_reglement, f.fk_mode_reglement"; @@ -514,7 +514,7 @@ if ($resql) $invoicerectmp->unit_frequency=$objp->unit_frequency; $invoicerectmp->nb_gen_max=$objp->nb_gen_max; $invoicerectmp->nb_gen_done=$objp->nb_gen_done; - $invoicerectmp->ref=$objp->titre; + $invoicerectmp->ref=$objp->title; print ''; diff --git a/htdocs/core/class/menubase.class.php b/htdocs/core/class/menubase.class.php index d1d7534af23..26f96b93ec5 100644 --- a/htdocs/core/class/menubase.class.php +++ b/htdocs/core/class/menubase.class.php @@ -422,7 +422,8 @@ class Menubase $this->position=''; $this->url='http://dummy'; $this->target=''; - $this->titre='Specimen menu'; + $this->titre='Specimen menu'; // deprecated + $this->title='Specimen menu'; $this->langs=''; $this->level=''; $this->leftmenu=''; diff --git a/htdocs/core/modules/DolibarrModules.class.php b/htdocs/core/modules/DolibarrModules.class.php index 4a8135800ae..16d3969652d 100644 --- a/htdocs/core/modules/DolibarrModules.class.php +++ b/htdocs/core/modules/DolibarrModules.class.php @@ -1938,7 +1938,8 @@ class DolibarrModules // Can not be abstract, because we need to instantiate it $menu->type=$this->menu[$key]['type']; $menu->mainmenu=isset($this->menu[$key]['mainmenu'])?$this->menu[$key]['mainmenu']:(isset($menu->fk_mainmenu)?$menu->fk_mainmenu:''); $menu->leftmenu=isset($this->menu[$key]['leftmenu'])?$this->menu[$key]['leftmenu']:''; - $menu->titre=$this->menu[$key]['titre']; + $menu->titre=$this->menu[$key]['titre']; // deprecated + $menu->title=$this->menu[$key]['titre']; $menu->url=$this->menu[$key]['url']; $menu->langs=$this->menu[$key]['langs']; $menu->position=$this->menu[$key]['position']; diff --git a/htdocs/fichinter/card-rec.php b/htdocs/fichinter/card-rec.php index 6ee445d68a1..63183c73d1d 100644 --- a/htdocs/fichinter/card-rec.php +++ b/htdocs/fichinter/card-rec.php @@ -129,7 +129,7 @@ if ($action == 'add') { if (! $error) { $object->id_origin = $id; - $object->titre = GETPOST('titre', 'alpha'); + $object->title = GETPOST('titre', 'alpha'); $object->description = GETPOST('description', 'alpha'); $object->socid = GETPOST('socid', 'alpha'); $object->fk_project = GETPOST('projectid', 'int'); @@ -773,7 +773,7 @@ $date_next_execution = (GETPOST('remonth') ? dol_mktime( /* * List mode */ - $sql = "SELECT f.rowid as fich_rec, s.nom as name, s.rowid as socid, f.rowid as facid, f.titre,"; + $sql = "SELECT f.rowid as fich_rec, s.nom as name, s.rowid as socid, f.rowid as facid, f.titre as title,"; $sql.= " f.duree, f.fk_contrat, f.fk_projet as fk_project, f.frequency, f.nb_gen_done, f.nb_gen_max,"; $sql.= " f.date_last_gen, f.date_when, f.datec"; @@ -844,7 +844,7 @@ $date_next_execution = (GETPOST('remonth') ? dol_mktime( print ''; print '\n"; if ($objp->socid) { $companystatic->id=$objp->socid; diff --git a/htdocs/projet/class/api_projects.class.php b/htdocs/projet/class/api_projects.class.php index 48ae3cbf337..b6f9acbf4b5 100644 --- a/htdocs/projet/class/api_projects.class.php +++ b/htdocs/projet/class/api_projects.class.php @@ -546,7 +546,6 @@ class Projects extends DolibarrApi // phpcs:enable $object = parent::_cleanObjectDatas($object); - unset($object->titre); unset($object->datec); unset($object->datem); unset($object->barcode_type); diff --git a/htdocs/projet/class/project.class.php b/htdocs/projet/class/project.class.php index 9a651ec4a0a..0c7495efa7e 100644 --- a/htdocs/projet/class/project.class.php +++ b/htdocs/projet/class/project.class.php @@ -74,12 +74,9 @@ class Project extends CommonObject /** * @var string - * @deprecated - * @see $title */ - public $titre; - public $title; + public $date_start; public $date_end; public $date_close; @@ -465,7 +462,6 @@ class Project extends CommonObject $this->id = $obj->rowid; $this->ref = $obj->ref; $this->title = $obj->title; - $this->titre = $obj->title; // TODO deprecated $this->description = $obj->description; $this->date_c = $this->db->jdate($obj->datec); $this->datec = $this->db->jdate($obj->datec); // TODO deprecated From 1f308915ee8d9e5638f86d7017b82b7c78376ebb Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 13:23:17 +0200 Subject: [PATCH 740/828] Fix trans --- htdocs/langs/en_US/admin.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index a05eb631e13..a1d042a07a1 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1698,7 +1698,7 @@ ExpenseReportNumberingModules=Expense reports numbering module NoModueToManageStockIncrease=No module able to manage automatic stock increase has been activated. Stock increase will be done on manual input only. YouMayFindNotificationsFeaturesIntoModuleNotification=You may find options for EMail notifications by enabling and configuring the module "Notification". ListOfNotificationsPerUser=List of notifications per user* -ListOfNotificationsPerUserOrContact=List of notifications per user* or per contact** +ListOfNotificationsPerUserOrContact=List of possible notifications per user* or per contact** ListOfFixedNotifications=List of fixed notifications GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses From fea810fb3b0a2c3c6e671149bbd7df4d58ae2537 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 13:44:30 +0200 Subject: [PATCH 741/828] Trans --- htdocs/langs/en_US/admin.lang | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 38096f37827..895b725a858 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -574,7 +574,7 @@ Module510Name=Salaries Module510Desc=Record and track employee payments Module520Name=Loans Module520Desc=Management of loans -Module600Name=Notifications +Module600Name=Notifications on business event Module600Desc=Send email notifications triggered by a business event: per user (setup defined on each user), per third-party contacts (setup defined on each third party) or by specific emails Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders for agenda events, go into the setup of module Agenda. Module610Name=Product Variants @@ -1735,9 +1735,9 @@ ExpenseReportsRulesSetup=Setup of module Expense Reports - Rules ExpenseReportNumberingModules=Expense reports numbering module NoModueToManageStockIncrease=No module able to manage automatic stock increase has been activated. Stock increase will be done on manual input only. YouMayFindNotificationsFeaturesIntoModuleNotification=You may find options for email notifications by enabling and configuring the module "Notification". -ListOfNotificationsPerUser=List of notifications per user* -ListOfNotificationsPerUserOrContact=List of possible notifications (type of events) available per user* or per contact** -ListOfFixedNotifications=List of fixed notifications +ListOfNotificationsPerUser=List of automatic notifications per user* +ListOfNotificationsPerUserOrContact=List of possible automatic notifications (on business event) available per user* or per contact** +ListOfFixedNotifications=List of automatic fixed notifications GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses Threshold=Threshold From cd7d3f1a368a4d2c84906c3ba1110961a72cdc3e Mon Sep 17 00:00:00 2001 From: gauthier Date: Fri, 19 Jul 2019 15:41:44 +0200 Subject: [PATCH 742/828] FIX : search by phone pro --- htdocs/contact/list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/contact/list.php b/htdocs/contact/list.php index 5aacbc2f16f..f786e73d17a 100644 --- a/htdocs/contact/list.php +++ b/htdocs/contact/list.php @@ -290,7 +290,7 @@ if ($search_firstname) $sql.= natural_search('p.firstname', $search if ($search_societe) $sql.= natural_search('s.nom', $search_societe); if (strlen($search_poste)) $sql.= natural_search('p.poste', $search_poste); if (strlen($search_phone_perso)) $sql.= natural_search('p.phone_perso', $search_phone_perso); -if (strlen($search_phone_pro)) $sql.= natural_search('p.phone', $search_phone); +if (strlen($search_phone_pro)) $sql.= natural_search('p.phone', $search_phone_pro); if (strlen($search_phone_mobile)) $sql.= natural_search('p.phone_mobile', $search_phone_mobile); if (strlen($search_fax)) $sql.= natural_search('p.fax', $search_fax); if (strlen($search_skype)) $sql.= natural_search('p.skype', $search_skype); From b95395909ca6c4971c52130c1ac7af7c43063109 Mon Sep 17 00:00:00 2001 From: VESSILLER Date: Fri, 19 Jul 2019 16:11:44 +0200 Subject: [PATCH 743/828] FIX Delete a category to a contact in API --- htdocs/societe/class/api_contacts.class.php | 42 +++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/htdocs/societe/class/api_contacts.class.php b/htdocs/societe/class/api_contacts.class.php index f94e182b010..fc90f37e5bf 100644 --- a/htdocs/societe/class/api_contacts.class.php +++ b/htdocs/societe/class/api_contacts.class.php @@ -421,6 +421,48 @@ class Contacts extends DolibarrApi return $this->_cleanObjectDatas($this->contact); } + /** + * Remove the link between a category and a contact + * + * @url DELETE {id}/categories/{category_id} + * + * @param int $id Id of contact + * @param int $category_id Id of category + * @return mixed + * + * @throws 401 RestException Insufficient rights + * @throws 401 RestException Access not allowed for login + * @throws 404 RestException Category not found + * @throws 404 RestException Contact not found + */ + public function deleteCategory($id, $category_id) + { + if(! DolibarrApiAccess::$user->rights->societe->contact->creer) { + throw new RestException(401, 'Insufficient rights'); + } + + $result = $this->contact->fetch($id); + if( ! $result ) { + throw new RestException(404, 'Contact not found'); + } + $category = new Categorie($this->db); + $result = $category->fetch($category_id); + if( ! $result ) { + throw new RestException(404, 'category not found'); + } + + if( ! DolibarrApi::_checkAccessToResource('contact', $this->contact->id)) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } + if( ! DolibarrApi::_checkAccessToResource('category', $category->id)) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } + + $category->del_type($this->contact, 'contact'); + + return $this->_cleanObjectDatas($this->contact); + } + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore /** * Clean sensible object datas From 73af3542d1d6bf7a02d8e5346695a580899c503b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 16:18:14 +0200 Subject: [PATCH 744/828] FIX the feature to bill time spent was not enabled. --- htdocs/core/class/conf.class.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/htdocs/core/class/conf.class.php b/htdocs/core/class/conf.class.php index 62c7f0f9e24..e3b6ac4e524 100644 --- a/htdocs/core/class/conf.class.php +++ b/htdocs/core/class/conf.class.php @@ -490,7 +490,10 @@ class Conf if (empty($this->global->ACCOUNTING_MODE)) $this->global->ACCOUNTING_MODE='RECETTES-DEPENSES'; // By default. Can be 'RECETTES-DEPENSES' ou 'CREANCES-DETTES' // By default, suppliers objects can be linked to all projects - $this->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS = 1; + if (! isset($this->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS)) $this->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS = 1; + + // By default we enable feature to bill time spent + if (! isset($this->global->PROJECT_BILL_TIME_SPENT)) $this->global->PROJECT_BILL_TIME_SPENT = 1; // MAIN_HTML_TITLE if (! isset($this->global->MAIN_HTML_TITLE)) $this->global->MAIN_HTML_TITLE='noapp,thirdpartynameonly,contactnameonly,projectnameonly'; From 1053a9d9555939a8a409e69f41490e74e8201c92 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 16:49:12 +0200 Subject: [PATCH 745/828] Trans --- htdocs/accountancy/customer/list.php | 10 +++++----- htdocs/accountancy/supplier/list.php | 2 +- htdocs/langs/en_US/products.lang | 1 + 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/htdocs/accountancy/customer/list.php b/htdocs/accountancy/customer/list.php index 192585ccedd..b738933c89c 100644 --- a/htdocs/accountancy/customer/list.php +++ b/htdocs/accountancy/customer/list.php @@ -319,8 +319,8 @@ if ($result) { $arrayofselected=is_array($toselect)?$toselect:array(); $param=''; - if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage; - if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit; + if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.urlencode($contextpage); + if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.urlencode($limit); if ($search_lineid) $param.='&search_lineid='.urlencode($search_lineid); if ($search_day) $param.='&search_day='.urlencode($search_day); if ($search_month) $param.='&search_month='.urlencode($search_month); @@ -330,8 +330,8 @@ if ($result) { if ($search_desc) $param.='&search_desc='.urlencode($search_desc); if ($search_amount) $param.='&search_amount='.urlencode($search_amount); if ($search_vat) $param.='&search_vat='.urlencode($search_vat); - if ($search_country) $param .= "&search_country=" . urlencode($search_country); - if ($search_tvaintra) $param .= "&search_tvaintra=" . urlencode($search_tvaintra); + if ($search_country) $param.= "&search_country=".urlencode($search_country); + if ($search_tvaintra) $param.= "&search_tvaintra=".urlencode($search_tvaintra); $arrayofmassactions = array( 'ventil'=>$langs->trans("Ventilate") @@ -403,7 +403,7 @@ if ($result) { print_liste_field_titre("Date", $_SERVER["PHP_SELF"], "f.datef, f.ref, l.rowid", "", $param, '', $sortfield, $sortorder, 'center '); print_liste_field_titre("ProductRef", $_SERVER["PHP_SELF"], "p.ref", "", $param, '', $sortfield, $sortorder); //print_liste_field_titre("ProductLabel", $_SERVER["PHP_SELF"], "p.label", "", $param, '', $sortfield, $sortorder); - print_liste_field_titre("Description", $_SERVER["PHP_SELF"], "l.description", "", $param, '', $sortfield, $sortorder); + print_liste_field_titre("ProductDescription", $_SERVER["PHP_SELF"], "l.description", "", $param, '', $sortfield, $sortorder); print_liste_field_titre("Amount", $_SERVER["PHP_SELF"], "l.total_ht", "", $param, '', $sortfield, $sortorder, 'right maxwidth50 '); print_liste_field_titre("VATRate", $_SERVER["PHP_SELF"], "l.tva_tx", "", $param, '', $sortfield, $sortorder, 'right '); print_liste_field_titre("Country", $_SERVER["PHP_SELF"], "co.label", "", $param, '', $sortfield, $sortorder); diff --git a/htdocs/accountancy/supplier/list.php b/htdocs/accountancy/supplier/list.php index b3a426bbf5e..9ce49b23e6a 100644 --- a/htdocs/accountancy/supplier/list.php +++ b/htdocs/accountancy/supplier/list.php @@ -405,7 +405,7 @@ if ($result) { print_liste_field_titre("Date", $_SERVER["PHP_SELF"], "f.datef, f.ref, l.rowid", "", $param, '', $sortfield, $sortorder, 'center '); print_liste_field_titre("ProductRef", $_SERVER["PHP_SELF"], "p.ref", "", $param, '', $sortfield, $sortorder); //print_liste_field_titre("ProductLabel", $_SERVER["PHP_SELF"], "p.label", "", $param, '', $sortfield, $sortorder); - print_liste_field_titre("Description", $_SERVER["PHP_SELF"], "l.description", "", $param, '', $sortfield, $sortorder); + print_liste_field_titre("ProductDescription", $_SERVER["PHP_SELF"], "l.description", "", $param, '', $sortfield, $sortorder); print_liste_field_titre("Amount", $_SERVER["PHP_SELF"], "l.total_ht", "", $param, '', $sortfield, $sortorder, 'right maxwidth50 '); print_liste_field_titre("VATRate", $_SERVER["PHP_SELF"], "l.tva_tx", "", $param, '', $sortfield, $sortorder, 'right '); print_liste_field_titre("Country", $_SERVER["PHP_SELF"], "co.label", "", $param, '', $sortfield, $sortorder); diff --git a/htdocs/langs/en_US/products.lang b/htdocs/langs/en_US/products.lang index 46555a84528..36ca0ede002 100644 --- a/htdocs/langs/en_US/products.lang +++ b/htdocs/langs/en_US/products.lang @@ -2,6 +2,7 @@ ProductRef=Product ref. ProductLabel=Product label ProductLabelTranslated=Translated product label +ProductDescription=Product description ProductDescriptionTranslated=Translated product description ProductNoteTranslated=Translated product note ProductServiceCard=Products/Services card From a55da8f8f889fd259093a5d97faa18d0884b4393 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 17:20:33 +0200 Subject: [PATCH 746/828] Fix migration --- htdocs/install/mysql/migration/10.0.0-11.0.0.sql | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index f8cc3062bde..1b9f52ffaed 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -28,6 +28,10 @@ -- Note: fields with type BLOB/TEXT can't have default value. +-- Missing in v10 +ALTER TABLE llx_account_bookkeeping ADD COLUMN date_export datetime DEFAULT NULL; + + create table llx_entrepot_extrafields ( rowid integer AUTO_INCREMENT PRIMARY KEY, @@ -50,3 +54,4 @@ ALTER TABLE llx_user ADD COLUMN iplastlogin varchar(250); ALTER TABLE llx_user ADD COLUMN ippreviouslogin varchar(250); ALTER TABLE llx_events ADD COLUMN prefix_session varchar(255) NULL; + From 361fc53685fec9e9bb31f8bdc81e59f2956dcb43 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 17:47:54 +0200 Subject: [PATCH 747/828] FIX div not balanced --- htdocs/commande/card.php | 4 ++-- htdocs/ticket/card.php | 22 ++++++-------------- htdocs/ticket/class/actions_ticket.class.php | 9 +++++++- 3 files changed, 16 insertions(+), 19 deletions(-) diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php index eae593bef40..6bb47f12a12 100644 --- a/htdocs/commande/card.php +++ b/htdocs/commande/card.php @@ -2116,7 +2116,7 @@ if ($action == 'create' && $user->rights->commande->creer) print '
'; print '
'; - print '
'; diff --git a/htdocs/product/stock/movement_card.php b/htdocs/product/stock/movement_card.php index b75042c7cca..85065e8ec2b 100644 --- a/htdocs/product/stock/movement_card.php +++ b/htdocs/product/stock/movement_card.php @@ -766,7 +766,7 @@ if ($resql) print '
'; print ''."\n"; - // Lignes des champs de filtre + // Fields title search print ''; if (! empty($arrayfields['m.rowid']['checked'])) { diff --git a/htdocs/product/stock/movement_list.php b/htdocs/product/stock/movement_list.php index 836bb97e50c..efcbc534c08 100644 --- a/htdocs/product/stock/movement_list.php +++ b/htdocs/product/stock/movement_list.php @@ -742,7 +742,7 @@ if ($resql) print '
'; print '
'."\n"; - // Lignes des champs de filtre + // Fields title search print ''; if (! empty($arrayfields['m.rowid']['checked'])) { diff --git a/htdocs/product/stock/replenish.php b/htdocs/product/stock/replenish.php index 069be8aca96..b9799865e20 100644 --- a/htdocs/product/stock/replenish.php +++ b/htdocs/product/stock/replenish.php @@ -551,7 +551,7 @@ print '' ''. ''; -// Lignes des champs de filtre +// Fields title search print ''; print ''; print ''; diff --git a/htdocs/reception/list.php b/htdocs/reception/list.php index e40be9f0d10..17518df8ab6 100644 --- a/htdocs/reception/list.php +++ b/htdocs/reception/list.php @@ -628,7 +628,7 @@ if ($resql) print '
'; print '
 
'."\n"; - // Lignes des champs de filtre + // Fields title search print ''; // Ref if (! empty($arrayfields['e.ref']['checked'])) diff --git a/htdocs/supplier_proposal/list.php b/htdocs/supplier_proposal/list.php index fe010c95e9c..dabf49215fd 100644 --- a/htdocs/supplier_proposal/list.php +++ b/htdocs/supplier_proposal/list.php @@ -391,7 +391,7 @@ if ($resql) $newcardbutton.= dolGetButtonTitle($langs->trans('NewAskPrice'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/supplier_proposal/card.php?action=create'); } - // Lignes des champs de filtre + // Fields title search print ''; if ($optioncss != '') print ''; print ''; From f5cc29417d8f550c1265844de8c9f543a20b9f00 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 5 Jul 2019 21:50:35 +0200 Subject: [PATCH 658/828] Translation lignes -> lines --- htdocs/compta/facture/card.php | 4 ++-- .../class/ligneprelevement.class.php | 2 +- htdocs/contrat/class/contrat.class.php | 2 +- .../commande/doc/pdf_einstein.modules.php | 2 +- .../expensereport/doc/pdf_standard.modules.php | 4 ++-- .../modules/facture/doc/pdf_crabe.modules.php | 2 +- .../modules/facture/doc/pdf_sponge.modules.php | 2 +- htdocs/core/modules/modFournisseur.class.php | 4 ++-- .../product/doc/pdf_standard.modules.php | 2 +- .../reception/doc/pdf_squille.modules.php | 2 +- .../modules/stock/doc/pdf_standard.modules.php | 2 +- htdocs/expedition/contact.php | 2 +- htdocs/fichinter/class/fichinter.class.php | 2 +- htdocs/fourn/product/list.php | 2 +- .../tables/llx_commande_fournisseurdet.sql | 2 +- .../mysql/tables/llx_expensereport_det.sql | 2 +- .../mysql/tables/llx_facture_fourn_det.sql | 2 +- .../mysql/tables/llx_facturedet_rec.sql | 2 +- htdocs/install/step2.php | 2 +- htdocs/install/upgrade2.php | 18 +++++++++--------- htdocs/livraison/class/livraison.class.php | 4 +--- .../product/actions_card_product.class.php | 2 +- .../canvas/product/tpl/card_view.tpl.php | 2 +- .../service/actions_card_service.class.php | 2 +- .../canvas/service/tpl/card_view.tpl.php | 2 +- htdocs/product/reassort.php | 2 +- htdocs/product/reassortlot.php | 2 +- htdocs/reception/contact.php | 2 +- 28 files changed, 39 insertions(+), 41 deletions(-) diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index 0adfb4e7ac2..968469ff1e0 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -638,7 +638,7 @@ if (empty($reshook)) $resteapayer = $object->total_ttc - $totalpaye; - // On verifie si les lignes de factures ont ete exportees en compta et/ou ventilees + // We check that invlice lines are transferred into accountancy $ventilExportCompta = $object->getVentilExportCompta(); // On verifie si aucun paiement n'a ete effectue @@ -4616,7 +4616,7 @@ elseif ($id > 0 || ! empty($ref)) // Editer une facture deja validee, sans paiement effectue et pas exporte en compta if ($object->statut == Facture::STATUS_VALIDATED) { - // On verifie si les lignes de factures ont ete exportees en compta et/ou ventilees + // We check that invlice lines are transferred into accountancy $ventilExportCompta = $object->getVentilExportCompta(); if ($ventilExportCompta == 0) diff --git a/htdocs/compta/prelevement/class/ligneprelevement.class.php b/htdocs/compta/prelevement/class/ligneprelevement.class.php index e76cc9d184d..c0e6921c95d 100644 --- a/htdocs/compta/prelevement/class/ligneprelevement.class.php +++ b/htdocs/compta/prelevement/class/ligneprelevement.class.php @@ -22,7 +22,7 @@ /** * \file htdocs/compta/prelevement/class/ligneprelevement.class.php * \ingroup prelevement - * \brief Fichier de la classe des lignes de prelevements + * \brief File of class to manage lines of Direct Debit orders */ diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index 7273ffc3a8e..e7461e2a053 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -862,7 +862,7 @@ class Contrat extends CommonObject } else { - dol_syslog(get_class($this)."::Fetch Erreur lecture des lignes de contrats liees aux produits"); + dol_syslog(get_class($this)."::Fetch Error when reading lines of contracts linked to products"); return -3; } diff --git a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php index 0e064991444..0d95646c441 100644 --- a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php +++ b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php @@ -549,7 +549,7 @@ class pdf_einstein extends ModelePDFCommandes $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php b/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php index 99d2ab322e0..e322ef1aa84 100644 --- a/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php +++ b/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php @@ -414,8 +414,8 @@ class pdf_standard extends ModeleExpenseReport // $nblineFollowComment = max($nbLineCommentNeed, $nbLineTypeNeed); // } - //$nexY+=$nblineFollowComment*($pdf->getFontSize()*1.3); // Passe espace entre les lignes - $nexY += ($pdf->getFontSize()*1.3); // Passe espace entre les lignes + //$nexY+=$nblineFollowComment*($pdf->getFontSize()*1.3); // Add space between lines + $nexY += ($pdf->getFontSize()*1.3); // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php index 4536add16bb..53929f28e75 100644 --- a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php @@ -318,7 +318,7 @@ class pdf_crabe extends ModelePDFFactures global $action; $reshook=$hookmanager->executeHooks('beforePDFCreation', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks - // Set nblignes with the new facture lines content after hook + // Set nblines with the new facture lines content after hook $nblines = count($object->lines); $nbpayments = count($object->getListOfPayments()); diff --git a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php index 422060ab30b..b5529c78d8e 100644 --- a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php @@ -329,7 +329,7 @@ class pdf_sponge extends ModelePDFFactures global $action; $reshook=$hookmanager->executeHooks('beforePDFCreation', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks - // Set nblignes with the new facture lines content after hook + // Set nblines with the new facture lines content after hook $nblines = count($object->lines); $nbpayments = count($object->getListOfPayments()); diff --git a/htdocs/core/modules/modFournisseur.class.php b/htdocs/core/modules/modFournisseur.class.php index a545ce1378b..8ba2f173ffd 100644 --- a/htdocs/core/modules/modFournisseur.class.php +++ b/htdocs/core/modules/modFournisseur.class.php @@ -276,7 +276,7 @@ class modFournisseur extends DolibarrModules $r++; $this->export_code[$r]=$this->rights_class.'_'.$r; - $this->export_label[$r]='Factures fournisseurs et lignes de facture'; + $this->export_label[$r]='Vendor invoices and lines of invoices'; $this->export_icon[$r]='bill'; $this->export_permission[$r]=array(array("fournisseur","facture","export")); $this->export_fields_array[$r]=array( @@ -484,7 +484,7 @@ class modFournisseur extends DolibarrModules // Order $r++; $this->export_code[$r]=$this->rights_class.'_'.$r; - $this->export_label[$r]='Commandes fournisseurs et lignes de commandes'; + $this->export_label[$r]='Purchase Orders and lines of purchase orders'; $this->export_icon[$r]='order'; $this->export_permission[$r]=array(array("fournisseur","commande","export")); $this->export_fields_array[$r]=array( diff --git a/htdocs/core/modules/product/doc/pdf_standard.modules.php b/htdocs/core/modules/product/doc/pdf_standard.modules.php index 6089a9fe66e..a9bc06f1021 100644 --- a/htdocs/core/modules/product/doc/pdf_standard.modules.php +++ b/htdocs/core/modules/product/doc/pdf_standard.modules.php @@ -493,7 +493,7 @@ class pdf_standard extends ModelePDFProduct $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/reception/doc/pdf_squille.modules.php b/htdocs/core/modules/reception/doc/pdf_squille.modules.php index 10be4430aea..71e78368d9c 100644 --- a/htdocs/core/modules/reception/doc/pdf_squille.modules.php +++ b/htdocs/core/modules/reception/doc/pdf_squille.modules.php @@ -216,7 +216,7 @@ class pdf_squille extends ModelePdfReception global $action; $reshook=$hookmanager->executeHooks('beforePDFCreation', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks - // Set nblignes with the new facture lines content after hook + // Set nblines with the new facture lines content after hook $nblines = count($object->lines); $pdf=pdf_getInstance($this->format); diff --git a/htdocs/core/modules/stock/doc/pdf_standard.modules.php b/htdocs/core/modules/stock/doc/pdf_standard.modules.php index 4be99b07c11..6c222f96dca 100644 --- a/htdocs/core/modules/stock/doc/pdf_standard.modules.php +++ b/htdocs/core/modules/stock/doc/pdf_standard.modules.php @@ -461,7 +461,7 @@ class pdf_standard extends ModelePDFStock $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/expedition/contact.php b/htdocs/expedition/contact.php index 4acb2fce932..9310df52ddf 100644 --- a/htdocs/expedition/contact.php +++ b/htdocs/expedition/contact.php @@ -255,7 +255,7 @@ if ($id > 0 || ! empty($ref)) dol_fiche_end(); - // Lignes de contacts + // Lines of contacts echo '
'; // Contacts lines (modules that overwrite templates must declare this into descriptor) diff --git a/htdocs/fichinter/class/fichinter.class.php b/htdocs/fichinter/class/fichinter.class.php index 807b547a4bc..d9e01a6579f 100644 --- a/htdocs/fichinter/class/fichinter.class.php +++ b/htdocs/fichinter/class/fichinter.class.php @@ -1386,7 +1386,7 @@ class Fichinter extends CommonObject } /** - * Classe permettant la gestion des lignes d'intervention + * Class to manage intervention lines */ class FichinterLigne extends CommonObjectLine { diff --git a/htdocs/fourn/product/list.php b/htdocs/fourn/product/list.php index 8fd7b809587..bd5c0f1fd1e 100644 --- a/htdocs/fourn/product/list.php +++ b/htdocs/fourn/product/list.php @@ -249,7 +249,7 @@ if ($resql) print ''; print '
'; - // Lignes des titres + // Line for title print ''; print_liste_field_titre("Ref", $_SERVER["PHP_SELF"], "p.ref", $param, "", "", $sortfield, $sortorder); print_liste_field_titre("RefSupplierShort", $_SERVER["PHP_SELF"], "ppf.ref_fourn", $param, "", "", $sortfield, $sortorder); diff --git a/htdocs/install/mysql/tables/llx_commande_fournisseurdet.sql b/htdocs/install/mysql/tables/llx_commande_fournisseurdet.sql index dfbf4e261eb..f107e348bbe 100644 --- a/htdocs/install/mysql/tables/llx_commande_fournisseurdet.sql +++ b/htdocs/install/mysql/tables/llx_commande_fournisseurdet.sql @@ -47,7 +47,7 @@ create table llx_commande_fournisseurdet date_start datetime DEFAULT NULL, -- date debut si service date_end datetime DEFAULT NULL, -- date fin si service info_bits integer DEFAULT 0, -- TVA NPR ou non - special_code integer DEFAULT 0, -- code pour les lignes speciales + special_code integer DEFAULT 0, -- code for special lines rang integer DEFAULT 0, import_key varchar(14), fk_unit integer DEFAULT NULL, diff --git a/htdocs/install/mysql/tables/llx_expensereport_det.sql b/htdocs/install/mysql/tables/llx_expensereport_det.sql index 75d503ac181..ee583852deb 100644 --- a/htdocs/install/mysql/tables/llx_expensereport_det.sql +++ b/htdocs/install/mysql/tables/llx_expensereport_det.sql @@ -43,7 +43,7 @@ CREATE TABLE llx_expensereport_det total_ttc double(24,8) DEFAULT 0 NOT NULL, date date NOT NULL, info_bits integer DEFAULT 0, -- TVA NPR ou non - special_code integer DEFAULT 0, -- code pour les lignes speciales + special_code integer DEFAULT 0, -- code for special lines fk_multicurrency integer, multicurrency_code varchar(255), multicurrency_subprice double(24,8) DEFAULT 0, diff --git a/htdocs/install/mysql/tables/llx_facture_fourn_det.sql b/htdocs/install/mysql/tables/llx_facture_fourn_det.sql index 2f75f9ff54e..57097f600c0 100644 --- a/htdocs/install/mysql/tables/llx_facture_fourn_det.sql +++ b/htdocs/install/mysql/tables/llx_facture_fourn_det.sql @@ -47,7 +47,7 @@ create table llx_facture_fourn_det date_end datetime DEFAULT NULL, -- date fin si service info_bits integer DEFAULT 0, -- TVA NPR ou non fk_code_ventilation integer DEFAULT 0 NOT NULL, - special_code integer DEFAULT 0, -- code pour les lignes speciales + special_code integer DEFAULT 0, -- code for special lines rang integer DEFAULT 0, import_key varchar(14), fk_unit integer DEFAULT NULL, diff --git a/htdocs/install/mysql/tables/llx_facturedet_rec.sql b/htdocs/install/mysql/tables/llx_facturedet_rec.sql index 267abcd5053..8bb0c06e8f8 100644 --- a/htdocs/install/mysql/tables/llx_facturedet_rec.sql +++ b/htdocs/install/mysql/tables/llx_facturedet_rec.sql @@ -52,7 +52,7 @@ create table llx_facturedet_rec buy_price_ht double(24,8) DEFAULT 0, -- buying price. Note: this value is saved as an always positive value, even on credit notes (it is price we bought the product before selling it). fk_product_fournisseur_price integer DEFAULT NULL, -- reference of supplier price when line was added (may be used to update buy_price_ht current price when future invoice will be created) - special_code integer UNSIGNED DEFAULT 0, -- code pour les lignes speciales + special_code integer UNSIGNED DEFAULT 0, -- code for special lines rang integer DEFAULT 0, -- ordre d'affichage fk_contract_line integer NULL, -- id of contract line when template invoice comes from contract lines fk_unit integer DEFAULT NULL, diff --git a/htdocs/install/step2.php b/htdocs/install/step2.php index 1a8a4108827..4e645bb6934 100644 --- a/htdocs/install/step2.php +++ b/htdocs/install/step2.php @@ -311,7 +311,7 @@ if ($action == "set") { $buf = fgets($fp, 4096); - // Cas special de lignes autorisees pour certaines versions uniquement + // Special case of lines allowed for some version only if ($choix == 1 && preg_match('/^--\sV([0-9\.]+)/i', $buf, $reg)) { $versioncommande=explode('.', $reg[1]); diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php index c932b2631e8..11bfe9ff99f 100644 --- a/htdocs/install/upgrade2.php +++ b/htdocs/install/upgrade2.php @@ -1432,7 +1432,7 @@ function migrate_paiementfourn_facturefourn($db, $langs, $conf) } /** - * Mise a jour des totaux lignes de facture + * Update total of invoice lines * * @param DoliDB $db Database handler * @param Translate $langs Object langs @@ -1453,7 +1453,7 @@ function migrate_price_facture($db, $langs, $conf) print '
'; print ''.$langs->trans('MigrationInvoice')."
\n"; - // Liste des lignes facture non a jour + // List of invoice lines not up to date $sql = "SELECT fd.rowid, fd.qty, fd.subprice, fd.remise_percent, fd.tva_tx as vatrate, fd.total_ttc, fd.info_bits,"; $sql.= " f.rowid as facid, f.remise_percent as remise_percent_global, f.total_ttc as total_ttc_f"; $sql.= " FROM ".MAIN_DB_PREFIX."facturedet as fd, ".MAIN_DB_PREFIX."facture as f"; @@ -1551,7 +1551,7 @@ function migrate_price_facture($db, $langs, $conf) } /** - * Mise a jour des totaux lignes de propal + * Update total of proposal lines * * @param DoliDB $db Database handler * @param Translate $langs Object langs @@ -1570,7 +1570,7 @@ function migrate_price_propal($db, $langs, $conf) print '
'; print ''.$langs->trans('MigrationProposal')."
\n"; - // Liste des lignes propal non a jour + // List of proposal lines not up to date $sql = "SELECT pd.rowid, pd.qty, pd.subprice, pd.remise_percent, pd.tva_tx as vatrate, pd.info_bits,"; $sql.= " p.rowid as propalid, p.remise_percent as remise_percent_global"; $sql.= " FROM ".MAIN_DB_PREFIX."propaldet as pd, ".MAIN_DB_PREFIX."propal as p"; @@ -1679,7 +1679,7 @@ function migrate_price_contrat($db, $langs, $conf) print '
'; print ''.$langs->trans('MigrationContract')."
\n"; - // Liste des lignes contrat non a jour + // List of contract lines not up to date $sql = "SELECT cd.rowid, cd.qty, cd.subprice, cd.remise_percent, cd.tva_tx as vatrate, cd.info_bits,"; $sql.= " c.rowid as contratid"; $sql.= " FROM ".MAIN_DB_PREFIX."contratdet as cd, ".MAIN_DB_PREFIX."contrat as c"; @@ -1748,7 +1748,7 @@ function migrate_price_contrat($db, $langs, $conf) } /** - * Mise a jour des totaux lignes de commande + * Update total of sales order lines * * @param DoliDB $db Database handler * @param Translate $langs Object langs @@ -1767,7 +1767,7 @@ function migrate_price_commande($db, $langs, $conf) print '
'; print ''.$langs->trans('MigrationOrder')."
\n"; - // Liste des lignes commande non a jour + // List of sales orders lines not up to date $sql = "SELECT cd.rowid, cd.qty, cd.subprice, cd.remise_percent, cd.tva_tx as vatrate, cd.info_bits,"; $sql.= " c.rowid as commandeid, c.remise_percent as remise_percent_global"; $sql.= " FROM ".MAIN_DB_PREFIX."commandedet as cd, ".MAIN_DB_PREFIX."commande as c"; @@ -1865,7 +1865,7 @@ function migrate_price_commande($db, $langs, $conf) } /** - * Mise a jour des totaux lignes de commande fournisseur + * Update total of purchase order lines * * @param DoliDB $db Database handler * @param Translate $langs Object langs @@ -1884,7 +1884,7 @@ function migrate_price_commande_fournisseur($db, $langs, $conf) print '
'; print ''.$langs->trans('MigrationSupplierOrder')."
\n"; - // Liste des lignes commande non a jour + // List of purchase order lines not up to date $sql = "SELECT cd.rowid, cd.qty, cd.subprice, cd.remise_percent, cd.tva_tx as vatrate, cd.info_bits,"; $sql.= " c.rowid as commandeid, c.remise_percent as remise_percent_global"; $sql.= " FROM ".MAIN_DB_PREFIX."commande_fournisseurdet as cd, ".MAIN_DB_PREFIX."commande_fournisseur as c"; diff --git a/htdocs/livraison/class/livraison.class.php b/htdocs/livraison/class/livraison.class.php index 5d01dffa886..9021faf7542 100644 --- a/htdocs/livraison/class/livraison.class.php +++ b/htdocs/livraison/class/livraison.class.php @@ -322,9 +322,7 @@ class Livraison extends CommonObject // fetch optionals attributes and labels $this->fetch_optionals(); - /* - * Lignes - */ + // Load lines $result=$this->fetch_lines(); if ($result < 0) { diff --git a/htdocs/product/canvas/product/actions_card_product.class.php b/htdocs/product/canvas/product/actions_card_product.class.php index db7ad4d2b70..6247d84b045 100644 --- a/htdocs/product/canvas/product/actions_card_product.class.php +++ b/htdocs/product/canvas/product/actions_card_product.class.php @@ -199,7 +199,7 @@ class ActionsCardProduct if ($action == 'view') { // Photo - $this->tpl['nblignes'] = 4; + $this->tpl['nblines'] = 4; if ($this->object->is_photo_available($conf->product->multidir_output[$this->object->entity])) { $this->tpl['photos'] = $this->object->show_photos('product', $conf->product->multidir_output[$this->object->entity], 1, 1, 0, 0, 0, 80); diff --git a/htdocs/product/canvas/product/tpl/card_view.tpl.php b/htdocs/product/canvas/product/tpl/card_view.tpl.php index 06d9faf05b7..1f330257073 100644 --- a/htdocs/product/canvas/product/tpl/card_view.tpl.php +++ b/htdocs/product/canvas/product/tpl/card_view.tpl.php @@ -56,7 +56,7 @@ dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref'); photos) { ?> - diff --git a/htdocs/product/canvas/service/actions_card_service.class.php b/htdocs/product/canvas/service/actions_card_service.class.php index fab5794c82a..85b1feb6795 100644 --- a/htdocs/product/canvas/service/actions_card_service.class.php +++ b/htdocs/product/canvas/service/actions_card_service.class.php @@ -195,7 +195,7 @@ class ActionsCardService if ($action == 'view') { // Photo - $this->tpl['nblignes'] = 4; + $this->tpl['nblines'] = 4; if ($this->object->is_photo_available($conf->service->multidir_output[$this->object->entity])) { $this->tpl['photos'] = $this->object->show_photos('product', $conf->service->multidir_output[$this->object->entity], 1, 1, 0, 0, 0, 80); diff --git a/htdocs/product/canvas/service/tpl/card_view.tpl.php b/htdocs/product/canvas/service/tpl/card_view.tpl.php index 8d2409ba5e2..29a0e18a8b7 100644 --- a/htdocs/product/canvas/service/tpl/card_view.tpl.php +++ b/htdocs/product/canvas/service/tpl/card_view.tpl.php @@ -56,7 +56,7 @@ dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref'); photos) { ?> - diff --git a/htdocs/product/reassort.php b/htdocs/product/reassort.php index f75ba10a03c..1ecb136d817 100644 --- a/htdocs/product/reassort.php +++ b/htdocs/product/reassort.php @@ -303,7 +303,7 @@ if ($resql) print ''; print ''; - // Lignes des titres + //Line for column titles print ""; print_liste_field_titre("Ref", $_SERVER["PHP_SELF"], "p.ref", $param, "", "", $sortfield, $sortorder); print_liste_field_titre("Label", $_SERVER["PHP_SELF"], "p.label", $param, "", "", $sortfield, $sortorder); diff --git a/htdocs/product/reassortlot.php b/htdocs/product/reassortlot.php index d0803f40b95..5d569fc41be 100644 --- a/htdocs/product/reassortlot.php +++ b/htdocs/product/reassortlot.php @@ -299,7 +299,7 @@ if ($resql) print ''; print ''; - // Lignes des titres + //Line for column titles print ""; print_liste_field_titre("Ref", $_SERVER["PHP_SELF"], "p.ref", $param, "", "", $sortfield, $sortorder); print_liste_field_titre("Label", $_SERVER["PHP_SELF"], "p.label", $param, "", "", $sortfield, $sortorder); diff --git a/htdocs/reception/contact.php b/htdocs/reception/contact.php index d51062ef7ef..c3deb28c4bc 100644 --- a/htdocs/reception/contact.php +++ b/htdocs/reception/contact.php @@ -257,7 +257,7 @@ if ($id > 0 || ! empty($ref)) dol_fiche_end(); - // Lignes de contacts + // Lines of contacts echo '
'; // Contacts lines (modules that overwrite templates must declare this into descriptor) From 4387d40b9a5f243ecc48cbc70885201d1ab3ad9b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 5 Jul 2019 21:55:08 +0200 Subject: [PATCH 659/828] Translation lignes -> lines --- htdocs/core/class/commonstickergenerator.class.php | 2 +- htdocs/core/modules/expedition/doc/pdf_espadon.modules.php | 2 +- htdocs/core/modules/expedition/doc/pdf_rouget.modules.php | 2 +- htdocs/core/modules/expensereport/doc/pdf_standard.modules.php | 2 +- htdocs/install/mysql/migration/3.7.0-3.8.0.sql | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/htdocs/core/class/commonstickergenerator.class.php b/htdocs/core/class/commonstickergenerator.class.php index 18bcfcee8d5..a1d0d7f8728 100644 --- a/htdocs/core/class/commonstickergenerator.class.php +++ b/htdocs/core/class/commonstickergenerator.class.php @@ -267,7 +267,7 @@ abstract class CommonStickerGenerator protected function _Get_Height_Chars($pt) { // phpcs:enable - // Tableau de concordance entre la hauteur des caracteres et de l'espacement entre les lignes + // Array for link between height of characters and space between lines $_Table_Hauteur_Chars = array(6=>2, 7=>2.5, 8=>3, 9=>3.5, 10=>4, 11=>6, 12=>7, 13=>8, 14=>9, 15=>10); if (in_array($pt, array_keys($_Table_Hauteur_Chars))) { return $_Table_Hauteur_Chars[$pt]; diff --git a/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php b/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php index 745c09c8130..5bcd6d153d0 100644 --- a/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php +++ b/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php @@ -253,7 +253,7 @@ class pdf_espadon extends ModelePdfExpedition global $action; $reshook=$hookmanager->executeHooks('beforePDFCreation', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks - // Set nblignes with the new facture lines content after hook + // Set nblines with the new facture lines content after hook $nblines = count($object->lines); $pdf=pdf_getInstance($this->format); diff --git a/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php b/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php index d255c4486fd..44d0e3a5dda 100644 --- a/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php +++ b/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php @@ -282,7 +282,7 @@ class pdf_rouget extends ModelePdfExpedition global $action; $reshook=$hookmanager->executeHooks('beforePDFCreation', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks - // Set nblignes with the new facture lines content after hook + // Set nblines with the new facture lines content after hook $nblines = count($object->lines); $pdf=pdf_getInstance($this->format); diff --git a/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php b/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php index e322ef1aa84..b85ca573188 100644 --- a/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php +++ b/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php @@ -400,7 +400,7 @@ class pdf_standard extends ModeleExpenseReport $pdf->setPageOrientation('', 1, 0); // The only function to edit the bottom margin of current page to set it. //$nblineFollowComment = 1; - // Cherche nombre de lignes a venir pour savoir si place suffisante + // Search number of lines coming to know if there is enough room // if ($i < ($nblines - 1)) // If it's not last line // { // //Fetch current description to know on which line the next one should be placed diff --git a/htdocs/install/mysql/migration/3.7.0-3.8.0.sql b/htdocs/install/mysql/migration/3.7.0-3.8.0.sql index ebcca580870..ca677fc5224 100755 --- a/htdocs/install/mysql/migration/3.7.0-3.8.0.sql +++ b/htdocs/install/mysql/migration/3.7.0-3.8.0.sql @@ -284,7 +284,7 @@ CREATE TABLE llx_expensereport_det total_ttc double(24,8) DEFAULT 0 NOT NULL, date date NOT NULL, info_bits integer DEFAULT 0, -- TVA NPR ou non - special_code integer DEFAULT 0, -- code pour les lignes speciales + special_code integer DEFAULT 0, -- code for special lines rang integer DEFAULT 0, -- position of line import_key varchar(14) ) ENGINE=innodb; From 266ed86194b0ac6be2f19d72f7613597b3cda876 Mon Sep 17 00:00:00 2001 From: VESSILLER Date: Mon, 8 Jul 2019 12:37:24 +0200 Subject: [PATCH 660/828] NEW Add a category to a contact in API --- htdocs/societe/class/api_contacts.class.php | 42 +++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/htdocs/societe/class/api_contacts.class.php b/htdocs/societe/class/api_contacts.class.php index 772d8d3fe10..f94e182b010 100644 --- a/htdocs/societe/class/api_contacts.class.php +++ b/htdocs/societe/class/api_contacts.class.php @@ -378,6 +378,48 @@ class Contacts extends DolibarrApi return $result; } + /** + * Add a category to a contact + * + * @url POST {id}/categories/{category_id} + * + * @param int $id Id of contact + * @param int $category_id Id of category + * + * @return mixed + * + * @throws 401 RestException Insufficient rights + * @throws 401 RestException Access not allowed for login + * @throws 404 RestException Category not found + * @throws 404 RestException Contact not found + */ + public function addCategory($id, $category_id) + { + if(! DolibarrApiAccess::$user->rights->societe->contact->creer) { + throw new RestException(401, 'Insufficient rights'); + } + + $result = $this->contact->fetch($id); + if (! $result) { + throw new RestException(404, 'Contact not found'); + } + $category = new Categorie($this->db); + $result = $category->fetch($category_id); + if (! $result) { + throw new RestException(404, 'category not found'); + } + + if (! DolibarrApi::_checkAccessToResource('contact', $this->contact->id)) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } + if (! DolibarrApi::_checkAccessToResource('category', $category->id)) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } + + $category->add_type($this->contact, 'contact'); + + return $this->_cleanObjectDatas($this->contact); + } // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore /** From e5d34de877fe194c096fa83b5cb62f5b10aded42 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 9 Jul 2019 00:14:01 +0200 Subject: [PATCH 661/828] FIX compatibility mysql 8. rank is reserved FIX Permission for BOM menu --- htdocs/bom/class/bom.class.php | 6 +++--- htdocs/core/class/commonobject.class.php | 4 ++-- htdocs/core/menus/standard/eldy.lib.php | 2 +- htdocs/install/mysql/migration/9.0.0-10.0.0.sql | 3 ++- htdocs/install/mysql/tables/llx_bom_bomline.sql | 2 +- htdocs/modulebuilder/template/class/myobject.class.php | 4 ++-- 6 files changed, 11 insertions(+), 10 deletions(-) diff --git a/htdocs/bom/class/bom.class.php b/htdocs/bom/class/bom.class.php index 73682c7698c..10601303a61 100644 --- a/htdocs/bom/class/bom.class.php +++ b/htdocs/bom/class/bom.class.php @@ -889,7 +889,7 @@ class BOM extends CommonObject $this->lines=array(); $objectline = new BOMLine($this->db); - $result = $objectline->fetchAll('ASC', 'rank', 0, 0, array('customsql'=>'fk_bom = '.$this->id)); + $result = $objectline->fetchAll('ASC', 'position', 0, 0, array('customsql'=>'fk_bom = '.$this->id)); if (is_numeric($result)) { @@ -1044,7 +1044,7 @@ class BOMLine extends CommonObject 'description' => array('type'=>'text', 'label'=>'Description', 'enabled'=>1, 'visible'=>-1, 'position'=>60, 'notnull'=>-1,), 'qty' => array('type'=>'double(24,8)', 'label'=>'Quantity', 'enabled'=>1, 'visible'=>1, 'position'=>100, 'notnull'=>1, 'isameasure'=>'1',), 'efficiency' => array('type'=>'double(8,4)', 'label'=>'ManufacturingEfficiency', 'enabled'=>1, 'visible'=>1, 'default'=>1, 'position'=>110, 'notnull'=>1, 'css'=>'maxwidth50imp', 'help'=>'ValueOfMeansLoss'), - 'rank' => array('type'=>'integer', 'label'=>'Rank', 'enabled'=>1, 'visible'=>0, 'position'=>200, 'notnull'=>1,), + 'position' => array('type'=>'integer', 'label'=>'Rank', 'enabled'=>1, 'visible'=>0, 'position'=>200, 'notnull'=>1,), 'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>1, 'visible'=>-2, 'position'=>1000, 'notnull'=>-1,), ); public $rowid; @@ -1053,7 +1053,7 @@ class BOMLine extends CommonObject public $description; public $qty; public $efficiency; - public $rank; + public $position; public $import_key; // END MODULEBUILDER PROPERTIES diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index c966f39680b..b6fa5e419b1 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -2443,9 +2443,9 @@ abstract class CommonObject */ public function updateRangOfLine($rowid, $rang) { - $fieldposition = 'rang'; // @TODO Rename 'rang' and 'position' into 'rank' + $fieldposition = 'rang'; // @TODO Rename 'rang' into 'position' if (in_array($this->table_element_line, array('ecm_files', 'emailcollector_emailcollectoraction'))) $fieldposition = 'position'; - if (in_array($this->table_element_line, array('bom_bomline'))) $fieldposition = 'rank'; + if (in_array($this->table_element_line, array('bom_bomline'))) $fieldposition = 'position'; $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET '.$fieldposition.' = '.$rang; $sql.= ' WHERE rowid = '.$rowid; diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index 7518093bf77..88595cd366a 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -1579,7 +1579,7 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM { $langs->load("mrp"); - $newmenu->add("", $langs->trans("MenuBOM"), 0, $user->rights->service->lire, '', $mainmenu, 'service'); + $newmenu->add("", $langs->trans("MenuBOM"), 0, $user->rights->bom->read, '', $mainmenu, 'bom'); $newmenu->add("/bom/bom_card.php?leftmenu=bom&action=create", $langs->trans("NewBOM"), 1, $user->rights->bom->write); $newmenu->add("/bom/bom_list.php?leftmenu=bom", $langs->trans("List"), 1, $user->rights->bom->read); } diff --git a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql index bf08e794a65..c2d4809f958 100644 --- a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql +++ b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql @@ -252,12 +252,13 @@ CREATE TABLE llx_bom_bomline( import_key varchar(14), qty double(24,8) NOT NULL, efficiency double(8,4) NOT NULL DEFAULT 1, - rank integer NOT NULL + position integer NOT NULL -- END MODULEBUILDER FIELDS ) ENGINE=innodb; ALTER TABLE llx_bom_bomline ADD COLUMN efficiency double(8,4) DEFAULT 1; ALTER TABLE llx_bom_bomline ADD COLUMN fk_bom_child integer NULL; +ALTER TABLE llx_bom_bomline ADD COLUMN position integer NOT NULL; create table llx_bom_bomline_extrafields ( diff --git a/htdocs/install/mysql/tables/llx_bom_bomline.sql b/htdocs/install/mysql/tables/llx_bom_bomline.sql index bafaaf73694..4b0aa515950 100644 --- a/htdocs/install/mysql/tables/llx_bom_bomline.sql +++ b/htdocs/install/mysql/tables/llx_bom_bomline.sql @@ -23,6 +23,6 @@ CREATE TABLE llx_bom_bomline( import_key varchar(14), qty double(24,8) NOT NULL, efficiency double(8,4) NOT NULL DEFAULT 1, - rank integer NOT NULL + position integer NOT NULL -- END MODULEBUILDER FIELDS ) ENGINE=innodb; diff --git a/htdocs/modulebuilder/template/class/myobject.class.php b/htdocs/modulebuilder/template/class/myobject.class.php index 13157b2c18f..f6020882502 100644 --- a/htdocs/modulebuilder/template/class/myobject.class.php +++ b/htdocs/modulebuilder/template/class/myobject.class.php @@ -696,7 +696,7 @@ class MyObject extends CommonObject $this->lines=array(); $objectline = new MyObjectLine($this->db); - $result = $objectline->fetchAll('ASC', 'rank', 0, 0, array('customsql'=>'fk_myobject = '.$this->id)); + $result = $objectline->fetchAll('ASC', 'position', 0, 0, array('customsql'=>'fk_myobject = '.$this->id)); if (is_numeric($result)) { @@ -781,5 +781,5 @@ class MyObject extends CommonObject class MyObjectLine { // To complete with content of an object MyObjectLine - // We should have a field rowid, fk_myobject and rank + // We should have a field rowid, fk_myobject and position } From 61c83117fe3a98d473239a9dda5af68aae130d73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 9 Jul 2019 15:18:51 +0200 Subject: [PATCH 662/828] Update ihm.php --- htdocs/admin/ihm.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/htdocs/admin/ihm.php b/htdocs/admin/ihm.php index 8a065190373..509a04494d2 100644 --- a/htdocs/admin/ihm.php +++ b/htdocs/admin/ihm.php @@ -60,6 +60,7 @@ if (GETPOST('cancel', 'alpha')) if ($action == 'removebackgroundlogin' && ! empty($conf->global->MAIN_LOGIN_BACKGROUND)) { + dolibarr_set_const($db, "MAIN_IHM_PARAMS_REV", (int) $conf->global->MAIN_IHM_PARAMS_REV+1, 'chaine', 0, '', $conf->entity); require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; $logofile=$conf->mycompany->dir_output.'/logos/'.$conf->global->MAIN_LOGIN_BACKGROUND; @@ -81,6 +82,7 @@ if ($action == 'removebackgroundlogin' && ! empty($conf->global->MAIN_LOGIN_BACK if ($action == 'update') { dolibarr_set_const($db, "MAIN_LANG_DEFAULT", $_POST["MAIN_LANG_DEFAULT"], 'chaine', 0, '', $conf->entity); + dolibarr_set_const($db, "MAIN_IHM_PARAMS_REV", (int) $conf->global->MAIN_IHM_PARAMS_REV+1, 'chaine', 0, '', $conf->entity); dolibarr_set_const($db, "MAIN_MULTILANGS", $_POST["MAIN_MULTILANGS"], 'chaine', 0, '', $conf->entity); dolibarr_set_const($db, "MAIN_THEME", $_POST["main_theme"], 'chaine', 0, '', $conf->entity); From 96723db86f284f2ddb09bf10158cdc7584a1f34f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 9 Jul 2019 15:20:43 +0200 Subject: [PATCH 663/828] Update main.inc.php --- htdocs/main.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 458e6649d8a..ee2b14fdf11 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -1200,7 +1200,7 @@ function top_htmlhead($head, $title = '', $disablejs = 0, $disablehead = 0, $arr if (! is_object($hookmanager)) $hookmanager = new HookManager($db); $hookmanager->initHooks(array("main")); - $ext='layout='.$conf->browser->layout.'&version='.urlencode(DOL_VERSION); + $ext='layout='.$conf->browser->layout.'&version='.urlencode(DOL_VERSION); print "\n"; @@ -1246,7 +1246,7 @@ function top_htmlhead($head, $title = '', $disablejs = 0, $disablehead = 0, $arr if (GETPOST('version', 'int')) $ext='version='.GETPOST('version', 'int'); // usefull to force no cache on css/js $themeparam='?lang='.$langs->defaultlang.'&theme='.$conf->theme.(GETPOST('optioncss', 'aZ09')?'&optioncss='.GETPOST('optioncss', 'aZ09', 1):'').'&userid='.$user->id.'&entity='.$conf->entity; - $themeparam.=($ext?'&'.$ext:''); + $themeparam.=($ext?'&'.$ext:'').'&revision='.$conf->global->MAIN_IHM_PARAMS_REV; if (! empty($_SESSION['dol_resetcache'])) $themeparam.='&dol_resetcache='.$_SESSION['dol_resetcache']; if (GETPOST('dol_hide_topmenu', 'int')) { $themeparam.='&dol_hide_topmenu='.GETPOST('dol_hide_topmenu', 'int'); } if (GETPOST('dol_hide_leftmenu', 'int')) { $themeparam.='&dol_hide_leftmenu='.GETPOST('dol_hide_leftmenu', 'int'); } From 0aa42fefae40fabaff529fde7a082e4ff20da613 Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Tue, 9 Jul 2019 18:13:06 +0200 Subject: [PATCH 664/828] Fix : use RUM if defined in bank account --- htdocs/compta/prelevement/class/bonprelevement.class.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/htdocs/compta/prelevement/class/bonprelevement.class.php b/htdocs/compta/prelevement/class/bonprelevement.class.php index 2187b99eaf3..89aa09523e7 100644 --- a/htdocs/compta/prelevement/class/bonprelevement.class.php +++ b/htdocs/compta/prelevement/class/bonprelevement.class.php @@ -1349,7 +1349,7 @@ class BonPrelevement extends CommonObject $sql = "SELECT soc.code_client as code, soc.address, soc.zip, soc.town, c.code as country_code,"; $sql.= " pl.client_nom as nom, pl.code_banque as cb, pl.code_guichet as cg, pl.number as cc, pl.amount as somme,"; - $sql.= " f.facnumber as fac, pf.fk_facture as idfac, rib.datec, rib.iban_prefix as iban, rib.bic as bic, rib.rowid as drum"; + $sql.= " f.facnumber as fac, pf.fk_facture as idfac, rib.datec, rib.iban_prefix as iban, rib.bic as bic, rib.rowid as drum, rib.rum"; $sql.= " FROM"; $sql.= " ".MAIN_DB_PREFIX."prelevement_lignes as pl,"; $sql.= " ".MAIN_DB_PREFIX."facture as f,"; @@ -1375,7 +1375,7 @@ class BonPrelevement extends CommonObject while ($i < $num) { $obj = $this->db->fetch_object($resql); - $fileDebiteurSection .= $this->EnregDestinataireSEPA($obj->code, $obj->nom, $obj->address, $obj->zip, $obj->town, $obj->country_code, $obj->cb, $obj->cg, $obj->cc, $obj->somme, $obj->fac, $obj->idfac, $obj->iban, $obj->bic, $this->db->jdate($obj->datec), $obj->drum); + $fileDebiteurSection .= $this->EnregDestinataireSEPA($obj->code, $obj->nom, $obj->address, $obj->zip, $obj->town, $obj->country_code, $obj->cb, $obj->cg, $obj->cc, $obj->somme, $obj->fac, $obj->idfac, $obj->iban, $obj->bic, $this->db->jdate($obj->datec), $obj->drum, $obj->rum); $this->total = $this->total + $obj->somme; $i++; } @@ -1586,9 +1586,10 @@ class BonPrelevement extends CommonObject * @param string $row_bic rib.bic AS bic, * @param string $row_datec rib.datec, * @param string $row_drum rib.rowid used to generate rum + * @param string $row_rum rib.rum Rum defined on company bank account * @return string Return string with SEPA part DrctDbtTxInf */ - function EnregDestinataireSEPA($row_code_client, $row_nom, $row_address, $row_zip, $row_town, $row_country_code, $row_cb, $row_cg, $row_cc, $row_somme, $row_facnumber, $row_idfac, $row_iban, $row_bic, $row_datec, $row_drum) + function EnregDestinataireSEPA($row_code_client, $row_nom, $row_address, $row_zip, $row_town, $row_country_code, $row_cb, $row_cg, $row_cc, $row_somme, $row_facnumber, $row_idfac, $row_iban, $row_bic, $row_datec, $row_drum, $row_rum) { // phpcs:enable global $conf; @@ -1597,7 +1598,7 @@ class BonPrelevement extends CommonObject // Define value for RUM // Example: RUMCustomerCode-CustomerBankAccountId-01424448606 (note: Date is date of creation of CustomerBankAccountId) - $Rum = $this->buildRumNumber($row_code_client, $row_datec, $row_drum); + $Rum = empty($row_rum) ? $this->buildRumNumber($row_code_client, $row_datec, $row_drum) : $row_rum; // Define date of RUM signature $DtOfSgntr = dol_print_date($row_datec, '%Y-%m-%d'); From 41b004c2b837806eaaa29ffa4b63204e3c7a230e Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Wed, 10 Jul 2019 12:16:32 +0200 Subject: [PATCH 665/828] FIX better compatibility with multicompany transverse mode --- htdocs/core/class/html.formother.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/class/html.formother.class.php b/htdocs/core/class/html.formother.class.php index 1883ffd0304..28683d23771 100644 --- a/htdocs/core/class/html.formother.class.php +++ b/htdocs/core/class/html.formother.class.php @@ -421,7 +421,7 @@ class FormOther if (! empty($user->admin) && empty($user->entity) && $conf->entity == 1) { $sql_usr.= " WHERE u.entity IS NOT NULL"; // Show all users } else { - $sql_usr.= " WHERE EXISTS (SELECT ug.fk_user FROM ".MAIN_DB_PREFIX."usergroup_user as ug WHERE u.rowid = ug.fk_user AND ug.entity IN (".getEntity('user')."))"; + $sql_usr.= " WHERE EXISTS (SELECT ug.fk_user FROM ".MAIN_DB_PREFIX."usergroup_user as ug WHERE u.rowid = ug.fk_user AND ug.entity IN (".getEntity('usergroup')."))"; $sql_usr.= " OR u.entity = 0"; // Show always superadmin } } @@ -444,7 +444,7 @@ class FormOther if (! empty($user->admin) && empty($user->entity) && $conf->entity == 1) { $sql_usr.= " WHERE u2.entity IS NOT NULL"; // Show all users } else { - $sql_usr.= " WHERE EXISTS (SELECT ug2.fk_user FROM ".MAIN_DB_PREFIX."usergroup_user as ug2 WHERE u2.rowid = ug2.fk_user AND ug2.entity IN (".getEntity('user')."))"; + $sql_usr.= " WHERE EXISTS (SELECT ug2.fk_user FROM ".MAIN_DB_PREFIX."usergroup_user as ug2 WHERE u2.rowid = ug2.fk_user AND ug2.entity IN (".getEntity('usergroup')."))"; } } else From cebf81a5146a6d02b4c9f1ebd736e6298e29b769 Mon Sep 17 00:00:00 2001 From: atm-lena Date: Wed, 10 Jul 2019 15:18:25 +0200 Subject: [PATCH 666/828] FIX helpp text --- htdocs/core/tpl/commonfields_edit.tpl.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/tpl/commonfields_edit.tpl.php b/htdocs/core/tpl/commonfields_edit.tpl.php index ce41cff24d0..d23b9f09c2a 100644 --- a/htdocs/core/tpl/commonfields_edit.tpl.php +++ b/htdocs/core/tpl/commonfields_edit.tpl.php @@ -47,7 +47,7 @@ foreach($object->fields as $key => $val) if ($val['notnull'] > 0) print ' fieldrequired'; if ($val['type'] == 'text' || $val['type'] == 'html') print ' tdtop'; print '">'; - if (! empty($val['help'])) print $form->textwithpicto($langs->trans($val['label']), $val['help']); + if (! empty($val['help'])) print $form->textwithpicto($langs->trans($val['label']), $langs->trans($val['help'])); else print $langs->trans($val['label']); print ''; print ''; print ''; print ''; if (! $i) $totalarray['nbfield']++; From 332abd2a9f845ab0cfe969698ac0dbf38759853c Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Sat, 13 Jul 2019 11:02:45 +0200 Subject: [PATCH 673/828] FIX __INFOS__ tag not exists --- htdocs/install/mysql/data/llx_c_email_templates.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/install/mysql/data/llx_c_email_templates.sql b/htdocs/install/mysql/data/llx_c_email_templates.sql index 0c64fcf7d0d..87741d1054b 100644 --- a/htdocs/install/mysql/data/llx_c_email_templates.sql +++ b/htdocs/install/mysql/data/llx_c_email_templates.sql @@ -24,7 +24,7 @@ INSERT INTO llx_c_email_templates (entity,module,type_template,lang,private,fk_u 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,'adherent','member','',0,null,null,'(SendingEmailOnAutoSubscription)' ,10,'$conf->adherent->enabled',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourMembershipRequestWasReceived)__','__(Hello)__ __MEMBER_FULLNAME__,

\n\n__(ThisIsContentOfYourMembershipRequestWasReceived)__
\n
__ONLINE_PAYMENT_TEXT_AND_URL__
\n

\n__(Sincerely)__
__USER_SIGNATURE__',null, 0); -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,'adherent','member','',0,null,null,'(SendingEmailOnMemberValidation)' ,20,'$conf->adherent->enabled',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourMembershipWasValidated)__', '__(Hello)__ __MEMBER_FULLNAME__,

\n\n__(ThisIsContentOfYourMembershipWasValidated)__
__INFOS__
\n
__ONLINE_PAYMENT_TEXT_AND_URL__
\n

\n__(Sincerely)__
__USER_SIGNATURE__',null, 0); +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,'adherent','member','',0,null,null,'(SendingEmailOnMemberValidation)' ,20,'$conf->adherent->enabled',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourMembershipWasValidated)__', '__(Hello)__ __MEMBER_FULLNAME__,

\n\n__(ThisIsContentOfYourMembershipWasValidated)__
__(FirstName)__ : __MEMBER_FIRSTNAME__
__(LastName)__ : __MEMBER_LASTNAME__
__(ID)__ : __MEMBER_ID__
\n
__ONLINE_PAYMENT_TEXT_AND_URL__
\n

\n__(Sincerely)__
__USER_SIGNATURE__',null, 0); 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,'adherent','member','',0,null,null,'(SendingEmailOnNewSubscription)' ,30,'$conf->adherent->enabled',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourSubscriptionWasRecorded)__', '__(Hello)__ __MEMBER_FULLNAME__,

\n\n__(ThisIsContentOfYourSubscriptionWasRecorded)__
\n\n

\n__(Sincerely)__
__USER_SIGNATURE__',null, 1); 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,'adherent','member','',0,null,null,'(SendingReminderForExpiredSubscription)',40,'$conf->adherent->enabled',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(SubscriptionReminderEmail)__', '__(Hello)__ __MEMBER_FULLNAME__,

\n\n__(ThisIsContentOfSubscriptionReminderEmail)__
\n
__ONLINE_PAYMENT_TEXT_AND_URL__
\n

\n__(Sincerely)__
__USER_SIGNATURE__',null, 0); 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,'adherent','member','',0,null,null,'(SendingEmailOnCancelation)' ,50,'$conf->adherent->enabled',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourMembershipWasCanceled)__', '__(Hello)__ __MEMBER_FULLNAME__,

\n\n__(YourMembershipWasCanceled)__
\n

\n__(Sincerely)__
__USER_SIGNATURE__',null, 0); From b7df4a2cd04b6b8c13f78162e85a3ee660355dc6 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Sat, 13 Jul 2019 11:21:07 +0200 Subject: [PATCH 674/828] FIX this function can not be private --- htdocs/adherents/class/adherent.class.php | 2 +- htdocs/contact/class/contact.class.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php index 115d1fb8ab4..2001959240d 100644 --- a/htdocs/adherents/class/adherent.class.php +++ b/htdocs/adherents/class/adherent.class.php @@ -2447,7 +2447,7 @@ class Adherent extends CommonObject * 2=Return key only (uid=qqq) * @return string DN */ - private function _load_ldap_dn($info, $mode = 0) + public function _load_ldap_dn($info, $mode = 0) { // phpcs:enable global $conf; diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index de9494fca8b..74ff7bf5fb4 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -507,7 +507,7 @@ class Contact extends CommonObject * 2=Return key only (uid=qqq) * @return string DN */ - private function _load_ldap_dn($info, $mode = 0) + public function _load_ldap_dn($info, $mode = 0) { // phpcs:enable global $conf; From 4dab57b4947a4d965f253a824582db656239fd24 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Sat, 13 Jul 2019 11:24:25 +0200 Subject: [PATCH 675/828] FIX phpcs --- htdocs/adherents/class/adherent.class.php | 1 + htdocs/contact/class/contact.class.php | 1 + 2 files changed, 2 insertions(+) diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php index 2001959240d..d20fc34ec9d 100644 --- a/htdocs/adherents/class/adherent.class.php +++ b/htdocs/adherents/class/adherent.class.php @@ -2438,6 +2438,7 @@ class Adherent extends CommonObject // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore /** * Retourne chaine DN complete dans l'annuaire LDAP pour l'objet * diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index 74ff7bf5fb4..d6053a46b35 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -498,6 +498,7 @@ class Contact extends CommonObject // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore /** * Retourne chaine DN complete dans l'annuaire LDAP pour l'objet * From f041110a7ef88cd8057d515bce96946c0242bf3f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 13 Jul 2019 22:29:50 +0200 Subject: [PATCH 676/828] Update commonobject.class.php --- htdocs/core/class/commonobject.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 43f78b571de..579deec88e3 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -2615,7 +2615,7 @@ abstract class CommonObject $MODULE = ""; if ($this->element == 'propal') $MODULE = "MODULE_DISALLOW_UPDATE_PRICE_PROPOSAL"; - elseif ($this->element == 'commande') + elseif ($this->element == 'commande' || $this->element == 'order') $MODULE = "MODULE_DISALLOW_UPDATE_PRICE_ORDER"; elseif ($this->element == 'facture') $MODULE = "MODULE_DISALLOW_UPDATE_PRICE_INVOICE"; From b6571d9fc3a27f147ace6d6794f6d58a9690a749 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 13 Jul 2019 22:39:25 +0200 Subject: [PATCH 677/828] Update byratecountry.php --- htdocs/compta/stats/byratecountry.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/stats/byratecountry.php b/htdocs/compta/stats/byratecountry.php index cd41649cc89..045f5e6429c 100644 --- a/htdocs/compta/stats/byratecountry.php +++ b/htdocs/compta/stats/byratecountry.php @@ -37,7 +37,7 @@ require_once DOL_DOCUMENT_ROOT.'/expensereport/class/paymentexpensereport.class. // Load translation files required by the page $langs->loadLangs(array("other","compta","banks","bills","companies","product","trips","admin","accountancy")); -$modecompta = $conf->global->ACCOUNTING_MODE; +$modecompta = (GETPOST('modecompta', 'alpha') ? GETPOST('modecompta', 'alpha') : $conf->global->ACCOUNTING_MODE); // Date range $year=GETPOST("year",'int'); From 8090a8abb66619753ea5cca54d04ce92d71eae1c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 14 Jul 2019 00:07:27 +0200 Subject: [PATCH 678/828] Fix param [] -> null --- htdocs/adherents/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php index 0fbee667522..f0d8df454cf 100644 --- a/htdocs/adherents/card.php +++ b/htdocs/adherents/card.php @@ -646,7 +646,7 @@ if (empty($reshook)) if (empty($labeltouse) || (int) $labeltouse === -1) { //fallback on the old configuration. - setEventMessages('WarningMandatorySetupNotComplete', [], 'errors'); + setEventMessages('WarningMandatorySetupNotComplete', null, 'errors'); $error++; } else { From b66ad24d85577a95b2280285c6dc946fecffe0c1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 14 Jul 2019 00:10:15 +0200 Subject: [PATCH 679/828] Fix save of doc template for recuring invoices. --- htdocs/compta/facture/fiche-rec.php | 2 +- htdocs/core/class/html.form.class.php | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/htdocs/compta/facture/fiche-rec.php b/htdocs/compta/facture/fiche-rec.php index 31a4affb95d..f195ab84324 100644 --- a/htdocs/compta/facture/fiche-rec.php +++ b/htdocs/compta/facture/fiche-rec.php @@ -1424,7 +1424,7 @@ else $list = array(); $models = ModelePDFFactures::liste_modeles($db); foreach ($models as $k => $model) { - $list[] = $k . ':' . $model; + $list[] = str_replace(':', '|', $k) . ':' . $model; } $select = 'select;'.implode(',', $list); print $form->editfieldval($langs->trans("Model"), 'modelpdf', $object->modelpdf, $object, $user->rights->facture->creer, $select); diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index a462f40ebdc..d2130e24291 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -152,7 +152,7 @@ class Form * @param string $value Value to show/edit * @param object $object Object * @param boolean $perm Permission to allow button to edit parameter - * @param string $typeofdata Type of data ('string' by default, 'email', 'amount:99', 'numeric:99', 'text' or 'textarea:rows:cols%', 'datepicker' ('day' do not work, don't know why), 'dayhour' or 'datepickerhour', 'ckeditor:dolibarr_zzz:width:height:savemethod:toolbarstartexpanded:rows:cols', 'select:xxx'...) + * @param string $typeofdata Type of data ('string' by default, 'email', 'amount:99', 'numeric:99', 'text' or 'textarea:rows:cols%', 'datepicker' ('day' do not work, don't know why), 'dayhour' or 'datepickerhour', 'ckeditor:dolibarr_zzz:width:height:savemethod:toolbarstartexpanded:rows:cols', 'select;xkey:xval,ykey:yval,...') * @param string $editvalue When in edit mode, use this value as $value instead of value (for example, you can provide here a formated price instead of value). Use '' to use same than $value * @param object $extObject External object * @param mixed $custommsg String or Array of custom messages : eg array('success' => 'MyMessage', 'error' => 'MyMessage') @@ -172,7 +172,7 @@ class Form if (empty($typeofdata)) return 'ErrorBadParameter'; // When option to edit inline is activated - if (! empty($conf->global->MAIN_USE_JQUERY_JEDITABLE) && ! preg_match('/^select;|datehourpicker/',$typeofdata)) // TODO add jquery timepicker + if (! empty($conf->global->MAIN_USE_JQUERY_JEDITABLE) && ! preg_match('/^select;|datehourpicker/',$typeofdata)) // TODO add jquery timepicker and support select { $ret.=$this->editInPlace($object, $value, $htmlname, $perm, $typeofdata, $editvalue, $extObject, $custommsg); } @@ -229,7 +229,8 @@ class Form foreach($arraydata as $val) { $tmp=explode(':',$val); - $arraylist[$tmp[0]]=$tmp[1]; + $tmpkey=str_replace('|', ':', $tmp[0]); + $arraylist[$tmpkey]=$tmp[1]; } $ret.=$this->selectarray($htmlname,$arraylist,$value); } @@ -298,7 +299,7 @@ class Form * @param string $value Value to show/edit * @param string $htmlname DIV ID (field name) * @param int $condition Condition to edit - * @param string $inputType Type of input ('string', 'numeric', 'datepicker' ('day' do not work, don't know why), 'textarea:rows:cols', 'ckeditor:dolibarr_zzz:width:height:?:1:rows:cols', 'select:xxx') + * @param string $inputType Type of input ('string', 'numeric', 'datepicker' ('day' do not work, don't know why), 'textarea:rows:cols', 'ckeditor:dolibarr_zzz:width:height:?:1:rows:cols', 'select:loadmethod:savemethod:buttononly') * @param string $editvalue When in edit mode, use this value as $value instead of value * @param object $extObject External object * @param mixed $custommsg String or Array of custom messages : eg array('success' => 'MyMessage', 'error' => 'MyMessage') From 2a05164bb119520e8a68c43aea99c399d10a8e43 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 14 Jul 2019 00:31:28 +0200 Subject: [PATCH 680/828] FIX Better PHP compatibility --- htdocs/adherents/card.php | 2 +- .../class/DataCollector/DolLogsCollector.php | 6 +++--- htdocs/public/stripe/confirm_payment.php | 20 ++++++++++--------- .../societe/class/api_thirdparties.class.php | 16 +++++++-------- htdocs/societe/paymentmodes.php | 2 +- htdocs/stripe/class/stripe.class.php | 2 +- 6 files changed, 25 insertions(+), 23 deletions(-) diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php index 1e777d003d9..373e8b953f6 100644 --- a/htdocs/adherents/card.php +++ b/htdocs/adherents/card.php @@ -734,7 +734,7 @@ if (empty($reshook)) if (empty($labeltouse) || (int) $labeltouse === -1) { //fallback on the old configuration. - setEventMessages('WarningMandatorySetupNotComplete', [], 'errors'); + setEventMessages('WarningMandatorySetupNotComplete', null, 'errors'); $error++; } else { diff --git a/htdocs/debugbar/class/DataCollector/DolLogsCollector.php b/htdocs/debugbar/class/DataCollector/DolLogsCollector.php index 8e39c68b6b7..dd6fabd508f 100644 --- a/htdocs/debugbar/class/DataCollector/DolLogsCollector.php +++ b/htdocs/debugbar/class/DataCollector/DolLogsCollector.php @@ -144,7 +144,7 @@ class DolLogsCollector extends MessagesCollector $linecounter = $lines; $pos = -2; $beginning = false; - $text = []; + $text = array(); while ($linecounter > 0) { $t = " "; while ($t != "\n") { @@ -179,12 +179,12 @@ class DolLogsCollector extends MessagesCollector $pattern = "/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.*/"; $log_levels = $this->getLevels(); preg_match_all($pattern, $file, $matches); - $log = []; + $log = array(); foreach ($matches as $lines) { foreach ($lines as $line) { foreach ($log_levels as $level_key => $level) { if (strpos(strtolower($line), strtolower($level_key)) == 20) { - $log[] = ['level' => $level, 'line' => $line]; + $log[] = array('level' => $level, 'line' => $line); } } } diff --git a/htdocs/public/stripe/confirm_payment.php b/htdocs/public/stripe/confirm_payment.php index ea59b13dcb9..9ff9662ff84 100644 --- a/htdocs/public/stripe/confirm_payment.php +++ b/htdocs/public/stripe/confirm_payment.php @@ -15,6 +15,8 @@ * along with this program. If not, see . */ +// TODO Do we really need this page. We alread have a ipn.php page ! + define("NOLOGIN", 1); // This means this output page does not require to be logged. define("NOCSRFCHECK", 1); // We accept to go on this page from external web site. @@ -105,13 +107,13 @@ $intent = null; try { if (isset($json_obj->payment_method_id)) { // Create the PaymentIntent - $intent = \Stripe\PaymentIntent::create([ + $intent = \Stripe\PaymentIntent::create(array( 'payment_method' => $json_obj->payment_method_id, 'amount' => 1099, 'currency' => 'eur', 'confirmation_method' => 'manual', 'confirm' => true, - ]); + )); } if (isset($json_obj->payment_intent_id)) { $intent = \Stripe\PaymentIntent::retrieve( @@ -122,9 +124,9 @@ try { generatePaymentResponse($intent); } catch (\Stripe\Error\Base $e) { // Display error on client - echo json_encode([ + echo json_encode(array( 'error' => $e->getMessage() - ]); + )); } /* @@ -138,22 +140,22 @@ function generatePaymentResponse($intent) if ($intent->status == 'requires_source_action' && $intent->next_action->type == 'use_stripe_sdk') { // Tell the client to handle the action - echo json_encode([ + echo json_encode(array( 'requires_action' => true, 'payment_intent_client_secret' => $intent->client_secret - ]); + )); } elseif ($intent->status == 'succeeded') { // The payment didn’t need any additional actions and completed! // Handle post-payment fulfillment // TODO - echo json_encode([ + echo json_encode(array( "success" => true - ]); + )); } else { // Invalid status http_response_code(500); - echo json_encode(['error' => 'Invalid PaymentIntent status']); + echo json_encode(array('error' => 'Invalid PaymentIntent status')); } } diff --git a/htdocs/societe/class/api_thirdparties.class.php b/htdocs/societe/class/api_thirdparties.class.php index adae31e7677..95aad3a003b 100644 --- a/htdocs/societe/class/api_thirdparties.class.php +++ b/htdocs/societe/class/api_thirdparties.class.php @@ -1041,7 +1041,7 @@ $reshook = $hookmanager->executeHooks('replaceThirdparty', array( $i=0; - $accounts =[]; + $accounts = array(); if ($result) { @@ -1061,12 +1061,12 @@ $reshook = $hookmanager->executeHooks('replaceThirdparty', array( } - $fields = ['socid', 'default_rib', 'frstrecur', '1000110000001', 'datec', 'datem', 'label', 'bank', 'bic', 'iban', 'id', 'rum']; + $fields = array('socid', 'default_rib', 'frstrecur', '1000110000001', 'datec', 'datem', 'label', 'bank', 'bic', 'iban', 'id', 'rum'); - $returnAccounts = []; + $returnAccounts = array(); foreach($accounts as $account){ - $object= []; + $object= array(); foreach($account as $key => $value) if(in_array($key, $fields)){ $object[$key] = $value; @@ -1308,7 +1308,7 @@ $reshook = $hookmanager->executeHooks('replaceThirdparty', array( $i=0; - $accounts =[]; + $accounts = array(); $num = $db->num_rows($result); while ($i < $num) @@ -1322,12 +1322,12 @@ $reshook = $hookmanager->executeHooks('replaceThirdparty', array( $i++; } - $fields = ['id', 'fk_soc', 'key_account', 'site', 'date_creation', 'tms']; + $fields = array('id', 'fk_soc', 'key_account', 'site', 'date_creation', 'tms'); - $returnAccounts = []; + $returnAccounts = array(); foreach($accounts as $account){ - $object= []; + $object= array(); foreach($account as $key => $value) if(in_array($key, $fields)){ $object[$key] = $value; diff --git a/htdocs/societe/paymentmodes.php b/htdocs/societe/paymentmodes.php index 0e41e11cbaa..51a7ccb24bb 100644 --- a/htdocs/societe/paymentmodes.php +++ b/htdocs/societe/paymentmodes.php @@ -639,7 +639,7 @@ if (empty($reshook)) try { if (preg_match('/pm_/', $source)) { - $payment_method = \Stripe\PaymentMethod::retrieve($source, ["stripe_account" => $stripeacc]); + $payment_method = \Stripe\PaymentMethod::retrieve($source, array("stripe_account" => $stripeacc)); if ($payment_method) { $payment_method->detach(); diff --git a/htdocs/stripe/class/stripe.class.php b/htdocs/stripe/class/stripe.class.php index d8d0c656dab..6b910236e96 100644 --- a/htdocs/stripe/class/stripe.class.php +++ b/htdocs/stripe/class/stripe.class.php @@ -389,7 +389,7 @@ class Stripe extends CommonObject "confirmation_method" => $mode, "amount" => $stripeamount, "currency" => $currency_code, - "payment_method_types" => ["card"], + "payment_method_types" => array("card"), "description" => $description, "statement_descriptor" => dol_trunc($tag, 10, 'right', 'UTF-8', 1), // 22 chars that appears on bank receipt (company + description) //"save_payment_method" => true, From e1d49177040c197c6027e53bd302e031ee46ab12 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 14 Jul 2019 00:39:42 +0200 Subject: [PATCH 681/828] FIX Missing field "Conciliated" into bank transaction export --- htdocs/core/modules/modBanque.class.php | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/htdocs/core/modules/modBanque.class.php b/htdocs/core/modules/modBanque.class.php index fb2c818043e..21c33d35170 100644 --- a/htdocs/core/modules/modBanque.class.php +++ b/htdocs/core/modules/modBanque.class.php @@ -150,14 +150,15 @@ class modBanque extends DolibarrModules $this->export_fields_array[$r]=array( 'b.rowid'=>'IdTransaction','ba.ref'=>'AccountRef','ba.label'=>'AccountLabel','b.datev'=>'DateValue','b.dateo'=>'DateOperation','b.label'=>'Label', 'b.num_chq'=>'ChequeOrTransferNumber','b.fk_bordereau'=>'ChequeBordereau','-b.amount'=>'Debit','b.amount'=>'Credit', - 'b.num_releve'=>'AccountStatement','b.datec'=>"DateCreation","bu.url_id"=>"IdThirdParty","s.nom"=>"ThirdParty", - "s.code_compta"=>"CustomerAccountancyCode","s.code_compta_fournisseur"=>"SupplierAccountancyCode" + 'b.num_releve'=>'AccountStatement','b.rappro'=>'Conciliated','b.datec'=>"DateCreation","bu.url_id"=>"IdThirdParty", + "s.nom"=>"ThirdParty","s.code_compta"=>"CustomerAccountancyCode","s.code_compta_fournisseur"=>"SupplierAccountancyCode" ); - $this->export_TypeFields_array[$r]=array('ba.ref'=>'Text','ba.label'=>'Text','b.datev'=>'Date','b.dateo'=>'Date','b.label'=>'Text','b.num_chq'=>'Text','b.fk_bordereau'=>'Text','-b.amount'=>'Numeric','b.amount'=>'Numeric','b.num_releve'=>'Text','b.datec'=>"Date","bu.url_id"=>"Text","s.nom"=>"Text","s.code_compta"=>"Text","s.code_compta_fournisseur"=>"Text"); + $this->export_TypeFields_array[$r]=array('ba.ref'=>'Text','ba.label'=>'Text','b.datev'=>'Date','b.dateo'=>'Date','b.label'=>'Text','b.num_chq'=>'Text','b.fk_bordereau'=>'Text','-b.amount'=>'Numeric','b.amount'=>'Numeric','b.num_releve'=>'Text','b.rappro'=>'Boolean','b.datec'=>"Date","bu.url_id"=>"Text","s.nom"=>"Text","s.code_compta"=>"Text","s.code_compta_fournisseur"=>"Text"); $this->export_entities_array[$r]=array( 'b.rowid'=>'account','ba.ref'=>'account','ba.label'=>'account','b.datev'=>'account','b.dateo'=>'account','b.label'=>'account', - 'b.num_chq'=>'account','b.fk_bordereau'=>'account','-b.amount'=>'account','b.amount'=>'account','b.num_releve'=>'account', - 'b.datec'=>"account","bu.url_id"=>"company","s.nom"=>"company","s.code_compta"=>"company","s.code_compta_fournisseur"=>"company" + 'b.num_chq'=>'account','b.fk_bordereau'=>'account','-b.amount'=>'account','b.amount'=>'account', + 'b.num_releve'=>'account','b.rappro'=>'account','b.datec'=>"account","bu.url_id"=>"company", + "s.nom"=>"company","s.code_compta"=>"company","s.code_compta_fournisseur"=>"company" ); $this->export_special_array[$r]=array('-b.amount'=>'NULLIFNEG','b.amount'=>'NULLIFNEG'); if (empty($conf->fournisseur->enabled)) From 294bc5dcb5e0fedca685b6976e4d7e042fa03067 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Mon, 15 Jul 2019 10:19:06 +0200 Subject: [PATCH 682/828] FIX avoid conflict with "$classname" in card.php --- htdocs/commande/card.php | 4 ++-- htdocs/core/tpl/object_discounts.tpl.php | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php index 10629ec3452..96ea54c5c84 100644 --- a/htdocs/commande/card.php +++ b/htdocs/commande/card.php @@ -1436,11 +1436,11 @@ if ($action == 'create' && $user->rights->commande->creer) if ($element == 'order' || $element == 'commande') { $element = $subelement = 'commande'; } - if ($element == 'propal') { + elseif ($element == 'propal') { $element = 'comm/propal'; $subelement = 'propal'; } - if ($element == 'contract') { + elseif ($element == 'contract') { $element = $subelement = 'contrat'; } diff --git a/htdocs/core/tpl/object_discounts.tpl.php b/htdocs/core/tpl/object_discounts.tpl.php index 70698bfa7eb..3d02d3c5a73 100644 --- a/htdocs/core/tpl/object_discounts.tpl.php +++ b/htdocs/core/tpl/object_discounts.tpl.php @@ -24,7 +24,7 @@ * $backtopage URL to come back to from discount modification pages */ -$classname = get_class($object); +$objclassname = get_class($object); $isInvoice = in_array($object->element, array('facture', 'invoice', 'facture_fourn', 'invoice_supplier')); $isNewObject = empty($object->id) && empty($object->rowid); @@ -53,11 +53,11 @@ if($isNewObject) print ' ('.$addrelativediscount.')'; // Is there is commercial discount or down payment available ? if ($absolute_discount > 0) { - if ($cannotApplyDiscount || ! $isInvoice || $isNewObject || $object->statut > $classname::STATUS_DRAFT || $object->type == $classname::TYPE_CREDIT_NOTE || $object->type == $classname::TYPE_DEPOSIT) { + if ($cannotApplyDiscount || ! $isInvoice || $isNewObject || $object->statut > $objclassname::STATUS_DRAFT || $object->type == $objclassname::TYPE_CREDIT_NOTE || $object->type == $objclassname::TYPE_DEPOSIT) { $translationKey = ! empty($discount_type) ? 'HasAbsoluteDiscountFromSupplier' : 'CompanyHasAbsoluteDiscount'; $text = $langs->trans($translationKey, price($absolute_discount), $langs->transnoentities("Currency" . $conf->currency)).'.'; - if ($isInvoice && ! $isNewObject && $object->statut > $classname::STATUS_DRAFT && $object->type != $classname::TYPE_CREDIT_NOTE && $object->type != $classname::TYPE_DEPOSIT) { + if ($isInvoice && ! $isNewObject && $object->statut > $objclassname::STATUS_DRAFT && $object->type != $objclassname::TYPE_CREDIT_NOTE && $object->type != $objclassname::TYPE_DEPOSIT) { $text = $form->textwithpicto($text, $langs->trans('AbsoluteDiscountUse')); } @@ -77,11 +77,11 @@ if ($absolute_discount > 0) { if ($absolute_creditnote > 0) { // If validated, we show link "add credit note to payment" - if ($cannotApplyDiscount || ! $isInvoice || $isNewObject || $object->statut != $classname::STATUS_VALIDATED || $object->type == $classname::TYPE_CREDIT_NOTE) { + if ($cannotApplyDiscount || ! $isInvoice || $isNewObject || $object->statut != $objclassname::STATUS_VALIDATED || $object->type == $objclassname::TYPE_CREDIT_NOTE) { $translationKey = ! empty($discount_type) ? 'HasCreditNoteFromSupplier' : 'CompanyHasCreditNote'; $text = $langs->trans($translationKey, price($absolute_creditnote), $langs->transnoentities("Currency" . $conf->currency)) . '.'; - if ($isInvoice && ! $isNewObject && $object->statut == $classname::STATUS_DRAFT && $object->type != $classname::TYPE_DEPOSIT) { + if ($isInvoice && ! $isNewObject && $object->statut == $objclassname::STATUS_DRAFT && $object->type != $objclassname::TYPE_DEPOSIT) { $text = $form->textwithpicto($text, $langs->trans('CreditNoteDepositUse')); } @@ -101,7 +101,7 @@ if($absolute_discount <= 0 && $absolute_creditnote <= 0) { $translationKey = ! empty($discount_type) ? 'HasNoAbsoluteDiscountFromSupplier' : 'CompanyHasNoAbsoluteDiscount'; print '
'.$langs->trans($translationKey).'.'; - if ($isInvoice && $object->statut == $classname::STATUS_DRAFT && $object->type != $classname::TYPE_CREDIT_NOTE && $object->type != $classname::TYPE_DEPOSIT) { + if ($isInvoice && $object->statut == $objclassname::STATUS_DRAFT && $object->type != $objclassname::TYPE_CREDIT_NOTE && $object->type != $objclassname::TYPE_DEPOSIT) { print ' (' . $addabsolutediscount . ')'; } } From ae540cb25e5b6b671258f2c4ae71b2c5bca5d4ee Mon Sep 17 00:00:00 2001 From: "atm-florian.m" Date: Tue, 9 Jul 2019 18:00:54 +0200 Subject: [PATCH 683/828] FIX: add missing hook calls --- htdocs/fourn/product/list.php | 57 ++++++++++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/htdocs/fourn/product/list.php b/htdocs/fourn/product/list.php index 16ed559814d..90ff76231d1 100644 --- a/htdocs/fourn/product/list.php +++ b/htdocs/fourn/product/list.php @@ -75,7 +75,12 @@ if (GETPOST('cancel','alpha')) { $action='list'; $massaction=''; } if (! GETPOST('confirmmassaction','alpha') && $massaction != 'presend' && $massaction != 'confirm_presend') { $massaction=''; } $parameters=array(); -$reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks +$reshook=$hookmanager->executeHooks( + 'doActions', + $parameters, + $object, + $action +); if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); if (empty($reshook)) @@ -128,6 +133,17 @@ $massactionbutton=$form->selectMassAction('', $arrayofmassactions); $sql = "SELECT p.rowid, p.label, p.ref, p.fk_product_type, p.entity,"; $sql.= " ppf.fk_soc, ppf.ref_fourn, ppf.price as price, ppf.quantity as qty, ppf.unitprice,"; $sql.= " s.rowid as socid, s.nom as name"; + +// Add fields to SELECT from hooks +$parameters = array(); +$reshook = $hookmanager->executeHooks( + 'printFieldListSelect', + $parameters, + $object, + $action +); +$sql .= $hookmanager->resPrint; + $sql.= " FROM ".MAIN_DB_PREFIX."product as p"; if ($catid) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."categorie_product as cp ON cp.fk_product = p.rowid"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur_price as ppf ON p.rowid = ppf.fk_product"; @@ -158,6 +174,14 @@ if ($fourn_id > 0) $sql .= " AND ppf.fk_soc = ".$fourn_id; } +// Add WHERE filters from hooks +$parameters = array(); +$reshook = $hookmanager->executeHooks( + 'printFieldListWhere', + $parameters +); +$sql .= $hookmanager->resPrint; + $sql .= $db->order($sortfield,$sortorder); // Count total nb of records without orderby and limit @@ -242,6 +266,17 @@ if ($resql) print '
'; print ''; print ''; + + // add filters from hooks + $parameters = array(); + $reshook = $hookmanager->executeHooks( + 'printFieldPreListTitle', + $parameters, + $object, + $action + ); + if (!empty($reshook)) print $hookmanager->resPrint; + print '\n"; @@ -292,6 +337,16 @@ if ($resql) print ''; + // add additional columns from hooks + $parameters = array(); + $reshook = $hookmanager->executeHooks( + 'printFieldListValue', + $parameters, + $objp, + $action + ); + if (!empty($reshook)) print $hookmanager->resPrint; + print ''; print "\n"; From 8aa147a4e518f7b1a4ba203c7825bcc8e82b2d79 Mon Sep 17 00:00:00 2001 From: "atm-florian.m" Date: Wed, 10 Jul 2019 19:00:20 +0200 Subject: [PATCH 684/828] # missing hooks from dispatch.php and list.php --- htdocs/fourn/commande/dispatch.php | 83 ++++++++++++++++++++++++++++++ htdocs/fourn/product/list.php | 11 ++-- 2 files changed, 91 insertions(+), 3 deletions(-) diff --git a/htdocs/fourn/commande/dispatch.php b/htdocs/fourn/commande/dispatch.php index 4b15f04faa0..af2a2218410 100644 --- a/htdocs/fourn/commande/dispatch.php +++ b/htdocs/fourn/commande/dispatch.php @@ -491,11 +491,35 @@ if ($id > 0 || ! empty($ref)) { $sql = "SELECT l.rowid, l.fk_product, l.subprice, l.remise_percent, l.ref AS sref, SUM(l.qty) as qty,"; $sql .= " p.ref, p.label, p.tobatch, p.fk_default_warehouse"; + + // Enable hooks to alter the SQL query (SELECT) + $parameters = array(); + $reshook = $hookmanager->executeHooks( + 'printFieldListSelect', + $parameters, + $object, + $action + ); + if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + $sql .= $hookmanager->resPrint; + $sql .= " FROM " . MAIN_DB_PREFIX . "commande_fournisseurdet as l"; $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "product as p ON l.fk_product=p.rowid"; $sql .= " WHERE l.fk_commande = " . $object->id; if (empty($conf->global->STOCK_SUPPORTS_SERVICES)) $sql .= " AND l.product_type = 0"; + + // Enable hooks to alter the SQL query (WHERE) + $parameters = array(); + $reshook = $hookmanager->executeHooks( + 'printFieldListWhere', + $parameters, + $object, + $action + ); + if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + $sql .= $hookmanager->resPrint; + $sql .= " GROUP BY p.ref, p.label, p.tobatch, l.rowid, l.fk_product, l.subprice, l.remise_percent, p.fk_default_warehouse"; // Calculation of amount dispatched is done per fk_product so we must group by fk_product $sql .= " ORDER BY p.ref, p.label"; @@ -526,6 +550,18 @@ if ($id > 0 || ! empty($ref)) { print ''; print ''; print ''; + + // Enable hooks to append additional columns + $parameters = array(); + $reshook = $hookmanager->executeHooks( + 'printFieldListTitle', + $parameters, + $object, + $action + ); + if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + print $hookmanager->resPrint; + print "\n"; } @@ -608,6 +644,23 @@ if ($id > 0 || ! empty($ref)) { //print img_picto($langs->trans('AddDispatchBatchLine'), 'split.png', 'onClick="addDispatchLine(' . $i . ',\'' . $type . '\')"'); print ''; // Dispatch column print ''; // Warehouse column + + // Enable hooks to append additional columns + $parameters = array( + 'is_information_row' => true, // allows hook to distinguish between the + // rows with information and the rows with + // dispatch form input + 'objp' => $objp + ); + $reshook = $hookmanager->executeHooks( + 'printFieldListValue', + $parameters, + $object, + $action + ); + if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + print $hookmanager->resPrint; + print ''; print ''; @@ -648,6 +701,23 @@ if ($id > 0 || ! empty($ref)) { //print img_picto($langs->trans('AddStockLocationLine'), 'split.png', 'onClick="addDispatchLine(' . $i . ',\'' . $type . '\')"'); print ''; // Dispatch column print ''; // Warehouse column + + // Enable hooks to append additional columns + $parameters = array( + 'is_information_row' => true, // allows hook to distinguish between the + // rows with information and the rows with + // dispatch form input + 'objp' => $objp + ); + $reshook = $hookmanager->executeHooks( + 'printFieldListValue', + $parameters, + $object, + $action + ); + if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + print $hookmanager->resPrint; + print ''; print ''; @@ -699,6 +769,19 @@ if ($id > 0 || ! empty($ref)) { } print "\n"; + // Enable hooks to append additional columns + $parameters = array( + 'is_information_row' => false // this is a dispatch form row + ); + $reshook = $hookmanager->executeHooks( + 'printFieldListValue', + $parameters, + $object, + $action + ); + if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + print $hookmanager->resPrint; + print "\n"; } } diff --git a/htdocs/fourn/product/list.php b/htdocs/fourn/product/list.php index 90ff76231d1..acfeb87fca9 100644 --- a/htdocs/fourn/product/list.php +++ b/htdocs/fourn/product/list.php @@ -142,6 +142,7 @@ $reshook = $hookmanager->executeHooks( $object, $action ); +if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); $sql .= $hookmanager->resPrint; $sql.= " FROM ".MAIN_DB_PREFIX."product as p"; @@ -180,6 +181,7 @@ $reshook = $hookmanager->executeHooks( 'printFieldListWhere', $parameters ); +if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); $sql .= $hookmanager->resPrint; $sql .= $db->order($sortfield,$sortorder); @@ -275,7 +277,8 @@ if ($resql) $object, $action ); - if (!empty($reshook)) print $hookmanager->resPrint; + if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + print $hookmanager->resPrint; print '\n"; @@ -345,7 +349,8 @@ if ($resql) $objp, $action ); - if (!empty($reshook)) print $hookmanager->resPrint; + if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + print $hookmanager->resPrint; print ''; From b0d46d492fdd738cab5b15202abb4414da373828 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 15 Jul 2019 18:40:42 +0200 Subject: [PATCH 685/828] FIX #11509 --- htdocs/adherents/subscription/list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/adherents/subscription/list.php b/htdocs/adherents/subscription/list.php index e3eb9b595ee..e7967aa4782 100644 --- a/htdocs/adherents/subscription/list.php +++ b/htdocs/adherents/subscription/list.php @@ -229,7 +229,7 @@ if ($search_type) $param.="&search_type=".urlencode($search_type); if ($date_select) $param.="&date_select=".urlencode($date_select); if ($search_lastname) $param.="&search_lastname=".urlencode($search_lastname); if ($search_login) $param.="&search_login=".urlencode($search_login); -if ($search_acount) $param.="&search_account=".urlencode($search_account); +if ($search_account) $param.="&search_account=".urlencode($search_account); if ($search_amount) $param.="&search_amount=".urlencode($search_amount); if ($optioncss != '') $param.='&optioncss='.urlencode($optioncss); // Add $param from extra fields From 5778a02ee1f195ad457a07de6b4f986d6e4cb49a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 15 Jul 2019 18:44:33 +0200 Subject: [PATCH 686/828] FIX #11505 --- htdocs/accountancy/journal/bankjournal.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/accountancy/journal/bankjournal.php b/htdocs/accountancy/journal/bankjournal.php index d4a9ff0d3f6..8003cf1c523 100644 --- a/htdocs/accountancy/journal/bankjournal.php +++ b/htdocs/accountancy/journal/bankjournal.php @@ -964,7 +964,7 @@ if (empty($action) || $action == 'view') { $varlink = 'id_journal=' . $id_journal; - journalHead($nom, $nomlink, $period, $periodlink, $description, $builddate, $exportlink, array('action' => ''), '', $varlink); + journalHead($nom, '', $period, $periodlink, $description, $builddate, $exportlink, array('action' => ''), '', $varlink); // Test that setup is complete From e3968241335b6dea66c1b5b2e7ed0d7768c40ae1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 15 Jul 2019 19:08:57 +0200 Subject: [PATCH 687/828] FIX #11507 --- htdocs/accountancy/admin/productaccount.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/accountancy/admin/productaccount.php b/htdocs/accountancy/admin/productaccount.php index 562dfd1505b..1c72ea61abd 100644 --- a/htdocs/accountancy/admin/productaccount.php +++ b/htdocs/accountancy/admin/productaccount.php @@ -462,7 +462,7 @@ if ($result) // print ''; // TODO: we shoul set a user defined value to adjust user square / wide screen size $trunclengh = empty($conf->global->ACCOUNTING_LENGTH_DESCRIPTION) ? 32 : $conf->global->ACCOUNTING_LENGTH_DESCRIPTION; - print ''; + print ''; } if ($accounting_product_mode == 'ACCOUNTANCY_SELL' || $accounting_product_mode == 'ACCOUNTANCY_SELL_INTRA' || $accounting_product_mode == 'ACCOUNTANCY_SELL_EXPORT') From 6c23154a91f683f300bac2b114acce2aa4c2d201 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 15 Jul 2019 22:59:18 +0200 Subject: [PATCH 688/828] FIX #11506 --- htdocs/accountancy/admin/journals_list.php | 20 +++++++++----------- htdocs/langs/en_US/accountancy.lang | 2 +- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/htdocs/accountancy/admin/journals_list.php b/htdocs/accountancy/admin/journals_list.php index cac81bfbcae..78cd92f90e0 100644 --- a/htdocs/accountancy/admin/journals_list.php +++ b/htdocs/accountancy/admin/journals_list.php @@ -162,7 +162,7 @@ if (GETPOST('actionadd', 'alpha') || GETPOST('actionmodify', 'alpha')) { if ($fieldnamekey == 'libelle' || ($fieldnamekey == 'label')) $fieldnamekey='Label'; if ($fieldnamekey == 'code') $fieldnamekey = 'Code'; - if ($fieldnamekey == 'nature') $fieldnamekey = 'Nature'; + if ($fieldnamekey == 'nature') $fieldnamekey = 'NatureOfJournal'; } // Other checks if (isset($_POST["code"])) @@ -437,7 +437,7 @@ if ($id) $valuetoshow=$langs->trans("Label"); } if ($fieldlist[$field]=='nature') { - $valuetoshow=$langs->trans("Nature"); + $valuetoshow=$langs->trans("NatureOfJournal"); } if ($valuetoshow != '') { @@ -516,7 +516,7 @@ if ($id) } // Title line with search boxes - print ''; + /*print ''; print ''; print ''; print ''; @@ -524,16 +524,14 @@ if ($id) print ''; print ''; print ''; print ''; - + */ + // Title of lines - print ''; + print ''; foreach ($fieldlist as $field => $value) { // Determine le nom du champ par rapport aux noms possibles @@ -558,7 +556,7 @@ if ($id) $valuetoshow=$langs->trans("Label"); } if ($fieldlist[$field]=='nature') { - $valuetoshow=$langs->trans("Nature"); + $valuetoshow=$langs->trans("NatureOfJournal"); } // Affiche nom du champ diff --git a/htdocs/langs/en_US/accountancy.lang b/htdocs/langs/en_US/accountancy.lang index 6dfe4fc8c4f..4b22f512826 100644 --- a/htdocs/langs/en_US/accountancy.lang +++ b/htdocs/langs/en_US/accountancy.lang @@ -265,7 +265,7 @@ AccountingJournals=Accounting journals AccountingJournal=Accounting journal NewAccountingJournal=New accounting journal ShowAccoutingJournal=Show accounting journal -Nature=Nature +NatureOfJournal=Nature of Journal AccountingJournalType1=Miscellaneous operations AccountingJournalType2=Sales AccountingJournalType3=Purchases From ea349de0818dddff6859aaca349d0878d9a57cf3 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 15 Jul 2019 23:25:42 +0200 Subject: [PATCH 689/828] FIX #11498 --- dev/dolibarr_changes.txt | 9 +++++++++ htdocs/includes/mike42/escpos-php/Escpos.php | 6 ++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/dev/dolibarr_changes.txt b/dev/dolibarr_changes.txt index 5bad55fd4d2..e87b082dd06 100644 --- a/dev/dolibarr_changes.txt +++ b/dev/dolibarr_changes.txt @@ -27,6 +27,15 @@ With +ESCPOS: +------- +Replace + private $connector; +With + protected $connector; + + + NUSOAP: ------- * In file nusoap.php, to avoid a warning, diff --git a/htdocs/includes/mike42/escpos-php/Escpos.php b/htdocs/includes/mike42/escpos-php/Escpos.php index 57e7eb2c8ac..b8568260738 100644 --- a/htdocs/includes/mike42/escpos-php/Escpos.php +++ b/htdocs/includes/mike42/escpos-php/Escpos.php @@ -144,9 +144,11 @@ class Escpos { /** * @var PrintConnector + * @CHANGE */ - private $connector; - + protected $connector; + // private $connector; + /** * @var AbstractCapabilityProfile */ From d694360c66bea525997c471f535948864574ece4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 15 Jul 2019 23:46:54 +0200 Subject: [PATCH 690/828] Fix warning --- htdocs/core/modules/modAgenda.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/modules/modAgenda.class.php b/htdocs/core/modules/modAgenda.class.php index 3b7c05c5ad1..f84ad6cbcfa 100644 --- a/htdocs/core/modules/modAgenda.class.php +++ b/htdocs/core/modules/modAgenda.class.php @@ -418,6 +418,6 @@ class modAgenda extends DolibarrModules $this->export_sql_end[$r] .=' WHERE ac.entity IN ('.getEntity('agenda').')'; if (empty($user->rights->societe->client->voir)) $this->export_sql_end[$r] .=' AND (sc.fk_user = '.(empty($user)?0:$user->id).' OR ac.fk_soc IS NULL)'; if (empty($user->rights->agenda->allactions->read)) $this->export_sql_end[$r] .=' AND acr.fk_element = '.(empty($user)?0:$user->id); - $this->export_sql_order[$r] .=' ORDER BY ac.datep'; + $this->export_sql_order[$r] =' ORDER BY ac.datep'; } } From fb5af65f4d1bdb6925e95bca0f1ddb02f01355a7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 15 Jul 2019 23:56:05 +0200 Subject: [PATCH 691/828] FIX #11466 --- htdocs/product/price.php | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/htdocs/product/price.php b/htdocs/product/price.php index 26970f1dd13..6bc7033ec23 100644 --- a/htdocs/product/price.php +++ b/htdocs/product/price.php @@ -1711,20 +1711,18 @@ if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES)) } print ''; - // Update all child soc - print ''; - print ''; - print ''; - print '
label; ?> + photos; ?> label; ?> + photos; ?>
'; From a3f5397988c7437e34d1435ff86feec19104e0e6 Mon Sep 17 00:00:00 2001 From: atm-lena Date: Wed, 10 Jul 2019 15:55:50 +0200 Subject: [PATCH 667/828] FIX help text 2 --- htdocs/core/tpl/commonfields_view.tpl.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/tpl/commonfields_view.tpl.php b/htdocs/core/tpl/commonfields_view.tpl.php index b6b2e572e49..86a58d346fe 100644 --- a/htdocs/core/tpl/commonfields_view.tpl.php +++ b/htdocs/core/tpl/commonfields_view.tpl.php @@ -52,7 +52,7 @@ foreach($object->fields as $key => $val) if ($val['notnull'] > 0) print ' fieldrequired'; if ($val['type'] == 'text' || $val['type'] == 'html') print ' tdtop'; print '">'; - if (! empty($val['help'])) print $form->textwithpicto($langs->trans($val['label']), $val['help']); + if (! empty($val['help'])) print $form->textwithpicto($langs->trans($val['label']), $langs->trans($val['help'])); else print $langs->trans($val['label']); print ''; @@ -91,7 +91,7 @@ foreach($object->fields as $key => $val) if ($val['notnull'] > 0) print ' fieldrequired'; if ($val['type'] == 'text' || $val['type'] == 'html') print ' tdtop'; print '">'; - if (! empty($val['help'])) print $form->textwithpicto($langs->trans($val['label']), $val['help']); + if (! empty($val['help'])) print $form->textwithpicto($langs->trans($val['label']), $langs->trans($val['help'])); else print $langs->trans($val['label']); print ''; From cce8f98afc7638becb92e2a4e9344c7de40c2b21 Mon Sep 17 00:00:00 2001 From: gauthier Date: Wed, 10 Jul 2019 16:33:03 +0200 Subject: [PATCH 668/828] FIX : accounting mode must be taken from global conf, because there's no way to choose a mode with interface --- htdocs/compta/stats/byratecountry.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/stats/byratecountry.php b/htdocs/compta/stats/byratecountry.php index 2c43db42d13..cd41649cc89 100644 --- a/htdocs/compta/stats/byratecountry.php +++ b/htdocs/compta/stats/byratecountry.php @@ -37,7 +37,7 @@ require_once DOL_DOCUMENT_ROOT.'/expensereport/class/paymentexpensereport.class. // Load translation files required by the page $langs->loadLangs(array("other","compta","banks","bills","companies","product","trips","admin","accountancy")); -$modecompta = GETPOST('modecompta','alpha'); +$modecompta = $conf->global->ACCOUNTING_MODE; // Date range $year=GETPOST("year",'int'); From abd0abf11531b196fe07e8bac545ea95071b95ef Mon Sep 17 00:00:00 2001 From: Nicolas ZABOURI Date: Wed, 10 Jul 2019 18:36:12 +0200 Subject: [PATCH 669/828] FIX element name in update_price --- htdocs/core/class/commonobject.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index f0fe7bf437c..43f78b571de 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -12,7 +12,7 @@ * Copyright (C) 2015 Alexandre Spangaro * Copyright (C) 2016 Bahfir abbes * Copyright (C) 2017 ATM Consulting - * Copyright (C) 2017 Nicolas ZABOURI + * Copyright (C) 2017-2019 Nicolas ZABOURI * Copyright (C) 2017 Rui Strecht * Copyright (C) 2018 Frederic France * @@ -2615,7 +2615,7 @@ abstract class CommonObject $MODULE = ""; if ($this->element == 'propal') $MODULE = "MODULE_DISALLOW_UPDATE_PRICE_PROPOSAL"; - elseif ($this->element == 'order') + elseif ($this->element == 'commande') $MODULE = "MODULE_DISALLOW_UPDATE_PRICE_ORDER"; elseif ($this->element == 'facture') $MODULE = "MODULE_DISALLOW_UPDATE_PRICE_INVOICE"; From 4f0316580672122e1154c148935d5e17264ad433 Mon Sep 17 00:00:00 2001 From: "atm-florian.m" Date: Thu, 11 Jul 2019 12:28:24 +0200 Subject: [PATCH 670/828] FIX: outdated phpdoc --- htdocs/expedition/class/expedition.class.php | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php index a8d9acc7b48..ea6e003d326 100644 --- a/htdocs/expedition/class/expedition.class.php +++ b/htdocs/expedition/class/expedition.class.php @@ -1073,12 +1073,14 @@ class Expedition extends CommonObject } } - /** - * Delete shipment. - * Warning, do not delete a shipment if a delivery is linked to (with table llx_element_element) - * - * @return int >0 if OK, 0 if deletion done but failed to delete files, <0 if KO - */ + /** + * Delete shipment. + * Warning, do not delete a shipment if a delivery is linked to (with table llx_element_element) + * + * @param bool $also_update_stock true if the stock should be increased back (false by default) + * @return int >0 if OK, 0 if deletion done but failed to delete files, <0 if KO + * @throws Exception + */ function delete($also_update_stock = false) { global $conf, $langs, $user; From 694be619b26adfa705b2fd92675a4599da1f3fe7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 11 Jul 2019 22:16:32 +0200 Subject: [PATCH 671/828] Fix doxygen --- htdocs/product/class/product.class.php | 30 +++++++++++++++----------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index fc966f7f19a..9c515d619c6 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -272,13 +272,26 @@ class Product extends CommonObject public $accountancy_code_buy; /** - * Main barcode - * barcode value + * Main Barcode value * * @var string */ public $barcode; + /** + * Main Barcode type ID + * + * @var int + */ + public $barcode_type; + + /** + * Main Barcode type code + * + * @var string + */ + public $barcode_type_code; + /** * Additional barcodes (Some products have different barcodes according to the country of origin of manufacture) * @@ -294,7 +307,7 @@ class Product extends CommonObject public $multilangs=array(); - //! Taille de l'image + //! Size of image public $imgWidth; public $imgHeight; @@ -348,16 +361,7 @@ class Product extends CommonObject public $fields = array( - 'rowid' => array( - 'type'=>'integer', - 'label'=>'TechnicalID', - 'enabled'=>1, - 'visible'=>-2, - 'notnull'=>1, - 'index'=>1, - 'position'=>1, - 'comment'=>'Id', - ), + 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'index'=>1, 'position'=>1, 'comment'=>'Id'), 'ref' =>array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>1, 'visible'=>1, 'notnull'=>1, 'showoncombobox'=>1, 'index'=>1, 'position'=>10, 'searchall'=>1, 'comment'=>'Reference of object'), 'entity' =>array('type'=>'integer', 'label'=>'Entity', 'enabled'=>1, 'visible'=>0, 'default'=>1, 'notnull'=>1, 'index'=>1, 'position'=>20), 'note_public' =>array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>1, 'visible'=>0, 'position'=>61), From b1e21ed5fc302ebef8fe6b63dc336074ec997233 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 11 Jul 2019 22:18:44 +0200 Subject: [PATCH 672/828] FIX Computed field were not calculated into lists. --- htdocs/core/class/extrafields.class.php | 2 ++ .../core/tpl/extrafields_list_print_fields.tpl.php | 12 +++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index eeb653aec8a..9e83a1d836b 100644 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -1627,6 +1627,8 @@ class ExtraFields if ($hidden) return ''; // This is a protection. If field is hidden, we should just not call this method. + //if ($computed) $value = // $value is already calculated into $value before calling this method + $showsize=0; if ($type == 'date') { diff --git a/htdocs/core/tpl/extrafields_list_print_fields.tpl.php b/htdocs/core/tpl/extrafields_list_print_fields.tpl.php index 1dad8a6739d..35aefb9f719 100644 --- a/htdocs/core/tpl/extrafields_list_print_fields.tpl.php +++ b/htdocs/core/tpl/extrafields_list_print_fields.tpl.php @@ -40,7 +40,17 @@ if (! empty($extrafieldsobjectkey)) // $extrafieldsobject is the $object->table_ { $value = $obj->$tmpkey; } - + // If field is a computed field, we make computation to get value + if ($extrafields->attributes[$extrafieldsobjectkey]['computed'][$key]) + { + //global $obj, $object; + //var_dump($extrafields->attributes[$extrafieldsobjectkey]['computed'][$key]); + //var_dump($obj); + //var_dump($extrafields->attributes[$extrafieldsobjectkey]['computed'][$key]); + $value = dol_eval($extrafields->attributes[$extrafieldsobjectkey]['computed'][$key], 1); + //var_dump($value); + } + print $extrafields->showOutputField($key, $value, '', $extrafieldsobjectkey); print ''; $searchpicto=$form->showFilterButtons(); print $searchpicto; @@ -257,6 +292,16 @@ if ($resql) print_liste_field_titre("BuyingPrice",$_SERVER["PHP_SELF"], "ppf.price",$param,"",'align="right"',$sortfield,$sortorder); print_liste_field_titre("QtyMin",$_SERVER["PHP_SELF"], "ppf.quantity",$param,"",'align="right"',$sortfield,$sortorder); print_liste_field_titre("UnitPrice",$_SERVER["PHP_SELF"], "ppf.unitprice",$param,"",'align="right"',$sortfield,$sortorder); + + // add header cells from hooks + $parameters = array(); + $reshook = $hookmanager->executeHooks( + 'printFieldListTitle', + $parameters, + $object, + $action + ); + if (!empty($reshook)) print $hookmanager->resPrint; print_liste_field_titre('',$_SERVER["PHP_SELF"]); print "
'.(isset($objp->unitprice) ? price($objp->unitprice) : '').'
' . $langs->trans("QtyToDispatchShort") . '' . $langs->trans("Warehouse") . '
'; $searchpicto=$form->showFilterButtons(); @@ -301,7 +304,8 @@ if ($resql) $object, $action ); - if (!empty($reshook)) print $hookmanager->resPrint; + if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + print $hookmanager->resPrint; print_liste_field_titre('',$_SERVER["PHP_SELF"]); print "
' . $obj->description . '' . nl2br(dol_trunc($obj->description, $trunclengh)) . '' . nl2br(dol_trunc($obj->description, $trunclengh)) . '
'; - if ($filterfound) - { - $searchpicto=$form->showFilterAndCheckAddButtons(0); - print $searchpicto; - } + $searchpicto=$form->showFilterButtons(); + print $searchpicto; print '
'; - print $langs->trans('ForceUpdateChildPriceSoc'); - print ''; - print ''; - print '
'; dol_fiche_end(); print '
'; + + // Update all child soc + print '
'; + print ' '; + print $langs->trans('ForceUpdateChildPriceSoc'); + print '
'; + print ''; print '     '; print ''; @@ -1804,10 +1802,8 @@ if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES)) // Update all child soc print '
'; - print $langs->trans('ForceUpdateChildPriceSoc'); print ''; - print ''; print '
'; + print ''; print 'id . '&socid=' . $line->fk_soc . '">'; print img_info($langs->trans('PriceByCustomerLog')); print ''; From f826e9631cafe5e54cc6918714b81445713d4ea0 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 16 Jul 2019 00:12:22 +0200 Subject: [PATCH 692/828] FIX #11463 --- htdocs/societe/agenda.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/societe/agenda.php b/htdocs/societe/agenda.php index 13838812d9d..53a1ee5d7ed 100644 --- a/htdocs/societe/agenda.php +++ b/htdocs/societe/agenda.php @@ -32,7 +32,7 @@ require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; -$langs->load(array("companies", "bills", "propal", "orders")); +$langs->loadLangs(array("companies", "bills", "propal", "orders")); if (GETPOST('actioncode', 'array')) { From 70ff806fdffdd50435afb1e043ea59f5011bbe90 Mon Sep 17 00:00:00 2001 From: John Botella Date: Tue, 16 Jul 2019 10:41:01 +0200 Subject: [PATCH 693/828] fix fourn code preload --- htdocs/societe/card.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index a8991614301..2a86465d4f2 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -949,12 +949,13 @@ else if(empty($duplicate_code_error)) { $object->code_client = GETPOST('customer_code', 'alpha'); $object->fournisseur = GETPOST('fournisseur')?GETPOST('fournisseur'):$object->fournisseur; + $object->code_fournisseur = GETPOST('supplier_code', 'alpha'); } else { setEventMessages($langs->trans('NewCustomerSupplierCodeProposed'),'', 'warnings'); } - $object->code_fournisseur = GETPOST('supplier_code', 'alpha'); + $object->address = GETPOST('address', 'alpha'); $object->zip = GETPOST('zipcode', 'alpha'); $object->town = GETPOST('town', 'alpha'); From c9fe91138d42963e6343923b0b812bfcb893051b Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Tue, 16 Jul 2019 12:39:43 +0200 Subject: [PATCH 694/828] FIX better compatibility with Multicompany --- htdocs/opensurvey/index.php | 16 +++------------- htdocs/ticket/index.php | 4 ++-- htdocs/ticket/list.php | 3 +-- 3 files changed, 6 insertions(+), 17 deletions(-) diff --git a/htdocs/opensurvey/index.php b/htdocs/opensurvey/index.php index 4c60a807445..1ddfc47d99a 100644 --- a/htdocs/opensurvey/index.php +++ b/htdocs/opensurvey/index.php @@ -37,18 +37,6 @@ $langs->load("opensurvey"); llxHeader(); -$nbsondages=0; -$sql='SELECT COUNT(*) as nb FROM '.MAIN_DB_PREFIX.'opensurvey_sondage'; -$resql=$db->query($sql); -if ($resql) -{ - $obj=$db->fetch_object($resql); - $nbsondages=$obj->nb; -} -else dol_print_error($db,''); - - - print load_fiche_titre($langs->trans("OpenSurveyArea")); @@ -56,7 +44,9 @@ print '
'; $nbsondages=0; -$sql='SELECT COUNT(*) as nb FROM '.MAIN_DB_PREFIX.'opensurvey_sondage'; +$sql = 'SELECT COUNT(*) as nb'; +$sql.= ' FROM '.MAIN_DB_PREFIX.'opensurvey_sondage'; +$sql.= ' WHERE entity IN ('.getEntity('survey').')'; $resql=$db->query($sql); if ($resql) { diff --git a/htdocs/ticket/index.php b/htdocs/ticket/index.php index 086ea63bc0e..59a2bae5f46 100644 --- a/htdocs/ticket/index.php +++ b/htdocs/ticket/index.php @@ -127,7 +127,7 @@ if (!$user->rights->societe->client->voir && !$socid) { $sql .= ", " . MAIN_DB_PREFIX . "societe_commerciaux as sc"; } -$sql .= ' WHERE t.entity IN (' . getEntity('ticket', 1) . ')'; +$sql .= ' WHERE t.entity IN (' . getEntity('ticket') . ')'; $sql .= " AND t.fk_statut IS NOT NULL"; $sql .= " AND date_format(datec,'%Y') = '" . $endyear . "'"; if (!$user->rights->societe->client->voir && !$socid) { @@ -271,7 +271,7 @@ if (!$user->rights->societe->client->voir && !$socid) { $sql .= ", " . MAIN_DB_PREFIX . "societe_commerciaux as sc"; } -$sql .= ' WHERE t.entity IN (' . getEntity('ticket', 1) . ')'; +$sql .= ' WHERE t.entity IN (' . getEntity('ticket') . ')'; $sql .= " AND t.fk_statut=0"; if (!$user->rights->societe->client->voir && !$socid) { $sql .= " AND t.fk_soc = sc.fk_soc AND sc.fk_user = " . $user->id; diff --git a/htdocs/ticket/list.php b/htdocs/ticket/list.php index 64ec859cc0c..965677ded0e 100644 --- a/htdocs/ticket/list.php +++ b/htdocs/ticket/list.php @@ -209,8 +209,7 @@ $sql.=$hookmanager->resPrint; $sql=preg_replace('/, $/','', $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'])) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (t.rowid = ef.fk_object)"; -if ($object->ismultientitymanaged == 1) $sql.= " WHERE t.entity IN (".getEntity($object->element).")"; -else $sql.=" WHERE 1 = 1"; +$sql.= " WHERE t.entity IN (".getEntity($object->element).")"; foreach($search as $key => $val) { if ($key == 'fk_statut' && $search[$key] == -1) continue; From 464bda996c5a846e3fea7d0df8d729285c6e2630 Mon Sep 17 00:00:00 2001 From: Marc de Lima Lucio Date: Tue, 16 Jul 2019 13:59:00 +0200 Subject: [PATCH 695/828] FIX: propal createFrom hook: undefined parameter attached --- htdocs/comm/propal/class/propal.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index 647be1d0233..082281af1da 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -1316,9 +1316,9 @@ class Propal extends CommonObject // Hook of thirdparty module if (is_object($hookmanager)) { - $parameters=array('objFrom'=>$this,'clonedObj'=>$clonedObj); + $parameters=array('objFrom'=>$this,'clonedObj'=>$object); $action=''; - $reshook=$hookmanager->executeHooks('createFrom',$parameters,$clonedObj,$action); // Note that $action and $object may have been modified by some hooks + $reshook=$hookmanager->executeHooks('createFrom',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) $error++; } } From c72a59ad36641ab13dbe382c8d52fb36d68b0461 Mon Sep 17 00:00:00 2001 From: gauthier Date: Tue, 16 Jul 2019 14:55:19 +0200 Subject: [PATCH 696/828] FIX : we need to be able to add freeline with qty between 0 & 1 in supplierorder line --- htdocs/fourn/class/fournisseur.commande.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index 9198cf3ac22..f32d9d24c01 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -1485,7 +1485,7 @@ class CommandeFournisseur extends CommonOrder $desc=trim($desc); // Check parameters - if ($qty < 1 && ! $fk_product) + if ($qty < 0 && ! $fk_product) { $this->error=$langs->trans("ErrorFieldRequired",$langs->trans("Product")); return -1; From b9771db13116b9a685b8d7536c1ed25a0791909c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 16 Jul 2019 17:16:49 +0300 Subject: [PATCH 697/828] Fix phpcs --- htdocs/compta/tva/quadri_detail.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/tva/quadri_detail.php b/htdocs/compta/tva/quadri_detail.php index 0f359dd9721..c48bc385c53 100644 --- a/htdocs/compta/tva/quadri_detail.php +++ b/htdocs/compta/tva/quadri_detail.php @@ -118,7 +118,7 @@ foreach ($listofparams as $param) } $title = $langs->trans("VATReport") . " " . dol_print_date($date_start) . " -> " . dol_print_date($date_end); -llxHeader('',$title,'','',0,0,'','',$morequerystring); +llxHeader('', $title, '', '', 0, 0, '', '', $morequerystring); //print load_fiche_titre($langs->trans("VAT"),""); From aab23a15317a62e44f551eb71d43058e8f96b24e Mon Sep 17 00:00:00 2001 From: Christophe Battarel Date: Tue, 16 Jul 2019 17:50:43 +0200 Subject: [PATCH 698/828] FIX : do not return formatted prices in json string --- htdocs/core/class/html.form.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index a68f09e5ee1..64c5063e8a2 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -2594,7 +2594,7 @@ class Form } $opt.= "\n"; - $optJson = array('key'=>$outkey, 'value'=>$outref, 'label'=>$outval, 'label2'=>$outlabel, 'desc'=>$outdesc, 'type'=>$outtype, 'price_ht'=>$outprice_ht, 'price_ttc'=>$outprice_ttc, 'pricebasetype'=>$outpricebasetype, 'tva_tx'=>$outtva_tx, 'qty'=>$outqty, 'discount'=>$outdiscount, 'duration_value'=>$outdurationvalue, 'duration_unit'=>$outdurationunit); + $optJson = array('key'=>$outkey, 'value'=>$outref, 'label'=>$outval, 'label2'=>$outlabel, 'desc'=>$outdesc, 'type'=>$outtype, 'price_ht'=>price2num($outprice_ht), 'price_ttc'=>price2num($outprice_ttc), 'pricebasetype'=>$outpricebasetype, 'tva_tx'=>$outtva_tx, 'qty'=>$outqty, 'discount'=>$outdiscount, 'duration_value'=>$outdurationvalue, 'duration_unit'=>$outdurationunit); } // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps From 61a574701ba43a9a64eef9ed7ceb6e13ee3879b5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 17 Jul 2019 01:11:10 +0200 Subject: [PATCH 699/828] New Add field prefix_session in llx_events --- htdocs/install/mysql/migration/10.0.0-11.0.0.sql | 2 ++ htdocs/install/mysql/tables/llx_events.sql | 1 + 2 files changed, 3 insertions(+) diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index b10ab3b9a85..4ec9fbdaffb 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -48,3 +48,5 @@ ALTER TABLE llx_facture_fourn DROP COLUMN total; ALTER TABLE llx_user ADD COLUMN iplastlogin varchar(250); ALTER TABLE llx_user ADD COLUMN ippreviouslogin varchar(250); + +ALTER TABLE llx_events ADD COLUMN prefix_session varchar(250) NULL; diff --git a/htdocs/install/mysql/tables/llx_events.sql b/htdocs/install/mysql/tables/llx_events.sql index f906cf0fcbd..c9f8f034a34 100644 --- a/htdocs/install/mysql/tables/llx_events.sql +++ b/htdocs/install/mysql/tables/llx_events.sql @@ -27,6 +27,7 @@ create table llx_events tms timestamp, -- date creation/modification type varchar(32) NOT NULL, -- action type entity integer DEFAULT 1 NOT NULL, -- multi company id + prefix_session varchar(255) NULL, -- prefix of session, obtained with dol_getprefix dateevent datetime, -- date event fk_user integer, -- id user description varchar(250) NOT NULL, -- full description of action From fed598236c185406f59a504ed57181464c26b1b9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 17 Jul 2019 01:12:48 +0200 Subject: [PATCH 700/828] Add field --- htdocs/install/mysql/migration/10.0.0-11.0.0.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index 4ec9fbdaffb..f8cc3062bde 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -49,4 +49,4 @@ ALTER TABLE llx_facture_fourn DROP COLUMN total; ALTER TABLE llx_user ADD COLUMN iplastlogin varchar(250); ALTER TABLE llx_user ADD COLUMN ippreviouslogin varchar(250); -ALTER TABLE llx_events ADD COLUMN prefix_session varchar(250) NULL; +ALTER TABLE llx_events ADD COLUMN prefix_session varchar(255) NULL; From 79d8351dda16bf83a7aece6683238cc6d056ccb5 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 17 Jul 2019 14:09:25 +0200 Subject: [PATCH 701/828] NEW Extrafields on salaries --- htdocs/admin/salaries_extrafields.php | 117 ++++++++++++++++++ htdocs/core/lib/salaries.lib.php | 78 ++++++++---- htdocs/core/modules/modSalaries.class.php | 5 +- .../llx_payment_salary_extrafields.key.sql | 23 ++++ .../tables/llx_payment_salary_extrafields.sql | 27 ++++ 5 files changed, 225 insertions(+), 25 deletions(-) create mode 100644 htdocs/admin/salaries_extrafields.php create mode 100644 htdocs/install/mysql/tables/llx_payment_salary_extrafields.key.sql create mode 100644 htdocs/install/mysql/tables/llx_payment_salary_extrafields.sql diff --git a/htdocs/admin/salaries_extrafields.php b/htdocs/admin/salaries_extrafields.php new file mode 100644 index 00000000000..180e695407f --- /dev/null +++ b/htdocs/admin/salaries_extrafields.php @@ -0,0 +1,117 @@ + + * Copyright (C) 2004-2012 Laurent Destailleur + * Copyright (C) 2019 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 + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file htdocs/admin/salaries_extrafields.php + * \ingroup member + * \brief Page to setup extra fields of salaries + */ + +require '../../main.inc.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/salaries.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; + +// Load translation files required by the page +$langs->loadLangs(array("admin","salaries")); + +$extrafields = new ExtraFields($db); +$form = new Form($db); + +// List of supported format +$tmptype2label=ExtraFields::$type2label; +$type2label=array(''); +foreach ($tmptype2label as $key => $val) $type2label[$key]=$langs->transnoentitiesnoconv($val); + +$action=GETPOST('action', 'alpha'); +$attrname=GETPOST('attrname', 'alpha'); +$elementtype='adherent'; //Must be the $table_element of the class that manage extrafield + +if (!$user->admin) accessforbidden(); + + +/* + * Actions + */ + +require DOL_DOCUMENT_ROOT.'/core/actions_extrafields.inc.php'; + + + +/* + * View + */ + +$textobject = $langs->transnoentitiesnoconv("Members"); + +$help_url='EN:Module_Foundations|FR:Module_Adhérents|ES:Módulo_Miembros'; +llxHeader('', $langs->trans("MembersSetup"), $help_url); + + +$linkback=''.$langs->trans("BackToModuleList").''; +print load_fiche_titre($langs->trans("MembersSetup"), $linkback, 'title_setup'); + + +$head = member_admin_prepare_head(); + +dol_fiche_head($head, 'attributes', $langs->trans("Members"), -1, 'user'); + +require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_view.tpl.php'; + +dol_fiche_end(); + + +// Buttons +if ($action != 'create' && $action != 'edit') +{ + print '
'; + print ''; + print "
"; +} + + +/* ************************************************************************** */ +/* */ +/* Creation of an optional field */ +/* */ +/* ************************************************************************** */ + +if ($action == 'create') +{ + print '

'; + print load_fiche_titre($langs->trans('NewAttribute')); + + require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php'; +} + +/* ************************************************************************** */ +/* */ +/* Edition of an optional field */ +/* */ +/* ************************************************************************** */ +if ($action == 'edit' && ! empty($attrname)) +{ + print '

'; + print load_fiche_titre($langs->trans("FieldEdition", $attrname)); + + require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php'; +} + +// End of page +llxFooter(); +$db->close(); diff --git a/htdocs/core/lib/salaries.lib.php b/htdocs/core/lib/salaries.lib.php index 126063dce4d..418bc8bfaa4 100644 --- a/htdocs/core/lib/salaries.lib.php +++ b/htdocs/core/lib/salaries.lib.php @@ -1,6 +1,7 @@ + * Copyright (C) 2015 Charlie BENKE + * Copyright (C) 2019 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 @@ -27,15 +28,15 @@ function salaries_prepare_head($object) { - global $db, $langs, $conf; + global $db, $langs, $conf; - $h = 0; - $head = array(); + $h = 0; + $head = array(); - $head[$h][0] = DOL_URL_ROOT.'/compta/salaries/card.php?id='.$object->id; - $head[$h][1] = $langs->trans("Card"); - $head[$h][2] = 'card'; - $h++; + $head[$h][0] = DOL_URL_ROOT.'/compta/salaries/card.php?id='.$object->id; + $head[$h][1] = $langs->trans("Card"); + $head[$h][2] = 'card'; + $h++; // Show more tabs from modules // Entries must be declared in modules descriptor with line @@ -43,23 +44,56 @@ function salaries_prepare_head($object) // $this->tabs = array('entity:-tabname); to remove a tab complete_head_from_modules($conf, $langs, $object, $head, $h, 'salaries'); - require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; + require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/link.class.php'; - $upload_dir = $conf->salaries->dir_output . "/" . dol_sanitizeFileName($object->ref); - $nbFiles = count(dol_dir_list($upload_dir, 'files', 0, '', '(\.meta|_preview.*\.png)$')); + $upload_dir = $conf->salaries->dir_output . "/" . dol_sanitizeFileName($object->ref); + $nbFiles = count(dol_dir_list($upload_dir, 'files', 0, '', '(\.meta|_preview.*\.png)$')); $nbLinks=Link::count($db, $object->element, $object->id); - $head[$h][0] = DOL_URL_ROOT.'/compta/salaries/document.php?id='.$object->id; - $head[$h][1] = $langs->trans('Documents'); - if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; - $head[$h][2] = 'documents'; - $h++; + $head[$h][0] = DOL_URL_ROOT.'/compta/salaries/document.php?id='.$object->id; + $head[$h][1] = $langs->trans('Documents'); + if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; + $head[$h][2] = 'documents'; + $h++; - $head[$h][0] = DOL_URL_ROOT.'/compta/salaries/info.php?id='.$object->id; - $head[$h][1] = $langs->trans("Info"); - $head[$h][2] = 'info'; - $h++; + $head[$h][0] = DOL_URL_ROOT.'/compta/salaries/info.php?id='.$object->id; + $head[$h][1] = $langs->trans("Info"); + $head[$h][2] = 'info'; + $h++; - complete_head_from_modules($conf, $langs, $object, $head, $h, 'salaries', 'remove'); + complete_head_from_modules($conf, $langs, $object, $head, $h, 'salaries', 'remove'); - return $head; + return $head; +} + +/** + * Return array head with list of tabs to view object informations + * + * @return array head + */ +function salaries_admin_prepare_head() +{ + global $langs, $conf, $user; + + $h = 0; + $head = array(); + + $head[$h][0] = DOL_URL_ROOT.'/admin/salaries.php'; + $head[$h][1] = $langs->trans("Miscellaneous"); + $head[$h][2] = 'general'; + $h++; + + // Show more tabs from modules + // Entries must be declared in modules descriptor with line + // $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab + // $this->tabs = array('entity:-tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to remove a tab + complete_head_from_modules($conf, $langs, '', $head, $h, 'salaries_admin'); + + $head[$h][0] = DOL_URL_ROOT.'/admin/salaries_extrafields.php'; + $head[$h][1] = $langs->trans("ExtraFieldsSalaries"); + $head[$h][2] = 'attributes'; + $h++; + + complete_head_from_modules($conf, $langs, '', $head, $h, 'salaries_admin', 'remove'); + + return $head; } diff --git a/htdocs/core/modules/modSalaries.class.php b/htdocs/core/modules/modSalaries.class.php index ed3aec4a48b..d68c6a36308 100644 --- a/htdocs/core/modules/modSalaries.class.php +++ b/htdocs/core/modules/modSalaries.class.php @@ -5,7 +5,7 @@ * Copyright (C) 2004 Benoit Mortier * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2014 Juanjo Menent - * Copyright (C) 2014 Alexandre Spangaro + * Copyright (C) 2014-2019 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 @@ -68,8 +68,7 @@ class modSalaries extends DolibarrModules $this->dirs = array("/salaries/temp"); // Config pages - //$this->config_page_url = array('salaries.php'); - $this->config_page_url = array(); + $this->config_page_url = array('salaries.php'); // Dependencies $this->hidden = false; // A condition to hide module diff --git a/htdocs/install/mysql/tables/llx_payment_salary_extrafields.key.sql b/htdocs/install/mysql/tables/llx_payment_salary_extrafields.key.sql new file mode 100644 index 00000000000..6989d271ccc --- /dev/null +++ b/htdocs/install/mysql/tables/llx_payment_salary_extrafields.key.sql @@ -0,0 +1,23 @@ +-- =================================================================== +-- Copyright (C) 2002-2003 Rodolphe Quiedeville +-- Copyright (C) 2002-2003 Jean-Louis Bergamo +-- Copyright (C) 2009 Regis Houssin +-- Copyright (C) 2011 Laurent Destailleur +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- +-- =================================================================== + + +ALTER TABLE llx_adherent_extrafields ADD INDEX idx_adherent_extrafields (fk_object); diff --git a/htdocs/install/mysql/tables/llx_payment_salary_extrafields.sql b/htdocs/install/mysql/tables/llx_payment_salary_extrafields.sql new file mode 100644 index 00000000000..3ad91052c24 --- /dev/null +++ b/htdocs/install/mysql/tables/llx_payment_salary_extrafields.sql @@ -0,0 +1,27 @@ +-- =================================================================== +-- Copyright (C) 2002-2003 Rodolphe Quiedeville +-- Copyright (C) 2002-2003 Jean-Louis Bergamo +-- Copyright (C) 2009 Regis Houssin +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- +-- =================================================================== + +create table llx_adherent_extrafields +( + rowid integer AUTO_INCREMENT PRIMARY KEY, + tms timestamp, + fk_object integer NOT NULL, -- member id + import_key varchar(14) -- import key +)ENGINE=innodb; From b5d348356dbc590b50ec97b25fceae111e7ac91a Mon Sep 17 00:00:00 2001 From: John Botella Date: Wed, 17 Jul 2019 16:49:41 +0200 Subject: [PATCH 702/828] Fix socpeople assigned list in action com list --- htdocs/comm/action/list.php | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/htdocs/comm/action/list.php b/htdocs/comm/action/list.php index 2d8be09ee7a..aae2d48e9cf 100644 --- a/htdocs/comm/action/list.php +++ b/htdocs/comm/action/list.php @@ -524,6 +524,7 @@ if ($resql) require_once DOL_DOCUMENT_ROOT.'/comm/action/class/cactioncomm.class.php'; $caction=new CActionComm($db); $arraylist=$caction->liste_array(1, 'code', '', (empty($conf->global->AGENDA_USE_EVENT_TYPE)?1:0), '', 1); + $contactListCache = array(); while ($i < min($num,$limit)) { @@ -634,7 +635,34 @@ if ($resql) // Contact if (! empty($arrayfields['a.fk_contact']['checked'])) { print '
'; - if ($obj->fk_contact > 0) + + + $actionstatic->fetchResources(); + if(!empty($actionstatic->socpeopleassigned)) + { + $contactList = array(); + foreach ($actionstatic->socpeopleassigned as $socpeopleId => $socpeopleassigned) + { + if(!isset($contactListCache[$socpeopleassigned['id']])) + { + // if no cache found we fetch it + $contact = new Contact($db); + if($contact->fetch($socpeopleassigned['id'])>0) + { + $contactListCache[$socpeopleassigned['id']] = $contact->getNomUrl(1,'',28); + $contactList[] = $contact->getNomUrl(1,'',28); + } + } + else{ + // use cache + $contactList[] = $contactListCache[$socpeopleassigned['id']]; + } + } + if(!empty($contactList)){ + print implode(', ', $contactList); + } + } + elseif ($obj->fk_contact > 0) //keep for retrocompatibility with faraway event { $contactstatic->id=$obj->fk_contact; $contactstatic->email=$obj->email; From 27a0c046dfc2e69ff700468e685f0f99ff55a52c Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Thu, 18 Jul 2019 09:58:26 +0200 Subject: [PATCH 703/828] Update stripe.class.php --- htdocs/stripe/class/stripe.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/stripe/class/stripe.class.php b/htdocs/stripe/class/stripe.class.php index 6b910236e96..b5db41a424e 100644 --- a/htdocs/stripe/class/stripe.class.php +++ b/htdocs/stripe/class/stripe.class.php @@ -392,14 +392,14 @@ class Stripe extends CommonObject "payment_method_types" => array("card"), "description" => $description, "statement_descriptor" => dol_trunc($tag, 10, 'right', 'UTF-8', 1), // 22 chars that appears on bank receipt (company + description) - //"save_payment_method" => true, + "setup_future_usage" => "off_session", "metadata" => $metadata ); if (! is_null($customer)) $dataforintent["customer"]=$customer; // payment_method = // payment_method_types = array('card') //var_dump($dataforintent); - + if ($conf->entity!=$conf->global->STRIPECONNECT_PRINCIPAL && $stripefee > 0) { $dataforintent["application_fee"] = $stripefee; From 8a5aad34337723af0fa479c0f67487efbe0f97e3 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Thu, 18 Jul 2019 10:00:57 +0200 Subject: [PATCH 704/828] Update stripe.class.php --- htdocs/stripe/class/stripe.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/stripe/class/stripe.class.php b/htdocs/stripe/class/stripe.class.php index b5db41a424e..e4b021167e0 100644 --- a/htdocs/stripe/class/stripe.class.php +++ b/htdocs/stripe/class/stripe.class.php @@ -399,7 +399,7 @@ class Stripe extends CommonObject // payment_method = // payment_method_types = array('card') //var_dump($dataforintent); - + if ($conf->entity!=$conf->global->STRIPECONNECT_PRINCIPAL && $stripefee > 0) { $dataforintent["application_fee"] = $stripefee; From 4235f0b3523694c1ef7d3587e3539dae3dd75fd1 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Thu, 18 Jul 2019 10:05:54 +0200 Subject: [PATCH 705/828] Update stripe.class.php --- htdocs/stripe/class/stripe.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/stripe/class/stripe.class.php b/htdocs/stripe/class/stripe.class.php index e4b021167e0..993fe6a07dd 100644 --- a/htdocs/stripe/class/stripe.class.php +++ b/htdocs/stripe/class/stripe.class.php @@ -392,7 +392,7 @@ class Stripe extends CommonObject "payment_method_types" => array("card"), "description" => $description, "statement_descriptor" => dol_trunc($tag, 10, 'right', 'UTF-8', 1), // 22 chars that appears on bank receipt (company + description) - "setup_future_usage" => "off_session", + "setup_future_usage" => "on_session", "metadata" => $metadata ); if (! is_null($customer)) $dataforintent["customer"]=$customer; From 32bc8a5fafb51d4070014f29f84456b4690b1762 Mon Sep 17 00:00:00 2001 From: Christophe Battarel Date: Thu, 18 Jul 2019 11:05:51 +0200 Subject: [PATCH 706/828] FIX fournrprice log for insert --- htdocs/fourn/class/fournisseur.product.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/fourn/class/fournisseur.product.class.php b/htdocs/fourn/class/fournisseur.product.class.php index fc74890f150..49a7b1935cb 100644 --- a/htdocs/fourn/class/fournisseur.product.class.php +++ b/htdocs/fourn/class/fournisseur.product.class.php @@ -439,7 +439,7 @@ class ProductFournisseur extends Product $resql = $this->db->query($sql); if ($resql) { - $idinserted = $this->db->last_insert_id(MAIN_DB_PREFIX . "product_fournisseur_price"); + $this->product_fourn_price_id = $this->db->last_insert_id(MAIN_DB_PREFIX . "product_fournisseur_price"); } else { $error++; @@ -462,7 +462,7 @@ class ProductFournisseur extends Product if (empty($error)) { $this->db->commit(); - return $idinserted; + return $this->product_fourn_price_id; } else { $this->db->rollback(); return -1; From a23bae6c9664fdd845b9594f57504cb011c9a387 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 18 Jul 2019 11:10:09 +0200 Subject: [PATCH 707/828] Work to mke the page perf.php public by default. --- htdocs/admin/system/perf.php | 51 ++++++++++++++++++++++++++++++++--- htdocs/langs/en_US/admin.lang | 5 ++-- 2 files changed, 51 insertions(+), 5 deletions(-) diff --git a/htdocs/admin/system/perf.php b/htdocs/admin/system/perf.php index 67f75c911aa..66148fb01ab 100644 --- a/htdocs/admin/system/perf.php +++ b/htdocs/admin/system/perf.php @@ -144,6 +144,21 @@ if (! $foundcache && $test) if (! $foundcache) print $langs->trans("NoOPCodeCacheFound"); print '
'; +// Use of preload bootstrap +if (ini_get('opcache.preload')) +{ + print '
'; + print ''.$langs->trans("PreloadOPCode").': '; + print ini_get('opcache.preload'); +} +else +{ + print '
'; + print ''.$langs->trans("PreloadOPCode").': '; + print $langs->trans("No"); +} +print '
'; + // HTTPCacheStaticResources print ' - Date: Thu, 18 Jul 2019 18:53:51 +0200 Subject: [PATCH 726/828] Fix phpcs --- htdocs/comm/action/list.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/comm/action/list.php b/htdocs/comm/action/list.php index 6e46aee2435..1fbae964dff 100644 --- a/htdocs/comm/action/list.php +++ b/htdocs/comm/action/list.php @@ -660,8 +660,8 @@ if ($resql) $contact = new Contact($db); if($contact->fetch($socpeopleassigned['id'])>0) { - $contactListCache[$socpeopleassigned['id']] = $contact->getNomUrl(1,'',28); - $contactList[] = $contact->getNomUrl(1,'',28); + $contactListCache[$socpeopleassigned['id']] = $contact->getNomUrl(1, '', 28); + $contactList[] = $contact->getNomUrl(1, '', 28); } } else{ From 6c3a30e872501863d63936d194f48045c24d10eb Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 03:05:55 +0200 Subject: [PATCH 727/828] Fix log --- htdocs/core/lib/website.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 198f91a4446..29a2ab27d8f 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -185,7 +185,7 @@ function dolWebsiteOutput($content) global $db, $langs, $conf, $user; global $dolibarr_main_url_root, $dolibarr_main_data_root; - dol_syslog("dolWebsiteOutput start (USEDOLIBARRSERVER=".(defined('USEDOLIBARRSERVER')?'1':'')." (USEDOLIBARREDITOR=".(defined('USEDOLIBARREDITOR')?'1':'').')'); + dol_syslog("dolWebsiteOutput start (USEDOLIBARRSERVER=".(defined('USEDOLIBARRSERVER')?'1':'')." USEDOLIBARREDITOR=".(defined('USEDOLIBARREDITOR')?'1':'').')'); // Define $urlwithroot $urlwithouturlroot=preg_replace('/'.preg_quote(DOL_URL_ROOT, '/').'$/i', '', trim($dolibarr_main_url_root)); From 8857d0acf5404dfc5f966cbd771386ba2d07bc36 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 03:18:53 +0200 Subject: [PATCH 728/828] Keep save_payment_method to true. Keep it to true because i see no reason to not save the credit card on Stripe side. --- htdocs/stripe/class/stripe.class.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/stripe/class/stripe.class.php b/htdocs/stripe/class/stripe.class.php index 993fe6a07dd..319ff08d2cd 100644 --- a/htdocs/stripe/class/stripe.class.php +++ b/htdocs/stripe/class/stripe.class.php @@ -392,7 +392,8 @@ class Stripe extends CommonObject "payment_method_types" => array("card"), "description" => $description, "statement_descriptor" => dol_trunc($tag, 10, 'right', 'UTF-8', 1), // 22 chars that appears on bank receipt (company + description) - "setup_future_usage" => "on_session", + "save_payment_method" => true, + "setup_future_usage" => "on_session", "metadata" => $metadata ); if (! is_null($customer)) $dataforintent["customer"]=$customer; From 03aa8c4b83baa9361c8e0cee89c693787cc15055 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 03:22:52 +0200 Subject: [PATCH 729/828] Better log --- htdocs/public/payment/newpayment.php | 7 ++++++- htdocs/stripe/class/stripe.class.php | 8 +++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php index b36e115deea..deda54bf996 100644 --- a/htdocs/public/payment/newpayment.php +++ b/htdocs/public/payment/newpayment.php @@ -21,6 +21,11 @@ * For Paypal test: https://developer.paypal.com/ * For Paybox test: ??? * For Stripe test: Use credit card 4242424242424242 .More example on https://stripe.com/docs/testing + * + * Variants: + * - When option STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION is on, we use the new checkout API + * - When option STRIPE_USE_NEW_CHECKOUT is on, we use the new checkout API + * - If no option set, we use old APIS (charge) */ /** @@ -2099,7 +2104,7 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment else { ?> - // Code for payment with option STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION off and STRIPE_USE_NEW_CHECKOUT off + // Old code for payment with option STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION off and STRIPE_USE_NEW_CHECKOUT off // Create a Stripe client. var stripe = Stripe(''); diff --git a/htdocs/stripe/class/stripe.class.php b/htdocs/stripe/class/stripe.class.php index 6b910236e96..d9e6a077b96 100644 --- a/htdocs/stripe/class/stripe.class.php +++ b/htdocs/stripe/class/stripe.class.php @@ -286,9 +286,11 @@ class Stripe extends CommonObject /** * Get the Stripe payment intent. Create it with confirm=false * Warning. If a payment was tried and failed, a payment intent was created. - * But if we change someting on object to pay (amount or other), reusing same payment intent is not allowed. + * But if we change something on object to pay (amount or other), reusing same payment intent is not allowed. * Recommanded solution is to recreate a new payment intent each time we need one (old one will be automatically closed after a delay), * that's why i comment the part of code to retreive a payment intent with object id (never mind if we cumulate payment intent with old ones that will not be used) + * Note: This is used when option STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION is on when making a payment from the public/payment/newpayment.php page + * but not when using the STRIPE_USE_NEW_CHECKOUT. * * @param double $amount Amount * @param string $currency_code Currency code @@ -307,7 +309,7 @@ class Stripe extends CommonObject { global $conf; - dol_syslog("getPaymentIntent"); + dol_syslog("getPaymentIntent", LOG_INFO, 1); $error = 0; @@ -479,7 +481,7 @@ class Stripe extends CommonObject } } - dol_syslog("getPaymentIntent return error=".$error); + dol_syslog("getPaymentIntent return error=".$error, LOG_INFO, -1); if (! $error) { From efe27d335b31b8a3241448ffb8bf6f55171cc168 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 03:53:34 +0200 Subject: [PATCH 730/828] Fix param --- htdocs/stripe/class/stripe.class.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/stripe/class/stripe.class.php b/htdocs/stripe/class/stripe.class.php index cb71c686ebf..92c6335cd29 100644 --- a/htdocs/stripe/class/stripe.class.php +++ b/htdocs/stripe/class/stripe.class.php @@ -394,7 +394,6 @@ class Stripe extends CommonObject "payment_method_types" => array("card"), "description" => $description, "statement_descriptor" => dol_trunc($tag, 10, 'right', 'UTF-8', 1), // 22 chars that appears on bank receipt (company + description) - "save_payment_method" => true, "setup_future_usage" => "on_session", "metadata" => $metadata ); From 2afefada40ca52d431792429cdbb6d983c6644b5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 04:02:42 +0200 Subject: [PATCH 731/828] Fix: Avoid deletion of system entries in dictionary --- htdocs/admin/dict.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/htdocs/admin/dict.php b/htdocs/admin/dict.php index 11cd105137c..87e072b8d7e 100644 --- a/htdocs/admin/dict.php +++ b/htdocs/admin/dict.php @@ -1622,7 +1622,11 @@ if ($id) elseif ($obj->code == 'RECEP') { $iserasable = 0; $canbedisabled = 0; } elseif ($obj->code == 'EF0') { $iserasable = 0; $canbedisabled = 0; } } - + if ($id == 25 && in_array($obj->code, array('banner', 'blogpost', 'other', 'page'))) + { + $iserasable = 0; $canbedisabled = 0; + if (in_array($obj->code, array('banner'))) $canbedisabled = 1; + } if (isset($obj->type) && in_array($obj->type, array('system', 'systemauto'))) { $iserasable=0; } if (in_array($obj->code, array('AC_OTH','AC_OTH_AUTO')) || in_array($obj->type, array('systemauto'))) { $canbedisabled=0; $canbedisabled = 0; } $canbemodified=$iserasable; From fe89e158fe384bf103db7d653c83dca2256be7e4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 04:02:42 +0200 Subject: [PATCH 732/828] Fix: Avoid deletion of system entries in dictionary --- htdocs/admin/dict.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/htdocs/admin/dict.php b/htdocs/admin/dict.php index 11cd105137c..87e072b8d7e 100644 --- a/htdocs/admin/dict.php +++ b/htdocs/admin/dict.php @@ -1622,7 +1622,11 @@ if ($id) elseif ($obj->code == 'RECEP') { $iserasable = 0; $canbedisabled = 0; } elseif ($obj->code == 'EF0') { $iserasable = 0; $canbedisabled = 0; } } - + if ($id == 25 && in_array($obj->code, array('banner', 'blogpost', 'other', 'page'))) + { + $iserasable = 0; $canbedisabled = 0; + if (in_array($obj->code, array('banner'))) $canbedisabled = 1; + } if (isset($obj->type) && in_array($obj->type, array('system', 'systemauto'))) { $iserasable=0; } if (in_array($obj->code, array('AC_OTH','AC_OTH_AUTO')) || in_array($obj->type, array('systemauto'))) { $canbedisabled=0; $canbedisabled = 0; } $canbemodified=$iserasable; From e5801c0b6872059d9e08516f70f9d569fd90d92f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 04:06:22 +0200 Subject: [PATCH 733/828] Update bonprelevement.class.php --- .../class/bonprelevement.class.php | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/htdocs/compta/prelevement/class/bonprelevement.class.php b/htdocs/compta/prelevement/class/bonprelevement.class.php index 1574fc3eb60..7a5a190c465 100644 --- a/htdocs/compta/prelevement/class/bonprelevement.class.php +++ b/htdocs/compta/prelevement/class/bonprelevement.class.php @@ -1133,24 +1133,24 @@ class BonPrelevement extends CommonObject /** - * Get object and lines from database + * Get object and lines from database * * @param User $user Object user that delete - * @param int $notrigger 1=Does not execute triggers, 0= execute triggers - * @return int >0 if OK, <0 if KO + * @param int $notrigger 1=Does not execute triggers, 0= execute triggers + * @return int >0 if OK, <0 if KO */ - function delete($user=null, $notrigger = 0) + function delete($user = null, $notrigger = 0) { $this->db->begin(); - $error = 0; - if (! $notrigger) - { - // Call trigger - $result=$this->call_trigger('BON_PRELEVEMENT_DELETE', $user); - if ($result < 0) $error++; - // End call triggers - } + $error = 0; + if (! $notrigger) + { + // Call trigger + $result=$this->call_trigger('BON_PRELEVEMENT_DELETE', $user); + if ($result < 0) $error++; + // End call triggers + } $sql = "DELETE FROM ".MAIN_DB_PREFIX."prelevement_facture WHERE fk_prelevement_lignes IN (SELECT rowid FROM ".MAIN_DB_PREFIX."prelevement_lignes WHERE fk_prelevement_bons = ".$this->id.")"; $resql1=$this->db->query($sql); From a03bb00254b979b9027092b7b0f1585d51efbb16 Mon Sep 17 00:00:00 2001 From: atm-ph Date: Fri, 19 Jul 2019 11:26:21 +0200 Subject: [PATCH 734/828] Fix missing hook --- htdocs/compta/prelevement/card.php | 118 +++++++++++++++-------------- 1 file changed, 63 insertions(+), 55 deletions(-) diff --git a/htdocs/compta/prelevement/card.php b/htdocs/compta/prelevement/card.php index 60e471d712d..d6c752330fe 100644 --- a/htdocs/compta/prelevement/card.php +++ b/htdocs/compta/prelevement/card.php @@ -63,78 +63,86 @@ $object = new BonPrelevement($db,""); // Load object include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once // Must be include, not include_once. Include fetch and fetch_thirdparty but not fetch_optionals +$hookmanager->initHooks(array('directdebitprevcard','globalcard')); /* * Actions */ -if ( $action == 'confirm_delete' ) +$parameters = array('socid' => $socid); +$reshook = $hookmanager->executeHooks('doActions', $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)) { - $res=$object->delete($user); - if ($res > 0) - { - header("Location: index.php"); - exit; - } -} + if ( $action == 'confirm_delete' ) + { + $res=$object->delete($user); + if ($res > 0) + { + header("Location: index.php"); + exit; + } + } -// Seems to no be used and replaced with $action == 'infocredit -if ( $action == 'confirm_credite' && GETPOST('confirm','alpha') == 'yes') -{ - $res=$object->set_credite(); - if ($res >= 0) - { - header("Location: card.php?id=".$id); - exit; - } -} + // Seems to no be used and replaced with $action == 'infocredit + if ( $action == 'confirm_credite' && GETPOST('confirm','alpha') == 'yes') + { + $res=$object->set_credite(); + if ($res >= 0) + { + header("Location: card.php?id=".$id); + exit; + } + } -if ($action == 'infotrans' && $user->rights->prelevement->bons->send) -{ - require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; + if ($action == 'infotrans' && $user->rights->prelevement->bons->send) + { + require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; - $dt = dol_mktime(12,0,0,GETPOST('remonth','int'),GETPOST('reday','int'),GETPOST('reyear','int')); + $dt = dol_mktime(12,0,0,GETPOST('remonth','int'),GETPOST('reday','int'),GETPOST('reyear','int')); - /* - if ($_FILES['userfile']['name'] && basename($_FILES['userfile']['name'],".ps") == $object->ref) - { - $dir = $conf->prelevement->dir_output.'/receipts'; + /* + if ($_FILES['userfile']['name'] && basename($_FILES['userfile']['name'],".ps") == $object->ref) + { + $dir = $conf->prelevement->dir_output.'/receipts'; - if (dol_move_uploaded_file($_FILES['userfile']['tmp_name'], $dir . "/" . dol_unescapefile($_FILES['userfile']['name']),1) > 0) - { - $object->set_infotrans($user, $dt, GETPOST('methode','alpha')); - } + if (dol_move_uploaded_file($_FILES['userfile']['tmp_name'], $dir . "/" . dol_unescapefile($_FILES['userfile']['name']),1) > 0) + { + $object->set_infotrans($user, $dt, GETPOST('methode','alpha')); + } - header("Location: card.php?id=".$id); - exit; - } - else - { - dol_syslog("Fichier invalide",LOG_WARNING); - $mesg='BadFile'; - }*/ + header("Location: card.php?id=".$id); + exit; + } + else + { + dol_syslog("Fichier invalide",LOG_WARNING); + $mesg='BadFile'; + }*/ - $error = $object->set_infotrans($user, $dt, GETPOST('methode','alpha')); + $error = $object->set_infotrans($user, $dt, GETPOST('methode','alpha')); - if ($error) - { - header("Location: card.php?id=".$id."&error=$error"); - exit; - } -} + if ($error) + { + header("Location: card.php?id=".$id."&error=$error"); + exit; + } + } -// Set direct debit order to credited, create payment and close invoices -if ($action == 'infocredit' && $user->rights->prelevement->bons->credit) -{ - $dt = dol_mktime(12,0,0,GETPOST('remonth','int'),GETPOST('reday','int'),GETPOST('reyear','int')); + // Set direct debit order to credited, create payment and close invoices + if ($action == 'infocredit' && $user->rights->prelevement->bons->credit) + { + $dt = dol_mktime(12,0,0,GETPOST('remonth','int'),GETPOST('reday','int'),GETPOST('reyear','int')); - $error = $object->set_infocredit($user, $dt); + $error = $object->set_infocredit($user, $dt); - if ($error) - { - header("Location: card.php?id=".$id."&error=$error"); - exit; - } + if ($error) + { + header("Location: card.php?id=".$id."&error=$error"); + exit; + } + } } From b100cdb9db97e20eb2b5a9a13951eb9e74c64902 Mon Sep 17 00:00:00 2001 From: Florian Mortgat Date: Fri, 19 Jul 2019 11:58:21 +0200 Subject: [PATCH 735/828] FIX: extrafield loading bug due to assumption that an object is a third party while it may be a contact if MAIN_USE_COMPANY_NAME_OF_CONTACT is set. --- .../expedition/doc/doc_generic_shipment_odt.modules.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/htdocs/core/modules/expedition/doc/doc_generic_shipment_odt.modules.php b/htdocs/core/modules/expedition/doc/doc_generic_shipment_odt.modules.php index 9c45c135ac3..a1be784f249 100644 --- a/htdocs/core/modules/expedition/doc/doc_generic_shipment_odt.modules.php +++ b/htdocs/core/modules/expedition/doc/doc_generic_shipment_odt.modules.php @@ -393,7 +393,11 @@ class doc_generic_shipment_odt extends ModelePdfExpedition } } // Make substitutions into odt of thirdparty - $tmparray=$this->get_substitutionarray_thirdparty($socobject,$outputlangs); + if ($socobject->element == 'contact') { + $tmparray = $this->get_substitutionarray_contact($socobject, $outputlangs); + } else { + $tmparray = $this->get_substitutionarray_thirdparty($socobject, $outputlangs); + } foreach($tmparray as $key=>$value) { try { From b88d19e8e4c83066cd224d687080ab210518a801 Mon Sep 17 00:00:00 2001 From: BadPixxel Date: Fri, 19 Jul 2019 12:24:53 +0200 Subject: [PATCH 736/828] FIX: Units Scale Missing in Object CRUD --- htdocs/core/class/cunits.class.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/htdocs/core/class/cunits.class.php b/htdocs/core/class/cunits.class.php index 861d7f737bb..922338999df 100644 --- a/htdocs/core/class/cunits.class.php +++ b/htdocs/core/class/cunits.class.php @@ -92,6 +92,7 @@ class CUnits // extends CommonObject if (isset($this->short_label)) $this->libelle=trim($this->short_label); if (isset($this->unit_type)) $this->active=trim($this->unit_type); if (isset($this->active)) $this->active=trim($this->active); + if (isset($this->scale)) $this->scale=trim($this->scale); // Check parameters // Put here code to add control on parameters values @@ -103,12 +104,14 @@ class CUnits // extends CommonObject $sql.= "label,"; $sql.= "short_label,"; $sql.= "unit_type"; + $sql.= "scale"; $sql.= ") VALUES ("; $sql.= " ".(! isset($this->id)?'NULL':"'".$this->db->escape($this->id)."'").","; $sql.= " ".(! isset($this->code)?'NULL':"'".$this->db->escape($this->code)."'").","; $sql.= " ".(! isset($this->label)?'NULL':"'".$this->db->escape($this->label)."'").","; $sql.= " ".(! isset($this->short_label)?'NULL':"'".$this->db->escape($this->short_label)."'").","; $sql.= " ".(! isset($this->unit_type)?'NULL':"'".$this->db->escape($this->unit_type)."'"); + $sql.= " ".(! isset($this->scale)?'NULL':"'".$this->db->escape($this->scale)."'"); $sql.= ")"; $this->db->begin(); @@ -173,6 +176,7 @@ class CUnits // extends CommonObject $sql.= " t.label,"; $sql.= " t.short_label,"; $sql.= " t.unit_type,"; + $sql.= " t.scale,"; $sql.= " t.active"; $sql.= " FROM ".MAIN_DB_PREFIX."c_units as t"; $sql_where=array(); @@ -196,6 +200,7 @@ class CUnits // extends CommonObject $this->label = $obj->label; $this->short_label = $obj->short_label; $this->unit_type = $obj->unit_type; + $this->scale = $obj->scale; $this->active = $obj->active; } $this->db->free($resql); @@ -235,6 +240,7 @@ class CUnits // extends CommonObject $sql.= " t.label,"; $sql.= " t.short_label,"; $sql.= " t.unit_type,"; + $sql.= " t.scale,"; $sql.= " t.active"; $sql .= ' FROM ' . MAIN_DB_PREFIX . 'c_units as t'; // Manage filter @@ -279,6 +285,7 @@ class CUnits // extends CommonObject $record->label = $obj->label; $record->short_label = $obj->short_label; $record->unit_type = $obj->unit_type; + $record->scale = $obj->scale; $record->active = $obj->active; $this->records[$record->id] = $record; } @@ -312,6 +319,7 @@ class CUnits // extends CommonObject if (isset($this->label)) $this->libelle=trim($this->label); if (isset($this->short_label)) $this->libelle=trim($this->short_label); if (isset($this->unit_type)) $this->libelle=trim($this->unit_type); + if (isset($this->scale)) $this->scale=trim($this->scale); if (isset($this->active)) $this->active=trim($this->active); // Check parameters @@ -323,6 +331,7 @@ class CUnits // extends CommonObject $sql.= " label=".(isset($this->label)?"'".$this->db->escape($this->label)."'":"null").","; $sql.= " short_label=".(isset($this->short_label)?"'".$this->db->escape($this->short_label)."'":"null").","; $sql.= " unit_type=".(isset($this->unit_type)?"'".$this->db->escape($this->unit_type)."'":"null").","; + $sql.= " scale=".(isset($this->scale)?"'".$this->db->escape($this->scale)."'":"null").","; $sql.= " active=".(isset($this->active)?$this->active:"null"); $sql.= " WHERE rowid=".$this->id; From 278c2d7152cfc5aef5bfb7e489eef304ba2b47a5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 12:58:21 +0200 Subject: [PATCH 737/828] Enhance the perf page --- htdocs/admin/system/perf.php | 20 ++++++++++++++++---- htdocs/langs/en_US/admin.lang | 6 +++--- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/htdocs/admin/system/perf.php b/htdocs/admin/system/perf.php index 66148fb01ab..fbf6fa3bb14 100644 --- a/htdocs/admin/system/perf.php +++ b/htdocs/admin/system/perf.php @@ -70,6 +70,18 @@ else } print '
'; +// Module log +print '
'; +print ''.$langs->trans("Syslog").': '; +$test=empty($conf->syslog->enabled); +if ($test) print img_picto('', 'tick.png').' '.$langs->trans("NotInstalled"); +else +{ + print img_picto('', 'warning').' '.$langs->trans("ModuleActivated", $langs->transnoentities("Syslog")); + //print ' '.$langs->trans("MoreInformation").' XDebug admin page'; +} +print '
'; + // Module debugbar print '
'; print ''.$langs->trans("DebugBar").': '; @@ -77,7 +89,7 @@ $test=empty($conf->debugbar->enabled); if ($test) print img_picto('', 'tick.png').' '.$langs->trans("NotInstalled"); else { - print img_picto('', 'warning').' '.$langs->trans("DebugBarModuleActivated"); + print img_picto('', 'warning').' '.$langs->trans("ModuleActivated", $langs->transnoentities("DebugBar")); //print ' '.$langs->trans("MoreInformation").' XDebug admin page'; } print '
'; @@ -110,20 +122,20 @@ $test=function_exists('xcache_info'); if (! $foundcache && $test) { $foundcache++; - print img_picto('', 'tick.png').' '.$langs->trans("XCacheInstalled"); + print img_picto('', 'tick.png').' '.$langs->trans("PHPModuleLoaded", "XCache"); print ' '.$langs->trans("MoreInformation").' Xcache admin page'; } $test=function_exists('eaccelerator_info'); if (! $foundcache && $test) { $foundcache++; - print img_picto('', 'tick.png').' '.$langs->trans("EAcceleratorInstalled"); + print img_picto('', 'tick.png').' '.$langs->trans("PHPModuleLoaded", "Eaccelerator"); } $test=function_exists('opcache_get_status'); if (! $foundcache && $test) { $foundcache++; - print img_picto('', 'tick.png').' '.$langs->trans("ZendOPCacheInstalled"); // Should be by default starting with PHP 5.5 + print img_picto('', 'tick.png').' '.$langs->trans("PHPModuleLoaded", "ZendOPCache"); // Should be by default starting with PHP 5.5 //$tmp=opcache_get_status(); //var_dump($tmp); } diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 1765a7c6440..3b73cdb0bd6 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1226,8 +1226,8 @@ YouHaveXObjectUseSearchOptim=You have %s %s in the database. You should add the YouHaveXObjectAndSearchOptimOn=You have %s %s in the database and constant %s is set to 1 in Home-Setup-Other. BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance. BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari. -XDebugInstalled=XDebug is loaded. -XCacheInstalled=XCache is loaded. +PHPModuleLoaded=PHP component %s is loaded +PreloadOPCode=Preloaded OPCode is used AddRefInList=Display Customer/Vendor ref. info list (select list or combobox) and most of hyperlink.
Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp". AddAdressInList=Display Customer/Vendor adress info list (select list or combobox)
Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp". AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties. @@ -1912,7 +1912,7 @@ LogsLinesNumber=Number of lines to show on logs tab UseDebugBar=Use the debug bar DEBUGBAR_LOGS_LINES_NUMBER=Number of last log lines to keep in console WarningValueHigherSlowsDramaticalyOutput=Warning, higher values slows dramaticaly output -DebugBarModuleActivated=Module debugbar is activated and slows dramaticaly the interface +ModuleActivated=Module %s is activated and slows the interface EXPORTS_SHARE_MODELS=Export models are share with everybody ExportSetup=Setup of module Export InstanceUniqueID=Unique ID of the instance From cd1a2d24eee0f0556ca1952df638f8519f7c9f72 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 13:07:07 +0200 Subject: [PATCH 738/828] Removed not used file --- htdocs/societe/notify/index.html | 0 htdocs/societe/notify/index.php | 109 ------------------------------- 2 files changed, 109 deletions(-) create mode 100644 htdocs/societe/notify/index.html delete mode 100644 htdocs/societe/notify/index.php diff --git a/htdocs/societe/notify/index.html b/htdocs/societe/notify/index.html new file mode 100644 index 00000000000..e69de29bb2d diff --git a/htdocs/societe/notify/index.php b/htdocs/societe/notify/index.php deleted file mode 100644 index f4e5bd8554b..00000000000 --- a/htdocs/societe/notify/index.php +++ /dev/null @@ -1,109 +0,0 @@ - - * Copyright (C) 2004-2006 Laurent Destailleur - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -/** - * \file htdocs/societe/notify/index.php - * \ingroup notification - * \brief List of done notifications - */ - -require '../../main.inc.php'; -$langs->loadLangs(array("companies", "banks")); - -// S�curit� acc�s client -if ($user->societe_id > 0) -{ - $action = ''; - $socid = $user->societe_id; -} - -if ($sortorder == "") -{ - $sortorder="ASC"; -} -if ($sortfield == "") -{ - $sortfield="s.nom"; -} - -if (empty($page) || $page == -1) { $page = 0 ; } - -$offset = $conf->liste_limit * $page ; -$pageprev = $page - 1; -$pagenext = $page + 1; - - - -/* - * View - */ - -llxHeader(); - -$sql = "SELECT s.nom as name, s.rowid as socid, c.lastname, c.firstname, a.label, n.rowid"; -$sql.= " FROM ".MAIN_DB_PREFIX."socpeople as c,"; -$sql.= " ".MAIN_DB_PREFIX."c_action_trigger as a,"; -$sql.= " ".MAIN_DB_PREFIX."notify_def as n,"; -$sql.= " ".MAIN_DB_PREFIX."societe as s"; -$sql.= " WHERE n.fk_contact = c.rowid"; -$sql.= " AND a.rowid = n.fk_action"; -$sql.= " AND n.fk_soc = s.rowid"; -$sql.= " AND s.entity IN (".getEntity('societe').")"; -if ($socid > 0) $sql.= " AND s.rowid = " . $user->societe_id; - -$sql.= $db->order($sortfield, $sortorder); -$sql.= $db->plimit($conf->liste_limit, $offset); - -$result = $db->query($sql); -if ($result) -{ - $num = $db->num_rows($result); - $i = 0; - - $paramlist=''; - print_barre_liste($langs->trans("ListOfNotificationsDone"), $page, $_SERVER["PHP_SELF"], $paramlist, $sortfield, $sortorder, '', $num); - - print ''; - print ''; - print_liste_field_titre("Company", $_SERVER["PHP_SELF"], "s.nom", "", "", 'valign="center"', $sortfield, $sortorder); - print_liste_field_titre("Contact", $_SERVER["PHP_SELF"], "c.lastname", "", "", 'valign="center"', $sortfield, $sortorder); - print_liste_field_titre("Action", $_SERVER["PHP_SELF"], "a.titre", "", "", 'valign="center"', $sortfield, $sortorder); - print "\n"; - - while ($i < $num) - { - $obj = $db->fetch_object($result); - - print ''; - print "\n"; - print "\n"; - print "\n"; - print "\n"; - $i++; - } - print "
socid."\">".$obj->name."".dolGetFirstLastname($obj->firstname, $obj->lastname)."".$obj->titre."
"; - $db->free(); -} -else -{ - dol_print_error($db); -} - -// End of page -llxFooter(); -$db->close(); From f745d01bf34f9e9d04abf9ded88f3ce3ed71d0c5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 13:22:54 +0200 Subject: [PATCH 739/828] Prepare change of properties "titre" into "title" --- htdocs/admin/menus/edit.php | 8 +++++--- htdocs/admin/menus/index.php | 4 ++-- htdocs/compta/facture/card.php | 4 ++-- htdocs/compta/facture/class/facture-rec.class.php | 12 +++++++----- htdocs/compta/facture/fiche-rec.php | 8 +++++--- htdocs/compta/facture/invoicetemplate_list.php | 4 ++-- htdocs/core/class/menubase.class.php | 3 ++- htdocs/core/modules/DolibarrModules.class.php | 3 ++- htdocs/fichinter/card-rec.php | 6 +++--- htdocs/projet/class/api_projects.class.php | 1 - htdocs/projet/class/project.class.php | 6 +----- 11 files changed, 31 insertions(+), 28 deletions(-) diff --git a/htdocs/admin/menus/edit.php b/htdocs/admin/menus/edit.php index cf42f294d03..6bacc97e92f 100644 --- a/htdocs/admin/menus/edit.php +++ b/htdocs/admin/menus/edit.php @@ -87,7 +87,8 @@ if ($action == 'update') $result=$menu->fetch(GETPOST('menuId', 'int')); if ($result > 0) { - $menu->titre=GETPOST('titre', 'alpha'); + $menu->titre=GETPOST('titre', 'alpha'); // deprecated + $menu->title=GETPOST('titre', 'alpha'); $menu->leftmenu=GETPOST('leftmenu', 'aZ09'); $menu->url=GETPOST('url', 'alpha'); $menu->langs=GETPOST('langs', 'alpha'); @@ -205,7 +206,8 @@ if ($action == 'add') $menu = new Menubase($db); $menu->menu_handler=preg_replace('/_menu$/', '', GETPOST('menu_handler', 'aZ09')); $menu->type=GETPOST('type', 'alpha'); - $menu->titre=GETPOST('titre', 'alpha'); + $menu->titre=GETPOST('titre', 'alpha'); // deprecated + $menu->title=GETPOST('titre', 'alpha'); $menu->url=GETPOST('url', 'alpha'); $menu->langs=GETPOST('langs', 'alpha'); $menu->position=GETPOST('position', 'int'); @@ -494,7 +496,7 @@ elseif ($action == 'edit') //print '
'.$langs->trans('Level').''.$menu->level.''.$langs->trans('DetailLevel').'
'.$langs->trans('Title').''.$langs->trans('DetailTitre').'
'.$langs->trans('Title').''.$langs->trans('DetailTitre').'
'.$langs->trans('URL').''.$langs->trans('DetailUrl').'
'; - print img_object($langs->trans("ShowIntervention"), "intervention").' '.$objp->titre; + print img_object($langs->trans("ShowIntervention"), "intervention").' '.$objp->title; print "
'; + print '
'; if ($soc->outstanding_limit) { @@ -2454,7 +2454,7 @@ if ($action == 'create' && $user->rights->commande->creer) print ''; print ''; - print ''; + print ''; // Close fichecenter print '

'; diff --git a/htdocs/ticket/card.php b/htdocs/ticket/card.php index 94c0aec8d90..af65fbd2715 100644 --- a/htdocs/ticket/card.php +++ b/htdocs/ticket/card.php @@ -824,9 +824,11 @@ if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'd dol_banner_tab($object, 'ref', $linkback, ($user->societe_id ? 0 : 1), 'ref', 'ref', $morehtmlref); - print '
'; + print '
'; + print '
'; print '
'; - print '
'; + + print '
'; // Track ID print ''; // Group print ''; // Severity print ''; } print '
' . $langs->trans("TicketTrackId") . ''; @@ -956,7 +958,6 @@ if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'd // View Original message $actionobject->viewTicketOriginalMessage($user, $action, $object); - // Classification of ticket print ''; print ''; @@ -1011,29 +1012,20 @@ if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'd // Type print '
' . $langs->trans("Type") . ''; print $langs->getLabelFromKey($db, $object->type_code, 'c_ticket_type', 'code', 'label'); - /*if ($user->admin && !$noadmininfo) { - print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1); - }*/ print '
' . $langs->trans("TicketGroup") . ''; print $langs->getLabelFromKey($db, $object->category_code, 'c_ticket_category', 'code', 'label'); - /*if ($user->admin && !$noadmininfo) { - print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1); - }*/ print '
' . $langs->trans("TicketSeverity") . ''; print $langs->getLabelFromKey($db, $object->severity_code, 'c_ticket_severity', 'code', 'label'); - /*if ($user->admin && !$noadmininfo) { - print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1); - }*/ print '
'; // End table actions + print '
'; print ''; - print ''; // Display navbar with links to change ticket status print ''; @@ -1225,9 +1217,7 @@ if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'd $formactions = new FormActions($db); $somethingshown = $formactions->showactions($object, 'ticket', $socid, 1); - print ''; - print ''; - print '
'; + print ''; } else { diff --git a/htdocs/ticket/class/actions_ticket.class.php b/htdocs/ticket/class/actions_ticket.class.php index b10f8ebe7da..912b6cb298c 100644 --- a/htdocs/ticket/class/actions_ticket.class.php +++ b/htdocs/ticket/class/actions_ticket.class.php @@ -280,7 +280,7 @@ class ActionsTicket //print '
' . $object->message . '
'; } - if ($user->rights->ticket->manage && $action == 'edit_message_init') { + if (!empty($user->rights->ticket->manage) && $action == 'edit_message_init') { print '
'; print ' '; print ' '; @@ -289,7 +289,14 @@ class ActionsTicket print '
'; + print '
'; + + if (!empty($user->rights->ticket->manage) && $action == 'edit_message_init') { + // MESSAGE + print ''; + } } + /** * View html list of message for ticket * From bd193b26f6e6b7518c64ee8850679f0dd61f6a26 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 18:02:39 +0200 Subject: [PATCH 748/828] FIX Block to link with tickets --- htdocs/ticket/tpl/linkedobjectblock.tpl.php | 83 ++++++++++++++------- 1 file changed, 55 insertions(+), 28 deletions(-) diff --git a/htdocs/ticket/tpl/linkedobjectblock.tpl.php b/htdocs/ticket/tpl/linkedobjectblock.tpl.php index 3391437dbb1..3a5cc46600a 100644 --- a/htdocs/ticket/tpl/linkedobjectblock.tpl.php +++ b/htdocs/ticket/tpl/linkedobjectblock.tpl.php @@ -13,8 +13,7 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * along with this program. If not, see . */ // Protection to avoid direct call of template if (empty($conf) || ! is_object($conf)) @@ -28,37 +27,65 @@ if (empty($conf) || ! is_object($conf)) load('ticket'); $linkedObjectBlock = $GLOBALS['linkedObjectBlock']; -echo '
'; -print load_fiche_titre($langs->trans('RelatedTickets')); + +// Load translation files required by the page +$langs->load('ticket'); + +$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc'); + +$total=0; $ilink=0; +foreach($linkedObjectBlock as $key => $objectlink) +{ + $ilink++; + + $trclass='oddeven'; + if ($ilink == count($linkedObjectBlock) && empty($noMoreLinkedObjectBlockAfter) && count($linkedObjectBlock) <= 1) $trclass.=' liste_sub_total'; ?> - - - - - - + + + + + + socid = $objectlink->fk_soc; + //$objectlink->fetch_thirdparty(); + ?> + + + - - - +} +if (count($linkedObjectBlock) > 1) +{ + ?> + + + + + + + + + socid = $object->fk_soc; - $object->fetch_thirdparty(); - ?> - - - - -
trans("Subject"); ?>trans("DateCreation"); ?>trans("Customer"); ?>trans("Status"); ?>
trans("Ticket"); ?> + global->MAIN_ENABLE_IMPORT_LINKED_OBJECT_LINES) print ' + getNomUrl(1); ?>ref_client; ?>datec, 'day'); ?>thirdparty->getNomUrl(1); ?>getLibStatut(3); ?> + element != 'shipping') { + ?> + ">transnoentitiesnoconv("RemoveLink"), 'unlink'); ?> + +
- subject) ? ' '.$object->subject : ''); ?> - - datec, 'day'); ?>
trans("Total"); ?>
thirdparty->getNomUrl(1); ?>getLibstatut(2); ?>
+} +?> From e5c3945ec304796f12e6bc26a79a8ddd0757c0fa Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 18:10:45 +0200 Subject: [PATCH 749/828] FIX delete of links between objects --- htdocs/comm/propal/tpl/linkedobjectblock.tpl.php | 2 +- htdocs/commande/tpl/linkedobjectblock.tpl.php | 2 +- htdocs/compta/facture/tpl/linkedobjectblock.tpl.php | 2 +- htdocs/fichinter/tpl/linkedobjectblock.tpl.php | 2 ++ htdocs/ticket/tpl/linkedobjectblock.tpl.php | 4 ++-- 5 files changed, 7 insertions(+), 5 deletions(-) diff --git a/htdocs/comm/propal/tpl/linkedobjectblock.tpl.php b/htdocs/comm/propal/tpl/linkedobjectblock.tpl.php index 61d79e4abbb..910772d87ca 100644 --- a/htdocs/comm/propal/tpl/linkedobjectblock.tpl.php +++ b/htdocs/comm/propal/tpl/linkedobjectblock.tpl.php @@ -43,7 +43,7 @@ $linkedObjectBlock = $GLOBALS['linkedObjectBlock']; // Load translation files required by the page $langs->load("propal"); -$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc'); +$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc', 0, 0, 1); $total=0; $ilink=0; foreach($linkedObjectBlock as $key => $objectlink) diff --git a/htdocs/commande/tpl/linkedobjectblock.tpl.php b/htdocs/commande/tpl/linkedobjectblock.tpl.php index 1f8b440749f..74a2243d633 100644 --- a/htdocs/commande/tpl/linkedobjectblock.tpl.php +++ b/htdocs/commande/tpl/linkedobjectblock.tpl.php @@ -39,7 +39,7 @@ $linkedObjectBlock = $GLOBALS['linkedObjectBlock']; // Load translation files required by the page $langs->load("orders"); -$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc'); +$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc', 0, 0, 1); $total=0; $ilink=0; foreach($linkedObjectBlock as $key => $objectlink) diff --git a/htdocs/compta/facture/tpl/linkedobjectblock.tpl.php b/htdocs/compta/facture/tpl/linkedobjectblock.tpl.php index a9fbb5da2eb..bef705a21ab 100644 --- a/htdocs/compta/facture/tpl/linkedobjectblock.tpl.php +++ b/htdocs/compta/facture/tpl/linkedobjectblock.tpl.php @@ -38,7 +38,7 @@ $linkedObjectBlock = $GLOBALS['linkedObjectBlock']; $langs->load("bills"); -$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc'); +$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc', 0, 0, 1); $total=0; $ilink=0; foreach($linkedObjectBlock as $key => $objectlink) diff --git a/htdocs/fichinter/tpl/linkedobjectblock.tpl.php b/htdocs/fichinter/tpl/linkedobjectblock.tpl.php index 9f481b6b648..cc2bf4cea26 100644 --- a/htdocs/fichinter/tpl/linkedobjectblock.tpl.php +++ b/htdocs/fichinter/tpl/linkedobjectblock.tpl.php @@ -35,6 +35,8 @@ $linkedObjectBlock = $GLOBALS['linkedObjectBlock']; $langs->load("interventions"); +$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc', 0, 0, 1); + $ilink=0; foreach($linkedObjectBlock as $key => $objectlink) { diff --git a/htdocs/ticket/tpl/linkedobjectblock.tpl.php b/htdocs/ticket/tpl/linkedobjectblock.tpl.php index 3a5cc46600a..8aed516e4fc 100644 --- a/htdocs/ticket/tpl/linkedobjectblock.tpl.php +++ b/htdocs/ticket/tpl/linkedobjectblock.tpl.php @@ -36,13 +36,13 @@ $linkedObjectBlock = $GLOBALS['linkedObjectBlock']; // Load translation files required by the page $langs->load('ticket'); -$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc'); +$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'datec', 'desc', 0, 0, 1); $total=0; $ilink=0; foreach($linkedObjectBlock as $key => $objectlink) { $ilink++; - + $trclass='oddeven'; if ($ilink == count($linkedObjectBlock) && empty($noMoreLinkedObjectBlockAfter) && count($linkedObjectBlock) <= 1) $trclass.=' liste_sub_total'; ?> From 48b4aa4c8dbf81ffdd922cadd2d022326ca6110a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 18:29:33 +0200 Subject: [PATCH 750/828] Fix link to ticket --- htdocs/core/class/html.form.class.php | 3 ++- htdocs/langs/en_US/main.lang | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 64c5063e8a2..68c4bec4690 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -6661,7 +6661,8 @@ class Form 'fichinter'=>array('enabled'=>$conf->ficheinter->enabled, 'perms'=>1, 'label'=>'LinkToIntervention', 'sql'=>"SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."fichinter as t WHERE t.fk_soc = s.rowid AND t.fk_soc IN (".$listofidcompanytoscan.') AND t.entity IN ('.getEntity('intervention').')'), 'supplier_proposal'=>array('enabled'=>$conf->supplier_proposal->enabled , 'perms'=>1, 'label'=>'LinkToSupplierProposal', 'sql'=>"SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref, '' as ref_supplier, t.total_ht FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."supplier_proposal as t WHERE t.fk_soc = s.rowid AND t.fk_soc IN (".$listofidcompanytoscan.') AND t.entity IN ('.getEntity('supplier_proposal').')'), 'order_supplier'=>array('enabled'=>$conf->supplier_order->enabled , 'perms'=>1, 'label'=>'LinkToSupplierOrder', 'sql'=>"SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref, t.ref_supplier, t.total_ht FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."commande_fournisseur as t WHERE t.fk_soc = s.rowid AND t.fk_soc IN (".$listofidcompanytoscan.') AND t.entity IN ('.getEntity('commande_fournisseur').')'), - 'invoice_supplier'=>array('enabled'=>$conf->supplier_invoice->enabled , 'perms'=>1, 'label'=>'LinkToSupplierInvoice', 'sql'=>"SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref, t.ref_supplier, t.total_ht FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."facture_fourn as t WHERE t.fk_soc = s.rowid AND t.fk_soc IN (".$listofidcompanytoscan.') AND t.entity IN ('.getEntity('facture_fourn').')') + 'invoice_supplier'=>array('enabled'=>$conf->supplier_invoice->enabled , 'perms'=>1, 'label'=>'LinkToSupplierInvoice', 'sql'=>"SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref, t.ref_supplier, t.total_ht FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."facture_fourn as t WHERE t.fk_soc = s.rowid AND t.fk_soc IN (".$listofidcompanytoscan.') AND t.entity IN ('.getEntity('facture_fourn').')'), + 'ticket'=>array('enabled'=>$conf->ticket->enabled , 'perms'=>1, 'label'=>'LinkToTicket', 'sql'=>"SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref, t.track_id, '0' as total_ht FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."ticket as t WHERE t.fk_soc = s.rowid AND t.fk_soc IN (".$listofidcompanytoscan.') AND t.entity IN ('.getEntity('ticket').')') ); } diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index 6efbe942032..5e55597c306 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -759,6 +759,7 @@ LinkToSupplierProposal=Link to vendor proposal LinkToSupplierInvoice=Link to vendor invoice LinkToContract=Link to contract LinkToIntervention=Link to intervention +LinkToTicket=Link to ticket CreateDraft=Create draft SetToDraft=Back to draft ClickToEdit=Click to edit From fafb7956dec2c55172bae5928f9766e09463361b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 18:52:44 +0200 Subject: [PATCH 751/828] Fix position of triggers --- htdocs/install/mysql/data/llx_c_action_trigger.sql | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/install/mysql/data/llx_c_action_trigger.sql b/htdocs/install/mysql/data/llx_c_action_trigger.sql index 3bc705c7a19..aaa96e3136a 100644 --- a/htdocs/install/mysql/data/llx_c_action_trigger.sql +++ b/htdocs/install/mysql/data/llx_c_action_trigger.sql @@ -102,9 +102,9 @@ insert into llx_c_action_trigger (code,label,description,elementtype,rang) value insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_REPORT_VALIDATE','Expense report validated','Executed when an expense report is validated','expensereport',202); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_REPORT_APPROVE','Expense report approved','Executed when an expense report is approved','expensereport',203); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_REPORT_PAYED','Expense report billed','Executed when an expense report is set as billed','expensereport',204); -insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_DELETE','Expense report deleted','Executed when an expense report is deleted','expensereport',204); -insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('HOLIDAY_VALIDATE','Expense report validated','Executed when an expense report is validated','expensereport',202); -insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('HOLIDAY_APPROVE','Expense report approved','Executed when an expense report is approved','expensereport',203); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_DELETE','Expense report deleted','Executed when an expense report is deleted','expensereport',205); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('HOLIDAY_VALIDATE','Expense report validated','Executed when an expense report is validated','expensereport',211); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('HOLIDAY_APPROVE','Expense report approved','Executed when an expense report is approved','expensereport',212); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROJECT_VALIDATE','Project validation','Executed when a project is validated','project',141); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROJECT_DELETE','Project deleted','Executed when a project is deleted','project',143); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('TICKET_CREATE','Ticket created','Executed when a ticket is created','ticket',161); @@ -116,7 +116,7 @@ insert into llx_c_action_trigger (code,label,description,elementtype,rang) value -- actions not enabled by default (no constant created for that) when we enable module agenda insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PRODUCT_MODIFY','Product or service modified','Executed when a product or sevice is modified','product',41); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_MODIFY','Member modified','Executed when a member is modified','member',23); -insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_MODIFY','Intervention modified','Executed when a intervention is modified','ficheinter',31); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_MODIFY','Intervention modified','Executed when a intervention is modified','ficheinter',19); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROJECT_CREATE','Project creation','Executed when a project is created','project',140); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROJECT_MODIFY','Project modified','Executed when a project is modified','project',142); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('TASK_CREATE','Task created','Executed when a project task is created','project',150); From 327e5ebe780e42cc96e8bccb38bdb0d139e6de60 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 19:09:38 +0200 Subject: [PATCH 752/828] FIX Show list of events on tickets --- htdocs/admin/agenda.php | 5 +- htdocs/public/ticket/view.php | 10 +-- htdocs/ticket/class/actions_ticket.class.php | 86 ++++---------------- htdocs/ticket/class/ticket.class.php | 13 ++- 4 files changed, 26 insertions(+), 88 deletions(-) diff --git a/htdocs/admin/agenda.php b/htdocs/admin/agenda.php index 649bfab3d97..4c5c02d0b3d 100644 --- a/htdocs/admin/agenda.php +++ b/htdocs/admin/agenda.php @@ -40,7 +40,7 @@ $cancel = GETPOST('cancel', 'alpha'); $search_event = GETPOST('search_event', 'alpha'); // Get list of triggers available -$sql = "SELECT a.rowid, a.code, a.label, a.elementtype"; +$sql = "SELECT a.rowid, a.code, a.label, a.elementtype, a.rang as position"; $sql.= " FROM ".MAIN_DB_PREFIX."c_action_trigger as a"; $sql.= " ORDER BY a.rang ASC"; $resql=$db->query($sql); @@ -55,6 +55,7 @@ if ($resql) $triggers[$i]['code'] = $obj->code; $triggers[$i]['element'] = $obj->elementtype; $triggers[$i]['label'] = ($langs->trans("Notify_".$obj->code)!="Notify_".$obj->code?$langs->trans("Notify_".$obj->code):$obj->label); + $triggers[$i]['position'] = $obj->position; $i++; } @@ -65,6 +66,8 @@ else dol_print_error($db); } +//$triggers = dol_sort_array($triggers, 'code', 'asc', 0, 0, 1); + /* * Actions diff --git a/htdocs/public/ticket/view.php b/htdocs/public/ticket/view.php index 69a77413b2e..2c23ba1bc71 100644 --- a/htdocs/public/ticket/view.php +++ b/htdocs/public/ticket/view.php @@ -150,7 +150,7 @@ if ($action == "view_ticket" || $action == "add_message" || $action == "close" | if ($display_ticket) { // Confirmation close if ($action == 'close') { - print $form->form_confirm($_SERVER["PHP_SELF"] . "?track_id=" . $track_id, $langs->trans("CloseATicket"), $langs->trans("ConfirmCloseAticket"), "confirm_public_close", '', '', 1); + print $form->formconfirm($_SERVER["PHP_SELF"] . "?track_id=" . $track_id, $langs->trans("CloseATicket"), $langs->trans("ConfirmCloseAticket"), "confirm_public_close", '', '', 1); } print '
'; @@ -287,13 +287,7 @@ if ($action == "view_ticket" || $action == "add_message" || $action == "close" | // Message list print load_fiche_titre($langs->trans('TicketMessagesList'), '', 'messages@ticket'); - $object->viewTicketMessages(false); - - print '
'; - - // Logs list - print load_fiche_titre($langs->trans('TicketHistory'), '', 'history@ticket'); - $object->viewTicketLogs(false); + $object->viewTicketMessages(false, true, $object->dao); } else { print ''; } diff --git a/htdocs/ticket/class/actions_ticket.class.php b/htdocs/ticket/class/actions_ticket.class.php index 912b6cb298c..3e9daabec75 100644 --- a/htdocs/ticket/class/actions_ticket.class.php +++ b/htdocs/ticket/class/actions_ticket.class.php @@ -167,72 +167,12 @@ class ActionsTicket } } - /** - * View html list of logs - * - * @param boolean $show_user Show user who make action - * @return void - */ - public function viewTicketLogs($show_user = true) - { - global $conf, $langs; - - // Load logs in cache - $ret = $this->dao->loadCacheLogsTicket(); - - if (is_array($this->dao->cache_logs_ticket) && count($this->dao->cache_logs_ticket) > 0) { - print ''; - - print ''; - - print ''; - - if ($show_user) { - print ''; - } - - foreach ($this->dao->cache_logs_ticket as $id => $arraylogs) { - print ''; - print ''; - - if ($show_user) { - print ''; - } - print ''; - print ''; - print ''; - print ''; - } - - print '
'; - print $langs->trans('DateCreation'); - print ''; - print $langs->trans('User'); - print '
'; - print dol_print_date($arraylogs['datec'], 'dayhour'); - print ''; - if ($arraylogs['fk_user_create'] > 0) { - $userstat = new User($this->db); - $res = $userstat->fetch($arraylogs['fk_user_create']); - if ($res) { - print $userstat->getNomUrl(1); - } - } - print '
'; - print dol_nl2br($arraylogs['message']); - - print '
'; - } else { - print '
' . $langs->trans('NoLogForThisTicket') . '
'; - } - } - /** * Show ticket original message * * @param User $user User wich display * @param string $action Action mode - * @param Ticket $object Object ticket + * @param Ticket $object Object ticket * @return void */ public function viewTicketOriginalMessage($user, $action, $object) @@ -300,29 +240,31 @@ class ActionsTicket /** * View html list of message for ticket * - * @param boolean $show_private Show private messages - * @param boolean $show_user Show user who make action - * @return void + * @param boolean $show_private Show private messages + * @param boolean $show_user Show user who make action + * @param Ticket $object Object ticket + * @return void */ - public function viewTicketMessages($show_private, $show_user = true) + public function viewTicketMessages($show_private, $show_user, $object) { global $conf, $langs, $user; // Load logs in cache $ret = $this->dao->loadCacheMsgsTicket(); - $action = GETPOST('action'); + if ($ret < 0) dol_print_error($this->dao->db); - $this->viewTicketOriginalMessage($user, $action); + $action = GETPOST('action', 'alpha'); - if (is_array($this->dao->cache_msgs_ticket) && count($this->dao->cache_msgs_ticket) > 0) { - print load_fiche_titre($langs->trans('TicketMailExchanges')); + $this->viewTicketOriginalMessage($user, $action, $object); + if (is_array($this->dao->cache_msgs_ticket) && count($this->dao->cache_msgs_ticket) > 0) + { print ''; print ''; print ''; if ($show_user) { @@ -342,9 +284,9 @@ class ActionsTicket print ''; if ($show_user) { print ''; print ''; // Description From 9ab07344153bea1ef843f71eb462077432a63884 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Fri, 19 Jul 2019 23:08:24 +0200 Subject: [PATCH 757/828] NEW Extrafields on salaries --- ChangeLog | 2 +- htdocs/.gitignore | 1 + htdocs/accountancy/journal/bankjournal.php | 2 +- htdocs/compta/accounting-files.php | 2 +- htdocs/compta/bank/bankentries_list.php | 2 +- htdocs/compta/bank/ligne.php | 2 +- htdocs/compta/bank/releve.php | 2 +- htdocs/compta/charges/index.php | 2 +- htdocs/compta/resultat/clientfourn.php | 2 +- htdocs/compta/sociales/payments.php | 2 +- htdocs/core/lib/salaries.lib.php | 10 ++-- htdocs/core/menus/init_menu_auguria.sql | 8 +-- htdocs/core/menus/standard/eldy.lib.php | 8 +-- htdocs/core/modules/modSalaries.class.php | 2 +- .../install/mysql/migration/10.0.0-11.0.0.sql | 12 +++++ .../llx_payment_salary_extrafields.key.sql | 7 +-- .../tables/llx_payment_salary_extrafields.sql | 8 ++- htdocs/langs/en_US/admin.lang | 1 + htdocs/projet/element.php | 4 +- htdocs/{ => salaries}/admin/salaries.php | 23 ++++---- .../admin/salaries_extrafields.php | 14 ++--- htdocs/{compta => }/salaries/card.php | 53 +++++++++++-------- htdocs/{compta => }/salaries/class/index.html | 0 .../salaries/class/paymentsalary.class.php | 50 +++++++++++++++-- .../salaries/class/salariesstats.class.php | 4 +- htdocs/{compta => }/salaries/document.php | 10 ++-- htdocs/{compta => }/salaries/info.php | 10 ++-- htdocs/{compta => }/salaries/list.php | 10 ++-- htdocs/{compta => }/salaries/stats/index.php | 6 +-- htdocs/user/bank.php | 4 +- 30 files changed, 164 insertions(+), 99 deletions(-) rename htdocs/{ => salaries}/admin/salaries.php (83%) rename htdocs/{ => salaries}/admin/salaries_extrafields.php (87%) rename htdocs/{compta => }/salaries/card.php (89%) rename htdocs/{compta => }/salaries/class/index.html (100%) rename htdocs/{compta => }/salaries/class/paymentsalary.class.php (93%) rename htdocs/{compta => }/salaries/class/salariesstats.class.php (97%) rename htdocs/{compta => }/salaries/document.php (91%) rename htdocs/{compta => }/salaries/info.php (84%) rename htdocs/{compta => }/salaries/list.php (96%) rename htdocs/{compta => }/salaries/stats/index.php (97%) diff --git a/ChangeLog b/ChangeLog index 472c3ffba81..21f01e805bf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -414,7 +414,7 @@ NEW: add option PROPOSAL_AUTO_ADD_AUTHOR_AS_CONTACT NEW: Add option to display thirdparty adress in combolist NEW: Add option to swap sender/recipient address on PDF NEW: Add option to display thirdparty adress in combolist -NEW: Add project on pament of salaries +NEW: Add project on payment of salaries NEW: Add SHIPPING_PDF_HIDE_WEIGHT_AND_VOLUME and NEW: Add somes hooks in bank planned entries NEW: Add supplier ref in item reception page diff --git a/htdocs/.gitignore b/htdocs/.gitignore index ac35d8fab2f..d51eaffd235 100644 --- a/htdocs/.gitignore +++ b/htdocs/.gitignore @@ -28,3 +28,4 @@ /nomenclature* /of/ /workstation/ +/oblyon* diff --git a/htdocs/accountancy/journal/bankjournal.php b/htdocs/accountancy/journal/bankjournal.php index cb56a4179b8..1bf1d8617db 100644 --- a/htdocs/accountancy/journal/bankjournal.php +++ b/htdocs/accountancy/journal/bankjournal.php @@ -45,7 +45,7 @@ require_once DOL_DOCUMENT_ROOT . '/compta/paiement/class/paiement.class.php'; require_once DOL_DOCUMENT_ROOT . '/don/class/don.class.php'; require_once DOL_DOCUMENT_ROOT . '/don/class/paymentdonation.class.php'; require_once DOL_DOCUMENT_ROOT . '/compta/tva/class/tva.class.php'; -require_once DOL_DOCUMENT_ROOT . '/compta/salaries/class/paymentsalary.class.php'; +require_once DOL_DOCUMENT_ROOT . '/salaries/class/paymentsalary.class.php'; require_once DOL_DOCUMENT_ROOT . '/compta/facture/class/facture.class.php'; require_once DOL_DOCUMENT_ROOT . '/fourn/class/paiementfourn.class.php'; require_once DOL_DOCUMENT_ROOT . '/fourn/class/fournisseur.facture.class.php'; diff --git a/htdocs/compta/accounting-files.php b/htdocs/compta/accounting-files.php index 9069045c8b3..e3bff713960 100644 --- a/htdocs/compta/accounting-files.php +++ b/htdocs/compta/accounting-files.php @@ -26,7 +26,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php'; -require_once DOL_DOCUMENT_ROOT.'/compta/salaries/class/paymentsalary.class.php'; +require_once DOL_DOCUMENT_ROOT.'/salaries/class/paymentsalary.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/chargesociales.class.php'; require_once DOL_DOCUMENT_ROOT.'/don/class/don.class.php'; require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php'; diff --git a/htdocs/compta/bank/bankentries_list.php b/htdocs/compta/bank/bankentries_list.php index 5609bb6b598..37e44ac9768 100644 --- a/htdocs/compta/bank/bankentries_list.php +++ b/htdocs/compta/bank/bankentries_list.php @@ -43,7 +43,7 @@ require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/chargesociales.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/tva/class/tva.class.php'; -require_once DOL_DOCUMENT_ROOT.'/compta/salaries/class/paymentsalary.class.php'; +require_once DOL_DOCUMENT_ROOT.'/salaries/class/paymentsalary.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/paymentvarious.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/prelevement/class/bonprelevement.class.php'; require_once DOL_DOCUMENT_ROOT.'/don/class/don.class.php'; diff --git a/htdocs/compta/bank/ligne.php b/htdocs/compta/bank/ligne.php index 40906bfd455..4eb8a03ac64 100644 --- a/htdocs/compta/bank/ligne.php +++ b/htdocs/compta/bank/ligne.php @@ -386,7 +386,7 @@ if ($result) print ''; } elseif ($links[$key]['type']=='payment_salary') { - print ''; + print ''; print img_object($langs->trans('ShowPaymentSalary'), 'payment').' '; print $langs->trans("SalaryPayment"); print ''; diff --git a/htdocs/compta/bank/releve.php b/htdocs/compta/bank/releve.php index b93f381c555..b6b4d3e2106 100644 --- a/htdocs/compta/bank/releve.php +++ b/htdocs/compta/bank/releve.php @@ -662,7 +662,7 @@ else } elseif ($links[$key]['type']=='payment_salary') { - print ''; + print ''; print ' '.img_object($langs->trans('ShowPayment'), 'payment').' '; print $langs->trans("Payment"); print ''; diff --git a/htdocs/compta/charges/index.php b/htdocs/compta/charges/index.php index 4b62a98b80b..5ba7232dc95 100644 --- a/htdocs/compta/charges/index.php +++ b/htdocs/compta/charges/index.php @@ -31,7 +31,7 @@ require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/compta/tva/class/tva.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/chargesociales.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/paymentsocialcontribution.class.php'; -require_once DOL_DOCUMENT_ROOT.'/compta/salaries/class/paymentsalary.class.php'; +require_once DOL_DOCUMENT_ROOT.'/salaries/class/paymentsalary.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; diff --git a/htdocs/compta/resultat/clientfourn.php b/htdocs/compta/resultat/clientfourn.php index f0a01d1ae04..2182375ff1a 100644 --- a/htdocs/compta/resultat/clientfourn.php +++ b/htdocs/compta/resultat/clientfourn.php @@ -773,7 +773,7 @@ else print ''; - print "\n"; + print "\n"; if ($modecompta == 'CREANCES-DETTES') print ''; print ''; diff --git a/htdocs/compta/sociales/payments.php b/htdocs/compta/sociales/payments.php index 384601ca989..9bf94a16b34 100644 --- a/htdocs/compta/sociales/payments.php +++ b/htdocs/compta/sociales/payments.php @@ -30,7 +30,7 @@ require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/compta/tva/class/tva.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/chargesociales.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/paymentsocialcontribution.class.php'; -require_once DOL_DOCUMENT_ROOT.'/compta/salaries/class/paymentsalary.class.php'; +require_once DOL_DOCUMENT_ROOT.'/salaries/class/paymentsalary.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; // Load translation files required by the page diff --git a/htdocs/core/lib/salaries.lib.php b/htdocs/core/lib/salaries.lib.php index 418bc8bfaa4..cb632ab2bfd 100644 --- a/htdocs/core/lib/salaries.lib.php +++ b/htdocs/core/lib/salaries.lib.php @@ -33,7 +33,7 @@ function salaries_prepare_head($object) $h = 0; $head = array(); - $head[$h][0] = DOL_URL_ROOT.'/compta/salaries/card.php?id='.$object->id; + $head[$h][0] = DOL_URL_ROOT.'/salaries/card.php?id='.$object->id; $head[$h][1] = $langs->trans("Card"); $head[$h][2] = 'card'; $h++; @@ -49,13 +49,13 @@ function salaries_prepare_head($object) $upload_dir = $conf->salaries->dir_output . "/" . dol_sanitizeFileName($object->ref); $nbFiles = count(dol_dir_list($upload_dir, 'files', 0, '', '(\.meta|_preview.*\.png)$')); $nbLinks=Link::count($db, $object->element, $object->id); - $head[$h][0] = DOL_URL_ROOT.'/compta/salaries/document.php?id='.$object->id; + $head[$h][0] = DOL_URL_ROOT.'/salaries/document.php?id='.$object->id; $head[$h][1] = $langs->trans('Documents'); if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; $head[$h][2] = 'documents'; $h++; - $head[$h][0] = DOL_URL_ROOT.'/compta/salaries/info.php?id='.$object->id; + $head[$h][0] = DOL_URL_ROOT.'/salaries/info.php?id='.$object->id; $head[$h][1] = $langs->trans("Info"); $head[$h][2] = 'info'; $h++; @@ -77,7 +77,7 @@ function salaries_admin_prepare_head() $h = 0; $head = array(); - $head[$h][0] = DOL_URL_ROOT.'/admin/salaries.php'; + $head[$h][0] = DOL_URL_ROOT.'/salaries/admin/salaries.php'; $head[$h][1] = $langs->trans("Miscellaneous"); $head[$h][2] = 'general'; $h++; @@ -88,7 +88,7 @@ function salaries_admin_prepare_head() // $this->tabs = array('entity:-tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to remove a tab complete_head_from_modules($conf, $langs, '', $head, $h, 'salaries_admin'); - $head[$h][0] = DOL_URL_ROOT.'/admin/salaries_extrafields.php'; + $head[$h][0] = DOL_URL_ROOT.'/salaries/admin/salaries_extrafields.php'; $head[$h][1] = $langs->trans("ExtraFieldsSalaries"); $head[$h][2] = 'attributes'; $h++; diff --git a/htdocs/core/menus/init_menu_auguria.sql b/htdocs/core/menus/init_menu_auguria.sql index c7b2c8a69a7..dcd874bdf3d 100644 --- a/htdocs/core/menus/init_menu_auguria.sql +++ b/htdocs/core/menus/init_menu_auguria.sql @@ -218,10 +218,10 @@ insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, left -- insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->don->enabled && $leftmenu=="donations"', __HANDLER__, 'left', 2003__+MAX_llx_menu__, 'billing', '', 2000__+MAX_llx_menu__, '/don/stats/index.php?mainmenu=billing&leftmenu=donations', 'Statistics', 1, 'donations', '$user->rights->don->lire', '', 2, 2, __ENTITY__); -- Special expenses insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->tax->enabled || $conf->salaries->enabled || $conf->loan->enabled || $conf->banque->enabled', __HANDLER__, 'left', 2200__+MAX_llx_menu__, 'billing', 'tax', 6__+MAX_llx_menu__, '/compta/charges/index.php?mainmenu=billing&leftmenu=tax', 'MenuSpecialExpenses', 0, 'compta', '(! empty($conf->tax->enabled) && $user->rights->tax->charges->lire) || (! empty($conf->salaries->enabled) && ! empty($user->rights->salaries->read)) || (! empty($conf->loan->enabled) && $user->rights->loan->read) || (! empty($conf->banque->enabled) && $user->rights->banque->lire)', '', 0, 6, __ENTITY__); -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->salaries->enabled', __HANDLER__, 'left', 2210__+MAX_llx_menu__, 'billing', 'tax_sal', 2200__+MAX_llx_menu__, '/compta/salaries/list.php?mainmenu=billing&leftmenu=tax_salary', 'Salaries', 1, 'salaries', '$user->rights->salaries->read', '', 0, 1, __ENTITY__); -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->salaries->enabled && $leftmenu=="tax_salary"', __HANDLER__, 'left', 2211__+MAX_llx_menu__, 'billing', '', 2210__+MAX_llx_menu__, '/compta/salaries/card.php?mainmenu=billing&leftmenu=tax_salary&action=create', 'NewPayment', 2, 'companies', '$user->rights->salaries->write', '', 0, 2, __ENTITY__); -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->salaries->enabled && $leftmenu=="tax_salary"', __HANDLER__, 'left', 2212__+MAX_llx_menu__, 'billing', '', 2210__+MAX_llx_menu__, '/compta/salaries/list.php?mainmenu=billing&leftmenu=tax_salary', 'Payments', 2, 'companies', '$user->rights->salaries->read', '', 0, 3, __ENTITY__); -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->salaries->enabled && $leftmenu=="tax_salary"', __HANDLER__, 'left', 2213__+MAX_llx_menu__, 'billing', '', 2210__+MAX_llx_menu__, '/compta/salaries/stats/index.php?mainmenu=billing&leftmenu=tax_salary', 'Statistics', 2, 'companies', '$user->rights->salaries->read', '', 0, 4, __ENTITY__); +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->salaries->enabled', __HANDLER__, 'left', 2210__+MAX_llx_menu__, 'billing', 'tax_sal', 2200__+MAX_llx_menu__, '/salaries/list.php?mainmenu=billing&leftmenu=tax_salary', 'Salaries', 1, 'salaries', '$user->rights->salaries->read', '', 0, 1, __ENTITY__); +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->salaries->enabled && $leftmenu=="tax_salary"', __HANDLER__, 'left', 2211__+MAX_llx_menu__, 'billing', '', 2210__+MAX_llx_menu__, '/salaries/card.php?mainmenu=billing&leftmenu=tax_salary&action=create', 'NewPayment', 2, 'companies', '$user->rights->salaries->write', '', 0, 2, __ENTITY__); +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->salaries->enabled && $leftmenu=="tax_salary"', __HANDLER__, 'left', 2212__+MAX_llx_menu__, 'billing', '', 2210__+MAX_llx_menu__, '/salaries/list.php?mainmenu=billing&leftmenu=tax_salary', 'Payments', 2, 'companies', '$user->rights->salaries->read', '', 0, 3, __ENTITY__); +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->salaries->enabled && $leftmenu=="tax_salary"', __HANDLER__, 'left', 2213__+MAX_llx_menu__, 'billing', '', 2210__+MAX_llx_menu__, '/salaries/stats/index.php?mainmenu=billing&leftmenu=tax_salary', 'Statistics', 2, 'companies', '$user->rights->salaries->read', '', 0, 4, __ENTITY__); insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->loan->enabled', __HANDLER__, 'left', 2220__+MAX_llx_menu__, 'billing', 'tax_loan', 2200__+MAX_llx_menu__, '/loan/list.php?mainmenu=billing&leftmenu=tax_loan', 'Loans', 1, 'loan', '$user->rights->loan->read', '', 0, 1, __ENTITY__); insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->loan->enabled && $leftmenu=="tax_loan"', __HANDLER__, 'left', 2221__+MAX_llx_menu__, 'billing', '', 2220__+MAX_llx_menu__, '/loan/card.php?mainmenu=billing&leftmenu=tax_loan&action=create', 'NewLoan', 2, 'loan', '$user->rights->loan->write', '', 0, 2, __ENTITY__); --insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->loan->enabled && $leftmenu=="tax_loan"', __HANDLER__, 'left', 2222__+MAX_llx_menu__, 'billing', '', 2220__+MAX_llx_menu__, '/loan/payment/list.php?mainmenu=billing&leftmenu=tax_loan', 'Payments', 2, 'companies', '$user->rights->loan->read', '', 0, 3, __ENTITY__); diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index 88595cd366a..bf886986ce2 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -1108,11 +1108,11 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM if (! empty($conf->salaries->enabled)) { $langs->load("salaries"); - $newmenu->add("/compta/salaries/list.php?leftmenu=tax_salary&mainmenu=billing", $langs->trans("Salaries"), 1, $user->rights->salaries->read, '', $mainmenu, 'tax_salary'); + $newmenu->add("/salaries/list.php?leftmenu=tax_salary&mainmenu=billing", $langs->trans("Salaries"), 1, $user->rights->salaries->read, '', $mainmenu, 'tax_salary'); if ($usemenuhider || empty($leftmenu) || preg_match('/^tax_salary/i', $leftmenu)) { - $newmenu->add("/compta/salaries/card.php?leftmenu=tax_salary&action=create", $langs->trans("NewPayment"), 2, $user->rights->salaries->write); - $newmenu->add("/compta/salaries/list.php?leftmenu=tax_salary", $langs->trans("Payments"), 2, $user->rights->salaries->read); - $newmenu->add("/compta/salaries/stats/index.php?leftmenu=tax_salary", $langs->trans("Statistics"), 2, $user->rights->salaries->read); + $newmenu->add("/salaries/card.php?leftmenu=tax_salary&action=create", $langs->trans("NewPayment"), 2, $user->rights->salaries->write); + $newmenu->add("/salaries/list.php?leftmenu=tax_salary", $langs->trans("Payments"), 2, $user->rights->salaries->read); + $newmenu->add("/salaries/stats/index.php?leftmenu=tax_salary", $langs->trans("Statistics"), 2, $user->rights->salaries->read); } } diff --git a/htdocs/core/modules/modSalaries.class.php b/htdocs/core/modules/modSalaries.class.php index d68c6a36308..71aff3a11a6 100644 --- a/htdocs/core/modules/modSalaries.class.php +++ b/htdocs/core/modules/modSalaries.class.php @@ -68,7 +68,7 @@ class modSalaries extends DolibarrModules $this->dirs = array("/salaries/temp"); // Config pages - $this->config_page_url = array('salaries.php'); + $this->config_page_url = array('salaries.php@salaries'); // Dependencies $this->hidden = false; // A condition to hide module diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index f8cc3062bde..7a768c24a89 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -50,3 +50,15 @@ ALTER TABLE llx_user ADD COLUMN iplastlogin varchar(250); ALTER TABLE llx_user ADD COLUMN ippreviouslogin varchar(250); ALTER TABLE llx_events ADD COLUMN prefix_session varchar(255) NULL; + +create table llx_payment_salary_extrafields +( + rowid integer AUTO_INCREMENT PRIMARY KEY, + tms timestamp, + fk_object integer NOT NULL, -- salary payment id + import_key varchar(14) -- import key +)ENGINE=innodb; + +ALTER TABLE llx_payment_salary_extrafields ADD INDEX idx_payment_salary_extrafields (fk_object); + +UPDATE llx_bank_url set url = REPLACE( url, 'compta/salaries/', 'salaries/'); diff --git a/htdocs/install/mysql/tables/llx_payment_salary_extrafields.key.sql b/htdocs/install/mysql/tables/llx_payment_salary_extrafields.key.sql index 6989d271ccc..c038f1337d0 100644 --- a/htdocs/install/mysql/tables/llx_payment_salary_extrafields.key.sql +++ b/htdocs/install/mysql/tables/llx_payment_salary_extrafields.key.sql @@ -1,8 +1,5 @@ -- =================================================================== --- Copyright (C) 2002-2003 Rodolphe Quiedeville --- Copyright (C) 2002-2003 Jean-Louis Bergamo --- Copyright (C) 2009 Regis Houssin --- Copyright (C) 2011 Laurent Destailleur +-- Copyright (C) 2019 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 @@ -20,4 +17,4 @@ -- =================================================================== -ALTER TABLE llx_adherent_extrafields ADD INDEX idx_adherent_extrafields (fk_object); +ALTER TABLE llx_payment_salary_extrafields ADD INDEX idx_payment_salary_extrafields (fk_object); diff --git a/htdocs/install/mysql/tables/llx_payment_salary_extrafields.sql b/htdocs/install/mysql/tables/llx_payment_salary_extrafields.sql index 3ad91052c24..fc87cd8146d 100644 --- a/htdocs/install/mysql/tables/llx_payment_salary_extrafields.sql +++ b/htdocs/install/mysql/tables/llx_payment_salary_extrafields.sql @@ -1,7 +1,5 @@ -- =================================================================== --- Copyright (C) 2002-2003 Rodolphe Quiedeville --- Copyright (C) 2002-2003 Jean-Louis Bergamo --- Copyright (C) 2009 Regis Houssin +-- Copyright (C) 2019 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,10 +16,10 @@ -- -- =================================================================== -create table llx_adherent_extrafields +create table llx_payment_salary_extrafields ( rowid integer AUTO_INCREMENT PRIMARY KEY, tms timestamp, - fk_object integer NOT NULL, -- member id + fk_object integer NOT NULL, -- salary payment id import_key varchar(14) -- import key )ENGINE=innodb; diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index e14e15033d6..50cd7fe9bcb 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1193,6 +1193,7 @@ ExtraFieldsSupplierOrders=Complementary attributes (orders) ExtraFieldsSupplierInvoices=Complementary attributes (invoices) ExtraFieldsProject=Complementary attributes (projects) ExtraFieldsProjectTask=Complementary attributes (tasks) +ExtraFieldsSalaries=Complementary attributes (salaries) ExtraFieldHasWrongValue=Attribute %s has a wrong value. AlphaNumOnlyLowerCharsAndNoSpace=only alphanumericals and lower case characters without space SendmailOptionNotComplete=Warning, on some Linux systems, to send email from your email, sendmail execution setup must contains option -ba (parameter mail.force_extra_parameters into your php.ini file). If some recipients never receive emails, try to edit this PHP parameter with mail.force_extra_parameters = -ba). diff --git a/htdocs/projet/element.php b/htdocs/projet/element.php index b4d2a8b290f..debdc33fdd3 100644 --- a/htdocs/projet/element.php +++ b/htdocs/projet/element.php @@ -52,7 +52,7 @@ if (! empty($conf->loan->enabled)) require_once DOL_DOCUMENT_ROOT.'/loan/class if (! empty($conf->stock->enabled)) require_once DOL_DOCUMENT_ROOT.'/product/stock/class/mouvementstock.class.php'; if (! empty($conf->tax->enabled)) require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/chargesociales.class.php'; if (! empty($conf->banque->enabled)) require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/paymentvarious.class.php'; -if (! empty($conf->salaries->enabled)) require_once DOL_DOCUMENT_ROOT.'/compta/salaries/class/paymentsalary.class.php'; +if (! empty($conf->salaries->enabled)) require_once DOL_DOCUMENT_ROOT.'/salaries/class/paymentsalary.class.php'; // Load translation files required by the page $langs->loadLangs(array('projects', 'companies', 'suppliers', 'compta')); @@ -457,7 +457,7 @@ $listofreferent=array( 'datefieldname'=>'datev', 'margin'=>'minus', 'disableamount'=>0, - 'urlnew'=>DOL_URL_ROOT.'/compta/salaries/card.php?action=create&projectid='.$id, + 'urlnew'=>DOL_URL_ROOT.'/salaries/card.php?action=create&projectid='.$id, 'lang'=>'salaries', 'buttonnew'=>'AddSalaryPayment', 'testnew'=>$user->rights->salaries->write, diff --git a/htdocs/admin/salaries.php b/htdocs/salaries/admin/salaries.php similarity index 83% rename from htdocs/admin/salaries.php rename to htdocs/salaries/admin/salaries.php index 324ae1b0a17..c3a4e849852 100644 --- a/htdocs/admin/salaries.php +++ b/htdocs/salaries/admin/salaries.php @@ -1,5 +1,5 @@ +/* Copyright (C) 2014-2019 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 @@ -22,10 +22,11 @@ * \brief Setup page to configure salaries module */ -require '../main.inc.php'; +require '../../main.inc.php'; // Class require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/salaries.lib.php'; if (! empty($conf->accounting->enabled)) require_once DOL_DOCUMENT_ROOT . '/core/class/html.formaccounting.class.php'; // Load translation files required by the page @@ -39,7 +40,7 @@ $action = GETPOST('action', 'alpha'); // Other parameters SALARIES_* $list = array ( - 'SALARIES_XXX', + 'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT', ); /* @@ -80,29 +81,33 @@ if (! empty($conf->accounting->enabled)) $formaccounting = new FormAccounting($d $linkback=''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans('SalariesSetup'), $linkback, 'title_setup'); +$head = salaries_admin_prepare_head(); + +dol_fiche_head($head, 'general', $langs->trans("Salaries"), -1, 'payment'); + +// Document templates +print load_fiche_titre($langs->trans("Options"), '', ''); + print ''; print ''; print ''; -//dol_fiche_head(null, '', '', -1); - /* * Params */ print '
'; - print $langs->trans('DateCreation'); + print $langs->trans('TicketMessagesList'); print ''; - if ($arraymsgs['fk_user_action'] > 0) { + if ($arraymsgs['fk_user_author'] > 0) { $userstat = new User($this->db); - $res = $userstat->fetch($arraymsgs['fk_user_action']); + $res = $userstat->fetch($arraymsgs['fk_user_author']); if ($res) { print $userstat->getNomUrl(0); } diff --git a/htdocs/ticket/class/ticket.class.php b/htdocs/ticket/class/ticket.class.php index 132cce1e52b..7ab32f20851 100644 --- a/htdocs/ticket/class/ticket.class.php +++ b/htdocs/ticket/class/ticket.class.php @@ -1660,20 +1660,19 @@ class Ticket extends CommonObject } /** - * Charge la liste des messages sur le ticket + * Load the list of event on ticket into ->cache_msgs_ticket * - * @return int Nb lignes chargees, 0 si deja chargees, <0 si ko + * @return int Nb of lines loaded, 0 if already loaded, <0 if KO */ public function loadCacheMsgsTicket() { - global $langs; - if (is_array($this->cache_msgs_ticket) && count($this->cache_msgs_ticket)) { return 0; } - // Cache deja charge - $sql = "SELECT rowid, fk_user_author, datec, label, message, visibility"; + // Cache already loaded + + $sql = "SELECT id as rowid, fk_user_author, datec, label, note as message, visibility"; $sql .= " FROM " . MAIN_DB_PREFIX . "actioncomm"; $sql .= " WHERE fk_element = " . (int) $this->id; $sql .= " AND elementtype = 'ticket'"; @@ -1687,7 +1686,7 @@ class Ticket extends CommonObject while ($i < $num) { $obj = $this->db->fetch_object($resql); $this->cache_msgs_ticket[$i]['id'] = $obj->rowid; - $this->cache_msgs_ticket[$i]['fk_user_action'] = $obj->fk_user_action; + $this->cache_msgs_ticket[$i]['fk_user_author'] = $obj->fk_user_author; $this->cache_msgs_ticket[$i]['datec'] = $this->db->jdate($obj->datec); $this->cache_msgs_ticket[$i]['subject'] = $obj->label; $this->cache_msgs_ticket[$i]['message'] = $obj->message; From 934d8bd2d1ba83a57689a9ecddd12561cd59a29b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 19:13:51 +0200 Subject: [PATCH 753/828] Update doc --- .github/CONTRIBUTING.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 578bd592a75..6f61c24ae04 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -113,13 +113,11 @@ Also, some code changes need a prior approbation: * if you add a new table, you must first create a page on http://wiki.dolibarr.org/index.php/Category:Table_SQL (copy an existing page changing its name to see it into this index page). Than ask the project manager (@eldy) if the new data model you plan to add can be accepted as you suggest. -Once a PR has been submitted, you may need to wait for its integration. It is common that the project leader let the PR open for a long delay to allow -every developer discuss about the PR. +Once a PR has been submitted, you may need to wait for its integration. It is common that the project leader let the PR open for a long delay to allow every developer discuss about the PR. If your PR has errors reported by the Continuous Integration Platform, it means your PR is not valid and nothing will be done with it. It will be kept open to allow developers to fix this, or it may be closed several month later. -If the PR is valid, and is kept open for a long time, a tag will also be added on the PR to describe the status of your PR. +If the PR is valid, and is kept open for a long time, a tag will also be added on the PR to describe the status of your PR and why the PR is kept open. By putting your mouse on the tag, you will get a full explanation of the tag/status that explain why your PR has not been integrated yet. -Around 95% of submitted PR are reviewed and tagged. Even if this is one of the most important ratio in Open Source world, don't expect the core team -to reach the 100%. With the increasing popularity of Dolibarr, this ratio will probably decrease in future. +Around 95% of submitted PR are reviewed and tagged. Even if this is one of the most important ratio of answered PR in Open Source world, don't expect the core team to reach the 100%. With the increasing popularity of Dolibarr, this ratio will probably decrease in future. ### Resources From db61dfdb9c87b62086808b535fa0acd58dcd39a5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 19:24:41 +0200 Subject: [PATCH 754/828] Update doc --- .github/CONTRIBUTING.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 6f61c24ae04..a13037402f8 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -114,9 +114,12 @@ Also, some code changes need a prior approbation: * if you add a new table, you must first create a page on http://wiki.dolibarr.org/index.php/Category:Table_SQL (copy an existing page changing its name to see it into this index page). Than ask the project manager (@eldy) if the new data model you plan to add can be accepted as you suggest. Once a PR has been submitted, you may need to wait for its integration. It is common that the project leader let the PR open for a long delay to allow every developer discuss about the PR. -If your PR has errors reported by the Continuous Integration Platform, it means your PR is not valid and nothing will be done with it. It will be kept open to allow developers to fix this, or it may be closed several month later. -If the PR is valid, and is kept open for a long time, a tag will also be added on the PR to describe the status of your PR and why the PR is kept open. -By putting your mouse on the tag, you will get a full explanation of the tag/status that explain why your PR has not been integrated yet. + +If your PR has errors reported by the Continuous Integration Platform, it means your PR is not valid and nothing will be done with it. It will be kept open to allow developers to fix this, or it may be closed several month later. Don't expect anything on your PR if you have such errors, you MUST first fix the Continuous Integration error to have it taken into consideration. + +If the PR is valid, and is kept open for a long time, a tag will also be added on the PR to describe the status of your PR and why the PR is kept open. By putting your mouse on the tag, you will get a full explanation of the tag/status that explain why your PR has not been integrated yet. +In most cases, it give you information of things you have to do to have the PR taken into consideration (for example a change is requested, a conflict is expected to be solved, some questions were asked). If you have a yellow, red flag of purple flag, don't expect to have your PR validated. You must first provide the answer the flag ask you. The majority of PR are waiting a developer action. + Around 95% of submitted PR are reviewed and tagged. Even if this is one of the most important ratio of answered PR in Open Source world, don't expect the core team to reach the 100%. With the increasing popularity of Dolibarr, this ratio will probably decrease in future. From e742c3eb20e209d026653636b6a7b48776668c2a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 20:06:02 +0200 Subject: [PATCH 755/828] Debug module ticket --- htdocs/public/ticket/create_ticket.php | 2 +- htdocs/public/ticket/list.php | 3 +- htdocs/public/ticket/view.php | 70 ++++++++++++++++++-------- htdocs/ticket/class/ticket.class.php | 2 +- 4 files changed, 53 insertions(+), 24 deletions(-) diff --git a/htdocs/public/ticket/create_ticket.php b/htdocs/public/ticket/create_ticket.php index b663aaa43c3..b7d17244c2a 100644 --- a/htdocs/public/ticket/create_ticket.php +++ b/htdocs/public/ticket/create_ticket.php @@ -17,7 +17,7 @@ */ /** - * \file htdocs/public/ticket/index.php + * \file htdocs/public/ticket/create_ticket.php * \ingroup ticket * \brief Display public form to add new ticket */ diff --git a/htdocs/public/ticket/list.php b/htdocs/public/ticket/list.php index 9da0a4272e1..39736c6d857 100644 --- a/htdocs/public/ticket/list.php +++ b/htdocs/public/ticket/list.php @@ -210,7 +210,8 @@ if ($action == "view_ticketlist") 't.date_read' => array('label' => $langs->trans("TicketReadOn"), 'checked' => 0), 't.date_close' => array('label' => $langs->trans("TicketCloseOn"), 'checked' => 0), 't.ref' => array('label' => $langs->trans("Ref"), 'checked' => 1), - 't.fk_statut' => array('label' => $langs->trans("Statut"), 'checked' => 1), + //'t.track_id' => array('label' => $langs->trans("IDTracking"), 'checked' => 0), + 't.fk_statut' => array('label' => $langs->trans("Statut"), 'checked' => 1), 't.subject' => array('label' => $langs->trans("Subject"), 'checked' => 1), 'type.code' => array('label' => $langs->trans("Type"), 'checked' => 1), 'category.code' => array('label' => $langs->trans("Category"), 'checked' => 1), diff --git a/htdocs/public/ticket/view.php b/htdocs/public/ticket/view.php index 2c23ba1bc71..be77e50ea28 100644 --- a/htdocs/public/ticket/view.php +++ b/htdocs/public/ticket/view.php @@ -17,7 +17,7 @@ */ /** - * \file htdocs/public/ticket/index.php + * \file htdocs/public/ticket/view.php * \ingroup ticket * \brief Public file to add and manage ticket */ @@ -65,7 +65,7 @@ $object = new ActionsTicket($db); * Actions */ -if ($action == "view_ticket" || $action == "add_message" || $action == "close" || $action == "confirm_public_close" || $action == "new_public_message") { +if ($action == "view_ticket" || $action == "add_message" || $action == "close" || $action == "confirm_public_close" || $action == "add_public_message") { $error = 0; $display_ticket = false; if (!strlen($track_id)) { @@ -89,22 +89,28 @@ if ($action == "view_ticket" || $action == "add_message" || $action == "close" | if (!$error) { $ret = $object->fetch('', '', $track_id); if ($ret && $object->dao->id > 0) { - // vérifie si l'adresse email est bien dans les contacts du ticket - $contacts = $object->dao->liste_contact(-1, 'external'); - foreach ($contacts as $contact) { - if ($contact['email'] == $email) { - $display_ticket = true; - $_SESSION['email_customer'] = $email; - break; - } else { - $display_ticket = false; - } - } - + // Check if emails provided is the one of author + if ($object->dao->origin_email == $email) + { + $display_ticket = true; + $_SESSION['email_customer'] = $email; + } + // Check if emails provided is inside list of contacts + else { + $contacts = $object->dao->liste_contact(-1, 'external'); + foreach ($contacts as $contact) { + if ($contact['email'] == $email) { + $display_ticket = true; + $_SESSION['email_customer'] = $email; + break; + } else { + $display_ticket = false; + } + } + } if ($object->dao->fk_soc > 0) { $object->dao->fetch_thirdparty(); } - if ($email == $object->dao->origin_email || $email == $object->dao->thirdparty->email) { $display_ticket = true; $_SESSION['email_customer'] = $email; @@ -116,12 +122,32 @@ if ($action == "view_ticket" || $action == "add_message" || $action == "close" | } } + if ($action == "add_public_message") + { + // TODO Add message... + + + + + if (! $error) + { + $action = 'view_ticket'; + } + } + if ($error || $errors) { setEventMessages($object->error, $object->errors, 'errors'); - $action = ''; + if ($action == "add_public_message") + { + $action = 'add_message'; + } + else + { + $action = ''; + } } } - +//var_dump($action); //$object->doActions($action); @@ -251,16 +277,18 @@ if ($action == "view_ticket" || $action == "add_message" || $action == "close" | $formticket = new FormTicket($db); - $formticket->action = "new_public_message"; + $formticket->action = "add_public_message"; $formticket->track_id = $object->dao->track_id; $formticket->id = $object->dao->id; - $formticket->param = array('fk_user_create' => '-1'); + $formticket->param = array('track_id' => $object->dao->track_id, 'fk_user_create' => '-1', 'returnurl' => DOL_URL_ROOT.'/public/ticket/view.php'); $formticket->withfile = 2; $formticket->showMessageForm('100%'); - } else { - print '
'; + } + + if ($action != 'add_message') { + print ''; print ''; print ''; print ''; diff --git a/htdocs/ticket/class/ticket.class.php b/htdocs/ticket/class/ticket.class.php index 7ab32f20851..29654654110 100644 --- a/htdocs/ticket/class/ticket.class.php +++ b/htdocs/ticket/class/ticket.class.php @@ -180,7 +180,7 @@ class Ticket extends CommonObject 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'position'=>1, 'visible'=>-2, 'enabled'=>1, 'position'=>1, 'notnull'=>1, 'index'=>1, 'comment'=>"Id"), 'entity' => array('type'=>'integer', 'label'=>'Entity', 'visible'=>0, 'enabled'=>1, 'position'=>5, 'notnull'=>1, 'index'=>1), 'ref' => array('type'=>'varchar(128)', 'label'=>'Ref', 'visible'=>1, 'enabled'=>1, 'position'=>10, 'notnull'=>1, 'index'=>1, 'searchall'=>1, 'comment'=>"Reference of object", 'css'=>''), - 'track_id' => array('type'=>'varchar(255)', 'label'=>'TrackID', 'visible'=>0, 'enabled'=>1, 'position'=>11, 'notnull'=>-1, 'searchall'=>1, 'help'=>"Help text"), + 'track_id' => array('type'=>'varchar(255)', 'label'=>'TicketTrackId', 'visible'=>-2, 'enabled'=>1, 'position'=>11, 'notnull'=>-1, 'searchall'=>1, 'help'=>"Help text"), 'fk_user_create' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'Author', 'visible'=>1, 'enabled'=>1, 'position'=>15, 'notnull'=>1, 'css'=>'nowraponall'), 'origin_email' => array('type'=>'mail', 'label'=>'OriginEmail', 'visible'=>-2, 'enabled'=>1, 'position'=>16, 'notnull'=>1, 'index'=>1, 'searchall'=>1, 'comment'=>"Reference of object"), 'subject' => array('type'=>'varchar(255)', 'label'=>'Subject', 'visible'=>1, 'enabled'=>1, 'position'=>18, 'notnull'=>-1, 'searchall'=>1, 'help'=>""), From 94f063449268ed9713ad4c75c52a1759bc224119 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 21:45:11 +0200 Subject: [PATCH 756/828] Fix empty link --- htdocs/accountancy/customer/lines.php | 6 +++--- htdocs/accountancy/supplier/lines.php | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/htdocs/accountancy/customer/lines.php b/htdocs/accountancy/customer/lines.php index ea174638a2a..0e7047b84de 100644 --- a/htdocs/accountancy/customer/lines.php +++ b/htdocs/accountancy/customer/lines.php @@ -374,9 +374,9 @@ if ($result) { // Ref Product print '
'; - if ($product_static->id) - print $product_static->getNomUrl(1); - if ($objp->product_label) print '
'.$objp->product_label; + if ($product_static->id > 0) print $product_static->getNomUrl(1); + if ($product_static->id > 0 && $objp->product_label) print '
'; + if ($objp->product_label) print $objp->product_label; print '
'; diff --git a/htdocs/accountancy/supplier/lines.php b/htdocs/accountancy/supplier/lines.php index a67386f6fbd..c4aa1316876 100644 --- a/htdocs/accountancy/supplier/lines.php +++ b/htdocs/accountancy/supplier/lines.php @@ -384,9 +384,9 @@ if ($result) { // Ref product print ''; - if ($product_static->id) - print $product_static->getNomUrl(1); - if ($objp->product_label) print '
'.$objp->product_label; + if ($product_static->id > 0) print $product_static->getNomUrl(1); + if ($product_static->id > 0 && $objp->product_label) print '
'; + if ($objp->product_label) print $objp->product_label; print '
 ".$langs->trans("Salary")." fk_user."\">".$obj->firstname." ".$obj->lastname."".$langs->trans("Salary")." fk_user."\">".$obj->firstname." ".$obj->lastname."'.price(-$obj->amount).''.price(-$obj->amount).'
'; print ''; -print ''; +print ''; +print '\n"; print "\n"; foreach ($list as $key) { - - print ''; // Param $label = $langs->trans($key); - print ''; + print ''; // Value print ''."\n"; } - // Other attributes - $parameters=array(); - $reshook=$hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook - print $hookmanager->resPrint; + // Other attributes + $parameters=array(); + $reshook=$hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + if (empty($reshook)) + { + print $object->showOptionals($extrafields, 'edit', $parameters); + } print '
' . $langs->trans('Options') . ''.$langs->trans("Parameters").''.$langs->trans("Value")."
'; diff --git a/htdocs/admin/salaries_extrafields.php b/htdocs/salaries/admin/salaries_extrafields.php similarity index 87% rename from htdocs/admin/salaries_extrafields.php rename to htdocs/salaries/admin/salaries_extrafields.php index 180e695407f..7920acf5c6c 100644 --- a/htdocs/admin/salaries_extrafields.php +++ b/htdocs/salaries/admin/salaries_extrafields.php @@ -40,7 +40,7 @@ foreach ($tmptype2label as $key => $val) $type2label[$key]=$langs->transnoentiti $action=GETPOST('action', 'alpha'); $attrname=GETPOST('attrname', 'alpha'); -$elementtype='adherent'; //Must be the $table_element of the class that manage extrafield +$elementtype='payment_salary'; //Must be the $table_element of the class that manage extrafield if (!$user->admin) accessforbidden(); @@ -57,19 +57,19 @@ require DOL_DOCUMENT_ROOT.'/core/actions_extrafields.inc.php'; * View */ -$textobject = $langs->transnoentitiesnoconv("Members"); +$textobject = $langs->transnoentitiesnoconv("Salaries"); -$help_url='EN:Module_Foundations|FR:Module_Adhérents|ES:Módulo_Miembros'; -llxHeader('', $langs->trans("MembersSetup"), $help_url); +$help_url=''; +llxHeader('', $langs->trans("SalariesSetup"), $help_url); $linkback=''.$langs->trans("BackToModuleList").''; -print load_fiche_titre($langs->trans("MembersSetup"), $linkback, 'title_setup'); +print load_fiche_titre($langs->trans("SalariesSetup"), $linkback, 'title_setup'); -$head = member_admin_prepare_head(); +$head = salaries_admin_prepare_head(); -dol_fiche_head($head, 'attributes', $langs->trans("Members"), -1, 'user'); +dol_fiche_head($head, 'attributes', $langs->trans("Salaries"), -1, 'user'); require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_view.tpl.php'; diff --git a/htdocs/compta/salaries/card.php b/htdocs/salaries/card.php similarity index 89% rename from htdocs/compta/salaries/card.php rename to htdocs/salaries/card.php index c19b18bc0f0..5028dae747e 100644 --- a/htdocs/compta/salaries/card.php +++ b/htdocs/salaries/card.php @@ -1,5 +1,5 @@ +/* Copyright (C) 2011-2019 Alexandre Spangaro * Copyright (C) 2014 Laurent Destailleur * Copyright (C) 2015 Jean-François Ferry * Copyright (C) 2015 Charlie BENKE @@ -20,20 +20,21 @@ */ /** - * \file htdocs/compta/salaries/card.php + * \file htdocs/salaries/card.php * \ingroup salaries * \brief Page of salaries payments */ -require '../../main.inc.php'; -require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; -require_once DOL_DOCUMENT_ROOT.'/compta/salaries/class/paymentsalary.class.php'; -require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; -require_once DOL_DOCUMENT_ROOT.'/core/lib/salaries.lib.php'; +require '../main.inc.php'; +require_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php'; +require_once DOL_DOCUMENT_ROOT . '/salaries/class/paymentsalary.class.php'; +require_once DOL_DOCUMENT_ROOT . '/compta/bank/class/account.class.php'; +require_once DOL_DOCUMENT_ROOT . '/core/lib/salaries.lib.php'; +require_once DOL_DOCUMENT_ROOT . '/core/class/extrafields.class.php'; if (! empty($conf->projet->enabled)) { - require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; - require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; + require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php'; + require_once DOL_DOCUMENT_ROOT . '/core/class/html.formprojet.class.php'; } // Load translation files required by the page @@ -51,12 +52,14 @@ if ($user->societe_id) $socid=$user->societe_id; $result = restrictedArea($user, 'salaries', '', '', ''); $object = new PaymentSalary($db); +$extrafields = new ExtraFields($db); + +// fetch optionals attributes and labels +$extralabels=$extrafields->fetch_name_optionals_label($object->table_element); // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context $hookmanager->initHooks(array('salarycard','globalcard')); - - /** * Actions */ @@ -100,11 +103,15 @@ if ($action == 'add' && empty($cancel)) $object->fk_user_author=$user->id; $object->fk_project= GETPOST('fk_project', 'int'); - // Set user current salary as ref salaray for the payment + // Set user current salary as ref salary for the payment $fuser=new User($db); $fuser->fetch(GETPOST("fk_user", "int")); $object->salary=$fuser->salary; + // Fill array 'array_options' with data from add form + $ret = $extrafields->setOptionalsFromPost($extralabels, $object); + if ($ret < 0) $error++; + if (empty($datep) || empty($datev) || empty($datesp) || empty($dateep)) { setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Date")), null, 'errors'); @@ -174,7 +181,7 @@ if ($action == 'delete') if ($result >= 0) { $db->commit(); - header("Location: ".DOL_URL_ROOT.'/compta/salaries/list.php'); + header("Location: ".DOL_URL_ROOT.'/salaries/list.php'); exit; } else @@ -333,10 +340,14 @@ if ($action == 'create') print '
'; @@ -365,7 +376,7 @@ if ($id) dol_fiche_head($head, 'card', $langs->trans("SalaryPayment"), -1, 'payment'); - $linkback = ''.$langs->trans("BackToList").''; + $linkback = ''.$langs->trans("BackToList").''; $morehtmlref='
'; @@ -453,10 +464,8 @@ if ($id) } } - // Other attributes - $parameters=array(); - $reshook=$hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook - print $hookmanager->resPrint; + // Other attributes + include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_view.tpl.php'; print '
'; diff --git a/htdocs/compta/salaries/class/index.html b/htdocs/salaries/class/index.html similarity index 100% rename from htdocs/compta/salaries/class/index.html rename to htdocs/salaries/class/index.html diff --git a/htdocs/compta/salaries/class/paymentsalary.class.php b/htdocs/salaries/class/paymentsalary.class.php similarity index 93% rename from htdocs/compta/salaries/class/paymentsalary.class.php rename to htdocs/salaries/class/paymentsalary.class.php index 1d0bad641fc..905829e4696 100644 --- a/htdocs/compta/salaries/class/paymentsalary.class.php +++ b/htdocs/salaries/class/paymentsalary.class.php @@ -1,5 +1,5 @@ +/* Copyright (C) 2011-2019 Alexandre Spangaro * Copyright (C) 2014 Juanjo Menent * * This program is free software; you can redistribute it and/or modify @@ -17,7 +17,7 @@ */ /** - * \file htdocs/compta/salaries/class/paymentsalary.class.php + * \file htdocs/salaries/class/paymentsalary.class.php * \ingroup salaries * \brief Class for salaries module payment */ @@ -157,6 +157,19 @@ class PaymentSalary extends CommonObject return -1; } + // Update extrafield + if (! $error) + { + if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used + { + $result=$this->insertExtraFields(); + if ($result < 0) + { + $error++; + } + } + } + if (! $notrigger) { // Call trigger @@ -242,6 +255,10 @@ class PaymentSalary extends CommonObject $this->fk_account = $obj->fk_account; $this->fk_type = $obj->fk_type; $this->rappro = $obj->rappro; + + // Retreive all extrafield + // fetch optionals attributes and labels + $this->fetch_optionals(); } $this->db->free($resql); @@ -272,6 +289,19 @@ class PaymentSalary extends CommonObject if ($result < 0) return -1; // End call triggers + // Delete donation + if (! $error) + { + $sql = "DELETE FROM " . MAIN_DB_PREFIX . "payment_salary_extrafields"; + $sql.= " WHERE fk_object=" . $this->id; + + $resql = $this->db->query($sql); + if (! $resql) + { + $this->errors[] = $this->db->lasterror(); + $error++; + } + } $sql = "DELETE FROM ".MAIN_DB_PREFIX."payment_salary"; $sql.= " WHERE rowid=".$this->id; @@ -418,6 +448,18 @@ class PaymentSalary extends CommonObject $result=$acc->fetch($this->accountid); if ($result <= 0) dol_print_error($this->db); + // Update extrafield + if (! $error) { + if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used + { + $result=$this->insertExtraFields(); + if ($result < 0) + { + $error++; + } + } + } + // Insert payment into llx_bank // Add link 'payment_salary' in bank_url between payment and bank transaction $bank_line_id = $acc->addline( @@ -449,7 +491,7 @@ class PaymentSalary extends CommonObject if (! $error) { // Add link 'payment_salary' in bank_url between payment and bank transaction - $url=DOL_URL_ROOT.'/compta/salaries/card.php?id='; + $url=DOL_URL_ROOT.'/salaries/card.php?id='; $result=$acc->add_url_line($bank_line_id, $this->id, $url, "(SalaryPayment)", "payment_salary"); if ($result <= 0) @@ -554,7 +596,7 @@ class PaymentSalary extends CommonObject $label.= '
'; $label.= '' . $langs->trans('Ref') . ': ' . $this->ref; - $url = DOL_URL_ROOT.'/compta/salaries/card.php?id='.$this->id; + $url = DOL_URL_ROOT.'/salaries/card.php?id='.$this->id; if ($option != 'nolink') { diff --git a/htdocs/compta/salaries/class/salariesstats.class.php b/htdocs/salaries/class/salariesstats.class.php similarity index 97% rename from htdocs/compta/salaries/class/salariesstats.class.php rename to htdocs/salaries/class/salariesstats.class.php index 0287f4978df..8671c4b6b0d 100644 --- a/htdocs/compta/salaries/class/salariesstats.class.php +++ b/htdocs/salaries/class/salariesstats.class.php @@ -17,12 +17,12 @@ */ /** - * \file htdocs/compta/salaries/class/salariesstats.class.php + * \file htdocs/salaries/class/salariesstats.class.php * \ingroup salaries * \brief Fichier de la classe de gestion des stats des salaires */ include_once DOL_DOCUMENT_ROOT . '/core/class/stats.class.php'; -include_once DOL_DOCUMENT_ROOT . '/compta/salaries/class/paymentsalary.class.php'; +include_once DOL_DOCUMENT_ROOT . '/salaries/class/paymentsalary.class.php'; /** * Classe permettant la gestion des stats des salaires diff --git a/htdocs/compta/salaries/document.php b/htdocs/salaries/document.php similarity index 91% rename from htdocs/compta/salaries/document.php rename to htdocs/salaries/document.php index 3ff92d23c1c..8cf985c1b88 100644 --- a/htdocs/compta/salaries/document.php +++ b/htdocs/salaries/document.php @@ -6,7 +6,7 @@ * Copyright (C) 2005 Simon TOSSER * Copyright (C) 2011-2012 Juanjo Menent * Copyright (C) 2013 Cédric Salvador - * Copyright (C) 2015-2017 Alexandre Spangaro + * Copyright (C) 2015-2019 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 @@ -24,16 +24,16 @@ */ /** - * \file htdocs/compta/salaries/document.php + * \file htdocs/salaries/document.php * \ingroup salaries * \brief Page of linked files onto salaries */ -require '../../main.inc.php'; +require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/salaries.lib.php'; -require_once DOL_DOCUMENT_ROOT.'/compta/salaries/class/paymentsalary.class.php'; +require_once DOL_DOCUMENT_ROOT.'/salaries/class/paymentsalary.class.php'; // Load translation files required by the page $langs->loadLangs(array("compta","bills","users","salaries","hrm")); @@ -99,7 +99,7 @@ if ($object->id) $totalsize+=$file['size']; } - $linkback = ''.$langs->trans("BackToList").''; + $linkback = ''.$langs->trans("BackToList").''; $morehtmlref='
'; diff --git a/htdocs/compta/salaries/info.php b/htdocs/salaries/info.php similarity index 84% rename from htdocs/compta/salaries/info.php rename to htdocs/salaries/info.php index 4ef9691bd31..59de25378f7 100644 --- a/htdocs/compta/salaries/info.php +++ b/htdocs/salaries/info.php @@ -1,7 +1,7 @@ * Copyright (C) 2015 Charlie BENKE - * Copyright (C) 2017 Alexandre Spangaro + * Copyright (C) 2017-2019 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,13 +18,13 @@ */ /** - * \file htdocs/compta/salaries/info.php + * \file htdocs/salaries/info.php * \ingroup salaries * \brief Page with info about salaries contribution */ -require '../../main.inc.php'; -require_once DOL_DOCUMENT_ROOT.'/compta/salaries/class/paymentsalary.class.php'; +require '../main.inc.php'; +require_once DOL_DOCUMENT_ROOT.'/salaries/class/paymentsalary.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/salaries.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; @@ -54,7 +54,7 @@ $head = salaries_prepare_head($object); dol_fiche_head($head, 'info', $langs->trans("SalaryPayment"), -1, 'payment'); -$linkback = ''.$langs->trans("BackToList").''; +$linkback = ''.$langs->trans("BackToList").''; $morehtmlref='
'; diff --git a/htdocs/compta/salaries/list.php b/htdocs/salaries/list.php similarity index 96% rename from htdocs/compta/salaries/list.php rename to htdocs/salaries/list.php index 4fa8bd09a76..8694b99ae78 100644 --- a/htdocs/compta/salaries/list.php +++ b/htdocs/salaries/list.php @@ -1,5 +1,5 @@ +/* Copyright (C) 2011-2019 Alexandre Spangaro * Copyright (C) 2015-2016 Laurent Destailleur * Copyright (C) 2015 Jean-François Ferry * @@ -18,13 +18,13 @@ */ /** - * \file htdocs/compta/salaries/list.php + * \file htdocs/salaries/list.php * \ingroup salaries * \brief List of salaries payments */ -require '../../main.inc.php'; -require_once DOL_DOCUMENT_ROOT.'/compta/salaries/class/paymentsalary.class.php'; +require '../main.inc.php'; +require_once DOL_DOCUMENT_ROOT.'/salaries/class/paymentsalary.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; if (! empty($conf->accounting->enabled)) require_once DOL_DOCUMENT_ROOT . '/accountancy/class/accountingjournal.class.php'; @@ -150,7 +150,7 @@ if ($result) $newcardbutton=''; if (! empty($user->rights->salaries->write)) { - $newcardbutton=''.$langs->trans('NewSalaryPayment').''; + $newcardbutton=''.$langs->trans('NewSalaryPayment').''; $newcardbutton.= ''; $newcardbutton.= ''; } diff --git a/htdocs/compta/salaries/stats/index.php b/htdocs/salaries/stats/index.php similarity index 97% rename from htdocs/compta/salaries/stats/index.php rename to htdocs/salaries/stats/index.php index d6f94427cce..cac3c8c9f34 100644 --- a/htdocs/compta/salaries/stats/index.php +++ b/htdocs/salaries/stats/index.php @@ -17,14 +17,14 @@ */ /** - * \file htdocs/compta/salaries/stats/index.php + * \file htdocs/salaries/stats/index.php * \ingroup salaries * \brief Page for statistics of module salaries */ require '../../../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/dolgraph.class.php'; -require_once DOL_DOCUMENT_ROOT.'/compta/salaries/class/salariesstats.class.php'; +require_once DOL_DOCUMENT_ROOT.'/salaries/class/salariesstats.class.php'; // Load translation files required by the page $langs->loadLangs(array("salaries","companies")); @@ -178,7 +178,7 @@ if (! count($arrayyears)) $arrayyears[$nowyear]=$nowyear; $h=0; $head = array(); -$head[$h][0] = DOL_URL_ROOT . '/compta/salaries/stats/index.php'; +$head[$h][0] = DOL_URL_ROOT . '/salaries/stats/index.php'; $head[$h][1] = $langs->trans("ByMonthYear"); $head[$h][2] = 'byyear'; $h++; diff --git a/htdocs/user/bank.php b/htdocs/user/bank.php index 196819f1a4a..76d1f6d4c69 100644 --- a/htdocs/user/bank.php +++ b/htdocs/user/bank.php @@ -34,7 +34,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT.'/user/class/userbankaccount.class.php'; if (! empty($conf->holiday->enabled)) require_once DOL_DOCUMENT_ROOT.'/holiday/class/holiday.class.php'; if (! empty($conf->expensereport->enabled)) require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php'; -if (! empty($conf->salaries->enabled)) require_once DOL_DOCUMENT_ROOT.'/compta/salaries/class/paymentsalary.class.php'; +if (! empty($conf->salaries->enabled)) require_once DOL_DOCUMENT_ROOT.'/salaries/class/paymentsalary.class.php'; // Load translation files required by page $langs->loadLangs(array('companies', 'commercial', 'banks', 'bills', 'trips', 'holiday', 'salaries')); @@ -307,7 +307,7 @@ if ($action != 'edit' && $action != 'create') // If not bank account yet, $acco print ''; print ''; - print '
'; + print ''; print ''; From ec34ce1e6418f613f6be2aeb5994a6d0737c3141 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 23:11:00 +0200 Subject: [PATCH 758/828] Maxi debug of module ticket --- htdocs/core/class/html.formticket.class.php | 88 +++++++++++++++++---- htdocs/public/ticket/index.php | 2 +- htdocs/public/ticket/list.php | 2 +- htdocs/public/ticket/view.php | 68 ++++++++++++---- htdocs/ticket/card.php | 47 +++++------ 5 files changed, 152 insertions(+), 55 deletions(-) diff --git a/htdocs/core/class/html.formticket.class.php b/htdocs/core/class/html.formticket.class.php index 6f712fa6c4d..fdbce981e72 100644 --- a/htdocs/core/class/html.formticket.class.php +++ b/htdocs/core/class/html.formticket.class.php @@ -733,40 +733,97 @@ class FormTicket print ajax_combobox('select'.$htmlname); } + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + /** + * Clear list of attached files in send mail form (also stored in session) + * + * @return void + */ + public function clear_attached_files() + { + // phpcs:enable + global $conf,$user; + require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; + + // Set tmp user directory + $vardir=$conf->user->dir_output."/".$user->id; + $upload_dir = $vardir.'/temp/'; // TODO Add $keytoavoidconflict in upload_dir path + if (is_dir($upload_dir)) dol_delete_dir_recursive($upload_dir); + + $keytoavoidconflict = empty($this->trackid)?'':'-'.$this->trackid; // this->trackid must be defined + unset($_SESSION["listofpaths".$keytoavoidconflict]); + unset($_SESSION["listofnames".$keytoavoidconflict]); + unset($_SESSION["listofmimes".$keytoavoidconflict]); + } + /** * Show the form to add message on ticket * - * @param string $width Width of form - * @return void + * @param string $width Width of form + * @return void */ public function showMessageForm($width = '40%') { - global $conf, $langs, $user, $mysoc; + global $conf, $langs, $user, $hookmanager, $form, $mysoc; + + $formmail = new FormMail($this->db); + $addfileaction = 'addfile'; + + if (! is_object($form)) $form=new Form($this->db); // Load translation files required by the page $langs->loadLangs(array('other', 'mails')); - $addfileaction = 'addfile'; + // Clear temp files. Must be done at beginning, before call of triggers + if (GETPOST('mode', 'alpha') == 'init' || (GETPOST('modelmailselected', 'alpha') && GETPOST('modelmailselected', 'alpha') != '-1')) + { + $this->clear_attached_files(); + } - $form = new Form($this->db); - $formmail = new FormMail($this->db); + // Define output language + $outputlangs = $langs; + $newlang = ''; + if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang = $this->param['langsmodels']; + if (! empty($newlang)) + { + $outputlangs = new Translate("", $conf); + $outputlangs->setDefaultLang($newlang); + $outputlangs->load('other'); + } + // Get message template for $this->param["models"] into c_email_templates + $arraydefaultmessage = -1; + if ($this->param['models'] != 'none') + { + $model_id=0; + if (array_key_exists('models_id', $this->param)) + { + $model_id=$this->param["models_id"]; + } + + $arraydefaultmessage=$formmail->getEMailTemplate($this->db, $this->param["models"], $user, $outputlangs, $model_id); // If $model_id is empty, preselect the first one + } // Define list of attached files $listofpaths = array(); $listofnames = array(); $listofmimes = array(); - if (!empty($_SESSION["listofpaths"])) { - $listofpaths = explode(';', $_SESSION["listofpaths"]); + $keytoavoidconflict = empty($this->trackid)?'':'-'.$this->trackid; // this->trackid must be defined + + if (GETPOST('mode', 'alpha') == 'init' || (GETPOST('modelmailselected', 'alpha') && GETPOST('modelmailselected', 'alpha') != '-1')) + { + if (! empty($arraydefaultmessage->joinfiles) && is_array($this->param['fileinit'])) + { + foreach($this->param['fileinit'] as $file) + { + $this->add_attached_files($file, basename($file), dol_mimetype($file)); + } + } } - if (!empty($_SESSION["listofnames"])) { - $listofnames = explode(';', $_SESSION["listofnames"]); - } - - if (!empty($_SESSION["listofmimes"])) { - $listofmimes = explode(';', $_SESSION["listofmimes"]); - } + if (! empty($_SESSION["listofpaths".$keytoavoidconflict])) $listofpaths=explode(';', $_SESSION["listofpaths".$keytoavoidconflict]); + if (! empty($_SESSION["listofnames".$keytoavoidconflict])) $listofnames=explode(';', $_SESSION["listofnames".$keytoavoidconflict]); + if (! empty($_SESSION["listofmimes".$keytoavoidconflict])) $listofmimes=explode(';', $_SESSION["listofmimes".$keytoavoidconflict]); // Define output language $outputlangs = $langs; @@ -808,6 +865,7 @@ class FormTicket print ''; print ''; print ''; + print ''; foreach ($this->param as $key => $value) { print ''; } diff --git a/htdocs/public/ticket/index.php b/htdocs/public/ticket/index.php index 2e138312102..b7f7bd71088 100644 --- a/htdocs/public/ticket/index.php +++ b/htdocs/public/ticket/index.php @@ -77,7 +77,7 @@ print ''; print ''; // End of page -htmlPrintOnlinePaymentFooter($mysoc, $langs, 1, $suffix, $object); +htmlPrintOnlinePaymentFooter($mysoc, $langs, 0, $suffix, $object); llxFooter('', 'public'); diff --git a/htdocs/public/ticket/list.php b/htdocs/public/ticket/list.php index 39736c6d857..88b8426fef9 100644 --- a/htdocs/public/ticket/list.php +++ b/htdocs/public/ticket/list.php @@ -706,7 +706,7 @@ if ($action == "view_ticketlist") print ""; // End of page -htmlPrintOnlinePaymentFooter($mysoc, $langs, 1, $suffix, $object); +htmlPrintOnlinePaymentFooter($mysoc, $langs, 0, $suffix, $object); llxFooter('', 'public'); diff --git a/htdocs/public/ticket/view.php b/htdocs/public/ticket/view.php index be77e50ea28..e7df24c16f3 100644 --- a/htdocs/public/ticket/view.php +++ b/htdocs/public/ticket/view.php @@ -48,8 +48,9 @@ $langs->loadLangs(array("companies","other","ticket")); // Get parameters $track_id = GETPOST('track_id', 'alpha'); -$action = GETPOST('action', 'aZ09'); -$email = GETPOST('email', 'alpha'); +$cancel = GETPOST('cancel', 'alpha'); +$action = GETPOST('action', 'aZ09'); +$email = GETPOST('email', 'alpha'); if (GETPOST('btn_view_ticket')) { unset($_SESSION['email_customer']); @@ -65,7 +66,17 @@ $object = new ActionsTicket($db); * Actions */ -if ($action == "view_ticket" || $action == "add_message" || $action == "close" || $action == "confirm_public_close" || $action == "add_public_message") { +if ($cancel) +{ + if (! empty($backtopage)) + { + header("Location: ".$backtopage); + exit; + } + $action='view_ticket'; +} + +if ($action == "view_ticket" || $action == "presend" || $action == "close" || $action == "confirm_public_close" || $action == "add_message") { $error = 0; $display_ticket = false; if (!strlen($track_id)) { @@ -108,12 +119,33 @@ if ($action == "view_ticket" || $action == "add_message" || $action == "close" | } } } - if ($object->dao->fk_soc > 0) { + // Check email of thirdparty of ticket + if ($object->dao->fk_soc > 0 || $object->dao->socid > 0) { $object->dao->fetch_thirdparty(); + if ($email == $object->dao->thirdparty->email) { + $display_ticket = true; + $_SESSION['email_customer'] = $email; + } } - if ($email == $object->dao->origin_email || $email == $object->dao->thirdparty->email) { - $display_ticket = true; - $_SESSION['email_customer'] = $email; + // Check if email is email of creator + if ($object->dao->fk_user_create > 0) + { + $tmpuser = new User($db); + $tmpuser->fetch($object->dao->fk_user_create); + if ($email == $tmpuser->email) { + $display_ticket = true; + $_SESSION['email_customer'] = $email; + } + } + // Check if email is email of creator + if ($object->dao->fk_user_assign > 0 && $object->dao->fk_user_assign != $object->dao->fk_user_create) + { + $tmpuser = new User($db); + $tmpuser->fetch($object->dao->fk_user_assign); + if ($email == $tmpuser->email) { + $display_ticket = true; + $_SESSION['email_customer'] = $email; + } } } else { $error++; @@ -122,9 +154,11 @@ if ($action == "view_ticket" || $action == "add_message" || $action == "close" | } } - if ($action == "add_public_message") + if (! $error && $action == "add_message" && $display_ticket) { // TODO Add message... + $ret = $object->dao->newMessage($user, $action, 0); + @@ -137,9 +171,9 @@ if ($action == "view_ticket" || $action == "add_message" || $action == "close" | if ($error || $errors) { setEventMessages($object->error, $object->errors, 'errors'); - if ($action == "add_public_message") + if ($action == "add_message") { - $action = 'add_message'; + $action = 'presend'; } else { @@ -172,7 +206,7 @@ llxHeaderTicket($langs->trans("Tickets"), "", 0, 0, $arrayofjs, $arrayofcss); print '
'; -if ($action == "view_ticket" || $action == "add_message" || $action == "close" || $action == "confirm_public_close") { +if ($action == "view_ticket" || $action == "presend" || $action == "close" || $action == "confirm_public_close") { if ($display_ticket) { // Confirmation close if ($action == 'close') { @@ -272,22 +306,24 @@ if ($action == "view_ticket" || $action == "add_message" || $action == "close" | print '
'; - if ($action == 'add_message') { + if ($action == 'presend') { print load_fiche_titre($langs->trans('TicketAddMessage'), '', 'messages@ticket'); $formticket = new FormTicket($db); - $formticket->action = "add_public_message"; + $formticket->action = "add_message"; $formticket->track_id = $object->dao->track_id; $formticket->id = $object->dao->id; $formticket->param = array('track_id' => $object->dao->track_id, 'fk_user_create' => '-1', 'returnurl' => DOL_URL_ROOT.'/public/ticket/view.php'); $formticket->withfile = 2; + $formticket->withcancel = 1; + $formticket->showMessageForm('100%'); } - if ($action != 'add_message') { + if ($action != 'presend') { print ''; print ''; print ''; @@ -302,7 +338,7 @@ if ($action == "view_ticket" || $action == "add_message" || $action == "close" | if ($object->dao->fk_statut < 8) { // New message - print ''; + print ''; // Close ticket if ($object->dao->fk_statut > 0 && $object->dao->fk_statut < 8) { @@ -346,7 +382,7 @@ if ($action == "view_ticket" || $action == "add_message" || $action == "close" | print "
"; // End of page -htmlPrintOnlinePaymentFooter($mysoc, $langs, 1, $suffix, $object); +htmlPrintOnlinePaymentFooter($mysoc, $langs, 0, $suffix, $object); llxFooter('', 'public'); diff --git a/htdocs/ticket/card.php b/htdocs/ticket/card.php index af65fbd2715..ba2d14b06ce 100644 --- a/htdocs/ticket/card.php +++ b/htdocs/ticket/card.php @@ -75,7 +75,7 @@ if (empty($action) && empty($id) && empty($ref)) $action='view'; //Select mail models is same action as add_message if (GETPOST('modelselected', 'alpha')) { - $action = 'create_message'; + $action = 'presend'; } // Load object @@ -255,17 +255,17 @@ if (GETPOST('add', 'alpha') && $user->rights->ticket->write) { if ($action == 'edit' && $user->rights->ticket->write) { $error = 0; - if ($object->fetch(GETPOST('id')) < 0) { + if ($object->fetch(GETPOST('id', 'int')) < 0) { $error++; array_push($object->errors, $langs->trans("ErrorTicketIsNotValid")); $_GET["action"] = $_POST["action"] = ''; } } -if (GETPOST('update') && GETPOST('id') && $user->rights->ticket->write) { +if (GETPOST('update', 'alpha') && GETPOST('id', 'int') && $user->rights->ticket->write) { $error = 0; - $ret = $object->fetch(GETPOST('id')); + $ret = $object->fetch(GETPOST('id', 'int')); if ($ret < 0) { $error++; array_push($object->errors, $langs->trans("ErrorTicketIsNotValid")); @@ -385,7 +385,7 @@ if ($action == "add_message" && GETPOST('btn_add_message') && $user->rights->tic exit; } else { setEventMessages($object->error, null, 'errors'); - $action = 'create_message'; + $action = 'presend'; } } @@ -477,7 +477,6 @@ if ($action == 'setsubject') { } } - if ($action == 'confirm_reopen' && $user->rights->ticket->manage && !GETPOST('cancel')) { if ($object->fetch(GETPOST('id', 'int'), '', GETPOST('track_id', 'alpha')) >= 0) { // prevent browser refresh from reopening ticket several times @@ -601,6 +600,8 @@ $autocopy='MAIN_MAIL_AUTOCOPY_TICKET_TO'; // used to know the automatic BCC to $trackid='tic'.$object->id; include DOL_DOCUMENT_ROOT.'/core/actions_sendmails.inc.php'; +// Set $action to correct value for the case we used presend action to add a message +if (GETPOSTISSET('actionbis') && $action == 'presend') $action = 'presend_addmessage'; /* @@ -640,7 +641,7 @@ if ($action == 'create' || $action == 'presend') $formticket->showForm(1); } -if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'dellink' || $action == 'create_message' || $action == 'close' || $action == 'delete' || $action == 'editcustomer' || $action == 'progression' || $action == 'reopen' +if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'dellink' || $action == 'presend' || $action == 'presend_addmessage' || $action == 'close' || $action == 'delete' || $action == 'editcustomer' || $action == 'progression' || $action == 'reopen' || $action == 'editsubject' || $action == 'edit_extras' || $action == 'update_extras' || $action == 'edit_extrafields' || $action == 'set_extrafields' || $action == 'classify' || $action == 'sel_contract' || $action == 'edit_message_init' || $action == 'set_status' || $action == 'dellink') { if ($res > 0) @@ -1155,7 +1156,7 @@ if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'd // Buttons for actions - if ($action != 'presend' && $action != 'editline') { + if ($action != 'presend' && $action != 'presend_addmessage' && $action != 'editline') { print '
'."\n"; $parameters=array(); $reshook=$hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook @@ -1164,8 +1165,8 @@ if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'd if (empty($reshook)) { // Show link to add a message (if read and not closed) - if ($object->fk_statut < Ticket::STATUS_CLOSED && $action != "create_message") { - print ''; + if ($object->fk_statut < Ticket::STATUS_CLOSED && $action != "presend" && $action != "presend_addmessage") { + print ''; } // Link to create an intervention @@ -1200,8 +1201,10 @@ if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'd if (GETPOST('modelselected')) { $action = 'presend'; } + // Set $action to correct value for the case we used presend action to add a message + if (GETPOSTISSET('actionbis') && $action == 'presend') $action = 'presend_addmessage'; - if ($action != 'create_message') + if ($action != 'presend' && $action != 'presend_addmessage') { print '
'; print ''; // ancre @@ -1233,23 +1236,23 @@ if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'd $substitutionarray['__THIRDPARTY_NAME__'] = $object->thirdparty->name; } $substitutionarray['__SIGNATURE__'] = $user->signature; - $substitutionarray['__TICKETSUP_TRACKID__'] = $object->track_id; - $substitutionarray['__TICKETSUP_REF__'] = $object->ref; - $substitutionarray['__TICKETSUP_SUBJECT__'] = $object->subject; - $substitutionarray['__TICKETSUP_TYPE__'] = $object->type_code; - $substitutionarray['__TICKETSUP_SEVERITY__'] = $object->severity_code; - $substitutionarray['__TICKETSUP_CATEGORY__'] = $object->category_code; // For backward compatibility - $substitutionarray['__TICKETSUP_ANALYTIC_CODE__'] = $object->category_code; - $substitutionarray['__TICKETSUP_MESSAGE__'] = $object->message; - $substitutionarray['__TICKETSUP_PROGRESSION__'] = $object->progress; + $substitutionarray['__TICKET_TRACKID__'] = $object->track_id; + $substitutionarray['__TICKET_REF__'] = $object->ref; + $substitutionarray['__TICKET_SUBJECT__'] = $object->subject; + $substitutionarray['__TICKET_TYPE__'] = $object->type_code; + $substitutionarray['__TICKET_SEVERITY__'] = $object->severity_code; + $substitutionarray['__TICKET_CATEGORY__'] = $object->category_code; // For backward compatibility + $substitutionarray['__TICKET_ANALYTIC_CODE__'] = $object->category_code; + $substitutionarray['__TICKET_MESSAGE__'] = $object->message; + $substitutionarray['__TICKET_PROGRESSION__'] = $object->progress; if ($object->fk_user_assign > 0) { $userstat->fetch($object->fk_user_assign); - $substitutionarray['__TICKETSUP_USER_ASSIGN__'] = dolGetFirstLastname($userstat->firstname, $userstat->lastname); + $substitutionarray['__TICKET_USER_ASSIGN__'] = dolGetFirstLastname($userstat->firstname, $userstat->lastname); } if ($object->fk_user_create > 0) { $userstat->fetch($object->fk_user_create); - $substitutionarray['__TICKETSUP_USER_CREATE__'] = dolGetFirstLastname($userstat->firstname, $userstat->lastname); + $substitutionarray['__TICKET_USER_CREATE__'] = dolGetFirstLastname($userstat->firstname, $userstat->lastname); } foreach ($substitutionarray as $key => $val) { $help.=$key.' -> '.$langs->trans($val).'
'; From 5f042cf6adf4d822d11b4221cbc6cce6b7ac6f7e Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Fri, 19 Jul 2019 23:19:06 +0200 Subject: [PATCH 759/828] QUAL Move ligne.php to line.php --- htdocs/compta/bank/bankentries_list.php | 10 +++++----- htdocs/compta/bank/class/account.class.php | 2 +- htdocs/compta/bank/info.php | 2 +- htdocs/compta/bank/{ligne.php => line.php} | 8 ++++---- htdocs/compta/bank/releve.php | 4 ++-- htdocs/compta/bank/transfer.php | 4 ++-- htdocs/compta/prelevement/card.php | 2 +- htdocs/compta/prelevement/fiche-rejet.php | 2 +- htdocs/compta/prelevement/{ligne.php => line.php} | 12 ++++++------ htdocs/compta/prelevement/list.php | 2 +- htdocs/compta/prelevement/rejets.php | 2 +- htdocs/contrat/index.php | 4 ++-- htdocs/install/upgrade2.php | 2 +- htdocs/public/stripe/ipn.php | 4 ++-- 14 files changed, 30 insertions(+), 30 deletions(-) rename htdocs/compta/bank/{ligne.php => line.php} (99%) rename htdocs/compta/prelevement/{ligne.php => line.php} (95%) diff --git a/htdocs/compta/bank/bankentries_list.php b/htdocs/compta/bank/bankentries_list.php index 5609bb6b598..37a0b9cb71b 100644 --- a/htdocs/compta/bank/bankentries_list.php +++ b/htdocs/compta/bank/bankentries_list.php @@ -1116,7 +1116,7 @@ if ($resql) if (! empty($arrayfields['b.rowid']['checked'])) { print '
'; if (! $i) $totalarray['nbfield']++; } @@ -1126,7 +1126,7 @@ if ($resql) { print "'; // Description - print '"; } diff --git a/htdocs/compta/bank/transfer.php b/htdocs/compta/bank/transfer.php index 199b1f9c08d..05c1f3a1515 100644 --- a/htdocs/compta/bank/transfer.php +++ b/htdocs/compta/bank/transfer.php @@ -120,9 +120,9 @@ if ($action == 'add') if (! $error) $bank_line_id_to = $accountto->addline($dateo, $typeto, $label, price2num($amountto), '', '', $user); if (! ($bank_line_id_to > 0)) $error++; - if (! $error) $result=$accountfrom->add_url_line($bank_line_id_from, $bank_line_id_to, DOL_URL_ROOT.'/compta/bank/ligne.php?rowid=', '(banktransfert)', 'banktransfert'); + if (! $error) $result=$accountfrom->add_url_line($bank_line_id_from, $bank_line_id_to, DOL_URL_ROOT.'/compta/bank/line.php?rowid=', '(banktransfert)', 'banktransfert'); if (! ($result > 0)) $error++; - if (! $error) $result=$accountto->add_url_line($bank_line_id_to, $bank_line_id_from, DOL_URL_ROOT.'/compta/bank/ligne.php?rowid=', '(banktransfert)', 'banktransfert'); + if (! $error) $result=$accountto->add_url_line($bank_line_id_to, $bank_line_id_from, DOL_URL_ROOT.'/compta/bank/line.php?rowid=', '(banktransfert)', 'banktransfert'); if (! ($result > 0)) $error++; if (! $error) diff --git a/htdocs/compta/prelevement/card.php b/htdocs/compta/prelevement/card.php index d31efcc9df8..b5473ddacb9 100644 --- a/htdocs/compta/prelevement/card.php +++ b/htdocs/compta/prelevement/card.php @@ -362,7 +362,7 @@ if ($id > 0 || $ref) print "'; diff --git a/htdocs/compta/prelevement/fiche-rejet.php b/htdocs/compta/prelevement/fiche-rejet.php index c930db99012..0e4d28fde2f 100644 --- a/htdocs/compta/prelevement/fiche-rejet.php +++ b/htdocs/compta/prelevement/fiche-rejet.php @@ -203,7 +203,7 @@ if ($resql) print ''; diff --git a/htdocs/compta/prelevement/ligne.php b/htdocs/compta/prelevement/line.php similarity index 95% rename from htdocs/compta/prelevement/ligne.php rename to htdocs/compta/prelevement/line.php index 8b11716bf6f..c9004c04d26 100644 --- a/htdocs/compta/prelevement/ligne.php +++ b/htdocs/compta/prelevement/line.php @@ -20,7 +20,7 @@ */ /** - * \file htdocs/compta/prelevement/ligne.php + * \file htdocs/compta/prelevement/line.php * \ingroup prelevement * \brief card of withdraw line */ @@ -86,7 +86,7 @@ if ($action == 'confirm_rejet') $rej->create($user, $id, GETPOST('motif', 'alpha'), $daterej, $lipre->bon_rowid, GETPOST('facturer', 'int')); - header("Location: ligne.php?id=".$id); + header("Location: line.php?id=".$id); exit; } } @@ -97,7 +97,7 @@ if ($action == 'confirm_rejet') } else { - header("Location: ligne.php?id=".$id); + header("Location: line.php?id=".$id); exit; } } @@ -112,7 +112,7 @@ $invoicestatic=new Facture($db); llxHeader('', $langs->trans("StandingOrder")); $h = 0; -$head[$h][0] = DOL_URL_ROOT.'/compta/prelevement/ligne.php?id='.$id; +$head[$h][0] = DOL_URL_ROOT.'/compta/prelevement/line.php?id='.$id; $head[$h][1] = $langs->trans("Card"); $hselected = $h; $h++; @@ -179,7 +179,7 @@ if ($id) $rej = new RejetPrelevement($db, $user); - print ''; + print ''; print ''; print ''; print '
'.$langs->trans("LastSalaries", ($num<=$MAXLIST?"":$MAXLIST)).''.$langs->trans("AllSalaries").' '.$num.''; print '
'.$langs->trans("LastSalaries", ($num<=$MAXLIST?"":$MAXLIST)).''.$langs->trans("AllSalaries").' '.$num.'
'; - print "rowid.'&save_lastsearch_values=1">'.img_object($langs->trans("ShowPayment").': '.$objp->rowid, 'account', 'class="classfortooltip"').' '.$objp->rowid."   "; + print "rowid.'&save_lastsearch_values=1">'.img_object($langs->trans("ShowPayment").': '.$objp->rowid, 'account', 'class="classfortooltip"').' '.$objp->rowid."   "; print '"; - //print "rowid."&account=".$objp->fk_account."\">"; + //print "rowid."&account=".$objp->fk_account."\">"; $reg=array(); preg_match('/\((.+)\)/i', $objp->label, $reg); // Si texte entoure de parenthee on tente recherche de traduction if ($reg[1] && $langs->trans($reg[1])!=$reg[1]) print $langs->trans($reg[1]); @@ -1459,7 +1459,7 @@ if ($resql) // Transaction reconciliated or edit link if ($objp->conciliated && $bankaccount->canBeConciliated() > 0) // If line not conciliated and account can be conciliated { - print ''; + print ''; print img_edit(); print ''; } @@ -1467,13 +1467,13 @@ if ($resql) { if ($user->rights->banque->modifier || $user->rights->banque->consolidate) { - print ''; + print ''; print img_edit(); print ''; } else { - print ''; + print ''; print img_view(); print ''; } diff --git a/htdocs/compta/bank/class/account.class.php b/htdocs/compta/bank/class/account.class.php index 89a05f3e215..5724178e9de 100644 --- a/htdocs/compta/bank/class/account.class.php +++ b/htdocs/compta/bank/class/account.class.php @@ -2277,7 +2277,7 @@ class AccountLine extends CommonObject $result=''; $label=$langs->trans("ShowTransaction").': '.$this->rowid; - $linkstart = ''; + $linkstart = ''; $linkend=''; $result .= $linkstart; diff --git a/htdocs/compta/bank/info.php b/htdocs/compta/bank/info.php index 7eaeb515aa9..ce9f2f5c2dc 100644 --- a/htdocs/compta/bank/info.php +++ b/htdocs/compta/bank/info.php @@ -45,7 +45,7 @@ $object->info($id); $h=0; -$head[$h][0] = DOL_URL_ROOT.'/compta/bank/ligne.php?rowid='.$id; +$head[$h][0] = DOL_URL_ROOT.'/compta/bank/line.php?rowid='.$id; $head[$h][1] = $langs->trans("Card"); $h++; diff --git a/htdocs/compta/bank/ligne.php b/htdocs/compta/bank/line.php similarity index 99% rename from htdocs/compta/bank/ligne.php rename to htdocs/compta/bank/line.php index 40906bfd455..2b04f83472f 100644 --- a/htdocs/compta/bank/ligne.php +++ b/htdocs/compta/bank/line.php @@ -24,7 +24,7 @@ */ /** - * \file htdocs/compta/bank/ligne.php + * \file htdocs/compta/bank/line.php * \ingroup bank * \brief Page to edit a bank transaction record */ @@ -223,7 +223,7 @@ if ($user->rights->banque->consolidate && ($action == 'num_releve' || $action == else $sql.=", rappro = ".$rappro; $sql.= " WHERE rowid = ".$rowid; - dol_syslog("ligne.php", LOG_DEBUG); + dol_syslog("line.php", LOG_DEBUG); $result = $db->query($sql); if ($result) { @@ -256,7 +256,7 @@ foreach ($cats as $cat) { $tabs = array( array( - DOL_URL_ROOT.'/compta/bank/ligne.php?rowid='.$rowid, + DOL_URL_ROOT.'/compta/bank/line.php?rowid='.$rowid, $langs->trans('Card') ), array( @@ -416,7 +416,7 @@ if ($result) print ''; } elseif ($links[$key]['type']=='banktransfert') { - print ''; + print ''; print img_object($langs->trans('ShowTransaction'), 'payment').' '; print $langs->trans("TransactionOnTheOtherAccount"); print ''; diff --git a/htdocs/compta/bank/releve.php b/htdocs/compta/bank/releve.php index b93f381c555..53cdde900e3 100644 --- a/htdocs/compta/bank/releve.php +++ b/htdocs/compta/bank/releve.php @@ -616,7 +616,7 @@ else print ''.$type_label.' '.($objp->num_chq?$objp->num_chq:'').$link.''; + print ''; $reg=array(); preg_match('/\((.+)\)/i', $objp->label, $reg); // Si texte entoure de parenthese on tente recherche de traduction if ($reg[1] && $langs->trans($reg[1])!=$reg[1]) print $langs->trans($reg[1]); @@ -778,7 +778,7 @@ else if ($user->rights->banque->modifier || $user->rights->banque->consolidate) { - print ''; + print ''; print img_edit(); print ""; print $ligne->LibStatut($obj->statut, 2); print " "; - print ''; + print ''; print sprintf("%06s", $obj->rowid); print '
'; - print ''; + print ''; print img_picto('', 'statut'.$obj->statut).' '; print substr('000000'.$obj->rowid, -6); print '
'; @@ -231,7 +231,7 @@ if ($id) { if ($user->rights->prelevement->bons->credit) { - print "id\">".$langs->trans("StandingOrderReject").""; + print "id\">".$langs->trans("StandingOrderReject").""; } else { diff --git a/htdocs/compta/prelevement/list.php b/htdocs/compta/prelevement/list.php index 81e58e19cca..dd53988d2ec 100644 --- a/htdocs/compta/prelevement/list.php +++ b/htdocs/compta/prelevement/list.php @@ -172,7 +172,7 @@ if ($result) print $ligne->LibStatut($obj->statut_ligne, 2); print " "; - print ''; + print ''; print substr('000000'.$obj->rowid_ligne, -6); print ''; diff --git a/htdocs/compta/prelevement/rejets.php b/htdocs/compta/prelevement/rejets.php index 333d07a4617..5d48cec2a75 100644 --- a/htdocs/compta/prelevement/rejets.php +++ b/htdocs/compta/prelevement/rejets.php @@ -100,7 +100,7 @@ if ($result) print '"; diff --git a/htdocs/contrat/index.php b/htdocs/contrat/index.php index 3bf047c87c8..85538fe9ea8 100644 --- a/htdocs/contrat/index.php +++ b/htdocs/contrat/index.php @@ -517,7 +517,7 @@ if ($resql) $staticcompany->name=$obj->name; print $staticcompany->getNomUrl(1, '', 20); print ''; - print ''; print "\n"; @@ -596,7 +596,7 @@ if ($resql) $staticcompany->name=$obj->name; print $staticcompany->getNomUrl(1, '', 20); print ''; - print ''; print "\n"; diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php index 11bfe9ff99f..24d73da5485 100644 --- a/htdocs/install/upgrade2.php +++ b/htdocs/install/upgrade2.php @@ -1089,7 +1089,7 @@ function migrate_links_transfert($db, $langs, $conf) $sql.= "fk_bank, url_id, url, label, type"; $sql.= ")"; $sql.= " VALUES ("; - $sql.= $obj->barowid.",".$obj->bbrowid.", '/compta/bank/ligne.php?rowid=', '(banktransfert)', 'banktransfert'"; + $sql.= $obj->barowid.",".$obj->bbrowid.", '/compta/bank/line.php?rowid=', '(banktransfert)', 'banktransfert'"; $sql.= ")"; print $sql.'
'; diff --git a/htdocs/public/stripe/ipn.php b/htdocs/public/stripe/ipn.php index bfd1788e12f..2f44c6390ff 100644 --- a/htdocs/public/stripe/ipn.php +++ b/htdocs/public/stripe/ipn.php @@ -232,9 +232,9 @@ elseif ($event->type == 'payout.paid') { if (! $error) $bank_line_id_to = $accountto->addline($dateo, $typeto, $label, price2num($amount), '', '', $user); if (! ($bank_line_id_to > 0)) $error++; - if (! $error) $result=$accountfrom->add_url_line($bank_line_id_from, $bank_line_id_to, DOL_URL_ROOT.'/compta/bank/ligne.php?rowid=', '(banktransfert)', 'banktransfert'); + if (! $error) $result=$accountfrom->add_url_line($bank_line_id_from, $bank_line_id_to, DOL_URL_ROOT.'/compta/bank/line.php?rowid=', '(banktransfert)', 'banktransfert'); if (! ($result > 0)) $error++; - if (! $error) $result=$accountto->add_url_line($bank_line_id_to, $bank_line_id_from, DOL_URL_ROOT.'/compta/bank/ligne.php?rowid=', '(banktransfert)', 'banktransfert'); + if (! $error) $result=$accountto->add_url_line($bank_line_id_to, $bank_line_id_from, DOL_URL_ROOT.'/compta/bank/line.php?rowid=', '(banktransfert)', 'banktransfert'); if (! ($result > 0)) $error++; } From feee4374713d3a844de3141aec9b87004f5702c0 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 23:43:49 +0200 Subject: [PATCH 760/828] FIX Closing ticket from public interface --- htdocs/public/ticket/list.php | 130 +++++++++++++-------------- htdocs/public/ticket/view.php | 20 +++-- htdocs/ticket/card.php | 9 +- htdocs/ticket/class/ticket.class.php | 2 +- htdocs/ticket/list.php | 16 ++-- 5 files changed, 93 insertions(+), 84 deletions(-) diff --git a/htdocs/public/ticket/list.php b/htdocs/public/ticket/list.php index 88b8426fef9..5cbe0099b6d 100644 --- a/htdocs/public/ticket/list.php +++ b/htdocs/public/ticket/list.php @@ -237,37 +237,37 @@ if ($action == "view_ticketlist") } if (!empty($search_subject)) { $filter['t.subject'] = $search_subject; - $param .= '&search_subject=' . $search_subject; + $param .= '&search_subject=' .urlencode($search_subject); } if (!empty($search_type)) { $filter['t.type_code'] = $search_type; - $param .= '&search_type=' . $search_type; + $param .= '&search_type=' . urlencode($search_type); } if (!empty($search_category)) { $filter['t.category_code'] = $search_category; - $param .= '&search_category=' . $search_category; + $param .= '&search_category=' . urlencode($search_category); } if (!empty($search_severity)) { $filter['t.severity_code'] = $search_severity; - $param .= '&search_severity=' . $search_severity; + $param .= '&search_severity=' . urlencode($search_severity); } if (!empty($search_fk_user_assign)) { // -1 value = all so no filter if ($search_fk_user_assign > 0) { $filter['t.fk_user_assign'] = $search_fk_user_assign; - $param .= '&search_fk_user_assign=' . $search_fk_user_assign; + $param .= '&search_fk_user_assign=' . urlencode($search_fk_user_assign); } } if (!empty($search_fk_user_create)) { // -1 value = all so no filter if ($search_fk_user_create > 0) { $filter['t.fk_user_create'] = $search_fk_user_create; - $param .= '&search_fk_user_create=' . $search_fk_user_create; + $param .= '&search_fk_user_create=' . urlencode($search_fk_user_create); } } if ((isset($search_fk_status) && $search_fk_status != '') && $search_fk_status != '-1' && $search_fk_status != 'non_closed') { $filter['t.fk_statut'] = $search_fk_status; - $param .= '&search_fk_status=' . $search_fk_status; + $param .= '&search_fk_status=' . urlencode($search_fk_status); } if (isset($search_fk_status) && $search_fk_status == 'non_closed') { $filter['t.fk_statut'] = array(0, 1, 3, 4, 5, 6); @@ -388,62 +388,7 @@ if ($action == "view_ticketlist") print '
'; print $ligne->LibStatut($obj->statut, 2).' '; - print ''; + print ''; print substr('000000'.$obj->rowid, -6)."'; + print ''; print $staticcontratligne->LibStatut($obj->statut, 3); print '
'; + print ''; print $staticcontratligne->LibStatut($obj->statut, 3, 1); print '
'; - print ''; - if (!empty($arrayfields['t.datec']['checked'])) { - print_liste_field_titre($arrayfields['t.datec']['label'], $url_page_current, 't.datec', '', $param, '', $sortfield, $sortorder); - } - if (!empty($arrayfields['t.date_read']['checked'])) { - print_liste_field_titre($arrayfields['t.date_read']['label'], $url_page_current, 't.date_read', '', $param, '', $sortfield, $sortorder); - } - if (!empty($arrayfields['t.date_close']['checked'])) { - print_liste_field_titre($arrayfields['t.date_close']['label'], $url_page_current, 't.date_close', '', $param, '', $sortfield, $sortorder); - } - if (!empty($arrayfields['t.ref']['checked'])) { - print_liste_field_titre($arrayfields['t.ref']['label'], $url_page_current, 't.ref', '', $param, '', $sortfield, $sortorder); - } - if (!empty($arrayfields['t.subject']['checked'])) { - print_liste_field_titre($arrayfields['t.subject']['label']); - } - if (!empty($arrayfields['type.code']['checked'])) { - print_liste_field_titre($arrayfields['type.code']['label'], $url_page_current, 'type.code', '', $param, '', $sortfield, $sortorder); - } - if (!empty($arrayfields['category.code']['checked'])) { - print_liste_field_titre($arrayfields['category.code']['label'], $url_page_current, 'category.code', '', $param, '', $sortfield, $sortorder); - } - if (!empty($arrayfields['severity.code']['checked'])) { - print_liste_field_titre($arrayfields['severity.code']['label'], $url_page_current, 'severity.code', '', $param, '', $sortfield, $sortorder); - } - if (!empty($arrayfields['t.progress']['checked'])) { - print_liste_field_titre($arrayfields['t.progress']['label'], $url_page_current, 't.progress', '', $param, '', $sortfield, $sortorder); - } - if (!empty($arrayfields['t.fk_user_create']['checked'])) { - print_liste_field_titre($arrayfields['t.fk_user_create']['label'], $url_page_current, 't.fk_user_create', '', $param, '', $sortfield, $sortorder); - } - if (!empty($arrayfields['t.fk_user_assign']['checked'])) { - print_liste_field_titre($arrayfields['t.fk_user_assign']['label'], $url_page_current, 't.fk_user_assign', '', $param, '', $sortfield, $sortorder); - } - if (!empty($arrayfields['t.tms']['checked'])) { - print_liste_field_titre($arrayfields['t.tms']['label'], $url_page_current, 't.tms', '', $param, '', $sortfield, $sortorder); - } - // Extra fields - if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) { - foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) { - if (!empty($arrayfields["ef." . $key]['checked'])) { - $align = $extrafields->getAlignFlag($key); - print_liste_field_titre($extralabels[$key], $url_page_current, "ef." . $key, "", $param, ($align ? 'align="' . $align . '"' : ''), $sortfield, $sortorder); - } - } - } - if (!empty($arrayfields['t.fk_statut']['checked'])) { - print_liste_field_titre($arrayfields['t.fk_statut']['label'], $url_page_current, 't.fk_statut', '', $param, '', $sortfield, $sortorder); - } - print_liste_field_titre($selectedfields, $url_page_current, "", '', '', 'align="right"', $sortfield, $sortorder, 'maxwidthsearch '); - print ''; - - /* - * Filter bar - */ - + // Filter bar print ''; if (!empty($arrayfields['t.datec']['checked'])) { @@ -463,13 +408,13 @@ if ($action == "view_ticketlist") if (!empty($arrayfields['t.subject']['checked'])) { print ''; } if (!empty($arrayfields['type.code']['checked'])) { print ''; } @@ -524,6 +469,59 @@ if ($action == "view_ticketlist") print ''; print ''; + // Field title + print ''; + if (!empty($arrayfields['t.datec']['checked'])) { + print_liste_field_titre($arrayfields['t.datec']['label'], $url_page_current, 't.datec', '', $param, '', $sortfield, $sortorder); + } + if (!empty($arrayfields['t.date_read']['checked'])) { + print_liste_field_titre($arrayfields['t.date_read']['label'], $url_page_current, 't.date_read', '', $param, '', $sortfield, $sortorder); + } + if (!empty($arrayfields['t.date_close']['checked'])) { + print_liste_field_titre($arrayfields['t.date_close']['label'], $url_page_current, 't.date_close', '', $param, '', $sortfield, $sortorder); + } + if (!empty($arrayfields['t.ref']['checked'])) { + print_liste_field_titre($arrayfields['t.ref']['label'], $url_page_current, 't.ref', '', $param, '', $sortfield, $sortorder); + } + if (!empty($arrayfields['t.subject']['checked'])) { + print_liste_field_titre($arrayfields['t.subject']['label']); + } + if (!empty($arrayfields['type.code']['checked'])) { + print_liste_field_titre($arrayfields['type.code']['label'], $url_page_current, 'type.code', '', $param, '', $sortfield, $sortorder); + } + if (!empty($arrayfields['category.code']['checked'])) { + print_liste_field_titre($arrayfields['category.code']['label'], $url_page_current, 'category.code', '', $param, '', $sortfield, $sortorder); + } + if (!empty($arrayfields['severity.code']['checked'])) { + print_liste_field_titre($arrayfields['severity.code']['label'], $url_page_current, 'severity.code', '', $param, '', $sortfield, $sortorder); + } + if (!empty($arrayfields['t.progress']['checked'])) { + print_liste_field_titre($arrayfields['t.progress']['label'], $url_page_current, 't.progress', '', $param, '', $sortfield, $sortorder); + } + if (!empty($arrayfields['t.fk_user_create']['checked'])) { + print_liste_field_titre($arrayfields['t.fk_user_create']['label'], $url_page_current, 't.fk_user_create', '', $param, '', $sortfield, $sortorder); + } + if (!empty($arrayfields['t.fk_user_assign']['checked'])) { + print_liste_field_titre($arrayfields['t.fk_user_assign']['label'], $url_page_current, 't.fk_user_assign', '', $param, '', $sortfield, $sortorder); + } + if (!empty($arrayfields['t.tms']['checked'])) { + print_liste_field_titre($arrayfields['t.tms']['label'], $url_page_current, 't.tms', '', $param, '', $sortfield, $sortorder); + } + // Extra fields + if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) { + foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) { + if (!empty($arrayfields["ef." . $key]['checked'])) { + $align = $extrafields->getAlignFlag($key); + print_liste_field_titre($extralabels[$key], $url_page_current, "ef." . $key, "", $param, ($align ? 'align="' . $align . '"' : ''), $sortfield, $sortorder); + } + } + } + if (!empty($arrayfields['t.fk_statut']['checked'])) { + print_liste_field_titre($arrayfields['t.fk_statut']['label'], $url_page_current, 't.fk_statut', '', $param, '', $sortfield, $sortorder); + } + print_liste_field_titre($selectedfields, $url_page_current, "", '', '', 'align="right"', $sortfield, $sortorder, 'maxwidthsearch '); + print ''; + while ($obj = $db->fetch_object($resql)) { print ''; @@ -551,7 +549,7 @@ if ($action == "view_ticketlist") // Ref if (!empty($arrayfields['t.ref']['checked'])) { - print ''; } diff --git a/htdocs/public/ticket/view.php b/htdocs/public/ticket/view.php index e7df24c16f3..3c732773b90 100644 --- a/htdocs/public/ticket/view.php +++ b/htdocs/public/ticket/view.php @@ -84,7 +84,6 @@ if ($action == "view_ticket" || $action == "presend" || $action == "close" || $a array_push($object->errors, $langs->trans("ErrorFieldRequired", $langs->transnoentities("TicketTrackId"))); $action = ''; } - if (!strlen($email)) { $error++; array_push($object->errors, $langs->trans("ErrorFieldRequired", $langs->transnoentities("Email"))); @@ -154,6 +153,19 @@ if ($action == "view_ticket" || $action == "presend" || $action == "close" || $a } } + if (! $error && $action == 'confirm_public_close' && $display_ticket) + { + if ($object->dao->close($user)) { + setEventMessages($langs->trans('TicketMarkedAsClosed'), null, 'mesgs'); + + $url = 'view.php?action=view_ticket&track_id=' . GETPOST('track_id', 'alpha'); + header("Location: " . $url); + } else { + $action = ''; + setEventMessages($object->error, $object->errors, 'errors'); + } + } + if (! $error && $action == "add_message" && $display_ticket) { // TODO Add message... @@ -290,8 +302,6 @@ if ($action == "view_ticket" || $action == "presend" || $action == "close" || $a $fuser = new User($db); $fuser->fetch($object->dao->fk_user_assign); print $fuser->getFullName($langs, 1); - } else { - print $langs->trans('None'); } print ''; @@ -336,12 +346,12 @@ if ($action == "view_ticket" || $action == "presend" || $action == "close" || $a // List ticket print ''; - if ($object->dao->fk_statut < 8) { + if ($object->dao->fk_statut < Ticket::STATUS_CLOSED) { // New message print ''; // Close ticket - if ($object->dao->fk_statut > 0 && $object->dao->fk_statut < 8) { + if ($object->dao->fk_statut >= Ticket::STATUS_NOT_READ && $object->dao->fk_statut < Ticket::STATUS_CLOSED) { print ''; } } diff --git a/htdocs/ticket/card.php b/htdocs/ticket/card.php index ba2d14b06ce..b770e2fec40 100644 --- a/htdocs/ticket/card.php +++ b/htdocs/ticket/card.php @@ -394,9 +394,6 @@ if ($action == "confirm_close" && GETPOST('confirm', 'alpha') == 'yes' && $user- $object->fetch(GETPOST('id', 'int'), '', GETPOST('track_id', 'alpha')); if ($object->close($user)) { - // Log action in ticket logs table - $log_action = $langs->trans('TicketLogClosedBy', $user->getFullName($langs)); - setEventMessages($langs->trans('TicketMarkedAsClosed'), null, 'mesgs'); $url = 'card.php?action=view&track_id=' . GETPOST('track_id', 'alpha'); @@ -409,13 +406,15 @@ if ($action == "confirm_close" && GETPOST('confirm', 'alpha') == 'yes' && $user- if ($action == "confirm_public_close" && GETPOST('confirm', 'alpha') == 'yes') { $object->fetch(GETPOST('id', 'int'), '', GETPOST('track_id', 'alpha')); - if (($_SESSION['email_customer'] == $object->origin_email || $_SESSION['email_customer'] == $object->thirdparty->email) && $object->close()) { + if ($_SESSION['email_customer'] == $object->origin_email || $_SESSION['email_customer'] == $object->thirdparty->email) { + $object->close($user); + // Log action in ticket logs table $log_action = $langs->trans('TicketLogClosedBy', $_SESSION['email_customer']); setEventMessages('
' . $langs->trans('TicketMarkedAsClosed') . '
', null, 'mesgs'); - $url = 'view.php?action=view_ticket&track_id=' . GETPOST('track_id', 'alpha'); + $url = 'card.php?action=view_ticket&track_id=' . GETPOST('track_id', 'alpha'); header("Location: " . $url); } else { setEventMessages($object->error, $object->errors, 'errors'); diff --git a/htdocs/ticket/class/ticket.class.php b/htdocs/ticket/class/ticket.class.php index 29654654110..72cddcce607 100644 --- a/htdocs/ticket/class/ticket.class.php +++ b/htdocs/ticket/class/ticket.class.php @@ -183,7 +183,7 @@ class Ticket extends CommonObject 'track_id' => array('type'=>'varchar(255)', 'label'=>'TicketTrackId', 'visible'=>-2, 'enabled'=>1, 'position'=>11, 'notnull'=>-1, 'searchall'=>1, 'help'=>"Help text"), 'fk_user_create' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'Author', 'visible'=>1, 'enabled'=>1, 'position'=>15, 'notnull'=>1, 'css'=>'nowraponall'), 'origin_email' => array('type'=>'mail', 'label'=>'OriginEmail', 'visible'=>-2, 'enabled'=>1, 'position'=>16, 'notnull'=>1, 'index'=>1, 'searchall'=>1, 'comment'=>"Reference of object"), - 'subject' => array('type'=>'varchar(255)', 'label'=>'Subject', 'visible'=>1, 'enabled'=>1, 'position'=>18, 'notnull'=>-1, 'searchall'=>1, 'help'=>""), + 'subject' => array('type'=>'varchar(255)', 'label'=>'Subject', 'visible'=>1, 'enabled'=>1, 'position'=>18, 'notnull'=>-1, 'searchall'=>1, 'help'=>"", 'css'=>'maxwidth75'), 'type_code' => array('type'=>'varchar(32)', 'label'=>'Type', 'visible'=>1, 'enabled'=>1, 'position'=>20, 'notnull'=>-1, 'searchall'=>1, 'help'=>"", 'css'=>'maxwidth100'), 'category_code' => array('type'=>'varchar(32)', 'label'=>'TicketGroup', 'visible'=>-1, 'enabled'=>1, 'position'=>21, 'notnull'=>-1, 'help'=>"", 'css'=>'maxwidth100'), 'severity_code' => array('type'=>'varchar(32)', 'label'=>'Severity', 'visible'=>1, 'enabled'=>1, 'position'=>22, 'notnull'=>-1, 'help'=>"", 'css'=>'maxwidth100'), diff --git a/htdocs/ticket/list.php b/htdocs/ticket/list.php index 91eeceb54e4..0f415ddbf33 100644 --- a/htdocs/ticket/list.php +++ b/htdocs/ticket/list.php @@ -499,10 +499,11 @@ print '
'; - print ''; + print ''; print ''; - $formTicket->selectTypesTickets($search_type, 'search_type', '', 2, 1, 1); + $formTicket->selectTypesTickets($search_type, 'search_type', '', 2, 1, 1, 0, 'maxwidth150'); print '
'; + print ''; print $obj->ref; print '
'; foreach($object->fields as $key => $val) { - $cssforfield=''; - if (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center'; - if (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap'; - if ($key == 'status') $cssforfield.=($cssforfield?' ':'').'center'; + $cssforfield=(empty($val['css'])?'':$val['css']); + if ($key == 'fk_statut') $cssforfield.=($cssforfield?' ':'').'center'; + elseif (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center'; + elseif (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap'; + elseif (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price'))) $cssforfield.=($cssforfield?' ':'').'right'; if (! empty($arrayfields['t.'.$key]['checked'])) { if ($key == 'type_code') { print ''."\n"; print ''; foreach($object->fields as $key => $val) { - $cssforfield=''; - if (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center'; - if (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap'; + $cssforfield=(empty($val['css'])?'':$val['css']); if ($key == 'fk_statut') $cssforfield.=($cssforfield?' ':'').'center'; + elseif (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center'; + elseif (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap'; + elseif (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price'))) $cssforfield.=($cssforfield?' ':'').'right'; if (! empty($arrayfields['t.'.$key]['checked'])) { print getTitleFieldOfList($arrayfields['t.'.$key]['label'], 0, $_SERVER['PHP_SELF'], 't.'.$key, '', $param, '', $sortfield, $sortorder, ($cssforfield?$cssforfield.' ':''))."\n"; From de4142e23e5035040c33858fd7c31a57cf179e79 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 23:57:35 +0200 Subject: [PATCH 761/828] FIX Add message from public interface --- htdocs/core/class/html.formticket.class.php | 2 +- htdocs/public/ticket/view.php | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/htdocs/core/class/html.formticket.class.php b/htdocs/core/class/html.formticket.class.php index fdbce981e72..a7797f91833 100644 --- a/htdocs/core/class/html.formticket.class.php +++ b/htdocs/core/class/html.formticket.class.php @@ -1058,7 +1058,7 @@ class FormTicket $out .= '
'; $out .= img_mime($listofnames[$key]) . ' ' . $listofnames[$key]; if (!$this->withfilereadonly) { - $out .= ' '; + $out .= ' '; } $out .= '
'; } diff --git a/htdocs/public/ticket/view.php b/htdocs/public/ticket/view.php index 3c732773b90..58b53a3f344 100644 --- a/htdocs/public/ticket/view.php +++ b/htdocs/public/ticket/view.php @@ -166,7 +166,7 @@ if ($action == "view_ticket" || $action == "presend" || $action == "close" || $a } } - if (! $error && $action == "add_message" && $display_ticket) + if (! $error && $action == "add_message" && $display_ticket && GETPOSTISSET('btn_add_message')) { // TODO Add message... $ret = $object->dao->newMessage($user, $action, 0); @@ -196,6 +196,13 @@ if ($action == "view_ticket" || $action == "presend" || $action == "close" || $a //var_dump($action); //$object->doActions($action); +// Actions to send emails (for ticket, we need to manage the addfile and removefile only) +$trigger_name='TICKET_SENTBYMAIL'; +$paramname='id'; +$autocopy='MAIN_MAIL_AUTOCOPY_TICKET_TO'; // used to know the automatic BCC to add +$trackid='tic'.$object->id; +include DOL_DOCUMENT_ROOT.'/core/actions_sendmails.inc.php'; + /* From 220f8300c12dd75e9209b32f892410a73b72c229 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 00:14:14 +0200 Subject: [PATCH 762/828] FIX Responsive of public interface of ticket --- htdocs/core/lib/ticket.lib.php | 2 +- htdocs/public/ticket/view.php | 5 +++-- htdocs/theme/eldy/global.inc.php | 18 +++++++++++++++++- htdocs/theme/md/style.css.php | 16 ++++++++++++++++ 4 files changed, 37 insertions(+), 4 deletions(-) diff --git a/htdocs/core/lib/ticket.lib.php b/htdocs/core/lib/ticket.lib.php index 9e0c357be05..84be86f4a15 100644 --- a/htdocs/core/lib/ticket.lib.php +++ b/htdocs/core/lib/ticket.lib.php @@ -185,5 +185,5 @@ function llxHeaderTicket($title, $head = "", $disablejs = 0, $disablehead = 0, $ print '
'; } - print '
'; + print '
'; } diff --git a/htdocs/public/ticket/view.php b/htdocs/public/ticket/view.php index 58b53a3f344..cdbd3abad19 100644 --- a/htdocs/public/ticket/view.php +++ b/htdocs/public/ticket/view.php @@ -223,7 +223,7 @@ $arrayofcss = array('/ticket/css/styles.css.php'); llxHeaderTicket($langs->trans("Tickets"), "", 0, 0, $arrayofjs, $arrayofcss); -print '
'; +print '
'; if ($action == "view_ticket" || $action == "presend" || $action == "close" || $action == "confirm_public_close") { if ($display_ticket) { @@ -350,8 +350,9 @@ if ($action == "view_ticket" || $action == "presend" || $action == "close" || $a print "\n"; print '
'; + // List ticket - print ''; + print ''; if ($object->dao->fk_statut < Ticket::STATUS_CLOSED) { // New message diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 44c66a979d5..7c2bbba5c42 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -5247,10 +5247,26 @@ div.tabsElem a.tab { /* ============================================================================== */ /* Ticket module */ /* ============================================================================== */ - +.ticketpublicarea { + width: 70%; +} .publicnewticketform { margin-top: 25px !important; } +.ticketlargemargin { + padding-left: 50px; + padding-right: 50px; +} +@media only screen and (max-width: 767px) +{ + .ticketlargemargin { + padding-left: 5px; padding-right: 5px; + } + .ticketpublicarea { + width: 100%; + } +} + #cd-timeline { position: relative; padding: 2em 0; diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index c15bbf26eef..9fad375eade 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -5404,9 +5404,25 @@ border-top-right-radius: 6px; /* Ticket module */ /* ============================================================================== */ +.ticketpublicarea { + width: 70%; +} .publicnewticketform { margin-top: 25px !important; } +.ticketlargemargin { + padding-left: 50px; + padding-right: 50px; +} +@media only screen and (max-width: 767px) +{ + .ticketlargemargin { + padding-left: 5px; padding-right: 5px; + } + .ticketpublicarea { + width: 100%; + } +} #cd-timeline { position: relative; From 2418b94e282ea5c73a89d18dcbb7c1a887031d39 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 00:17:26 +0200 Subject: [PATCH 763/828] Fix translation --- htdocs/public/ticket/list.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/htdocs/public/ticket/list.php b/htdocs/public/ticket/list.php index 5cbe0099b6d..5e1ce07e098 100644 --- a/htdocs/public/ticket/list.php +++ b/htdocs/public/ticket/list.php @@ -219,7 +219,7 @@ if ($action == "view_ticketlist") 't.progress' => array('label' => $langs->trans("Progression"), 'checked' => 0), //'t.fk_contract' => array('label' => $langs->trans("Contract"), 'checked' => 0), 't.fk_user_create' => array('label' => $langs->trans("Author"), 'checked' => 1), - 't.fk_user_assign' => array('label' => $langs->trans("AuthorAssign"), 'checked' => 0), + 't.fk_user_assign' => array('label' => $langs->trans("AssignedTo"), 'checked' => 0), //'t.entity'=>array('label'=>$langs->trans("Entity"), 'checked'=>1, 'enabled'=>(! empty($conf->multicompany->enabled) && empty($conf->multicompany->transverse_mode))), //'t.datec' => array('label' => $langs->trans("DateCreation"), 'checked' => 0, 'position' => 500), @@ -611,8 +611,6 @@ if ($action == "view_ticketlist") $user_assign->lastname = (!empty($obj->user_assign_lastname) ? $obj->user_assign_lastname : ''); $user_assign->id = (!empty($obj->fk_user_assign) ? $obj->fk_user_assign : ''); print $user_assign->getFullName($langs); - } else { - print $langs->trans('None'); } print ''; } From e85c2202e8e0315171532e142893c746f604c05f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 11:44:31 +0200 Subject: [PATCH 764/828] FIX missing token --- htdocs/admin/modules.php | 3 ++- htdocs/core/class/html.form.class.php | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/htdocs/admin/modules.php b/htdocs/admin/modules.php index 0507596caec..a0b8f2e50de 100644 --- a/htdocs/admin/modules.php +++ b/htdocs/admin/modules.php @@ -900,7 +900,8 @@ if ($mode == 'marketplace') ?>
- + +
trans('Keyword') ?>:
diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 45bc4525431..711c48053f1 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -6618,7 +6618,7 @@ class Form print '
'; @@ -562,10 +563,11 @@ print '
'; - if(!empty($compatibleImportElementsList)) + if (!empty($compatibleImportElementsList)) { $res=@include dol_buildpath('core/tpl/ajax/objectlinked_lineimport.tpl.php'); } From 9f9598ac9939469ad970c1deb9bcad0a6080c6c5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 11:44:31 +0200 Subject: [PATCH 765/828] FIX missing token --- htdocs/admin/modules.php | 3 ++- htdocs/core/class/html.form.class.php | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/htdocs/admin/modules.php b/htdocs/admin/modules.php index 0507596caec..a0b8f2e50de 100644 --- a/htdocs/admin/modules.php +++ b/htdocs/admin/modules.php @@ -900,7 +900,8 @@ if ($mode == 'marketplace') ?> - + +
trans('Keyword') ?>:
diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 68c4bec4690..6c5ed3c23f0 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -6607,7 +6607,7 @@ class Form print '
'; - if(!empty($compatibleImportElementsList)) + if (!empty($compatibleImportElementsList)) { $res=@include dol_buildpath('core/tpl/ajax/objectlinked_lineimport.tpl.php'); } From 20e58bdd97a8be10e7e7feb98caddc4e067fc430 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 13:09:25 +0200 Subject: [PATCH 766/828] FIX Limit of uploaded files (max_post_size was not used) --- htdocs/admin/modules.php | 30 ++++++++++++--- htdocs/admin/system/phpinfo.php | 21 ++++++++++- htdocs/core/class/html.formfile.class.php | 30 ++++++++++++--- htdocs/core/lib/functions.lib.php | 31 ++++++++-------- htdocs/imports/import.php | 45 +++++++++++++++++------ htdocs/langs/en_US/errors.lang | 1 + htdocs/main.inc.php | 2 +- 7 files changed, 120 insertions(+), 40 deletions(-) diff --git a/htdocs/admin/modules.php b/htdocs/admin/modules.php index a0b8f2e50de..5fd40fb032a 100644 --- a/htdocs/admin/modules.php +++ b/htdocs/admin/modules.php @@ -1027,15 +1027,35 @@ if ($mode == 'deploy') print $langs->trans("YouCanSubmitFile"); - $max=$conf->global->MAIN_UPLOAD_DOC; // En Kb - $maxphp=@ini_get('upload_max_filesize'); // En inconnu + $max=$conf->global->MAIN_UPLOAD_DOC; // In Kb + $maxphp=@ini_get('upload_max_filesize'); // In unknown if (preg_match('/k$/i', $maxphp)) $maxphp=$maxphp*1; if (preg_match('/m$/i', $maxphp)) $maxphp=$maxphp*1024; if (preg_match('/g$/i', $maxphp)) $maxphp=$maxphp*1024*1024; if (preg_match('/t$/i', $maxphp)) $maxphp=$maxphp*1024*1024*1024; - // Now $max and $maxphp are in Kb + $maxphp2=@ini_get('post_max_size'); // In unknown + if (preg_match('/k$/i', $maxphp2)) $maxphp2=$maxphp2*1; + if (preg_match('/m$/i', $maxphp2)) $maxphp2=$maxphp2*1024; + if (preg_match('/g$/i', $maxphp2)) $maxphp2=$maxphp2*1024*1024; + if (preg_match('/t$/i', $maxphp2)) $maxphp2=$maxphp2*1024*1024*1024; + // Now $max and $maxphp and $maxphp2 are in Kb $maxmin = $max; - if ($maxphp > 0) $maxmin=min($max, $maxphp); + $maxphptoshow = $maxphptoshowparam = ''; + if ($maxphp > 0) + { + $maxmin=min($max, $maxphp); + $maxphptoshow = $maxphp; + $maxphptoshowparam = 'upload_max_filesize'; + } + if ($maxphp2 > 0) + { + $maxmin=min($max, $maxphp2); + if ($maxphp2 < $maxphp) + { + $maxphptoshow = $maxphp2; + $maxphptoshowparam = 'post_max_size'; + } + } if ($maxmin > 0) { @@ -1063,7 +1083,7 @@ if ($mode == 'deploy') { $langs->load('other'); print ' '; - print info_admin($langs->trans("ThisLimitIsDefinedInSetup", $max, $maxphp), 1); + print info_admin($langs->trans("ThisLimitIsDefinedInSetup", $max, $maxphptoshow, $maxphptoshowparam), 1); } } else diff --git a/htdocs/admin/system/phpinfo.php b/htdocs/admin/system/phpinfo.php index 2dc9406eb13..d1c737ef5a8 100644 --- a/htdocs/admin/system/phpinfo.php +++ b/htdocs/admin/system/phpinfo.php @@ -48,14 +48,31 @@ if (isset($title)) } +// Check PHP setup is OK +$maxphp=@ini_get('upload_max_filesize'); // In unknown +if (preg_match('/k$/i', $maxphp)) $maxphp=$maxphp*1; +if (preg_match('/m$/i', $maxphp)) $maxphp=$maxphp*1024; +if (preg_match('/g$/i', $maxphp)) $maxphp=$maxphp*1024*1024; +if (preg_match('/t$/i', $maxphp)) $maxphp=$maxphp*1024*1024*1024; +$maxphp2=@ini_get('post_max_size'); // In unknown +if (preg_match('/k$/i', $maxphp2)) $maxphp2=$maxphp2*1; +if (preg_match('/m$/i', $maxphp2)) $maxphp2=$maxphp2*1024; +if (preg_match('/g$/i', $maxphp2)) $maxphp2=$maxphp2*1024*1024; +if (preg_match('/t$/i', $maxphp2)) $maxphp2=$maxphp2*1024*1024*1024; +if ($maxphp > 0 && $maxphp2 > 0 && $maxphp > $maxphp2) +{ + $langs->load("errors"); + print info_admin($langs->trans("WarningParamUploadMaxFileSizeHigherThanPostMaxSize", @ini_get('upload_max_filesize'), @ini_get('post_max_size')), 0, 0, 0, 'warning'); + print '
'; +} + print ''; print ''; print "\n"; -$var=false; -// Recupere la version de PHP +// Get PHP version $phpversion=version_php(); print '\n"; diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php index be389a94283..5f63d4db66c 100644 --- a/htdocs/core/class/html.formfile.class.php +++ b/htdocs/core/class/html.formfile.class.php @@ -130,15 +130,35 @@ class FormFile $out .= ''; // Input file name box - print ''; print ''; print ''; - print ''; - print ''; - print ''; + print ''; + print ''; + print ''; print ''; print ''; print ''; From f6c937a218a43aa8f0297f2bb3360f1f9d10cd38 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 14:14:18 +0200 Subject: [PATCH 770/828] Fix translation --- htdocs/compta/accounting-files.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/accounting-files.php b/htdocs/compta/accounting-files.php index 8467602a6fe..e52f91ba45c 100644 --- a/htdocs/compta/accounting-files.php +++ b/htdocs/compta/accounting-files.php @@ -32,7 +32,7 @@ require_once DOL_DOCUMENT_ROOT.'/don/class/don.class.php'; require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php'; require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php'; -$langs->loadLangs(array("accountancy", "bills", "companies", "salaries")); +$langs->loadLangs(array("accountancy", "bills", "companies", "salaries", "compta")); $date_start =GETPOST('date_start', 'alpha'); $date_startDay= GETPOST('date_startday', 'int'); From 78dadfe91bf09536bd7fb012da60dfb33e87fb5c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 14:27:04 +0200 Subject: [PATCH 771/828] Restore scrutinizer setup --- .scrutinizer.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.scrutinizer.yml b/.scrutinizer.yml index 60fea392133..b48aa158cce 100644 --- a/.scrutinizer.yml +++ b/.scrutinizer.yml @@ -1,6 +1,6 @@ # .scrutinizer.yml -build: - - php-scrutinizer-run +#build: +# - php-scrutinizer-run imports: - javascript From 6956067d8f2a48d91af81d6487f3eb32ae0c78fa Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 15:04:11 +0200 Subject: [PATCH 772/828] Fix print of print --- htdocs/societe/paymentmodes.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/societe/paymentmodes.php b/htdocs/societe/paymentmodes.php index 51a7ccb24bb..fdd4f54b6c8 100644 --- a/htdocs/societe/paymentmodes.php +++ b/htdocs/societe/paymentmodes.php @@ -1208,8 +1208,8 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard' print_liste_field_titre("BIC"); if (! empty($conf->prelevement->enabled)) { - print print_liste_field_titre("RUM"); - print print_liste_field_titre("WithdrawMode"); + print_liste_field_titre("RUM"); + print_liste_field_titre("WithdrawMode"); } print_liste_field_titre("DefaultRIB", '', '', '', '', '', '', '', 'center '); print_liste_field_titre('', '', '', '', '', '', '', '', 'center '); From d88fec52bfd8bff0196a1d32a1ffc5f2349afd48 Mon Sep 17 00:00:00 2001 From: florian HENRY Date: Sat, 20 Jul 2019 15:07:59 +0200 Subject: [PATCH 773/828] fix warining message --- htdocs/comm/action/peruser.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/comm/action/peruser.php b/htdocs/comm/action/peruser.php index 9e2a7278a27..65669625398 100644 --- a/htdocs/comm/action/peruser.php +++ b/htdocs/comm/action/peruser.php @@ -1189,8 +1189,8 @@ function show_day_events2($username, $day, $month, $year, $monthshown, $style, & } $ids1='';$ids2=''; - if (count($cases1[$h]) && array_keys($cases1[$h])) $ids1=join(',',array_keys($cases1[$h])); - if (count($cases2[$h]) && array_keys($cases2[$h])) $ids2=join(',',array_keys($cases2[$h])); + if (is_array($cases1[$h]) && count($cases1[$h]) && array_keys($cases1[$h])) $ids1=join(',',array_keys($cases1[$h])); + if (is_array($cases2[$h]) && count($cases2[$h]) && array_keys($cases2[$h])) $ids2=join(',',array_keys($cases2[$h])); if ($h == $begin_h) echo ''; print ''; @@ -2257,7 +2257,6 @@ else if (! empty($conf->global->SOCIETE_USEPREFIX)) // Old not used prefix field { print ''; - print $htmllogobar; $htmllogobar=''; print ''; } @@ -2269,7 +2268,6 @@ else print $object->code_client; if ($object->check_codeclient() <> 0) print ' ('.$langs->trans("WrongCustomerCode").')'; print ''; - print $htmllogobar; $htmllogobar=''; print ''; } @@ -2281,7 +2279,6 @@ else print $object->code_fournisseur; if ($object->check_codefournisseur() <> 0) print ' ('.$langs->trans("WrongSupplierCode").')'; print ''; - print $htmllogobar; $htmllogobar=''; print ''; } @@ -2291,9 +2288,6 @@ else print ''; - if ($htmllogobar) $htmllogobar.=$form->showbarcode($object); - print $htmllogobar; - $htmllogobar=''; print ''; } diff --git a/htdocs/societe/class/companypaymentmode.class.php b/htdocs/societe/class/companypaymentmode.class.php index 4275d356566..911d995dd78 100644 --- a/htdocs/societe/class/companypaymentmode.class.php +++ b/htdocs/societe/class/companypaymentmode.class.php @@ -310,7 +310,7 @@ class CompanyPaymentMode extends CommonObject if ($type) $morewhere.= " AND type = '".$this->db->escape($type)."'"; $result = $this->fetchCommon($id, $ref, $morewhere); - if ($result > 0 && ! empty($this->table_element_line)) $this->fetchLines(); + //if ($result > 0 && ! empty($this->table_element_line)) $this->fetchLines(); return $result; } diff --git a/htdocs/societe/class/societeaccount.class.php b/htdocs/societe/class/societeaccount.class.php index 5f333da69a3..2ab63178f4c 100644 --- a/htdocs/societe/class/societeaccount.class.php +++ b/htdocs/societe/class/societeaccount.class.php @@ -79,7 +79,7 @@ class SocieteAccount extends CommonObject public $fields=array( 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'visible'=>-2, 'enabled'=>1, 'position'=>1, 'notnull'=>1, 'index'=>1, 'comment'=>'Id',), 'entity' => array('type'=>'integer', 'label'=>'Entity', 'visible'=>0, 'enabled'=>1, 'position'=>5, 'default'=>1), - 'key_account' => array('type'=>'varchar(128)', 'label'=>'KeyAccount', 'visible'=>-1, 'enabled'=>1, 'position'=>10, 'notnull'=>1, 'index'=>1, 'searchall'=>1, 'comment'=>'Key account',), + 'key_account' => array('type'=>'varchar(128)', 'label'=>'KeyAccount', 'visible'=>1, 'enabled'=>1, 'position'=>10, 'notnull'=>1, 'index'=>1, 'searchall'=>1, 'comment'=>'Key account',), 'login' => array('type'=>'varchar(64)', 'label'=>'Login', 'visible'=>1, 'enabled'=>1, 'position'=>10), 'pass_encoding' => array('type'=>'varchar(24)', 'label'=>'PassEncoding', 'visible'=>0, 'enabled'=>1, 'position'=>30), 'pass_crypted' => array('type'=>'varchar(128)', 'label'=>'Password', 'visible'=>1, 'enabled'=>1, 'position'=>31, 'notnull'=>1), diff --git a/htdocs/societe/index.php b/htdocs/societe/index.php index d6df59f4740..4657a3e3f64 100644 --- a/htdocs/societe/index.php +++ b/htdocs/societe/index.php @@ -63,41 +63,6 @@ print load_fiche_titre($transAreaType, $linkback, 'title_companies.png'); print '
'; -if (! empty($conf->global->MAIN_SEARCH_FORM_ON_HOME_AREAS)) // This is useless due to the global search combo -{ - // Search thirdparty - if (! empty($conf->societe->enabled) && $user->rights->societe->lire) - { - $listofsearchfields['search_thirdparty']=array('text'=>'ThirdParty'); - } - // Search contact/address - if (! empty($conf->societe->enabled) && $user->rights->societe->lire) - { - $listofsearchfields['search_contact']=array('text'=>'Contact'); - } - - if (count($listofsearchfields)) - { - print ''; - print ''; - print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'.$langs->trans("Version")."".$phpversion."
'; - $max=$conf->global->MAIN_UPLOAD_DOC; // En Kb - $maxphp=@ini_get('upload_max_filesize'); // En inconnu + $max=$conf->global->MAIN_UPLOAD_DOC; // In Kb + $maxphp=@ini_get('upload_max_filesize'); // In unknown if (preg_match('/k$/i', $maxphp)) $maxphp=$maxphp*1; if (preg_match('/m$/i', $maxphp)) $maxphp=$maxphp*1024; if (preg_match('/g$/i', $maxphp)) $maxphp=$maxphp*1024*1024; if (preg_match('/t$/i', $maxphp)) $maxphp=$maxphp*1024*1024*1024; - // Now $max and $maxphp are in Kb + $maxphp2=@ini_get('post_max_size'); // In unknown + if (preg_match('/k$/i', $maxphp2)) $maxphp2=$maxphp2*1; + if (preg_match('/m$/i', $maxphp2)) $maxphp2=$maxphp2*1024; + if (preg_match('/g$/i', $maxphp2)) $maxphp2=$maxphp2*1024*1024; + if (preg_match('/t$/i', $maxphp2)) $maxphp2=$maxphp2*1024*1024*1024; + // Now $max and $maxphp and $maxphp2 are in Kb $maxmin = $max; - if ($maxphp > 0) $maxmin=min($max, $maxphp); + $maxphptoshow = $maxphptoshowparam = ''; + if ($maxphp > 0) + { + $maxmin=min($max, $maxphp); + $maxphptoshow = $maxphp; + $maxphptoshowparam = 'upload_max_filesize'; + } + if ($maxphp2 > 0) + { + $maxmin=min($max, $maxphp2); + if ($maxphp2 < $maxphp) + { + $maxphptoshow = $maxphp2; + $maxphptoshowparam = 'post_max_size'; + } + } if ($maxmin > 0) { @@ -168,7 +188,7 @@ class FormFile { $langs->load('other'); $out .= ' '; - $out .= info_admin($langs->trans("ThisLimitIsDefinedInSetup", $max, $maxphp), 1); + $out .= info_admin($langs->trans("ThisLimitIsDefinedInSetup", $max, $maxphptoshow), 1); } } else diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index c930dbf172a..9aa6177adf4 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -2935,22 +2935,23 @@ function dol_trunc($string, $size = 40, $trunc = 'right', $stringencoding = 'UTF /** * Show picto whatever it's its name (generic function) * - * @param string $titlealt Text on title tag for tooltip. Not used if param notitle is set to 1. - * @param string $picto Name of image file to show ('filenew', ...) - * If no extension provided, we use '.png'. Image must be stored into theme/xxx/img directory. - * Example: picto.png if picto.png is stored into htdocs/theme/mytheme/img - * Example: picto.png@mymodule if picto.png is stored into htdocs/mymodule/img - * Example: /mydir/mysubdir/picto.png if picto.png is stored into htdocs/mydir/mysubdir (pictoisfullpath must be set to 1) - * @param string $moreatt Add more attribute on img tag (For example 'style="float: right"') - * @param boolean|int $pictoisfullpath If true or 1, image path is a full path - * @param int $srconly Return only content of the src attribute of img. - * @param int $notitle 1=Disable tag title. Use it if you add js tooltip, to avoid duplicate tooltip. - * @param string $alt Force alt for bind people - * @param string $morecss Add more class css on img tag (For example 'myclascss'). Work only if $moreatt is empty. - * @return string Return img tag + * @param string $titlealt Text on title tag for tooltip. Not used if param notitle is set to 1. + * @param string $picto Name of image file to show ('filenew', ...) + * If no extension provided, we use '.png'. Image must be stored into theme/xxx/img directory. + * Example: picto.png if picto.png is stored into htdocs/theme/mytheme/img + * Example: picto.png@mymodule if picto.png is stored into htdocs/mymodule/img + * Example: /mydir/mysubdir/picto.png if picto.png is stored into htdocs/mydir/mysubdir (pictoisfullpath must be set to 1) + * @param string $moreatt Add more attribute on img tag (For example 'style="float: right"') + * @param boolean|int $pictoisfullpath If true or 1, image path is a full path + * @param int $srconly Return only content of the src attribute of img. + * @param int $notitle 1=Disable tag title. Use it if you add js tooltip, to avoid duplicate tooltip. + * @param string $alt Force alt for bind people + * @param string $morecss Add more class css on img tag (For example 'myclascss'). Work only if $moreatt is empty. + * @param string $marginleftonlyshort 1 = Add a short left margin on picto, 2 = Add a larger left maring on picto, 0 = No margin left. Works for fontawesome picto only. + * @return string Return img tag * @see img_object(), img_picto_common() */ -function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $srconly = 0, $notitle = 0, $alt = '', $morecss = '') +function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $srconly = 0, $notitle = 0, $alt = '', $morecss = '', $marginleftonlyshort = 2) { global $conf, $langs; @@ -2986,7 +2987,7 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ if (empty($conf->global->MAIN_DISABLE_FONT_AWESOME_5)) $fa='fas'; $fakey = $pictowithoutext; $facolor = ''; $fasize = ''; - $marginleftonlyshort = 2; + if ($pictowithoutext == 'setup') { $fakey = 'fa-cog'; $fasize = '1.4em'; diff --git a/htdocs/imports/import.php b/htdocs/imports/import.php index 7bcd69e3d0b..2d3882e523e 100644 --- a/htdocs/imports/import.php +++ b/htdocs/imports/import.php @@ -567,25 +567,46 @@ if ($step == 3 && $datatoimport) //print '
'.$langs->trans("FileWithDataToImport").'
'; - print '     '; + print '
'; + print '     '; $out = (empty($conf->global->MAIN_UPLOAD_DOC)?' disabled':''); print ''; $out=''; if (! empty($conf->global->MAIN_UPLOAD_DOC)) { - $max=$conf->global->MAIN_UPLOAD_DOC; // En Kb - $maxphp=@ini_get('upload_max_filesize'); // En inconnu - if (preg_match('/k$/i', $maxphp)) $maxphp=$maxphp*1; - if (preg_match('/m$/i', $maxphp)) $maxphp=$maxphp*1024; - if (preg_match('/g$/i', $maxphp)) $maxphp=$maxphp*1024*1024; - if (preg_match('/t$/i', $maxphp)) $maxphp=$maxphp*1024*1024*1024; - // Now $max and $maxphp are in Kb - if ($maxphp > 0) $max=min($max, $maxphp); + $max=$conf->global->MAIN_UPLOAD_DOC; // In Kb + $maxphp=@ini_get('upload_max_filesize'); // In unknown + if (preg_match('/k$/i', $maxphp)) $maxphp=$maxphp*1; + if (preg_match('/m$/i', $maxphp)) $maxphp=$maxphp*1024; + if (preg_match('/g$/i', $maxphp)) $maxphp=$maxphp*1024*1024; + if (preg_match('/t$/i', $maxphp)) $maxphp=$maxphp*1024*1024*1024; + $maxphp2=@ini_get('post_max_size'); // In unknown + if (preg_match('/k$/i', $maxphp2)) $maxphp2=$maxphp2*1; + if (preg_match('/m$/i', $maxphp2)) $maxphp2=$maxphp2*1024; + if (preg_match('/g$/i', $maxphp2)) $maxphp2=$maxphp2*1024*1024; + if (preg_match('/t$/i', $maxphp2)) $maxphp2=$maxphp2*1024*1024*1024; + // Now $max and $maxphp and $maxphp2 are in Kb + $maxmin = $max; + $maxphptoshow = $maxphptoshowparam = ''; + if ($maxphp > 0) + { + $maxmin=min($max, $maxphp); + $maxphptoshow = $maxphp; + $maxphptoshowparam = 'upload_max_filesize'; + } + if ($maxphp2 > 0) + { + $maxmin=min($max, $maxphp2); + if ($maxphp2 < $maxphp) + { + $maxphptoshow = $maxphp2; + $maxphptoshowparam = 'post_max_size'; + } + } $langs->load('other'); $out .= ' '; - $out.=info_admin($langs->trans("ThisLimitIsDefinedInSetup", $max, $maxphp), 1); + $out .= info_admin($langs->trans("ThisLimitIsDefinedInSetup", $max, $maxphptoshow), 1); } else { @@ -846,7 +867,7 @@ if ($step == 4 && $datatoimport) print ''; print '
'; - print $langs->trans("SelectImportFields", img_picto('', 'grip_title', '')).' '; + print $langs->trans("SelectImportFields", img_picto('', 'grip_title', '', false, 0, 0, '', '', 0)).' '; $htmlother->select_import_model($importmodelid, 'importmodelid', $datatoimport, 1); print ''; print '
'; diff --git a/htdocs/langs/en_US/errors.lang b/htdocs/langs/en_US/errors.lang index bb92e41a537..8e4d42559a8 100644 --- a/htdocs/langs/en_US/errors.lang +++ b/htdocs/langs/en_US/errors.lang @@ -219,6 +219,7 @@ ErrorURLMustStartWithHttp=URL %s must start with http:// or https:// ErrorNewRefIsAlreadyUsed=Error, the new reference is already used ErrorDeletePaymentLinkedToAClosedInvoiceNotPossible=Error, delete payment linked to a closed invoice is not possible. # Warnings +WarningParamUploadMaxFileSizeHigherThanPostMaxSize=Your PHP parameter upload_max_filesize (%s) is higher than PHP parameter post_max_size (%s). This is not a consistent setup. WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user. WarningMandatorySetupNotComplete=Click here to setup mandatory parameters WarningEnableYourModulesApplications=Click here to enable your modules and applications diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 4e1a6ecf01d..7b695dd8a12 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -372,7 +372,7 @@ if (! defined('NOTOKENRENEWAL')) } //var_dump(GETPOST('token').' '.$_SESSION['token'].' - '.$_SESSION['newtoken'].' '.$_SERVER['SCRIPT_FILENAME']); - +//$dolibarr_nocsrfcheck=1; // Check token //var_dump((! defined('NOCSRFCHECK')).' '.empty($dolibarr_nocsrfcheck).' '.(! empty($conf->global->MAIN_SECURITY_CSRF_WITH_TOKEN)).' '.$_SERVER['REQUEST_METHOD'].' '.(! GETPOSTISSET('token'))); if ((! defined('NOCSRFCHECK') && empty($dolibarr_nocsrfcheck) && ! empty($conf->global->MAIN_SECURITY_CSRF_WITH_TOKEN)) From 826851e1a9f1d37d3674977fa2a3b3638772b6e4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 14:01:00 +0200 Subject: [PATCH 767/828] Fix migration --- htdocs/install/mysql/migration/10.0.0-11.0.0.sql | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index 1b9f52ffaed..213a0d69cdf 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -30,7 +30,8 @@ -- Missing in v10 ALTER TABLE llx_account_bookkeeping ADD COLUMN date_export datetime DEFAULT NULL; - +ALTER TABLE llx_expensereport ADD COLUMN paid smallint default 0 NOT NULL; +UPDATE llx_expensereport set paid = 1 WHERE fk_statut = 6 and paid = 0; create table llx_entrepot_extrafields ( From ac8a776113e82afa849d3ebb4484e54432f78544 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 14:02:53 +0200 Subject: [PATCH 768/828] FIX Column 'paid' missing in expense report --- htdocs/expensereport/class/expensereport.class.php | 4 ++-- htdocs/install/mysql/migration/9.0.0-10.0.0.sql | 3 +++ htdocs/install/mysql/tables/llx_expensereport.sql | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index c09d2897980..0041974d4e9 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -572,8 +572,8 @@ class ExpenseReport extends CommonObject $this->db->begin(); $sql = "UPDATE ".MAIN_DB_PREFIX."expensereport"; - $sql.= " SET fk_statut = 6, paid=1"; - $sql.= " WHERE rowid = ".$id." AND fk_statut = 5"; + $sql.= " SET fk_statut = ".self::STATUS_CLOSED.", paid=1"; + $sql.= " WHERE rowid = ".$id." AND fk_statut = ".self::STATUS_APPROVED; dol_syslog(get_class($this)."::set_paid sql=".$sql, LOG_DEBUG); $resql=$this->db->query($sql); diff --git a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql index c2d4809f958..6484fe572df 100644 --- a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql +++ b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql @@ -206,6 +206,9 @@ ALTER TABLE llx_user ADD COLUMN linkedin varchar(255) after whatsapp; ALTER TABLE llx_expensereport_det ADD COLUMN fk_ecm_files integer DEFAULT NULL; +ALTER TABLE llx_expensereport ADD COLUMN paid smallint default 0 NOT NULL; +UPDATE llx_expensereport set paid = 1 WHERE fk_statut = 6 and paid = 0; + CREATE TABLE llx_bom_bom( -- BEGIN MODULEBUILDER FIELDS diff --git a/htdocs/install/mysql/tables/llx_expensereport.sql b/htdocs/install/mysql/tables/llx_expensereport.sql index ac1ec890788..df38697adaf 100755 --- a/htdocs/install/mysql/tables/llx_expensereport.sql +++ b/htdocs/install/mysql/tables/llx_expensereport.sql @@ -44,7 +44,7 @@ CREATE TABLE llx_expensereport ( fk_user_cancel integer DEFAULT NULL, fk_statut integer NOT NULL, -- 1=brouillon, 2=validated (waiting approval), 4=canceled, 5=approved, 6=payed, 99=refused fk_c_paiement integer DEFAULT NULL, -- deprecated - paid smallint default 0 NOT NULL, -- deprecated + paid smallint default 0 NOT NULL, -- deprecated (status is used instead) note_public text, note_private text, detail_refuse varchar(255) DEFAULT NULL, From 0dcd38b96f8d9ef22c4c994f37bd038d658cf77f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 14:09:42 +0200 Subject: [PATCH 769/828] Fix decimals --- htdocs/compta/accounting-files.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/compta/accounting-files.php b/htdocs/compta/accounting-files.php index 9069045c8b3..8467602a6fe 100644 --- a/htdocs/compta/accounting-files.php +++ b/htdocs/compta/accounting-files.php @@ -503,9 +503,9 @@ if (!empty($date_start) && !empty($date_stop)) print '
'.price($totalET).''.price($totalIT).''.price($totalVAT).''.price(price2num($totalET, 'MT')).''.price(price2num($totalIT, 'MT')).''.price(price2num($totalVAT, 'MT')).''; else echo ''; From d03d79222e9ecfd239a49566dd8695ceac5841c3 Mon Sep 17 00:00:00 2001 From: florian HENRY Date: Sat, 20 Jul 2019 15:15:48 +0200 Subject: [PATCH 774/828] fix warning php --- htdocs/comm/action/peruser.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/comm/action/peruser.php b/htdocs/comm/action/peruser.php index 65669625398..7dfe197033e 100644 --- a/htdocs/comm/action/peruser.php +++ b/htdocs/comm/action/peruser.php @@ -1207,14 +1207,14 @@ function show_day_events2($username, $day, $month, $year, $monthshown, $style, & $color1='222222'; } - if (count($cases2[$h]) == 1) // only 1 event + if (is_array($cases2[$h]) && count($cases2[$h]) == 1) // only 1 event { $output = array_slice($cases2[$h], 0, 1); $title2=$langs->trans("Ref").' '.$ids2.($title2?' - '.$title2:''); if ($output[0]['string']) $title2.=($title2?' - ':'').$output[0]['string']; if ($output[0]['color']) $color2 = $output[0]['color']; } - else if (count($cases2[$h]) > 1) + else if (is_array($cases2[$h]) && count($cases2[$h]) > 1) { $title2=$langs->trans("Ref").' '.$ids2.($title2?' - '.$title2:''); $color2='222222'; From b046bcc197a0b8d0b800c1153ace0e76de4e988f Mon Sep 17 00:00:00 2001 From: florian HENRY Date: Sat, 20 Jul 2019 15:19:25 +0200 Subject: [PATCH 775/828] fix warning php --- htdocs/comm/action/peruser.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/comm/action/peruser.php b/htdocs/comm/action/peruser.php index 7dfe197033e..16d9f09947c 100644 --- a/htdocs/comm/action/peruser.php +++ b/htdocs/comm/action/peruser.php @@ -1194,14 +1194,14 @@ function show_day_events2($username, $day, $month, $year, $monthshown, $style, & if ($h == $begin_h) echo ''; else echo ''; - if (count($cases1[$h]) == 1) // only 1 event + if (is_array($cases1[$h]) && count($cases1[$h]) == 1) // only 1 event { $output = array_slice($cases1[$h], 0, 1); $title1=$langs->trans("Ref").' '.$ids1.($title1?' - '.$title1:''); if ($output[0]['string']) $title1.=($title1?' - ':'').$output[0]['string']; if ($output[0]['color']) $color1 = $output[0]['color']; } - else if (count($cases1[$h]) > 1) + else if (is_array($cases1[$h]) && count($cases1[$h]) > 1) { $title1=$langs->trans("Ref").' '.$ids1.($title1?' - '.$title1:''); $color1='222222'; From a9000556318e45b26f500bab2b5fb1635de20bb0 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 15:53:21 +0200 Subject: [PATCH 776/828] Fix class not found error --- htdocs/societe/class/societe.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index 16b690ecaf7..d83e937dc9f 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -4172,8 +4172,8 @@ class Societe extends CommonObject if ($result < 0) { $error++; - $this->error = $c->error; - $this->errors = $c->errors; + $this->error = $this->error; + $this->errors = $this->errors; break; } } From 2e68488231d6924ff0eeebf0454be33f8feb779f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 15:53:46 +0200 Subject: [PATCH 777/828] Enhance scan using phpstan --- build/phpstan/bootstrap.php | 2 +- htdocs/societe/ajax/company.php | 8 +- .../company/actions_card_company.class.php | 6 +- .../actions_card_individual.class.php | 6 +- htdocs/societe/card.php | 12 +-- .../class/companypaymentmode.class.php | 2 +- htdocs/societe/class/societeaccount.class.php | 2 +- htdocs/societe/index.php | 37 +------- htdocs/societe/paymentmodes.php | 4 +- htdocs/societe/societecontact.php | 18 +++- htdocs/societe/website.php | 19 +++- phpstan.neon | 86 ++++++++++++++++++- 12 files changed, 137 insertions(+), 65 deletions(-) diff --git a/build/phpstan/bootstrap.php b/build/phpstan/bootstrap.php index e567b609a2f..6b6fd7b292e 100644 --- a/build/phpstan/bootstrap.php +++ b/build/phpstan/bootstrap.php @@ -8,7 +8,7 @@ define('DOL_DOCUMENT_ROOT', __DIR__ . '/../../htdocs'); define('DOL_DATA_ROOT', __DIR__ . '/../../documents'); define('DOL_URL_ROOT', '/'); -// Load the main.inc.php file to have finctions llx_Header and llx_Footer defined +// Load the main.inc.php file to have functions llx_Header and llx_Footer defined if (! defined("NOLOGIN")) define("NOLOGIN", '1'); global $conf, $langs, $user, $db; include_once __DIR__ . '/../../htdocs/main.inc.php'; diff --git a/htdocs/societe/ajax/company.php b/htdocs/societe/ajax/company.php index b59d924212a..88ad415a64c 100644 --- a/htdocs/societe/ajax/company.php +++ b/htdocs/societe/ajax/company.php @@ -1,7 +1,7 @@ * Copyright (C) 2005-2012 Regis Houssin - * Copyright (C) 2007-2011 Laurent Destailleur + * Copyright (C) 2007-2019 Laurent Destailleur * * 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 @@ -58,12 +58,12 @@ if (! empty($action) && $action == 'fetch' && ! empty($id)) $ret=$object->fetch($id); if ($ret > 0) { - $outname=$object->name; - $outlabel = ''; + $outref = $object->ref; + $outname = $object->name; $outdesc = ''; $outtype = $object->type; - $outjson = array('ref' => $outref,'name' => $outname,'desc' => $outdesc,'type' => $outtype); + $outjson = array('ref' => $outref, 'name' => $outname, 'desc' => $outdesc, 'type' => $outtype); } echo json_encode($outjson); diff --git a/htdocs/societe/canvas/company/actions_card_company.class.php b/htdocs/societe/canvas/company/actions_card_company.class.php index 27aeca883cc..7b8895a1f3f 100644 --- a/htdocs/societe/canvas/company/actions_card_company.class.php +++ b/htdocs/societe/canvas/company/actions_card_company.class.php @@ -23,9 +23,11 @@ */ include_once DOL_DOCUMENT_ROOT.'/societe/canvas/actions_card_common.class.php'; + /** - * \class ActionsCardCompany - * \brief Class with controller methods for thirdparty canvas + * ActionsCardCompany + * + * Class with controller methods for thirdparty canvas */ class ActionsCardCompany extends ActionsCardCommon { diff --git a/htdocs/societe/canvas/individual/actions_card_individual.class.php b/htdocs/societe/canvas/individual/actions_card_individual.class.php index 391fd85c836..cf6118fd023 100644 --- a/htdocs/societe/canvas/individual/actions_card_individual.class.php +++ b/htdocs/societe/canvas/individual/actions_card_individual.class.php @@ -22,9 +22,11 @@ */ include_once DOL_DOCUMENT_ROOT.'/societe/canvas/actions_card_common.class.php'; + /** - * \class ActionsCardIndividual - * \brief Class with controller methods for individual canvas + * ActionsCardIndividual + * + * Class with controller methods for individual canvas */ class ActionsCardIndividual extends ActionsCardCommon { diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index 3d9f3d7304c..f69b37b262c 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -251,10 +251,10 @@ if (empty($reshook)) // External modules should update their ones too if (! $error) { - $reshook = $hookmanager->executeHooks('replaceThirdparty', array( + $reshook = $hookmanager->executeHooks('replaceThirdparty', array( 'soc_origin' => $soc_origin->id, 'soc_dest' => $object->id - ), $soc_dest, $action); + ), $object, $action); if ($reshook < 0) { @@ -1188,7 +1188,7 @@ else // Prospect/Customer print '
'.$form->editfieldkey('ProspectCustomer', 'customerprospect', '', $object, 0, 'string', '', 1).''; - $selected=(GETPOSTISSET('client', 'int')?GETPOST('client', 'int'):$object->client); + $selected=(GETPOSTISSET('client')?GETPOST('client', 'int'):$object->client); print $formcompany->selectProspectCustomerType($selected); print '
'.$langs->trans('Prefix').''.$object->prefix_comm.'
'; print $langs->trans('Gencod').''.$object->barcode; print '
'; - $i=0; - foreach($listofsearchfields as $key => $value) - { - if ($i == 0) print ''; - print ''; - print ''; - if ($i == 0) print ''; - print ''; - $i++; - } - print '
'.$langs->trans("Search").'
'; - print ''; - print '
'; - } -} - - /* * Statistics area */ @@ -194,7 +159,7 @@ if (! empty($conf->categorie->enabled) && ! empty($conf->global->CATEGORY_GRAPHS print '
'; print ''; print ''; - print ' 0 ? GETPOST('place', 'int') : 0); // $place is id of table for Ba or Restaurant print ' onclick="location.href=\'list.php?action=change&contextpage=poslist&idcustomer='.$obj->rowid.'&place='.$place.'\'"'; } print '>'; diff --git a/htdocs/societe/notify/card.php b/htdocs/societe/notify/card.php index 59c43551f41..2c864755bd9 100644 --- a/htdocs/societe/notify/card.php +++ b/htdocs/societe/notify/card.php @@ -32,10 +32,11 @@ require_once DOL_DOCUMENT_ROOT.'/core/triggers/interface_50_modNotification_Noti $langs->loadLangs(array("companies", "mails", "admin", "other")); -$socid = GETPOST("socid", 'int'); -$action = GETPOST('action', 'aZ09'); -$contactid=GETPOST('contactid'); // May be an int or 'thirdparty' -$actionid=GETPOST('actionid'); +$socid = GETPOST("socid", 'int'); +$action = GETPOST('action', 'aZ09'); +$contactid = GETPOST('contactid'); // May be an int or 'thirdparty' +$actionid = GETPOST('actionid'); +$optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') // Security check if ($user->societe_id) $socid=$user->societe_id; From de18d5d18733de90dbe8a97ba4aa8ead5094042c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 16:22:00 +0200 Subject: [PATCH 784/828] Enhance phpstan --- htdocs/core/lib/hrm.lib.php | 5 +++- phpstan.neon | 46 +++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/htdocs/core/lib/hrm.lib.php b/htdocs/core/lib/hrm.lib.php index 50723ee5249..f64054dde30 100644 --- a/htdocs/core/lib/hrm.lib.php +++ b/htdocs/core/lib/hrm.lib.php @@ -20,7 +20,6 @@ * \ingroup HRM * \brief Library for hrm */ -$langs->load('hrm'); /** * Return head table for establishment tabs screen @@ -32,6 +31,8 @@ function establishment_prepare_head($object) { global $langs, $conf; + $langs->load('hrm'); + $h = 0; $head = array(); @@ -65,6 +66,8 @@ function hrm_admin_prepare_head() { global $langs, $conf, $user; + $langs->load('hrm'); + $h = 0; $head = array(); diff --git a/phpstan.neon b/phpstan.neon index 55cd13f59df..a33a17919f4 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -112,6 +112,51 @@ parameters: - %currentWorkingDirectory%/htdocs/core/lib/fourn.lib.php - %currentWorkingDirectory%/htdocs/core/lib/functions.lib.php - %currentWorkingDirectory%/htdocs/core/lib/functions2.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/geturl.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/holiday.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/hrm.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/images.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/import.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/invoice.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/invoice2.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/json.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/ldap.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/loan.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/mailmanspip.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/member.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/memory.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/modulebuilder.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/multicurrency.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/oauth.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/order.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/parsemd.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/payments.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/pdf.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/prelevement.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/price.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/product.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/project.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/propal.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/reception.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/report.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/resource.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/salaries.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/security.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/security2.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/sendings.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/signature.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/stock.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/supplier_proposal.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/takepos.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/tax.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/ticket.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/treeview.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/trip.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/usergroups.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/vat.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/website.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/ws.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/xcal.lib.php featureToggles: subtractableTypes: false validateParameters: false @@ -147,6 +192,7 @@ parameters: - '#Undefined variable: \$mysoc#' - '#Undefined variable: \$error#' - '#Undefined variable: \$errors#' + - '#Undefined variable: \$form#' - message: '#Undefined variable: \$object#' path: %currentWorkingDirectory%/htdocs/societe/tpl internalErrorsCountLimit: 50 From 904e399293d52010b316fcce1db5e2be1e939827 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 16:25:57 +0200 Subject: [PATCH 785/828] Fix wrong nb of parmaeters --- htdocs/societe/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index d3cd26f8115..34784beefcb 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -741,7 +741,7 @@ if (empty($reshook)) { require_once DOL_DOCUMENT_ROOT .'/core/lib/files.lib.php'; // the dir dirname($newfile) is directory of logo, so we should have only one file at once into index, so we delete indexes for the dir - deleteFilesIntoDatabaseIndex(dirname($newfile), '', '', 'uploaded', 1); + deleteFilesIntoDatabaseIndex(dirname($newfile), '', ''); // now we index the uploaded logo file addFileIntoDatabaseIndex(dirname($newfile), basename($newfile), '', 'uploaded', 1); } From 932530bd37b1d210f70e8d86a4a5be1179245907 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 21 Jul 2019 16:00:32 +0200 Subject: [PATCH 786/828] FIX ajax call for line positioning when CSRFCHECK_WITH_TOKEN is on --- htdocs/core/tpl/ajaxrow.tpl.php | 4 +++- htdocs/main.inc.php | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/htdocs/core/tpl/ajaxrow.tpl.php b/htdocs/core/tpl/ajaxrow.tpl.php index 8971dc2a919..071db6a82ee 100644 --- a/htdocs/core/tpl/ajaxrow.tpl.php +++ b/htdocs/core/tpl/ajaxrow.tpl.php @@ -66,13 +66,15 @@ $(document).ready(function(){ var fk_element = ""; var element_id = ""; var filepath = ""; + var token = ""; // We use old 'token' and not 'newtoken' for such ajax call because the ajax page has the NOTOKENRENEWAL constant set. $.post("/core/ajax/row.php", { roworder: roworder, table_element_line: table_element_line, fk_element: fk_element, element_id: element_id, - filepath: filepath + filepath: filepath, + token: token }, function() { console.log("tableDND end of ajax call"); diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 7b695dd8a12..1906f49a89a 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -273,6 +273,7 @@ if (isset($_SERVER["HTTP_USER_AGENT"])) if ($conf->browser->layout == 'phone') $conf->dol_no_mouse_hover=1; } + // Force HTTPS if required ($conf->file->main_force_https is 0/1 or https dolibarr root url) // $_SERVER["HTTPS"] is 'on' when link is https, otherwise $_SERVER["HTTPS"] is empty or 'off' if (! empty($conf->file->main_force_https) && (empty($_SERVER["HTTPS"]) || $_SERVER["HTTPS"] != 'on')) @@ -380,6 +381,7 @@ if ((! defined('NOCSRFCHECK') && empty($dolibarr_nocsrfcheck) && ! empty($conf-> { if ($_SERVER['REQUEST_METHOD'] == 'POST' && ! GETPOSTISSET('token')) // Note, offender can still send request by GET { + dol_syslog("--- Access to ".$_SERVER["PHP_SELF"]." refused by CSRFCHECK_WITH_TOKEN protection. Token not provided."); print "Access by POST method refused by CSRF protection in main.inc.php. Token not provided.\n"; print "If you access your server behind a proxy using url rewriting, you might check that all HTTP header is propagated (or add the line \$dolibarr_nocsrfcheck=1 into your conf.php file or MAIN_SECURITY_CSRF_WITH_TOKEN to 0 into setup).\n"; die; @@ -389,9 +391,9 @@ if ((! defined('NOCSRFCHECK') && empty($dolibarr_nocsrfcheck) && ! empty($conf-> //{ if (GETPOSTISSET('token') && GETPOST('token', 'alpha') != $_SESSION['token']) { - dol_syslog("Invalid token, so we disable POST and some GET parameters - referer=".$_SERVER['HTTP_REFERER'].", action=".GETPOST('action', 'aZ09').", _GET|POST['token']=".GETPOST('token', 'alpha').", _SESSION['token']=".$_SESSION['token'], LOG_WARNING); + dol_syslog("--- Access to ".$_SERVER["PHP_SELF"]." refused due to invalid token, so we disable POST and some GET parameters - referer=".$_SERVER['HTTP_REFERER'].", action=".GETPOST('action', 'aZ09').", _GET|POST['token']=".GETPOST('token', 'alpha').", _SESSION['token']=".$_SESSION['token'], LOG_WARNING); //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. - if ($conf->global->MAIN_FEATURES_LEVEL>1) setEventMessages('Unset POST by CSRF protection in main.inc.php.', null, 'warnings'); + if ($conf->global->MAIN_FEATURES_LEVEL>1) setEventMessages('Unset POST by CSRF protection in main.inc.php.'."
\n".'$_SERVER[REQUEST_URI] = '.$_SERVER['REQUEST_URI'].' $_SERVER[REQUEST_METHOD] = '.$_SERVER['REQUEST_METHOD'].' GETPOST(token) = '.GETPOST('token', 'alpha').' $_SESSION[token] = '.$_SESSION['token'], null, 'warnings'); unset($_POST); unset($_GET['confirm']); } From 4f34a8b6e84aaf8ede4e4b4ceee96769b01a7964 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 21 Jul 2019 16:15:13 +0200 Subject: [PATCH 787/828] FIX Position was lost when we edit the line of template invoice --- htdocs/compta/facture/fiche-rec.php | 14 ++++++++------ htdocs/core/tpl/ajaxrow.tpl.php | 2 +- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/htdocs/compta/facture/fiche-rec.php b/htdocs/compta/facture/fiche-rec.php index dd4a2af11ee..9b50e782454 100644 --- a/htdocs/compta/facture/fiche-rec.php +++ b/htdocs/compta/facture/fiche-rec.php @@ -774,7 +774,7 @@ if (empty($reshook)) $array_options = $extrafieldsline->getOptionalsFromPost($object->table_element_line); $objectline = new FactureLigneRec($db); - if ($objectline->fetch(GETPOST('lineid'))) + if ($objectline->fetch(GETPOST('lineid', 'int'))) { $objectline->array_options=$array_options; $result=$objectline->insertExtraFields(); @@ -784,6 +784,8 @@ if (empty($reshook)) } } + $position = ($objectline->rang >= 0 ? $objectline->rang : 0); + // Unset extrafield if (is_array($extralabelsline)) { @@ -795,8 +797,8 @@ if (empty($reshook)) } // Define special_code for special lines - $special_code=GETPOST('special_code'); - if (! GETPOST('qty')) $special_code=3; + $special_code=GETPOST('special_code', 'int'); + if (! GETPOST('qty', 'alpha')) $special_code=3; /*$line = new FactureLigne($db); $line->fetch(GETPOST('lineid')); @@ -832,11 +834,11 @@ if (empty($reshook)) $error ++; } } else { - $type = GETPOST('type'); + $type = GETPOST('type', 'int'); $label = (GETPOST('product_label') ? GETPOST('product_label') : ''); // Check parameters - if (GETPOST('type') < 0) { + if (GETPOST('type', 'int') < 0) { setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Type")), null, 'errors'); $error ++; } @@ -868,7 +870,7 @@ if (empty($reshook)) 0, 0, $type, - 0, + $position, $special_code, $label, GETPOST('units'), diff --git a/htdocs/core/tpl/ajaxrow.tpl.php b/htdocs/core/tpl/ajaxrow.tpl.php index 071db6a82ee..0b92df1e519 100644 --- a/htdocs/core/tpl/ajaxrow.tpl.php +++ b/htdocs/core/tpl/ajaxrow.tpl.php @@ -66,7 +66,7 @@ $(document).ready(function(){ var fk_element = ""; var element_id = ""; var filepath = ""; - var token = ""; // We use old 'token' and not 'newtoken' for such ajax call because the ajax page has the NOTOKENRENEWAL constant set. + var token = ""; // We use old 'token' and not 'newtoken' for Ajax call because the ajax page has the NOTOKENRENEWAL constant set. $.post("/core/ajax/row.php", { roworder: roworder, From f0f0b989e96242681d5d03bc5f6d8159433e8d32 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 21 Jul 2019 16:41:01 +0200 Subject: [PATCH 788/828] FIX Add warning when setup is strange --- htdocs/admin/mails.php | 10 ++++++++-- htdocs/langs/en_US/admin.lang | 3 ++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/htdocs/admin/mails.php b/htdocs/admin/mails.php index bc12fd5ddd6..997b0e97bdb 100644 --- a/htdocs/admin/mails.php +++ b/htdocs/admin/mails.php @@ -526,11 +526,17 @@ else print '
'; // Disable - print ''; + print ''; // Force e-mail recipient print ''; //Add user to select destinaries list diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 4e133489ce8..2edb5500d54 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1921,4 +1921,5 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? \ No newline at end of file +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? +RecipientEmailsWillBeReplacedWithThisValue=Recipient emails will be always replaced with this value \ No newline at end of file From cf87196f376ef3e1f2d6ff68741ad90e308c982b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 21 Jul 2019 20:55:12 +0200 Subject: [PATCH 789/828] Fix css --- htdocs/compta/sociales/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/sociales/card.php b/htdocs/compta/sociales/card.php index 3ac50a65e9a..0318efb7e1a 100644 --- a/htdocs/compta/sociales/card.php +++ b/htdocs/compta/sociales/card.php @@ -655,7 +655,7 @@ if ($id > 0) else { - print ''; + print ''; print ''; print ''; } From 7ec8b48b180a9f7c1bb27bb6ca9c8a4c39e3175d Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Sun, 21 Jul 2019 22:21:11 +0200 Subject: [PATCH 790/828] Fix lost filter in action list --- htdocs/comm/action/list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/comm/action/list.php b/htdocs/comm/action/list.php index aae2d48e9cf..10f3048c2f6 100644 --- a/htdocs/comm/action/list.php +++ b/htdocs/comm/action/list.php @@ -43,7 +43,7 @@ $action=GETPOST('action','alpha'); $contextpage=GETPOST('contextpage','aZ')?GETPOST('contextpage','aZ'):'actioncommlist'; // To manage different context of search $resourceid=GETPOST("search_resourceid","int")?GETPOST("search_resourceid","int"):GETPOST("resourceid","int"); $pid=GETPOST("search_projectid",'int',3)?GETPOST("search_projectid",'int',3):GETPOST("projectid",'int',3); -$status=GETPOST("search_status",'alpha')?GETPOST("search_status",'alpha'):GETPOST("status",'alpha'); +$status=(GETPOST("search_status",'alpha') != '')?GETPOST("search_status",'alpha'):GETPOST("status",'alpha'); $type=GETPOST('search_type','alphanohtml')?GETPOST('search_type','alphanohtml'):GETPOST('type','alphanohtml'); $optioncss = GETPOST('optioncss','alpha'); $year=GETPOST("year",'int'); From 7bdfd832884f1010c056b153e6691cd0b7412362 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Mon, 22 Jul 2019 15:15:08 +0200 Subject: [PATCH 791/828] FIX FEC Format - Missing date_creation in general ledger when you add a new transaction --- htdocs/accountancy/class/bookkeeping.class.php | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/htdocs/accountancy/class/bookkeeping.class.php b/htdocs/accountancy/class/bookkeeping.class.php index d31e660f0f1..21e43b524d7 100644 --- a/htdocs/accountancy/class/bookkeeping.class.php +++ b/htdocs/accountancy/class/bookkeeping.class.php @@ -549,7 +549,7 @@ class BookKeeping extends CommonObject // Put here code to add control on parameters values // Insert request - $sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this->table_element . $mode.'('; + $sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this->table_element . $mode.' ('; $sql .= 'doc_date,'; $sql .= 'date_lim_reglement,'; $sql .= 'doc_type,'; @@ -1693,20 +1693,22 @@ class BookKeeping extends CommonObject $this->db->begin(); - if ($direction==0) + if ($direction==0) { $next_piecenum=$this->getNextNumMvt(); + $now = dol_now(); + if ($next_piecenum < 0) { $error++; } - $sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this->table_element.'(doc_date, doc_type,'; + $sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this->table_element.' (doc_date, doc_type,'; $sql .= ' doc_ref, fk_doc, fk_docdet, entity, thirdparty_code, subledger_account, subledger_label,'; $sql .= ' numero_compte, label_compte, label_operation, debit, credit,'; - $sql .= ' montant, sens, fk_user_author, import_key, code_journal, journal_label, piece_num)'; - $sql .= 'SELECT doc_date, doc_type,'; + $sql .= ' montant, sens, fk_user_author, import_key, code_journal, journal_label, piece_num, date_creation)'; + $sql .= ' SELECT doc_date, doc_type,'; $sql .= ' doc_ref, fk_doc, fk_docdet, entity, thirdparty_code, subledger_account, subledger_label,'; $sql .= ' numero_compte, label_compte, label_operation, debit, credit,'; - $sql .= ' montant, sens, fk_user_author, import_key, code_journal, journal_label, '.$next_piecenum.''; + $sql .= ' montant, sens, fk_user_author, import_key, code_journal, journal_label, '.$next_piecenum.', "'.$this->db->idate($now).'"'; $sql .= ' FROM '.MAIN_DB_PREFIX . $this->table_element.'_tmp WHERE piece_num = '.$piece_num; $resql = $this->db->query($sql); if (! $resql) { @@ -1729,11 +1731,11 @@ class BookKeeping extends CommonObject $this->errors[] = 'Error ' . $this->db->lasterror(); dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR); } - $sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this->table_element.'_tmp(doc_date, doc_type,'; + $sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this->table_element.'_tmp (doc_date, doc_type,'; $sql .= ' doc_ref, fk_doc, fk_docdet, thirdparty_code, subledger_account, subledger_label,'; $sql .= ' numero_compte, label_compte, label_operation, debit, credit,'; $sql .= ' montant, sens, fk_user_author, import_key, code_journal, journal_label, piece_num)'; - $sql .= 'SELECT doc_date, doc_type,'; + $sql .= ' SELECT doc_date, doc_type,'; $sql .= ' doc_ref, fk_doc, fk_docdet, thirdparty_code, subledger_account, subledger_label,'; $sql .= ' numero_compte, label_compte, label_operation, debit, credit,'; $sql .= ' montant, sens, fk_user_author, import_key, code_journal, journal_label, piece_num'; From a33ac665bb5df8f71e6d1412c89653439b75ee8a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 22 Jul 2019 22:07:04 +0200 Subject: [PATCH 792/828] Fix phpcs --- htdocs/compta/prelevement/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/prelevement/card.php b/htdocs/compta/prelevement/card.php index c5e831ffcd5..5864d6301bd 100644 --- a/htdocs/compta/prelevement/card.php +++ b/htdocs/compta/prelevement/card.php @@ -86,7 +86,7 @@ if (empty($reshook)) } // Seems to no be used and replaced with $action == 'infocredit' - if ( $action == 'confirm_credite' && GETPOST('confirm','alpha') == 'yes') + if ( $action == 'confirm_credite' && GETPOST('confirm', 'alpha') == 'yes') { $res=$object->set_credite(); if ($res >= 0) From bf55733678a0ea52ed1705e7791a314d1b56ac89 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 23 Jul 2019 02:45:31 +0200 Subject: [PATCH 793/828] NEW Replace the "info" tab on contract with the more complete "agenda" tag. --- htdocs/contrat/agenda.php | 261 +++++++++++++++++++++++++++++++ htdocs/contrat/card.php | 15 +- htdocs/contrat/info.php | 156 ------------------ htdocs/core/lib/company.lib.php | 8 + htdocs/core/lib/contract.lib.php | 15 +- htdocs/langs/en_US/main.lang | 1 + htdocs/societe/agenda.php | 3 - 7 files changed, 291 insertions(+), 168 deletions(-) create mode 100644 htdocs/contrat/agenda.php delete mode 100644 htdocs/contrat/info.php diff --git a/htdocs/contrat/agenda.php b/htdocs/contrat/agenda.php new file mode 100644 index 00000000000..1bb6d8e9181 --- /dev/null +++ b/htdocs/contrat/agenda.php @@ -0,0 +1,261 @@ + + * Copyright (C) 2017 Ferran Marcet + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file htdocs/contrat/agenda.php + * \ingroup contrat + * \brief Page of contract events + */ + +require "../main.inc.php"; +require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/contract.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; +require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php'; +if (! empty($conf->projet->enabled)) { + require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php'; + require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; +} + +// Load translation files required by the page +$langs->loadLangs(array("companies", "contracts")); + +if (GETPOST('actioncode', 'array')) +{ + $actioncode=GETPOST('actioncode', 'array', 3); + if (! count($actioncode)) $actioncode='0'; +} +else +{ + $actioncode=GETPOST("actioncode", "alpha", 3)?GETPOST("actioncode", "alpha", 3):(GETPOST("actioncode")=='0'?'0':(empty($conf->global->AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT)?'':$conf->global->AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT)); +} +$search_agenda_label=GETPOST('search_agenda_label'); + +$action = GETPOST('action', 'alpha'); +$confirm = GETPOST('confirm', 'alpha'); +$id = GETPOST('id', 'int'); +$ref = GETPOST('ref', 'alpha'); + +// Security check +if ($user->societe_id) $socid=$user->societe_id; +$result = restrictedArea($user, 'contrat', $id, ''); + +$limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; +$sortfield = GETPOST("sortfield", 'alpha'); +$sortorder = GETPOST("sortorder", 'alpha'); +$page = GETPOST("page", 'int'); +if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 +$offset = $limit * $page; +$pageprev = $page - 1; +$pagenext = $page + 1; +if (! $sortfield) $sortfield='a.datep,a.id'; +if (! $sortorder) $sortorder='DESC,DESC'; + +// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context +$hookmanager->initHooks(array('agendacontract','globalcard')); + + +/* + * Actions + */ + +$parameters=array('id'=>$id); +$reshook=$hookmanager->executeHooks('doActions', $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)) +{ + // Cancel + if (GETPOST('cancel', 'alpha') && ! empty($backtopage)) + { + header("Location: ".$backtopage); + exit; + } + + // Purge search criteria + 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 + { + $actioncode=''; + $search_agenda_label=''; + } +} + + + + +/* + * View + */ + +$form = new Form($db); +$formfile = new FormFile($db); +if (! empty($conf->projet->enabled)) $formproject = new FormProjets($db); + +if ($id > 0) +{ + // Load object modContract + $module=(! empty($conf->global->CONTRACT_ADDON)?$conf->global->CONTRACT_ADDON:'mod_contract_serpis'); + if (substr($module, 0, 13) == 'mod_contract_' && substr($module, -3) == 'php') + { + $module = substr($module, 0, dol_strlen($module)-4); + } + $result=dol_include_once('/core/modules/contract/'.$module.'.php'); + if ($result > 0) + { + $modCodeContract = new $module(); + } + + require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; + require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php'; + + $object = new Contrat($db); + $result = $object->fetch($id); + $object->fetch_thirdparty(); + + $title=$langs->trans("Agenda"); + if (! empty($conf->global->MAIN_HTML_TITLE) && preg_match('/contractrefonly/', $conf->global->MAIN_HTML_TITLE) && $object->ref) $title=$object->ref." - ".$title; + llxHeader('', $title); + + if (! empty($conf->notification->enabled)) $langs->load("mails"); + $head = contract_prepare_head($object); + + dol_fiche_head($head, 'agenda', $langs->trans("Agenda"), -1, 'agenda'); + + $linkback = ''.$langs->trans("BackToList").''; + + $morehtmlref=''; + if (! empty($modCodeContract->code_auto)) { + $morehtmlref.=$object->ref; + } else { + $morehtmlref.=$form->editfieldkey("", 'ref', $object->ref, $object, $user->rights->contrat->creer, 'string', '', 0, 3); + $morehtmlref.=$form->editfieldval("", 'ref', $object->ref, $object, $user->rights->contrat->creer, 'string', '', 0, 2); + } + + $morehtmlref.='
'; + // Ref customer + $morehtmlref.=$form->editfieldkey("RefCustomer", 'ref_customer', $object->ref_customer, $object, $user->rights->contrat->creer, 'string', '', 0, 1); + $morehtmlref.=$form->editfieldval("RefCustomer", 'ref_customer', $object->ref_customer, $object, $user->rights->contrat->creer, 'string', '', null, null, '', 1, 'getFormatedCustomerRef'); + // Ref supplier + $morehtmlref.='
'; + $morehtmlref.=$form->editfieldkey("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, $user->rights->contrat->creer, 'string', '', 0, 1); + $morehtmlref.=$form->editfieldval("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, $user->rights->contrat->creer, 'string', '', null, null, '', 1, 'getFormatedSupplierRef'); + // Thirdparty + $morehtmlref.='
'.$langs->trans('ThirdParty') . ' : ' . $object->thirdparty->getNomUrl(1); + if (empty($conf->global->MAIN_DISABLE_OTHER_LINK) && $object->thirdparty->id > 0) $morehtmlref.=' ('.$langs->trans("OtherContracts").')'; + // Project + if (! empty($conf->projet->enabled)) + { + $langs->load("projects"); + $morehtmlref.='
'.$langs->trans('Project') . ' '; + if ($user->rights->contrat->creer) + { + if ($action != 'classify') + $morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; + if ($action == 'classify') { + //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); + $morehtmlref.='
'; + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=$formproject->select_projects($object->thirdparty->id, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); + $morehtmlref.=''; + $morehtmlref.=''; + } else { + $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->thirdparty->id, $object->fk_project, 'none', 0, 0, 0, 1); + } + } else { + if (! empty($object->fk_project)) { + $proj = new Project($db); + $proj->fetch($object->fk_project); + $morehtmlref.=''; + $morehtmlref.=$proj->ref; + $morehtmlref.=''; + } else { + $morehtmlref.=''; + } + } + } + $morehtmlref.='
'; + + dol_banner_tab($object, 'id', $linkback, 1, 'ref', 'none', $morehtmlref); + + print '
'; + + print '
'; + + $object->info($id); + dol_print_object_info($object, 1); + + print '
'; + + dol_fiche_end(); + + + + // Actions buttons + + /*$objthirdparty=$object; + $objcon=new stdClass(); + + $out=''; + $permok=$user->rights->agenda->myactions->create; + if ((! empty($objthirdparty->id) || ! empty($objcon->id)) && $permok) + { + //$out.='trans("AddAnAction"),'filenew'); + //$out.=""; + }*/ + + + //print '
'; + //print '
'; + + + $newcardbutton=''; + if (! empty($conf->agenda->enabled)) + { + if (! empty($user->rights->agenda->myactions->create) || ! empty($user->rights->agenda->allactions->create)) + { + $newcardbutton.= dolGetButtonTitle($langs->trans('AddAction'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/comm/action/card.php?action=create'.$out); + } + } + + if (! empty($conf->agenda->enabled) && (!empty($user->rights->agenda->myactions->read) || !empty($user->rights->agenda->allactions->read) )) + { + print '
'; + + $param='&id='.$id; + if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage; + if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit; + + print load_fiche_titre($langs->trans("ActionsOnContract"), $newcardbutton, ''); + //print_barre_liste($langs->trans("ActionsOnCompany"), 0, $_SERVER["PHP_SELF"], '', $sortfield, $sortorder, '', 0, -1, '', 0, $newcardbutton, '', 0, 1, 1); + + // List of all actions + $filters=array(); + $filters['search_agenda_label']=$search_agenda_label; + + // TODO Replace this with same code than into list.php + show_actions_done($conf, $langs, $db, $object, null, 0, $actioncode, '', $filters, $sortfield, $sortorder); + } +} + +llxFooter(); +$db->close(); diff --git a/htdocs/contrat/card.php b/htdocs/contrat/card.php index 671888545c8..430aad5e7e7 100644 --- a/htdocs/contrat/card.php +++ b/htdocs/contrat/card.php @@ -2209,10 +2209,14 @@ else print '
'; + $MAXEVENT = 10; + + $morehtmlright = dolGetButtonTitle($langs->trans('SeeAll'), '', 'fa fa-list-alt', DOL_URL_ROOT.'/contrat/agenda.php?id='.$object->id); + // List of actions on element include_once DOL_DOCUMENT_ROOT . '/core/class/html.formactions.class.php'; $formactions = new FormActions($db); - $somethingshown = $formactions->showactions($object, 'contract', $socid, 1); + $somethingshown = $formactions->showactions($object, 'contract', $socid, 1, 'listactions', $MAXEVENT, '', $morehtmlright); print '
'; @@ -2237,14 +2241,18 @@ $db->close(); margin->enabled) && $action == 'editline') { + // TODO Why this ? To manage margin on contracts ? ?> - - - * Copyright (C) 2017 Ferran Marcet - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -/** - * \file htdocs/contrat/info.php - * \ingroup contrat - * \brief Page des informations d'un contrat - */ - -require "../main.inc.php"; -require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; -require_once DOL_DOCUMENT_ROOT.'/core/lib/contract.lib.php'; -require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php'; -if (! empty($conf->projet->enabled)) { - require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php'; -} - -// Load translation files required by the page -$langs->load("contracts"); - -$action = GETPOST('action', 'alpha'); -$confirm = GETPOST('confirm', 'alpha'); -$id = GETPOST('id', 'int'); -$ref = GETPOST('ref', 'alpha'); - -// Security check -if ($user->societe_id) $socid=$user->societe_id; -$result = restrictedArea($user, 'contrat', $id, ''); - -// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context -$hookmanager->initHooks(array('contractcard','globalcard')); - - -/* - * Actions - */ - -// None - - - -/* - * View - */ - -$form = new Form($db); - -llxHeader('', $langs->trans("Contract"), ""); - -$object = new Contrat($db); -$object->fetch($id, $ref); -if ($object->id > 0) -{ - $object->fetch_thirdparty(); -} - -$object->info($object->id); - -$head = contract_prepare_head($object); - -dol_fiche_head($head, 'info', $langs->trans("Contract"), -1, 'contract'); - - -// Contract card - -$linkback = ''.$langs->trans("BackToList").''; - - -$morehtmlref=''; -//if (! empty($modCodeContract->code_auto)) { -$morehtmlref.=$object->ref; -/*} else { - $morehtmlref.=$form->editfieldkey("",'ref',$object->ref,0,'string','',0,3); -$morehtmlref.=$form->editfieldval("",'ref',$object->ref,0,'string','',0,2); -}*/ - -$morehtmlref.='
'; -// Ref customer -$morehtmlref.=$form->editfieldkey("RefCustomer", 'ref_customer', $object->ref_customer, $object, 0, 'string', '', 0, 1); -$morehtmlref.=$form->editfieldval("RefCustomer", 'ref_customer', $object->ref_customer, $object, 0, 'string', '', null, null, '', 1, 'getFormatedCustomerRef'); -// Ref supplier -$morehtmlref.='
'; -$morehtmlref.=$form->editfieldkey("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', 0, 1); -$morehtmlref.=$form->editfieldval("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', null, null, '', 1, 'getFormatedSupplierRef'); -// Thirdparty -$morehtmlref.='
'.$langs->trans('ThirdParty') . ' : ' . $object->thirdparty->getNomUrl(1); -// Project -if (! empty($conf->projet->enabled)) -{ - $langs->load("projects"); - $morehtmlref.='
'.$langs->trans('Project') . ' '; - if ($user->rights->contrat->creer) - { - if ($action != 'classify') - //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - $morehtmlref.=' : '; - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref.='
'; - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=$formproject->select_projects($object->thirdparty->id, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref.=''; - $morehtmlref.=''; - } else { - $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->thirdparty->id, $object->fk_project, 'none', 0, 0, 0, 1); - } - } else { - if (! empty($object->fk_project)) { - $proj = new Project($db); - $proj->fetch($object->fk_project); - $morehtmlref.=''; - $morehtmlref.=$proj->ref; - $morehtmlref.=''; - } else { - $morehtmlref.=''; - } - } -} -$morehtmlref.='
'; - - -dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'none', $morehtmlref); - - -print '
'; -print '
'; - -print '
'; - -print '
'.$langs->trans("Categories").'
'; + print '
'; $sql = "SELECT c.label, count(*) as nb"; $sql.= " FROM ".MAIN_DB_PREFIX."categorie_societe as cs"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."categorie as c ON cs.fk_categorie = c.rowid"; diff --git a/htdocs/societe/paymentmodes.php b/htdocs/societe/paymentmodes.php index 51a7ccb24bb..fdd4f54b6c8 100644 --- a/htdocs/societe/paymentmodes.php +++ b/htdocs/societe/paymentmodes.php @@ -1208,8 +1208,8 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard' print_liste_field_titre("BIC"); if (! empty($conf->prelevement->enabled)) { - print print_liste_field_titre("RUM"); - print print_liste_field_titre("WithdrawMode"); + print_liste_field_titre("RUM"); + print_liste_field_titre("WithdrawMode"); } print_liste_field_titre("DefaultRIB", '', '', '', '', '', '', '', 'center '); print_liste_field_titre('', '', '', '', '', '', '', '', 'center '); diff --git a/htdocs/societe/societecontact.php b/htdocs/societe/societecontact.php index 72bf7f6d27e..d09861da3f8 100644 --- a/htdocs/societe/societecontact.php +++ b/htdocs/societe/societecontact.php @@ -37,6 +37,18 @@ $langs->loadLangs(array("orders", "companies")); $id=GETPOST('id', 'int')?GETPOST('id', 'int'):GETPOST('socid', 'int'); $ref=GETPOST('ref', 'alpha'); $action=GETPOST('action', 'alpha'); +$massaction=GETPOST('massaction', 'alpha'); + +$limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; +$sortfield=GETPOST("sortfield", 'alpha'); +$sortorder=GETPOST("sortorder", 'alpha'); +$page=GETPOST("page", 'int'); +if (! $sortorder) $sortorder="ASC"; +if (! $sortfield) $sortfield="s.nom"; +if (empty($page) || $page == -1 || !empty($search_btn) || !empty($search_remove_btn) || (empty($toselect) && $massaction === '0')) { $page = 0; } +$offset = $limit * $page; +$pageprev = $page - 1; +$pagenext = $page + 1; // Security check if ($user->societe_id) $socid=$user->societe_id; @@ -233,12 +245,14 @@ if ($id > 0 || ! empty($ref)) { $num = $db->num_rows($resql); - if ($num > 0 ) + if ($num > 0) { + $param = ''; + $titre=$langs->trans("MembersListOfTiers"); print '
'; - print_barre_liste($titre, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, $nbtotalofrecords, ''); + print_barre_liste($titre, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, 0, ''); print ""; print ''; diff --git a/htdocs/societe/website.php b/htdocs/societe/website.php index fa868de6e42..fa74b1b3dd3 100644 --- a/htdocs/societe/website.php +++ b/htdocs/societe/website.php @@ -230,9 +230,9 @@ dol_fiche_end(); $newcardbutton = ''; if (! empty($conf->website->enabled)) { if (! empty($user->rights->societe->lire)) { - $morehtmlright.= dolGetButtonTitle($langs->trans("AddWebsiteAccount"), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/website/websiteaccount_card.php?action=create&fk_soc='.$object->id.'&backtopage='.urlencode($_SERVER["PHP_SELF"].'?id='.$object->id)); + $newcardbutton.= dolGetButtonTitle($langs->trans("AddWebsiteAccount"), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/website/websiteaccount_card.php?action=create&fk_soc='.$object->id.'&backtopage='.urlencode($_SERVER["PHP_SELF"].'?id='.$object->id)); } else { - $morehtmlright.= dolGetButtonTitle($langs->trans("AddAction"), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/website/websiteaccount_card.php?action=create&fk_soc='.$object->id.'&backtopage='.urlencode($_SERVER["PHP_SELF"].'?id='.$object->id), '', 0); + $newcardbutton.= dolGetButtonTitle($langs->trans("AddAction"), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/website/websiteaccount_card.php?action=create&fk_soc='.$object->id.'&backtopage='.urlencode($_SERVER["PHP_SELF"].'?id='.$object->id), '', 0); } } @@ -248,14 +248,15 @@ foreach($objectwebsiteaccount->fields as $key => $val) $sql.='t.'.$key.', '; } // Add fields from extrafields -foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ", ef.".$key.' as options_'.$key : ''); +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.', ' : ''); // Add fields from hooks $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters, $objectwebsiteaccount); // Note that $action and $object may have been modified by hook $sql.=$hookmanager->resPrint; $sql=preg_replace('/, $/', '', $sql); $sql.= " FROM ".MAIN_DB_PREFIX."societe_account as t"; -if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_account_extrafields as ef on (t.rowid = ef.fk_object)"; +if (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)"; if ($objectwebsiteaccount->ismultientitymanaged == 1) $sql.= " WHERE t.entity IN (".getEntity('societeaccount').")"; else $sql.=" WHERE 1 = 1"; $sql.=" AND fk_soc = ".$object->id; @@ -428,6 +429,16 @@ foreach ($extrafields->attribute_computed as $key => $val) } +// 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) +{ + 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 + } +} + // Loop on record // -------------------------------------------------------------------- $i=0; diff --git a/phpstan.neon b/phpstan.neon index 34dd50fb4bc..6d63f931375 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -4,6 +4,7 @@ parameters: - %currentWorkingDirectory%/htdocs/includes/restler/framework/Luracast/Restler/AutoLoader.php - %currentWorkingDirectory%/htdocs/includes/* - %currentWorkingDirectory%/htdocs/*/class/api_* + - %currentWorkingDirectory%/htdocs/*/canvas/*/tpl/*.tpl.php autoload_directories: - %currentWorkingDirectory%/htdocs/accountancy/class - %currentWorkingDirectory%/htdocs/adherents/class @@ -23,14 +24,94 @@ parameters: - %currentWorkingDirectory%/htdocs/compta/facture/class - %currentWorkingDirectory%/htdocs/compta/localtax/class - %currentWorkingDirectory%/htdocs/compta/paiement/class + - %currentWorkingDirectory%/htdocs/compta/prelevement/class + - %currentWorkingDirectory%/htdocs/compta/salaries/class + - %currentWorkingDirectory%/htdocs/compta/sociales/class + - %currentWorkingDirectory%/htdocs/compta/tva/class - %currentWorkingDirectory%/htdocs/conf - %currentWorkingDirectory%/htdocs/contact/class - %currentWorkingDirectory%/htdocs/contrat/class - %currentWorkingDirectory%/htdocs/core/class + - %currentWorkingDirectory%/htdocs/core/lib + - %currentWorkingDirectory%/htdocs/core/triggers + - %currentWorkingDirectory%/htdocs/core/modules/bank + - %currentWorkingDirectory%/htdocs/core/modules/bom + - %currentWorkingDirectory%/htdocs/core/modules/commande + - %currentWorkingDirectory%/htdocs/core/modules/expedition + #- %currentWorkingDirectory%/htdocs/core/modules/expensereport + - %currentWorkingDirectory%/htdocs/core/modules/facture + - %currentWorkingDirectory%/htdocs/core/modules/fichinter + - %currentWorkingDirectory%/htdocs/core/modules/holiday + - %currentWorkingDirectory%/htdocs/core/modules/livraison + #- %currentWorkingDirectory%/htdocs/core/modules/member + - %currentWorkingDirectory%/htdocs/core/modules/payment + - %currentWorkingDirectory%/htdocs/core/modules/product + - %currentWorkingDirectory%/htdocs/core/modules/propale + - %currentWorkingDirectory%/htdocs/core/modules/reception + #- %currentWorkingDirectory%/htdocs/core/modules/stock + - %currentWorkingDirectory%/htdocs/core/modules/supplier_invoice + - %currentWorkingDirectory%/htdocs/core/modules/supplier_order + #- %currentWorkingDirectory%/htdocs/core/modules/supplier_payment + - %currentWorkingDirectory%/htdocs/core/modules/supplier_proposal + - %currentWorkingDirectory%/htdocs/cron/class + - %currentWorkingDirectory%/htdocs/datapolicy/class + - %currentWorkingDirectory%/htdocs/debugbar/class + - %currentWorkingDirectory%/htdocs/don/class + - %currentWorkingDirectory%/htdocs/ecm/class + - %currentWorkingDirectory%/htdocs/emailcollector/class + - %currentWorkingDirectory%/htdocs/expedition/class + - %currentWorkingDirectory%/htdocs/expensereport/class + - %currentWorkingDirectory%/htdocs/exports/class + - %currentWorkingDirectory%/htdocs/fichinter/class + - %currentWorkingDirectory%/htdocs/fourn/class + - %currentWorkingDirectory%/htdocs/holiday/class + - %currentWorkingDirectory%/htdocs/hrm/class + - %currentWorkingDirectory%/htdocs/imports/class + - %currentWorkingDirectory%/htdocs/livraison/class + - %currentWorkingDirectory%/htdocs/loan/class + - %currentWorkingDirectory%/htdocs/mailmanspip/class + - %currentWorkingDirectory%/htdocs/multicurrency/class + - %currentWorkingDirectory%/htdocs/opensurvey/class - %currentWorkingDirectory%/htdocs/product/class + - %currentWorkingDirectory%/htdocs/projet/class + - %currentWorkingDirectory%/htdocs/reception/class + - %currentWorkingDirectory%/htdocs/resource/class - %currentWorkingDirectory%/htdocs/societe/class + - %currentWorkingDirectory%/htdocs/stripe/class + - %currentWorkingDirectory%/htdocs/supplier_proposal/class + - %currentWorkingDirectory%/htdocs/ticket/class - %currentWorkingDirectory%/htdocs/user/class - autoload_files: [] + - %currentWorkingDirectory%/htdocs/variants/class + - %currentWorkingDirectory%/htdocs/website/class + autoload_files: + - %currentWorkingDirectory%/build/phpstan/bootstrap.php + - %currentWorkingDirectory%/htdocs/core/lib/accounting.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/admin.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/agenda.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/ajax.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/asset.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/bank.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/barcode.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/categories.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/company.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/contact.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/contract.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/cron.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/date.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/doc.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/doleditor.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/donation.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/ecm.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/emailing.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/expedition.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/expensereport.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/fichinter.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/files.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/fiscalyear.lib.php + #- %currentWorkingDirectory%/htdocs/core/lib/format_cards.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/fourn.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/functions.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/functions2.lib.php featureToggles: subtractableTypes: false validateParameters: false @@ -66,6 +147,9 @@ parameters: - '#Undefined variable: \$db#' - '#Undefined variable: \$conf#' - '#Undefined variable: \$hookmanager#' + - '#Undefined variable: \$mysoc#' + - '#Undefined variable: \$error#' + - '#Undefined variable: \$errors#' internalErrorsCountLimit: 50 cache: nodesByFileCountMax: 512 From fea12c3c5969ca10f064c23133a89b37f15cb1ae Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 15:53:21 +0200 Subject: [PATCH 778/828] Fix class not found error --- htdocs/societe/class/societe.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index b1d037552aa..61419b837fb 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -4148,8 +4148,8 @@ class Societe extends CommonObject if ($result < 0) { $error++; - $this->error = $c->error; - $this->errors = $c->errors; + $this->error = $this->error; + $this->errors = $this->errors; break; } } From 6594b361b1ec45d52b80a5c9520e948515b4ecc4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 15:56:20 +0200 Subject: [PATCH 779/828] Removed useless code --- htdocs/societe/class/societe.class.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index 61419b837fb..c9933bc711b 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -4148,8 +4148,6 @@ class Societe extends CommonObject if ($result < 0) { $error++; - $this->error = $this->error; - $this->errors = $this->errors; break; } } From 73b53029059fe27c53f7feef4de499c4c0163672 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 16:00:16 +0200 Subject: [PATCH 780/828] Fix var not defined --- htdocs/societe/class/societe.class.php | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index c9933bc711b..a26ff197d9e 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -3024,7 +3024,7 @@ class Societe extends CommonObject for ($index = 0; $index < 9; $index ++) { - $number = (int) $siren[$index]; + $number = (int) $chaine[$index]; if (($index % 2) != 0) { if (($number *= 2) > 9) $number -= 9; } $sum += $number; } @@ -3066,13 +3066,16 @@ class Societe extends CommonObject $string=preg_replace('/(\s)/', '', $string); $string = strtoupper($string); - for ($i = 0; $i < 9; $i ++) - $num[$i] = substr($string, $i, 1); - //Check format if (!preg_match('/((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)/', $string)) return 0; + $num = array(); + for ($i = 0; $i < 9; $i ++) + { + $num[$i] = substr($string, $i, 1); + } + //Check NIF if (preg_match('/(^[0-9]{8}[A-Z]{1}$)/', $string)) if ($num[8] == substr('TRWAGMYFPDXBNJZSQVHLCKE', substr($string, 0, 8) % 23, 1)) From 6bc38acb56810ff60c9b2e26fc9525f8d552a504 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 16:01:28 +0200 Subject: [PATCH 781/828] Fix assignation --- htdocs/societe/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index d0f0bdeb1b8..d3cd26f8115 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -2719,7 +2719,7 @@ else $MAXEVENT = 10; - $morehtmlright.= dolGetButtonTitle($langs->trans('SeeAll'), '', 'fa fa-list-alt', DOL_URL_ROOT.'/societe/agenda.php?socid='.$object->id); + $morehtmlright = dolGetButtonTitle($langs->trans('SeeAll'), '', 'fa fa-list-alt', DOL_URL_ROOT.'/societe/agenda.php?socid='.$object->id); // List of actions on element include_once DOL_DOCUMENT_ROOT . '/core/class/html.formactions.class.php'; From b6a1c92fc0874131ff355eace6903793eef33028 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 16:08:31 +0200 Subject: [PATCH 782/828] Enhance phpstan --- htdocs/societe/paymentmodes.php | 59 ++++++++++++++++----------------- phpstan.neon | 5 ++- 2 files changed, 31 insertions(+), 33 deletions(-) diff --git a/htdocs/societe/paymentmodes.php b/htdocs/societe/paymentmodes.php index fdd4f54b6c8..497afe9c210 100644 --- a/htdocs/societe/paymentmodes.php +++ b/htdocs/societe/paymentmodes.php @@ -778,40 +778,39 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard' if ($conf->facture->enabled && $user->rights->facture->lire) $elementTypeArray['invoice']=$langs->transnoentitiesnoconv('Invoices'); if ($conf->contrat->enabled && $user->rights->contrat->lire) $elementTypeArray['contract']=$langs->transnoentitiesnoconv('Contracts'); - if (! empty($conf->stripe->enabled)) - { - $permissiontowrite = $user->rights->societe->creer; - // Stripe customer key 'cu_....' stored into llx_societe_account - print ''; } - print ''; - } } print '
'; - //print $langs->trans('StripeCustomerId'); - print $form->editfieldkey("StripeCustomerId", 'key_account', $stripecu, $object, $permissiontowrite, 'string', '', 0, 2, 'socid'); - print ''; - //print $stripecu; - print $form->editfieldval("StripeCustomerId", 'key_account', $stripecu, $object, $permissiontowrite, 'string', '', null, null, '', 2, '', 'socid'); - if (! empty($conf->stripe->enabled) && $stripecu && $action != 'editkey_account') + if (! empty($conf->stripe->enabled)) { - $connect=''; - if (!empty($stripeacc)) $connect=$stripeacc.'/'; - $url='https://dashboard.stripe.com/'.$connect.'test/customers/'.$stripecu; - if ($servicestatus) + $permissiontowrite = $user->rights->societe->creer; + // Stripe customer key 'cu_....' stored into llx_societe_account + print '
'; + //print $langs->trans('StripeCustomerId'); + print $form->editfieldkey("StripeCustomerId", 'key_account', $stripecu, $object, $permissiontowrite, 'string', '', 0, 2, 'socid'); + print ''; + //print $stripecu; + print $form->editfieldval("StripeCustomerId", 'key_account', $stripecu, $object, $permissiontowrite, 'string', '', null, null, '', 2, '', 'socid'); + if (! empty($conf->stripe->enabled) && $stripecu && $action != 'editkey_account') { - $url='https://dashboard.stripe.com/'.$connect.'customers/'.$stripecu; + $connect=''; + if (!empty($stripeacc)) $connect=$stripeacc.'/'; + $url='https://dashboard.stripe.com/'.$connect.'test/customers/'.$stripecu; + if ($servicestatus) + { + $url='https://dashboard.stripe.com/'.$connect.'customers/'.$stripecu; + } + print ' '.img_picto($langs->trans('ShowInStripe'), 'object_globe').''; } - print ' '.img_picto($langs->trans('ShowInStripe'), 'object_globe').''; + print ''; + if (empty($stripecu)) + { + print '
'; + print ''; + print ''; + print ''; + print ''; + print '
'; + } + print '
'; - if (empty($stripecu)) - { - print '
'; - print ''; - print ''; - print ''; - print ''; - print ''; - print '
'; - } - print '
'; diff --git a/phpstan.neon b/phpstan.neon index 6d63f931375..55cd13f59df 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -139,9 +139,6 @@ parameters: reportMagicMethods: false reportMagicProperties: false ignoreErrors: - - - message: '#Call to an undefined method abcdef#' - path: %currentWorkingDirectory%/dirtoignoreerror/* - '#Undefined variable: \$langs#' - '#Undefined variable: \$user#' - '#Undefined variable: \$db#' @@ -150,6 +147,8 @@ parameters: - '#Undefined variable: \$mysoc#' - '#Undefined variable: \$error#' - '#Undefined variable: \$errors#' + - message: '#Undefined variable: \$object#' + path: %currentWorkingDirectory%/htdocs/societe/tpl internalErrorsCountLimit: 50 cache: nodesByFileCountMax: 512 From 6015254a77b4f6c55b3ff5429c21a1857f552ed1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 16:15:01 +0200 Subject: [PATCH 783/828] Fix var not defined --- htdocs/societe/list.php | 1 + htdocs/societe/notify/card.php | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/htdocs/societe/list.php b/htdocs/societe/list.php index c9275293bb2..9ddbed6c9b0 100644 --- a/htdocs/societe/list.php +++ b/htdocs/societe/list.php @@ -1002,6 +1002,7 @@ while ($i < min($num, $limit)) print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'.$langs->trans("MAIN_DISABLE_ALL_MAILS").''.yn($conf->global->MAIN_DISABLE_ALL_MAILS).'
'.$langs->trans("MAIN_DISABLE_ALL_MAILS").''.yn($conf->global->MAIN_DISABLE_ALL_MAILS); + if (! empty($conf->global->MAIN_DISABLE_ALL_MAILS)) print img_warning($langs->trans("Disabled")); + print '
'.$langs->trans("MAIN_MAIL_FORCE_SENDTO").''.$conf->global->MAIN_MAIL_FORCE_SENDTO; - if (! empty($conf->global->MAIN_MAIL_FORCE_SENDTO) && ! isValidEmail($conf->global->MAIN_MAIL_FORCE_SENDTO)) print img_warning($langs->trans("ErrorBadEMail")); + if (! empty($conf->global->MAIN_MAIL_FORCE_SENDTO)) + { + if (! isValidEmail($conf->global->MAIN_MAIL_FORCE_SENDTO)) print img_warning($langs->trans("ErrorBadEMail")); + else print img_warning($langs->trans("RecipientEmailsWillBeReplacedWithThisValue")); + } print '
'.$langs->trans("None").'
'.$langs->trans("None").'
'; -dol_print_object_info($object); -print '
'; - -print '
'; - -dol_fiche_end(); - - -llxFooter(); -$db->close(); diff --git a/htdocs/core/lib/company.lib.php b/htdocs/core/lib/company.lib.php index ef34befa71c..58e411a0bdf 100644 --- a/htdocs/core/lib/company.lib.php +++ b/htdocs/core/lib/company.lib.php @@ -1261,6 +1261,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon = '', $noprin elseif (is_object($filterobj) && get_class($filterobj) == 'Product') $sql.= ", o.ref"; elseif (is_object($filterobj) && get_class($filterobj) == 'Ticket') $sql.= ", o.ref"; elseif (is_object($filterobj) && get_class($filterobj) == 'BOM') $sql.= ", o.ref"; + elseif (is_object($filterobj) && get_class($filterobj) == 'Contrat') $sql.= ", o.ref"; $sql.= " FROM ".MAIN_DB_PREFIX."actioncomm as a"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."user as u on u.rowid = a.fk_user_action"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_actioncomm as c ON a.fk_action = c.id"; @@ -1284,6 +1285,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon = '', $noprin elseif (is_object($filterobj) && get_class($filterobj) == 'Product') $sql.= ", ".MAIN_DB_PREFIX."product as o"; elseif (is_object($filterobj) && get_class($filterobj) == 'Ticket') $sql.= ", ".MAIN_DB_PREFIX."ticket as o"; elseif (is_object($filterobj) && get_class($filterobj) == 'BOM') $sql.= ", ".MAIN_DB_PREFIX."bom_bom as o"; + elseif (is_object($filterobj) && get_class($filterobj) == 'Contrat') $sql.= ", ".MAIN_DB_PREFIX."contrat as o"; $sql.= " WHERE a.entity IN (".getEntity('agenda').")"; if ($force_filter_contact === false) { @@ -1314,6 +1316,11 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon = '', $noprin $sql.= " AND a.fk_element = o.rowid AND a.elementtype = 'bom'"; if ($filterobj->id) $sql.= " AND a.fk_element = ".$filterobj->id; } + elseif (is_object($filterobj) && get_class($filterobj) == 'Contrat') + { + $sql.= " AND a.fk_element = o.rowid AND a.elementtype = 'contract'"; + if ($filterobj->id) $sql.= " AND a.fk_element = ".$filterobj->id; + } } // Condition on actioncode @@ -1368,6 +1375,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon = '', $noprin } elseif (empty($sql) && !empty($sql2)) { $sql = $sql2; } + //TODO Add limit in nb of results $sql.= $db->order($sortfield_new, $sortorder); dol_syslog("company.lib::show_actions_done", LOG_DEBUG); diff --git a/htdocs/core/lib/contract.lib.php b/htdocs/core/lib/contract.lib.php index 0583fa4f365..d1a4a07689e 100644 --- a/htdocs/core/lib/contract.lib.php +++ b/htdocs/core/lib/contract.lib.php @@ -30,8 +30,8 @@ */ function contract_prepare_head(Contrat $object) { - global $db, $langs, $conf; - + global $db, $langs, $conf, $user; + $h = 0; $head = array(); @@ -79,9 +79,14 @@ function contract_prepare_head(Contrat $object) $head[$h][2] = 'documents'; $h++; - $head[$h][0] = DOL_URL_ROOT.'/contrat/info.php?id='.$object->id; - $head[$h][1] = $langs->trans("Info"); - $head[$h][2] = 'info'; + $head[$h][0] = DOL_URL_ROOT.'/contrat/agenda.php?id='.$object->id; + $head[$h][1].= $langs->trans("Events"); + if (! empty($conf->agenda->enabled) && (!empty($user->rights->agenda->myactions->read) || !empty($user->rights->agenda->allactions->read) )) + { + $head[$h][1].= '/'; + $head[$h][1].= $langs->trans("Agenda"); + } + $head[$h][2] = 'agenda'; $h++; complete_head_from_modules($conf, $langs, $object, $head, $h, 'contract', 'remove'); diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index 5e55597c306..1cadc32f4ab 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -445,6 +445,7 @@ ContactsAddressesForCompany=Contacts/addresses for this third party AddressesForCompany=Addresses for this third party ActionsOnCompany=Events for this third party ActionsOnContact=Events for this contact/address +ActionsOnContract=Events for this contract ActionsOnMember=Events about this member ActionsOnProduct=Events about this product NActionsLate=%s late diff --git a/htdocs/societe/agenda.php b/htdocs/societe/agenda.php index 53a1ee5d7ed..6afdc662f4f 100644 --- a/htdocs/societe/agenda.php +++ b/htdocs/societe/agenda.php @@ -103,9 +103,6 @@ if ($socid > 0) require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php'; - $langs->load("companies"); - - $object = new Societe($db); $result = $object->fetch($socid); From a61a4350950638d38a588ec174b1979babd77055 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 23 Jul 2019 02:54:49 +0200 Subject: [PATCH 794/828] Fix tab title --- htdocs/contrat/agenda.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/contrat/agenda.php b/htdocs/contrat/agenda.php index 1bb6d8e9181..622d195d8cd 100644 --- a/htdocs/contrat/agenda.php +++ b/htdocs/contrat/agenda.php @@ -134,7 +134,7 @@ if ($id > 0) if (! empty($conf->notification->enabled)) $langs->load("mails"); $head = contract_prepare_head($object); - dol_fiche_head($head, 'agenda', $langs->trans("Agenda"), -1, 'agenda'); + dol_fiche_head($head, 'agenda', $langs->trans("Contract"), -1, 'contract'); $linkback = ''.$langs->trans("BackToList").''; From d6d5a93225825eb3ac7d398dc70a5785eb9e4e9f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 23 Jul 2019 03:15:06 +0200 Subject: [PATCH 795/828] Fix css --- htdocs/projet/ganttview.php | 4 ++-- htdocs/projet/tasks.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/projet/ganttview.php b/htdocs/projet/ganttview.php index a30fce71ef1..ba1e2f2994e 100644 --- a/htdocs/projet/ganttview.php +++ b/htdocs/projet/ganttview.php @@ -204,9 +204,9 @@ if ($user->rights->projet->all->creer || $user->rights->projet->creer) { } } -$linktocreatetask = dolGetButtonTitle($langs->trans('AddTask'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/projet/tasks.php?id='.$object->id.'&action=create'.$param.'&backtopage='.urlencode($_SERVER['PHP_SELF'].'?id='.$object->id), '', $linktocreatetaskUserRight, $linktocreatetaskParam); +$linktocreatetask = dolGetButtonTitle($langs->trans('AddTask'), '', 'fa fa-plus-circle paddingleft', DOL_URL_ROOT.'/projet/tasks.php?id='.$object->id.'&action=create'.$param.'&backtopage='.urlencode($_SERVER['PHP_SELF'].'?id='.$object->id), '', $linktocreatetaskUserRight, $linktocreatetaskParam); -$linktolist = dolGetButtonTitle($langs->trans('GoToListOfTasks'), '', 'fa fa-tasks', DOL_URL_ROOT.'/projet/tasks.php?id='.$object->id); +$linktolist = dolGetButtonTitle($langs->trans('GoToListOfTasks'), '', 'fa fa-tasks paddingleft', DOL_URL_ROOT.'/projet/tasks.php?id='.$object->id); //print_barre_liste($title, 0, $_SERVER["PHP_SELF"], '', $sortfield, $sortorder, $linktotasks, $num, $totalnboflines, 'title_generic.png', 0, '', '', 0, 1); print load_fiche_titre($title, $linktolist.'   '.$linktocreatetask, 'title_generic.png'); diff --git a/htdocs/projet/tasks.php b/htdocs/projet/tasks.php index b05b27b5e90..b8ac9fb7e02 100644 --- a/htdocs/projet/tasks.php +++ b/htdocs/projet/tasks.php @@ -709,7 +709,7 @@ elseif ($id > 0 || ! empty($ref)) $selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields print '
'; - print ''; + print '
'; // Fields title search print ''; From 2dccaef1cdc8420d4d17dab8a4eceed9068a0c57 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 23 Jul 2019 03:39:07 +0200 Subject: [PATCH 796/828] Fix message --- htdocs/main.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 1906f49a89a..77f2a1f746f 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -393,7 +393,7 @@ if ((! defined('NOCSRFCHECK') && empty($dolibarr_nocsrfcheck) && ! empty($conf-> { dol_syslog("--- Access to ".$_SERVER["PHP_SELF"]." refused due to invalid token, so we disable POST and some GET parameters - referer=".$_SERVER['HTTP_REFERER'].", action=".GETPOST('action', 'aZ09').", _GET|POST['token']=".GETPOST('token', 'alpha').", _SESSION['token']=".$_SESSION['token'], LOG_WARNING); //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. - if ($conf->global->MAIN_FEATURES_LEVEL>1) setEventMessages('Unset POST by CSRF protection in main.inc.php.'."
\n".'$_SERVER[REQUEST_URI] = '.$_SERVER['REQUEST_URI'].' $_SERVER[REQUEST_METHOD] = '.$_SERVER['REQUEST_METHOD'].' GETPOST(token) = '.GETPOST('token', 'alpha').' $_SESSION[token] = '.$_SESSION['token'], null, 'warnings'); + if ($conf->global->MAIN_FEATURES_LEVEL>1) setEventMessages('Unset POST by CSRF protection in main.inc.php (POST was already done or was done by a not allowed web 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'); unset($_POST); unset($_GET['confirm']); } From 559a9024050bcd8b86b969c4ccbd6527ac5117ea Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 23 Jul 2019 03:39:35 +0200 Subject: [PATCH 797/828] FIX summary of time spent in preview tab of projects --- htdocs/projet/class/project.class.php | 4 ++-- htdocs/projet/element.php | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/htdocs/projet/class/project.class.php b/htdocs/projet/class/project.class.php index cbee8d181ca..2261e06219b 100644 --- a/htdocs/projet/class/project.class.php +++ b/htdocs/projet/class/project.class.php @@ -599,13 +599,13 @@ class Project extends CommonObject $sql = "SELECT rowid FROM " . MAIN_DB_PREFIX . $tablename." WHERE ".$projectkey." IN (". $ids .") AND entity IN (".getEntity($type).")"; } - if ($dates > 0) + if ($dates > 0 && ($type != 'project_task')) // For table project_taks, we want the filter on date apply on project_time_spent table { if (empty($datefieldname) && ! empty($this->table_element_date)) $datefieldname=$this->table_element_date; if (empty($datefieldname)) return 'Error this object has no date field defined'; $sql.=" AND (".$datefieldname." >= '".$this->db->idate($dates)."' OR ".$datefieldname." IS NULL)"; } - if ($datee > 0) + if ($datee > 0 && ($type != 'project_task')) // For table project_taks, we want the filter on date apply on project_time_spent table { if (empty($datefieldname) && ! empty($this->table_element_date)) $datefieldname=$this->table_element_date; if (empty($datefieldname)) return 'Error this object has no date field defined'; diff --git a/htdocs/projet/element.php b/htdocs/projet/element.php index b4d2a8b290f..4f5af0ca94f 100644 --- a/htdocs/projet/element.php +++ b/htdocs/projet/element.php @@ -532,7 +532,8 @@ if (! $showdatefilter) { print '
'; print '
'; - print ''; + print ''; + print ''; print ''; print '
'; print ''; print ''; From 57db12ccdbeac8bea717ad5b28dc67f1bb78a2d7 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Tue, 23 Jul 2019 14:10:13 +0200 Subject: [PATCH 804/828] Update card.php --- htdocs/contact/card.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/contact/card.php b/htdocs/contact/card.php index 12e2e1cb206..cfead2173ff 100644 --- a/htdocs/contact/card.php +++ b/htdocs/contact/card.php @@ -179,7 +179,7 @@ if (empty($reshook)) $object->socid = GETPOST("socid", 'int'); $object->lastname = GETPOST("lastname", 'alpha'); $object->firstname = GETPOST("firstname", 'alpha'); - $object->civility_id = GETPOST("civility_id", 'alpha'); + $object->civility = GETPOST("civility", 'alpha'); $object->poste = GETPOST("poste", 'alpha'); $object->address = GETPOST("address", 'alpha'); $object->zip = GETPOST("zipcode", 'alpha'); @@ -349,7 +349,7 @@ if (empty($reshook)) $object->socid = GETPOST("socid", 'int'); $object->lastname = GETPOST("lastname", 'alpha'); $object->firstname = GETPOST("firstname", 'alpha'); - $object->civility_id = GETPOST("civility_id", 'alpha'); + $object->civility = GETPOST("civility", 'alpha'); $object->poste = GETPOST("poste", 'alpha'); $object->address = GETPOST("address", 'alpha'); @@ -573,7 +573,7 @@ else // Civility print ''; print ''; From f959341aa83d7dd0bfa8394c35bf1af4065d2318 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Tue, 23 Jul 2019 14:30:12 +0200 Subject: [PATCH 805/828] Update card.php --- htdocs/contact/card.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/contact/card.php b/htdocs/contact/card.php index cfead2173ff..ff0c9f5cc98 100644 --- a/htdocs/contact/card.php +++ b/htdocs/contact/card.php @@ -179,7 +179,7 @@ if (empty($reshook)) $object->socid = GETPOST("socid", 'int'); $object->lastname = GETPOST("lastname", 'alpha'); $object->firstname = GETPOST("firstname", 'alpha'); - $object->civility = GETPOST("civility", 'alpha'); + $object->civility = GETPOST("civility_id", 'alpha'); $object->poste = GETPOST("poste", 'alpha'); $object->address = GETPOST("address", 'alpha'); $object->zip = GETPOST("zipcode", 'alpha'); @@ -349,7 +349,7 @@ if (empty($reshook)) $object->socid = GETPOST("socid", 'int'); $object->lastname = GETPOST("lastname", 'alpha'); $object->firstname = GETPOST("firstname", 'alpha'); - $object->civility = GETPOST("civility", 'alpha'); + $object->civility = GETPOST("civility_id", 'alpha'); $object->poste = GETPOST("poste", 'alpha'); $object->address = GETPOST("address", 'alpha'); From 9ddb8a5b0b47c7d7057ad4074f553cfa86d047ad Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 23 Jul 2019 14:41:29 +0200 Subject: [PATCH 806/828] Fix tooltip to say closed project are not visibles --- htdocs/core/class/html.formprojet.class.php | 8 ++++---- htdocs/expensereport/card.php | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/htdocs/core/class/html.formprojet.class.php b/htdocs/core/class/html.formprojet.class.php index b4c0c4295c9..057f977fadb 100644 --- a/htdocs/core/class/html.formprojet.class.php +++ b/htdocs/core/class/html.formprojet.class.php @@ -60,7 +60,7 @@ class FormProjets * @param int $maxlength Maximum length of label * @param int $option_only Return only html options lines without the select tag * @param int $show_empty Add an empty line - * @param int $discard_closed Discard closed projects (0=Keep, 1=hide completely, 2=Disable) + * @param int $discard_closed Discard closed projects (0=Keep, 1=hide completely, 2=Disable). Use a negative value to not show the "discarded" tooltip. * @param int $forcefocus Force focus on field (works with javascript only) * @param int $disabled Disabled * @param int $mode 0 for HTML mode and 1 for JSON mode @@ -100,13 +100,13 @@ class FormProjets } else { - $out.=$this->select_projects_list($socid, $selected, $htmlname, $maxlength, $option_only, $show_empty, $discard_closed, $forcefocus, $disabled, 0, $filterkey, 1, $forceaddid, $htmlid, $morecss); + $out.=$this->select_projects_list($socid, $selected, $htmlname, $maxlength, $option_only, $show_empty, abs($discard_closed), $forcefocus, $disabled, 0, $filterkey, 1, $forceaddid, $htmlid, $morecss); } - if ($discard_closed) + if ($discard_closed > 0) { if (class_exists('Form')) { - if (empty($form)) $form=new Form($this->db); + if (! is_object($form)) $form=new Form($this->db); $out.=$form->textwithpicto('', $langs->trans("ClosedProjectsAreHidden")); } } diff --git a/htdocs/expensereport/card.php b/htdocs/expensereport/card.php index 94754a71c7f..58273a67ebe 100644 --- a/htdocs/expensereport/card.php +++ b/htdocs/expensereport/card.php @@ -2441,7 +2441,7 @@ else print ''; print ''; print ''; - if (! empty($conf->projet->enabled)) print ''; + if (! empty($conf->projet->enabled)) print ''; if (!empty($conf->global->MAIN_USE_EXPENSE_IK)) print ''; print ''; print ''; @@ -2469,7 +2469,7 @@ else if (! empty($conf->projet->enabled)) { print ''; } From be13d5e47158cc7322346c6fa4f133cbde6e992e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 23 Jul 2019 14:49:09 +0200 Subject: [PATCH 807/828] FIX The new feature to attach document on lines was not correclty enabled. --- htdocs/expensereport/card.php | 6 +++--- htdocs/expensereport/tpl/expensereport_linktofile.tpl.php | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/expensereport/card.php b/htdocs/expensereport/card.php index 58273a67ebe..04044e0ad97 100644 --- a/htdocs/expensereport/card.php +++ b/htdocs/expensereport/card.php @@ -2258,7 +2258,7 @@ else print ''.$langs->trans("UploadANewFileNow"); print img_picto($langs->trans("UploadANewFileNow"), 'chevron-down', '', false, 0, 0, '', 'marginleftonly'); print ''; - if ($conf->global->MAIN_FEATURES_LEVEL >= 2) + if (empty($conf->global->EXPENSEREPORT_DISABLE_ATTACHMENT_ON_LINES)) { print '   -   '.''.$langs->trans("AttachTheNewLineToTheDocument"); print img_picto($langs->trans("AttachTheNewLineToTheDocument"), 'chevron-down', '', false, 0, 0, '', 'marginleftonly'); @@ -2389,7 +2389,7 @@ else $nbFiles = $nbLinks = 0; $arrayoffiles = array(); - if ($conf->global->MAIN_FEATURES_LEVEL >= 2) + if (empty($conf->global->EXPENSEREPORT_DISABLE_ATTACHMENT_ON_LINES)) { require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/images.lib.php'; @@ -2406,7 +2406,7 @@ else print ''.$langs->trans("UploadANewFileNow"); print img_picto($langs->trans("UploadANewFileNow"), 'chevron-down', '', false, 0, 0, '', 'marginleftonly'); print ''; - if ($conf->global->MAIN_FEATURES_LEVEL >= 2) + if (empty($conf->global->EXPENSEREPORT_DISABLE_ATTACHMENT_ON_LINES)) { print '   -   '.''.$langs->trans("AttachTheNewLineToTheDocument"); print img_picto($langs->trans("AttachTheNewLineToTheDocument"), 'chevron-down', '', false, 0, 0, '', 'marginleftonly'); diff --git a/htdocs/expensereport/tpl/expensereport_linktofile.tpl.php b/htdocs/expensereport/tpl/expensereport_linktofile.tpl.php index 48f21bc3dc2..aa66409f3ba 100644 --- a/htdocs/expensereport/tpl/expensereport_linktofile.tpl.php +++ b/htdocs/expensereport/tpl/expensereport_linktofile.tpl.php @@ -1,6 +1,6 @@ global->MAIN_FEATURES_LEVEL >= 2) +if (empty($conf->global->EXPENSEREPORT_DISABLE_ATTACHMENT_ON_LINES)) { print ''."\n"; From 2162f2331dfecef69fb344c629d222d0fa73a241 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 24 Jul 2019 06:57:42 +0200 Subject: [PATCH 808/828] Try to fix travis --- htdocs/accountancy/class/bookkeeping.class.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/htdocs/accountancy/class/bookkeeping.class.php b/htdocs/accountancy/class/bookkeeping.class.php index 21e43b524d7..0034723ec4c 100644 --- a/htdocs/accountancy/class/bookkeeping.class.php +++ b/htdocs/accountancy/class/bookkeeping.class.php @@ -1701,22 +1701,22 @@ class BookKeeping extends CommonObject if ($next_piecenum < 0) { $error++; } - $sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this->table_element.' (doc_date, doc_type,'; + $sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this->table_element . ' (doc_date, doc_type,'; $sql .= ' doc_ref, fk_doc, fk_docdet, entity, thirdparty_code, subledger_account, subledger_label,'; $sql .= ' numero_compte, label_compte, label_operation, debit, credit,'; $sql .= ' montant, sens, fk_user_author, import_key, code_journal, journal_label, piece_num, date_creation)'; $sql .= ' SELECT doc_date, doc_type,'; $sql .= ' doc_ref, fk_doc, fk_docdet, entity, thirdparty_code, subledger_account, subledger_label,'; $sql .= ' numero_compte, label_compte, label_operation, debit, credit,'; - $sql .= ' montant, sens, fk_user_author, import_key, code_journal, journal_label, '.$next_piecenum.', "'.$this->db->idate($now).'"'; - $sql .= ' FROM '.MAIN_DB_PREFIX . $this->table_element.'_tmp WHERE piece_num = '.$piece_num; + $sql .= ' montant, sens, fk_user_author, import_key, code_journal, journal_label, ' . $next_piecenum . ', "' . $this->db->idate($now) . '"'; + $sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element . '_tmp WHERE piece_num = ' . $piece_num; $resql = $this->db->query($sql); if (! $resql) { $error ++; $this->errors[] = 'Error ' . $this->db->lasterror(); dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR); } - $sql = 'DELETE FROM '.MAIN_DB_PREFIX . $this->table_element.'_tmp WHERE piece_num = '.$piece_num; + $sql = 'DELETE FROM ' . MAIN_DB_PREFIX . $this->table_element . '_tmp WHERE piece_num = ' . $piece_num; $resql = $this->db->query($sql); if (! $resql) { $error ++; @@ -1724,14 +1724,14 @@ class BookKeeping extends CommonObject dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR); } } elseif ($direction==1) { - $sql = 'DELETE FROM ' . MAIN_DB_PREFIX . $this->table_element.'_tmp WHERE piece_num = '.$piece_num; + $sql = 'DELETE FROM ' . MAIN_DB_PREFIX . $this->table_element . '_tmp WHERE piece_num = ' . $piece_num; $resql = $this->db->query($sql); if (! $resql) { $error ++; $this->errors[] = 'Error ' . $this->db->lasterror(); dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR); } - $sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this->table_element.'_tmp (doc_date, doc_type,'; + $sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this->table_element . '_tmp (doc_date, doc_type,'; $sql .= ' doc_ref, fk_doc, fk_docdet, thirdparty_code, subledger_account, subledger_label,'; $sql .= ' numero_compte, label_compte, label_operation, debit, credit,'; $sql .= ' montant, sens, fk_user_author, import_key, code_journal, journal_label, piece_num)'; @@ -1739,14 +1739,14 @@ class BookKeeping extends CommonObject $sql .= ' doc_ref, fk_doc, fk_docdet, thirdparty_code, subledger_account, subledger_label,'; $sql .= ' numero_compte, label_compte, label_operation, debit, credit,'; $sql .= ' montant, sens, fk_user_author, import_key, code_journal, journal_label, piece_num'; - $sql .= ' FROM '.MAIN_DB_PREFIX . $this->table_element.' WHERE piece_num = '.$piece_num; + $sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element.' WHERE piece_num = ' . $piece_num; $resql = $this->db->query($sql); if (! $resql) { $error ++; $this->errors[] = 'Error ' . $this->db->lasterror(); dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR); } - $sql = 'DELETE FROM '.MAIN_DB_PREFIX . $this->table_element.'_tmp WHERE piece_num = '.$piece_num; + $sql = 'DELETE FROM ' . MAIN_DB_PREFIX . $this->table_element . '_tmp WHERE piece_num = ' . $piece_num; $resql = $this->db->query($sql); if (! $resql) { $error ++; From 3921f706e24314b23ecd71082fb17e70b4b6680e Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 24 Jul 2019 09:01:11 +0200 Subject: [PATCH 809/828] Presentation nowrap on amount --- htdocs/compta/index.php | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/htdocs/compta/index.php b/htdocs/compta/index.php index c57b073b487..722a7a3ce82 100644 --- a/htdocs/compta/index.php +++ b/htdocs/compta/index.php @@ -410,8 +410,8 @@ if (! empty($conf->facture->enabled) && $user->rights->facture->lire) print ''; - if (! empty($conf->global->MAIN_SHOW_HT_ON_SUMMARY)) print ''; - print ''; + if (! empty($conf->global->MAIN_SHOW_HT_ON_SUMMARY)) print ''; + print ''; print ''; print ''; print ''; @@ -510,7 +510,7 @@ if (! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->facture- print $thirdpartystatic->getNomUrl(1, 'supplier', 44); print ''; if (! empty($conf->global->MAIN_SHOW_HT_ON_SUMMARY)) print ''; - print ''; + print ''; print ''; print ''; print ''; @@ -591,7 +591,7 @@ if (! empty($conf->don->enabled) && $user->rights->societe->lire) print ''; print ''; print ''; - print ''; + print ''; print ''; print ''; print ''; @@ -662,8 +662,8 @@ if (! empty($conf->tax->enabled) && $user->rights->tax->charges->lire) print ''; print ''; print ''; - print ''; - print ''; + print ''; + print ''; print ''; print ''; $tot_ttc+=$obj->amount; @@ -671,7 +671,7 @@ if (! empty($conf->tax->enabled) && $user->rights->tax->charges->lire) } print ''; - print ''; + print ''; print ''; print ''; print ''; @@ -784,8 +784,8 @@ if (! empty($conf->facture->enabled) && ! empty($conf->commande->enabled) && $us print $societestatic->getNomUrl(1, 'customer', 44); print ''; if (! empty($conf->global->MAIN_SHOW_HT_ON_SUMMARY)) print ''; - print ''; - print ''; + print ''; + print ''; print ''; print ''; $tot_ht += $obj->total_ht; @@ -797,8 +797,8 @@ if (! empty($conf->facture->enabled) && ! empty($conf->commande->enabled) && $us print ''; if (! empty($conf->global->MAIN_SHOW_HT_ON_SUMMARY)) print ''; - print ''; - print ''; + print ''; + print ''; print ''; print ''; print '
'.$langs->trans("From").' '; @@ -762,7 +763,8 @@ foreach ($listofreferent as $key => $value) // Define form with the combo list of elements to link $addform.='
'; $addform.=''; - $addform.=''; + $addform.=''; + $addform.=''; $addform.=''; $addform.=''; $addform.=''; From 0a1f4b793172dd29bc83256a72198ec1995ac885 Mon Sep 17 00:00:00 2001 From: atm-josselin Date: Tue, 23 Jul 2019 09:45:17 +0200 Subject: [PATCH 798/828] FIX : correct error in files with multiple spaces --- htdocs/core/lib/files.lib.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index fa1a5e50a50..ed169573117 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -1540,6 +1540,11 @@ function dol_add_file_process($upload_dir, $allowoverwrite=0, $donotupdatesessio $info = pathinfo($destfile); $destfile = dol_sanitizeFileName($info['filename'].'.'.strtolower($info['extension'])); + // We apply dol_string_nohtmltag also to clean file names (this remove duplicate spaces) because + // this function is also applied when we make try to download file (by the GETPOST(filename, 'alphanohtml') call). + $destfile = dol_string_nohtmltag($destfile); + $destfull = dol_string_nohtmltag($destfull); + $resupload = dol_move_uploaded_file($TFile['tmp_name'][$i], $destfull, $allowoverwrite, 0, $TFile['error'][$i], 0, $varfiles); if (is_numeric($resupload) && $resupload > 0) // $resupload can be 'ErrorFileAlreadyExists' From c96ad85126b8b1e56e98fac016e48165d7a80fa4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 23 Jul 2019 12:34:17 +0200 Subject: [PATCH 799/828] Add hidden option to avoid experimental to use export files feature --- htdocs/core/menus/standard/eldy.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index 88595cd366a..4522d9067e0 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -1285,7 +1285,7 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM $newmenu->add("/accountancy/bookkeeping/balance.php?mainmenu=accountancy&leftmenu=accountancy_accountancy", $langs->trans("AccountBalance"), 1, $user->rights->accounting->mouvements->lire); // Files - if (! empty($conf->global->MAIN_FEATURES_LEVEL) && $conf->global->MAIN_FEATURES_LEVEL >= 1) + if ((! empty($conf->global->MAIN_FEATURES_LEVEL) && $conf->global->MAIN_FEATURES_LEVEL >= 1) || ! empty($conf->global->ACCOUNTANCY_SHOW_EXPORT_FILES_MENU)) { $newmenu->add("/compta/accounting-files.php?mainmenu=accountancy&leftmenu=accountancy_files", $langs->trans("AccountantFiles"), 1, $user->rights->accounting->mouvements->lire); } From 8aaa716e33826408be6c035ae69e5d4e3ef44f61 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 23 Jul 2019 13:05:33 +0200 Subject: [PATCH 800/828] Fix missing title --- htdocs/compta/journal/sellsjournal.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/journal/sellsjournal.php b/htdocs/compta/journal/sellsjournal.php index 123bb3c7770..da85e28c612 100644 --- a/htdocs/compta/journal/sellsjournal.php +++ b/htdocs/compta/journal/sellsjournal.php @@ -87,7 +87,7 @@ if (empty($date_start) || empty($date_end)) // We define date_start and date_end $date_start=dol_get_first_day($pastmonthyear, $pastmonth, false); $date_end=dol_get_last_day($pastmonthyear, $pastmonth, false); } -$nom=$langs->trans("SellsJournal"); +$name=$langs->trans("SellsJournal"); $periodlink=''; $exportlink=''; $builddate=dol_now(); From 239b7d56b48f79d142c03ec39729fab0743f59c9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 23 Jul 2019 13:31:00 +0200 Subject: [PATCH 801/828] Fix compatibility with plugins using old jquery --- htdocs/main.inc.php | 58 ++++++++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 27 deletions(-) diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 77f2a1f746f..b9b0204bf7e 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -1862,34 +1862,38 @@ function top_menu_user(User $user, Translate $langs)
- - - - '; - + + '; + } return $btnUser; } From 46d0137d30c189904fec060ea8217f8aed435e9b Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Tue, 23 Jul 2019 14:04:54 +0200 Subject: [PATCH 802/828] FIx display civility in contact card --- htdocs/contact/class/contact.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index d6053a46b35..a8bd548fd8a 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -345,7 +345,7 @@ class Contact extends CommonObject $sql = "UPDATE ".MAIN_DB_PREFIX."socpeople SET "; if ($this->socid > 0) $sql .= " fk_soc='".$this->db->escape($this->socid)."',"; elseif ($this->socid == -1) $sql .= " fk_soc=null,"; - $sql .= " civility='".$this->db->escape($this->civility_id)."'"; + $sql .= " civility='".$this->db->escape($this->civility)."'"; $sql .= ", lastname='".$this->db->escape($this->lastname)."'"; $sql .= ", firstname='".$this->db->escape($this->firstname)."'"; $sql .= ", address='".$this->db->escape($this->address)."'"; @@ -1218,7 +1218,7 @@ class Contact extends CommonObject global $langs; $langs->load("dict"); - $code=(! empty($this->civility_id)?$this->civility_id:(! empty($this->civilite_id)?$this->civilite_id:'')); + $code=(! empty($this->civility_id)?$this->civility:(! empty($this->civilite)?$this->civilite:'')); if (empty($code)) return ''; return $langs->getLabelFromKey($this->db, "Civility".$code, "c_civility", "code", "label", $code); } From cc10f5e6840f201ca5374391b5fa4bbf47f3c7cb Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Tue, 23 Jul 2019 14:06:51 +0200 Subject: [PATCH 803/828] Update card.php --- htdocs/contact/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/contact/card.php b/htdocs/contact/card.php index 97dd835bda0..12e2e1cb206 100644 --- a/htdocs/contact/card.php +++ b/htdocs/contact/card.php @@ -872,7 +872,7 @@ else // Civility print '
'; - print $formcompany->select_civility(isset($_POST["civility_id"])?GETPOST("civility_id"):$object->civility_id); + print $formcompany->select_civility(isset($_POST["civility"])?GETPOST("civility"):$object->civility_code); print '
'; - print $formcompany->select_civility(GETPOST("civility_id", 'alpha')?GETPOST("civility_id", 'alpha'):$object->civility_id); + print $formcompany->select_civility(GETPOST("civility", 'alpha')?GETPOST("civility", 'alpha'):$object->civility_code); print '
'.$langs->trans('Date').''.$langs->trans('Project').''.$form->textwithpicto($langs->trans('Project'), $langs->trans("ClosedProjectsAreHidden")).''.$langs->trans('CarCategory').''.$langs->trans('Type').''.$langs->trans('Description').''; - $formproject->select_projects(-1, $fk_projet, 'fk_projet', 0, 0, 1, 1, 0, 0, 0, '', 0, 0, 'maxwidth300'); + $formproject->select_projects(-1, $fk_projet, 'fk_projet', 0, 0, 1, -1, 0, 0, 0, '', 0, 0, 'maxwidth300'); print ''; print $thirdpartystatic->getNomUrl(1, 'customer', 44); print ''.price($obj->total_ht).''.price($obj->total_ttc).''.price($obj->total_ht).''.price($obj->total_ttc).''.dol_print_date($db->jdate($obj->tms), 'day').''.$facstatic->LibStatut($obj->paye, $obj->fk_statut, 3, $obj->am).'
'.price($obj->total_ht).''.price($obj->total_ttc).''.price($obj->total_ttc).''.dol_print_date($db->jdate($obj->tms), 'day').''.$facstatic->LibStatut($obj->paye, $obj->fk_statut, 3).'
'.$donationstatic->getNomUrl(1).''.$label.''.price($objp->amount).''.price($objp->amount).''.dol_print_date($db->jdate($objp->dm), 'day').''.$donationstatic->LibStatut($objp->fk_statut, 3).'
'.$chargestatic->getNomUrl(1).''.dol_print_date($db->jdate($obj->date_ech), 'day').''.price($obj->amount).''.price($obj->sumpaid).''.price($obj->amount).''.price($obj->sumpaid).''.$chargestatic->getLibStatut(3).'
'.$langs->trans("Total").''.price($tot_ttc).''.price($tot_ttc).' 
'.price($obj->total_ht).''.price($obj->total_ttc).''.price($obj->total_ttc-$obj->tot_fttc).''.price($obj->total_ttc).''.price($obj->total_ttc-$obj->tot_fttc).''.$commandestatic->LibStatut($obj->fk_statut, $obj->facture, 3).'
'.$langs->trans("Total").'   ('.$langs->trans("RemainderToBill").': '.price($tot_tobill).') '.price($tot_ht).''.price($tot_ttc).''.price($tot_tobill).''.price($tot_ttc).''.price($tot_tobill).' 

'; @@ -909,8 +909,8 @@ if (! empty($conf->facture->enabled) && $user->rights->facture->lire) print '
'.dol_print_date($db->jdate($obj->datelimite), 'day').''.price($obj->total_ht).''.price($obj->total_ttc).''.price($obj->am).''.price($obj->total_ttc).''.price($obj->am).''.$facstatic->LibStatut($obj->paye, $obj->fk_statut, 3, $obj->am).'
'.$langs->trans("Total").'   ('.$langs->trans("RemainderToTake").': '.price($total_ttc-$totalam).')  '.price($total).''.price($total_ttc).''.price($totalam).''.price($total_ttc).''.price($totalam).' 
'.$societestatic->getNomUrl(1, 'supplier', 44).''.dol_print_date($db->jdate($obj->date_lim_reglement), 'day').''.price($obj->total_ht).''.price($obj->total_ttc).''.price($obj->am).''.price($obj->total_ttc).''.price($obj->am).''.$facstatic->LibStatut($obj->paye, $obj->fk_statut, 3).'
'.$langs->trans("Total").'   ('.$langs->trans("RemainderToPay").': '.price($total_ttc-$totalam).')  '.price($total).''.price($total_ttc).''.price($totalam).''.price($total_ttc).''.price($totalam).' 
'; + print ''; if (isset($objp->price_base_type) && $objp->price_base_type == 'TTC') print price($objp->price_ttc).' '.$langs->trans("TTC"); else print price($objp->price).' '.$langs->trans("HT"); print '
'; if ($product_type==0) @@ -465,11 +466,11 @@ function activitytrim($product_type) if ($trim1+$trim2+$trim3+$trim4 > 0) { print ''; - print ''; - print ''; - print ''; - print ''; - print ''; + print ''; + print ''; + print ''; + print ''; + print ''; print ''; $lgn++; } @@ -498,14 +499,14 @@ function activitytrim($product_type) if ($trim1+$trim2+$trim3+$trim4 > 0) { print ''; - print ''; - print ''; - print ''; - print ''; - print ''; + print ''; + print ''; + print ''; + print ''; + print ''; print ''; } if ($num > 0 ) - print '
'.$tmpyear.''.price($trim1).''.price($trim2).''.price($trim3).''.price($trim4).''.price($trim1+$trim2+$trim3+$trim4).''.price($trim1).''.price($trim2).''.price($trim3).''.price($trim4).''.price($trim1+$trim2+$trim3+$trim4).'
'.$tmpyear.''.price($trim1).''.price($trim2).''.price($trim3).''.price($trim4).''.price($trim1+$trim2+$trim3+$trim4).''.price($trim1).''.price($trim2).''.price($trim3).''.price($trim4).''.price($trim1+$trim2+$trim3+$trim4).'
'; + print '
'; } } From ba60e99b45cc0d3097648d02ce28643c9f0b77fa Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Wed, 24 Jul 2019 13:22:41 +0200 Subject: [PATCH 811/828] Update card.php --- htdocs/contact/card.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/contact/card.php b/htdocs/contact/card.php index ff0c9f5cc98..76d0e3911b5 100644 --- a/htdocs/contact/card.php +++ b/htdocs/contact/card.php @@ -179,7 +179,7 @@ if (empty($reshook)) $object->socid = GETPOST("socid", 'int'); $object->lastname = GETPOST("lastname", 'alpha'); $object->firstname = GETPOST("firstname", 'alpha'); - $object->civility = GETPOST("civility_id", 'alpha'); + $object->civility_id = GETPOST("civility_id", 'alpha'); $object->poste = GETPOST("poste", 'alpha'); $object->address = GETPOST("address", 'alpha'); $object->zip = GETPOST("zipcode", 'alpha'); @@ -349,7 +349,7 @@ if (empty($reshook)) $object->socid = GETPOST("socid", 'int'); $object->lastname = GETPOST("lastname", 'alpha'); $object->firstname = GETPOST("firstname", 'alpha'); - $object->civility = GETPOST("civility_id", 'alpha'); + $object->civility_id = GETPOST("civility_id", 'alpha'); $object->poste = GETPOST("poste", 'alpha'); $object->address = GETPOST("address", 'alpha'); From c219b62b10ab4dc02b0fc47a399433f78a5ae2ad Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Wed, 24 Jul 2019 13:23:24 +0200 Subject: [PATCH 812/828] Update contact.class.php --- htdocs/contact/class/contact.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index a8bd548fd8a..f1ebeddd30e 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -345,7 +345,7 @@ class Contact extends CommonObject $sql = "UPDATE ".MAIN_DB_PREFIX."socpeople SET "; if ($this->socid > 0) $sql .= " fk_soc='".$this->db->escape($this->socid)."',"; elseif ($this->socid == -1) $sql .= " fk_soc=null,"; - $sql .= " civility='".$this->db->escape($this->civility)."'"; + $sql .= " civility='".$this->db->escape($this->civility_id)."'"; $sql .= ", lastname='".$this->db->escape($this->lastname)."'"; $sql .= ", firstname='".$this->db->escape($this->firstname)."'"; $sql .= ", address='".$this->db->escape($this->address)."'"; From 907ba62054ad3b60b6708fa94f9ce34df033ffe9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 24 Jul 2019 14:59:03 +0200 Subject: [PATCH 813/828] Sync transifex --- htdocs/langs/ar_SA/accountancy.lang | 1 + htdocs/langs/ar_SA/admin.lang | 13 +- htdocs/langs/ar_SA/bills.lang | 2 +- htdocs/langs/ar_SA/companies.lang | 3 +- htdocs/langs/ar_SA/other.lang | 2 + htdocs/langs/ar_SA/website.lang | 2 +- htdocs/langs/bg_BG/accountancy.lang | 1 + htdocs/langs/bg_BG/admin.lang | 1619 +++++++++++---------- htdocs/langs/bg_BG/agenda.lang | 112 +- htdocs/langs/bg_BG/banks.lang | 156 +- htdocs/langs/bg_BG/bills.lang | 242 +-- htdocs/langs/bg_BG/bookmarks.lang | 28 +- htdocs/langs/bg_BG/cashdesk.lang | 2 +- htdocs/langs/bg_BG/categories.lang | 160 +- htdocs/langs/bg_BG/commercial.lang | 88 +- htdocs/langs/bg_BG/companies.lang | 1 + htdocs/langs/bg_BG/compta.lang | 252 ++-- htdocs/langs/bg_BG/contracts.lang | 134 +- htdocs/langs/bg_BG/deliveries.lang | 37 +- htdocs/langs/bg_BG/dict.lang | 112 +- htdocs/langs/bg_BG/ecm.lang | 70 +- htdocs/langs/bg_BG/help.lang | 16 +- htdocs/langs/bg_BG/holiday.lang | 144 +- htdocs/langs/bg_BG/interventions.lang | 90 +- htdocs/langs/bg_BG/languages.lang | 49 +- htdocs/langs/bg_BG/link.lang | 12 +- htdocs/langs/bg_BG/mails.lang | 6 +- htdocs/langs/bg_BG/main.lang | 190 +-- htdocs/langs/bg_BG/margins.lang | 76 +- htdocs/langs/bg_BG/other.lang | 14 +- htdocs/langs/bg_BG/products.lang | 2 +- htdocs/langs/bg_BG/resource.lang | 20 +- htdocs/langs/bg_BG/salaries.lang | 8 +- htdocs/langs/bg_BG/stocks.lang | 14 +- htdocs/langs/bg_BG/supplier_proposal.lang | 2 +- htdocs/langs/bg_BG/suppliers.lang | 20 +- htdocs/langs/bg_BG/trips.lang | 28 +- htdocs/langs/bg_BG/website.lang | 2 +- htdocs/langs/bg_BG/workflow.lang | 28 +- htdocs/langs/bn_BD/accountancy.lang | 1 + htdocs/langs/bn_BD/admin.lang | 13 +- htdocs/langs/bn_BD/bills.lang | 2 +- htdocs/langs/bn_BD/companies.lang | 3 +- htdocs/langs/bn_BD/other.lang | 2 + htdocs/langs/bn_BD/website.lang | 2 +- htdocs/langs/bs_BA/accountancy.lang | 1 + htdocs/langs/bs_BA/admin.lang | 13 +- htdocs/langs/bs_BA/bills.lang | 2 +- htdocs/langs/bs_BA/companies.lang | 3 +- htdocs/langs/bs_BA/other.lang | 2 + htdocs/langs/bs_BA/website.lang | 2 +- htdocs/langs/ca_ES/accountancy.lang | 17 +- htdocs/langs/ca_ES/admin.lang | 81 +- htdocs/langs/ca_ES/bills.lang | 18 +- htdocs/langs/ca_ES/boxes.lang | 8 +- htdocs/langs/ca_ES/cashdesk.lang | 2 +- htdocs/langs/ca_ES/companies.lang | 1 + htdocs/langs/ca_ES/compta.lang | 8 +- htdocs/langs/ca_ES/errors.lang | 2 +- htdocs/langs/ca_ES/install.lang | 6 +- htdocs/langs/ca_ES/mails.lang | 6 +- htdocs/langs/ca_ES/members.lang | 2 +- htdocs/langs/ca_ES/other.lang | 12 +- htdocs/langs/ca_ES/products.lang | 2 +- htdocs/langs/ca_ES/projects.lang | 4 +- htdocs/langs/ca_ES/salaries.lang | 2 +- htdocs/langs/ca_ES/stocks.lang | 6 +- htdocs/langs/ca_ES/suppliers.lang | 12 +- htdocs/langs/ca_ES/website.lang | 4 +- htdocs/langs/ca_ES/withdrawals.lang | 6 +- htdocs/langs/cs_CZ/accountancy.lang | 1 + htdocs/langs/cs_CZ/admin.lang | 13 +- htdocs/langs/cs_CZ/bills.lang | 2 +- htdocs/langs/cs_CZ/companies.lang | 1 + htdocs/langs/cs_CZ/other.lang | 14 +- htdocs/langs/cs_CZ/website.lang | 2 +- htdocs/langs/da_DK/accountancy.lang | 1 + htdocs/langs/da_DK/admin.lang | 13 +- htdocs/langs/da_DK/bills.lang | 2 +- htdocs/langs/da_DK/companies.lang | 3 +- htdocs/langs/da_DK/other.lang | 2 + htdocs/langs/da_DK/website.lang | 2 +- htdocs/langs/de_AT/admin.lang | 1 + htdocs/langs/de_AT/companies.lang | 1 + htdocs/langs/de_CH/accountancy.lang | 26 +- htdocs/langs/de_CH/admin.lang | 115 +- htdocs/langs/de_CH/agenda.lang | 2 + htdocs/langs/de_CH/boxes.lang | 2 +- htdocs/langs/de_CH/categories.lang | 10 + htdocs/langs/de_CH/commercial.lang | 10 + htdocs/langs/de_CH/companies.lang | 78 +- htdocs/langs/de_CH/deliveries.lang | 13 +- htdocs/langs/de_CH/dict.lang | 7 + htdocs/langs/de_CH/errors.lang | 17 + htdocs/langs/de_CH/interventions.lang | 6 + htdocs/langs/de_CH/main.lang | 16 +- htdocs/langs/de_CH/members.lang | 10 + htdocs/langs/de_CH/orders.lang | 3 + htdocs/langs/de_CH/other.lang | 5 + htdocs/langs/de_CH/paybox.lang | 2 +- htdocs/langs/de_CH/printing.lang | 4 + htdocs/langs/de_CH/propal.lang | 4 + htdocs/langs/de_CH/users.lang | 1 + htdocs/langs/de_CH/website.lang | 1 + htdocs/langs/de_DE/accountancy.lang | 13 +- htdocs/langs/de_DE/admin.lang | 73 +- htdocs/langs/de_DE/bills.lang | 2 +- htdocs/langs/de_DE/companies.lang | 1 + htdocs/langs/de_DE/other.lang | 2 + htdocs/langs/de_DE/website.lang | 2 +- htdocs/langs/de_DE/workflow.lang | 22 +- htdocs/langs/el_GR/accountancy.lang | 1 + htdocs/langs/el_GR/admin.lang | 13 +- htdocs/langs/el_GR/bills.lang | 2 +- htdocs/langs/el_GR/companies.lang | 3 +- htdocs/langs/el_GR/other.lang | 2 + htdocs/langs/el_GR/website.lang | 2 +- htdocs/langs/en_AU/admin.lang | 2 + htdocs/langs/en_CA/admin.lang | 2 + htdocs/langs/en_GB/accountancy.lang | 3 +- htdocs/langs/en_GB/admin.lang | 2 + htdocs/langs/en_IN/admin.lang | 2 + htdocs/langs/es_CL/accountancy.lang | 60 +- htdocs/langs/es_CL/admin.lang | 524 ++++++- htdocs/langs/es_CL/agenda.lang | 17 + htdocs/langs/es_CL/assets.lang | 4 + htdocs/langs/es_CL/banks.lang | 21 +- htdocs/langs/es_CL/bills.lang | 83 ++ htdocs/langs/es_CL/bookmarks.lang | 9 +- htdocs/langs/es_CL/boxes.lang | 32 + htdocs/langs/es_CL/commercial.lang | 5 +- htdocs/langs/es_CL/companies.lang | 59 + htdocs/langs/es_CL/compta.lang | 13 + htdocs/langs/es_CL/ecm.lang | 4 +- htdocs/langs/es_CL/install.lang | 64 + htdocs/langs/es_CL/interventions.lang | 6 + htdocs/langs/es_CL/main.lang | 84 ++ htdocs/langs/es_CL/members.lang | 19 + htdocs/langs/es_CL/orders.lang | 16 + htdocs/langs/es_CL/other.lang | 54 + htdocs/langs/es_CL/products.lang | 45 + htdocs/langs/es_CL/projects.lang | 55 + htdocs/langs/es_CL/propal.lang | 3 + htdocs/langs/es_CL/receptions.lang | 28 + htdocs/langs/es_CL/stocks.lang | 59 +- htdocs/langs/es_CL/supplier_proposal.lang | 1 + htdocs/langs/es_CL/ticket.lang | 37 + htdocs/langs/es_CL/workflow.lang | 21 +- htdocs/langs/es_CO/admin.lang | 4 +- htdocs/langs/es_CO/bills.lang | 1 - htdocs/langs/es_DO/admin.lang | 2 + htdocs/langs/es_EC/admin.lang | 2 - htdocs/langs/es_ES/accountancy.lang | 13 +- htdocs/langs/es_ES/admin.lang | 75 +- htdocs/langs/es_ES/cashdesk.lang | 2 +- htdocs/langs/es_ES/companies.lang | 1 + htdocs/langs/es_ES/mails.lang | 6 +- htdocs/langs/es_ES/members.lang | 2 +- htdocs/langs/es_ES/other.lang | 2 + htdocs/langs/es_ES/products.lang | 2 +- htdocs/langs/es_ES/salaries.lang | 2 +- htdocs/langs/es_ES/stocks.lang | 6 +- htdocs/langs/es_ES/website.lang | 4 +- htdocs/langs/es_ES/withdrawals.lang | 4 +- htdocs/langs/es_MX/accountancy.lang | 3 +- htdocs/langs/es_MX/admin.lang | 3 +- htdocs/langs/es_PA/admin.lang | 2 + htdocs/langs/es_PE/accountancy.lang | 3 +- htdocs/langs/es_PE/admin.lang | 2 + htdocs/langs/es_VE/admin.lang | 2 + htdocs/langs/et_EE/accountancy.lang | 1 + htdocs/langs/et_EE/admin.lang | 225 +-- htdocs/langs/et_EE/agenda.lang | 118 +- htdocs/langs/et_EE/assets.lang | 54 +- htdocs/langs/et_EE/banks.lang | 20 +- htdocs/langs/et_EE/bills.lang | 56 +- htdocs/langs/et_EE/companies.lang | 5 +- htdocs/langs/et_EE/exports.lang | 100 +- htdocs/langs/et_EE/holiday.lang | 2 +- htdocs/langs/et_EE/interventions.lang | 2 +- htdocs/langs/et_EE/main.lang | 6 +- htdocs/langs/et_EE/orders.lang | 2 +- htdocs/langs/et_EE/other.lang | 2 + htdocs/langs/et_EE/products.lang | 2 +- htdocs/langs/et_EE/projects.lang | 2 +- htdocs/langs/et_EE/suppliers.lang | 22 +- htdocs/langs/et_EE/ticket.lang | 2 +- htdocs/langs/et_EE/website.lang | 2 +- htdocs/langs/eu_ES/accountancy.lang | 1 + htdocs/langs/eu_ES/admin.lang | 13 +- htdocs/langs/eu_ES/bills.lang | 2 +- htdocs/langs/eu_ES/companies.lang | 3 +- htdocs/langs/eu_ES/other.lang | 2 + htdocs/langs/eu_ES/website.lang | 2 +- htdocs/langs/fa_IR/accountancy.lang | 1 + htdocs/langs/fa_IR/admin.lang | 75 +- htdocs/langs/fa_IR/agenda.lang | 2 +- htdocs/langs/fa_IR/bills.lang | 10 +- htdocs/langs/fa_IR/companies.lang | 1 + htdocs/langs/fa_IR/main.lang | 12 +- htdocs/langs/fa_IR/other.lang | 2 + htdocs/langs/fa_IR/website.lang | 2 +- htdocs/langs/fi_FI/accountancy.lang | 1 + htdocs/langs/fi_FI/admin.lang | 13 +- htdocs/langs/fi_FI/bills.lang | 2 +- htdocs/langs/fi_FI/companies.lang | 3 +- htdocs/langs/fi_FI/other.lang | 2 + htdocs/langs/fi_FI/website.lang | 2 +- htdocs/langs/fr_BE/accountancy.lang | 3 +- htdocs/langs/fr_BE/admin.lang | 2 + htdocs/langs/fr_CA/accountancy.lang | 3 +- htdocs/langs/fr_CA/admin.lang | 3 +- htdocs/langs/fr_FR/accountancy.lang | 11 +- htdocs/langs/fr_FR/admin.lang | 77 +- htdocs/langs/fr_FR/bills.lang | 2 +- htdocs/langs/fr_FR/blockedlog.lang | 2 +- htdocs/langs/fr_FR/cashdesk.lang | 2 +- htdocs/langs/fr_FR/companies.lang | 1 + htdocs/langs/fr_FR/mails.lang | 6 +- htdocs/langs/fr_FR/main.lang | 2 +- htdocs/langs/fr_FR/members.lang | 2 +- htdocs/langs/fr_FR/mrp.lang | 2 +- htdocs/langs/fr_FR/other.lang | 4 +- htdocs/langs/fr_FR/products.lang | 2 +- htdocs/langs/fr_FR/salaries.lang | 2 +- htdocs/langs/fr_FR/stocks.lang | 6 +- htdocs/langs/fr_FR/website.lang | 6 +- htdocs/langs/fr_FR/withdrawals.lang | 4 +- htdocs/langs/he_IL/accountancy.lang | 1 + htdocs/langs/he_IL/admin.lang | 13 +- htdocs/langs/he_IL/bills.lang | 2 +- htdocs/langs/he_IL/companies.lang | 3 +- htdocs/langs/he_IL/other.lang | 2 + htdocs/langs/he_IL/website.lang | 2 +- htdocs/langs/hr_HR/accountancy.lang | 1 + htdocs/langs/hr_HR/admin.lang | 13 +- htdocs/langs/hr_HR/bills.lang | 2 +- htdocs/langs/hr_HR/companies.lang | 3 +- htdocs/langs/hr_HR/other.lang | 2 + htdocs/langs/hr_HR/website.lang | 2 +- htdocs/langs/hu_HU/accountancy.lang | 1 + htdocs/langs/hu_HU/admin.lang | 13 +- htdocs/langs/hu_HU/bills.lang | 2 +- htdocs/langs/hu_HU/companies.lang | 3 +- htdocs/langs/hu_HU/other.lang | 2 + htdocs/langs/hu_HU/website.lang | 2 +- htdocs/langs/id_ID/accountancy.lang | 1 + htdocs/langs/id_ID/admin.lang | 13 +- htdocs/langs/id_ID/bills.lang | 2 +- htdocs/langs/id_ID/companies.lang | 1 + htdocs/langs/id_ID/other.lang | 2 + htdocs/langs/id_ID/website.lang | 2 +- htdocs/langs/is_IS/accountancy.lang | 1 + htdocs/langs/is_IS/admin.lang | 13 +- htdocs/langs/is_IS/bills.lang | 2 +- htdocs/langs/is_IS/companies.lang | 3 +- htdocs/langs/is_IS/other.lang | 2 + htdocs/langs/is_IS/website.lang | 2 +- htdocs/langs/it_IT/accountancy.lang | 149 +- htdocs/langs/it_IT/admin.lang | 31 +- htdocs/langs/it_IT/banks.lang | 4 +- htdocs/langs/it_IT/bills.lang | 18 +- htdocs/langs/it_IT/boxes.lang | 10 +- htdocs/langs/it_IT/companies.lang | 9 +- htdocs/langs/it_IT/main.lang | 14 +- htdocs/langs/it_IT/members.lang | 2 +- htdocs/langs/it_IT/other.lang | 2 + htdocs/langs/it_IT/website.lang | 2 +- htdocs/langs/ja_JP/accountancy.lang | 1 + htdocs/langs/ja_JP/admin.lang | 13 +- htdocs/langs/ja_JP/bills.lang | 2 +- htdocs/langs/ja_JP/companies.lang | 3 +- htdocs/langs/ja_JP/other.lang | 2 + htdocs/langs/ja_JP/website.lang | 2 +- htdocs/langs/ka_GE/accountancy.lang | 1 + htdocs/langs/ka_GE/admin.lang | 13 +- htdocs/langs/ka_GE/bills.lang | 2 +- htdocs/langs/ka_GE/companies.lang | 3 +- htdocs/langs/ka_GE/other.lang | 2 + htdocs/langs/ka_GE/website.lang | 2 +- htdocs/langs/kn_IN/accountancy.lang | 1 + htdocs/langs/kn_IN/admin.lang | 13 +- htdocs/langs/kn_IN/bills.lang | 2 +- htdocs/langs/kn_IN/companies.lang | 3 +- htdocs/langs/kn_IN/other.lang | 2 + htdocs/langs/kn_IN/website.lang | 2 +- htdocs/langs/ko_KR/accountancy.lang | 1 + htdocs/langs/ko_KR/admin.lang | 13 +- htdocs/langs/ko_KR/bills.lang | 2 +- htdocs/langs/ko_KR/companies.lang | 3 +- htdocs/langs/ko_KR/other.lang | 2 + htdocs/langs/ko_KR/website.lang | 2 +- htdocs/langs/lo_LA/accountancy.lang | 1 + htdocs/langs/lo_LA/admin.lang | 13 +- htdocs/langs/lo_LA/bills.lang | 2 +- htdocs/langs/lo_LA/companies.lang | 3 +- htdocs/langs/lo_LA/other.lang | 2 + htdocs/langs/lo_LA/website.lang | 2 +- htdocs/langs/lt_LT/accountancy.lang | 1 + htdocs/langs/lt_LT/admin.lang | 13 +- htdocs/langs/lt_LT/bills.lang | 2 +- htdocs/langs/lt_LT/companies.lang | 3 +- htdocs/langs/lt_LT/other.lang | 2 + htdocs/langs/lt_LT/website.lang | 2 +- htdocs/langs/lv_LV/accountancy.lang | 13 +- htdocs/langs/lv_LV/admin.lang | 75 +- htdocs/langs/lv_LV/bills.lang | 2 +- htdocs/langs/lv_LV/cashdesk.lang | 2 +- htdocs/langs/lv_LV/companies.lang | 1 + htdocs/langs/lv_LV/mails.lang | 6 +- htdocs/langs/lv_LV/members.lang | 2 +- htdocs/langs/lv_LV/other.lang | 2 + htdocs/langs/lv_LV/products.lang | 2 +- htdocs/langs/lv_LV/salaries.lang | 2 +- htdocs/langs/lv_LV/stocks.lang | 6 +- htdocs/langs/lv_LV/website.lang | 4 +- htdocs/langs/lv_LV/withdrawals.lang | 4 +- htdocs/langs/mk_MK/accountancy.lang | 1 + htdocs/langs/mk_MK/admin.lang | 13 +- htdocs/langs/mk_MK/bills.lang | 2 +- htdocs/langs/mk_MK/companies.lang | 3 +- htdocs/langs/mk_MK/other.lang | 2 + htdocs/langs/mk_MK/website.lang | 2 +- htdocs/langs/mn_MN/accountancy.lang | 1 + htdocs/langs/mn_MN/admin.lang | 13 +- htdocs/langs/mn_MN/bills.lang | 2 +- htdocs/langs/mn_MN/companies.lang | 3 +- htdocs/langs/mn_MN/other.lang | 2 + htdocs/langs/mn_MN/website.lang | 2 +- htdocs/langs/nb_NO/accountancy.lang | 13 +- htdocs/langs/nb_NO/admin.lang | 79 +- htdocs/langs/nb_NO/bills.lang | 2 +- htdocs/langs/nb_NO/cashdesk.lang | 2 +- htdocs/langs/nb_NO/companies.lang | 1 + htdocs/langs/nb_NO/mails.lang | 6 +- htdocs/langs/nb_NO/members.lang | 2 +- htdocs/langs/nb_NO/other.lang | 136 +- htdocs/langs/nb_NO/products.lang | 2 +- htdocs/langs/nb_NO/salaries.lang | 2 +- htdocs/langs/nb_NO/stocks.lang | 6 +- htdocs/langs/nb_NO/website.lang | 4 +- htdocs/langs/nb_NO/withdrawals.lang | 4 +- htdocs/langs/nl_BE/accountancy.lang | 1 - htdocs/langs/nl_BE/admin.lang | 16 +- htdocs/langs/nl_BE/agenda.lang | 16 + htdocs/langs/nl_BE/contracts.lang | 18 + htdocs/langs/nl_BE/interventions.lang | 1 + htdocs/langs/nl_BE/ticket.lang | 14 + htdocs/langs/nl_NL/accountancy.lang | 1 + htdocs/langs/nl_NL/admin.lang | 13 +- htdocs/langs/nl_NL/bills.lang | 20 +- htdocs/langs/nl_NL/companies.lang | 1 + htdocs/langs/nl_NL/other.lang | 2 + htdocs/langs/nl_NL/website.lang | 2 +- htdocs/langs/pl_PL/accountancy.lang | 1 + htdocs/langs/pl_PL/admin.lang | 13 +- htdocs/langs/pl_PL/bills.lang | 2 +- htdocs/langs/pl_PL/companies.lang | 3 +- htdocs/langs/pl_PL/other.lang | 2 + htdocs/langs/pl_PL/website.lang | 2 +- htdocs/langs/pt_BR/accountancy.lang | 2 +- htdocs/langs/pt_BR/admin.lang | 1 - htdocs/langs/pt_PT/accountancy.lang | 1 + htdocs/langs/pt_PT/admin.lang | 13 +- htdocs/langs/pt_PT/bills.lang | 2 +- htdocs/langs/pt_PT/companies.lang | 3 +- htdocs/langs/pt_PT/other.lang | 2 + htdocs/langs/pt_PT/website.lang | 2 +- htdocs/langs/ro_RO/accountancy.lang | 1 + htdocs/langs/ro_RO/admin.lang | 13 +- htdocs/langs/ro_RO/bills.lang | 2 +- htdocs/langs/ro_RO/companies.lang | 3 +- htdocs/langs/ro_RO/other.lang | 2 + htdocs/langs/ro_RO/website.lang | 2 +- htdocs/langs/ru_RU/accountancy.lang | 37 +- htdocs/langs/ru_RU/admin.lang | 1145 +++++++-------- htdocs/langs/ru_RU/bills.lang | 10 +- htdocs/langs/ru_RU/blockedlog.lang | 24 +- htdocs/langs/ru_RU/bookmarks.lang | 16 +- htdocs/langs/ru_RU/boxes.lang | 90 +- htdocs/langs/ru_RU/cashdesk.lang | 26 +- htdocs/langs/ru_RU/categories.lang | 62 +- htdocs/langs/ru_RU/commercial.lang | 26 +- htdocs/langs/ru_RU/companies.lang | 159 +- htdocs/langs/ru_RU/compta.lang | 4 +- htdocs/langs/ru_RU/contracts.lang | 7 +- htdocs/langs/ru_RU/cron.lang | 26 +- htdocs/langs/ru_RU/dict.lang | 14 +- htdocs/langs/ru_RU/donations.lang | 6 +- htdocs/langs/ru_RU/ecm.lang | 8 +- htdocs/langs/ru_RU/help.lang | 2 +- htdocs/langs/ru_RU/holiday.lang | 4 +- htdocs/langs/ru_RU/hrm.lang | 4 +- htdocs/langs/ru_RU/main.lang | 316 ++-- htdocs/langs/ru_RU/orders.lang | 2 +- htdocs/langs/ru_RU/other.lang | 4 +- htdocs/langs/ru_RU/resource.lang | 2 +- htdocs/langs/ru_RU/salaries.lang | 24 +- htdocs/langs/ru_RU/stocks.lang | 4 +- htdocs/langs/ru_RU/suppliers.lang | 16 +- htdocs/langs/ru_RU/ticket.lang | 8 +- htdocs/langs/ru_RU/trips.lang | 4 +- htdocs/langs/ru_RU/users.lang | 66 +- htdocs/langs/ru_RU/website.lang | 6 +- htdocs/langs/ru_RU/workflow.lang | 28 +- htdocs/langs/sk_SK/accountancy.lang | 1 + htdocs/langs/sk_SK/admin.lang | 13 +- htdocs/langs/sk_SK/bills.lang | 2 +- htdocs/langs/sk_SK/companies.lang | 3 +- htdocs/langs/sk_SK/other.lang | 2 + htdocs/langs/sk_SK/website.lang | 2 +- htdocs/langs/sl_SI/accountancy.lang | 1 + htdocs/langs/sl_SI/admin.lang | 13 +- htdocs/langs/sl_SI/bills.lang | 2 +- htdocs/langs/sl_SI/companies.lang | 3 +- htdocs/langs/sl_SI/other.lang | 2 + htdocs/langs/sl_SI/website.lang | 2 +- htdocs/langs/sq_AL/accountancy.lang | 1 + htdocs/langs/sq_AL/admin.lang | 13 +- htdocs/langs/sq_AL/bills.lang | 2 +- htdocs/langs/sq_AL/companies.lang | 3 +- htdocs/langs/sq_AL/other.lang | 2 + htdocs/langs/sq_AL/website.lang | 2 +- htdocs/langs/sr_RS/accountancy.lang | 1 + htdocs/langs/sr_RS/admin.lang | 13 +- htdocs/langs/sr_RS/bills.lang | 2 +- htdocs/langs/sr_RS/companies.lang | 3 +- htdocs/langs/sr_RS/other.lang | 2 + htdocs/langs/sv_SE/accountancy.lang | 1 + htdocs/langs/sv_SE/admin.lang | 13 +- htdocs/langs/sv_SE/bills.lang | 2 +- htdocs/langs/sv_SE/companies.lang | 3 +- htdocs/langs/sv_SE/other.lang | 54 +- htdocs/langs/sv_SE/website.lang | 2 +- htdocs/langs/sw_SW/accountancy.lang | 1 + htdocs/langs/sw_SW/admin.lang | 13 +- htdocs/langs/sw_SW/bills.lang | 2 +- htdocs/langs/sw_SW/companies.lang | 3 +- htdocs/langs/sw_SW/other.lang | 2 + htdocs/langs/th_TH/accountancy.lang | 1 + htdocs/langs/th_TH/admin.lang | 13 +- htdocs/langs/th_TH/bills.lang | 2 +- htdocs/langs/th_TH/companies.lang | 3 +- htdocs/langs/th_TH/other.lang | 2 + htdocs/langs/th_TH/website.lang | 2 +- htdocs/langs/tr_TR/accountancy.lang | 1 + htdocs/langs/tr_TR/admin.lang | 31 +- htdocs/langs/tr_TR/agenda.lang | 2 +- htdocs/langs/tr_TR/assets.lang | 12 +- htdocs/langs/tr_TR/banks.lang | 84 +- htdocs/langs/tr_TR/bills.lang | 4 +- htdocs/langs/tr_TR/categories.lang | 2 +- htdocs/langs/tr_TR/companies.lang | 1 + htdocs/langs/tr_TR/compta.lang | 4 +- htdocs/langs/tr_TR/contracts.lang | 4 +- htdocs/langs/tr_TR/cron.lang | 6 +- htdocs/langs/tr_TR/errors.lang | 4 +- htdocs/langs/tr_TR/install.lang | 2 +- htdocs/langs/tr_TR/interventions.lang | 2 +- htdocs/langs/tr_TR/mails.lang | 10 +- htdocs/langs/tr_TR/main.lang | 16 +- htdocs/langs/tr_TR/orders.lang | 2 +- htdocs/langs/tr_TR/other.lang | 2 + htdocs/langs/tr_TR/products.lang | 12 +- htdocs/langs/tr_TR/projects.lang | 10 +- htdocs/langs/tr_TR/propal.lang | 2 +- htdocs/langs/tr_TR/resource.lang | 4 +- htdocs/langs/tr_TR/supplier_proposal.lang | 2 +- htdocs/langs/tr_TR/ticket.lang | 2 +- htdocs/langs/tr_TR/trips.lang | 2 +- htdocs/langs/tr_TR/users.lang | 10 +- htdocs/langs/tr_TR/website.lang | 6 +- htdocs/langs/uk_UA/accountancy.lang | 1 + htdocs/langs/uk_UA/admin.lang | 13 +- htdocs/langs/uk_UA/bills.lang | 2 +- htdocs/langs/uk_UA/companies.lang | 3 +- htdocs/langs/uk_UA/other.lang | 2 + htdocs/langs/uk_UA/website.lang | 2 +- htdocs/langs/uz_UZ/accountancy.lang | 1 + htdocs/langs/uz_UZ/admin.lang | 13 +- htdocs/langs/uz_UZ/bills.lang | 2 +- htdocs/langs/uz_UZ/companies.lang | 3 +- htdocs/langs/uz_UZ/other.lang | 2 + htdocs/langs/vi_VN/accountancy.lang | 1 + htdocs/langs/vi_VN/admin.lang | 27 +- htdocs/langs/vi_VN/bills.lang | 2 +- htdocs/langs/vi_VN/companies.lang | 3 +- htdocs/langs/vi_VN/main.lang | 2 +- htdocs/langs/vi_VN/other.lang | 2 + htdocs/langs/vi_VN/website.lang | 2 +- htdocs/langs/zh_CN/accountancy.lang | 1 + htdocs/langs/zh_CN/admin.lang | 13 +- htdocs/langs/zh_CN/bills.lang | 2 +- htdocs/langs/zh_CN/companies.lang | 3 +- htdocs/langs/zh_CN/other.lang | 2 + htdocs/langs/zh_CN/website.lang | 2 +- htdocs/langs/zh_TW/accountancy.lang | 1 + htdocs/langs/zh_TW/admin.lang | 13 +- htdocs/langs/zh_TW/bills.lang | 2 +- htdocs/langs/zh_TW/companies.lang | 3 +- htdocs/langs/zh_TW/other.lang | 2 + htdocs/langs/zh_TW/website.lang | 2 +- 502 files changed, 6347 insertions(+), 4399 deletions(-) diff --git a/htdocs/langs/ar_SA/accountancy.lang b/htdocs/langs/ar_SA/accountancy.lang index 738d9106e6f..1cdb76f1100 100644 --- a/htdocs/langs/ar_SA/accountancy.lang +++ b/htdocs/langs/ar_SA/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/ar_SA/admin.lang b/htdocs/langs/ar_SA/admin.lang index 8a5ed0b5304..1cbca5d3f51 100644 --- a/htdocs/langs/ar_SA/admin.lang +++ b/htdocs/langs/ar_SA/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=رابط إلى كائن ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=إنشاء / تعديل الخدمات Permission534=حذف خدمات Permission536=انظر / إدارة الخدمات الخفية Permission538=تصدير الخدمات -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=قراءة التبرعات Permission702=إنشاء / تعديل والهبات Permission703=حذف التبرعات @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/ar_SA/bills.lang b/htdocs/langs/ar_SA/bills.lang index 6b5fc0f0a3c..2984cd416a7 100644 --- a/htdocs/langs/ar_SA/bills.lang +++ b/htdocs/langs/ar_SA/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=الفاتورة الأولية InvoiceProFormaDesc= الفاتورة المبدئية عبارة عن صورة فاتورة حقيقية ولكنها لا تحتوي على قيمة للمحاسبة. InvoiceReplacement=استبدال الفاتورة InvoiceReplacementAsk=فاتورة استبدال الفاتورة -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=ملاحظة ائتمانية InvoiceAvoirAsk=ملاحظة ائتمانية لتصحيح الفاتورة InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/ar_SA/companies.lang b/htdocs/langs/ar_SA/companies.lang index 060ea2565d6..f7e393cad21 100644 --- a/htdocs/langs/ar_SA/companies.lang +++ b/htdocs/langs/ar_SA/companies.lang @@ -28,7 +28,7 @@ AliasNames=الاسم المستعار (التجارية، العلامات ال AliasNameShort=Alias Name Companies=الشركات CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=بلا Vendor=Vendor +Supplier=Vendor AddContact=إنشاء اتصال AddContactAddress=إنشاء الاتصال / عنوان EditContact=تحرير الاتصال / عنوان diff --git a/htdocs/langs/ar_SA/other.lang b/htdocs/langs/ar_SA/other.lang index c694d08bbe6..551689b875a 100644 --- a/htdocs/langs/ar_SA/other.lang +++ b/htdocs/langs/ar_SA/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=التدخل ٪ ق المصادق EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/ar_SA/website.lang b/htdocs/langs/ar_SA/website.lang index 1cf5f878abd..c1895cc0b84 100644 --- a/htdocs/langs/ar_SA/website.lang +++ b/htdocs/langs/ar_SA/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/bg_BG/accountancy.lang b/htdocs/langs/bg_BG/accountancy.lang index 09f1de20348..671bcc70f07 100644 --- a/htdocs/langs/bg_BG/accountancy.lang +++ b/htdocs/langs/bg_BG/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/bg_BG/admin.lang b/htdocs/langs/bg_BG/admin.lang index 5d092654c17..3e25a421f3f 100644 --- a/htdocs/langs/bg_BG/admin.lang +++ b/htdocs/langs/bg_BG/admin.lang @@ -5,137 +5,137 @@ Publisher=Издател VersionProgram=Версия на програмата VersionLastInstall=Първоначално инсталирана версия VersionLastUpgrade=Последно инсталирана версия -VersionExperimental=Експериментален -VersionDevelopment=Разработка -VersionUnknown=Неизвестен -VersionRecommanded=Препоръчва се -FileCheck=Проверки за цялостност на файлове -FileCheckDesc=Този инструмент ви позволява да проверите целостта на файловете и настройката на вашето приложение, сравнявайки всеки файл с официалния. Може да се провери и стойността на някои константи за настройка. Може да използвате този инструмент, за да определите дали някой файл е бил променен (напр. от хакер). +VersionExperimental=Експериментална +VersionDevelopment=В разработка +VersionUnknown=Неизвестна +VersionRecommanded=Препоръчителна +FileCheck=Интегритет +FileCheckDesc=Този инструмент позволява да проверите целостта на файловете и настройката на вашата система, сравнявайки всеки файл с оригиналния. Може да се провери стойността на някои константи за настройка. Може да използвате този инструмент, за да определите дали някой файл е бил променен (например от хакер). FileIntegrityIsStrictlyConformedWithReference=Целостта на файловете е строго съобразена с референцията. -FileIntegrityIsOkButFilesWereAdded=Проверката за целостта на файловете премина, но някои нови файлове са добавени. -FileIntegritySomeFilesWereRemovedOrModified=Проверката за цялостта на файловете е неуспешна. Някои файлове са били променени, премахнати или добавени. +FileIntegrityIsOkButFilesWereAdded=Проверката за целостта на файловете премина успешно, но са добавени някои нови файлове. +FileIntegritySomeFilesWereRemovedOrModified=Проверката за целостта на файловете е неуспешна. Някои файлове са били променени, премахнати или добавени. GlobalChecksum=Глобална контролна сума -MakeIntegrityAnalysisFrom=Извършване на анализ за целостта на файловете на приложението от +MakeIntegrityAnalysisFrom=Извършване на анализ за целостта на файловете в системата от LocalSignature=Вграден локален подпис (по-малко надежден) RemoteSignature=Отдалечен подпис (по-надежден) -FilesMissing=Missing Files -FilesUpdated=Updated Files +FilesMissing=Липсващи файлове +FilesUpdated=Актуализирани файлове FilesModified=Променени файлове FilesAdded=Добавени файлове -FileCheckDolibarr=Проверка целостта на файловете в приложението -AvailableOnlyOnPackagedVersions=Локалният файл за проверка на целостта е наличен, само когато приложението е инсталирано от официален пакет -XmlNotFound=XML файлът за проверка на приложението не е намерен -SessionId=ID на сесията -SessionSaveHandler=Handler за да запазите сесията -SessionSavePath=Място за съхранение на сесията -PurgeSessions=Изчистване на сесиите -ConfirmPurgeSessions=Сигурни ли сте, че желаете да изчистите всички сесии? Това ще прекъсне всички потребители (освен Вас). -NoSessionListWithThisHandler=Запаметяващия манипулатор на сесия, конфигуриран във вашия PHP, не позволява изброяване на всички стартирани сесии. -LockNewSessions=Заключване за нови свързвания -ConfirmLockNewSessions=Сигурни ли сте, че искате да ограничите всяка нова Dolibarr връзка към себе си? Само потребителят %s ще може да се свърже след това. +FileCheckDolibarr=Проверка целостта на файловете в системата +AvailableOnlyOnPackagedVersions=Локалният файл за проверка на целостта е наличен, само когато системата е инсталирана от официален пакет. +XmlNotFound=XML файлът за проверка на системата не е намерен +SessionId=Идентификатор на сесия +SessionSaveHandler=Манипулатор за съхраняване на сесии +SessionSavePath=Място за съхранение на сесия +PurgeSessions=Разчистване на сесиите +ConfirmPurgeSessions=Сигурни ли сте, че искате да разчистите всички сесии? Това ще прекъсне всички потребители (освен Вас). +NoSessionListWithThisHandler=Манипулатора за съхранение на сесии, конфигуриран във вашия PHP, не позволява изброяване на всички стартирани сесии. +LockNewSessions=Блокиране на нови свързвания +ConfirmLockNewSessions=Сигурни ли сте, че искате да ограничите всяка нова Dolibarr връзка, освен своята? Само потребител %s ще може да се свърже след това. UnlockNewSessions=Разрешаване на свързването YourSession=Вашата сесия Sessions=Потребителски сесии -WebUserGroup=Уеб сървър потребител/група -NoSessionFound=Изглежда, че вашата PHP конфигурация не позволява изброяване на активни сесии. Директорията, използвана за запазване на сесии ( %s ), може да бъде защитена (например от разрешения на операционната система или от директивата PHP open_basedir). -DBStoringCharset=Кодиране на знаците за съхраняваните данни в базата данни -DBSortingCharset=Набор от знаци база данни, за да сортирате данните +WebUserGroup=Уеб сървър потребител / група +NoSessionFound=Изглежда, че вашата PHP конфигурация не позволява изброяване на активни сесии. Директорията, използвана за запазване на сесии ( %s ), може да е защитена (например от права на операционната система или от директивата PHP open_basedir). +DBStoringCharset=Кодиране на знаците при съхраняване в базата данни +DBSortingCharset=Кодиране на знаците при сортиране в базата данни ClientCharset=Кодиране от страна на клиента ClientSortingCharset=Съпоставяне от страна на клиента -WarningModuleNotActive=Модула %s трябва да бъде включен -WarningOnlyPermissionOfActivatedModules=Само разрешения, свързани с активирани модули са показани тук. Можете да активирате други модули в страницата Начало->Настройки->Модули. -DolibarrSetup=Dolibarr инсталиране или обновяване +WarningModuleNotActive=Модул %s е необходимо да бъде включен +WarningOnlyPermissionOfActivatedModules=Само разрешения, свързани с активните модули са показани тук. Може да активирате други модули в страницата Начало -> Настройки -> Модули / Приложения +DolibarrSetup=Dolibarr инсталиране / обновяване InternalUser=Вътрешен потребител ExternalUser=Външен потребител InternalUsers=Вътрешни потребители ExternalUsers=Външни потребители GUISetup=Екран SetupArea=Настройки -UploadNewTemplate=Качване на нов шаблон(и) -FormToTestFileUploadForm=Форма за тестване качване на файлове (за настройка) +UploadNewTemplate=Качване на нов(и) шаблон(и) +FormToTestFileUploadForm=Формуляр за тестване на качването на файлове (според настройката) IfModuleEnabled=Забележка: Ефективно е само ако модула %s е активиран -RemoveLock=Премахнете / преименувайте файла %s , ако съществува, за да разрешите използването на инструмента за актуализиране / инсталиране. -RestoreLock=Възстановете файла %s само с разрешение за четене, за да забраните по-нататъшното използване на инструмента за актуализиране / инсталиране. +RemoveLock=Премахнете / преименувайте файла %s , ако съществува, за да разрешите използването на инструмента за инсталиране / актуализиране. +RestoreLock=Възстановете файла %s само с права за четене, за да забраните по-нататъшното използване на инструмента за инсталиране / актуализиране. SecuritySetup=Настройки на сигурността -SecurityFilesDesc=Определете тук опциите, свързани със сигурността, относно качването на файлове. -ErrorModuleRequirePHPVersion=Грешка, този модул изисква PHP версия %s или по-висока -ErrorModuleRequireDolibarrVersion=Грешка, този модул изисква Dolibarr версия %s или по-висока +SecurityFilesDesc=Дефинирайте тук параметрите, свързани със сигурността, относно качването на файлове. +ErrorModuleRequirePHPVersion=Грешка, този модул изисква PHP версия %s или по-висока. +ErrorModuleRequireDolibarrVersion=Грешка, този модул изисква Dolibarr версия %s или по-висока. ErrorDecimalLargerThanAreForbidden=Грешка, точност по-висока от %s не се поддържа. -DictionarySetup=Dictionary setup -Dictionary=Dictionaries -ErrorReservedTypeSystemSystemAuto=Стойност 'система' и 'автосистема' за типа са запазени. Може да използвате за стойност 'потребител' при добавяне на ваш личен запис. -ErrorCodeCantContainZero=Кода не може да съдържа стойност 0 +DictionarySetup=Настройка на речници +Dictionary=Речници +ErrorReservedTypeSystemSystemAuto=Стойностите "system" и "systemauto" за тип са резервирани. Може да използвате "user" като стойност, за да добавите свой собствен запис. +ErrorCodeCantContainZero=Кодът не може да съдържа стойност 0 DisableJavascript=Изключване на Java скрипт и Ajax функции DisableJavascriptNote=Забележка: За тестови цели или за отстраняване на грешки. За оптимизация за слепи хора или текстови браузъри може използвате настройката в потребителския профил -UseSearchToSelectCompanyTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant COMPANY_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string. -UseSearchToSelectContactTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant CONTACT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string. +UseSearchToSelectCompanyTooltip=Също така, ако имате голям брой контрагенти (> 100 000) може да увеличите скоростта като зададете стойност 1 за константата COMPANY_DONOTSEARCH_ANYWHERE в Настройки -> Други настройки. След това търсенето ще бъде ограничено до началото на низ. +UseSearchToSelectContactTooltip=Също така, ако имате голям брой контакти (> 100 000) може да увеличите скоростта като зададете стойност 1 за константата CONTACT_DONOTSEARCH_ANYWHERE в Настройки -> Други настройки. След това търсенето ще бъде ограничено до началото на низ. DelaiedFullListToSelectCompany=Изчаква натискането на клавиш, преди да зареди съдържание в списъка с контрагенти.
Това може да увеличи производителността, ако имате голям брой контрагенти, но е по-малко удобно. DelaiedFullListToSelectContact=Изчаква натискането на клавиш, преди да зареди съдържание в списъка с контакти.
Това може да увеличи производителността, ако имате голям брой контакти, но е по-малко удобно NumberOfKeyToSearch=Брой знаци предизвикващи търсене: %s NumberOfBytes=Брой байтове SearchString=Низ за търсене -NotAvailableWhenAjaxDisabled=Не е налично, когато Аякс инвалиди +NotAvailableWhenAjaxDisabled=Не е налице, когато Ajax е деактивиран AllowToSelectProjectFromOtherCompany=В документ на контрагент може да бъде избран проект, свързан с друг контрагент -JavascriptDisabled=Java скрипт е забранен -UsePreviewTabs=Използвайте Преглед раздели -ShowPreview=Покажи преглед -PreviewNotAvailable=Preview не е наличен -ThemeCurrentlyActive=Тема активни в момента -CurrentTimeZone=TimeZone PHP (сървър) -MySQLTimeZone=TimeZone MySql (database) +JavascriptDisabled=JavaScript е деактивиран +UsePreviewTabs=Използвайте разделите за преглед +ShowPreview=Показване на преглед +PreviewNotAvailable=Прегледът не е налице +ThemeCurrentlyActive=Темата е активна в момента +CurrentTimeZone=Времева зона на PHP (сървър) +MySQLTimeZone=Времева зона на MySql (база данни) TZHasNoEffect=Датите се съхраняват и връщат от сървъра на базата данни така, сякаш се съхраняват като подаден низ. Часовата зона има ефект само когато се използва функцията UNIX_TIMESTAMP (която не трябва да се използва от Dolibarr, така че базата данни TZ не трябва да има ефект, дори ако бъде променена след въвеждането на данните). Space=Пространство Table=Таблица -Fields=Полетата +Fields=Полета Index=Индекс Mask=Маска NextValue=Следваща стойност NextValueForInvoices=Следваща стойност (фактури) NextValueForCreditNotes=Следваща стойност (кредитни известия) -NextValueForDeposit=Следваща стойност (авансово плащане) -NextValueForReplacements=Next value (replacements) -MustBeLowerThanPHPLimit=Забележка: Вашата PHP конфигурация понастоящем ограничава максималния размер на файловете за качване до %s %s, независимо от стойността на този параметър -NoMaxSizeByPHPLimit=Забележка: Не срокът се определя в конфигурацията на вашия PHP -MaxSizeForUploadedFiles=Максимален размер за качените файлове (0 за да забраните качване) -UseCaptchaCode=Използвайте графичен код (CAPTCHA) на страницата за вход -AntiVirusCommand= Пълна пътека до антивирусен команда -AntiVirusCommandExample= Пример за ClamWin: C: \\ програма ~ 1 \\ ClamWin \\ Bin \\ clamscan.exe
Пример за ClamAV: / ЮЕсАр / хамбар / clamscan -AntiVirusParam= Още параметри на командния ред -AntiVirusParamExample= Пример за ClamWin: - база данни = "C: \\ Program Files (x86) \\ ClamWin \\ ИЪ" -ComptaSetup=Настройка на счетоводния модул -UserSetup=Настройки за управление на потребителите -MultiCurrencySetup=Настройки на няколко валути +NextValueForDeposit=Следваща стойност (авансови плащания) +NextValueForReplacements=Следваща стойност (замествания) +MustBeLowerThanPHPLimit=Забележка: Вашата PHP конфигурация понастоящем ограничава максималния размер на файловете за качване до %s %s, независимо от стойността на този параметър. +NoMaxSizeByPHPLimit=Забележка: Не е зададено ограничение във вашата PHP конфигурация +MaxSizeForUploadedFiles=Максимален размер за качени файлове (0 за забрана на качването) +UseCaptchaCode=Използване на графичен код (CAPTCHA) на страницата за вход +AntiVirusCommand= Пълен път към антивирусна команда +AntiVirusCommandExample= Пример за ClamWin: c:\\Progra~1\\ClamWin\\bin\\clamscan.exe
Пример за ClamAv: /usr/bin/clamscan +AntiVirusParam= Още параметри в командния ред +AntiVirusParamExample= Пример за ClamWin: --database="C:\\Programm Files (x86)\\ClamWin\\lib" +ComptaSetup=Настройка на модул Счетоводство +UserSetup=Настройка за управление на потребители +MultiCurrencySetup=Настройки на различни валути MenuLimits=Граници и точност -MenuIdParent=ID майка меню -DetailMenuIdParent=ID на основното меню (0 за горното меню) -DetailPosition=Брой Сортиране, за да определи позицията на менюто +MenuIdParent=Идентификатор на основно меню +DetailMenuIdParent=Идентификатор на основно меню (празно за главно меню) +DetailPosition=Номер за сортиране, за определяне на позицията на менюто AllMenus=Всички NotConfigured=Модулът / приложението не е конфигуриран(о) Active=Активен -SetupShort=Настройки +SetupShort=Настройка OtherOptions=Други опции OtherSetup=Други настройки CurrentValueSeparatorDecimal=Десетичен разделител -CurrentValueSeparatorThousand=Thousand сепаратор -Destination=Destination -IdModule=Module ID -IdPermissions=Permissions ID +CurrentValueSeparatorThousand=Хиляден разделител +Destination=Дестинация +IdModule=Идентификатор на модул +IdPermissions=Идентификатор на разрешения LanguageBrowserParameter=Параметър %s LocalisationDolibarrParameters=Параметри на локализация ClientTZ=Часова зона на клиента (потребител) -ClientHour=Час на клиента (потребител) -OSTZ=Часова зона на Операционната Система -PHPTZ=Часова зона на PHP Сървъра -DaylingSavingTime=Лятното часово време -CurrentHour=Час на PHP (сървър) -CurrentSessionTimeOut=Продължителност на текущата сесия +ClientHour=Клиентско време (потребител) +OSTZ=Часова зона на ОС на сървъра +PHPTZ=Часова зона на PHP сървъра +DaylingSavingTime=Лятно часово време +CurrentHour=Време на PHP (сървър) +CurrentSessionTimeOut=Продължителност на текуща сесия YouCanEditPHPTZ=За да зададете различна PHP часова зона (не се изисква), може да опитате да добавите .htaccess файл с ред като този 'SetEnv TZ Europe/Paris' HoursOnThisPageAreOnServerTZ=Внимание, в противоречие с други екрани, часовете на тази страница не са в местната часова зона, а в часовата зона на сървъра. Box=Джаджа Boxes=Джаджи MaxNbOfLinesForBoxes=Максимален брой редове за джаджи AllWidgetsWereEnabled=Всички налични джаджи са активирани -PositionByDefault=Default order +PositionByDefault=Позиция по подразбиране Position=Длъжност MenusDesc=Меню мениджърите определят съдържанието на двете ленти с менюта (хоризонтална и вертикална). MenusEditorDesc=Редакторът на менюто ви позволява да дефинирате потребителски менюта. Използвайте го внимателно, за да избегнете нестабилност и трайно недостъпни менюта.
Някои модули добавят менюта (най-вече в менюто Всички). Ако премахнете някои от тези менюта по погрешка, можете да ги възстановите като деактивирате и да активирате отново модула. @@ -144,64 +144,64 @@ LangFile=.lang файл Language_en_US_es_MX_etc=Език (en_US, es_MX, ...) System=Система SystemInfo=Системна информация -SystemToolsArea=Системни инструменти +SystemToolsArea=Секция със системни инструменти SystemToolsAreaDesc=Тази секция осигурява административни функции. Използвайте менюто, за да изберете необходимата функционалност. -Purge=Изчистване +Purge=Разчистване PurgeAreaDesc=Тази страница ви позволява да изтриете всички файлове, генерирани или съхранени от Dolibarr (временни файлове или всички файлове в директорията %s). Използването на тази функция обикновено не е необходимо. Той се предоставя като решение за потребители, чиито Dolibarr се хоства от доставчик, който не предлага разрешения за изтриване на файлове, генерирани от уеб сървъра. PurgeDeleteLogFile=Изтриване на лог файлове, включително %s генериран от Debug Logs модула (няма риск от загуба на данни) -PurgeDeleteTemporaryFiles=Delete all temporary files (no risk of losing data). Note: Deletion is done only if the temp directory was created 24 hours ago. +PurgeDeleteTemporaryFiles=Изтриване на всички временни файлове (няма риск от загуба на данни). Забележка: Изтриването се извършва, само ако директорията temp е създадена преди 24 часа. PurgeDeleteTemporaryFilesShort=Изтриване на временни файлове PurgeDeleteAllFilesInDocumentsDir=Изтриване на всички файлове в директорията: %s.
Това ще изтрие всички генерирани документи, свързани с елементи (контрагенти, фактури и т.н.), файлове, качени чрез ECM модула, архиви на базата данни и временни файлове. -PurgeRunNow=Изчистване сега +PurgeRunNow=Разчисти сега PurgeNothingToDelete=Няма директория или файлове за изтриване. PurgeNDirectoriesDeleted=%s изтрити файлове или директории. PurgeNDirectoriesFailed=Неуспешно изтриване на %s файлове или директории. -PurgeAuditEvents=Поръси всички събития по сигурността +PurgeAuditEvents=Разчистване на всички събития свързани със сигурността ConfirmPurgeAuditEvents=Сигурни ли сте, че искате да изчистите всички събития свързани със сигурността? Всички записи за сигурността ще бъдат изтрити, други данни няма да бъдат премахнати. -GenerateBackup=Генериране на бекъп -Backup=Бекъп +GenerateBackup=Генериране на архивно копие +Backup=Архивиране Restore=Възстановяване -RunCommandSummary=Backup стартира със следната команда -BackupResult=Backup резултат -BackupFileSuccessfullyCreated=Backup файл, генериран успешно +RunCommandSummary=Архивирането е стартирано със следната команда +BackupResult=Резултат от архивиране +BackupFileSuccessfullyCreated=Архивиращият файл е успешно генериран YouCanDownloadBackupFile=Генерираният файл вече може да бъде изтеглен -NoBackupFileAvailable=Няма налични бекъпи. -ExportMethod=Тип на експортирането -ImportMethod=Внос метод -ToBuildBackupFileClickHere=За изграждането на резервно копие на файла, натиснете тук . +NoBackupFileAvailable=Няма налични архивни копия +ExportMethod=Метод за експортиране +ImportMethod=Метод за импортиране +ToBuildBackupFileClickHere=За да създадете архивен файл, кликнете тук. ImportMySqlDesc=За да импортирате архив на MySQL може да използвате phpMyAdmin, чрез вашия хостинг или да използвате MySQL команда в терминала.
Например: -ImportPostgreSqlDesc=За да импортирате архивния файл, трябва да използвате pg_restore команда от командния ред: +ImportPostgreSqlDesc=За да импортирате архивен файл, трябва да използвате pg_restore команда от командния ред: ImportMySqlCommand=%s %s < mybackupfile.sql ImportPostgreSqlCommand=%s %s mybackupfile.sql FileNameToGenerate=Име на архивния файл: Compression=Компресия -CommandsToDisableForeignKeysForImport=Command to disable foreign keys on import -CommandsToDisableForeignKeysForImportWarning=Задължително, ако искате да сте в състояние да възстановите SQL дъмп по-късно -ExportCompatibility=Compatibility of generated export file -MySqlExportParameters=Параметри на MySQL експортирането -PostgreSqlExportParameters= Параметрите на PostgreSQL износ -UseTransactionnalMode=Use transactional mode -FullPathToMysqldumpCommand=Пълния път до mysqldump командата -FullPathToPostgreSQLdumpCommand=Пълна пътека до pg_dump команда -AddDropDatabase=Добави DROP DATABASE команда -AddDropTable=Add DROP TABLE command +CommandsToDisableForeignKeysForImport=Команда за деактивиране на външните ключове при импортиране +CommandsToDisableForeignKeysForImportWarning=Задължително, ако искате да възстановите по-късно вашия SQL dump +ExportCompatibility=Съвместимост на генерирания експортиран файл +MySqlExportParameters=Параметри за експортиране на MySQL +PostgreSqlExportParameters= Параметри за експортиране на PostgreSQL +UseTransactionnalMode=Използване на транзакционен режим +FullPathToMysqldumpCommand=Пълен път до командата mysqldump +FullPathToPostgreSQLdumpCommand=Пълен път до командата pg_dump +AddDropDatabase=Добавяне на команда DROP DATABASE +AddDropTable=Добавяне на команда DROP TABLE ExportStructure=Структура -NameColumn=Name columns -ExtendedInsert=Extended INSERT -NoLockBeforeInsert=No lock commands around INSERT -DelayedInsert=Delayed insert -EncodeBinariesInHexa=Encode binary data in hexadecimal +NameColumn=Имена на колони +ExtendedInsert=Разширен INSERT +NoLockBeforeInsert=Няма команди за заключване около INSERT +DelayedInsert=Закъснял INSERT +EncodeBinariesInHexa=Кодиране на двоични данни в шестнадесетичен формат IgnoreDuplicateRecords=Игнориране на грешки при дублиране на записите (INSERT IGNORE) AutoDetectLang=Автоматично (език на браузъра) -FeatureDisabledInDemo=Feature инвалиди в демо +FeatureDisabledInDemo=Функцията е деактивирана в демо режим FeatureAvailableOnlyOnStable=Функцията се предлага само в официални стабилни версии BoxesDesc=Джаджите са компоненти, показващи информация, които може да добавите, за да персонализирате някои страници. Можете да избирате между показване на джаджата или не, като изберете целевата страница и кликнете върху 'Активиране', или като кликнете върху кошчето, за да я деактивирате. -OnlyActiveElementsAreShown=Показани са само елементи от активирани модули. +OnlyActiveElementsAreShown=Показани са само елементи от активни модули. ModulesDesc=Модулите / приложенията определят кои функции са налични в системата. Някои модули изискват да се предоставят съответните разрешения на потребителите след активиране на модула. Кликнете върху бутона за включване / изключване (в края на реда с името на модула), за да активирате / деактивирате модул / приложение. ModulesMarketPlaceDesc=Може да намерите още модули за изтегляне от външни уеб сайтове в интернет... ModulesDeployDesc=Ако разрешенията във вашата файлова система го позволяват, можете да използвате този инструмент за инсталиране на външен модул. След това модулът ще се вижда в раздела %s. -ModulesMarketPlaces=Намиране на външно приложение/модул -ModulesDevelopYourModule=Разработване на собствено приложение/модул +ModulesMarketPlaces=Намиране на външно приложение / модул +ModulesDevelopYourModule=Разработване на собствено приложение / модул ModulesDevelopDesc=Може също така да разработите свой собствен модул или да намерите партньор, който да го разработи за вас. DOLISTOREdescriptionLong=Вместо да превключите към www.dolistore.com уебсайта, за да намерите външен модул, може да използвате този вграден инструмент, който ще извърши търсенето в страницата вместо вас (може да е бавно, нуждаете се от интернет достъп) ... NewModule=Нов @@ -209,50 +209,50 @@ FreeModule=Свободен CompatibleUpTo=Съвместим с версия %s NotCompatible=Този модул не изглежда съвместим с Dolibarr %s (Мин. %s - Макс. %s). CompatibleAfterUpdate=Този модул изисква актуализация на вашия Dolibarr %s (Min %s - Max %s). -SeeInMarkerPlace=Вижте в сайта за покупка +SeeInMarkerPlace=Вижте в онлайн магазина Updated=Актуализиран Nouveauté=Новост AchatTelechargement=Купуване / Изтегляне GoModuleSetupArea=За да разположите / инсталирате нов модул, отидете в секцията за настройка на модул: %s. -DoliStoreDesc=DoliStore, официалният пазар за външни модули за Dolibarr ERP/CRM +DoliStoreDesc=DoliStore, официалният пазар за Dolibarr ERP / CRM външни модули DoliPartnersDesc=Списък на компаниите, които предоставят разработване по поръчка модули или функции.
Забележка: тъй като Dolibarr е приложение с отворен код, всеки , който има опит в програмирането на PHP, може да разработи модул. WebSiteDesc=Външни уебсайтове за повече модули за добавки (които не са основни)... DevelopYourModuleDesc=Някои решения за разработване на ваш собствен модул... URL=Връзка BoxesAvailable=Налични джаджи BoxesActivated=Активирани джаджи -ActivateOn=Активиране на -ActiveOn=Активирана -SourceFile=Изходният файл -AvailableOnlyIfJavascriptAndAjaxNotDisabled=Предлага се само ако JavaScript не е забранен +ActivateOn=Активирай на +ActiveOn=Активирано на +SourceFile=Изходен файл +AvailableOnlyIfJavascriptAndAjaxNotDisabled=На разположение е само, ако JavaScript не е деактивиран Required=Задължително -UsedOnlyWithTypeOption=Used by some agenda option only +UsedOnlyWithTypeOption=Използва се само от някаква опция на календара Security=Сигурност Passwords=Пароли DoNotStoreClearPassword=Криптиране на пароли, съхранявани в базата данни (НЕ като обикновен текст). Силно се препоръчва да активирате тази опция. MainDbPasswordFileConfEncrypted=Криптиране на паролата за базата данни, съхранена в conf.php. Силно се препоръчва да активирате тази опция. -InstrucToEncodePass=To have password encoded into the conf.php file, replace the line
$dolibarr_main_db_pass="...";
by
$dolibarr_main_db_pass="crypted:%s"; -InstrucToClearPass=To have password decoded (clear) into the conf.php file, replace the line
$dolibarr_main_db_pass="crypted:...";
by
$dolibarr_main_db_pass="%s"; +InstrucToEncodePass=За да кодирате парола, във файла conf.php заменете реда
$dolibarr_main_db_pass="...";
с
$dolibarr_main_db_pass="crypted:%s"; +InstrucToClearPass=За да декодирате парола, във файла conf.php заменете реда
$dolibarr_main_db_pass="crypted:...";
с
$dolibarr_main_db_pass="%s"; ProtectAndEncryptPdfFiles=Защитаване на генерирани PDF файлове. Това НЕ се препоръчва, тъй като прекъсва генерирането на общ PDF. ProtectAndEncryptPdfFilesDesc=Защитата на PDF документ го запазва за четене и печат с всеки PDF браузър. Редактирането и копирането обаче вече не са възможни. Имайте предвид, че използването на тази функция прави изграждането на глобално обединени PDF файлове невъзможно. Feature=Особеност DolibarrLicense=Лиценз -Developpers=Разработчици/сътрудници +Developpers=Разработчици / сътрудници OfficialWebSite=Официален уеб сайт на Dolibarr -OfficialWebSiteLocal=Local web site (%s) +OfficialWebSiteLocal=Локален уеб сайт (%s) OfficialWiki=Документация за Dolibarr / Wiki OfficialDemo=Dolibarr онлайн демо -OfficialMarketPlace=Официален магазин за външни модули/добавки -OfficialWebHostingService=Препоръчителен уеб хостинг услуги (хостинг в интернет облак) -ReferencedPreferredPartners=Preferred Partners +OfficialMarketPlace=Официален онлайн магазин за външни модули / добавки +OfficialWebHostingService=Уеб хостинг услуги (облачни услуги) +ReferencedPreferredPartners=Предпочитани партньори OtherResources=Други ресурси ExternalResources=Външни ресурси SocialNetworks=Социални мрежи -ForDocumentationSeeWiki=Документация за потребител или разработчик (Doc, често задавани въпроси ...),
можете да намерите в Dolibarr Wiki:
%s -ForAnswersSeeForum=За всякакви други въпроси / Помощ, можете да използвате форума Dolibarr:
%s +ForDocumentationSeeWiki=За потребителска документация и такава за разработчици (документи, често задавани въпроси,...),
погледнете в Dolibarr Wiki:
%s +ForAnswersSeeForum=За всякакви други въпроси / помощ може да използвате Dolibarr форума:
%s HelpCenterDesc1=Ето някои ресурси за получаване на помощ и подкрепа с Dolibarr. HelpCenterDesc2=Някои от тези ресурси са налице само на английски . -CurrentMenuHandler=Текущото меню манипулатор +CurrentMenuHandler=Текущ манипулатор на менюто MeasuringUnit=Мерна единица LeftMargin=Лява граница TopMargin=Горна граница @@ -293,27 +293,27 @@ MAIN_MAIL_SMS_FROM=Телефонен номер по подразбиране MAIN_MAIL_DEFAULT_FROMTYPE=Имейл на подателя по подразбиране при ръчно изпращане на имейли (имейл на потребител или имейл на фирмата) UserEmail=Имейл на потребител CompanyEmail=Имейл на фирмата -FeatureNotAvailableOnLinux=Функцията не е на разположение на Unix подобни системи. Тествайте вашата програма Sendmail на местно ниво. +FeatureNotAvailableOnLinux=Функцията не е налична в Unix подобни системи. Тествайте вашата програма Sendmail локално. SubmitTranslation=Ако преводът за този език не е завършен или сте открили грешки, може да ги коригирате като редактирате файловете в директорията langs/ %s и предоставите вашите промени в www.transifex.com/dolibarr-association/dolibarr/ SubmitTranslationENUS=Ако преводът за този език не е завършен или ако сте открили грешки, може да коригирате това, като редактирате файлове в директорията langs/ %s и предоставите вашите промени на dolibarr.org/forum или за разработчици на github.com/Dolibarr/dolibarr. -ModuleSetup=Настройки на модул +ModuleSetup=Настройка на модул ModulesSetup=Настройка на Модули / Приложения ModuleFamilyBase=Система ModuleFamilyCrm=Управление на взаимоотношения с клиенти (CRM) ModuleFamilySrm=Управление на взаимоотношения с доставчици (VRM) ModuleFamilyProducts=Управление на продукти (PM) -ModuleFamilyHr=Управление на човешките ресурси -ModuleFamilyProjects=Проекти / съвместна работа -ModuleFamilyOther=Друг -ModuleFamilyTechnic=Mutli модули инструменти +ModuleFamilyHr=Управление на човешки ресурси (ЧР) +ModuleFamilyProjects=Проекти / Съвместна работа +ModuleFamilyOther=Други +ModuleFamilyTechnic=Мулти-модулни инструменти ModuleFamilyExperimental=Експериментални модули -ModuleFamilyFinancial=Финансови Модули (Счетоводство/Каса) -ModuleFamilyECM=Електронно Управление на Съдържанието (ECM) +ModuleFamilyFinancial=Финансови модули (Счетоводство / Каса) +ModuleFamilyECM=Управление на електронно съдържание (ECM) ModuleFamilyPortal=Уеб сайтове и други фронтални приложения -ModuleFamilyInterface=Интерфейси със външни системи. -MenuHandlers=Меню работещи -MenuAdmin=Menu Editor -DoNotUseInProduction=Не използвайте на продукшън платформа +ModuleFamilyInterface=Интерфейси с външни системи +MenuHandlers=Меню манипулатори +MenuAdmin=Меню редактор +DoNotUseInProduction=Да не се използва в производство ThisIsProcessToFollow=Процедура за актуализация: ThisIsAlternativeProcessToFollow=Това е алтернативна настройка за ръчно обработване: StepNb=Стъпка %s @@ -332,52 +332,52 @@ LastStableVersion=Последна стабилна версия LastActivationDate=Последна дата на активиране LastActivationAuthor=Последен автор на активирането LastActivationIP=Последно активиране от IP адрес -UpdateServerOffline=Update server offline +UpdateServerOffline=Актуализиране на сървъра офлайн WithCounter=Управление на брояч -GenericMaskCodes=Можете да въведете всяка маска за номериране. В тази маска, могат да се използват следните тагове:
{000000} съответства на номер, който се увеличава на всеки %s. Влез като много нули като желаната дължина на брояча. Броячът ще бъде завършен с нули от ляво, за да има колкото се може повече нули като маска.
{000000 000} същата като предишната, но компенсира, съответстваща на броя на правото на знака + се прилага започва на първи %s.
{000000 @} същата като предишната, но броячът се нулира, когато месеца Х е достигнал (Х между 1 и 12, или 0, за да използвате началото на месеца на фискалната година, определени в вашата конфигурация). Ако тази опция се използва и х е 2 или по-висока, тогава последователност {гг} {mm} или {гггг} {mm} също е задължително.
{DD} ден (01 до 31).
{Mm} месец (01 до 12).
{Гг} {гггг} или {Y} година над 2, 4 или 1 брой.
+GenericMaskCodes=Може да въведете всяка маска за номериране. В тази маска, могат да се използват следните тагове:
{000000} съответства на номер, който ще се увеличава на всеки %s. Въведете толкова нули, колкото е желаната дължина на брояча. Броячът ще бъде запълнен с нули от ляво, за да има толкова нули, колкото и в маската.
{000000+000} същото като в предишния случай, но започва отместване, съответстващо на номера отдясно на знака +, считано от първия %s.
{000000@x} същото като в предишния случай, но броячът се нулира, когато месецът Х е достигнат (Х между 1 и 12, или 0, за да използвате началото на месеца на фискалната година, определени в вашата конфигурация или 99, за да нулирате брояча всеки месец). Ако тази опция се използва и X е 2 или по-висока, to тогава последователностa {гг}{mm} или {гггг}{mm} също е задължителна.
{дд} ден (01 до 31).
{мм} месец (01 до 12).
{гг}, {гггг} година от 2 или 4 цифри.
GenericMaskCodes2= {cccc} клиентският код на n знака
{cccc000} клиентският код на n знака е последван от брояч, предназначен за клиента. Този брояч е предназначен за клиента и се нулира едновременно от глобалния брояч.
{tttt} Кодът на контрагента с n знака (вижте менюто Начало - Настройка - Речник - Видове контрагенти). Ако добавите този таг, броячът ще бъде различен за всеки тип контрагент.
-GenericMaskCodes3=Всички други символи на маската ще останат непокътнати.
Интервалите не са разрешени.
+GenericMaskCodes3=Всички други символи в маската ще останат непокътнати.
Не са разрешени интервали.
GenericMaskCodes4a= Пример за 99-я %s контрагент TheCompany, с дата 2007-01-31:
-GenericMaskCodes4b=Пример за контрагент е създаден на 2007-03-01:
+GenericMaskCodes4b=Пример за контрагент, създаден на 2007-03-01:
GenericMaskCodes4c=Пример за продукт, създаден на 2007-03-01:
GenericMaskCodes5=ABC{yy}{mm}-{000000} ще даде ABC0701-000099
{0000+100@1}-ZZZ/{dd}/XXX ще даде 0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} ще даде IN0701-0099-A Ако типа на фирмата е 'Responsable Inscripto' с код за този тип, който е 'A_RI' -GenericNumRefModelDesc=Върнете адаптивни номер според определен маска. -ServerAvailableOnIPOrPort=Сървъра е достъпен на адрес %s , порт %s -ServerNotAvailableOnIPOrPort=Сървъра не е достъпен на адрес %s , порт %s -DoTestServerAvailability=Тестване на сързаността със сървъра -DoTestSend=Тестване изпращането -DoTestSendHTML=Тестване изпращането на HTML -ErrorCantUseRazIfNoYearInMask=Error, can't use option @ to reset counter each year if sequence {yy} or {yyyy} is not in mask. -ErrorCantUseRazInStartedYearIfNoYearMonthInMask=Грешка, не могат да използват @ опция, ако последователност {гг} {mm} или {гггг} {mm} не е маска. -UMask=Umask параметър за нови файлове в Unix / Linux / BSD файловата система. -UMaskExplanation=Този параметър ви позволи да се определят правата, определени по подразбиране на файлове, създадени от Dolibarr на сървъра (по време на качването например).
Тя трябва да бъде осмична стойност (например, 0666 средства четат и пишат за всеки).
Този параметър е безполезно на предприятието на сървъра на Windows. +GenericNumRefModelDesc=Връща персонализирано число според определена маска. +ServerAvailableOnIPOrPort=Сървърът е достъпен на адрес %s с порт %s +ServerNotAvailableOnIPOrPort=Сървърът не е достъпен на адрес %s с порт %s +DoTestServerAvailability=Тестване на връзката със сървъра +DoTestSend=Тестово изпращане +DoTestSendHTML=Тестово изпращане на HTML +ErrorCantUseRazIfNoYearInMask=Грешка, не може да се използва опция @, за да нулирате брояча всяка година, ако последователността {yy} или {yyyy} не е в маската. +ErrorCantUseRazInStartedYearIfNoYearMonthInMask=Грешка, не може да се използва опция @, ако последователността {yy}{mm} или {yyyy}{mm} не са в маската. +UMask=UMask параметър за нови файлове на Unix / Linux / BSD / Mac файлова система. +UMaskExplanation=Този параметър ви позволява да дефинирате права, зададени по подразбиране на файлове, които са създадени от Dolibarr на сървъра (например при качване).
Необходимо е да бъде в осмична стойност (например 0666 означава четене и запис за всички).
Този параметър е безполезен на Windows сървър. SeeWikiForAllTeam=Разгледайте страницата на Wiki за списък на сътрудниците и тяхната организация -UseACacheDelay= Забавяне за кеширане износ отговор в секунда (0 или празно за не кеш) -DisableLinkToHelpCenter=Скриване на връзката Нуждаете се от помощ или поддръжка от страницата за вход -DisableLinkToHelp=Скриване на линка към онлайн помощ "%s" +UseACacheDelay= Забавяне при кеширане на отговора за експорт в секунди (0 или празно, за да не се използва кеш) +DisableLinkToHelpCenter=Скриване на връзка „Нуждаете се от помощ или поддръжка?“ в страницата за вход +DisableLinkToHelp=Скриване на връзка към онлайн помощ "%s" AddCRIfTooLong=Няма автоматично пренасяне на текст, текстът, който е твърде дълъг, няма да се показва на документи. Моля, добавете нови редове в текста, ако е необходимо. ConfirmPurge=Наистина ли искате да изпълните това прочистване?
Това ще изтрие за постоянно всичките ви файлове с данни без начин да ги възстановите (ECM файлове, прикачени файлове ...). MinLength=Минимална дължина -LanguageFilesCachedIntoShmopSharedMemory=Файлове. Lang заредени в споделена памет +LanguageFilesCachedIntoShmopSharedMemory=Файлове .lang са заредени в споделена памет LanguageFile=Езиков файл ExamplesWithCurrentSetup=Примери с текуща конфигурация -ListOfDirectories=Списък на OpenDocument директории шаблони -ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.

Put here full path of directories.
Add a carriage return between eah directory.
To add a directory of the GED module, add here DOL_DATA_ROOT/ecm/yourdirectoryname.

Files in those directories must end with .odt or .ods. +ListOfDirectories=Списък на директории с OpenDocument шаблони +ListOfDirectoriesForModelGenODT=Списък на директории, съдържащи файлове с шаблони във формат OpenDocument.

Попълнете тук пълния път на директориите.
Добавете нов ред за всяка директория.
За да включите директория на GED модула, добавете тук DOL_DATA_ROOT/ecm/yourdirectoryname.

Файловете в тези директории трябва да завършват на .odt или .ods. NumberOfModelFilesFound=Брой файлове с шаблони за ODT/ODS, намерени в тези директории -ExampleOfDirectoriesForModelGen=Примери на синтаксиса:
C: \\ mydir
/ Начало / mydir
DOL_DATA_ROOT / ECM / ecmdir -FollowingSubstitutionKeysCanBeUsed=
За да разберете как да създадете свои ODT шаблони на документи, преди да ги съхранявате в тези указатели, прочетете уики документация: +ExampleOfDirectoriesForModelGen=Примери за синтаксис:
C:\\mydir
/home/mydir
DOL_DATA_ROOT/ecm/ecmdir +FollowingSubstitutionKeysCanBeUsed=
За да узнаете как да създадете вашите ODT шаблони за документи преди да ги съхраните в тези директории прочетете Wiki документацията: FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template -FirstnameNamePosition=Позиция на Име/Фамилия +FirstnameNamePosition=Позиция на име / фамилия DescWeather=Следните изображения ще бъдат показани на таблото, когато броят на закъснелите действия достигне следните стойности: -KeyForWebServicesAccess=Ключът към използване на Web Services (параметър "dolibarrkey" в WebServices) -TestSubmitForm=Формата на входящ тест +KeyForWebServicesAccess=Ключ за използване на уеб услуги (параметър "dolibarrkey" в уеб услуги) +TestSubmitForm=Формуляр за тестване на входа ThisForceAlsoTheme=С използването на този меню мениджър ще се използва и собствената му тема независимо от избора на потребителя. Също така специализирания за смартфони меню мениджър може да не работи на всички смартфони. Използвайте друг мениджър на менюто, ако имате проблеми с вашия. -ThemeDir=Директория с темите +ThemeDir=Директория с теми ConnectionTimeout=Прекъсване на връзката -ResponseTimeout=Отговор изчакване -SmsTestMessage=Тест съобщение от __ PHONEFROM__ __ PHONETO__ -ModuleMustBeEnabledFirst=Модул %s трябва да бъде активиран първо ако се нуждаете от тази опция. -SecurityToken=Ключът за осигуряване на сигурна URL адреси +ResponseTimeout=Таймаут на отговора +SmsTestMessage=Тестово съобщение от __PHONEFROM__ до __PHONETO__ +ModuleMustBeEnabledFirst=Модулът %s трябва да бъде активиран първо, ако имате нужда от тази функция. +SecurityToken=Ключ за защитени URL адреси NoSmsEngine=Няма наличен мениджър за подател на SMS. Мениджърът на подателя на SMS не е инсталиран по подразбиране, защото зависи от външен доставчик, но можете да намерите някои от тях на адрес %s PDF=PDF PDFDesc=Глобални настройки за генериране на PDF. @@ -391,14 +391,14 @@ HideRefOnPDF=Скриване на реф. номер на продукти HideDetailsOnPDF=Скриване на подробности за продуктовите линии PlaceCustomerAddressToIsoLocation=Използвайте френска стандартна позиция (La Poste) за позиция на клиентския адрес Library=Библиотека -UrlGenerationParameters=Параметри за осигуряване на URL адреси -SecurityTokenIsUnique=Използвайте уникална параметър securekey за всеки URL -EnterRefToBuildUrl=Въведете справка за обект %s -GetSecuredUrl=Изчислява URL +UrlGenerationParameters=Параметри за защитени URL адреси +SecurityTokenIsUnique=Използвайте уникален параметър за защитен ключ за всеки URL адрес +EnterRefToBuildUrl=Въведете референция за обект %s +GetSecuredUrl=Получете изчисления URL адрес ButtonHideUnauthorized=Скриване на бутоните за потребители, които не са администратори, вместо показване на сиви бутони. -OldVATRates=Old ставка на ДДС -NewVATRates=Нов ставка на ДДС -PriceBaseTypeToChange=Промяна на цените с база референтна стойност, определена на +OldVATRates=Първоначална ставка на ДДС +NewVATRates=Нова ставка на ДДС +PriceBaseTypeToChange=Промяна на цените с базова референтна стойност, определена на MassConvert=Стартиране на групово превръщане String=Низ TextLong=Дълъг текст @@ -406,22 +406,24 @@ HtmlText=HTML текст Int=Цяло число Float=Десетично число DateAndTime=Дата и час -Unique=Уникално +Unique=Уникален Boolean=Булева (едно квадратче за отметка) ExtrafieldPhone = Телефон ExtrafieldPrice = Цена ExtrafieldMail = Имейл ExtrafieldUrl = URL -ExtrafieldSelect = Избор лист -ExtrafieldSelectList = Избор от таблица +ExtrafieldSelect = Изберете списък +ExtrafieldSelectList = Изберете от таблицата ExtrafieldSeparator=Разделител (не е поле) ExtrafieldPassword=Парола ExtrafieldRadio=Радио бутони (само един избор) ExtrafieldCheckBox=Полета за отметка ExtrafieldCheckBoxFromList=Отметки от таблица -ExtrafieldLink=Link to an object +ExtrafieldLink=Връзка към обект ComputedFormula=Изчислено поле ComputedFormulaDesc=Тук можете да въведете формула, използвайки други свойства на обекта или PHP код, за да получите динамична изчислена стойност. Можете да използвате всички съвместими с PHP формули, включително "?" условен оператор и следния глобален обект: $db, $conf, $langs, $mysoc, $user, $object.
ВНИМАНИЕ: Може да са налице само някои свойства на $object. Ако ви трябват свойства, които не са заредени, просто вземете сами обекта във вашата формула като във втория пример.
Използването на изчислено поле означава, че не можете да въведете никаква стойност от интерфейса. Също така, ако има синтактична грешка, формулата може да не върне нищо.

Пример за формула:
$object->id<10 ? round($object>id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($ mysoc->zip, 1, 2)

Пример за презареждане на обект
(($reloadedobj = new Societe ($db)) && ($reloadedobj->fetch ($obj->id ? $obj->id:($ obj->rowid ? $obj->rowid: $object->id )) > 0)) ? $reloadedobj->array_options ['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Друг пример за формула за натоварване на обекта и неговия главен обект:
(($reloadedobj = new Task ($db)) && ($reloadedobj->fetch ($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch ($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Запазване на изчисленото поле +ComputedpersistentDesc=Изчислените допълнителни полета ще бъдат съхранени в базата данни, но стойността ще бъде преизчислена само когато обектът на това поле бъде променен. Ако изчисленото поле зависи от други обекти или глобални данни, тази стойност може да е грешна!! ExtrafieldParamHelpPassword=Оставяйки това поле празно означава, че тази стойност ще бъде съхранена без криптиране (полето трябва да бъде скрито само със звезда на екрана).
Задайте „auto“, за да използвате правилото за криптиране по подразбиране, за да запазите паролата в базата данни (тогава стойността за четене ще бъде само за хеш, няма начин да извлечете оригиналната стойност) ExtrafieldParamHelpselect=Списъкът със стойности трябва да бъде във формат key,value (където key не може да бъде '0';)

например:
1,value1
2,value2
code3,value3
...

За да имате списъка в зависимост от друг допълнителен списък с атрибути:
1,value1|options_ parent_list_code:parent_key
2,value2|options_ parent_list_code:parent_key

За да имате списъка в зависимост от друг списък:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=Списъкът със стойности трябва да бъде във формат key,value (където key не може да бъде '0')

например:
1,value1
2,value2
3,value3
... @@ -429,24 +431,25 @@ ExtrafieldParamHelpradio=Списъкът със стойности трябва ExtrafieldParamHelpsellist=Списъкът на стойностите идва от таблица
Синтаксис: table_name:label_field:id_field::filter
Пример: c_typent: libelle:id::filter

- idfilter е задължително основен int key
- филтърът може да бъде прост тест (например active = 1), за да се покаже само активна стойност
Може също да използвате $ID$ във филтъра, който е текущият идентификатор на текущия обект.
За да направите SELECT във филтъра, използвайте $SEL$
ако искате да филтрирате по допълнителни полета, използвайте синтаксис extra.fieldcode=...(където кодът на полето е кодът на допълнителното поле)

За да имате списъка в зависимост от друг допълнителен списък с атрибути:
c_typent:libelle:id:options_ parent_list_code|parent_column:филтер

За да имате списъка в зависимост от друг списък:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=Списъкът на стойностите идва от таблица
Синтаксис: table_name:label_field:id_field::filter
Пример: c_typent:libelle:id::filter

филтърът може да бъде прост тест (например active = 1), за да се покаже само активна стойност
Можете също да използвате $ID$ във филтъра, който е текущият идентификатор на текущия обект
За да направите SELECT във филтъра, използвайте $SEL$
ако искате да филтрирате по допълнителни полета, използвайте синтаксис extra.fieldcode=...(където кодът на полето е кодът на екстра полето)

За да имате списъка в зависимост от друг допълнителен списък с атрибути:
c_typent:libelle:id:options_ parent_list_code|parent_column:filter

За да имате списъка в зависимост от друг списък:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Параметрите трябва да са ObjectName:Classpath
Синтаксис: ObjectName:Classpath
Примери:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Оставете празно за обикновен разделител
Задайте това на 1 за разделител, който се свива (отворен по подразбиране)
Задайте това на 2 за разделител, който се свива (свит по подразбиране). LibraryToBuildPDF=Използвана библиотека за създаване на PDF файлове LocalTaxDesc=Някои държави могат да прилагат два или три данъка към всеки ред във фактурата. Ако случаят е такъв, изберете вида на втория и третия данък и съответната данъчна ставка. Възможен тип са:
1: местен данък върху продукти и услуги без ДДС (местния данък се изчислява върху сумата без данък)
2: местен данък върху продукти и услуги с ДДС (местният данък се изчислява върху сумата + основния данък)
3: местен данък върху продукти без ДДС (местният данък се изчислява върху сумата без данък)
4: местен данък върху продукти с ДДС (местният данък се изчислява върху сумата + основния данък)
5: местен данък върху услуги без ДДС (местният данък се изчислява върху сумата без данък)
6: местен данък върху услуги с ДДС (местният данък се изчислява върху сумата + основния данък) SMS=SMS -LinkToTestClickToDial=Enter a phone number to call to show a link to test the ClickToDial url for user %s -RefreshPhoneLink=Обнови връзка -LinkToTest=Генерирана е връзка за потребител %s (натиснете телефонния номер за тест) -KeepEmptyToUseDefault=Оставете празно за стойност по подразбиране +LinkToTestClickToDial=Въведете телефонен номер, за да се обадите и да тествате URL адреса на ClickToDial за потребител %s +RefreshPhoneLink=Обновяване на връзка +LinkToTest=Генерирана е връзка за потребител %s (кликнете върху телефонния номер, за да тествате) +KeepEmptyToUseDefault=Оставете празно, за да използвате стойността по подразбиране DefaultLink=Връзка по подразбиране SetAsDefault=Задайте по подразбиране -ValueOverwrittenByUserSetup=Внимание, тази стойност може да бъде презаписана от потребителски настройки (всеки потребител може да зададе собствен натисни-набери адрес) +ValueOverwrittenByUserSetup=Внимание, тази стойност може да бъде презаписана от специфична за потребителя настройка (всеки потребител може да зададе свой собствен URL адрес) ExternalModule=Външен модул - инсталиран в директория %s BarcodeInitForthird-parties=Масова баркод инициализация за контрагенти -BarcodeInitForProductsOrServices=Mass barcode init or reset for products or services +BarcodeInitForProductsOrServices=Масово въвеждане на баркод или зануляване за продукти или услуги CurrentlyNWithoutBarCode=В момента имате %s записа на %s %s без дефиниран баркод. -InitEmptyBarCode=Init value for next %s empty records -EraseAllCurrentBarCode=Erase all current barcode values +InitEmptyBarCode=Първоначална стойност за следващите %s празни записа +EraseAllCurrentBarCode=Изтриване на всички текущи стойности на баркода ConfirmEraseAllCurrentBarCode=Сигурни ли сте че, искате да изтриете всички текущи стойности на баркода? -AllBarcodeReset=All barcode values have been removed +AllBarcodeReset=Всички стойности на баркода са премахнати NoBarcodeNumberingTemplateDefined=Няма активиран баркод шаблон за номериране в настройката на баркод модула. EnableFileCache=Активиране на файлово кеширане ShowDetailsInPDFPageFoot=Добавете още подробности във футъра, като адрес на компанията или името на управителя (в допълнение към професионалните идентификационни номера, капитала на компанията и идентификационния номер по ДДС). @@ -495,16 +498,16 @@ Module0Name=Потребители и групи Module0Desc=Управление на потребители / служители и групи Module1Name=Контрагенти Module1Desc=Управление на фирми и контакти (клиенти, възможности...) -Module2Name=Търговски +Module2Name=Търговия Module2Desc=Търговско управление Module10Name=Счетоводство (опростено) Module10Desc=Опростени счетоводни отчети (дневник, оборот) въз основа на съдържанието в базата данни. Не използва сметкоплан. Module20Name=Предложения -Module20Desc=Търговско предложение управление +Module20Desc=Управление на търговски предложения Module22Name=Масови имейли Module22Desc=Управление на масови имейли Module23Name=Енергия -Module23Desc=Наблюдение на консумацията на енергия +Module23Desc=Мониторинг на потреблението на енергия Module25Name=Поръчки за продажба Module25Desc=Управление на поръчки за продажба Module30Name=Фактури @@ -514,49 +517,49 @@ Module40Desc=Управление на доставчици и покупки ( Module42Name=Журнали за отстраняване на грешки Module42Desc=Инструменти за регистриране (файл, syslog, ...). Дневници за технически цели и отстраняване на грешки. Module49Name=Редактори -Module49Desc=Управление на редактор +Module49Desc=Управление на редактори Module50Name=Продукти Module50Desc=Управление на продукти Module51Name=Масови имейли -Module51Desc=Маса управлението на хартия пощенски -Module52Name=Запаси +Module51Desc=Управление на масови хартиени пощенски пратки +Module52Name=Наличности Module52Desc=Управление на наличности (само за продукти) Module53Name=Услуги Module53Desc=Управление на услуги -Module54Name=Договори/Абонаменти +Module54Name=Договори / Абонаменти Module54Desc=Управление на договори (услуги или периодични абонаменти) Module55Name=Баркодове -Module55Desc=Управление на баркод +Module55Desc=Управление на баркодове Module56Name=Телефония -Module56Desc=Телефония интеграция +Module56Desc=Интеграция на телефония Module57Name=Банкови плащания с директен дебит Module57Desc=Управление на платежни нареждания за директен дебит. Включва генериране на SEPA файл за европейските страни. Module58Name=ClickToDial -Module58Desc=Интеграция на ClickToDial система (Asterisk, ...) +Module58Desc=Интегриране на система ClickToDial (Asterisk, ...) Module59Name=Bookmark4u -Module59Desc=Добавяне на функция за генериране на Bookmark4u сметка от сметка Dolibarr -Module70Name=Интервенциите -Module70Desc=Управление на интервенциите -Module75Name=Разход и пътуване бележки -Module75Desc=Сметка и управление на пътуване бележки -Module80Name=Превозите +Module59Desc=Добавяне на функция за генериране на Bookmark4u профил от Dolibarr профил +Module70Name=Интервенции +Module70Desc=Управление на интервенции +Module75Name=Бележки за разходи и пътувания +Module75Desc=Управление на бележки за разходи и пътувания +Module80Name=Пратки Module80Desc=Управление на пратки и документи за доставка Module85Name=Банки и пари в брой -Module85Desc=Управление на банкови или парични сметки +Module85Desc=Управление на банкови или касови сметки Module100Name=Външен сайт Module100Desc=Добавяне на връзка към външен уебсайт като икона в главното меню. Уебсайтът се показва в рамка под горното меню. -Module105Name=Пощальон и СПИП -Module105Desc=Пощальон или СПИП интерфейс за член модул +Module105Name=Mailman / SPIP +Module105Desc=Mailman / SPIP интерфейс за модул членове Module200Name=LDAP Module200Desc=Синхронизиране на LDAP директория Module210Name=PostNuke -Module210Desc=PostNuke интеграция -Module240Name=Данни износ +Module210Desc=Интегриране на PostNuke +Module240Name=Експорт на данни Module240Desc=Инструмент за експортиране на данни от Dolibarr (с асистенти) -Module250Name=Импортирането на данни +Module250Name=Импорт на данни Module250Desc=Инструмент за импортиране на данни в Dolibarr (с асистенти) Module310Name=Членове -Module310Desc=Управление на членовете на организацията +Module310Desc=Управление на членове на организация Module320Name=RSS емисия Module320Desc=Добавяне на RSS емисия към страниците на Dolibarr Module330Name=Отметки и кратки пътища @@ -564,13 +567,13 @@ Module330Desc=Създаване на достъпни кратки пътища Module400Name=Проекти или възможности Module400Desc=Управление на проекти, възможности / потенциални клиенти и / или задачи. Свързване на елементи (фактури, поръчки, предложения, интервенции, ...) към проект, с цел получаване на общ преглед за проекта Module410Name=Webcalendar -Module410Desc=Webcalendar интеграция +Module410Desc=Интегриране на Webcalendar Module500Name=Данъци и специални разходи Module500Desc=Управление на други разходи (ДДС, социални или фискални данъци, дивиденти, ...) Module510Name=Заплати Module510Desc=Записване и проследяване на плащанията към служители Module520Name=Кредити -Module520Desc=Management of loans +Module520Desc=Управление на кредити Module600Name=Известия Module600Desc=Изпращане на известия по имейл, предизвикани от дадено събитие: за потребител (настройка, определена за всеки потребител), за контакти на контрагенти (настройка, определена за всеки контрагент) или за определени имейли Module600Long=Имайте предвид, че този модул изпраща имейли в реално време, когато настъпи дадено събитие. Ако търсите функция за изпращане на напомняния по имейл за събития от календара отидете в настройката на модула Календар. @@ -582,15 +585,15 @@ Module770Name=Разходни отчети Module770Desc=Управление на искания за разходи (транспорт, храна, ...) Module1120Name=Запитвания към доставчици Module1120Desc=Управление на запитвания към доставчици за цени и условия на доставка -Module1200Name=Богомолка -Module1200Desc=Mantis интеграция -Module1520Name=Document Generation +Module1200Name=Mantis +Module1200Desc=Интегриране на Mantis +Module1520Name=Генериране на документи Module1520Desc=Генериране на документи за масови имейли -Module1780Name=Tags/Categories +Module1780Name=Тагове / Категории Module1780Desc=Създаване на етикети / категории (за продукти, клиенти, доставчици, контакти или членове) Module2000Name=WYSIWYG редактор Module2000Desc=Разрешаване на редактиране / форматиране на текстовите полета с помощта на CKEditor (html) -Module2200Name=Dynamic Prices +Module2200Name=Динамични цени Module2200Desc=Използване на математически изрази за автоматично генериране на цени Module2300Name=Планирани задачи Module2300Desc=Управление на планирани задачи (cron или chrono таблица) @@ -598,24 +601,24 @@ Module2400Name=Събития / Календар Module2400Desc=Проследяване на събития. Регистриране на автоматични събития с цел проследяване или записване на ръчни събития или срещи. Това е основният модул за добро управление на взаимоотношенията с клиенти и доставчици. Module2500Name=Документи / Съдържание Module2500Desc=Система за управление на документи / Управление на електронно съдържание. Автоматична организация на вашите генерирани или съхранени документи. Споделяне на документи. -Module2600Name=API services (Web services SOAP) -Module2600Desc=Enable the Dolibarr SOAP server providing API services -Module2610Name=API services (Web services REST) -Module2610Desc=Enable the Dolibarr REST server providing API services +Module2600Name=API / Web услуги (SOAP сървър) +Module2600Desc=Активиране на Dolibarr SOAP сървър, предоставящ API услуги +Module2610Name=API / Web услуги (REST сървър) +Module2610Desc=Активиране на Dolibarr REST сървър, предоставящ API услуги Module2660Name=Извикване на WebServices (SOAP клиент) Module2660Desc=Активиране на Dollibarr клиент за уеб услуги (Може да се използва за препращане на данни / заявки към външни сървъри. Понастоящем се поддържат само поръчки за покупка.) Module2700Name=Gravatar Module2700Desc=Онлайн услуга Gravatar (www.gravatar.com), която показва снимка на потребители / членове (открита, чрез техните имейли). Нуждае се от достъп до интернет. -Module2800Desc=FTP Клиент +Module2800Desc=FTP клиент Module2900Name=GeoIPMaxmind -Module2900Desc=GeoIP MaxMind реализации възможности +Module2900Desc=GeoIP Maxmind възможности за преобразуване Module3200Name=Неизменими архиви Module3200Desc=Непроменлив дневник на бизнес събития. Събитията се архивират в реално време. Дневникът е таблица, достъпна единствено за четене, която съдържа последователни събития, които могат да бъдат експортирани. Този модул може да е задължителен за някои страни. Module4000Name=ЧР Module4000Desc=Управление на човешки ресурси (управление на отдел, договори и настроения на служители) Module5000Name=Няколко фирми -Module5000Desc=Позволява ви да управлявате няколко фирми -Module6000Name=Workflow +Module5000Desc=Управление на няколко фирми +Module6000Name=Работен процес Module6000Desc=Управление на работен процес (автоматично създаване на обект и / или автоматично промяна на неговия статус) Module10000Name=Уебсайтове Module10000Desc=Създаване на уебсайтове (публични) с WYSIWYG редактор. Просто настройте вашия уеб сървър (Apache, Nginx, ...), за да посочите специалната директория на Dolibarr, за да бъдат онлайн в интернет с определеното за целта име на домейн. @@ -625,7 +628,7 @@ Module39000Name=Продуктови партиди Module39000Desc=Управление на партиди, серийни номера, дати използвай преди / продавай до Module40000Name=Различни валути Module40000Desc=Използване на алтернативни валути в цени и документи -Module50000Name=Paybox +Module50000Name=PayBox Module50000Desc=Предлага на клиентите PayBox страница за онлайн плащане (чрез кредитни / дебитни карти). Позволява на клиентите да извършват необходими плащания или плащания, свързани с определен Dolibarr обект (фактура, поръчка и т.н.) Module50100Name=ПОС SimplePOS Module50100Desc=Точка за продажба SimplePOS (опростен ПОС) @@ -639,99 +642,99 @@ Module50400Name=Счетоводство (двойно записване) Module50400Desc=Управление на счетоводство (двойни вписвания, поддържат се общи и спомагателни счетоводни книги). Експортиране на счетоводната книга в други формати за счетоводен софтуер. Module54000Name=PrintIPP Module54000Desc=Директен печат (без отваряне на документи), чрез използване на Cups IPP интерфейс (Принтерът трябва да се вижда от сървъра, a CUPS трябва да бъде инсталиран на сървъра). -Module55000Name=Poll, Survey or Vote +Module55000Name=Анкети, проучвания и гласоподаване Module55000Desc=Създаване на онлайн анкети, проучвания или гласувания (като Doodle, Studs, RDVz и др.) -Module59000Name=Полета -Module59000Desc=Модул за управление на маржовете -Module60000Name=Комисии -Module60000Desc=Модул за управление на комисии +Module59000Name=Маржове +Module59000Desc=Управление на маржове +Module60000Name=Комисионни +Module60000Desc=Управление на комисионни Module62000Name=Условия на доставка Module62000Desc=Добавяне на функции за управление на Инкотермс (условия на доставка) Module63000Name=Ресурси Module63000Desc=Управление на ресурси (принтери, коли, стаи, ...) с цел разпределяне по събития -Permission11=Клиентите фактури -Permission12=Създаване / промяна на фактури на клиентите -Permission13=Unvalidate клиентите фактури -Permission14=Проверка на клиентите фактури -Permission15=Изпрати на клиентите фактури по имейл -Permission16=Създаване на плащания за клиентите фактури -Permission19=Изтриване на клиентите фактури -Permission21=Търговски предложения +Permission11=Преглед на фактури за продажба +Permission12=Създаване / промяна на фактури на продажба +Permission13=Анулиране на фактури за продажба +Permission14=Валидиране на фактури за продажба +Permission15=Изпращане на фактури за продажба по имейл +Permission16=Създаване на плащания по фактури за продажба +Permission19=Изтриване на фактури за продажба +Permission21=Преглед на търговски предложения Permission22=Създаване / промяна на търговски предложения -Permission24=Проверка на търговски предложения +Permission24=Валидиране на търговски предложения Permission25=Изпращане на търговски предложения -Permission26=Затворете търговски предложения +Permission26=Приключване на търговски предложения Permission27=Изтриване на търговски предложения -Permission28=Износ търговски предложения -Permission31=Прочети продукти +Permission28=Експортиране на търговски предложения +Permission31=Преглед на продукти Permission32=Създаване / промяна на продукти Permission34=Изтриване на продукти Permission36=Преглед / управление на скрити продукти -Permission38=Износ на продукти +Permission38=Експортиране на продукти Permission41=Преглед на проекти и задачи (споделени проекти и проекти, в които съм определен за контакт). Въвеждане на отделено време, за служителя или неговите подчинени, по възложени задачи (График) Permission42=Създаване / редактиране на проекти (споделени проекти и проекти, в които съм определен за контакт). Създаване на задачи и възлагане на проекти и задачи на потребители Permission44=Изтриване на проекти (споделени проекти и проекти, в които съм определен за контакт) Permission45=Експортиране на проекти -Permission61=Прочети интервенции +Permission61=Преглед на интервенции Permission62=Създаване / промяна на интервенции Permission64=Изтриване на интервенции -Permission67=Износ интервенции -Permission71=Прочети членове +Permission67=Експортиране на интервенции +Permission71=Преглед на членове Permission72=Създаване / промяна на членове -Permission74=Изтриване на членовете -Permission75=Setup types of membership +Permission74=Изтриване на членове +Permission75=Настройка на видове членство Permission76=Експортиране на данни -Permission78=Прочети абонаменти -Permission79=Създаване/промяна на абонаменти -Permission81=Клиенти поръчки -Permission82=Създаване / промяна клиенти поръчки -Permission84=Проверка на клиенти поръчки -Permission86=Изпрати клиенти поръчки -Permission87=Затваряне на поръчките на клиентите -Permission88=Отказ клиенти поръчки -Permission89=Изтриване на клиенти поръчки -Permission91=Read social or fiscal taxes and vat -Permission92=Create/modify social or fiscal taxes and vat -Permission93=Delete social or fiscal taxes and vat -Permission94=Export social or fiscal taxes -Permission95=Прочети доклада -Permission101=Прочети sendings -Permission102=Създаване / промяна sendings -Permission104=Проверка на sendings -Permission106=Export sendings -Permission109=Изтриване sendings -Permission111=Финансови сметки -Permission112=Създаване / редакция / изтриване и сравни сделки -Permission113=Setup financial accounts (create, manage categories) +Permission78=Преглед на абонаменти +Permission79=Създаване / промяна на абонаменти +Permission81=Преглед на поръчки за продажба +Permission82=Създаване / промяна на поръчки за продажба +Permission84=Валидиране на поръчки за продажба +Permission86=Изпращане на поръчки за продажба +Permission87=Приключване на поръчки за продажба +Permission88=Анулиране на поръчки за продажба +Permission89=Изтриване на поръчки за продажба +Permission91=Преглед на социални или фискални данъци и ДДС +Permission92=Създаване / промяна на социални или фискални данъци и ДДС +Permission93=Изтриване на социални или фискални данъци и ДДС +Permission94=Експортиране на социални или фискални данъци +Permission95=Преглед на справки +Permission101=Преглед на изпращания +Permission102=Създаване / промяна на изпращания +Permission104=Валидиране на изпращания +Permission106=Експортиране на изпращания +Permission109=Изтриване на изпращания +Permission111=Преглед на финансови сметки +Permission112=Създаване / промяна / изтриване и сравняване на транзакции +Permission113=Настройка на финансови сметки (създаване, управление на категории) Permission114=Съгласуване на транзакции -Permission115=Експортни сделки и извлеченията от сметките -Permission116=Трансфери между сметки +Permission115=Експортиране на транзакции и извлечения по сметка +Permission116=Прехвърляне между сметки Permission117=Управление на изпратени чекове -Permission121=Четене на трети лица, свързани с потребителя -Permission122=Създаване / промяна контрагенти, свързани с потребителя -Permission125=Изтриване на трети лица, свързани с потребителя -Permission126=Контрагенти за износ +Permission121=Преглед на контрагенти, свързани с потребителя +Permission122=Създаване / промяна на контрагенти, свързани с потребителя +Permission125=Изтриване на контрагенти, свързани с потребителя +Permission126=Експортиране на контрагенти Permission141=Преглед на всички проекти и задачи (включително частни проекти, в които служителя не е определен за контакт) Permission142=Създаване / редактиране на всички проекти и задачи (включително частни проекти, в които служителя не е определен за контакт) -Permission144=Delete all projects and tasks (also private projects i am not contact for) -Permission146=Прочети доставчици -Permission147=Прочети статистиката +Permission144=Изтриване на всички проекти и задачи (включително частни проекти, в които служителя не е определен за контакт) +Permission146=Преглед на доставчици +Permission147=Преглед на статистически данни Permission151=Преглед на платежни нареждания за директен дебит Permission152=Създаване / редактиране на платежни нареждания за директен дебит Permission153=Изпращане / предаване на платежни нареждания за директен дебит Permission154=Записване на кредити / отхвърляния на платежни нареждания за директен дебит -Permission161=Read contracts/subscriptions -Permission162=Create/modify contracts/subscriptions -Permission163=Activate a service/subscription of a contract -Permission164=Disable a service/subscription of a contract -Permission165=Delete contracts/subscriptions +Permission161=Преглед на договори / абонаменти +Permission162=Създаване / промяна на договори / абонаменти +Permission163=Активиране на услуга / абонамент към договор +Permission164=Прекратяване на услуга / абонамент към договор +Permission165=Изтриване на договори / абонаменти Permission167=Експортиране на договори -Permission171=Read trips and expenses (yours and your subordinates) -Permission172=Create/modify trips and expenses -Permission173=Delete trips and expenses -Permission174=Read all trips and expenses -Permission178=Export trips and expenses -Permission180=Прочети доставчици +Permission171=Преглед на пътувания и разходи (на служителя и неговите подчинени) +Permission172=Създаване / промяна на пътувания и разходи +Permission173=Изтриване на пътувания и разходи +Permission174=Преглед на всички пътувания и разходи +Permission178=Експортиране на пътувания и разходи +Permission180=Преглед на доставчици Permission181=Преглед на поръчки за покупка Permission182=Създаване / редактиране на поръчки за покупка Permission183=Валидиране на поръчки за покупка @@ -741,113 +744,113 @@ Permission186=Получаване на поръчки за покупка Permission187=Затваряне на поръчки за покупка Permission188=Анулиране на поръчки за покупка Permission192=Създаване на линии -Permission193=Отказ линии +Permission193=Анулиране на линии Permission194=Преглед на линиите на честотната лента Permission202=Създаване на ADSL връзки -Permission203=Поръчка връзки поръчки -Permission204=Поръчка връзки -Permission205=Управление на връзките -Permission206=Прочетете Връзки -Permission211=Прочети телефония -Permission212=Поръчка линии +Permission203=Поръчка на поръчки за свързване +Permission204=Поръчка на връзки +Permission205=Управление на връзки +Permission206=Преглед на връзки +Permission211=Преглед на телефония +Permission212=Поръчка на линия Permission213=Активиране на линия -Permission214=Setup телефония -Permission215=Setup доставчици -Permission221=Прочети emailings -Permission222=Създаване/промяна на имейли (тема, получатели ...) -Permission223=Проверка на emailings (позволява изпращане) +Permission214=Настройка на телефония +Permission215=Настройка на доставчици +Permission221=Преглед на имейли +Permission222=Създаване / промяна на имейли (тема, получатели, ...) +Permission223=Валидиране на имейли (позволява изпращане) Permission229=Изтриване на имейли -Permission237=Получатели и информация -Permission238=Ръчно изпрати писма -Permission239=Изтриване на писма след утвърждаване или изпратени -Permission241=Прочети категории +Permission237=Преглед на получатели и информация +Permission238=Ръчно изпращане на имейли +Permission239=Изтриване на писма след валидиране или изпращане +Permission241=Преглед на категории Permission242=Създаване / промяна на категории Permission243=Изтриване на категории -Permission244=Вижте съдържанието на скрити категории -Permission251=Прочетете други потребители и групи -PermissionAdvanced251=Прочетете други потребители -Permission252=Разрешения на други потребители +Permission244=Преглед на съдържание на скрити категории +Permission251=Преглед на други потребители и групи +PermissionAdvanced251=Преглед на други потребители +Permission252=Преглед на права на други потребители Permission253=Създаване / редактиране на други потребители, групи и разрешения -PermissionAdvanced253=Създаване / промяна на вътрешни / външни потребители и разрешения -Permission254=Създаване / промяна на външни потребители -Permission255=Промяна на други потребители парола -Permission256=Изтрий или забраняване на други потребители +PermissionAdvanced253=Създаване / промяна на вътрешни / външни потребители и права +Permission254=Създаване / променя само на външни потребители +Permission255=Промяна на парола на други потребители +Permission256=Изтриване или деактивиране на други потребители Permission262=Разширяване на достъпа до всички контрагенти (не само контрагенти, за които този потребител е търговски представител).
Не е ефективно за външни потребители (винаги са ограничени до своите предложения, поръчки, фактури, договори и т.н.).
Не е ефективно за проекти (имат значение само разрешенията, видимостта и възложенията в проекта). -Permission271=Прочети CA -Permission272=Прочети фактури +Permission271=Преглед на CA +Permission272=Преглед на фактури Permission273=Издаване на фактури -Permission281=Прочети контакти -Permission282=Създаване / Промяна на контактите +Permission281=Преглед на контакти +Permission282=Създаване / промяна на контакти Permission283=Изтриване на контакти Permission286=Експортиране на контакти -Permission291=Прочети тарифи -Permission292=Задаване на разрешения за тарифите +Permission291=Преглед на тарифи +Permission292=Задаване на права за тарифи Permission293=Промяна на тарифите на клиента Permission300=Преглед на баркодове Permission301=Създаване / редактиране на баркодове Permission302=Изтриване на баркодове -Permission311=Прочети услуги -Permission312=Assign service/subscription to contract -Permission331=Прочетете отметките +Permission311=Преглед на услуги +Permission312=Възлагане на услуга / абонамент към договор +Permission331=Преглед на отметки Permission332=Създаване / промяна на отметки Permission333=Изтриване на отметки -Permission341=Прочетете своите разрешения -Permission342=Създаване / промяна на собствената си потребителска информация -Permission343=Промяна на собствената си парола -Permission344=Промяна на свои собствени разрешения -Permission351=Прочети групи -Permission352=Групи разрешения +Permission341=Преглед на собствени права +Permission342=Създаване / промяна на собствена информация за потребителя +Permission343=Промяна на собствена парола +Permission344=Промяна на собствени права +Permission351=Преглед на групи +Permission352=Преглед на групови права Permission353=Създаване / промяна на групи -Permission354=Изтрий или забраняване на групи -Permission358=Износ потребители -Permission401=Прочети отстъпки +Permission354=Изтриване или деактивиране на групи +Permission358=Експортиране на потребители +Permission401=Преглед на отстъпки Permission402=Създаване / промяна на отстъпки -Permission403=Проверка на отстъпки +Permission403=Валидиране на отстъпки Permission404=Изтриване на отстъпки -Permission430=Use Debug Bar +Permission430=Използване на инструменти за отстраняване на грешки Permission511=Преглед на плащания на заплати Permission512=Създаване / редактиране на плащания на заплати Permission514=Изтриване на плащания на заплати -Permission517=Export salaries -Permission520=Read Loans -Permission522=Create/modify loans -Permission524=Delete loans -Permission525=Access loan calculator -Permission527=Export loans -Permission531=Прочети услуги -Permission532=Създаване / промяна услуги +Permission517=Експортиране на заплати +Permission520=Преглед на кредити +Permission522=Създаване / промяна на кредити +Permission524=Изтриване на кредити +Permission525=Достъп до кредитен калкулатор +Permission527=Експортиране на кредити +Permission531=Преглед на услуги +Permission532=Създаване / промяна на услуги Permission534=Изтриване на услуги -Permission536=Вижте / управление скрити услуги -Permission538=Износ услуги -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom -Permission701=Прочети дарения +Permission536=Преглед / управление на скрити услуги +Permission538=Експортиране на услуги +Permission650=Преглед на спецификации +Permission651=Създаване / Промяна на спецификации +Permission652=Изтриване на спецификации +Permission701=Преглед на дарения Permission702=Създаване / промяна на дарения Permission703=Изтриване на дарения -Permission771=Read expense reports (yours and your subordinates) -Permission772=Create/modify expense reports -Permission773=Delete expense reports -Permission774=Read all expense reports (even for user not subordinates) -Permission775=Approve expense reports -Permission776=Pay expense reports -Permission779=Export expense reports -Permission1001=Прочети запаси -Permission1002=Create/modify warehouses -Permission1003=Delete warehouses -Permission1004=Движението на стоковите наличности -Permission1005=Създаване / промяна на движението на стоковите наличности -Permission1101=Поръчките за доставка -Permission1102=Създаване / промяна на поръчките за доставка -Permission1104=Проверка на поръчките за доставка -Permission1109=Изтриване на поръчките за доставка -Permission1121=Read supplier proposals -Permission1122=Create/modify supplier proposals -Permission1123=Validate supplier proposals -Permission1124=Send supplier proposals -Permission1125=Delete supplier proposals -Permission1126=Close supplier price requests -Permission1181=Прочети доставчици +Permission771=Преглед на разходни отчети (на служителя и неговите подчинени) +Permission772=Създаване / промяна на разходни отчети +Permission773=Изтриване на разходни отчети +Permission774=Преглед на всички разходни отчети (дори на служители които не са подчинени на служителя) +Permission775=Одобряване на разходни отчети +Permission776=Плащане на разходни отчети +Permission779=Експортиране на разходни отчети +Permission1001=Преглед на наличности +Permission1002=Създаване / промяна на складове +Permission1003=Изтриване на складове +Permission1004=Преглед на движения на наличности +Permission1005=Създаване / промяна на движения на наличности +Permission1101=Преглед на поръчки за покупка +Permission1102=Създаване / промяна на поръчки за покупка +Permission1104=Валидиране на поръчки за покупка +Permission1109=Изтриване на поръчки за покупка +Permission1121=Преглед на запитвания към доставчици +Permission1122=Създаване / промяна на запитвания към доставчици +Permission1123=Валидиране на запитвания към доставчици +Permission1124=Изпращане на запитвания към доставчици +Permission1125=Изтриване на запитвания към доставчици +Permission1126=Приключване на запитвания към доставчици +Permission1181=Преглед на доставчици Permission1182=Преглед на поръчки за покупка Permission1183=Създаване / редактиране на поръчки за покупка Permission1184=Валидиране на поръчки за покупка @@ -856,8 +859,8 @@ Permission1186=Поръчка на поръчки за покупка Permission1187=Потвърждаване на получаването на поръчка за покупка Permission1188=Изтриване на поръчки за покупка Permission1190=Одобряване (второ одобрение) на поръчки за покупка -Permission1201=Резултат от износ -Permission1202=Създаване / Промяна на износ +Permission1201=Получава на резултат от експортиране +Permission1202=Създаване / промяна на експортиране Permission1231=Преглед на фактури за доставка Permission1232=Създаване / редактиране на фактури за доставка Permission1233=Валидиране на фактури за доставка @@ -865,64 +868,64 @@ Permission1234=Изтриване на фактури за доставка Permission1235=Изпращане на фактури за доставка по имейл Permission1236=Експортиране на фактури за доставка, атрибути и плащания Permission1237=Експортиране на поръчки за покупка и техните подробности -Permission1251=Пусни масов внос на външни данни в базата данни (данни товара) -Permission1321=Износ на клиентите фактури, атрибути и плащания +Permission1251=Извършване на масово импортиране на външни данни в базата данни (зареждане на данни) +Permission1321=Експортиране на фактури за продажба, атрибути и плащания Permission1322=Повторно отваряне на платена фактура Permission1421=Експортиране на поръчки за продажба и атрибути -Permission2401=Прочетете действия (събития или задачи), свързани с неговата сметка -Permission2402=Създаване/промяна действия (събития или задачи), свързани с неговата сметка -Permission2403=Изтрий действия (събития или задачи), свързани с неговата сметка -Permission2411=Прочетете действия (събития или задачи) на другите -Permission2412=Създаване / промяна действия (събития или задачи) на другите -Permission2413=Изтрий действия (събития или задачи) на другите +Permission2401=Преглед на действия (събития или задачи), свързани с профила на потребителя +Permission2402=Създаване / промяна на действия (събития или задачи), свързани с профила на потребителя +Permission2403=Изтриване на действия (събития или задачи), свързани с профила на потребителя +Permission2411=Преглед на действия (събития или задачи), свързани с профили на други потребители +Permission2412=Създаване / променя на действия (събития или задачи), свързани с профили на други потребители +Permission2413=Изтриване на действия (събития или задачи), свързани с профили на други потребители Permission2414=Експортиране на действия / задачи на други лица -Permission2501=/ Изтегляне документи +Permission2501=Преглед / изтегляне на документи Permission2502=Изтегляне на документи Permission2503=Изпращане или изтриване на документи -Permission2515=Setup документи директории -Permission2801=Използвайте FTP клиент в режим на четене (да преглеждате и сваляте само) -Permission2802=Използвайте FTP клиент в режим на запис (изтриване или качване на файлове) -Permission3200=Read archived events and fingerprints -Permission4001=See employees -Permission4002=Create employees -Permission4003=Delete employees -Permission4004=Export employees -Permission10001=Read website content -Permission10002=Create/modify website content (html and javascript content) -Permission10003=Create/modify website content (dynamic php code). Dangerous, must be reserved to restricted developers. -Permission10005=Delete website content +Permission2515=Настройка на директории за документи +Permission2801=Използване на FTP клиент в режим на четене (само за преглед и изтегляне) +Permission2802=Използване на FTP клиент в режим на писане (изтриване или качване на файлове) +Permission3200=Преглед на архивирани събития и пръстови отпечатъци +Permission4001=Преглед на служители +Permission4002=Създаване на служители +Permission4003=Изтриване на служители +Permission4004=Експортиране на служители +Permission10001=Преглед на съдържание в уебсайт +Permission10002=Създаване / Промяна на съдържание в уебсайт (html и javascript) +Permission10003=Създаване / Промяна на съдържание в уебсайт (динамичен php код). Опасно, трябва да бъде използвано само за ограничен кръг разработчици. +Permission10005=Изтриване на съдържание в уебсайт Permission20001=Преглед на молби за отпуск (на служителя и неговите подчинени) Permission20002=Създаване / редактиране на молби за отпуск (на служителя и неговите подчинени) -Permission20003=Delete leave requests +Permission20003=Изтриване на молби за отпуск Permission20004=Преглед на всички молби за отпуск (дори на служители които не са подчинени на служителя) Permission20005=Създаване / редактиране на всички молби за отпуск (дори на служители, които не са подчинени на служителя) -Permission20006=Admin leave requests (setup and update balance) -Permission23001=Read Scheduled job -Permission23002=Create/update Scheduled job -Permission23003=Delete Scheduled job -Permission23004=Execute Scheduled job +Permission20006=Администриране на молби за отпуск (настройка и актуализиране на баланса) +Permission23001=Преглед на планирани задачи +Permission23002=Създаване / промяна на планирани задачи +Permission23003=Изтриване на планирани задачи +Permission23004=Стартиране на планирани задачи Permission50101=Използване на точка на продажба -Permission50201=Прочети сделки -Permission50202=Сделки на внос -Permission50401=Bind products and invoices with accounting accounts -Permission50411=Read operations in ledger -Permission50412=Write/Edit operations in ledger -Permission50414=Delete operations in ledger -Permission50415=Delete all operations by year and journal in ledger -Permission50418=Export operations of the ledger -Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year -Permission50440=Manage chart of accounts, setup of accountancy -Permission51001=Read assets -Permission51002=Create/Update assets -Permission51003=Delete assets -Permission51005=Setup types of asset -Permission54001=Print -Permission55001=Read polls -Permission55002=Create/modify polls -Permission59001=Read commercial margins -Permission59002=Define commercial margins -Permission59003=Read every user margin +Permission50201=Преглед на транзакции +Permission50202=Импортиране на транзакции +Permission50401=Свързване на продукти и фактури със счетоводни сметки +Permission50411=Преглед на операции в счетоводна книга +Permission50412=Създаване / Промяна на операции в счетоводна книга +Permission50414=Изтриване на операции в счетоводна книга +Permission50415=Изтриване на всички операции по година и дневник в счетоводна книга +Permission50418=Експортиране на операции от счетоводна книга +Permission50420=Отчитане и справки за експортиране (оборот, баланс, дневници, счетоводна книга) +Permission50430=Определяне и приключване на фискален период +Permission50440=Управление на сметкоплан, настройка на счетоводство +Permission51001=Преглед на активи +Permission51002=Създаване / Промяна на активи +Permission51003=Изтриване на активи +Permission51005=Настройка на типове активи +Permission54001=Принтиране +Permission55001=Преглед на анкети +Permission55002=Създаване / промяна на анкети +Permission59001=Преглед на търговски маржове +Permission59002=Дефиниране на търговски маржове +Permission59003=Преглед на всички потребителски маржове Permission63001=Преглед на ресурси Permission63002=Създаване / редактиране на ресурси Permission63003=Изтриване на ресурси @@ -931,39 +934,39 @@ DictionaryCompanyType=Видове контрагенти DictionaryCompanyJuridicalType=Правна форма на контрагенти DictionaryProspectLevel=Потенциал за перспектива DictionaryCanton=Области / региони -DictionaryRegion=Regions -DictionaryCountry=Countries -DictionaryCurrency=Currencies +DictionaryRegion=Региони +DictionaryCountry=Държави +DictionaryCurrency=Валути DictionaryCivility=Обръщения DictionaryActions=Видове събития в календара DictionarySocialContributions=Видове социални или фискални данъци -DictionaryVAT=VAT Rates or Sales Tax Rates +DictionaryVAT=Ставки на ДДС или Данък върху продажби DictionaryRevenueStamp=Размер на данъчни печати (бандероли) DictionaryPaymentConditions=Условия за плащане DictionaryPaymentModes=Методи за плащане DictionaryTypeContact=Видове контакти / адреси DictionaryTypeOfContainer=Уебсайт - Видове страници / контейнери DictionaryEcotaxe=Ecotax (WEEE) -DictionaryPaperFormat=Paper formats +DictionaryPaperFormat=Хартиени формати DictionaryFormatCards=Формати на карти DictionaryFees=Разходен отчет - Видове разходни отчети -DictionarySendingMethods=Shipping methods +DictionarySendingMethods=Методи на доставка DictionaryStaff=Брой служители -DictionaryAvailability=Delivery delay -DictionaryOrderMethods=Ordering methods -DictionarySource=Origin of proposals/orders +DictionaryAvailability=Забавяне на доставка +DictionaryOrderMethods=Методи за поръчка +DictionarySource=Произход на предложения / поръчки DictionaryAccountancyCategory=Персонализирани групи за отчети -DictionaryAccountancysystem=Models for chart of accounts +DictionaryAccountancysystem=Модели за сметкоплан DictionaryAccountancyJournal=Счетоводни дневници DictionaryEMailTemplates=Шаблони за имейли -DictionaryUnits=Units +DictionaryUnits=Единици DictionaryMeasuringUnits=Измервателни единици DictionaryProspectStatus=Статус на перспективи DictionaryHolidayTypes=Видове отпуск DictionaryOpportunityStatus=Статус на възможността за проект / възможност DictionaryExpenseTaxCat=Разходен отчет - Транспортни категории DictionaryExpenseTaxRange=Разходен отчет - Обхват на транспортни категории -SetupSaved=Setup спаси +SetupSaved=Настройката е запазена SetupNotSaved=Настройката не е запазена BackToModuleList=Назад към списъка с модули BackToDictionaryList=Назад към списъка с речници @@ -974,37 +977,37 @@ VATIsNotUsedDesc=По подразбиране предложената став VATIsUsedExampleFR=Във Франция това означава дружества или организации, които имат реална фискална система (опростена реална или нормална реална). Система, в която е деклариран ДДС. VATIsNotUsedExampleFR=Във Франция това означава асоциации, които не декларират данък върху продажбите или компании, организации, или свободни професии, които са избрали фискалната система за микропредприятия (данък върху продажбите във франчайз) и са платили франчайз данък върху продажбите без декларация за данък върху продажбите. Този избор ще покаже информация за "Неприложим данък върху продажбите - art-293B от CGI" във фактурите. ##### Local Taxes ##### -LTRate=Курс -LocalTax1IsNotUsed=Do not use second tax +LTRate=Ставка +LocalTax1IsNotUsed=Да не се използва втори данък LocalTax1IsUsedDesc=Използване на втори тип данък (различен от първия) LocalTax1IsNotUsedDesc=Да не се използва друг тип данък (различен от първия) -LocalTax1Management=Second type of tax +LocalTax1Management=Втори вид данък LocalTax1IsUsedExample= LocalTax1IsNotUsedExample= -LocalTax2IsNotUsed=Do not use third tax +LocalTax2IsNotUsed=Да не се използва трети данък LocalTax2IsUsedDesc=Използване на трети тип данък (различен от първия) LocalTax2IsNotUsedDesc=Да не се използва друг тип данък (различен от първия) -LocalTax2Management=Third type of tax +LocalTax2Management=Трети вид данък LocalTax2IsUsedExample= LocalTax2IsNotUsedExample= -LocalTax1ManagementES=RE Управление +LocalTax1ManagementES=Управление на RE LocalTax1IsUsedDescES=Ставката на RE по подразбиране при създаване на перспективи, фактури, поръчки и т.н. следва активното стандартно правило:
Ако купувачът не е подложен на RE, RE по подразбиране = 0. Край на правилото.
Ако купувачът е подложен на RE, тогава RE е по подразбиране. Край на правилото.
-LocalTax1IsNotUsedDescES=По подразбиране предложения RE е 0. Край на правило. -LocalTax1IsUsedExampleES=В Испания те са професионалисти, подлежащи на някои специфични части на испанската IAE. -LocalTax1IsNotUsedExampleES=В Испания те са професионални и общества и при спазване на определени сектори на испанската IAE. -LocalTax2ManagementES=IRPF Management +LocalTax1IsNotUsedDescES=По подразбиране предложената RE е 0. Край на правилото. +LocalTax1IsUsedExampleES=В Испания те са професионалисти, подчинени на някои специфични раздели на испанската IAE. +LocalTax1IsNotUsedExampleES=В Испания те са професионалисти и общества и подлежат на определени раздели на испанската IAE. +LocalTax2ManagementES=Управление на IRPF LocalTax2IsUsedDescES=Ставката на IRPF по подразбиране при създаване на перспективи, фактури, поръчки и т.н. следва активното стандартно правило:
Ако продавачът не е подложен на IRPF, то по подразбиране IRPF = 0. Край на правилото.
Ако продавачът е подложен на IRPF, тогава IRPF е по подразбиране. Край на правилото.
-LocalTax2IsNotUsedDescES=По подразбиране предложения IRPF е 0. Край на правило. -LocalTax2IsUsedExampleES=В Испания, на свободна практика и независими специалисти, които предоставят услуги и фирми, които са избрани на данъчната система от модули. +LocalTax2IsNotUsedDescES=По подразбиране предложената IRPF е 0. Край на правилото. +LocalTax2IsUsedExampleES=В Испания, професионалистите на свободна практика и независимите професионалисти, които предоставят услуги и фирми, които са избрали данъчната система от модули. LocalTax2IsNotUsedExampleES=В Испания те са предприятия, които не подлежат на данъчна система от модули. -CalcLocaltax=Reports on local taxes -CalcLocaltax1=Sales - Purchases -CalcLocaltax1Desc=Local Taxes reports are calculated with the difference between localtaxes sales and localtaxes purchases -CalcLocaltax2=Purchases -CalcLocaltax2Desc=Local Taxes reports are the total of localtaxes purchases -CalcLocaltax3=Sales -CalcLocaltax3Desc=Local Taxes reports are the total of localtaxes sales -LabelUsedByDefault=Label used by default if no translation can be found for code +CalcLocaltax=Справки за местни данъци +CalcLocaltax1=Продажби - Покупки +CalcLocaltax1Desc=Справките за местни данъци се изчисляват с разликата между размера местни данъци от продажби и размера местни данъци от покупки. +CalcLocaltax2=Покупки +CalcLocaltax2Desc=Справки за местни данъци се определят, чрез размера на местни данъци от общи покупки +CalcLocaltax3=Продажби +CalcLocaltax3Desc=Справки за местни данъци се определят, чрез размера на местни данъци от общи продажби +LabelUsedByDefault=Етикет, използван по подразбиране, ако не може да бъде намерен превод за кода LabelOnDocuments=Етикет на документи LabelOrTranslationKey=Етикет или ключ за превод ValueOfConstantKey=Стойност на константа @@ -1013,62 +1016,62 @@ AtEndOfMonth=В края на месеца CurrentNext=Текущ/Следващ Offset=Офсет AlwaysActive=Винаги активна -Upgrade=Обновяване -MenuUpgrade=Обновяване/Удължаване +Upgrade=Актуализация +MenuUpgrade=Актуализиране / разширяване AddExtensionThemeModuleOrOther=Внедряване / инсталиране на външно приложение / модул WebServer=Уеб сървър -DocumentRootServer=Главната директория на уеб сървъра -DataRootServer=Файлове с данни +DocumentRootServer=Основна директория на уеб сървъра +DataRootServer=Директория за файлове с данни IP=IP Port=Порт -VirtualServerName=Име на виртуалния сървър -OS=OS -PhpWebLink=Web-Php връзка +VirtualServerName=Име на виртуален сървър +OS=Операционна система +PhpWebLink=Връзка с уеб-php Server=Сървър Database=База данни -DatabaseServer=Хост базата данни -DatabaseName=Име на базата данни -DatabasePort=Database порт -DatabaseUser=Потребители на бази данни -DatabasePassword=Database парола -Tables=Маси -TableName=Таблица име +DatabaseServer=Хост на база данни +DatabaseName=Име на база данни +DatabasePort=Порт на база данни +DatabaseUser=Потребител на база данни +DatabasePassword=Парола на база данни +Tables=Таблици +TableName=Име на таблица NbOfRecord=Брой записи Host=Сървър -DriverType=Шофьор тип -SummarySystem=Резюме на информационна система -SummaryConst=Списък на всички параметри за настройка Dolibarr +DriverType=Тип драйвер +SummarySystem=Резюме на системна информация +SummaryConst=Списък на всички параметри за настройка на Dolibarr MenuCompanySetup=Компания / Организация -DefaultMenuManager= Стандартно меню мениджър -DefaultMenuSmartphoneManager=Smartphone Menu Manager -Skin=Кожата тема +DefaultMenuManager= Стандартен мениджър на меню +DefaultMenuSmartphoneManager=Мениджър на меню за смартфон +Skin=Тема на интерфейса DefaultSkin=Тема по подразбиране -MaxSizeList=Максимална дължина за списъка -DefaultMaxSizeList=Макс. дължина за списъци по подразбиране +MaxSizeList=Максимална дължина за списък +DefaultMaxSizeList=Максимална дължина по подразбиране за списъци DefaultMaxSizeShortList=Максимална дължина по подразбиране за кратки списъци (т.е. в карта на клиента) MessageOfDay=Послание на деня -MessageLogin=Съобщение на страницата за вход +MessageLogin=Съобщение в страницата за вход LoginPage=Входна страница BackgroundImageLogin=Фоново изображение -PermanentLeftSearchForm=Постоянна форма за търсене в лявото меню +PermanentLeftSearchForm=Формуляр за постоянно търсене в лявото меню DefaultLanguage=Език по подразбиране EnableMultilangInterface=Активиране на многоезикова поддръжка -EnableShowLogo=Показване на логото в лявото меню +EnableShowLogo=Показване на лого в лявото меню CompanyInfo=Фирма / Организация CompanyIds=Идентификационни данни на фирма / организация CompanyName=Име CompanyAddress=Адрес -CompanyZip=П. код +CompanyZip=Пощ. код CompanyTown=Град CompanyCountry=Държава -CompanyCurrency=Основната валута -CompanyObject=Object of the company -Logo=Logo -DoNotSuggestPaymentMode=Да не предполагат -NoActiveBankAccountDefined=Не е активна банкова сметка на определени -OwnerOfBankAccount=Собственик на %s банкови сметки -BankModuleNotActive=Банкови сметки модул не е активиран -ShowBugTrackLink=Show link "%s" +CompanyCurrency=Основна валута +CompanyObject=Предмет на фирмата +Logo=Лого +DoNotSuggestPaymentMode=Да не се предлага +NoActiveBankAccountDefined=Няма дефинирана активна банкова сметка +OwnerOfBankAccount=Титуляр на банкова сметка %s +BankModuleNotActive=Модулът за банкови сметки не е активиран +ShowBugTrackLink=Показване на връзка "%s" Alerts=Сигнали DelaysOfToleranceBeforeWarning=Закъснение преди показване на предупредителен сигнал за: DelaysOfToleranceDesc=Задаване на закъснение, преди на екрана да се покаже иконата за предупреждение %s на закъснелия елемент. @@ -1092,7 +1095,7 @@ SetupDescription2=Следните две секции са задължител SetupDescription3=%s ->%s
Основни параметри, използвани за персонализиране на поведението по подразбиране на вашето приложение (например за функции, свързани със държавата). SetupDescription4=%s ->%s
Този софтуер е набор от много модули / приложения, всички повече или по-малко независими. Модулите, съответстващи на вашите нужди, трябва да бъдат активирани и конфигурирани. В менютата се добавят нови елементи / опции с активирането на модул. SetupDescription5=Менюто "Други настройки" управлява допълнителни параметри. -LogEvents=Събития одит на сигурността +LogEvents=Събития за одит на сигурността Audit=Проверка InfoDolibarr=За Dolibarr InfoBrowser=За браузъра @@ -1101,60 +1104,60 @@ InfoWebServer=За уеб сървъра InfoDatabase=За базата данни InfoPHP=За PHP InfoPerf=За производителността -BrowserName=Browser name -BrowserOS=Browser OS -ListOfSecurityEvents=Списък на събитията Dolibarr сигурност -SecurityEventsPurged=Събития по сигурността прочиства +BrowserName=Име на браузъра +BrowserOS=OS на браузъра +ListOfSecurityEvents=Списък на събития за сигурност в Dolibarr +SecurityEventsPurged=Събитията със сигурността са премахнати LogEventDesc=Активиране на регистрирането за конкретни събития за сигурност. Администриране на записаните събития, чрез меню %s - %s. Внимание, тази функция може да генерира голямо количество данни в базата данни. AreaForAdminOnly=Параметрите за настройка могат да се задават само от Администратори. -SystemInfoDesc=Информационна система Разни техническа информация можете да получите в режим само за четене и видими само за администратори. +SystemInfoDesc=Системната информация е различна техническа информация, която получавате в режим само за четене и е видима само за администратори. SystemAreaForAdminOnly=Тази секция е достъпна само за администратори. Потребителските права в Dolibarr не могат да променят това ограничение. CompanyFundationDesc=Редактирайте информацията за фирма / организация като кликнете върху бутона '%s' или '%s' в долната част на страницата. -AccountantDesc=If you have an external accountant/bookkeeper, you can edit here its information. +AccountantDesc=Ако имате външен счетоводител, тук може да редактирате неговата информация. AccountantFileNumber=Счетоводен код DisplayDesc=Тук могат да се променят параметрите, които влияят на външния вид и поведението на Dolibarr. AvailableModules=Налични приложения / модули -ToActivateModule=За да активирате модули, отидете на настройка пространство (Начало-> Setup-> модули). -SessionTimeOut=Време за сесията +ToActivateModule=За да активирате модули, отидете на в секцията за настройка (Начало -> Настройки -> Модули / Приложения). +SessionTimeOut=Време за сесия SessionExplanation=Това число гарантира, че сесията никога няма да изтече преди това закъснение, ако чистачът на сесии се извършва от вътрешен PHP чистач на сесии (и нищо друго). Вътрешният PHP чистач на сесии не гарантира, че сесията ще изтече след това закъснение. Тя ще изтече, след това закъснение и когато се задейства чистачът на сесии на всеки %s / %s идентифицирания в системата, но само по време на достъп от други сесии (ако стойността е 0, това означава, че почистването на сесията се извършва само от външен процес).
Забележка: на някои сървъри с външен механизъм за почистване на сесиите (cron под debian, ubuntu ...), сесиите могат да бъдат унищожени след период, определен от външна настройка, независимо от въведената тук стойност. TriggersAvailable=Налични тригери TriggersDesc=Тригерите са файлове, които ще променят поведението на Dolibarr след като бъдат копирани в директорията htdocs/core/triggers. Те реализират нови действия, активирани при събития в Dolibarr (създаване на нов контрагент, валидиране на фактура, ...). -TriggerDisabledByName=Тригерите в този файл са изключени от NORUN наставка в името си. -TriggerDisabledAsModuleDisabled=Тригерите в този файл са забранени като модул %s е забранено. -TriggerAlwaysActive=Тригерите в този файл са винаги активни,, каквото са активирани модули Dolibarr. -TriggerActiveAsModuleActive=Тригерите в този файл са активни, като модул %s е активирана. +TriggerDisabledByName=Тригерите в този файл са деактивирани от суфикса -NORUN в името му. +TriggerDisabledAsModuleDisabled=Тригерите в този файл са деактивирани, тъй като модулът %s е деактивиран. +TriggerAlwaysActive=Тригерите в този файл са винаги активни, каквито и да са активираните Dolibarr модули. +TriggerActiveAsModuleActive=Тригерите в този файл са активни, когато е активиран модул %s. GeneratedPasswordDesc=Изберете метода, който ще се използва за автоматично генерирани пароли. DictionaryDesc=Определете всички референтни данни. Може да добавите стойности по подразбиране. ConstDesc=Тази страница позволява да редактирате (презаписвате) параметри, които не са достъпни в други страници. Това са параметри предимно запазени за разработчици / разширено отстраняване на неизправности. За пълен списък на наличните параметри вижте тук. MiscellaneousDesc=Тук са дефинирани всички параметри, свързани със сигурността. -LimitsSetup=Граници / Прецизно настройване +LimitsSetup=Граници / Прецизна настройка LimitsDesc=Тук може да дефинирате ограничения използвани от Dolibarr за по-голяма прецизност и оптимизация MAIN_MAX_DECIMALS_UNIT=Максимален брой десетични знаци за единични цени MAIN_MAX_DECIMALS_TOT=Максимален брой десетични знаци за общи суми MAIN_MAX_DECIMALS_SHOWN=Максимален брой десетични знаци за цени, показани на екрана. Добавете многоточие ... след този параметър (напр. 2...), ако искате да видите "..." суфикс след съкратената (закръглена) цена. MAIN_ROUNDING_RULE_TOT=Диапазон на закръгляване (за страни, в които закръгляването се извършва на нещо различно от стандартното 10. Например поставете 0.05, ако закръгляването се извършва с 0.05 стъпки) -UnitPriceOfProduct=Нетен единичната цена на даден продукт +UnitPriceOfProduct=Нетна единична цена на продукт TotalPriceAfterRounding=Обща цена (без ДДС / ДДС / с ДДС) след закръгляване -ParameterActiveForNextInputOnly=Параметър ефективно само за следващия вход +ParameterActiveForNextInputOnly=Параметърът е ефективен само за следващия вход NoEventOrNoAuditSetup=Не е регистрирано събитие свързано със сигурността. Това е нормално, ако проверката не е активирана в страницата "Настройки - Сигурност - Събития". NoEventFoundWithCriteria=Не е намерено събитие свързано със сигурността по тези параметри за търсене. -SeeLocalSendMailSetup=Вижте настройка Sendmail +SeeLocalSendMailSetup=Вижте локалната си настройка за Sendmail BackupDesc=Пълното архивиране на Dolibarr инсталация се извършва в две стъпки. BackupDesc2=Архивиране на съдържанието в директорията "documents" (%s), съдържаща всички ръчно добавени и генерирани файлове. Това също така ще включва всички архивирани файлове, генерирани в Стъпка 1. BackupDesc3=Архивиране на структурата и съдържанието на база данни (%s) в архивен файл. За тази цел може да използвате следния асистент. BackupDescX=Архивиращата директория трябва да се съхранява на сигурно място. -BackupDescY=Генерирания дъмп файл трябва да се съхранява на сигурно място. +BackupDescY=Генерираният дъмп файл трябва да се съхранява на сигурно място. BackupPHPWarning=Архивирането не може да бъде гарантирано с този метод. Препоръчва се предходният. RestoreDesc=Възстановяването на Dolibarr от архивно копие се извършва в две стъпки. RestoreDesc2=Възстановете от архивният файл (например zip файл) директорията "documents" в нова Dolibarr инсталация или в "documents" директорията на текущата инсталация (%s). RestoreDesc3=Възстановете структурата на базата данни и данните от архивния файл в базата данни на новата Dolibarr инсталация или в базата данни (%s) на настоящата инсталация. Внимание, след като възстановяването приключи, трябва да използвате потребителско име и парола, които са били налични по време на архивирането / инсталацията, за да се свържете отново.
За да възстановите архивирана база данни в тази текущата инсталация, може да използвате следния асистент. -RestoreMySQL=MySQL внос -ForcedToByAModule= Това правило е принуден да %s от активиран модул +RestoreMySQL=Импортиране на MySQL +ForcedToByAModule= Това правило е принудено да %s, чрез активиран модул PreviousDumpFiles=Съществуващи архивни файлове WeekStartOnDay=Първи ден от седмицата RunningUpdateProcessMayBeRequired=Актуализацията изглежда задължителна (версията на програмата %s се различава от версията на базата данни %s) -YouMustRunCommandFromCommandLineAfterLoginToUser=Трябва да изпълните тази команда от командния ред след влизане на черупката с потребителски %s или трябва да добавите опцията-W в края на командния ред, за да предоставят %s парола. -YourPHPDoesNotHaveSSLSupport=SSL функции не са налични във вашата PHP +YouMustRunCommandFromCommandLineAfterLoginToUser=Трябва да изпълните тази команда от командния ред след влизане в shell с потребител %s или трябва да добавите опция -W в края на командния ред, за да се предостави %s парола. +YourPHPDoesNotHaveSSLSupport=SSL функциите не са налични във вашия PHP DownloadMoreSkins=Изтегляне на повече теми SimpleNumRefModelDesc=Връща референтен номер във формат %syymm-nnnn, където yy е година, mm е месец и nnnn е последователност от номера без връщане към нула ShowProfIdInAddress=Показване на идентификационни данни в полетата с адреси @@ -1166,7 +1169,7 @@ MeteoStdModEnabled=Стандартният режим е активиран MeteoPercentageMod=Процентен режим MeteoPercentageModEnabled=Процентният режим е активиран MeteoUseMod=Кликнете, за да използвате %s -TestLoginToAPI=Тествайте влезете в API +TestLoginToAPI=Тест за вход в API ProxyDesc=Някои функции на Dolibarr изискват достъп до интернет. Определете тук параметрите на интернет връзката за достъп през прокси сървър, ако е необходимо. ExternalAccess=Външен / Интернет достъп MAIN_PROXY_USE=Използване на прокси сървър (в противен случай достъпът към интернет е директен) @@ -1176,23 +1179,23 @@ MAIN_PROXY_USER=Прокси сървър: Потребител MAIN_PROXY_PASS=Прокси сървър: Парола DefineHereComplementaryAttributes=Определете тук всички допълнителни / персонализирани атрибути, които искате да бъдат включени за: %s ExtraFields=Допълнителни атрибути -ExtraFieldsLines=Complementary attributes (lines) +ExtraFieldsLines=Допълнителни атрибути (редове) ExtraFieldsLinesRec=Допълнителни атрибути (шаблонни редове на фактури) -ExtraFieldsSupplierOrdersLines=Complementary attributes (order lines) -ExtraFieldsSupplierInvoicesLines=Complementary attributes (invoice lines) +ExtraFieldsSupplierOrdersLines=Допълнителни атрибути (редове в поръчки за покупка) +ExtraFieldsSupplierInvoicesLines=Допълнителни атрибути (редове във фактури за покупка) ExtraFieldsThirdParties=Допълнителни атрибути (контрагенти) ExtraFieldsContacts=Допълнителни атрибути (контакти / адреси) -ExtraFieldsMember=Complementary attributes (member) -ExtraFieldsMemberType=Complementary attributes (member type) -ExtraFieldsCustomerInvoices=Complementary attributes (invoices) +ExtraFieldsMember=Допълнителни атрибути (член) +ExtraFieldsMemberType=Допълнителни атрибути (тип член) +ExtraFieldsCustomerInvoices=Допълнителни атрибути (фактури за продажба) ExtraFieldsCustomerInvoicesRec=Допълнителни атрибути (шаблони на фактури) -ExtraFieldsSupplierOrders=Complementary attributes (orders) -ExtraFieldsSupplierInvoices=Complementary attributes (invoices) -ExtraFieldsProject=Complementary attributes (projects) -ExtraFieldsProjectTask=Complementary attributes (tasks) -ExtraFieldHasWrongValue=Attribute %s has a wrong value. -AlphaNumOnlyLowerCharsAndNoSpace=only alphanumericals and lower case characters without space -SendmailOptionNotComplete=Внимание, на някои системи Linux, за да изпратите имейл от електронната си поща, Sendmail изпълнение настройка трябва conatins опция-ба (параметър mail.force_extra_parameters във вашия php.ini файл). Ако някои получатели никога не получават имейли, опитайте се да редактирате тази PHP параметър с mail.force_extra_parameters = ба). +ExtraFieldsSupplierOrders=Допълнителни атрибути (поръчки за покупка) +ExtraFieldsSupplierInvoices=Допълнителни атрибути (фактури за покупка) +ExtraFieldsProject=Допълнителни атрибути (проекти) +ExtraFieldsProjectTask=Допълнителни атрибути (задачи) +ExtraFieldHasWrongValue=Атрибут %s има грешна стойност. +AlphaNumOnlyLowerCharsAndNoSpace=само буквено-цифрови символи с малки букви без интервал +SendmailOptionNotComplete=Внимание, в някои Linux системи, за да изпращате имейли от вашият имейл, в настройката на Sendmail трябва да имате опция -ba (параметър mail.force_extra_parameters във вашия php.ini файл). Ако някои получатели никога не получават имейли, опитайте да промените този PHP параметър на mail.force_extra_parameters = -ba). PathToDocuments=Път до документи PathDirectory=Директория SendmailOptionMayHurtBuggedMTA=Функцията за изпращане на имейли, чрез метода "PHP mail direct" ще генерира имейл съобщение, което може да не бъде правилно анализирано от някои пощенски сървъри за входяща поща. Резултатът ще бъде, че някои писма няма да бъдат прочетени от хората, хоствани на тези подслушвани платформи. Такъв е случаят с някои интернет доставчици (напр. Orange във Франция). Това не е проблем с Dolibarr или PHP, а с пощенския сървър за входяща поща. Може обаче да добавите опция MAIN_FIX_FOR_BUGGED_MTA със стойност "1" в Настройки - Други настройки, за да промените и избегнете това в Dolibarr. Възможно е обаче да имате проблеми с други сървъри, които стриктно използват SMTP стандарта. Другото (препоръчително) решение е да се използва методът "SMTP socket library", който няма недостатъци. @@ -1209,42 +1212,42 @@ NewTranslationStringToShow=Нов преводен низ, който да се OriginalValueWas=Оригиналния превод е презаписан. Първоначалната стойност е:

%s TransKeyWithoutOriginalValue=Наложихте нов превод за ключа за превод "%s", който не съществува в нито един от езиковите файлове TotalNumberOfActivatedModules=Активирани приложения / модули: %s / %s -YouMustEnableOneModule=Трябва да даде възможност на най-малко 1 модул +YouMustEnableOneModule=Трябва да активирате поне 1 модул ClassNotFoundIntoPathWarning=Не е намерен клас %s в описания PHP път -YesInSummer=Yes in summer +YesInSummer=Да през лятото OnlyFollowingModulesAreOpenedToExternalUsers=Забележка: Само следните модули са достъпни за външни потребители (независимо от правата им), ако са им предоставени съответните права.
-SuhosinSessionEncrypt=Session storage encrypted by Suhosin -ConditionIsCurrently=Condition is currently %s +SuhosinSessionEncrypt=Съхраняването на сесии е кодирано от Suhosin +ConditionIsCurrently=Понастоящем състоянието е %s YouUseBestDriver=Използвате драйвер %s, който е най-добрият драйвер в момента. YouDoNotUseBestDriver=Използвате драйвер %s, но драйвер %s е препоръчителен. NbOfProductIsLowerThanNoPb=Вие имате само %s продукти / услуги в базата данни. Това не изисква специално оптимизиране. -SearchOptim=Search optimization +SearchOptim=Оптимизация на търсене YouHaveXProductUseSearchOptim=В базата данни имате %s продукти. Трябва да добавите константата PRODUCT_DONOTSEARCH_ANYWHERE със стойност "1" в страницата Начало - Настройки - Други настройки. Ограничете търсенето до началото на низове, което позволява базата данни да използва индекси, а вие да получите незабавен отговор. BrowserIsOK=Използвате уеб браузъра %s. Този браузър е добър от гледна точка на сигурност и производителност. BrowserIsKO=Използвате уеб браузъра %s. Известно е, че този браузър е лош избор от гледна точка на сигурност, производителност и надеждност. Препоръчително е да използвате Firefox, Chrome, Opera или Safari. -XDebugInstalled=XDebug is loaded. -XCacheInstalled=XCache is loaded. +XDebugInstalled=XDebug е зареден. +XCacheInstalled=XCache е зареден. AddRefInList=Показване на кода на клиента / доставчика в списъка (select list или combobox) и повечето от хипервръзките.
Контрагентите ще се появят с формат на името "CC12345 - SC45678 - Голяма фирма ЕООД", вместо "Голяма фирма ЕООД" AddAdressInList=Показване на списъка с информация за адреса на клиента / доставчика (изборен списък или комбиниран списък).
Контрагентите ще се появят с формат на името на "Голяма фирма ЕООД - ул. Първа № 2 П. код Град - България, вместо "Голяма фирма ЕООД" AskForPreferredShippingMethod=Запитване към контрагенти за предпочитан начин на доставка -FieldEdition=Edition of field %s -FillThisOnlyIfRequired=Example: +2 (fill only if timezone offset problems are experienced) -GetBarCode=Get barcode +FieldEdition=Издание на поле %s +FillThisOnlyIfRequired=Пример: +2 (попълнете само ако има проблеми с компенсирането на часовата зона) +GetBarCode=Получаване на баркод ##### Module password generation -PasswordGenerationStandard=Върнете парола, генерирана в съответствие с вътрешен алгоритъм Dolibarr: 8 символа, съдържащи общи цифри и символи с малки. +PasswordGenerationStandard=Връщане на парола, генерирана според вътрешния Dolibarr алгоритъм: 8 символа, съдържащи споделени числа и символи с малки букви PasswordGenerationNone=Да не се предлага генерирана парола. Паролата трябва да бъде въведена ръчно. -PasswordGenerationPerso=Връщане на парола съответно вашата лично определена конфигурация. -SetupPerso=Съответно по вашата конфигурация +PasswordGenerationPerso=Връщане на парола според вашата лично дефинирана конфигурация +SetupPerso=Според вашата конфигурация PasswordPatternDesc=Описание на модел за парола ##### Users setup ##### RuleForGeneratedPasswords=Правила за генериране и валидиране на пароли DisableForgetPasswordLinkOnLogonPage=Да не се показва връзката "Забравена парола" на страницата за вход -UsersSetup=Потребители модул за настройка +UsersSetup=Настройка на модула за потребители UserMailRequired=Необходим е имейл при създаване на нов потребител ##### HRM setup ##### HRMSetup=Настройка на модула ЧР ##### Company setup ##### -CompanySetup=Фирми модул за настройка +CompanySetup=Настройка на модула за фирми CompanyCodeChecker=Опции за автоматично генериране на кодове на клиент / доставчик AccountCodeManager=Опции за автоматично генериране на счетоводни кодове на клиент / доставчик NotificationsDesc=Автоматично изпращане на имейл известия за някои събития в Dolibarr.
Получателите на известия могат да бъдат дефинирани: @@ -1253,8 +1256,8 @@ NotificationsDescContact=* за контакти на контрагенти (к NotificationsDescGlobal=* или чрез задаване на глобални имейл адреси в тази страница за настройка. ModelModules=Шаблони за документи DocumentModelOdt=Генериране на документи от шаблоните на OpenDocument (файлове .ODT / .ODS от LibreOffice, OpenOffice, KOffice, TextEdit, ...) -WatermarkOnDraft=Воден знак върху проект на документ -JSOnPaimentBill=Activate feature to autofill payment lines on payment form +WatermarkOnDraft=Воден знак върху чернова на документ +JSOnPaimentBill=Активиране на функция за автоматично попълване на платежни редове в платежния формуляр CompanyIdProfChecker=Правила за идентификационните данни (проф. IDs) MustBeUnique=Трябва да е уникално? MustBeMandatory=Задължително при създаване на контрагенти (ако ДДС номера или вида на фирмата са определени)? @@ -1264,30 +1267,30 @@ TechnicalServicesProvided=Предоставени технически услу WebDAVSetupDesc=Това е връзката за достъп до WebDAV директорията. Тя съдържа „публична“ директория, отворена за всеки потребител, който знае URL адреса (ако е разрешен достъпът до публичната директория) и „лична“ директория, която изисква съществуващо потребителско име и парола за достъп. WebDavServer=Основен URL адрес на %s сървъра: %s ##### Webcal setup ##### -WebCalUrlForVCalExport=За износ на линк към %s формат е на разположение на следния линк: %s +WebCalUrlForVCalExport=Връзка за експортиране към %s формат може да намерите на следния адрес: %s ##### Invoices ##### -BillsSetup=Фактури модул за настройка -BillsNumberingModule=Фактури и кредитни известия, номериране модул -BillsPDFModules=Фактура модели документи +BillsSetup=Настройка на модула за фактури +BillsNumberingModule=Модел за номериране на фактури и кредитни известия +BillsPDFModules=Модели на документи за фактури BillsPDFModulesAccordindToInvoiceType=Модели на фактури в зависимост от вида на фактурата PaymentsPDFModules=Модели на платежни документи -ForceInvoiceDate=Принудително датата на фактурата датата на валидиране -SuggestedPaymentModesIfNotDefinedInInvoice=Предложени плащания режим на фактура по подразбиране, ако не са определени за фактура +ForceInvoiceDate=Принуждаване на датата на фактурата да се синхронизира с датата на валидиране +SuggestedPaymentModesIfNotDefinedInInvoice=Предлагане на плащания по подразбиране, ако не са определени такива във фактурата SuggestPaymentByRIBOnAccount=Да се предлага плащане по сметка SuggestPaymentByChequeToAddress=Да се предлага плащане с чек -FreeLegalTextOnInvoices=Свободен текст на фактури -WatermarkOnDraftInvoices=Watermark on draft invoices (none if empty) -PaymentsNumberingModule=Модел на номериране на плащания +FreeLegalTextOnInvoices=Свободен текст във фактури +WatermarkOnDraftInvoices=Воден знак върху чернови фактури (няма, ако е празно) +PaymentsNumberingModule=Модел за номериране на плащания SuppliersPayment=Плащания към доставчици SupplierPaymentSetup=Настройка на плащания към доставчици ##### Proposals ##### -PropalSetup=Модул за настройка на търговски предложения -ProposalsNumberingModules=Търговско предложение за номериране на модули -ProposalsPDFModules=Търговски предложение документи модели +PropalSetup=Настройка на модула за търговски предложения +ProposalsNumberingModules=Модели за номериране на търговски предложения +ProposalsPDFModules=Модели на документи за търговски предложения SuggestedPaymentModesIfNotDefinedInProposal=Препоръчителен вид плащане по търговско предложение по подразбиране, ако не е определен -FreeLegalTextOnProposal=Свободен текст на търговски предложения -WatermarkOnDraftProposal=Watermark on draft commercial proposals (none if empty) -BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL=Ask for bank account destination of proposal +FreeLegalTextOnProposal=Свободен текст в търговски предложения +WatermarkOnDraftProposal=Воден знак върху черновите търговски предложения (няма, ако е празно) +BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL=Питане за данни на банкова сметка в търговски предложения ##### SupplierProposal ##### SupplierProposalSetup=Настройка на модул Запитвания към доставчици SupplierProposalNumberingModules=Модели за номериране на запитвания към доставчици @@ -1295,121 +1298,121 @@ SupplierProposalPDFModules=Модели за документи на запит FreeLegalTextOnSupplierProposal=Свободен текст в запитвания към доставчици WatermarkOnDraftSupplierProposal=Воден знак върху черновите запитвания към доставчици (няма, ако празно) BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_PROPOSAL=Да се пита за детайли на банковата сметка в запитванията към доставчици -WAREHOUSE_ASK_WAREHOUSE_DURING_ORDER=Питане за Складов източник за поръчка +WAREHOUSE_ASK_WAREHOUSE_DURING_ORDER=Питане за изходен склад в поръчки ##### Suppliers Orders ##### BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_ORDER=Да се пита за детайли на банковата сметка в поръчките за покупка ##### Orders ##### OrdersSetup=Настройка на модул Поръчки за продажба -OrdersNumberingModules=Поръчки номериране модули -OrdersModelModule=Поръчка документи модели -FreeLegalTextOnOrders=Свободен текст на поръчки -WatermarkOnDraftOrders=Watermark on draft orders (none if empty) -ShippableOrderIconInList=Add an icon in Orders list which indicate if order is shippable -BANK_ASK_PAYMENT_BANK_DURING_ORDER=Ask for bank account destination of order +OrdersNumberingModules=Модели за номериране на поръчки +OrdersModelModule=Модели на документи за поръчка +FreeLegalTextOnOrders=Свободен текст в поръчки +WatermarkOnDraftOrders=Воден знак върху чернови поръчки (няма, ако е празно) +ShippableOrderIconInList=Добавяне на икона в списъка с поръчки, която показва дали поръчката може да се изпрати +BANK_ASK_PAYMENT_BANK_DURING_ORDER=Питане за данни на банкова сметка в поръчки ##### Interventions ##### -InterventionsSetup=Интервенциите модул за настройка -FreeLegalTextOnInterventions=Свободен текст на интервенционни документи -FicheinterNumberingModules=Модули за намеса номериране -TemplatePDFInterventions=Намеса карти документи модели -WatermarkOnDraftInterventionCards=Watermark on intervention card documents (none if empty) +InterventionsSetup=Настройка на модула за интервенции +FreeLegalTextOnInterventions=Свободен текст в интервенции +FicheinterNumberingModules=Модели за номериране на интервенции +TemplatePDFInterventions=Модели на документи за интервенции +WatermarkOnDraftInterventionCards=Воден знак върху интервенции (няма, ако е празно) ##### Contracts ##### -ContractsSetup=Contracts/Subscriptions module setup -ContractsNumberingModules=Договори за номериране модули -TemplatePDFContracts=Contracts documents models -FreeLegalTextOnContracts=Free text on contracts -WatermarkOnDraftContractCards=Watermark on draft contracts (none if empty) +ContractsSetup=Настройка на модула за договори / абонаменти +ContractsNumberingModules=Модели за номериране на договори +TemplatePDFContracts=Модели на документи за договори +FreeLegalTextOnContracts=Свободен текст в договори +WatermarkOnDraftContractCards=Воден знак върху чернови договори (няма, ако е празно) ##### Members ##### -MembersSetup=Потребители модул за настройка +MembersSetup=Настройка на модула за членове MemberMainOptions=Основни параметри -AdherentLoginRequired= Управление на Login за всеки член +AdherentLoginRequired= Управление на входни данни за всеки член AdherentMailRequired=Необходим е имейл при създаване на нов член -MemberSendInformationByMailByDefault=Checkbox да изпрати потвърждение поща на членовете (валидиране или нов абонамент) е включена по подразбиране +MemberSendInformationByMailByDefault=По подразбиране е активирано изпращането на потвърждение, чрез имейл до членове (валидиране или нов абонамент) VisitorCanChooseItsPaymentMode=Посетителят може да избира от наличните начини на плащане MEMBER_REMINDER_EMAIL=Активиране на автоматично напомняне, чрез имейл за изтекли абонаменти. Забележка: Модул %s трябва да е активиран и правилно настроен за изпращане на напомняния. ##### LDAP setup ##### -LDAPSetup=LDAP Setup +LDAPSetup=Настройка на LDAP LDAPGlobalParameters=Глобални параметри LDAPUsersSynchro=Потребители LDAPGroupsSynchro=Групи LDAPContactsSynchro=Контакти -LDAPMembersSynchro=Потребители +LDAPMembersSynchro=Членове LDAPMembersTypesSynchro=Видове членове -LDAPSynchronization=LDAP синхронизация -LDAPFunctionsNotAvailableOnPHP=LDAP функции не са налични на вашия PHP +LDAPSynchronization=Синхронизация на LDAP +LDAPFunctionsNotAvailableOnPHP=LDAP функциите не са достъпни за вашия PHP LDAPToDolibarr=LDAP -> Dolibarr DolibarrToLDAP=Dolibarr -> LDAP -LDAPNamingAttribute=Въведете LDAP -LDAPSynchronizeUsers=Организацията на потребителите в LDAP +LDAPNamingAttribute=Ключ в LDAP +LDAPSynchronizeUsers=Организиране на потребители в LDAP LDAPSynchronizeGroups=Организиране на групи в LDAP LDAPSynchronizeContacts=Организиране на контакти в LDAP -LDAPSynchronizeMembers=Организация на членовете на организацията в LDAP +LDAPSynchronizeMembers=Организиране на членове на организацията в LDAP LDAPSynchronizeMembersTypes=Организация на видовете членове на фондацията в LDAP -LDAPPrimaryServer=Основно сървъра -LDAPSecondaryServer=Средно сървъра -LDAPServerPort=Порта на сървъра +LDAPPrimaryServer=Основен сървър +LDAPSecondaryServer=Вторичен сървър +LDAPServerPort=Порт на сървъра LDAPServerPortExample=Порт по подразбиране: 389 -LDAPServerProtocolVersion=Протокол версия +LDAPServerProtocolVersion=Версия на протокола LDAPServerUseTLS=Използване на TLS -LDAPServerUseTLSExample=LDAP сървъра използване TLS -LDAPServerDn=Сървър DN -LDAPAdminDn=Administrator DN +LDAPServerUseTLSExample=Вашият LDAP сървър използва TLS +LDAPServerDn=DN на сървър +LDAPAdminDn=DN на администратор LDAPAdminDnExample=Пълна DN (напр. cn = admin, dc = example, dc = com или cn = Administrator, cn = Users, dc = example, dc = com за активна директория) -LDAPPassword=Администраторската парола -LDAPUserDn=Потребителя DN -LDAPUserDnExample=Пълна DN (EX: OU = потребители, DC = общество, DC = COM) -LDAPGroupDn=Групи "DN -LDAPGroupDnExample=Пълна DN (: ОУ = групи, DC = общество, DC = COM) -LDAPServerExample=Адрес на сървъра (например: Localhost, 192.168.0.2, ldaps :/ / ldap.example.com /) -LDAPServerDnExample=Пълна DN (: DC = компания, DC = COM) +LDAPPassword=Парола на администратор +LDAPUserDn=DN на потребители +LDAPUserDnExample=Цялостен DN (например: ou=users, dc=example, dc=com) +LDAPGroupDn=DN на групи +LDAPGroupDnExample=Цялостен DN (например: ou=groups, dc=example, dc=com) +LDAPServerExample=Адрес на сървъра (например: localhost, 192.168.0.2, ldaps://ldap.example.com/) +LDAPServerDnExample=Цялостен DN (например: dc=example, dc=com) LDAPDnSynchroActive=Потребители и групи синхронизация -LDAPDnSynchroActiveExample=LDAP Dolibarr или Dolibarr LDAP синхронизация -LDAPDnContactActive=Контакти "синхронизация -LDAPDnContactActiveExample=Активира / Неактивирани синхронизация -LDAPDnMemberActive=Членовете синхронизация -LDAPDnMemberActiveExample=Активира / Неактивирани синхронизация +LDAPDnSynchroActiveExample=LDAP към Dolibarr или Dolibarr към LDAP синхронизация +LDAPDnContactActive=Синхронизация на контакти +LDAPDnContactActiveExample=Активирана / Неактивирана синхронизация +LDAPDnMemberActive=Синхронизация на членове +LDAPDnMemberActiveExample=Активирана / Неактивирана синхронизация LDAPDnMemberTypeActive=Синхронизиране на видове членове LDAPDnMemberTypeActiveExample=Активирана / Неактивирана синхронизация -LDAPContactDn=Dolibarr контакти "DN -LDAPContactDnExample=Пълна DN (бивши: ОУ = контакти, DC = общество, DC = COM) -LDAPMemberDn=Dolibarr членове DN -LDAPMemberDnExample=Пълна DN (EX: OU = потребители, DC = общество, DC = COM) -LDAPMemberObjectClassList=Списък на objectClass -LDAPMemberObjectClassListExample=Списък на атрибути за определяне на objectClass рекордни (напр. върха, inetOrgPerson или отгоре, ръководство за активна директория) +LDAPContactDn=DN на контакти от Dolibarr +LDAPContactDnExample=Цялостен DN (например: ou=contacts, dc=example, dc=com) +LDAPMemberDn=DN на членове от Dolibarr +LDAPMemberDnExample=Цялостен DN (например: ou=members, dc=example, dc=com) +LDAPMemberObjectClassList=Списък на objectClass за членове +LDAPMemberObjectClassListExample=Списък на objectClass определящи атрибути на запис (например: top, inetOrgPerson или top, user за активна директория) LDAPMemberTypeDn=Dolibarr видове членове DN LDAPMemberTypepDnExample=Пълна DN (напр. ou = memberstypes, dc = example, dc = com) LDAPMemberTypeObjectClassList=Списък на objectClass LDAPMemberTypeObjectClassListExample=Списък на objectClass определящи атрибути на запис (напр. top, groupOfUniqueNames) -LDAPUserObjectClassList=Списък на objectClass -LDAPUserObjectClassListExample=Списък на атрибути за определяне на objectClass рекордни (напр. върха, inetOrgPerson или отгоре, ръководство за активна директория) -LDAPGroupObjectClassList=Списък на objectClass -LDAPGroupObjectClassListExample=Списък на атрибути за определяне на objectClass рекордни (: отгоре, groupOfUniqueNames) -LDAPContactObjectClassList=Списък на objectClass -LDAPContactObjectClassListExample=Списък на атрибути за определяне на objectClass рекордни (напр. върха, inetOrgPerson или отгоре, ръководство за активна директория) -LDAPTestConnect=Тествайте LDAP връзка -LDAPTestSynchroContact=Тест за синхронизация на контактите -LDAPTestSynchroUser=Синхронизация тест на потребителя -LDAPTestSynchroGroup=Синхронизация Test група -LDAPTestSynchroMember=Член на синхронизация Test +LDAPUserObjectClassList=Списък на objectClass за потребители +LDAPUserObjectClassListExample=Списък на objectClass определящи атрибути на запис (например: top, inetOrgPerson или top, user за активна директория) +LDAPGroupObjectClassList=Списък на objectClass за групи +LDAPGroupObjectClassListExample=Списък на objectClass определящи атрибути на запис (например: top, groupOfUniqueNames) +LDAPContactObjectClassList=Списък на objectClass за контакти +LDAPContactObjectClassListExample=Списък на objectClass определящи атрибути на запис (например: top, inetOrgPerson или top, user за активна директория) +LDAPTestConnect=Тестово свързване с LDAP +LDAPTestSynchroContact=Тестово синхронизиране на контакти +LDAPTestSynchroUser=Тестово синхронизиране на потребители +LDAPTestSynchroGroup=Тестово синхронизиране на групи +LDAPTestSynchroMember=Тестово синхронизиране на членове LDAPTestSynchroMemberType=Тест за синхронизиране на вид член -LDAPTestSearch= Test a LDAP search -LDAPSynchroOK=Синхронизация тест успешно -LDAPSynchroKO=Неуспешно синхронизиране тест +LDAPTestSearch= Тестово търсене в LDAP +LDAPSynchroOK=Тестът за синхронизация е успешен +LDAPSynchroKO=Неуспешен тест за синхронизация LDAPSynchroKOMayBePermissions=Неуспешен тест за синхронизация. Проверете дали връзката към сървъра е правилно конфигурирана и позволява актуализации на LDAP -LDAPTCPConnectOK=TCP свърже с LDAP сървъра успешни (сървър = %s, Порт = %s) -LDAPTCPConnectKO=TCP се свърже с LDAP сървъра не успя (Server = %s, Port = %s) +LDAPTCPConnectOK=Успешното свързване на TCP към LDAP сървъра (Сървър = %s, Порт = %s) +LDAPTCPConnectKO=Неуспешно свързване на TCP към LDAP сървър (Сървър = %s, Порт = %s) LDAPBindOK=Свързването / удостоверяване с LDAP сървъра е успешно (Сървър = %s, Порт = %s, Администратор = %s, Парола = %s) LDAPBindKO=Свързването / удостоверяването с LDAP сървъра е неуспешно (Сървър = %s, Порт = %s, Администратор = %s, Парола = %s) LDAPSetupForVersion3=LDAP сървър, конфигуриран за версия 3 LDAPSetupForVersion2=LDAP сървър, конфигуриран за версия 2 -LDAPDolibarrMapping=Dolibarr Mapping -LDAPLdapMapping=LDAP Mapping -LDAPFieldLoginUnix=Вход (UNIX) +LDAPDolibarrMapping=Съпоставяне в Dolibarr +LDAPLdapMapping=Съпоставяне в LDAP +LDAPFieldLoginUnix=Входни данни (unix) LDAPFieldLoginExample=Пример: uid -LDAPFilterConnection=Търсене филтър +LDAPFilterConnection=Филтър за търсене LDAPFilterConnectionExample=Пример: &(objectClass=inetOrgPerson) -LDAPFieldLoginSamba=Вход (самба, activedirectory) +LDAPFieldLoginSamba=Входни данни (samba, activedirectory) LDAPFieldLoginSambaExample=Пример: СамбаПотребителскоИме -LDAPFieldFullname=Пълното име +LDAPFieldFullname=Пълно име LDAPFieldFullnameExample=Пример: cn LDAPFieldPasswordNotCrypted=Паролата не е криптирана LDAPFieldPasswordCrypted=Паролата е криптирана @@ -1421,64 +1424,64 @@ LDAPFieldFirstName=Собствено име LDAPFieldFirstNameExample=Пример: СобственоИме LDAPFieldMail=Имейл адрес LDAPFieldMailExample=Пример: ИмейлАдрес -LDAPFieldPhone=Професионален телефонен номер +LDAPFieldPhone=Служебен телефонен номер LDAPFieldPhoneExample=Пример: ТелефоненНомер LDAPFieldHomePhone=Личен телефонен номер LDAPFieldHomePhoneExample=Пример: ДомашенНомер -LDAPFieldMobile=Мобилен телефон +LDAPFieldMobile=Мобилен номер LDAPFieldMobileExample=Пример: МобиленНомер LDAPFieldFax=Номер на факс LDAPFieldFaxExample=Пример: ФаксНомер LDAPFieldAddress=Улица LDAPFieldAddressExample=Пример: Улица -LDAPFieldZip=Цип +LDAPFieldZip=Пощенски код LDAPFieldZipExample=Пример: ПощенскиКод LDAPFieldTown=Град LDAPFieldTownExample=Пример: Град LDAPFieldCountry=Държава LDAPFieldDescription=Описание LDAPFieldDescriptionExample=Пример: Описание -LDAPFieldNotePublic=Public Note +LDAPFieldNotePublic=Публична бележка LDAPFieldNotePublicExample=Пример: ПубличнаБележка -LDAPFieldGroupMembers= Членовете на групата +LDAPFieldGroupMembers= Членове на групата LDAPFieldGroupMembersExample= Пример: УникаленЧлен LDAPFieldBirthdate=Рождена дата LDAPFieldCompany=Фирма LDAPFieldCompanyExample=Пример: Фирма LDAPFieldSid=SID LDAPFieldSidExample=Пример: objectsid -LDAPFieldEndLastSubscription=Дата на абонамент края +LDAPFieldEndLastSubscription=Дата на приключване на абонамента LDAPFieldTitle=Длъжност -LDAPFieldTitleExample=Example: title -LDAPSetupNotComplete=LDAP настройка не е пълна (отидете на други раздели) -LDAPNoUserOrPasswordProvidedAccessIsReadOnly=Не администратор или парола. LDAP достъп ще бъдат анонимни и в режим само за четене. -LDAPDescContact=Тази страница ви позволява да дефинирате LDAP атрибути име в LDAP дърво за всеки намерени данни за контактите на Dolibarr. -LDAPDescUsers=Тази страница ви позволява да дефинирате LDAP атрибути име в LDAP дърво за всеки намерени данни на потребителите Dolibarr. -LDAPDescGroups=Тази страница ви позволява да дефинирате LDAP атрибути име в LDAP дърво за всеки данни, намиращи се на групи Dolibarr. -LDAPDescMembers=Тази страница ви позволява да дефинирате LDAP атрибути име в LDAP дърво за всеки намерени данни на Dolibarr членове модул. +LDAPFieldTitleExample=Пример: титла +LDAPSetupNotComplete=Настройката за LDAP не е завършена (преминете през другите раздели) +LDAPNoUserOrPasswordProvidedAccessIsReadOnly=Не е предоставен администратор или парола. LDAP достъпът ще бъде анонимен и в режим само за четене. +LDAPDescContact=Тази страница позволява да се дефинира името на LDAP атрибути в LDAP дървото за всички данни намерени за Dolibarr контакти. +LDAPDescUsers=Тази страница позволява да се дефинира името на LDAP атрибути в LDAP дървото за всички данни намерени в Dolibarr потребители. +LDAPDescGroups=Тази страница позволява да се дефинира името на LDAP атрибути в LDAP дървото за всички данни намерени в Dolibarr групи. +LDAPDescMembers=Тази страница позволява да се дефинира името на LDAP атрибути в LDAP дървото за всички данни, намерени в Dolibarr членове. LDAPDescMembersTypes=Тази страница ви позволява да дефинирате името на LDAP атрибутите в LDAP дърво за всяка информация, намерена във видовете членове в Dolibarr. -LDAPDescValues=Примерни стойности са предназначени за OpenLDAP със следните заредени схеми: core.schema, cosine.schema, inetorgperson.schema). Ако използвате thoose ценности и OpenLDAP, променете LDAP slapd.conf конфигурационен файл, за да има всички thoose схеми натоварени. -ForANonAnonymousAccess=За заверено достъп (достъп за писане например) -PerfDolibarr=Performance setup/optimizing report +LDAPDescValues=Примерните стойности са предназначени за OpenLDAP със следните заредени схеми: core.schema, cosine.schema, inetorgperson.schema ). Ако използвате тези стойности и OpenLDAP, променете вашия LDAP конфигурационен файл slapd.conf, за да бъдат заредени всички тези схеми. +ForANonAnonymousAccess=За удостоверен достъп (например за достъп за писане) +PerfDolibarr=Настройка за производителност / отчет за оптимизация YouMayFindPerfAdviceHere=Тази страница предоставя някои проверки или съвети, свързани с производителността. NotInstalled=Не е инсталирано, така че вашият сървър не се забавя от това. -ApplicativeCache=Applicative cache -MemcachedNotAvailable=No applicative cache found. You can enhance performance by installing a cache server Memcached and a module able to use this cache server.
More information here http://wiki.dolibarr.org/index.php/Module_MemCached_EN.
Note that a lot of web hosting provider does not provide such cache server. -MemcachedModuleAvailableButNotSetup=Module memcached for applicative cache found but setup of module is not complete. -MemcachedAvailableAndSetup=Module memcached dedicated to use memcached server is enabled. -OPCodeCache=OPCode cache +ApplicativeCache=Приложим кеш +MemcachedNotAvailable=Не е намерен приложим кеш. Може да подобрите производителността, чрез инсталиране на кеш сървър Memcached и модул, който може да използва този кеш сървър.
Повече информация може да откриете тук http://wiki.dolibarr.org/index.php/Module_MemCached_EN.
Имайте предвид, че много уеб хостинг доставчици не предоставят такъв кеш сървър. +MemcachedModuleAvailableButNotSetup=Намерен е модул Memcached за приложим кеш, но настройката на модула не е завършена. +MemcachedAvailableAndSetup=Модулът Memcached, предназначен за използване на Memcached сървър, е активиран. +OPCodeCache=OPCode кеш NoOPCodeCacheFound=Не е намерен OPCode кеш. Може би използвате OPCode кеш, различен от XCache или eAccelerator (добър) или може би нямате OPCode кеш (много лошо). -HTTPCacheStaticResources=HTTP cache for static resources (css, img, javascript) -FilesOfTypeCached=Files of type %s are cached by HTTP server -FilesOfTypeNotCached=Files of type %s are not cached by HTTP server -FilesOfTypeCompressed=Files of type %s are compressed by HTTP server -FilesOfTypeNotCompressed=Files of type %s are not compressed by HTTP server -CacheByServer=Cache by server +HTTPCacheStaticResources=HTTP кеш за статични ресурси (css, img, javascript) +FilesOfTypeCached=Файлове от тип %s се кешират от HTTP сървър +FilesOfTypeNotCached=Файлове от тип %s не се кешират от HTTP сървър +FilesOfTypeCompressed=Файлове от тип %s се компресират от HTTP сървър +FilesOfTypeNotCompressed=Файлове от тип %s не се компресират от HTTP сървър +CacheByServer=Кеш от сървъра CacheByServerDesc=Например с помощта на Apache директивата "ExpiresByType image/gif A2592000" -CacheByClient=Cache by browser -CompressionOfResources=Compression of HTTP responses +CacheByClient=Кеш от браузъра +CompressionOfResources=Компресиране на HTTP отговори CompressionOfResourcesDesc=Например с помощта на Apache директивата "AddOutputFilterByType DEFLATE" -TestNotPossibleWithCurrentBrowsers=Such an automatic detection is not possible with current browsers +TestNotPossibleWithCurrentBrowsers=Такова автоматично откриване не е възможно с настоящите браузъри DefaultValuesDesc=Тук може да дефинирате стойността по подразбиране, която искате да използвате, когато създавате нов запис заедно с филтрите по подразбиране или реда за сортиране на записите в списъка. DefaultCreateForm=Стойности по подразбиране (за използване в формуляри) DefaultSearchFilters=Филтри за търсене по подразбиране @@ -1486,158 +1489,158 @@ DefaultSortOrder=Поръчки за сортиране по подразбир DefaultFocus=Полета за фокусиране по подразбиране DefaultMandatory=Задължителни полета по подразбиране във формуляри ##### Products ##### -ProductSetup=Настройка на модул Продукти -ServiceSetup=Услуги модул за настройка -ProductServiceSetup=Продукти и услуги модули за настройка +ProductSetup=Настройка на модулa за продукти +ServiceSetup=Настройка на модулa за услуги +ProductServiceSetup=Настройка на модула за продукти и услуги NumberOfProductShowInSelect=Максимален брой продукти за показване в комбинирани списъци за избор (0 = без ограничение) ViewProductDescInFormAbility=Показване на описанията на продуктите във формуляри (в противен случай се показват в изскачащи подсказки) -MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal +MergePropalProductCard=Активиране на опция за обединяване на продуктови PDF документи налични в секцията "Прикачени файлове и документи" в раздела "Свързани файлове" на търговско предложение, ако се продукт / услуга в предложението и модел за документи Azur ViewProductDescInThirdpartyLanguageAbility=Показване на описанията на продуктите в езика на контрагента UseSearchToSelectProductTooltip=Също така, ако имате голям брой продукти (> 100 000) може да увеличите скоростта като зададете константата PRODUCT_DONOTSEARCH_ANYWHERE да бъде със стойност "1" в Настройки - Други настройки. След това търсенето ще бъде ограничено до началото на низ. UseSearchToSelectProduct=Изчакване, докато бъде натиснат клавиш преди да се зареди съдържанието на комбинирания списък с продукти (това може да увеличи производителността, ако имате голям брой продукти, но е по-малко удобно) -SetDefaultBarcodeTypeProducts=Тип баркод по подразбиране за продукти -SetDefaultBarcodeTypeThirdParties=Тип баркод по подразбиране за контрагенти -UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition -ProductCodeChecker= Модул за генериране и проверка на кода на продукта (продукт или услуга) -ProductOtherConf= Продукт / услуга конфигурация +SetDefaultBarcodeTypeProducts=Тип баркод по подразбиране, който да се използва за продукти +SetDefaultBarcodeTypeThirdParties=Тип баркод по подразбиране, който се използва за контрагенти +UseUnits=Определете мерна единица за количество, която да се използва в поръчки, предложения или фактури +ProductCodeChecker= Модул за генериране и проверка на продуктовия код (продукт или услуга) +ProductOtherConf= Конфигуриране на продукт / услуга IsNotADir=не е директория! ##### Syslog ##### -SyslogSetup=Настройки на модул Системен дневниk -SyslogOutput=Логове изходи +SyslogSetup=Настройка на модула за отстраняване на грешки +SyslogOutput=Изходни регистри SyslogFacility=Механизъм SyslogLevel=Ниво -SyslogFilename=Име на файла и пътя -YouCanUseDOL_DATA_ROOT=Можете да използвате DOL_DATA_ROOT / dolibarr.log за лог файл в Dolibarr директория "документи". Можете да зададете различен път, за да се съхранява този файл. -ErrorUnknownSyslogConstant=Постоянни %s не е известен Syslog постоянно +SyslogFilename=Име на файла и път +YouCanUseDOL_DATA_ROOT=Може да използвате DOL_DATA_ROOT/dolibarr.log за регистрационен файл в Dolibarr "documents" директорията. Може да зададете различен път за съхранение на този файл. +ErrorUnknownSyslogConstant=Константата %s не е известна константа на Syslog OnlyWindowsLOG_USER=Windows поддържа само LOG_USER CompressSyslogs=Компресиране и архивиране на журнали за грешки (генерирани от модула Журнали за отстраняване на грешки) SyslogFileNumberOfSaves=Архивирани журнали ConfigureCleaningCronjobToSetFrequencyOfSaves=Конфигурирайте планираната задача за почистване, за да зададете честотата на архивиране на журнала ##### Donations ##### -DonationsSetup=Настройка на модул Дарение -DonationsReceiptModel=Шаблон на получаване на дарение +DonationsSetup=Настройка на модула за дарения +DonationsReceiptModel=Шаблон за получаване на дарение ##### Barcode ##### -BarcodeSetup=Настройки на модул Баркод -PaperFormatModule=Печат модул формат +BarcodeSetup=Настройка на модула за баркод +PaperFormatModule=Модул за печат BarcodeEncodeModule=Тип кодиране на баркод CodeBarGenerator=Баркод генератор -ChooseABarCode=Не е зададен генератор -FormatNotSupportedByGenerator=Format not supported by this generator -BarcodeDescEAN8=Баркод на типа EAN8 +ChooseABarCode=Не е определен генератор +FormatNotSupportedByGenerator=Форматът не се поддържа от този генератор +BarcodeDescEAN8=Баркод от тип EAN8 BarcodeDescEAN13=Баркод от тип EAN13 BarcodeDescUPC=Баркод от тип UPC BarcodeDescISBN=Баркод от тип ISBN -BarcodeDescC39=Баркод от типа С39 +BarcodeDescC39=Баркод от тип C39 BarcodeDescC128=Баркод от тип C128 BarcodeDescDATAMATRIX=Баркод от тип Datamatrix BarcodeDescQRCODE=Баркод от тип QR код -GenbarcodeLocation=Баркод генериране с инструмент от командния ред (използван от вътрешния генератор за някои видове баркод). Трябва да е съвместима с"genbarcode".
За пример: /usr/local/bin/genbarcode -BarcodeInternalEngine=Вътрешен генератор -BarCodeNumberManager=Менажер за автоматично дефиниране на баркод номера +GenbarcodeLocation=Инструмент за генериране на баркод, чрез за команден ред (използван от вътрешен механизъм за някои видове баркодове). Трябва да е съвместим с "genbarcode".
Например: /usr/local/bin/genbarcode +BarcodeInternalEngine=Вътрешен механизъм +BarCodeNumberManager=Мениджър за автоматично определяне на номерата на баркода ##### Prelevements ##### WithdrawalsSetup=Настройка на модул Директни дебитни плащания ##### ExternalRSS ##### -ExternalRSSSetup=Настройки на внасянето на външен RSS -NewRSS=Нова RSS хранилка -RSSUrl=RSS URL +ExternalRSSSetup=Настройка за импортиране на външни RSS +NewRSS=Нова RSS емисия +RSSUrl=RSS URL връзка RSSUrlExample=Интересна RSS емисия ##### Mailing ##### -MailingSetup=Настройка на модул Имейли +MailingSetup=Настройка на модула за имейл известия MailingEMailFrom=Подател на имейли (From), изпратени от модула Електронна поща MailingEMailError=Обратен имейл адрес (Errors-to) за имейли с грешки -MailingDelay=Seconds to wait after sending next message +MailingDelay=Секунди за изчакване преди изпращане на следващото съобщение ##### Notification ##### NotificationSetup=Настройка на модул Имейл известяване NotificationEMailFrom=Подател на имейли (From), изпратени от модула за известяване FixedEmailTarget=Получател ##### Sendings ##### SendingsSetup=Настройка на модула Експедиция -SendingsReceiptModel=Изпращане получаване модел -SendingsNumberingModules=Sendings номериране модули -SendingsAbility=Support shipping sheets for customer deliveries +SendingsReceiptModel=Модели на документи за изпращания +SendingsNumberingModules=Модели за номериране на изпращания +SendingsAbility=Поддържани листове за доставки към клиенти NoNeedForDeliveryReceipts=В повечето случаи експедиционните формуляри се използват както за формуляри за доставка на клиенти (списък на продуктите, които трябва да бъдат изпратени), така и за формуляри, които са получени и подписани от клиента. Следователно разписката за доставка на продукти е дублираща функция и рядко се активира. -FreeLegalTextOnShippings=Free text on shipments +FreeLegalTextOnShippings=Свободен текст в изпращания ##### Deliveries ##### -DeliveryOrderNumberingModules=Продукти доставки получаване номерацията модул -DeliveryOrderModel=Продукти доставки получаване модел -DeliveriesOrderAbility=Поддръжка продукти доставки постъпления -FreeLegalTextOnDeliveryReceipts=Свободен текст на разписки за доставка +DeliveryOrderNumberingModules=Модели за номериране на разписки за доставка +DeliveryOrderModel=Модели на документи за разписки за доставка +DeliveriesOrderAbility=Поддръжка на разписки за доставка +FreeLegalTextOnDeliveryReceipts=Свободен текст в разписки за доставка ##### FCKeditor ##### -AdvancedEditor=Разширено редактор -ActivateFCKeditor=Активирайте разширен редактор за: -FCKeditorForCompany=WYSIWIG създаване / редактиране на елементи на описание и бележка (с изключение на продукти / услуги) -FCKeditorForProduct=WYSIWIG създаване / редактиране на продукти / услуги описание и бележка +AdvancedEditor=Разширен редактор +ActivateFCKeditor=Активиране на разширен редактор за: +FCKeditorForCompany=WYSIWIG създаване / промяна на описание на елементите и бележки (с изключение на продукти / услуги) +FCKeditorForProduct=WYSIWIG създаване / промяна на описание на продукти / услуги FCKeditorForProductDetails=WYSIWIG създаване / редактиране на продуктови редове за всички обекти (предложения, поръчки, фактури и др.). Внимание: Използването на тази опция не се препоръчва, тъй като може да създаде проблеми с някои специални символи и при форматиране на страниците, по време на генериране на PDF файловете. -FCKeditorForMailing= WYSIWIG създаване / редактиране на писма -FCKeditorForUserSignature=WYSIWIG creation/edition of user signature +FCKeditorForMailing= WYSIWIG създаване / промяна на масови имейли (Инструменти -> Масови имейли) +FCKeditorForUserSignature=WYSIWIG създаване / промяна на подпис на потребители FCKeditorForMail=WYSIWIG създаване / редактиране на цялата поща (с изключение на Настройки - Електронна поща) ##### Stock ##### StockSetup=Настройка на модул Наличности IfYouUsePointOfSaleCheckModule=Ако използвате модула Точка за продажби (POS), предоставен по подразбиране или чрез външен модул, тази настройка може да бъде игнорирана от вашия POS модул. Повечето POS модули по подразбиране са разработени да създават веднага фактура, след което да намаляват наличностите, независимо от опциите тук. В случай, че имате нужда или не от автоматично намаляване на наличностите при регистриране на продажба от POS проверете и настройката на вашия POS модул. ##### Menu ##### -MenuDeleted=Меню заличават +MenuDeleted=Менюто е изтрито Menus=Менюта TreeMenuPersonalized=Персонализирани менюта NotTopTreeMenuPersonalized=Персонализирани менюта, които не са свързани с главното меню NewMenu=Ново меню Menu=Избор на меню -MenuHandler=Меню манипулатор -MenuModule=Източник модул -HideUnauthorizedMenu= Скриване на неоторизирани менюта (сива) -DetailId=Id меню -DetailMenuHandler=Манипулатор меню, където да покаже ново меню -DetailMenuModule=Модул име, ако меню влизането идват от модул -DetailType=Вид на менюто (горната или лявата) -DetailTitre=Меню етикет или код на етикета за превод +MenuHandler=Манипулатор на меню +MenuModule=Модул източник +HideUnauthorizedMenu= Скриване на неоторизирани менюта (сиво) +DetailId=Идентификатор на меню +DetailMenuHandler=Манипулатор на меню, в който да се покаже новото меню +DetailMenuModule=Име на модула, ако входните данни на менюто идват от модул +DetailType=Тип меню (горе или вляво) +DetailTitre=Етикет на менюто или етикет на кода за превод DetailUrl=URL адрес, където менюто ви изпратя (Absolute на URL линк или външна връзка с http://) -DetailEnabled=Състояние да покаже или не влизането -DetailRight=Условие, за да се покаже неразрешени менюта сиви -DetailLangs=Lang името на файла за превод на етикета код -DetailUser=Intern / EXTERN / +DetailEnabled=Условие за показване или не на вписване +DetailRight=Условие за показване на неоторизирани (сиви) менюта +DetailLangs=Име на .lang файла с етикет на кода на превод +DetailUser=Вътрешен / Външен / Всички Target=Цел DetailTarget=Насочване за връзки (_blank top отваря нов прозорец) -DetailLevel=Level (-1: горното меню, 0: хедър, меню> 0 меню и подменю) -ModifMenu=Меню промяна -DeleteMenu=Изтриване на елемент от менюто +DetailLevel=Ниво (-1:top menu, 0:header menu, >0 menu and sub menu) +ModifMenu=Промяна на менюто +DeleteMenu=Изтриване на менюто ConfirmDeleteMenu=Сигурни ли сте, че искате да изтриете записа в менюто %s ? -FailedToInitializeMenu=Неуспешно инициализиране на меню +FailedToInitializeMenu=Неуспешно инициализиране на менюто ##### Tax ##### -TaxSetup=Taxes, social or fiscal taxes and dividends module setup -OptionVatMode=Дължимия ДДС +TaxSetup=Настройка на модул за данъци, социални или фискални данъци и дивиденти +OptionVatMode=Изискуемост на ДДС OptionVATDefault=Стандартна основа -OptionVATDebitOption=Accrual basis +OptionVATDebitOption=Основа за начисляване OptionVatDefaultDesc=ДДС се дължи:
- при доставка на стоки (въз основа на датата на фактурата)
- при плащания на услуги OptionVatDebitOptionDesc=ДДС се дължи:
- при доставка на стоки (въз основа на датата на фактурата)
- по фактура (дебит) за услуги OptionPaymentForProductAndServices=Парична база за продукти и услуги OptionPaymentForProductAndServicesDesc=ДДС се дължи:
- при плащане на стоки
- при плащания за услуги SummaryOfVatExigibilityUsedByDefault=ДДС се изисква по подразбиране според избраната опция: OnDelivery=При доставка -OnPayment=На плащане -OnInvoice=На фактура -SupposedToBePaymentDate=Дата на плащане, използвани -SupposedToBeInvoiceDate=Дата на фактура използва -Buy=Купувам +OnPayment=При плащане +OnInvoice=При фактуриране +SupposedToBePaymentDate=Използва се дата на плащането +SupposedToBeInvoiceDate=Използва се дата на фактурата +Buy=Покупка Sell=Продажба -InvoiceDateUsed=Дата на фактура използва +InvoiceDateUsed=Използва се дата на фактурата YourCompanyDoesNotUseVAT=Вашата фирма не е определила да използва ДДС (Начало - Настройки - Фирма / Организация), така че няма опции за настройка на ДДС. AccountancyCode=Счетоводен код -AccountancyCodeSell=Sale account. code -AccountancyCodeBuy=Purchase account. code +AccountancyCodeSell=Счетоводен код за продажба +AccountancyCodeBuy=Счетоводен код за покупка ##### Agenda ##### -AgendaSetup=Събития и натъкмяване на дневен ред модул -PasswordTogetVCalExport=, За да разреши износ връзка -PastDelayVCalExport=Не изнася случай по-стари от +AgendaSetup=Настройка на модула за събития и календар +PasswordTogetVCalExport=Ключ за оторизация на връзката за експортиране +PastDelayVCalExport=Да не се експортират събития по-стари от AGENDA_USE_EVENT_TYPE=Използване на видове събития (управлявани в меню Настройка - Речници - Видове събития в календара) AGENDA_USE_EVENT_TYPE_DEFAULT=Автоматично задаване на стойност по подразбиране за вид събитие във формуляра при създаване на събитие AGENDA_DEFAULT_FILTER_TYPE=Автоматично задаване на стойност по подразбиране за вид събитие във филтъра за търсене на календара AGENDA_DEFAULT_FILTER_STATUS=Автоматично задаване на стойност по подразбиране за статус на събитие във филтъра за търсене на календара -AGENDA_DEFAULT_VIEW=Which tab do you want to open by default when selecting menu Agenda +AGENDA_DEFAULT_VIEW=Кой раздел да се зарежда по подразбиране, когато се отваря календара AGENDA_REMINDER_EMAIL=Активиране на напомняне за събития, чрез имейли (опцията за напомняне / закъснение може да бъде определена за всяко събитие). Забележка: Модулът %s трябва да бъде активиран и правилно настроен, за да се изпращат напомняния в определеното време. AGENDA_REMINDER_BROWSER=Активиране на напомняне за събития в браузъра на потребителя (когато бъде достигната датата на събитието, всеки потребител може да отхвърли известието от браузъра) AGENDA_REMINDER_BROWSER_SOUND=Активиране на звуково известяване AGENDA_SHOW_LINKED_OBJECT=Показване на свързания обект в календара ##### Clicktodial ##### -ClickToDialSetup=Кликнете, за да наберете настройка модул +ClickToDialSetup=Настройка на модула за набиране (ClickToDial) ClickToDialUrlDesc=URL, който се извиква при кликване върху телефонен номер. В URL адреса може да използвате маркери
__PHONETO__, който ще бъде заменен с телефонния номер на лицето, на което ще се обаждате
__PHONEFROM__, който ще бъде заменен с телефонния номер на обаждащия се (вашият)
__LOGIN__, който ще бъде заменен с clicktodial потребителско име (дефиниран в картата на потребителя)
__PASS__, който ще бъде заменен с clicktodial парола (дефинирана в картата на потребителя). ClickToDialDesc=Този модул прави възможно кликването върху телефонни номера. С едно щракване върху иконата ще наберете телефонният номер. Това може да се използва за извикване на Call-Center система от Dolibarr, която може да избере например телефонен номер в SIP система. ClickToDialUseTelLink=Просто използвайте връзката "tel:" за телефонни номера @@ -1646,61 +1649,61 @@ ClickToDialUseTelLinkDesc=Използвайте този метод, ако в CashDesk=Точка за продажба CashDeskSetup=Настройка на модул Точка за продажби CashDeskThirdPartyForSell=Стандартен контрагент по подразбиране, който да се използва за продажби -CashDeskBankAccountForSell=Акаунт по подразбиране да се използва за получаване на парични плащания +CashDeskBankAccountForSell=Сметка по подразбиране, която да се използва за получаване на плащания в брой CashDeskBankAccountForCheque= Банкова сметка по подразбиране, която да се използва за получаване на плащания с чек -CashDeskBankAccountForCB= Акаунт по подразбиране да се използва за получаване на парични плащания с кредитни карти +CashDeskBankAccountForCB= Сметка по подразбиране, която да се използва за получаване на плащания с кредитни карти CashDeskDoNotDecreaseStock=Изключване на намаляването на наличности, когато продажбата се извършва от точка за продажби (ако стойността е "НЕ", намаляването на наличности се прави за всяка продажба, извършена от POS, независимо от опцията, определена в модула Наличности). -CashDeskIdWareHouse=Force and restrict warehouse to use for stock decrease +CashDeskIdWareHouse=Принуждаване и ограничаване използването на склад при намаляване на наличностите StockDecreaseForPointOfSaleDisabled=Намаляването на наличности от точка за продажби е деактивирано StockDecreaseForPointOfSaleDisabledbyBatch=Намаляването на наличности в POS не е съвместимо с модула Продуктови партиди (активен в момента), така че намаляването на наличности е деактивирано. CashDeskYouDidNotDisableStockDecease=Не сте деактивирали намаляването на запасите при продажбата от точка за продажби, поради тази причина се изисква наличие на склад. ##### Bookmark ##### -BookmarkSetup=Bookmark настройка модул +BookmarkSetup=Настройка на модула на отметки BookmarkDesc=Този модул позволява да се управляват отметки. Може също да добавяте преки пътища към всички страници на Dolibarr или външни уеб сайтове в лявото меню. NbOfBoomarkToShow=Максимален брой отметки, които да се показват в лявото меню ##### WebServices ##### -WebServicesSetup=WebServices модул за настройка -WebServicesDesc=С активирането на този модул, Dolibarr се превърне в уеб сървъра на услугата за предоставяне на различни уеб услуги. -WSDLCanBeDownloadedHere=WSDL ЕВРОВОК файлове на предоставяните услуги може да изтеглите от тук +WebServicesSetup=Настройка на модул за уеб услуги +WebServicesDesc=Чрез активирането на този модул, Dolibarr се превръща в сървър за уеб услуги, който осигурява различни уеб услуги. +WSDLCanBeDownloadedHere=WSDL дескрипторните файлове на предоставените услуги могат да бъдат свалени тук EndPointIs=SOAP клиентите трябва да изпращат заявките си до крайна точка на Dolibarr, достъпна чрез URL ##### API #### -ApiSetup=API module setup -ApiDesc=By enabling this module, Dolibarr become a REST server to provide miscellaneous web services. +ApiSetup=Настройка на модула API +ApiDesc=Чрез активирането на този модул Dolibarr става REST сървър за предоставяне на различни уеб услуги. ApiProductionMode=Активиране на производствен режим (това ще активира използването на кеш при управление на услуги) ApiExporerIs=Можете да изследвате и тествате API на URL адрес -OnlyActiveElementsAreExposed=Only elements from enabled modules are exposed -ApiKey=Key for API +OnlyActiveElementsAreExposed=Изложени са само елементи от активираните модули +ApiKey=Ключ за API WarningAPIExplorerDisabled=API Explorer е деактивиран. API Explorer не се изисква да предоставя API услуги. Той е инструмент за разработчици за намиране / тестване на REST API. Ако имате нужда от този инструмент, влезте в настройките на модула API REST, за да го активирате. ##### Bank ##### -BankSetupModule=Модул за настройка на банката +BankSetupModule=Настройка на модула за банки и парични сметки FreeLegalTextOnChequeReceipts=Свободен текст в чековите разписки -BankOrderShow=Показване ред на банкови сметки за страни, които използват "подробен номер на банкова +BankOrderShow=Ред на показване на банкови сметки за държави, използващи "подробен банков номер" BankOrderGlobal=Общ -BankOrderGlobalDesc=Обща дисплей за +BankOrderGlobalDesc=Общ ред на показване BankOrderES=Испански -BankOrderESDesc=Испански дисплей за +BankOrderESDesc=Испански ред за показване ChequeReceiptsNumberingModule=Модел за номериране на чекови разписки ##### Multicompany ##### -MultiCompanySetup=Multi-модул за настройка компания +MultiCompanySetup=Настройка на модула за няколко фирми ##### Suppliers ##### SuppliersSetup=Настройка на модул Доставчици SuppliersCommandModel=Пълен шаблон на поръчка за покупка (лого ...) SuppliersInvoiceModel=Пълен шаблон на фактура за доставка (лого ...) SuppliersInvoiceNumberingModel=Модели за номериране на фактури за доставка -IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval +IfSetToYesDontForgetPermission=Ако е избрано ДА, не забравяйте да предоставите права на групи или потребители, от които се очаква второто одобрение. ##### GeoIPMaxmind ##### -GeoIPMaxmindSetup=GeoIP MaxMind модул за настройка -PathToGeoIPMaxmindCountryDataFile=Path to file containing Maxmind ip to country translation.
Examples:
/usr/local/share/GeoIP/GeoIP.dat
/usr/share/GeoIP/GeoIP.dat -NoteOnPathLocation=Имайте предвид, че ИП в страната файла с данни трябва да е в директория PHP ви да прочетете (Проверете PHP open_basedir настройка и разрешения файловата система). -YouCanDownloadFreeDatFileTo=Можете да изтеглите безплатна демо версия на файла GeoIP MaxMind страната в %s. -YouCanDownloadAdvancedDatFileTo=Можете също да изтеглите по-пълна версия, с актуализации на файла GeoIP MaxMind страната в %s. -TestGeoIPResult=Тест на преобразуване IP -> страната +GeoIPMaxmindSetup=Настройка на модула GeoIP Maxmind +PathToGeoIPMaxmindCountryDataFile=Път до файл, съдържащ Maxmind IP за превод на държава.
Примери:
/usr/local/share/GeoIP/GeoIP.dat
/usr/share/GeoIP/GeoIP.dat +NoteOnPathLocation=Обърнете внимание, че вашият IP файл с данни за държавата трябва да е в директория, която може да се чете от PHP (проверете настройките на вашата PHP open_basedir и правата на файловата система). +YouCanDownloadFreeDatFileTo=Може да изтеглите безплатна демо версия на Maxmind GeoIP файла за държавата от %s. +YouCanDownloadAdvancedDatFileTo=Може също така да изтеглите по-пълна версия, с актуализации на Maxmind GeoIP файла за държавата от %s. +TestGeoIPResult=Тест за конвертиране IP -> Държава ##### Projects ##### -ProjectsNumberingModules=Проекти номериране модул -ProjectsSetup=Инсталационния проект модул -ProjectsModelModule=Проект доклади документ модел -TasksNumberingModules=Tasks numbering module -TaskModelModule=Tasks reports document model +ProjectsNumberingModules=Модел за номериране на проекти +ProjectsSetup=Настройка на модула за проекти +ProjectsModelModule=Модели на документи за справки по проекти +TasksNumberingModules=Модел за номериране на задачи +TaskModelModule=Модели на документи за справки по задачи UseSearchToSelectProject=Изчакване, докато се натисне клавиш, преди да се зареди съдържанието на комбинирания списък с проекти.
Това може да подобри производителността при по-голям брой проекти, но е по-малко удобно. ##### ECM (GED) ##### ##### Fiscal Year ##### @@ -1712,70 +1715,70 @@ CloseFiscalYear=Затваряне на счетоводен период DeleteFiscalYear=Изтриване на счетоводен период ConfirmDeleteFiscalYear=Сигурни ли сте, че искате да изтриете този счетоводен период? ShowFiscalYear=Преглед на счетоводен период -AlwaysEditable=Can always be edited -MAIN_APPLICATION_TITLE=Force visible name of application (warning: setting your own name here may break autofill login feature when using DoliDroid mobile application) -NbMajMin=Minimum number of uppercase characters -NbNumMin=Minimum number of numeric characters -NbSpeMin=Minimum number of special characters -NbIteConsecutive=Maximum number of repeating same characters -NoAmbiCaracAutoGeneration=Do not use ambiguous characters ("1","l","i","|","0","O") for automatic generation -SalariesSetup=Setup of module salaries -SortOrder=Sort order -Format=Format +AlwaysEditable=Винаги може да се редактира +MAIN_APPLICATION_TITLE=Промяна на визуалното име на Dolibarr (Внимание: Задаването на персонализирано име тук може да наруши функцията за автоматично попълване на входни данни при използване на мобилното приложение DoliDroid) +NbMajMin=Минимален брой главни букви +NbNumMin=Минимален брой цифрови символи +NbSpeMin=Минимален брой специални символи +NbIteConsecutive=Максимален брой повтарящи се символи +NoAmbiCaracAutoGeneration=Да не се използват двусмислени символи ("1","l","i","|","0","O") за автоматично генериране +SalariesSetup=Настройка на модула за заплати +SortOrder=Ред на сортиране +Format=Формат TypePaymentDesc=0: Вид на плащане за клиент, 1: Вид плащане за доставчик, 2: Вид на плащане за клиенти и доставчици -IncludePath=Include path (defined into variable %s) -ExpenseReportsSetup=Setup of module Expense Reports -TemplatePDFExpenseReports=Document templates to generate expense report document +IncludePath=Включва път (дефиниран в променлива %s) +ExpenseReportsSetup=Настройка на модула за разходни отчети +TemplatePDFExpenseReports=Модели на документи за разходни отчети ExpenseReportsIkSetup=Настройка на модул Разходни отчети - Показания на километража ExpenseReportsRulesSetup=Настройка на модул Разходни отчети - Правила ExpenseReportNumberingModules=Модул за номериране на разходни отчети -NoModueToManageStockIncrease=No module able to manage automatic stock increase has been activated. Stock increase will be done on manual input only. +NoModueToManageStockIncrease=Не е активиран модул, способен да управлява автоматичното увеличаване на наличности. Увеличаването на наличности ще се извършва само при ръчно въвеждане. YouMayFindNotificationsFeaturesIntoModuleNotification=Може да откриете опции за известия по имейл като активирате и конфигурирате модула "Известия". ListOfNotificationsPerUser=Списък с известия за потребител* ListOfNotificationsPerUserOrContact=Списък с известия (събития), налични за потребител* или за контакт** ListOfFixedNotifications=Списък с фиксирани известия GoOntoUserCardToAddMore=Отидете в раздела „Известия“ на съответния потребител, за да добавите или премахнете известия за този потребител GoOntoContactCardToAddMore=Отидете в раздела „Известия“ на съответния контрагент, за да добавите или премахнете известия за съответните контакти / адреси -Threshold=Threshold +Threshold=Граница BackupDumpWizard=Асистент за създаване на архивния файл -SomethingMakeInstallFromWebNotPossible=Installation of external module is not possible from the web interface for the following reason: +SomethingMakeInstallFromWebNotPossible=Инсталирането на външен модул не е възможно от уеб интерфейса, поради следната причина: SomethingMakeInstallFromWebNotPossible2=Поради тази причина описаният тук процес за актуализация е ръчен процес, който може да се изпълнява само от потребител със съответните права. -InstallModuleFromWebHasBeenDisabledByFile=Install of external module from application has been disabled by your administrator. You must ask him to remove the file %s to allow this feature. +InstallModuleFromWebHasBeenDisabledByFile=Инсталирането на външен модул в приложението е деактивирано от администратора на системата. Трябва да го помолите да премахне файла %s, за да разреши тази функция. ConfFileMustContainCustom=Инсталирането или създаването на външен модул в приложението е необходимо да съхрани файловете на модула в директорията %s. За да се обработва тази директория от Dolibarr, трябва да настроите вашият conf/conf.php файл да съдържа двете директивни линии:
$dolibarr_main_url_root_alt = '/custom';
$dolibarr_main_document_root_alt = '%s/custom'; -HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over +HighlightLinesOnMouseHover=Маркиране на редове в таблица, когато мишката преминава отгоре HighlightLinesColor=Цвят на подчертания ред при преминаване на мишката отгоре (използвайте 'ffffff', ако не искате да се подчертава) HighlightLinesChecked=Цвят на подчертания ред, когато е маркиран (използвайте 'ffffff',ако не искате да се подчертава) TextTitleColor=Цвят на текста в заглавието на страницата LinkColor=Цвят на връзките PressF5AfterChangingThis=Натиснете CTRL + F5 на клавиатурата или изчистете кеша на браузъра си след като промените тази стойност, за да стане ефективна. NotSupportedByAllThemes=Ще работи с основните теми, но може да не се поддържат външни теми. -BackgroundColor=Background color -TopMenuBackgroundColor=Background color for Top menu +BackgroundColor=Цвят на фона +TopMenuBackgroundColor=Цвят на фона в горното меню TopMenuDisableImages=Скриване на изображения в горното меню -LeftMenuBackgroundColor=Background color for Left menu -BackgroundTableTitleColor=Background color for Table title line +LeftMenuBackgroundColor=Цвят на фона в лявото меню +BackgroundTableTitleColor=Цвят на фона в реда със заглавието на таблица BackgroundTableTitleTextColor=Цвят на текста в заглавието на таблиците -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 line. Enter any value of your choice, but without special characters. +BackgroundTableLineOddColor=Цвят на фона в нечетните редове на таблица +BackgroundTableLineEvenColor=Цвят на фона в четните редове на таблица +MinimumNoticePeriod=Минимален срок за известяване (вашата молба за отпуск трябва да бъде изпратена преди този срок) +NbAddedAutomatically=Брой дни, добавени към броячите на потребителите (автоматично) всеки месец +EnterAnyCode=Това поле съдържа референция за идентифициране на реда. Въведете стойност по ваш избор, но без специални символи. UnicodeCurrency=Въведете тук между скобите, десетичен код, който представлява символа на валутата. Например: за $, въведете [36] - за Бразилски Реал R$ [82,36] - за €, въведете [8364] ColorFormat=RGB цвета е в HEX формат, например: FF0000 -PositionIntoComboList=Position of line into combo lists -SellTaxRate=Sale tax rate +PositionIntoComboList=Позиция на реда в комбинирани списъци +SellTaxRate=Ставка на данъка върху продажби RecuperableOnly=Да за ДДС "Не възприеман, но възстановим", предназначен за някои области във Франция. Запазете стойността "Не" във всички останали случаи. UrlTrackingDesc=Ако доставчикът или транспортната услуга предлага страница или уеб сайт за проверка на статуса на вашите пратки, то може да ги въведете тук. Може да използвате ключа {TRACKID} в URL параметрите, така че системата да го замени с проследяващия номер, който потребителят е въвел в картата на пратката. OpportunityPercent=Когато създавате нова възможност определяте приблизително очакваната сума от проекта / възможността. Според статуса на възможността тази сума ще бъде умножена по определения му процент, за да се оцени общата сума, която всичките ви възможности могат да генерират. Стойността е в проценти (между 0 и 100). -TemplateForElement=This template record is dedicated to which element -TypeOfTemplate=Type of template +TemplateForElement=Този шаблон е специализиран за елемент +TypeOfTemplate=Тип шаблон TemplateIsVisibleByOwnerOnly=Шаблонът е видим само за собственика му VisibleEverywhere=Видим навсякъде VisibleNowhere=Не се вижда никъде -FixTZ=TimeZone fix -FillFixTZOnlyIfRequired=Example: +2 (fill only if problem experienced) -ExpectedChecksum=Expected Checksum -CurrentChecksum=Current Checksum +FixTZ=Поправка на времева зона +FillFixTZOnlyIfRequired=Пример: +2 (попълнете само при проблем) +ExpectedChecksum=Очаквана контролна сума +CurrentChecksum=Текуща контролна сума ForcedConstants=Необходими постоянни стойности MailToSendProposal=Клиентски предложения MailToSendOrder=Поръчки за продажба @@ -1790,7 +1793,7 @@ MailToThirdparty=Контрагенти MailToMember=Членове MailToUser=Потребители MailToProject=Страница "Проекти" -ByDefaultInList=Показване по подразбиране при показа на списък +ByDefaultInList=Показване по подразбиране в списъчен изглед YouUseLastStableVersion=Използвате последната стабилна версия TitleExampleForMajorRelease=Пример за съобщение, което може да използвате, за да обявите това главно издание (не се колебайте да го използвате на уебсайтовете си) TitleExampleForMaintenanceRelease=Пример за съобщение, което може да използвате, за да обявите това издание за поддръжка (не се колебайте да го използвате на уебсайтовете си) @@ -1923,5 +1926,5 @@ IFTTTDesc=Този модул е предназначен да задейств UrlForIFTTT=URL адрес за IFTTT YouWillFindItOnYourIFTTTAccount=Ще го намерите във вашият IFTTT акаунт EndPointFor=Крайна точка за %s: %s -DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +DeleteEmailCollector=Изтриване на имейл колекционер +ConfirmDeleteEmailCollector=Сигурни ли те, че искате да изтриете този колекционер на имейли? diff --git a/htdocs/langs/bg_BG/agenda.lang b/htdocs/langs/bg_BG/agenda.lang index 198781d303e..74975f5a6e7 100644 --- a/htdocs/langs/bg_BG/agenda.lang +++ b/htdocs/langs/bg_BG/agenda.lang @@ -1,9 +1,9 @@ # Dolibarr language file - Source file is en_US - agenda -IdAgenda=ID на събитие +IdAgenda=Идентификатор на събитие Actions=Събития -Agenda=Дневен ред +Agenda=Календар TMenuAgenda=Календар -Agendas=Дневен ред +Agendas=Календари LocalAgenda=Вътрешен календар ActionsOwnedBy=Събитие принадлежащо на ActionsOwnedByShort=Собственик @@ -11,74 +11,74 @@ AffectedTo=Възложено на Event=Събитие Events=Събития EventsNb=Брой събития -ListOfActions=Списък на събитията +ListOfActions=Списък на събития EventReports=Отчети за събития -Location=Място -ToUserOfGroup=За всеки потребител в група -EventOnFullDay=Събитие по цял ден (дни) +Location=Местоположение +ToUserOfGroup=на всеки потребител от група +EventOnFullDay=Целодневно събитие MenuToDoActions=Всички незавършени събития MenuDoneActions=Всички прекратени събития MenuToDoMyActions=Моите незавършени събития MenuDoneMyActions=Моите прекратени събития -ListOfEvents=Списък на събитията (Вътрешен календар) -ActionsAskedBy=Събития създадени от -ActionsToDoBy=Събития възложени на -ActionsDoneBy=Събития извършени от -ActionAssignedTo=Събитие определено на +ListOfEvents=Списък на събития (Вътрешен календар) +ActionsAskedBy=Събития, съобщени от +ActionsToDoBy=Събития, възложени на +ActionsDoneBy=Събития, извършени от +ActionAssignedTo=Събитие, възложено на ViewCal=Месечен изглед ViewDay=Дневен изглед ViewWeek=Седмичен изглед ViewPerUser=Изглед по потребител -ViewPerType=Преглед по тип +ViewPerType=Изглед по тип AutoActions= Автоматично попълване -AgendaAutoActionDesc= Тук можете да дефинирате събития, които искате Dolibarr да създаде автоматично в бележника. Ако нищо не е отметнато, в регистрите ще бъдат включени само ръчни добавените събития и ще се показват в бележника. Автоматично проследяваните събития, извършени върху обекти (валидиране, промяна на състоянието), няма да бъдат запазени. +AgendaAutoActionDesc= Тук може да дефинирате събития, които искате Dolibarr да създаде автоматично в календара. Ако нищо не е отметнато, в регистрите ще бъдат включени само ръчно добавените събития и ще се показват в календара. Автоматично проследяваните събития, извършени върху обекти (валидиране, промяна на състояние) няма да бъдат запазени. AgendaSetupOtherDesc= Тази страница предлага опции, позволяващи експортирането на вашите Dolibarr събития във външен календар (Thunderbird, Google Calendar и др.) -AgendaExtSitesDesc=Тази страница позволява да се обяви външните източници на календари, за да видят своите събития в дневния ред Dolibarr. -ActionsEvents=Събития, за които Dolibarr ще създаде действие в дневния ред автоматично -EventRemindersByEmailNotEnabled=Напомнянията за събития по имейл не са активирани в настройката на модула %s. +AgendaExtSitesDesc=Тази страница позволява да се декларират външни източници на календари, за да се видят техните събития в календара на Dolibarr. +ActionsEvents=Събития, за които Dolibarr ще създаде автоматично събитие в календара +EventRemindersByEmailNotEnabled=Напомнянията за събития по имейл не са активирани в настройката на модул %s. ##### Agenda event labels ##### NewCompanyToDolibarr=Контрагент %s е създаден COMPANY_DELETEInDolibarr=Контрагент %s е изтрит -ContractValidatedInDolibarr=Контакт %s е валидиран +ContractValidatedInDolibarr=Договор %s е валидиран CONTRACT_DELETEInDolibarr=Договор %s е изтрит PropalClosedSignedInDolibarr=Предложение %s е подписано -PropalClosedRefusedInDolibarr=Предложение %s е отказано -PropalValidatedInDolibarr=Предложение %s валидирано +PropalClosedRefusedInDolibarr=Предложение %s е отхвърлено +PropalValidatedInDolibarr=Предложение %s е валидирано PropalClassifiedBilledInDolibarr=Предложение %s е фактурирано -InvoiceValidatedInDolibarr=Фактура %s валидирани -InvoiceValidatedInDolibarrFromPos=Фактура %s валидирана от POS -InvoiceBackToDraftInDolibarr=Фактура %s се върнете в състояние на чернова -InvoiceDeleteDolibarr=Фактура %s изтрита +InvoiceValidatedInDolibarr=Фактура %s е валидирана +InvoiceValidatedInDolibarrFromPos=Фактура %s е валидирана от POS +InvoiceBackToDraftInDolibarr=Фактура %s е върната в статус на чернова +InvoiceDeleteDolibarr=Фактура %s е изтрита InvoicePaidInDolibarr=Фактура %s е платена InvoiceCanceledInDolibarr=Фактура %s е анулирана MemberValidatedInDolibarr=Член %s е валидиран MemberModifiedInDolibarr=Член %s е променен MemberResiliatedInDolibarr=Член %s е прекратен MemberDeletedInDolibarr=Член %s е изтрит -MemberSubscriptionAddedInDolibarr=Абонамент %s за член %s е добавен -MemberSubscriptionModifiedInDolibarr=Абонамент %s за член %s е променен -MemberSubscriptionDeletedInDolibarr=Абонамент %s за член %s е изтрит +MemberSubscriptionAddedInDolibarr=Членски внос %s за член %s е добавен +MemberSubscriptionModifiedInDolibarr=Членски внос %s за член %s е променен +MemberSubscriptionDeletedInDolibarr=Членски внос %s за член %s е изтрит ShipmentValidatedInDolibarr=Пратка %s е валидирана ShipmentClassifyClosedInDolibarr=Пратка %s е фактурирана ShipmentUnClassifyCloseddInDolibarr=Пратка %s е повторно отворена -ShipmentBackToDraftInDolibarr=Пратка %s е върната в чернова +ShipmentBackToDraftInDolibarr=Пратка %s е върната в статус чернова ShipmentDeletedInDolibarr=Пратка %s е изтрита OrderCreatedInDolibarr=Поръчка %s е създадена -OrderValidatedInDolibarr=Поръчка %s валидирани -OrderDeliveredInDolibarr=Поръчка %s класифицирана доставена -OrderCanceledInDolibarr=Поръчка %s отменен -OrderBilledInDolibarr=Поръчка %s класифицирана таксувана -OrderApprovedInDolibarr=Поръчка %s одобрен -OrderRefusedInDolibarr=Поръчка %s отказана -OrderBackToDraftInDolibarr=Поръчка %s се върне в състояние на чернова +OrderValidatedInDolibarr=Поръчка %s е валидирана +OrderDeliveredInDolibarr=Поръчка %s е класифицирана като доставена +OrderCanceledInDolibarr=Поръчка %s е анулирана +OrderBilledInDolibarr=Поръчка %s е класифицирана като фактурирана +OrderApprovedInDolibarr=Поръчка %s е одобрена +OrderRefusedInDolibarr=Поръчка %s е отхвърлена +OrderBackToDraftInDolibarr=Поръчка %s е върната в статус на чернова ProposalSentByEMail=Търговско предложение %s е изпратено по имейл ContractSentByEMail=Договор %s е изпратен по имейл OrderSentByEMail=Клиентска поръчка %s е изпратена по имейл -InvoiceSentByEMail=Клиентска фактура %s е изпратена по имейл +InvoiceSentByEMail=Фактура за продажба %s е изпратена по имейл SupplierOrderSentByEMail=Поръчка за покупка %s е изпратена по имейл -SupplierInvoiceSentByEMail=Доставна фактура %s е изпратена по имейл +SupplierInvoiceSentByEMail=Фактура за покупка %s е изпратена по имейл ShippingSentByEMail=Пратка %s е изпратена по имейл -ShippingValidated= Пратка %s валидирана +ShippingValidated= Пратка %s е валидирана InterventionSentByEMail=Интервенция %s е изпратена по имейл ProposalDeleted=Предложението е изтрито OrderDeleted=Поръчката е изтрита @@ -90,46 +90,46 @@ EXPENSE_REPORT_CREATEInDolibarr=Разходен отчет %s е създаде EXPENSE_REPORT_VALIDATEInDolibarr=Разходен отчет %s е валидиран EXPENSE_REPORT_APPROVEInDolibarr=Разходен отчет %s е одобрен EXPENSE_REPORT_DELETEInDolibarr=Разходен отчет %s е изтрит -EXPENSE_REPORT_REFUSEDInDolibarr=Разходен отчет %s е отказан +EXPENSE_REPORT_REFUSEDInDolibarr=Разходен отчет %s е отхвърлен PROJECT_CREATEInDolibarr=Проект %s е създаден PROJECT_MODIFYInDolibarr=Проект %s е променен PROJECT_DELETEInDolibarr=Проект %s е изтрит TICKET_CREATEInDolibarr=Тикет %s е създаден TICKET_MODIFYInDolibarr=Тикет %s е променен TICKET_ASSIGNEDInDolibarr=Тикет %s е възложен -TICKET_CLOSEInDolibarr=Тикет %s е затворен +TICKET_CLOSEInDolibarr=Тикет %s е приключен TICKET_DELETEInDolibarr=Тикет %s е изтрит ##### End agenda events ##### -AgendaModelModule=Шаблони на документи за събитие +AgendaModelModule=Шаблони за събитие DateActionStart=Начална дата DateActionEnd=Крайна дата -AgendaUrlOptions1=Можете да добавите и следните параметри, за да филтрирате изход: -AgendaUrlOptions3=logina=%s за да ограничи показването до действия притежавани от потребител %s. -AgendaUrlOptionsNotAdmin=  logina =! %s за ограничаване на изхода до събития, които не са собственост на потребителя %s . -AgendaUrlOptions4=  logint = %s за ограничаване на изхода до събития, възложени на потребителя %s (собственик and други). -AgendaUrlOptionsProject=  project = __ PROJECT_ID__ за ограничаване на изхода до събития свързани с проект __PROJECT_ID__ . -AgendaUrlOptionsNotAutoEvent= notactiontype = systemauto за изключване на автоматични събития. +AgendaUrlOptions1=Може също да добавите следните параметри за филтриране на резултата: +AgendaUrlOptions3=logina=%s, за да ограничи показването до събития притежавани от потребител %s. +AgendaUrlOptionsNotAdmin=logina=!%s, за да ограничи показването до събития, които не са собственост на потребител %s. +AgendaUrlOptions4=logint=%s, за да ограничи показването до събития, които са възложени на потребител %s (като собственик и не). +AgendaUrlOptionsProject=project=__PROJECT_ID__, за да ограничи показването до събития, които са свързани с проект __PROJECT_ID__. +AgendaUrlOptionsNotAutoEvent=notactiontype=systemauto за изключване на автоматични събития. AgendaShowBirthdayEvents=Показване на рождени дни на контактите AgendaHideBirthdayEvents=Скриване на рождени дни на контактите Busy=Зает -ExportDataset_event1=Списък на събитията в дневния ред -DefaultWorkingDays=По подразбиране диапазон на работни дни в седмица (Пример: 1-5, 1-6) -DefaultWorkingHours=По подразбиране диапазон на работни часове в ден (Пример: 9-18) +ExportDataset_event1=Списък на събития в календар +DefaultWorkingDays=Диапазон на работните дни по подразбиране в седмицата (Пример: 1-5, 1-6) +DefaultWorkingHours=Работно време по подразбиране в рамките на един ден (Пример: 9-18) # External Sites ical -ExportCal=Изнасяне на календар +ExportCal=Експортиране на календар ExtSites=Импортиране на външни календари -ExtSitesEnableThisTool=Покажете външни календари (дефинирани в глобалната настройка) в бележника. Не засяга външните календари, дефинирани от потребители. +ExtSitesEnableThisTool=Показване на външни календари (дефинирани в глобалната настройка) в календара. Не засяга външни календари, дефинирани от потребители. ExtSitesNbOfAgenda=Брой календари AgendaExtNb=Календар № %s -ExtSiteUrlAgenda=URL адрес за достъп до файла .Ical +ExtSiteUrlAgenda=URL адрес за достъп до .ical файл ExtSiteNoLabel=Няма описание VisibleTimeRange=Видим времеви диапазон VisibleDaysRange=Видим диапазон от дни -AddEvent=Създаване събитие -MyAvailability=Моето разположение +AddEvent=Създаване на събитие +MyAvailability=Моята наличност ActionType=Тип събитие DateActionBegin=Начална дата на събитие -ConfirmCloneEvent=Сигурни ли сте че, искате да клонирате събитието %s ? +ConfirmCloneEvent=Сигурни ли сте, че искате да клонирате събитие %s? RepeatEvent=Повтаряне на събитие EveryWeek=Всяка седмица EveryMonth=Всеки месец diff --git a/htdocs/langs/bg_BG/banks.lang b/htdocs/langs/bg_BG/banks.lang index 2197dda55ff..e56b8c5deb8 100644 --- a/htdocs/langs/bg_BG/banks.lang +++ b/htdocs/langs/bg_BG/banks.lang @@ -7,15 +7,15 @@ BankName=Име на банката FinancialAccount=Сметка BankAccount=Банкова сметка BankAccounts=Банкови сметки -BankAccountsAndGateways=Банкови сметки | Портал +BankAccountsAndGateways=Банкови сметки | Портали ShowAccount=Показване на сметка AccountRef=Финансова сметка реф. -AccountLabel=Финансова сметка етикет +AccountLabel=Етикет на финансова сметка CashAccount=Сметка в брой CashAccounts=Парични сметки CurrentAccounts=Разплащателни сметки SavingAccounts=Спестовни сметки -ErrorBankLabelAlreadyExists=Етикета на финансовата сметка вече съществува +ErrorBankLabelAlreadyExists=Етикетът на финансовата сметка вече съществува BankBalance=Баланс BankBalanceBefore=Баланс преди BankBalanceAfter=Баланс след @@ -23,42 +23,42 @@ BalanceMinimalAllowed=Минимален разрешен баланс BalanceMinimalDesired=Минимален желан баланс InitialBankBalance=Начален баланс EndBankBalance=Краен баланс -CurrentBalance=Текущо салдо +CurrentBalance=Текущ баланс FutureBalance=Бъдещ баланс -ShowAllTimeBalance=Показване на баланса от началото +ShowAllTimeBalance=Показване на баланса от начало AllTime=От начало -Reconciliation=Помирение +Reconciliation=Съгласуване RIB=Номер на банкова сметка IBAN=IBAN номер -BIC=BIC/SWIFT Код -SwiftValid=BIC/SWIFT валиден -SwiftVNotalid=BIC/SWIFT невалиден -IbanValid=BAN валиден -IbanNotValid=BAN невалиден +BIC=BIC / SWIFT код +SwiftValid=BIC / SWIFT е валиден +SwiftVNotalid=BIC / SWIFT не е валиден +IbanValid=BAN е валиден +IbanNotValid=BAN не е валиден StandingOrders=Поръчки за директен дебит StandingOrder=Поръчка за директен дебит -AccountStatement=Отчет по сметка -AccountStatementShort=Отчет +AccountStatement=Извлечение по сметка +AccountStatementShort=Извлечение AccountStatements=Извлечения по сметки LastAccountStatements=Последни извлечения IOMonthlyReporting=Месечно отчитане BankAccountDomiciliation=Адрес на банката -BankAccountCountry=Профил страната -BankAccountOwner=Името на собственика на сметката -BankAccountOwnerAddress=Притежател на сметката адрес -RIBControlError=Проверката за достоверност на стойностите е неуспешна. Това означава, че информацията за този номер на сметката не е пълна или е неправилна (проверете страната, номерата и IBAN). +BankAccountCountry=Държава по местонахождение +BankAccountOwner=Титуляр на сметката +BankAccountOwnerAddress=Адрес на титуляра на сметката +RIBControlError=Проверката за достоверност на стойностите е неуспешна. Това означава, че информацията за този номер на сметка не е пълна или е неправилна (проверете страната, номерата и IBAN). CreateAccount=Създаване на сметка NewBankAccount=Нова сметка NewFinancialAccount=Нова финансова сметка MenuNewFinancialAccount=Нова финансова сметка -EditFinancialAccount=Редактиране на сметка -LabelBankCashAccount=Банка или етикета пари -AccountType=Тип на профила +EditFinancialAccount=Промяна на сметка +LabelBankCashAccount=Банков или паричен етикет +AccountType=Тип на сметката BankType0=Спестовна сметка BankType1=Разплащателна или картова сметка BankType2=Парична сметка -AccountsArea=Сметки -AccountCard=Картова сметка +AccountsArea=Секция със сметки +AccountCard=Карта на сметката DeleteAccount=Изтриване на акаунт ConfirmDeleteAccount=Сигурни ли сте, че искате да изтриете тази сметка? Account=Сметка @@ -67,103 +67,103 @@ BankTransactionForCategory=Банкови транзакции по катего RemoveFromRubrique=Премахване на връзката с категория RemoveFromRubriqueConfirm=Сигурни ли сте, че желаете да премахнете връзката между операцията и категорията? ListBankTransactions=Списък с банкови транзакции -IdTransaction=Transaction ID -BankTransactions=Банкови записи -BankTransaction=Банков запис -ListTransactions=Списък записи -ListTransactionsByCategory=Списък записи/категории -TransactionsToConciliate=Записи за равнение -Conciliable=Може да се примири -Conciliate=Reconcile -Conciliation=Помирение +IdTransaction=Идентификатор на транзакция +BankTransactions=Банкови транзакции +BankTransaction=Банкова транзакция +ListTransactions=Списък транзакции +ListTransactionsByCategory=Списък транзакции по категория +TransactionsToConciliate=Транзакции за съгласуване +Conciliable=Може да се съгласува +Conciliate=Съгласуване +Conciliation=Съгласуване SaveStatementOnly=Запазете само извлечението ReconciliationLate=Късно съгласуване -IncludeClosedAccount=Включват затворени сметки -OnlyOpenedAccount=Само открити сметки -AccountToCredit=Профил на кредитен +IncludeClosedAccount=Включва затворени сметки +OnlyOpenedAccount=Само отворени сметки +AccountToCredit=Сметка за кредитиране AccountToDebit=Сметка за дебитиране -DisableConciliation=Деактивирате функцията помирение за тази сметка -ConciliationDisabled=Помирение функция инвалиди -LinkedToAConciliatedTransaction=Свързан е със съгласуван запис -StatusAccountOpened=Отворен -StatusAccountClosed=Затворен +DisableConciliation=Деактивиране на функцията за съгласуване за тази сметка +ConciliationDisabled=Функцията за съгласуване е деактивирана +LinkedToAConciliatedTransaction=Свързано със съгласувана транзакция +StatusAccountOpened=Отворена +StatusAccountClosed=Затворена AccountIdShort=Номер LineRecord=Транзакция -AddBankRecord=Добавяне на запис -AddBankRecordLong=Ръчно добавяне на запис +AddBankRecord=Добавяне на транзакция +AddBankRecordLong=Ръчно добавяне на транзакция Conciliated=Съгласувано -ConciliatedBy=Съгласуват от -DateConciliating=Reconcile дата -BankLineConciliated=Записите са съгласувани +ConciliatedBy=Съгласувано от +DateConciliating=Дата на съгласуване +BankLineConciliated=Транзакцията е съгласувана Reconciled=Съгласувано NotReconciled=Не е съгласувано -CustomerInvoicePayment=Клиентско плащане -SupplierInvoicePayment=Плащане на доставчик +CustomerInvoicePayment=Плащане от клиент +SupplierInvoicePayment=Плащане към доставчик SubscriptionPayment=Плащане на членски внос WithdrawalPayment=Платежно нареждане за дебит -SocialContributionPayment=Social/fiscal tax payment +SocialContributionPayment=Плащане на социални / фискални такси BankTransfer=Банков превод BankTransfers=Банкови преводи MenuBankInternalTransfer=Вътрешен превод -TransferDesc=Прехвърляне от един акаунт в друг, Dolibarr ще направи два записа (дебитна сметка в източник и кредит в целевата сметка). За тази транзакция ще се използва същата сума (с изключение на знак), етикет и дата) +TransferDesc=Прехвърляне от един акаунт в друг, Dolibarr ще направи два записа (дебит от сметката на източника и кредит в целевата сметка). За тази транзакция ще се използва същата сума (с изключение на подписа), етикет и дата. TransferFrom=От TransferTo=За -TransferFromToDone=Прехвърлянето от %s на %s на %s %s беше записано. +TransferFromToDone=Прехвърлянето от %s към %s на %s %s беше записано. CheckTransmitter=Предавател ValidateCheckReceipt=Валидиране на тази чекова разписка? -ConfirmValidateCheckReceipt=Сигурни ли сте, че искате да потвърдите получаването на чека, няма да е възможна промяна след като това бъде направено? -DeleteCheckReceipt=Да се изтрие ли тази чекова разписка? +ConfirmValidateCheckReceipt=Сигурни ли сте, че искате да валидирате тази чекова разписка, няма да е възможна промяна след като това бъде направено? +DeleteCheckReceipt=Изтриване на тази чекова разписка? ConfirmDeleteCheckReceipt=Сигурни ли сте, че искате да изтриете тази чекова разписка? -BankChecks=Банката проверява +BankChecks=Банкови чекове BankChecksToReceipt=Чекове чакащи депозит -ShowCheckReceipt=Покажи проверете получаване депозит +ShowCheckReceipt=Покажи разписка за получаване на чеков депозит NumberOfCheques=Брой чекове -DeleteTransaction=Изтриване на запис -ConfirmDeleteTransaction=Сигурни ли сте че искате да изтриете този запис ? -ThisWillAlsoDeleteBankRecord=Това ще изтрие генерирания банков запис +DeleteTransaction=Изтриване на транзакция +ConfirmDeleteTransaction=Сигурни ли сте, че искате да изтриете тази транзакция? +ThisWillAlsoDeleteBankRecord=Това ще изтрие и генерираната банкова транзакция BankMovements=Движения -PlannedTransactions=Планирани записи +PlannedTransactions=Планирани транзакции Graph=Графики -ExportDataset_banque_1=Банкови записи и извлечение по сметка +ExportDataset_banque_1=Банкови транзакции и извлечение по сметка ExportDataset_banque_2=Депозитна разписка -TransactionOnTheOtherAccount=Транзакциите по друга сметка +TransactionOnTheOtherAccount=Транзакции по друга сметка PaymentNumberUpdateSucceeded=Номерът на плащането е актуализиран успешно -PaymentNumberUpdateFailed=Плащане брой не може да бъде актуализиран +PaymentNumberUpdateFailed=Номерът на плащането не можа да бъде актуализиран PaymentDateUpdateSucceeded=Датата на плащането е актуализирана успешно -PaymentDateUpdateFailed=Дата на плащане не може да бъде актуализиран -Transactions=Сделки -BankTransactionLine=Банков запис +PaymentDateUpdateFailed=Датата на плащане не можа да бъде актуализирана +Transactions=Транзакции +BankTransactionLine=Банкова транзакция AllAccounts=Всички банкови и касови сметки BackToAccount=Обратно към сметка ShowAllAccounts=Покажи за всички сметки -FutureTransaction=Бъдещи транзакции. Невъзможно равнение. -SelectChequeTransactionAndGenerate=Изберете / филтрирайте чековете, които включва разписка за депозит и кликнете върху "Create". +FutureTransaction=Бъдеща транзакция. Не може да се съгласува. +SelectChequeTransactionAndGenerate=Изберете / Филтрирайте чековете, които да включите в депозитна разписка и кликнете върху "Създаване". InputReceiptNumber=Изберете банковото извлечение, свързано със съгласуването. Използвайте числова стойност, която е във вида: YYYYMM или YYYYMMDD -EventualyAddCategory=В крайна сметка, да посочите категорията, в която да се класифицират записи +EventualyAddCategory=В крайна сметка, определете категория, в която да класифицирате транзакциите ToConciliate=Да се съгласува ли? -ThenCheckLinesAndConciliate=След това проверете линии в отчета на банката и кликнете -DefaultRIB=По подразбиране BAN +ThenCheckLinesAndConciliate=След това проверете редовете в банковото извлечение и кликнете +DefaultRIB=BAN по подразбиране AllRIB=Всички BAN LabelRIB=BAN етикет NoBANRecord=Няма BAN запис -DeleteARib=Изтри BAN запис +DeleteARib=Изтриване на BAN запис ConfirmDeleteRib=Сигурни ли сте, че искате да изтриете този BAN запис? RejectCheck=Чекът е върнат ConfirmRejectCheck=Сигурни ли сте, искате да маркирате този чек като е отхвърлен? RejectCheckDate=Дата, на която чекът е върнат CheckRejected=Чекът е върнат -CheckRejectedAndInvoicesReopened=Чекът е върнат и фактурата е отворена +CheckRejectedAndInvoicesReopened=Чекът е върнат и фактурата е повторно отворена BankAccountModelModule=Шаблони на документи за банкови сметки -DocumentModelSepaMandate=Шаблон за SEPA нареждания . Полезно само за европейските страни в ЕИО. -DocumentModelBan=Шаблон на който да се принтира страница с BAN информация -NewVariousPayment=Ново смесено плащане -VariousPayment=Смесено плащане +DocumentModelSepaMandate=Шаблон за SEPA нареждания. Полезно само за европейските страни в ЕИО. +DocumentModelBan=Шаблон за отпечатване на страница с информация за BAN. +NewVariousPayment=Ново разнородно плащане +VariousPayment=Разнородно плащане VariousPayments=Разнородни плащания -ShowVariousPayment=Показване на смесено плащане -AddVariousPayment=Добавяне на смесено плащане +ShowVariousPayment=Показване на разнородно плащане +AddVariousPayment=Добавяне на разнородно плащане SEPAMandate=SEPA нареждане YourSEPAMandate=Вашите SEPA нареждания -FindYourSEPAMandate=Това е вашето SEPA нареждане да упълномощите нашата компания да направи поръчка за директен дебит към вашата банка. Върнете го подписано (сканиране на подписания документ) или го изпратете по пощата на -AutoReportLastAccountStatement=Автоматично попълнете полето „номер на банково извлечение“ с последния номер на извлечение, когато правите равнение +FindYourSEPAMandate=Това е вашето SEPA нареждане, с което да упълномощите нашата компания да направи поръчка за директен дебит към вашата банка. Върнете го подписано (сканиран подписан документ) или го изпратете по пощата на +AutoReportLastAccountStatement=Автоматично попълване на полето „номер на банково извлечение“ с последния номер на извлечение, когато правите съгласуване. CashControl=Лимит за плащане в брой на POS NewCashFence=Нов лимит за плащане в брой diff --git a/htdocs/langs/bg_BG/bills.lang b/htdocs/langs/bg_BG/bills.lang index 8a70a7d26d0..cd16caffcc6 100644 --- a/htdocs/langs/bg_BG/bills.lang +++ b/htdocs/langs/bg_BG/bills.lang @@ -9,34 +9,34 @@ BillsCustomersUnpaidForCompany=Неплатени фактури за прода BillsSuppliersUnpaid=Неплатени фактури за доставка BillsSuppliersUnpaidForCompany=Неплатени фактури за доставка за %s BillsLate=Забавени плащания -BillsStatistics=Статистика за продажни фактури +BillsStatistics=Статистика от фактури за продажба BillsStatisticsSuppliers=Статистика за фактури на доставка DisabledBecauseDispatchedInBookkeeping=Деактивирано, защото фактурата е изпратена за осчетоводяване DisabledBecauseNotLastInvoice=Деактивирано, защото фактурата не може да се изтрие. Има регистрирани следващи фактури с поредни номера и това ще създаде дупки в брояча. DisabledBecauseNotErasable=Деактивирано, защото не може да бъде изтрито InvoiceStandard=Стандартна фактура InvoiceStandardAsk=Стандартна фактура -InvoiceStandardDesc=Тази фактурата е фактура от най-общ вид. +InvoiceStandardDesc=Този вид фактура се използва като стандартна фактура. InvoiceDeposit=Фактура за авансово плащане InvoiceDepositAsk=Фактура за авансово плащане InvoiceDepositDesc=Този вид фактура се използва, когато е получено авансово плащане. InvoiceProForma=Проформа фактура InvoiceProFormaAsk=Проформа фактура InvoiceProFormaDesc=Проформа фактура е първообраз на една истинска фактура, но няма счетоводна стойност. -InvoiceReplacement=Подменяща фактура -InvoiceReplacementAsk=Фактура подменяща друга фактура -InvoiceReplacementDesc=Подменяща фактура се използва за анулиране и пълно заменяне на фактура без получено плащане.

Забележка: Само фактури без плащания по тях могат да бъдат заменяни. Ако фактурата, която заменяте, все още не е приключена, то тя ще бъде автоматично приключена като „Изоставена“. +InvoiceReplacement=Заменяща фактура +InvoiceReplacementAsk=Фактура заменяща друга фактура +InvoiceReplacementDesc=Заменяща фактура се използва за анулиране и пълно заменяне на фактура без получено плащане.

Забележка: Само фактури без плащания по тях могат да бъдат заменяни. Ако фактурата, която заменяте, все още не е приключена, то тя ще бъде автоматично приключена като „Изоставена“. InvoiceAvoir=Кредитно известие InvoiceAvoirAsk=Кредитно известие за коригиране на фактура InvoiceAvoirDesc=Кредитното известие е отрицателна фактура, използвана за коригиране на факта, че фактурата показва сума, която се различава от действително платената сума (например клиентът е платил твърде много по грешка или няма да плати пълната сума, тъй като някои продукти са върнати). invoiceAvoirWithLines=Създаване на кредитно известие с редове от оригиналната фактура invoiceAvoirWithPaymentRestAmount=Създаване на кредитно известие с неплатения остатък от оригиналната фактура -invoiceAvoirLineWithPaymentRestAmount=Кредитно известие с неплатен остатък -ReplaceInvoice=Подмяна на фактура %s -ReplacementInvoice=Подменяща фактура +invoiceAvoirLineWithPaymentRestAmount=Кредитно известие за неплатен остатък +ReplaceInvoice=Заменяне на фактура %s +ReplacementInvoice=Заменяща фактура ReplacedByInvoice=Заменена с фактура %s ReplacementByInvoice=Заменена с фактура -CorrectInvoice=Правилна фактура %s +CorrectInvoice=Коректна фактура %s CorrectionInvoice=Коригираща фактура UsedByInvoice=Използва се за плащане на фактура %s ConsumedBy=Консумирана от @@ -44,19 +44,19 @@ NotConsumed=Не е консумирана NoReplacableInvoice=Няма заменими фактури NoInvoiceToCorrect=Няма фактура за коригиране InvoiceHasAvoir=Източник на едно или няколко кредитни известия -CardBill=Фактурна карта -PredefinedInvoices=Предварително-дефинирани Фактури +CardBill=Карта на фактура +PredefinedInvoices=Предварително дефинирани фактури Invoice=Фактура PdfInvoiceTitle=Фактура Invoices=Фактури InvoiceLine=Фактурен ред -InvoiceCustomer=Продажна фактура -CustomerInvoice=Продажна фактура -CustomersInvoices=Продажни фактури +InvoiceCustomer=Фактура за продажба +CustomerInvoice=Фактура за продажба +CustomersInvoices=Фактури за продажба SupplierInvoice=Фактура за доставка SuppliersInvoices=Фактури за доставка SupplierBill=Фактура за доставка -SupplierBills=Доставни фактури +SupplierBills=Фактури за доставка Payment=Плащане PaymentBack=Обратно плащане CustomerInvoicePaymentBack=Обратно плащане @@ -64,7 +64,7 @@ Payments=Плащания PaymentsBack=Обратни плащания paymentInInvoiceCurrency=във валутата на фактурите PaidBack=Платено обратно -DeletePayment=Изтрий плащане +DeletePayment=Изтриване на плащане ConfirmDeletePayment=Сигурни ли сте че, искате да изтриете това плащане? ConfirmConvertToReduc=Искате ли да конвертирате това %s в абсолютна отстъпка? ConfirmConvertToReduc2=Сумата ще бъде запазена измежду всички отстъпки и може да се използва като отстъпка за текуща или бъдеща фактура за този клиент. @@ -74,7 +74,7 @@ SupplierPayments=Плащания към доставчици ReceivedPayments=Получени плащания ReceivedCustomersPayments=Плащания получени от клиенти PayedSuppliersPayments=Направени плащания към доставчици -ReceivedCustomersPaymentsToValid=Получени плащания от клиенти за валидация +ReceivedCustomersPaymentsToValid=Получени плащания от клиенти за валидиране PaymentsReportsForYear=Отчети за плащания за %s PaymentsReports=Отчети за плащания PaymentsAlreadyDone=Вече направени плащания @@ -91,33 +91,33 @@ PaymentTerm=Условие за плащане PaymentConditions=Условия за плащане PaymentConditionsShort=Условия за плащане PaymentAmount=Сума за плащане -PaymentHigherThanReminderToPay=Плащането е по-високо от напомнянето за плащане +PaymentHigherThanReminderToPay=Плащането е с по-висока стойност в сравнение с това в напомнянето HelpPaymentHigherThanReminderToPay=Внимание, сумата за плащане на една или повече фактури е по-висока от дължимата сума за плащане.
Редактирайте записа си, в противен случай потвърдете и обмислете създаването на кредитно известие за получената сума за всяка надплатена фактура. HelpPaymentHigherThanReminderToPaySupplier=Внимание, сумата за плащане на една или повече фактури е по-висока от дължимата сума за плащане.
Редактирайте записа си, в противен случай потвърдете и обмислете създаването на кредитно известие за излишъка, платен за всяка надплатена фактура. -ClassifyPaid=Класифицирай 'Платено' -ClassifyPaidPartially=Класифицирай 'Платено частично' -ClassifyCanceled=Класифицирай 'Изоставено' -ClassifyClosed=Класифицирай 'Затворено' -ClassifyUnBilled=Класифицирай 'Нетаксувано' -CreateBill=Създай фактура +ClassifyPaid=Класифициране като 'Платена' +ClassifyPaidPartially=Класифициране като 'Частично платена' +ClassifyCanceled=Класифициране като 'Изоставена' +ClassifyClosed=Класифициране като 'Приключена' +ClassifyUnBilled=Класифициране като 'Не таксувана' +CreateBill=Създаване на фактура CreateCreditNote=Създаване на кредитно известие AddBill=Създаване на фактура или кредитно известие -AddToDraftInvoices=Добави към фактура чернова -DeleteBill=Изтрий фактура -SearchACustomerInvoice=Търсене за продажна фактура +AddToDraftInvoices=Добавяне към чернова фактура +DeleteBill=Изтриване на фактура +SearchACustomerInvoice=Търсене на фактура за продажба SearchASupplierInvoice=Търсене на фактура за доставка -CancelBill=Отказване на фактура +CancelBill=Анулиране на фактура SendRemindByMail=Изпращане на напомняне по имейл DoPayment=Въвеждане на плащане DoPaymentBack=Въвеждане на възстановяване ConvertToReduc=Маркиране като наличен кредит ConvertExcessReceivedToReduc=Превръщане на получения излишък в наличен кредит ConvertExcessPaidToReduc=Превръщане на платения излишък в налична отстъпка -EnterPaymentReceivedFromCustomer=Въведете плащане получено от клиент -EnterPaymentDueToCustomer=Дължимото плащане на клиента -DisabledBecauseRemainderToPayIsZero=Деактивирано понеже остатъка за плащане е нула +EnterPaymentReceivedFromCustomer=Въведете плащане, получено от клиент +EnterPaymentDueToCustomer=Извършване на плащане от клиента +DisabledBecauseRemainderToPayIsZero=Деактивирано, тъй като остатъка за плащане е нула PriceBase=Базова цена -BillStatus=Статус на фактурата +BillStatus=Статус на фактура StatusOfGeneratedInvoices=Състояние на генерираните фактури BillStatusDraft=Чернова (трябва да се валидира) BillStatusPaid=Платена @@ -128,7 +128,7 @@ BillStatusValidated=Валидирана (трябва да се плати) BillStatusStarted=Започната BillStatusNotPaid=Неплатена BillStatusNotRefunded=Не възстановено -BillStatusClosedUnpaid=Затворена (неплатена) +BillStatusClosedUnpaid=Приключена (неплатена) BillStatusClosedPaidPartially=Платена (частично) BillShortStatusDraft=Чернова BillShortStatusPaid=Платена @@ -140,7 +140,7 @@ BillShortStatusValidated=Валидирана BillShortStatusStarted=Започната BillShortStatusNotPaid=Неплатена BillShortStatusNotRefunded=Не възстановено -BillShortStatusClosedUnpaid=Затворена +BillShortStatusClosedUnpaid=Приключена BillShortStatusClosedPaidPartially=Платена (частично) PaymentStatusToValidShort=За валидиране ErrorVATIntraNotConfigured=Все още не е определен вътреобщностен ДДС номер @@ -150,7 +150,7 @@ ErrorBillNotFound=Фактура %s не съществува ErrorInvoiceAlreadyReplaced=Грешка, опитахте да валидирате фактура, за да замените фактура %s, но тя вече е заменена с фактура %s. ErrorDiscountAlreadyUsed=Грешка, вече се използва отстъпка ErrorInvoiceAvoirMustBeNegative=Грешка, коригиращата фактура трябва да има отрицателна сума -ErrorInvoiceOfThisTypeMustBePositive=Грешка, този тип фактура трябва да има положителна стойност, +ErrorInvoiceOfThisTypeMustBePositive=Грешка, този тип фактура трябва да има положителна стойност ErrorCantCancelIfReplacementInvoiceNotValidated=Грешка, не може да се анулира фактура, която е била заменена от друга фактура, която все още е в състояние на чернова ErrorThisPartOrAnotherIsAlreadyUsedSoDiscountSerieCantBeRemoved=Тази или друга част вече е използвана, така че сериите с отстъпки не могат да бъдат премахнати. BillFrom=От @@ -173,7 +173,7 @@ OtherBills=Други фактури DraftBills=Чернови фактури CustomersDraftInvoices=Чернови фактури за продажба SuppliersDraftInvoices=Чернови фактури за доставка -Unpaid=Неплатен +Unpaid=Неплатено ConfirmDeleteBill=Сигурни ли сте, че искате да изтриете тази фактура? ConfirmValidateBill=Сигурни ли сте че, искате да валидирате тази фактура %s ? ConfirmUnvalidateBill=Сигурен ли сте, че искате да върнете фактура %s в състояние на чернова? @@ -184,8 +184,8 @@ ConfirmClassifyPaidPartially=Сигурни ли сте че, искате да ConfirmClassifyPaidPartiallyQuestion=Тази фактура не е платена изцяло. Каква е причината за приключване на тази фактура? ConfirmClassifyPaidPartiallyReasonAvoir=Неплатения остатък (%s %s) е предоставена отстъпка, тъй като плащането е извършено преди срока за плащане. Уреждам ДДС с кредитно известие. ConfirmClassifyPaidPartiallyReasonDiscount=Неплатения остатък (%s %s) е предоставена отстъпка, тъй като плащането е извършено преди срока за плащане. -ConfirmClassifyPaidPartiallyReasonDiscountNoVat=Неплатеният остатък (%s %s) е дадена отстъпка, защото плащането е направено преди срока за плащане. Приемам да се загуби ДДС по тази отстъпка. -ConfirmClassifyPaidPartiallyReasonDiscountVat=Неплатеният остатък (%s %s) е дадена отстъпка, защото плащането е направено преди срока за плащане Възстановявам ДДС по тази отстъпка без кредитно известие. +ConfirmClassifyPaidPartiallyReasonDiscountNoVat=Неплатеният остатък (%s %s) е предоставена отстъпка, защото плащането е направено преди срока за плащане. Приемам да се загуби ДДС по тази отстъпка. +ConfirmClassifyPaidPartiallyReasonDiscountVat=Неплатеният остатък (%s %s) е предоставена отстъпка, защото плащането е направено преди срока за плащане. Възстановявам ДДС по тази отстъпка без кредитно известие. ConfirmClassifyPaidPartiallyReasonBadCustomer=Лош клиент ConfirmClassifyPaidPartiallyReasonProductReturned=Продукти частично върнати ConfirmClassifyPaidPartiallyReasonOther=Сумата е изоставена по друга причина @@ -195,19 +195,19 @@ ConfirmClassifyPaidPartiallyReasonAvoirDesc=Използвайте този из ConfirmClassifyPaidPartiallyReasonBadCustomerDesc= Лош клиент е клиент, който отказва да плати дълга си. ConfirmClassifyPaidPartiallyReasonProductReturnedDesc=Този избор се използва, когато плащането не е пълно, тъй като някои от продуктите са били върнати ConfirmClassifyPaidPartiallyReasonOtherDesc=Използвайте този избор, ако всички останали не са подходящи, например в следната ситуация:\n- плащането не е завършено, защото някои продукти са изпратени обратно\n- предявената сума е задължителна, понеже отстъпката е забравена\nВъв всички случаи, надхвърлената сума трябва да бъде коригирана в счетоводната система, чрез създаване на кредитно известие. -ConfirmClassifyAbandonReasonOther=Друг -ConfirmClassifyAbandonReasonOtherDesc=Този избор ще бъде използван във всички останали случаи. За пример, защото имате намерение да създадете заменяща фактура. +ConfirmClassifyAbandonReasonOther=Друго +ConfirmClassifyAbandonReasonOtherDesc=Този избор ще се използва във всички останали случаи. Например, защото планирате да създадете заместваща фактура. ConfirmCustomerPayment=Потвърждавате ли това входящо плащане за %s %s? ConfirmSupplierPayment=Потвърждавате ли това изходящо плащане за %s %s? ConfirmValidatePayment=Сигурни ли сте, че искате да валидирате това плащане? Не се допуска промяна след валидиране на плащането. -ValidateBill=Валидирай фактура -UnvalidateBill=Отвалидирай фактура +ValidateBill=Валидиране на фактура +UnvalidateBill=Повторно отваряне на фактура NumberOfBills=Брой фактури NumberOfBillsByMonth=Брой фактури на месец AmountOfBills=Сума на фактури AmountOfBillsHT=Сума на фактури (без ДДС) AmountOfBillsByMonthHT=Сума на фактури по месец (без данък) -ShowSocialContribution=Покажи социален/фискален данък +ShowSocialContribution=Показване на социален / фискален данък ShowBill=Покажи фактура ShowInvoice=Покажи фактура ShowInvoiceReplace=Покажи заменяща фактура @@ -215,12 +215,12 @@ ShowInvoiceAvoir=Покажи кредитно известие ShowInvoiceDeposit=Показване на авансова фактура ShowInvoiceSituation=Показване на ситуационна фактура ShowPayment=Покажи плащане -AlreadyPaid=Вече е платена -AlreadyPaidBack=Вече е платена обратно +AlreadyPaid=Вече платено +AlreadyPaidBack=Вече платено обратно AlreadyPaidNoCreditNotesNoDeposits=Вече платено (без кредитни известия и авансови плащания) -Abandoned=Изоставен +Abandoned=Изоставена RemainderToPay=Неплатен остатък -RemainderToTake=Остатъчна сума за взимане +RemainderToTake=Остатъчна сума за получаване RemainderToPayBack=Оставаща сума за възстановяване Rest=Чакаща AmountExpected=Претендирана сума @@ -235,19 +235,19 @@ StandingOrder=Нареждане за директен дебит NoDraftBills=Няма чернови фактури NoOtherDraftBills=Няма други чернови фактури NoDraftInvoices=Няма чернови фактури -RefBill=Фактура код +RefBill=Реф. фактура ToBill=За фактуриране RemainderToBill=Напомняне за фактуриране SendBillByMail=Изпращане на фактура по имейл SendReminderBillByMail=Изпращане на напомняне по имейл RelatedCommercialProposals=Свързани търговски предложения RelatedRecurringCustomerInvoices=Свързани повтарящи се фактури за продажба -MenuToValid=За валидни +MenuToValid=За валидиране DateMaxPayment=Плащането се дължи на DateInvoice=Дата на фактура DatePointOfTax=Дата на данъчно събитие NoInvoice=Няма фактура -ClassifyBill=Класифицирай фактурата +ClassifyBill=Класифициране на фактура SupplierBillsToPay=Неплатени фактури за доставка CustomerBillsUnpaid=Неплатени фактури за продажба NonPercuRecuperable=Невъзстановими @@ -256,31 +256,31 @@ SetMode=Задайте видът на плащане SetRevenuStamp=Задайте гербова марка (бандерол) Billed=Фактурирано RecurringInvoices=Повтарящи се фактури -RepeatableInvoice=Шаблон за фактура -RepeatableInvoices=Шаблони за фактури +RepeatableInvoice=Шаблонна фактура +RepeatableInvoices=Шаблонни фактури Repeatable=Шаблон Repeatables=Шаблони -ChangeIntoRepeatableInvoice=Превърни в шаблон за фактура -CreateRepeatableInvoice=Създай шаблон за фактура -CreateFromRepeatableInvoice=Създай от шаблон за фактура +ChangeIntoRepeatableInvoice=Конвертиране в шаблонна фактура +CreateRepeatableInvoice=Създаване на шаблонна фактура +CreateFromRepeatableInvoice=Създаване от шаблонна фактура CustomersInvoicesAndInvoiceLines=Фактури клиенти и техните детайли -CustomersInvoicesAndPayments=Продажни фактури и плащания +CustomersInvoicesAndPayments=Фактури за продажба и плащания ExportDataset_invoice_1=Фактури за продажба и техните детайли -ExportDataset_invoice_2=Продажни фактури и плащания -ProformaBill=Проформа фактура: -Reduction=Намаляване +ExportDataset_invoice_2=Фактури за продажба и плащания +ProformaBill=Проформа Фактура +Reduction=Отстъпка ReductionShort=Отст. -Reductions=Намаления +Reductions=Отстъпки ReductionsShort=Отст. Discounts=Отстъпки -AddDiscount=Създай отстъпка -AddRelativeDiscount=Създай относителна отстъпка -EditRelativeDiscount=Редактирй относителна отстъпка -AddGlobalDiscount=Създай абсолютна отстъпка -EditGlobalDiscounts=Редактирай абсолютна отстъпка -AddCreditNote=Създавай кредитно известие +AddDiscount=Създаване на отстъпка +AddRelativeDiscount=Създаване на относителна отстъпка +EditRelativeDiscount=Промяна на относителна отстъпка +AddGlobalDiscount=Създаване на абсолютна отстъпка +EditGlobalDiscounts=Промяна на абсолютна отстъпка +AddCreditNote=Създаване на кредитно известие ShowDiscount=Покажи отстъпка -ShowReduc=Покажи приспадане +ShowReduc=Покажи намалението RelativeDiscount=Относителна отстъпка GlobalDiscount=Глобална отстъпка CreditNote=Кредитно известие @@ -297,30 +297,30 @@ CreditNoteDepositUse=Фактурата трябва да бъде валиди NewGlobalDiscount=Нова абсолютна отстъпка NewRelativeDiscount=Нова относителна отстъпка DiscountType=Тип отстъпка -NoteReason=Бележка/Причина +NoteReason=Бележка / Причина ReasonDiscount=Причина -DiscountOfferedBy=Предоставено от +DiscountOfferedBy=Предоставена от DiscountStillRemaining=Налични отстъпки или кредити DiscountAlreadyCounted=Изразходвани отстъпки или кредити CustomerDiscounts=Отстъпки за клиенти SupplierDiscounts=Отстъпки на доставчици -BillAddress=Фактурен адрес +BillAddress=Адрес за фактуриране HelpEscompte=Тази отстъпка представлява отстъпка, предоставена на клиента, тъй като плащането е извършено преди срока на плащане. HelpAbandonBadCustomer=Тази сума е изоставена (поради некоректен (лош) клиент) и се счита за изключителна загуба. HelpAbandonOther=Тази сума е изоставена, тъй като е била грешка (Например: неправилен клиент или фактура заменена от друга) -IdSocialContribution=Id за плащане на социален/фискален данък +IdSocialContribution=Идентификатор за плащане на социален / фискален данък PaymentId=Плащане ID PaymentRef=Реф. плащане InvoiceId=Фактура ID -InvoiceRef=Фактура код -InvoiceDateCreation=Фактура дата създаване -InvoiceStatus=Фактурата статус -InvoiceNote=Фактура бележка -InvoicePaid=Фактура плащане +InvoiceRef=Реф. фактура +InvoiceDateCreation=Дата на създаване на фактура +InvoiceStatus=Статус на фактура +InvoiceNote=Бележка за фактура +InvoicePaid=Фактурата е платена OrderBilled=Поръчката е фактурирана DonationPaid=Дарението е платено -PaymentNumber=Плащане номер -RemoveDiscount=Премахни отстъпка +PaymentNumber=Номер на плащане +RemoveDiscount=Премахване на отстъпка WatermarkOnDraftBill=Воден знак върху чернови фактури (няма ако е празно) InvoiceNotChecked=Не е избрана фактура ConfirmCloneInvoice=Сигурни ли сте, че искате да клонирате тази фактура %s ? @@ -334,11 +334,11 @@ TotalOfTwoDiscountMustEqualsOriginal=Общата сума на двете но ConfirmRemoveDiscount=Сигурни ли сте, че искате да премахнете тази отстъпка? RelatedBill=Свързана фактура RelatedBills=Свързани фактури -RelatedCustomerInvoices=Свързани продажни фактури +RelatedCustomerInvoices=Свързани фактури за продажба RelatedSupplierInvoices=Свързани фактури за доставка LatestRelatedBill=Последна свързана фактура WarningBillExist=Внимание, вече съществуват една или повече фактури -MergingPDFTool=Инструмент за sliwane на PDF +MergingPDFTool=Инструмент за обединяване на PDF документи AmountPaymentDistributedOnInvoice=Сума на плащане, разпределена по фактура PaymentOnDifferentThirdBills=Позволява плащания по различни фактури на контрагенти, но от едно и също дружество (фирма майка) PaymentNote=Бележка за плащане @@ -388,7 +388,7 @@ PaymentConditionPT_DELIVERY=При доставка PaymentConditionShortPT_ORDER=Поръчка PaymentConditionPT_ORDER=При поръчка PaymentConditionShortPT_5050=50-50 -PaymentConditionPT_5050=50% авансово, 50% при доставка +PaymentConditionPT_5050=50%% авансово, 50%% при доставка PaymentConditionShort10D=10 дни PaymentCondition10D=10 дни PaymentConditionShort10DENDMONTH=10 дни от края на месеца @@ -398,27 +398,27 @@ PaymentCondition14D=14 дни PaymentConditionShort14DENDMONTH=14 дни от края на месеца PaymentCondition14DENDMONTH=В рамките на 14 дни след края на месеца FixAmount=Фиксирана сума -VarAmount=Променлива сума (%% общ.) +VarAmount=Променлива сума (%% общо) VarAmountOneLine=Променлива сума (%% общ.) - 1 ред с етикет "%s" # PaymentType PaymentTypeVIR=Банков превод PaymentTypeShortVIR=Банков превод PaymentTypePRE=Платежно нареждане за директен дебит PaymentTypeShortPRE=Платежно нареждане за дебит -PaymentTypeLIQ=Касово плащане в брой +PaymentTypeLIQ=Плащане в брой PaymentTypeShortLIQ=В брой PaymentTypeCB=Плащане с карта PaymentTypeShortCB=С карта -PaymentTypeCHQ=Чек -PaymentTypeShortCHQ=Чек +PaymentTypeCHQ=Плащане с чек +PaymentTypeShortCHQ=С чек PaymentTypeTIP=TIP (Документи срещу плащане) PaymentTypeShortTIP=Плащане по TIP PaymentTypeVAD=Онлайн плащане PaymentTypeShortVAD=Онлайн плащане PaymentTypeTRA=Банково извлечение PaymentTypeShortTRA=Чернова -PaymentTypeFAC=Factor -PaymentTypeShortFAC=Factor +PaymentTypeFAC=Фактор +PaymentTypeShortFAC=Фактор BankDetails=Банкови данни BankCode=Банков код DeskCode=Код на клон @@ -427,17 +427,17 @@ BankAccountNumberKey=Контролната сума Residence=Адрес IBANNumber=IBAN номер на сметка IBAN=IBAN -BIC=BIC/SWIFT +BIC=BIC / SWIFT BICNumber=BIC/SWIFT код ExtraInfos=Допълнителна информация -RegulatedOn=Регулация на -ChequeNumber=Чек NВ° -ChequeOrTransferNumber=Чек/трансфер NВ° +RegulatedOn=Регулирано на +ChequeNumber=Чек № +ChequeOrTransferNumber=Чек / Трансфер № ChequeBordereau=Чек график ChequeMaker=Чек/трансфер предавател ChequeBank=Банка на чека CheckBank=Чек -NetToBePaid=Нетно за плащане +NetToBePaid=Нето за плащане PhoneNumber=Тел FullPhoneNumber=Телефон TeleFax=Факс @@ -445,17 +445,17 @@ PrettyLittleSentence=Приемене на размера на плащания IntracommunityVATNumber=ДДС № PaymentByChequeOrderedTo=Чекови плащания (с ДДС) се извършват до %s, изпратени на адрес PaymentByChequeOrderedToShort=Чекови плащания (с ДДС) се извършват до -SendTo=изпратено на +SendTo=изпратено до PaymentByTransferOnThisBankAccount=Плащане, чрез превод по следната банкова сметка -VATIsNotUsedForInvoice=* Неприложим ДДС, art-293BB от CGI +VATIsNotUsedForInvoice=* Неприложим ДДС, art-293B от CGI LawApplicationPart1=Чрез прилагането на закон 80.335 от 12/05/80 LawApplicationPart2=стоките остават собственост на LawApplicationPart3=продавача до пълното плащане на -LawApplicationPart4=цената им. -LimitedLiabilityCompanyCapital=SARL със столица +LawApplicationPart4=тяхната цена. +LimitedLiabilityCompanyCapital=SARL с капитал от UseLine=Приложи -UseDiscount=Използвай отстъпка -UseCredit=Използвай кредит +UseDiscount=Използване на отстъпка +UseCredit=Използване на кредит UseCreditNoteInInvoicePayment=Намаляване на сумата за плащане с този кредит MenuChequeDeposits=Чекови депозити MenuCheques=Чекове @@ -465,60 +465,60 @@ ChequesReceipts=Чекови разписки ChequesArea=Секция за чекови депозити ChequeDeposits=Чекови депозити Cheques=Чекове -DepositId=Id депозит +DepositId=Идентификатор на депозит NbCheque=Брой чекове CreditNoteConvertedIntoDiscount=Това %s е преобразувано в %s UsBillingContactAsIncoiveRecipientIfExist=Използване на контакт/адрес с тип "контакт за фактуриране" вместо адрес на контрагента като получател на фактури ShowUnpaidAll=Покажи всички неплатени фактури -ShowUnpaidLateOnly=Покажи само неплатените фактури с просрочено плащане -PaymentInvoiceRef=Платежна фактуре %s -ValidateInvoice=Валидирай фактура +ShowUnpaidLateOnly=Покажи само забавените неплатени фактури +PaymentInvoiceRef=Плащане по фактура %s +ValidateInvoice=Валидиране на фактура ValidateInvoices=Потвърждаване на фактури -Cash=Пари в брой -Reported=Закъснение +Cash=В брой +Reported=Закъснели DisabledBecausePayments=Не е възможно, тъй като има някои плащания -CantRemovePaymentWithOneInvoicePaid=Не може да се премахне плащането, тъй като има най-малко една фактура, класифицирана като платена +CantRemovePaymentWithOneInvoicePaid=Не може да се премахне плащането, тъй като има най-малко една фактура класифицирана като платена. ExpectedToPay=Очаквано плащане CantRemoveConciliatedPayment=Съгласуваното плащане не може да се премахне -PayedByThisPayment=Плаща от това плащане +PayedByThisPayment=Платено от това плащане ClosePaidInvoicesAutomatically=Класифицирайте "Платени" всички стандартни, авансови или заместващи фактури, които са платени напълно. -ClosePaidCreditNotesAutomatically=Класифицирай "Платени" всички кредитни известия изцяло обратно платени. +ClosePaidCreditNotesAutomatically=Класифицирай 'Платени' всички кредитни известия, които са изцяло платени обратно. ClosePaidContributionsAutomatically=Класифицирайте "Платени" всички социални или фискални вноски, които са платени напълно. AllCompletelyPayedInvoiceWillBeClosed=Всички фактури без остатък за плащане ще бъдат автоматично приключени със статус "Платени". ToMakePayment=Плати ToMakePaymentBack=Плати обратно ListOfYourUnpaidInvoices=Списък с неплатени фактури -NoteListOfYourUnpaidInvoices=Бележка: Този списък съдържа само фактури за контрагенти, които са свързани като търговски представители. -RevenueStamp=Приходен печат +NoteListOfYourUnpaidInvoices=Забележка: Този списък съдържа само фактури за контрагенти, с които сте свързан като търговски представител. +RevenueStamp=Приходен печат (бандерол) YouMustCreateInvoiceFromThird=Тази опция е налична само при създаване на фактура от раздел "Клиент" на контрагента YouMustCreateInvoiceFromSupplierThird=Тази опция е налична само при създаването на фактура от раздел "Доставчик" на контрагента YouMustCreateStandardInvoiceFirstDesc=Първо трябва да създадете стандартна фактура и да я конвертирате в „шаблон“, за да създадете нова шаблонна фактура -PDFCrabeDescription=Фактурен PDF шаблон. Пълен шаблон за фактура (препоръчителен шаблон) +PDFCrabeDescription=Шаблонна PDF фактура Crabe. Пълен шаблон за фактура (препоръчителен шаблон) PDFSpongeDescription=PDF шаблон за фактура. Пълен шаблон за фактура PDFCrevetteDescription=PDF шаблон за фактура. Пълен шаблон за ситуационни фактури -TerreNumRefModelDesc1=Върнете номер с формат %syymm-nnnn за стандартни фактури и %syymm-nnnn за кредитни известия, където уу е година, mm е месец и NNNN е последователност, без прекъсване и без 0 +TerreNumRefModelDesc1=Връща номер с формат %syymm-nnnn за стандартни фактури и %syymm-nnnn за кредитни бележки, където yy е година, mm е месец и nnnn е последователност без прекъсване и няма връщане към 0 MarsNumRefModelDesc1=Връща номер с формат %syymm-nnnn за стандартни фактури, %syymm-nnnn за заместващи фактури, %syymm-nnnn за фактури за авансово плащане и %syymm-nnnn за кредитни известия, където yy е година, mm е месец и nnnn е последователност без прекъсване и без връщане към 0 -TerreNumRefModelError=Документ започващ с $syymm вече съществува и не е съвместим с този модел на последователност. Извадете го или го преименувайте за да се активира този модул. +TerreNumRefModelError=Документ, започващ с $syymm, вече съществува и не е съвместим с този модел на последователност. Премахнете го или го преименувайте, за да активирате този модул. CactusNumRefModelDesc1=Връща номер с формат %syymm-nnnn за стандартни фактури, %syymm-nnnn за кредитни известия и %syymm-nnnn за фактури за авансово плащане, където yy е година, mm е месец и nnnn е последователност без прекъсване и без връщане към 0 ##### Types de contacts ##### -TypeContact_facture_internal_SALESREPFOLL=Представител свързан с продажна фактура -TypeContact_facture_external_BILLING=Контакт по продажна фактура -TypeContact_facture_external_SHIPPING=Контакт за доставка на клиента -TypeContact_facture_external_SERVICE=Контакт за обслужване на клиента +TypeContact_facture_internal_SALESREPFOLL=Представител свързан с фактура за продажба +TypeContact_facture_external_BILLING=Контакт по фактура за продажба +TypeContact_facture_external_SHIPPING=Контакт по доставка +TypeContact_facture_external_SERVICE=Контакт по обслужване TypeContact_invoice_supplier_internal_SALESREPFOLL=Представител по фактура за покупка TypeContact_invoice_supplier_external_BILLING=Контакт на доставчик по фактура TypeContact_invoice_supplier_external_SHIPPING=Контакт на доставчик по доставка TypeContact_invoice_supplier_external_SERVICE=Контакт на доставчик по услуга # Situation invoices InvoiceFirstSituationAsk=Първа ситуационна фактура -InvoiceFirstSituationDesc=ситуационни фактури са вързани към ситуации отнасящи се до процес, например конструиране. Всяка ситуация е свързана с една фактура. +InvoiceFirstSituationDesc=Ситуационните фактури са вързани към ситуации отнасящи се до прогрес, например процес на конструиране. Всяка ситуация е свързана с една фактура. InvoiceSituation=Ситуационна фактура -InvoiceSituationAsk=Фактура следваща ситуацията -InvoiceSituationDesc=Създай нова ситуация, следваща съществуваща такава -SituationAmount=Сума за ситуационна фактура (нето) +InvoiceSituationAsk=Фактура свързана със ситуацията +InvoiceSituationDesc=Създаване на нова ситуация, следваща съществуваща такава. +SituationAmount=Сума на ситуационна фактура (нето) SituationDeduction=Ситуационно изваждане ModifyAllLines=Промени всички линии -CreateNextSituationInvoice=Създай следваща ситуация +CreateNextSituationInvoice=Създаване на следваща ситуация ErrorFindNextSituationInvoice=Грешка, неуспех при намирането на следващия цикъл на реф. ситуация ErrorOutingSituationInvoiceOnUpdate=Фактурата за тази ситуация не може да бъде публикувана. ErrorOutingSituationInvoiceCreditNote=Невъзможно е да се изпрати свързано кредитно известие. diff --git a/htdocs/langs/bg_BG/bookmarks.lang b/htdocs/langs/bg_BG/bookmarks.lang index 102d8e6b722..379bd67d808 100644 --- a/htdocs/langs/bg_BG/bookmarks.lang +++ b/htdocs/langs/bg_BG/bookmarks.lang @@ -3,18 +3,18 @@ AddThisPageToBookmarks=Добавяне на тази страница към о Bookmark=Отметка Bookmarks=Отметки ListOfBookmarks=Списък с отметки -EditBookmarks=List/edit bookmarks +EditBookmarks=Списък / промяна на отметки NewBookmark=Нова отметка -ShowBookmark=Показване на отметката -OpenANewWindow=Отваряне в нов прозорец -ReplaceWindow=Отваряне в текущия прозорец -BookmarkTargetNewWindowShort=Нов прозорец -BookmarkTargetReplaceWindowShort=Текущия прозорец -BookmarkTitle=Заглавие на отметката -UrlOrLink=URL -BehaviourOnClick=Поведение когато се кликне на URL-а -CreateBookmark=Създаване -SetHereATitleForLink=Настройте заглавие на отметката -UseAnExternalHttpLinkOrRelativeDolibarrLink=Използвайте външен http URL или релативен Dolibarr URL -ChooseIfANewWindowMustBeOpenedOnClickOnBookmark=Choose if linked page must open in new window or not -BookmarksManagement=Управление на отметките +ShowBookmark=Показване на отметка +OpenANewWindow=Отваряне на нов раздел +ReplaceWindow=Заменяне на текущ раздел +BookmarkTargetNewWindowShort=Нов раздел +BookmarkTargetReplaceWindowShort=Текущ раздел +BookmarkTitle=Име на отметка +UrlOrLink=URL връзка +BehaviourOnClick=Поведение при кликване върху URL връзка на отметка +CreateBookmark=Създаване на отметка +SetHereATitleForLink=Задайте име на отметката +UseAnExternalHttpLinkOrRelativeDolibarrLink=Използвайте външна / абсолютна връзка (https://URL) или вътрешна / относителна връзка (/DOLIBARR_ROOT/htdocs/...) +ChooseIfANewWindowMustBeOpenedOnClickOnBookmark=Изберете дали страницата да бъде отворена в текущия или в нов раздел +BookmarksManagement=Управление на отметки diff --git a/htdocs/langs/bg_BG/cashdesk.lang b/htdocs/langs/bg_BG/cashdesk.lang index 6ed0a2faeb3..cccc3f92130 100644 --- a/htdocs/langs/bg_BG/cashdesk.lang +++ b/htdocs/langs/bg_BG/cashdesk.lang @@ -68,4 +68,4 @@ Terminal=Терминал NumberOfTerminals=Брой терминали TerminalSelect=Изберете терминал, който искате да използвате: POSTicket=POS тикет -BasicPhoneLayout=Use basic layout for phones +BasicPhoneLayout=Използване на просто оформление за телефони diff --git a/htdocs/langs/bg_BG/categories.lang b/htdocs/langs/bg_BG/categories.lang index 21a09d93634..8d4de56caad 100644 --- a/htdocs/langs/bg_BG/categories.lang +++ b/htdocs/langs/bg_BG/categories.lang @@ -1,90 +1,90 @@ # Dolibarr language file - Source file is en_US - categories -Rubrique=Етикет/Категория -Rubriques=Етикети/Категории -RubriquesTransactions=Етикети/Категории на транзакции -categories=етикети/категории -NoCategoryYet=Няма етикет/категория създаден от този тип -In=В +Rubrique=Таг / Категория +Rubriques=Тагове / Категории +RubriquesTransactions=Тагове / Категории транзакции +categories=тагове / категории +NoCategoryYet=Няма създаден таг / категория от този тип +In=в AddIn=Добавяне в modify=промяна -Classify=Добавяне -CategoriesArea=Зона етикети/категории -ProductsCategoriesArea=Зона етикети/категории Продукти -SuppliersCategoriesArea=Секция с етикети / категории на доставчици -CustomersCategoriesArea=Зона етикети/категории Клиенти -MembersCategoriesArea=Зона етикети/категории Членове -ContactsCategoriesArea=Зона етикети/категории Контакти -AccountsCategoriesArea=Секция с етикети / категории на сметки -ProjectsCategoriesArea=Секция с етикети / категории на проекти -UsersCategoriesArea=Секция с етикети / категории на потребители +Classify=Класифициране +CategoriesArea=Секция с тагове / категории +ProductsCategoriesArea=Секция с тагове / категории за продукти / услуги +SuppliersCategoriesArea=Секция с тагове / категории за доставчици +CustomersCategoriesArea=Секция с тагове / категории за клиенти +MembersCategoriesArea=Секция с тагове / категории за членове +ContactsCategoriesArea=Секция с тагове / категории за контакти +AccountsCategoriesArea=Секция с тагове / категории за сметки +ProjectsCategoriesArea=Секция с тагове / категории за проекти +UsersCategoriesArea=Секция с тагове / категории за потребители SubCats=Подкатегории -CatList=Списък на етикети/категории -NewCategory=Нов етикет/категория -ModifCat=Редактиране етикет/категория -CatCreated=Етикет/категория създаден -CreateCat=Създаване етикет/категория -CreateThisCat=Създаване на този етикет/категория -NoSubCat=Няма подкатегория. +CatList=Списък с тагове / категории +NewCategory=Нов таг / категория +ModifCat=Промяна на таг / категория +CatCreated=Създаден е таг / категория +CreateCat=Създаване на таг / категория +CreateThisCat=Създаване на този таг / категория +NoSubCat=Няма подкатегория SubCatOf=Подкатегория -FoundCats=Намерени етикети/категории -ImpossibleAddCat=Не е възможно да добавите етикет / категория %s +FoundCats=Намерени тагове / категории +ImpossibleAddCat=Невъзможно е да добавите таг / категория %s WasAddedSuccessfully=%s е добавен успешно. -ObjectAlreadyLinkedToCategory=Елементът вече е към този етикет/категория. -ProductIsInCategories=Продукта/услугата е в следните етикети/категории -CompanyIsInCustomersCategories=Контагентът е свързан към следните клиенти/потециални/категории -CompanyIsInSuppliersCategories=Този контрагент е свързан към следните етикети / категории на доставчици -MemberIsInCategories=Този член е в следните етикети/категории Членове -ContactIsInCategories=Този конктакт не в етикети/категории Контакти -ProductHasNoCategory=Този продукт/услуга не е в нито един етикет/категория -CompanyHasNoCategory=Този контрагент не е в нито един етикет / категория -MemberHasNoCategory=Този член не е в нито един етикет/категория -ContactHasNoCategory=Този контакт не е в никои етикети/категории -ProjectHasNoCategory=Този проект не е в нито един етикет / категория -ClassifyInCategory=Добавяне в етикет/категория -NotCategorized=Без етикет/категория -CategoryExistsAtSameLevel=Тази категория вече съществува с този код +ObjectAlreadyLinkedToCategory=Елементът вече е свързан с този таг / категория. +ProductIsInCategories=Продуктът / услугата са свързани със следните тагове / категории +CompanyIsInCustomersCategories=Този контрагент е свързан със следните тагове / категории за клиенти / потенциални клиенти +CompanyIsInSuppliersCategories=Този контрагент е свързан със следните тагове / категории за доставчици +MemberIsInCategories=Този член е свързан със следните тагове / категории за членове +ContactIsInCategories=Този контакт е свързан със следните тагове / категории за контакти +ProductHasNoCategory=Този продукт / услуга не е свързан с нито един таг / категория +CompanyHasNoCategory=Този контрагент не е свързан с нито един таг / категория +MemberHasNoCategory=Този член не е свързан с нито един таг / категория +ContactHasNoCategory=Този контакт не е свързан с нито един таг / категория +ProjectHasNoCategory=Този проект не е свързан с нито един таг / категория +ClassifyInCategory=Добавяне към таг / категория +NotCategorized=Без таг / категория +CategoryExistsAtSameLevel=Тази категория вече съществува ContentsVisibleByAllShort=Съдържанието е видимо от всички ContentsNotVisibleByAllShort=Съдържанието не е видимо от всички -DeleteCategory=Изтриване на етикет/категория -ConfirmDeleteCategory=Сигурни ли сте, че искате да изтриете този етикет / категория? -NoCategoriesDefined=Няма създадени етикети/категории -SuppliersCategoryShort=Етикет/категория Доставчици -CustomersCategoryShort=Етикет/категория Клиенти -ProductsCategoryShort=Етикет/категория Продукти -MembersCategoryShort=Етикет/категория Членове -SuppliersCategoriesShort=Етикети/категории Доставчици -CustomersCategoriesShort=Етикети/категории Клиенти -ProspectsCategoriesShort=Етикети/категории Перспективи -CustomersProspectsCategoriesShort=Етикети/категории Клиенти / Перспективи -ProductsCategoriesShort=Етикети/категории Продукти -MembersCategoriesShort=Етикети/категории Членове -ContactCategoriesShort=Етикети/категории Контакти -AccountsCategoriesShort=Етикети/категории Сметки -ProjectsCategoriesShort=Етикети/категории Проекти -UsersCategoriesShort=Етикети/категории Потребители -ThisCategoryHasNoProduct=Тази категория не съдържа никакъв продукт. -ThisCategoryHasNoSupplier=Тази категория не съдържа никакви доставчици. -ThisCategoryHasNoCustomer=Тази категория не съдържа никакъв клиент. -ThisCategoryHasNoMember=Тази категория не съдържа никакъв член. -ThisCategoryHasNoContact=Тази категория не съдържа никакъв контакт -ThisCategoryHasNoAccount=Тази категория не съдържа никакви сметки. -ThisCategoryHasNoProject=Тази категория не съдържа никакви проекти. -CategId=Етикет/категория id -CatSupList=Списък на етикети / категории Доставчици -CatCusList=Списък на етикети/категории Клиенти/Потенциални Клиенти -CatProdList=Списък на етикети/категории Продукти -CatMemberList=Списък на етикети/категории Членове -CatContactList=Списък на етикети/категории Контакти -CatSupLinks=Връзки между доставчици и етикети/категории -CatCusLinks=Връзки между клиенти/потенциални клиенти и етикети/категории -CatProdLinks=Връзки между продукти/услуги и етикети/категории -CatProJectLinks=Връзки между проекти и етикети / категории -DeleteFromCat=Изтриване от етикети/категории +DeleteCategory=Изтриване на таг / категория +ConfirmDeleteCategory=Сигурни ли сте, че искате да изтриете този таг / категория? +NoCategoriesDefined=Няма определен таг / категория +SuppliersCategoryShort=Таг / категория доставчици +CustomersCategoryShort=Таг / категория клиенти +ProductsCategoryShort=Таг / категория продукти +MembersCategoryShort=Таг / категория членове +SuppliersCategoriesShort=Категории доставчици +CustomersCategoriesShort=Категории клиенти +ProspectsCategoriesShort=Категории потенциални клиенти +CustomersProspectsCategoriesShort=Категории клиенти / потенциални +ProductsCategoriesShort=Категории продукти +MembersCategoriesShort=Категории членове +ContactCategoriesShort=Категории контакти +AccountsCategoriesShort=Категории сметки +ProjectsCategoriesShort=Категории проекти +UsersCategoriesShort=Категории потребители +ThisCategoryHasNoProduct=Тази категория не съдържа нито един продукт +ThisCategoryHasNoSupplier=Тази категория не съдържа нито един доставчик +ThisCategoryHasNoCustomer=Тази категория не съдържа нито един клиент +ThisCategoryHasNoMember=Тази категория не съдържа нито един член +ThisCategoryHasNoContact=Тази категория не съдържа нито един контакт +ThisCategoryHasNoAccount=Тази категория не съдържа нито една сметка +ThisCategoryHasNoProject=Тази категория не съдържа нито един проект +CategId=Идентификатор на таг / категория +CatSupList=Списък на тагове / категории за доставчици +CatCusList=Списък на тагове / категории за клиенти / потенциални клиенти +CatProdList=Списък на тагове / категории за продукти +CatMemberList=Списък на тагове / категории за членове +CatContactList=Списък на тагове / категории за контакти +CatSupLinks=Връзки между доставчици и тагове / категории +CatCusLinks=Връзки между клиенти / потенциални клиенти и тагове / категории +CatProdLinks=Връзки между продукти / услуги и тагове / категории +CatProJectLinks=Връзки между проекти и тагове / категории +DeleteFromCat=Изтриване от таг / категория ExtraFieldsCategories=Допълнителни атрибути -CategoriesSetup=Етикети/категории настройка -CategorieRecursiv=Автоматично свързване с родителския етикет/категория -CategorieRecursivHelp=Ако опцията е включена, когато добавите продукт в подкатегория, продуктът също ще бъде добавен и в главната категория. -AddProductServiceIntoCategory=Добавяне на следния продукт/услуга -ShowCategory=Показване на етикет/категория -ByDefaultInList=По подразбиране в списък +CategoriesSetup=Настройка на тагове / категории +CategorieRecursiv=Автоматично свързване с главния таг / категория +CategorieRecursivHelp=Ако опцията е включена, когато добавите продукт в подкатегория, продуктът ще бъде добавен също и в главната категория. +AddProductServiceIntoCategory=Добавяне на следния продукт / услуга +ShowCategory=Показване на таг / категория +ByDefaultInList=По подразбиране в списъка ChooseCategory=Избиране на категория diff --git a/htdocs/langs/bg_BG/commercial.lang b/htdocs/langs/bg_BG/commercial.lang index ab324ca5102..d49a5ac4f69 100644 --- a/htdocs/langs/bg_BG/commercial.lang +++ b/htdocs/langs/bg_BG/commercial.lang @@ -1,80 +1,80 @@ # Dolibarr language file - Source file is en_US - commercial -Commercial=Търговски -CommercialArea=Търговска площ +Commercial=Търговия +CommercialArea=Секция за търговия Customer=Клиент Customers=Клиенти -Prospect=Потенциален -Prospects=Потенциални +Prospect=Потенциален клиент +Prospects=Потенциални клиенти DeleteAction=Изтриване на събитие NewAction=Ново събитие -AddAction=Създай събитие +AddAction=Създаване на събитие AddAnAction=Създаване на събитие -AddActionRendezVous=Създаване на Рандеву събитие +AddActionRendezVous=Създаване на събитие - среща ConfirmDeleteAction=Сигурни ли сте, че искате да изтриете това събитие? -CardAction=Карта на/за събитие +CardAction=Карта на събитие ActionOnCompany=Свързана компания ActionOnContact=Свързан контакт TaskRDVWith=Среща с %s -ShowTask=Покажи задача -ShowAction=Покажи събитие -ActionsReport=доклад от събитие +ShowTask=Преглед на задача +ShowAction=Преглед на събитие +ActionsReport=Справка за събития ThirdPartiesOfSaleRepresentative=Контрагенти с търговски представител -SaleRepresentativesOfThirdParty=Търговски представител за контрагента +SaleRepresentativesOfThirdParty=Търговски представители за контрагента SalesRepresentative=Търговски представител SalesRepresentatives=Търговски представители -SalesRepresentativeFollowUp=Търговски представител (продължение) -SalesRepresentativeSignature=Търговски представител (подпис) -NoSalesRepresentativeAffected=Няма особен продажби засегнати представител -ShowCustomer=Покажи клиента -ShowProspect=Покажи перспектива -ListOfProspects=Списък на потенциални +SalesRepresentativeFollowUp=Търговски представител (последващ) +SalesRepresentativeSignature=Търговски представител (подписващ) +NoSalesRepresentativeAffected=Не е определен търговски представител +ShowCustomer=Преглед на клиент +ShowProspect=Преглед на потенциален клиент +ListOfProspects=Списък на потенциални клиенти ListOfCustomers=Списък на клиенти LastDoneTasks=Действия: %s последно завършени LastActionsToDo=Действия: %s най-стари незавършени DoneAndToDoActions=Завършени и предстоящи събития DoneActions=Завършени събития -ToDoActions=Непълни събития +ToDoActions=Незавършени събития SendPropalRef=Изпращане на търговско предложение %s SendOrderRef=Изпращане на поръчка %s -StatusNotApplicable=Не е приложимо -StatusActionToDo=За да направите -StatusActionDone=Пълен +StatusNotApplicable=Не се прилага +StatusActionToDo=Да се направи +StatusActionDone=Завършено StatusActionInProcess=В процес TasksHistoryForThisContact=Събития за този контакт -LastProspectDoNotContact=Не се свържете -LastProspectNeverContacted=Никога контакт -LastProspectToContact=За да се свържете -LastProspectContactInProcess=Контакт в процес -LastProspectContactDone=Свържи се направи -ActionAffectedTo=Събитие определено на -ActionDoneBy=Събитие, извършена от +LastProspectDoNotContact=Да не се контактува +LastProspectNeverContacted=Не е контактувано +LastProspectToContact=Да се контактува +LastProspectContactInProcess=В процес на контактуване +LastProspectContactDone=Осъществен контакт +ActionAffectedTo=Събитие, възложено на +ActionDoneBy=Събитие, извършено от ActionAC_TEL=Телефонно обаждане ActionAC_FAX=Изпращане на факс -ActionAC_PROP=Изпрати предложение по пощата +ActionAC_PROP=Изпращане на предложение по имейл ActionAC_EMAIL=Изпращане на имейл -ActionAC_EMAIL_IN=Приемане на имейл +ActionAC_EMAIL_IN=Получаване на имейл ActionAC_RDV=Срещи ActionAC_INT=Интервенция на място -ActionAC_FAC=Изпращане на клиента фактура по пощата -ActionAC_REL=Изпращане на клиента фактура по пощата (напомняне) -ActionAC_CLO=Близо +ActionAC_FAC=Изпращане на фактура за продажба по пощата +ActionAC_REL=Изпращане на фактура за продажба по пощата (напомняне) +ActionAC_CLO=Приключване ActionAC_EMAILING=Изпращане на масов имейл -ActionAC_COM=Изпращане на поръчка за продажба по имейл -ActionAC_SHIP=Изпрати доставка по пощата -ActionAC_SUP_ORD=Изпращане на поръчка за покупка по имейл -ActionAC_SUP_INV=Изпращане на фактура на доставка по имейл -ActionAC_OTH=Друг +ActionAC_COM=Изпращане на поръчка за продажба по пощата +ActionAC_SHIP=Изпращане на пратка по пощата +ActionAC_SUP_ORD=Изпращане на поръчка за покупка по пощата +ActionAC_SUP_INV=Изпращане на фактура за доставка по пощата +ActionAC_OTH=Друго ActionAC_OTH_AUTO=Автоматично добавени ActionAC_MANUAL=Ръчно добавени ActionAC_AUTO=Автоматично добавени ActionAC_OTH_AUTOShort=Автоматично -Stats=Статистика на продажбите -StatusProsp=Prospect статус -DraftPropals=Проектът на търговски предложения +Stats=Статистика от продажби +StatusProsp=Статус на клиента +DraftPropals=Чернови търговски предложения NoLimit=Няма лимит ToOfferALinkForOnlineSignature=Връзка за онлайн подпис WelcomeOnOnlineSignaturePage=Добре дошли на страницата за приемане на търговски предложения от %s -ThisScreenAllowsYouToSignDocFrom=Този екран Ви позволява да приемете и подпишете или да отхвърлите оферта/търговско предложение -ThisIsInformationOnDocumentToSign=Това е информация за документа, който да приемете или отхвърлите -SignatureProposalRef=Подписване на оферта/търговско предложение %s +ThisScreenAllowsYouToSignDocFrom=Този екран позволява да приемете и подпишете или да отхвърлите оферта / търговско предложение +ThisIsInformationOnDocumentToSign=Това е информация за документа, който да приемете или отхвърлите. +SignatureProposalRef=Подписване на оферта / търговско предложение %s FeatureOnlineSignDisabled=Функцията за онлайн подписване е деактивирана или документът е генериран преди активирането на функцията diff --git a/htdocs/langs/bg_BG/companies.lang b/htdocs/langs/bg_BG/companies.lang index df6f5990b91..9f839183654 100644 --- a/htdocs/langs/bg_BG/companies.lang +++ b/htdocs/langs/bg_BG/companies.lang @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Абсолютни отстъпки от дос SupplierAbsoluteDiscountMy=Абсолютни отстъпки от доставчик (зададени от вас) DiscountNone=Няма Vendor=Доставчик +Supplier=Доставчик AddContact=Създай контакт AddContactAddress=Създй контакт/адрес EditContact=Редактиране на контакт diff --git a/htdocs/langs/bg_BG/compta.lang b/htdocs/langs/bg_BG/compta.lang index bae5b09070f..7df1d397b09 100644 --- a/htdocs/langs/bg_BG/compta.lang +++ b/htdocs/langs/bg_BG/compta.lang @@ -1,37 +1,37 @@ # Dolibarr language file - Source file is en_US - compta MenuFinancial=Фактури | Плащания -TaxModuleSetupToModifyRules=Отидете на Настройка модул данъци за да промените правилата за изчисляване -TaxModuleSetupToModifyRulesLT=Отидете на Настройка на фирмата за да промените правилата за изчисляване -OptionMode=Опция за счетоводство -OptionModeTrue=Опция приходи-разходи -OptionModeVirtual=Опция вземания-дългове -OptionModeTrueDesc=В този контекст, оборотът се изчислява по плащания (дата на плащанията). Валидността на цифрите е гарантирана само ако счетоводството се разглежда през входа/изхода на сметките чрез фактури. -OptionModeVirtualDesc=В този контекст, оборотът се изчислява върху фактури (датата на валидиране). Когато тези фактури са дължими, независимо дали са платени или не, те присъстват в оборота. -FeatureIsSupportedInInOutModeOnly=Функцията е достъпна само в счетоводството в режим кредит-дебит (Вижте настройките на модула за счетоводство) -VATReportBuildWithOptionDefinedInModule=Сумите показани тук са изчислени въз основа на правилата, определени в настройките на модул за данъци. -LTReportBuildWithOptionDefinedInModule=Сумите показани тук са изчислени въз основа на правилата, определени в настройките на модул за фирмата -Param=Структура +TaxModuleSetupToModifyRules=Отидете в Настройка на модула за данъци, за да промените правилата за изчисляване +TaxModuleSetupToModifyRulesLT=Отидете в Настройка на фирма / организация, за да промените правилата за изчисляване +OptionMode=Режим за счетоводство +OptionModeTrue=Режим приходи - разходи +OptionModeVirtual=Режим вземания - задължения +OptionModeTrueDesc=В този контекст, оборотът се изчислява върху плащанията (по дата на плащане). Валидността на цифрите е гарантирана, само ако счетоводството е разгледано, чрез фактурите на входа / изхода по съответните сметки. +OptionModeVirtualDesc=В този контекст, оборотът се изчислява върху фактурите (по дата на валидиране). Когато тези фактури са дължими, независимо дали са платени или не, те са включени в оборота. +FeatureIsSupportedInInOutModeOnly=Функцията е налична само в режим на счетоводство Вземания - Задължения (вижте конфигурацията на модул счетоводство) +VATReportBuildWithOptionDefinedInModule=Сумите показани тук се изчисляват с помощта на правилата, определени от настройката на модула за данъци. +LTReportBuildWithOptionDefinedInModule=Сумите показани тук се изчисляват като се използват правилата, определени в настройката за фирма / организация. +Param=Настройка RemainingAmountPayment=Оставаща сума за плащане: Account=Сметка Accountparent=Главна сметка Accountsparent=Главни сметки -Income=Доход +Income=Приход Outcome=Разход MenuReportInOut=Приход / Разход -ReportInOut=Баланс на приходите и разходите +ReportInOut=Баланс на приходи и разходи ReportTurnover=Фактуриран оборот ReportTurnoverCollected=Натрупан оборот -PaymentsNotLinkedToInvoice=Плащания, които не са свързани с никоя фактура, така че не свързани с никой контрагент -PaymentsNotLinkedToUser=Плащанията, които не са свързани с никой потребител +PaymentsNotLinkedToInvoice=Плащанията не са свързани с нито една фактура, така че не са свързани с нито един контрагент +PaymentsNotLinkedToUser=Плащанията не са свързани с нито един потребител Profit=Печалба AccountingResult=Счетоводен резултат BalanceBefore=Баланс (преди) Balance=Баланс Debit=Дебит Credit=Кредит -Piece=Счетоводен док. -AmountHTVATRealReceived=Нето събрани -AmountHTVATRealPaid=Нето платени +Piece=Счетоводен документ +AmountHTVATRealReceived=Получен (нето) +AmountHTVATRealPaid=Платен (нето) VATToPay=Данък върху продажби VATReceived=Получен данък VATToCollect=Данък върху покупки @@ -62,54 +62,54 @@ LT2CustomerES=IRPF продажби LT2SupplierES=IRPF покупки LT2CustomerIN=SGST продажби LT2SupplierIN=SGST покупки -VATCollected=ДДС събран +VATCollected=Получен ДДС ToPay=За плащане SpecialExpensesArea=Секция за всички специални плащания -SocialContribution=Социални или фискални данъци +SocialContribution=Социален или фискален данък SocialContributions=Социални или фискални данъци SocialContributionsDeductibles=Приспадащи се социални или фискални данъци SocialContributionsNondeductibles=Не приспадащи се социални или данъчни данъци -LabelContrib=Label contribution -TypeContrib=Type contribution +LabelContrib=Етикет на вноска +TypeContrib=Тип вноска MenuSpecialExpenses=Специални разходи MenuTaxAndDividends=Данъци и дивиденти -MenuSocialContributions=Social/fiscal taxes -MenuNewSocialContribution=New social/fiscal tax -NewSocialContribution=New social/fiscal tax -AddSocialContribution=Добавяне на социален/фискален данък -ContributionsToPay=Social/fiscal taxes to pay +MenuSocialContributions=Социални / фискални данъци +MenuNewSocialContribution=Нов социален / фискален данък +NewSocialContribution=Нов социален / фискален данък +AddSocialContribution=Добавяне на социален / фискален данък +ContributionsToPay=Социални / фискални данъци за плащане AccountancyTreasuryArea=Секция за фактуриране и плащания NewPayment=Ново плащане -PaymentCustomerInvoice=Плащане на продажна фактура -PaymentSupplierInvoice=плащане на фактура от доставчик -PaymentSocialContribution=Social/fiscal tax payment -PaymentVat=Плащането на ДДС -ListPayment=Списък на плащанията +PaymentCustomerInvoice=Плащане на фактура за продажба +PaymentSupplierInvoice=Плащане на фактура за покупка +PaymentSocialContribution=Плащане на социален / фискален данък +PaymentVat=Плащане на ДДС +ListPayment=Списък на плащания ListOfCustomerPayments=Списък на клиентски плащания -ListOfSupplierPayments=Списък на плащания от доставчик -DateStartPeriod=Date start period -DateEndPeriod=Date end period +ListOfSupplierPayments=Списък на плащания към доставчици +DateStartPeriod=Начална дата на период +DateEndPeriod=Крайна дата на период newLT1Payment=Ново плащане на данък 2 newLT2Payment=Ново плащане на данък 3 LT1Payment=Плащане на данък 2 LT1Payments=Плащания на данък 2 LT2Payment=Плащане на данък 3 LT2Payments=Плащания на данък 3 -newLT1PaymentES=New RE payment -newLT2PaymentES=Нова IRPF плащане -LT1PaymentES=RE Payment -LT1PaymentsES=RE Payments +newLT1PaymentES=Ново RE плащане +newLT2PaymentES=Ново IRPF плащане +LT1PaymentES=RE плащане +LT1PaymentsES=RE плащания LT2PaymentES=IRPF плащане -LT2PaymentsES=IRPF Плащания +LT2PaymentsES=IRPF плащания VATPayment=Плащане на данък върху продажбите VATPayments=Плащания на данък върху продажбите -VATRefund=Възстановяване на данък върху продажбите -NewVATPayment=Ново плащане на данък върху продажбите +VATRefund=Възстановяване на данък върху продажби +NewVATPayment=Ново плащане на данък върху продажби NewLocalTaxPayment=Ново плащане на данък %s -Refund=Refund -SocialContributionsPayments=Social/fiscal taxes payments +Refund=Възстановяване +SocialContributionsPayments=Плащания на социални / фискални данъци ShowVatPayment=Покажи плащане на ДДС -TotalToPay=Всичко за плащане +TotalToPay=Общо за плащане BalanceVisibilityDependsOnSortAndFilters=Балансът е видим в този списък само ако таблицата е сортирана възходящо на %s и филтрирана за 1 банкова сметка CustomerAccountancyCode=Счетоводен код на клиента SupplierAccountancyCode=Счетоводен код на доставчика @@ -122,43 +122,43 @@ TurnoverCollected=Натрупан оборот SalesTurnoverMinimum=Минимален оборот ByExpenseIncome=По разходи и приходи ByThirdParties=По контрагенти -ByUserAuthorOfInvoice=С фактура автор -CheckReceipt=Проверете депозит -CheckReceiptShort=Проверете депозит +ByUserAuthorOfInvoice=По автор на фактура +CheckReceipt=Чеков депозит +CheckReceiptShort=Чеков депозит LastCheckReceiptShort=Чекове: %s последно приети -NewCheckReceipt=Нов отстъпка -NewCheckDeposit=Нова проверка депозит +NewCheckReceipt=Нова отстъпка +NewCheckDeposit=Нов чеков депозит NewCheckDepositOn=Създаване на разписка за депозит по сметка: %s NoWaitingChecks=Няма чекове, които да очакват депозит. -DateChequeReceived=Проверете датата рецепция +DateChequeReceived=Дата на приемане на чек NbOfCheques=Брой чекове -PaySocialContribution=Pay a social/fiscal tax -ConfirmPaySocialContribution=Are you sure you want to classify this social or fiscal tax as paid? -DeleteSocialContribution=Delete a social or fiscal tax payment -ConfirmDeleteSocialContribution=Are you sure you want to delete this social/fiscal tax payment? -ExportDataset_tax_1=Social and fiscal taxes and payments -CalcModeVATDebt=Mode %sVAT on commitment accounting%s. -CalcModeVATEngagement=Mode %sVAT on incomes-expenses%s. +PaySocialContribution=Платете социален / фискален данък +ConfirmPaySocialContribution=Сигурни ли сте, че искате да класифицирате този социален или фискален данък като платен? +DeleteSocialContribution=Изтриване на плащане за социален или фискален данък +ConfirmDeleteSocialContribution=Сигурни ли сте, че искате да изтриете това плащане на социален / фискален данък? +ExportDataset_tax_1=Социални / фискални данъци и плащания +CalcModeVATDebt=Режим %sДДС върху осчетоводени задължения%s +CalcModeVATEngagement=Режим %sДДС върху приходи - разходи%s CalcModeDebt=Анализ на регистрираните фактури, дори ако те все още не са осчетоводени в книгата. CalcModeEngagement=Анализ на регистрираните плащания, дори ако те все още не са осчетоводени в книгата. CalcModeBookkeeping=Анализ на данни, регистрирани в таблицата на счетоводната книга. -CalcModeLT1= Mode %sRE on customer invoices - suppliers invoices%s -CalcModeLT1Debt=Mode %sRE on customer invoices%s -CalcModeLT1Rec= Mode %sRE on suppliers invoices%s -CalcModeLT2= Mode %sIRPF on customer invoices - suppliers invoices%s -CalcModeLT2Debt=Mode %sIRPF on customer invoices%s -CalcModeLT2Rec= Mode %sIRPF on suppliers invoices%s -AnnualSummaryDueDebtMode=Balance of income and expenses, annual summary -AnnualSummaryInputOutputMode=Balance of income and expenses, annual summary +CalcModeLT1= Режим %sRE върху фактури за продажба - фактури за доставка%s +CalcModeLT1Debt=Режим %sRE върху фактури за продажба%s +CalcModeLT1Rec= Режим %sRE върху фактури за доставка%s +CalcModeLT2= Режим %sIRPF върху фактури за продажба - фактури за доставка%s +CalcModeLT2Debt=Режим %sIRPF върху фактури за продажба%s +CalcModeLT2Rec= Режим %sIRPF върху фактури за доставка%s +AnnualSummaryDueDebtMode=Баланс на приходи и разходи, годишно обобщение +AnnualSummaryInputOutputMode=Баланс на приходи и разходи, годишно обобщение AnnualByCompanies=Баланс на приходите и разходите, по предварително определени групи сметки AnnualByCompaniesDueDebtMode=Баланс на приходите и разходите, по предварително определени групи, режим %sВземания-Дългове%s или казано още Осчетоводяване на вземания. AnnualByCompaniesInputOutputMode=Баланс на приходи и разходи, по предварително определени групи, режим %sПриходи - Разходи%s или казано още касова отчетност. SeeReportInInputOutputMode=Вижте %sанализа на плащанията%s за изчисляване на действителните плащания, дори и ако те все още не са осчетоводени в книгата. SeeReportInDueDebtMode=Вижте %sанализа на фактурите%s за изчисляване, който е базиран на регистираните фактури, дори и ако те все още не са осчетоводени в книгата. SeeReportInBookkeepingMode=Вижте %sСчетоводния доклад%s за изчисляване на таблицата в счетоводната книга -RulesAmountWithTaxIncluded=- Amounts shown are with all taxes included -RulesResultDue=- Показани Сумите са с включени всички такси
- Тя включва неплатените фактури, разходи и ДДС, независимо дали са платени или не.
- Тя се основава на датата на утвърждаване на фактури и ДДС и на датата на падежа за разходи. -RulesResultInOut=- It includes the real payments made on invoices, expenses and VAT.
- It is based on the payment dates of the invoices, expenses and VAT. +RulesAmountWithTaxIncluded=- Посочените суми са с включени всички данъци +RulesResultDue=- Включва неизплатени фактури, разходи, ДДС, дарения, независимо дали са платени или не. Включва също платени заплати.
- Основава се на датата на валидиране на фактурите и ДДС и на датата на падежа на разходите. За заплати, определени с модула заплати се използва датата на плащането. +RulesResultInOut=- Включва реалните плащания по фактури, разходи, ДДС и заплати.
- Основава се на датите на плащане на фактурите, разходите, ДДС и заплатите. Датата на дарение за дарения. RulesCADue=- Включва дължимите фактури на клиента, независимо дали са платени или не.
- Базирани на датата на валидиране на тези фактури.
RulesCAIn=- Включва всички ефективни плащания по фактури, получени от клиенти.
- Базирани на датата на плащане на тези фактури
RulesCATotalSaleJournal=Включва всички кредитни линии от журнала за продажба. @@ -168,60 +168,60 @@ RulesResultBookkeepingPersonalized=Показва запис във вашата SeePageForSetup=Вижте менюто %s за настройка DepositsAreNotIncluded=- Фактурите за авансови плащания не са включени DepositsAreIncluded=- Фактурите за авансови плащания са включени -LT1ReportByCustomers=Отчет за данък 2 по контрагент -LT2ReportByCustomers=Отчет за данък 3 по контрагент -LT1ReportByCustomersES=Отчет по контрагент RE -LT2ReportByCustomersES=Отчет по контрагент IRPF -VATReport=Отчет за данъка върху продажбите -VATReportByPeriods=Отчет за данъка върху продажбите по периоди -VATReportByRates=Отчет за данъка върху продажбите по ставки -VATReportByThirdParties=Отчет за данъка върху продажбите по контрагенти -VATReportByCustomers=Отчет за данъка върху продажбите по клиенти -VATReportByCustomersInInputOutputMode=Report by the customer VAT collected and paid -VATReportByQuartersInInputOutputMode=Отчет по данъчна ставка върху продажбите за натрупания и платен данък -LT1ReportByQuarters=Отчет за данък 2 по ставки -LT2ReportByQuarters=Отчет за данък 3 по ставки -LT1ReportByQuartersES=Отчет по RE ставки -LT2ReportByQuartersES=Отчет по IRPF ставки -SeeVATReportInInputOutputMode=Виж да докладва %sVAT encasement%s за изчислението на стандартната -SeeVATReportInDueDebtMode=Виж доклада %sVAT за flow%s за изчисление, с опция върху потока -RulesVATInServices=- For services, the report includes the VAT regulations actually received or issued on the basis of the date of payment. -RulesVATInProducts=- За материалните активи отчетът включва получения или издаден ДДС въз основа на датата на плащане. -RulesVATDueServices=- Услуги, в доклада се включва ДДС фактури дължи платена или не, въз основа на датата на фактурата. -RulesVATDueProducts=- За материалните активи, отчетът включва фактурите по ДДС въз основа на датата на фактурата. -OptionVatInfoModuleComptabilite=Забележка: За материални активи, трябва да използват датата на доставка, за да бъде по-справедлива. -ThisIsAnEstimatedValue=Това е преглед, базиран на бизнес събития, а не на финалната счетоводна таблица, така че крайните резултати може да се различават от тези стойности за предварителен преглед -PercentOfInvoice=% / Фактура -NotUsedForGoods=Не се използва върху стоки -ProposalStats=Статистика за представяне на предложения +LT1ReportByCustomers=Справка за данък 2 по контрагент +LT2ReportByCustomers=Справка за данък 3 по контрагент +LT1ReportByCustomersES=Справка за RE по контрагент +LT2ReportByCustomersES=Справка за IRPF по контрагент +VATReport=Справка за данък върху продажби +VATReportByPeriods=Справка за данък върху продажби по периоди +VATReportByRates=Справка за данък върху продажби по ставки +VATReportByThirdParties=Справка за данък върху продажби по контрагенти +VATReportByCustomers=Справка за данък върху продажби по клиенти +VATReportByCustomersInInputOutputMode=Справка за получен и платен ДДС от клиент +VATReportByQuartersInInputOutputMode=Справка по данъчна ставка върху продажби за получен и платен данък +LT1ReportByQuarters=Справка за данък 2 по ставки +LT2ReportByQuarters=Справка за данък 3 по ставки +LT1ReportByQuartersES=Справка за RE по ставки +LT2ReportByQuartersES=Справка за IRPF по ставки +SeeVATReportInInputOutputMode=Вижте справка %sобхват на ДДС%s за стандартно изчисление +SeeVATReportInDueDebtMode=Вижте справка %sпоток на ДДС%s за изчисление с опция за потока +RulesVATInServices=- За услуги, докладът включва действително получените или издадени регламенти за ДДС въз основа на датата на плащане. +RulesVATInProducts=- За материални активи справка включва получения или издаден ДДС въз основа на датата на плащане. +RulesVATDueServices=- За услуги, докладът включва дължими фактури по ДДС, платени или не, въз основа на датата на фактурата. +RulesVATDueProducts=- За материални активи справката включва фактурите по ДДС въз основа на датата на фактурата. +OptionVatInfoModuleComptabilite=Забележка: За материални активи, трябва да се използва датата на доставка, за да бъде по-справедливо. +ThisIsAnEstimatedValue=Това е преглед, базиран на бизнес събития, а не на финалния сметкоплан, така че крайните резултати може да се различават от тези стойности за предварителен преглед +PercentOfInvoice=%% / фактура +NotUsedForGoods=Не се използва за стоки +ProposalStats=Статистика за предложения OrderStats=Статистика за поръчки -InvoiceStats=Статистически данни за сметки -Dispatch=Диспечерско +InvoiceStats=Статистика за фактури +Dispatch=Изпращане Dispatched=Изпратени ToDispatch=За изпращане -ThirdPartyMustBeEditAsCustomer=От контрагент трябва да бъдат определени като клиент -SellsJournal=Продажби вестник -PurchasesJournal=Покупките вестник -DescSellsJournal=Продажби вестник -DescPurchasesJournal=Покупките вестник -CodeNotDef=Не е определена +ThirdPartyMustBeEditAsCustomer=Контрагентът трябва да бъде дефиниран като клиент +SellsJournal=Журнал за продажби +PurchasesJournal=Журнал за покупки +DescSellsJournal=Журнал за продажби +DescPurchasesJournal=Журнал за покупки +CodeNotDef=Не е дефинирано WarningDepositsNotIncluded=Фактурите за авансови плащания не са включени в тази версия с този модул за счетоводство. -DatePaymentTermCantBeLowerThanObjectDate=Payment term date can't be lower than object date. -Pcg_version=Таблица на сметките +DatePaymentTermCantBeLowerThanObjectDate=Датата на плащане не може да бъде преди датата на обекта. +Pcg_version=Модели за сметкоплан Pcg_type=PCG тип Pcg_subtype=PCG подтип -InvoiceLinesToDispatch=Invoice lines to dispatch +InvoiceLinesToDispatch=Редове от фактура за изпращане ByProductsAndServices=По продукт и услуга -RefExt=External ref -ToCreateAPredefinedInvoice=За да създадете шаблонна фактура, създайте стандартна фактура, след което преди да я валидирате кликнете върху бутона "%s". -LinkedOrder=Link to order -Mode1=Method 1 -Mode2=Method 2 -CalculationRuleDesc=To calculate total VAT, there is two methods:
Method 1 is rounding vat on each line, then summing them.
Method 2 is summing all vat on each line, then rounding result.
Final result may differs from few cents. Default mode is mode %s. +RefExt=Външна референция +ToCreateAPredefinedInvoice=За да създадете шаблонна фактура създайте стандартна фактура, след което преди да я валидирате кликнете върху бутона "%s". +LinkedOrder=Връзка към поръчка +Mode1=Метод 1 +Mode2=Метод 2 +CalculationRuleDesc=За изчисляване на общия ДДС има два метода:
Метод 1 закръгля ДДС за всеки ред, след което ги сумира.
Метод 2 сумира ДДС от всеки ред, след което закръглява резултатът.
Крайните резултати може да се различават в известна степен. Метод по подразбиране е метод %s. CalculationRuleDescSupplier=Според доставчика, изберете подходящ метод, за да приложите същото правило за изчисление и да получите същия резултат, очакван от вашия доставчик. -TurnoverPerProductInCommitmentAccountingNotRelevant=Отчетът за оборот, натрупан от продукт, не е наличен. Този отчет е налице само за фактуриран оборот. -TurnoverPerSaleTaxRateInCommitmentAccountingNotRelevant=Отчетът за оборот, натрупан от данък върху продажбите, не е наличен. Този отчет е налице само за фактуриран оборот. -CalculationMode=Calculation mode +TurnoverPerProductInCommitmentAccountingNotRelevant=Справката за оборот, натрупан от продукт, не е наличен. Тази справка е налице само за фактуриран оборот. +TurnoverPerSaleTaxRateInCommitmentAccountingNotRelevant=Справката за оборот, натрупан от данък върху продажбите, не е наличен. Тази справка е налице само за фактуриран оборот. +CalculationMode=Режим на изчисление AccountancyJournal=Счетоводен код на журнала ACCOUNTING_VAT_SOLD_ACCOUNT=Счетоводна сметка по подразбиране за ДДС при продажби (използва се, ако не е определена при настройка на речника за ДДС) ACCOUNTING_VAT_BUY_ACCOUNT=Счетоводна сметка по подразбиране за ДДС при покупки (използва се, ако не е определена при настройка на речника за ДДС) @@ -232,14 +232,14 @@ ACCOUNTING_ACCOUNT_SUPPLIER=Счетоводна сметка, използва ACCOUNTING_ACCOUNT_SUPPLIER_Desc=Специализираната счетоводна сметка, определена в картата на контрагента, ще се използва само за счетоводно отчитане на подсметка. Този ще бъде използван за главната книга и като стойност по подразбиране на подсметката за счетоводното отчитане, ако не е дефинирана специализирана счетоводна сметка за доставчика. ConfirmCloneTax=Потвърдете клонирането на социален/фискален данък CloneTaxForNextMonth=Клониране за следващ месец -SimpleReport=Simple report -AddExtraReport=Допълнителни отчети (добавете чуждестранен и национален клиентски отчет) -OtherCountriesCustomersReport=Foreign customers report -BasedOnTwoFirstLettersOfVATNumberBeingDifferentFromYourCompanyCountry=Based on the two first letters of the VAT number being different from your own company's country code -SameCountryCustomersWithVAT=National customers report -BasedOnTwoFirstLettersOfVATNumberBeingTheSameAsYourCompanyCountry=Based on the two first letters of the VAT number being the same as your own company's country code +SimpleReport=Обикновена справка +AddExtraReport=Допълнителни справки (добавя справка за чуждестранни и локални клиенти) +OtherCountriesCustomersReport=Справка за чуждестранни клиенти +BasedOnTwoFirstLettersOfVATNumberBeingDifferentFromYourCompanyCountry=Въз основа на първите две букви от номера по ДДС, различен от кода на държавата на вашата фирма +SameCountryCustomersWithVAT=Справка за локални клиенти +BasedOnTwoFirstLettersOfVATNumberBeingTheSameAsYourCompanyCountry=Въз основа на първите две букви от номера по ДДС, които са същите като в кода на държавата на вашата фирма LinkedFichinter=Връзка към интервенция -ImportDataset_tax_contrib=Социални/фискални данъци +ImportDataset_tax_contrib=Социални / фискални данъци ImportDataset_tax_vat=Плащания на ДДС ErrorBankAccountNotFound=Грешка: Банковата сметка не е намерена FiscalPeriod=Период на осчетоводяване @@ -250,7 +250,7 @@ LastDayTaxIsRelatedTo=Последен ден от периода, с който VATDue=Заявен данък върху продажбите ClaimedForThisPeriod=Заявен за периода PaidDuringThisPeriod=Платен през този период -ByVatRate=По ставка на данък върху продажбите -TurnoverbyVatrate=Оборот, фактуриран по данъчна ставка върху продажбите -TurnoverCollectedbyVatrate=Оборот, натрупан по данъчна ставка върху продажбите -PurchasebyVatrate=Покупка по данъчна ставка за продажба +ByVatRate=По ставка на ДДС +TurnoverbyVatrate=Оборот, фактуриран по ставка на ДДС +TurnoverCollectedbyVatrate=Оборот, натрупан по ставка на ДДС +PurchasebyVatrate=Покупка по ставка на ДДС diff --git a/htdocs/langs/bg_BG/contracts.lang b/htdocs/langs/bg_BG/contracts.lang index 346d8e3aad3..97a5594bab1 100644 --- a/htdocs/langs/bg_BG/contracts.lang +++ b/htdocs/langs/bg_BG/contracts.lang @@ -1,98 +1,98 @@ # Dolibarr language file - Source file is en_US - contracts -ContractsArea=Договори област -ListOfContracts=Списък на договорите +ContractsArea=Секция за договори +ListOfContracts=Списък на договори AllContracts=Всички договори -ContractCard=Карта на договор -ContractStatusNotRunning=Не работи -ContractStatusDraft=Проект -ContractStatusValidated=Утвърден -ContractStatusClosed=Затворен -ServiceStatusInitial=Не работи -ServiceStatusRunning=Бягане -ServiceStatusNotLate=Работещи, изтекъл -ServiceStatusNotLateShort=Не е изтекъл -ServiceStatusLate=Спринт, изтекъл +ContractCard=Карта +ContractStatusNotRunning=Не се изпълнява +ContractStatusDraft=Чернова +ContractStatusValidated=Валидиран +ContractStatusClosed=Прекратен +ServiceStatusInitial=Неактивна +ServiceStatusRunning=Активна +ServiceStatusNotLate=Активна, неизтекла +ServiceStatusNotLateShort=Неизтекла +ServiceStatusLate=Активна, изтекла ServiceStatusLateShort=Изтекла -ServiceStatusClosed=Затворен -ShowContractOfService=Показване на договора за услугата +ServiceStatusClosed=Прекратена +ShowContractOfService=Показване на договор за услуга Contracts=Договори ContractsSubscriptions=Договори / Абонаменти ContractsAndLine=Договори и договорни линии Contract=Договор ContractLine=Договорна линия -Closing=Затваряне -NoContracts=Не договори +Closing=Прекратяване +NoContracts=Няма договори MenuServices=Услуги -MenuInactiveServices=Услуги, които не са активни -MenuRunningServices=Текущи услуги +MenuInactiveServices=Неактивни услуги +MenuRunningServices=Активни услуги MenuExpiredServices=Изтекли услуги -MenuClosedServices=Затворени услуги +MenuClosedServices=Прекратени услуги NewContract=Нов договор NewContractSubscription=Нов договор / абонамент AddContract=Създаване на договор -DeleteAContract=Изтриване на договора -ActivateAllOnContract=Активиране всички услуги -CloseAContract=Затваряне на договора +DeleteAContract=Изтриване на договор +ActivateAllOnContract=Активиране на всички услуги +CloseAContract=Прекратяване на договор ConfirmDeleteAContract=Сигурни ли сте, че искате да изтриете този договор с всички предоставени услуги? -ConfirmValidateContract=Сигурни ли сте, че искате да валидирате този договор под името %s? -ConfirmActivateAllOnContract=Това ще отвори всички услуги (които са все още неактивни). Наистина ли искате да отворите всички услуги? -ConfirmCloseContract=Това ще затвори всички услуги (активни или не). Сигурни ли сте, че искате да прекратите този договор? -ConfirmCloseService=Сигурни ли сте, че искате да затворите тази услуга с дата %s ? -ValidateAContract=Одобряване на договор -ActivateService=Активиране на услугата +ConfirmValidateContract=Сигурни ли сте, че искате да валидирате този договор с № %s? +ConfirmActivateAllOnContract=Това ще активира всички услуги, които са все още неактивни. Наистина ли искате да активирате всички услуги? +ConfirmCloseContract=Това ще прекрати всички услуги (активни или не). Сигурни ли сте, че искате да прекратите този договор? +ConfirmCloseService=Сигурни ли сте, че искате да прекратите тази услуга с дата %s ? +ValidateAContract=Валидиране на договор +ActivateService=Активиране на услуга ConfirmActivateService=Сигурни ли сте, че искате да активирате тази услуга с дата %s ? -RefContract=Договор препратка +RefContract=Реф. договор DateContract=Дата на договора -DateServiceActivate=Датата на активиране на услугата -ListOfServices=Списък на услугите -ListOfInactiveServices=Списък на не е активен услуги -ListOfExpiredServices=Списък на изтекъл активни услуги -ListOfClosedServices=Списък на затворените услуги -ListOfRunningServices=Списък на стартираните услуги -NotActivatedServices=Неактивни услуги (сред валидирани договори) -BoardNotActivatedServices=Услуги за да активирате сред утвърдени договори +DateServiceActivate=Дата на активиране на услуга +ListOfServices=Списък на услуги +ListOfInactiveServices=Списък на неактивни услуги +ListOfExpiredServices=Списък на изтекли активни услуги +ListOfClosedServices=Списък на прекратени услуги +ListOfRunningServices=Списък на активни услуги +NotActivatedServices=Неактивни услуги (измежду валидирани договори) +BoardNotActivatedServices=Услуги за активиране (измежду валидирани договори) LastContracts=Договори: %s последни LastModifiedServices=Услуги: %s последно променени ContractStartDate=Начална дата ContractEndDate=Крайна дата DateStartPlanned=Планирана начална дата DateStartPlannedShort=Планирана начална дата -DateEndPlanned=Планиран крайната дата -DateEndPlannedShort=Планиран крайната дата -DateStartReal=Недвижими началната дата -DateStartRealShort=Недвижими началната дата -DateEndReal=Недвижими крайната дата -DateEndRealShort=Недвижими крайната дата -CloseService=Затворете услуга -BoardRunningServices=Услуги в ход -BoardExpiredServices=Услуги с изтекъл срок -ServiceStatus=Състояние на услугата +DateEndPlanned=Планирана крайна дата +DateEndPlannedShort=Планирана крайна дата +DateStartReal=Реална начална дата +DateStartRealShort=Реална начална дата +DateEndReal=Реална крайна дата +DateEndRealShort=Реална крайна дата +CloseService=Приключване на услуга +BoardRunningServices=Активни услуги +BoardExpiredServices=Изтекли услуги +ServiceStatus=Статус на услуга DraftContracts=Чернови договори -CloseRefusedBecauseOneServiceActive=Договорът не може да бъде затворен, тъй като има най-малко една отворена услуга в него +CloseRefusedBecauseOneServiceActive=Договорът не може да бъде прекратен, тъй като има най-малко една активна услуга в него. ActivateAllContracts=Активиране на всички договорни линии -CloseAllContracts=Затворете всички договорни линии -DeleteContractLine=Изтриване на линия договор +CloseAllContracts=Прекратяване на всички договорни линии +DeleteContractLine=Изтриване на договорна линия ConfirmDeleteContractLine=Сигурни ли сте, че искате да изтриете тази договорна линия? -MoveToAnotherContract=Преместване на службата в друг договор. -ConfirmMoveToAnotherContract=Избра новата цел на договора и потвърдете, искам да се движат тази услуга в този договор. +MoveToAnotherContract=Преместване на услуга в друг договор. +ConfirmMoveToAnotherContract=Избрах нов целеви договор и потвърждавам, че искам да преместя тази услуга в този договор. ConfirmMoveToAnotherContractQuestion=Изберете в кой съществуващ договор (на същия контрагент) искате да преместите тази услуга? -PaymentRenewContractId=Поднови договора линия (брой %s) -ExpiredSince=Срок на годност -NoExpiredServices=Не изтекъл активни услуги -ListOfServicesToExpireWithDuration=Списък на Услуги изтичащи в %s дни -ListOfServicesToExpireWithDurationNeg=Списък на услуги изтекли повече от %s дни -ListOfServicesToExpire=Списък на изтичащи Услуги -NoteListOfYourExpiredServices=Този списък съдържа само услуги от договори с контрагенти, с които сте свързани като търговски представител. +PaymentRenewContractId=Подновяване на договорна линия (№ %s) +ExpiredSince=Дата на изтичане +NoExpiredServices=Няма изтекли активни услуги +ListOfServicesToExpireWithDuration=Списък на услуги изтичащи в следващите %s дни +ListOfServicesToExpireWithDurationNeg=Списък на услуги изтекли преди повече от %s дни +ListOfServicesToExpire=Списък на изтичащи услуги +NoteListOfYourExpiredServices=Този списък съдържа само услуги от договори с контрагенти, за които сте посочен като търговски представител. StandardContractsTemplate=Стандартен шаблон за договори ContactNameAndSignature=За %s, име и подпис: -OnlyLinesWithTypeServiceAreUsed=Само линии с тип "Услуга" ще бъдат клонирани. -ConfirmCloneContract=Сигурни ли сте, че искате да клонирате договора %s ? -LowerDateEndPlannedShort=По-ранна планирана крайна дата на активните услуги +OnlyLinesWithTypeServiceAreUsed=Само договорни линии тип 'Услуга' ще бъдат клонирани. +ConfirmCloneContract=Сигурни ли сте, че искате да клонирате договор %s ? +LowerDateEndPlannedShort=По-ранна планирана крайна дата на активни услуги SendContractRef=Информация за договор __REF__ OtherContracts=Други договори ##### Types de contacts ##### -TypeContact_contrat_internal_SALESREPSIGN=Търговски представител подписване на договора -TypeContact_contrat_internal_SALESREPFOLL=Търговски представител проследяване договор -TypeContact_contrat_external_BILLING=Контакт с клиента за фактуриране -TypeContact_contrat_external_CUSTOMER=Следвайте контакт с клиентите -TypeContact_contrat_external_SALESREPSIGN=Подписване на договор клиента контакт +TypeContact_contrat_internal_SALESREPSIGN=Търговски представител (подписващ) +TypeContact_contrat_internal_SALESREPFOLL=Търговски представител (проследяващ) +TypeContact_contrat_external_BILLING=Контакт на клиента за фактуриране +TypeContact_contrat_external_CUSTOMER=Контакт на клиента (проследяващ) +TypeContact_contrat_external_SALESREPSIGN=Контакт на клиента (подписващ) diff --git a/htdocs/langs/bg_BG/deliveries.lang b/htdocs/langs/bg_BG/deliveries.lang index a1a7e459b09..5147633f5c9 100644 --- a/htdocs/langs/bg_BG/deliveries.lang +++ b/htdocs/langs/bg_BG/deliveries.lang @@ -1,30 +1,31 @@ # Dolibarr language file - Source file is en_US - deliveries Delivery=Доставка -DeliveryRef=Ref Delivery -DeliveryCard=Receipt card -DeliveryOrder=Доставка за +DeliveryRef=Реф. доставка +DeliveryCard=Карта на разписка +DeliveryOrder=Разписка за доставка DeliveryDate=Дата на доставка -CreateDeliveryOrder=Generate delivery receipt -DeliveryStateSaved=Състояние на доставката е записано -SetDeliveryDate=Дата на изпращане -ValidateDeliveryReceipt=Одобряване на разписка -ValidateDeliveryReceiptConfirm=Are you sure you want to validate this delivery receipt? -DeleteDeliveryReceipt=Изтриване на разписка -DeleteDeliveryReceiptConfirm=Are you sure you want to delete delivery receipt %s? -DeliveryMethod=Начин +CreateDeliveryOrder=Генериране на разписка за доставка +DeliveryStateSaved=Състоянието на доставката е записано +SetDeliveryDate=Задаване на дата за доставка +ValidateDeliveryReceipt=Валидиране на разписка за доставка +ValidateDeliveryReceiptConfirm=Сигурни ли сте, че искате да валидирате тази разписка за доставка? +DeleteDeliveryReceipt=Изтриване на разписка за доставка +DeleteDeliveryReceiptConfirm=Сигурни ли сте, че искате да изтриете тази разписка %s? +DeliveryMethod=Начин на доставка TrackingNumber=Проследяващ номер -DeliveryNotValidated=Доставката не валидирани -StatusDeliveryCanceled=Отменен +DeliveryNotValidated=Доставката не е валидирана +StatusDeliveryCanceled=Анулирана StatusDeliveryDraft=Чернова -StatusDeliveryValidated=Получено +StatusDeliveryValidated=Получена # merou PDF model NameAndSignature=Име и подпис: -ToAndDate=To___________________________________ на ____ / _____ / __________ -GoodStatusDeclaration=Стоките са получили по-горе в добро състояние, -Deliverer=Избавител: +ToAndDate=От ___________________________________ на ____ / _____ / __________ +GoodStatusDeclaration=Получих стоките (артикулите) описани по-горе в добро състояние, +Deliverer=Доставчик: Sender=Подател Recipient=Получател ErrorStockIsNotEnough=Няма достатъчна наличност Shippable=Годно за изпращане NonShippable=Негодно за изпращане -ShowReceiving=Show delivery receipt +ShowReceiving=Показване на разписка за доставка +NonExistentOrder=Несъществуваща поръчка diff --git a/htdocs/langs/bg_BG/dict.lang b/htdocs/langs/bg_BG/dict.lang index 95f8d38c216..2c3a9ecbe8e 100644 --- a/htdocs/langs/bg_BG/dict.lang +++ b/htdocs/langs/bg_BG/dict.lang @@ -21,7 +21,7 @@ CountryNL=Холандия CountryHU=Унгария CountryRU=Русия CountrySE=Швеция -CountryCI=Ivoiry Coast +CountryCI=Кот д'Ивоар CountrySN=Сенегал CountryAR=Аржентина CountryCM=Камерун @@ -31,19 +31,19 @@ CountryMC=Монако CountryAU=Австралия CountrySG=Сингапур CountryAF=Афганистан -CountryAX=Аландските острови +CountryAX=Аландски острови CountryAL=Албания CountryAS=Американска Самоа CountryAD=Андора CountryAO=Ангола -CountryAI=Anguilla +CountryAI=Ангуила CountryAQ=Антарктида CountryAG=Антигуа и Барбуда CountryAM=Армения CountryAW=Аруба CountryAT=Австрия CountryAZ=Азербайджан -CountryBS=Бахамските острови +CountryBS=Бахамски острови CountryBH=Бахрейн CountryBD=Бангладеш CountryBB=Барбадос @@ -54,7 +54,7 @@ CountryBM=Бермуда CountryBT=Бутан CountryBO=Боливия CountryBA=Босна и Херцеговина -CountryBW=Ботсуана +CountryBW=Ботсвана CountryBV=Остров Буве CountryBR=Бразилия CountryIO=Британска територия в Индийския океан @@ -64,16 +64,16 @@ CountryBF=Буркина Фасо CountryBI=Бурунди CountryKH=Камбоджа CountryCV=Кабо Верде -CountryKY=Каймановите острови +CountryKY=Кайманови острови CountryCF=Централноафриканска република CountryTD=Чад CountryCL=Чили CountryCX=Остров Рождество -CountryCC=Cocos (Keeling) Islands +CountryCC=Кокосови острови CountryCO=Колумбия -CountryKM=Коморските острови +CountryKM=Коморски острови CountryCG=Конго -CountryCD=Конго, Демократична република +CountryCD=Демократична република Конго CountryCK=Острови Кук CountryCR=Коста Рика CountryHR=Хърватия @@ -91,8 +91,8 @@ CountryGQ=Екваториална Гвинея CountryER=Еритрея CountryEE=Естония CountryET=Етиопия -CountryFK=Фолкландските острови -CountryFO=Фарьорските острови +CountryFK=Фолклендски острови +CountryFO=Фарьорски острови CountryFJ=Фиджи CountryFI=Финландия CountryGF=Френска Гвиана @@ -112,10 +112,10 @@ CountryGN=Гвинея CountryGW=Гвинея-Бисау CountryGY=Гвиана CountryHT=Хаити -CountryHM=Хърд и Макдоналд +CountryHM=Острови Хърд и Макдоналд CountryVA=Светия престол (Ватикана) CountryHN=Хондурас -CountryHK=Хонконг +CountryHK=Хонгконг CountryIS=Исландия CountryIN=Индия CountryID=Индонезия @@ -137,19 +137,19 @@ CountryLV=Латвия CountryLB=Ливан CountryLS=Лесото CountryLR=Либерия -CountryLY=Либийски +CountryLY=Либия CountryLI=Лихтенщайн CountryLT=Литва CountryLU=Люксембург CountryMO=Макао -CountryMK=Македония, Бивша югославска +CountryMK=Северна Македония CountryMG=Мадагаскар CountryMW=Малави CountryMY=Малайзия -CountryMV=Малдивите +CountryMV=Малдиви CountryML=Мали CountryMT=Малта -CountryMH=Маршаловите острови +CountryMH=Маршалови острови CountryMQ=Мартиника CountryMR=Мавритания CountryMU=Мавриций @@ -158,20 +158,20 @@ CountryMX=Мексико CountryFM=Микронезия CountryMD=Молдова CountryMN=Монголия -CountryMS=Monserrat +CountryMS=Монсерат CountryMZ=Мозамбик CountryMM=Мианмар (Бирма) CountryNA=Намибия CountryNR=Науру CountryNP=Непал -CountryAN=Нидерландските Антили +CountryAN=Нидерландски Антили CountryNC=Нова Каледония CountryNZ=Нова Зеландия CountryNI=Никарагуа CountryNE=Нигер CountryNG=Нигерия CountryNU=Ниуе -CountryNF=Норфолк +CountryNF=Остров Норфолк CountryMP=Северни Мариански острови CountryNO=Норвегия CountryOM=Оман @@ -179,15 +179,15 @@ CountryPK=Пакистан CountryPW=Палау CountryPS=Палестинска територия, окупирана CountryPA=Панама -CountryPG=Папуа-Нова Гвинея +CountryPG=Папуа Нова Гвинея CountryPY=Парагвай CountryPE=Перу CountryPH=Филипини -CountryPN=Питкерн острови +CountryPN=Острови Питкерн CountryPL=Полша CountryPR=Пуерто Рико CountryQA=Катар -CountryRE=Повторно обединяване +CountryRE=Реюнион CountryRO=Румъния CountryRW=Руанда CountrySH=Света Елена @@ -199,11 +199,11 @@ CountryWS=Самоа CountrySM=Сан Марино CountryST=Сао Томе и Принсипи CountryRS=Сърбия -CountrySC=Сейшелите +CountrySC=Сейшели CountrySL=Сиера Леоне CountrySK=Словакия CountrySI=Словения -CountrySB=Соломоновите острови +CountrySB=Соломонови острови CountrySO=Сомалия CountryZA=Южна Африка CountryGS=Южна Джорджия и Южни Сандвичеви острови @@ -212,14 +212,14 @@ CountrySD=Судан CountrySR=Суринам CountrySJ=Свалбард и Ян Майен CountrySZ=Свазиленд -CountrySY=Сирийски +CountrySY=Сирия CountryTW=Тайван CountryTJ=Таджикистан CountryTZ=Танзания CountryTH=Тайланд CountryTL=Източен Тимор CountryTK=Токелау -CountryTO=Лека индийска двуколка +CountryTO=Тонга CountryTT=Тринидад и Тобаго CountryTR=Турция CountryTM=Туркменистан @@ -227,8 +227,8 @@ CountryTC=Острови Търкс и Кайкос CountryTV=Тувалу CountryUG=Уганда CountryUA=Украйна -CountryAE=Обединените арабски емирства -CountryUM=САЩ Малки далечни острови +CountryAE=Обединени арабски емирства +CountryUM=Отдалечени острови на САЩ CountryUY=Уругвай CountryUZ=Узбекистан CountryVU=Вануату @@ -241,55 +241,55 @@ CountryEH=Западна Сахара CountryYE=Йемен CountryZM=Замбия CountryZW=Зимбабве -CountryGG=Вълнена фланела +CountryGG=Гърнзи CountryIM=Остров Ман CountryJE=Жарсе CountryME=Черна гора -CountryBL=Сен Бартелеми -CountryMF=Saint Martin +CountryBL=Сен Бартелми +CountryMF=Свети Мартин ##### Civilities ##### -CivilityMME=Г-жа -CivilityMR=Г-н -CivilityMLE=Г-ца -CivilityMTRE=Майстор -CivilityDR=Доктор +CivilityMME=г-жа +CivilityMR=г-н +CivilityMLE=г-ца +CivilityMTRE=м-р +CivilityDR=д-р ##### Currencies ##### Currencyeuros=Евро -CurrencyAUD=AU долара -CurrencySingAUD=AU долар -CurrencyCAD=CAN долара -CurrencySingCAD=CAN долар +CurrencyAUD=Австралийски долара +CurrencySingAUD=Австралийски долар +CurrencyCAD=Канадски долара +CurrencySingCAD=Канадски долар CurrencyCHF=Швейцарски франкове CurrencySingCHF=Швейцарски франк CurrencyEUR=Евро CurrencySingEUR=Евро CurrencyFRF=Френски франкове CurrencySingFRF=Френския франк -CurrencyGBP=GB лири -CurrencySingGBP=GB лира +CurrencyGBP=Британски лири +CurrencySingGBP=Британска лира CurrencyINR=Индийски рупии CurrencySingINR=Индийска рупия CurrencyMAD=Дирхам CurrencySingMAD=Дирхам -CurrencyMGA=Ariary -CurrencySingMGA=Ariary -CurrencyMUR=Мавриций рупии -CurrencySingMUR=Мавриций рупии -CurrencyNOK=Норвежките Кронес +CurrencyMGA=Ариари +CurrencySingMGA=Ариари +CurrencyMUR=Маврицийски рупии +CurrencySingMUR=Маврицийска рупия +CurrencyNOK=Норвежки крони CurrencySingNOK=Норвежка крона -CurrencyTND=Тунизийски динара +CurrencyTND=Тунизийски динари CurrencySingTND=Тунизийски динар CurrencyUSD=Щатски долари CurrencySingUSD=Щатски долар CurrencyUAH=Хривня CurrencySingUAH=Хривня -CurrencyXAF=CFA франка BEAC -CurrencySingXAF=CFA Franc BEAC +CurrencyXAF=CFA франкове BEAC +CurrencySingXAF=CFA франк BEAC CurrencyXOF=CFA франкове BCEAO CurrencySingXOF=CFA франк BCEAO -CurrencyXPF=ОПОР франкове -CurrencySingXPF=CFP франк +CurrencyXPF=Френски тихоокеански франкове +CurrencySingXPF=Френски тихоокеански франк CurrencyCentEUR=центa CurrencyCentSingEUR=цент CurrencyCentINR=пайса @@ -298,12 +298,12 @@ CurrencyThousandthSingTND=хиляден #### Input reasons ##### DemandReasonTypeSRC_INTE=Интернет DemandReasonTypeSRC_CAMP_MAIL=Пощенска кампания -DemandReasonTypeSRC_CAMP_EMAIL=Кампания по имейл +DemandReasonTypeSRC_CAMP_EMAIL=Имейл кампания DemandReasonTypeSRC_CAMP_PHO=Телефонна кампания DemandReasonTypeSRC_CAMP_FAX=Факс кампания DemandReasonTypeSRC_COMM=Търговски контакт -DemandReasonTypeSRC_SHOP=Контакт с магазин -DemandReasonTypeSRC_WOM=Уста на уста +DemandReasonTypeSRC_SHOP=Контакт от магазин +DemandReasonTypeSRC_WOM=От уста на уста DemandReasonTypeSRC_PARTNER=Партньор DemandReasonTypeSRC_EMPLOYEE=Служител DemandReasonTypeSRC_SPONSORING=Спонсорство diff --git a/htdocs/langs/bg_BG/ecm.lang b/htdocs/langs/bg_BG/ecm.lang index 20b6c024577..160f2dcc5ca 100644 --- a/htdocs/langs/bg_BG/ecm.lang +++ b/htdocs/langs/bg_BG/ecm.lang @@ -1,52 +1,52 @@ # Dolibarr language file - Source file is en_US - ecm -ECMNbOfDocs=No. of documents in directory +ECMNbOfDocs=Брой документи в директорията ECMSection=Директория ECMSectionManual=Ръчно създадена директория ECMSectionAuto=Автоматично създадена директория ECMSectionsManual=Ръчно създадено дърво ECMSectionsAuto=Автоматично създадено дърво ECMSections=Директории -ECMRoot=ECM Root +ECMRoot=Основна директория ECMNewSection=Нова директория ECMAddSection=Добавяне на директория ECMCreationDate=Дата на създаване -ECMNbOfFilesInDir=Брой на файловете в директорията -ECMNbOfSubDir=Брой на под-директориите -ECMNbOfFilesInSubDir=Брой на файловете в под-директориите +ECMNbOfFilesInDir=Брой файлове в директорията +ECMNbOfSubDir=Брой поддиректории +ECMNbOfFilesInSubDir=Брой файлове в поддиректориите ECMCreationUser=Създател -ECMArea=DMS/ECM area -ECMAreaDesc=The DMS/ECM (Document Management System / Electronic Content Management) area allows you to save, share and search quickly all kind of documents in Dolibarr. -ECMAreaDesc2=* Автоматично създадените директории се запълват автоматично при добавяне на документи в картата на даден елемент.
* Ръчно създадените директории могат да бъдат използвани, за да запазите документи, които не са свързани с определен елемент. -ECMSectionWasRemoved=Директорията %s беше изтрита. -ECMSectionWasCreated=Directory %s has been created. +ECMArea=Документи +ECMAreaDesc=Секцията DMS / ECM (Система за управление на документи / Електронно управление на съдържание) позволява да съхранявате, споделяте и бързо да откривате всички видове документи в системата. +ECMAreaDesc2=* Автоматично създадените директории се попълват автоматично при добавяне на документи в картата на даден елемент.
* Ръчно създадените директории могат да бъдат използвани, за да съхранявате документи, които не са свързани с определен елемент. +ECMSectionWasRemoved=Директорията %s е изтрита. +ECMSectionWasCreated=Директорията %s е създадена. ECMSearchByKeywords=Търсене по ключови думи ECMSearchByEntity=Търсене по обект -ECMSectionOfDocuments=Директории на документи +ECMSectionOfDocuments=Директории с документи ECMTypeAuto=Автоматично ECMDocsBySocialContributions=Документи свързани със социални или фискални такси -ECMDocsByThirdParties=Документи, свързани с контрагенти -ECMDocsByProposals=Документи, свързани с предложения -ECMDocsByOrders=Документи, свързани с поръчки на клиенти -ECMDocsByContracts=Документи, свързани с договори -ECMDocsByInvoices=Документи, свързани с клиентите фактури -ECMDocsByProducts=Документи, свързани с продуктите -ECMDocsByProjects=Документи свързани към проекти -ECMDocsByUsers=Документи свързани към потребители -ECMDocsByInterventions=Документи свързани към интервенции -ECMDocsByExpenseReports=Documents linked to expense reports -ECMDocsByHolidays=Documents linked to holidays -ECMDocsBySupplierProposals=Documents linked to supplier proposals -ECMNoDirectoryYet=Не е създадена директория -ShowECMSection=Покажи директория +ECMDocsByThirdParties=Документи свързани с контрагенти +ECMDocsByProposals=Документи свързани с предложения +ECMDocsByOrders=Документи свързани с поръчки за продажба +ECMDocsByContracts=Документи свързани с договори +ECMDocsByInvoices=Документи свързани с фактури за продажба +ECMDocsByProducts=Документи свързани с продукти +ECMDocsByProjects=Документи свързани с проекти +ECMDocsByUsers=Документи свързани с потребители +ECMDocsByInterventions=Документи свързани с интервенции +ECMDocsByExpenseReports=Документи свързани с разходни отчети +ECMDocsByHolidays=Документи свързани с отпуски +ECMDocsBySupplierProposals=Документи свързани със запитвания към доставчици +ECMNoDirectoryYet=Няма създадена директория +ShowECMSection=Показване на директория DeleteSection=Изтриване на директория -ConfirmDeleteSection=Can you confirm you want to delete the directory %s? -ECMDirectoryForFiles=Относителна директория за файловете -CannotRemoveDirectoryContainsFilesOrDirs=Removal not possible because it contains some files or sub-directories -CannotRemoveDirectoryContainsFiles=Removal not possible because it contains some files +ConfirmDeleteSection=Сигурни ли сте, че искате да изтриете директорията %s? +ECMDirectoryForFiles=Относителна директория за файлове +CannotRemoveDirectoryContainsFilesOrDirs=Изтриването не е възможно, защото съдържа файлове или поддиректории +CannotRemoveDirectoryContainsFiles=Изтриването не е възможно, защото съдържа файлове ECMFileManager=Файлов мениджър -ECMSelectASection=Select a directory in the tree... -DirNotSynchronizedSyncFirst=This directory seems to be created or modified outside ECM module. You must click on "Resync" button first to synchronize disk and database to get content of this directory. -ReSyncListOfDir=Resync list of directories -HashOfFileContent=Hash of file content -NoDirectoriesFound=No directories found -FileNotYetIndexedInDatabase=File not yet indexed into database (try to re-upload it) +ECMSelectASection=Изберете директория от дървото... +DirNotSynchronizedSyncFirst=Тази директория изглежда е създадена или модифицирана извън модула DMS / ECM. За синхронизиране на диска и базата данни първо трябва да кликнете върху бутона за синхронизиране на списъка, за да получите съдържанието на тази директория. +ReSyncListOfDir=Синхронизиране на списъка с директории +HashOfFileContent=Хеш код на файла +NoDirectoriesFound=Няма намерени директории +FileNotYetIndexedInDatabase=Файлът все още не е индексиран в базата данни (опитайте да го качите отново) diff --git a/htdocs/langs/bg_BG/help.lang b/htdocs/langs/bg_BG/help.lang index ef4733a4662..912fd2b2171 100644 --- a/htdocs/langs/bg_BG/help.lang +++ b/htdocs/langs/bg_BG/help.lang @@ -5,19 +5,19 @@ RemoteControlSupport=Онлайн в реално време / дистанци OtherSupport=Друга поддръжка ToSeeListOfAvailableRessources=За да се свържете/вижте наличните ресурси: HelpCenter=Помощен център -DolibarrHelpCenter=Dolibarr Help and Support Center -ToGoBackToDolibarr=Otherwise, click here to continue to use Dolibarr. -TypeOfSupport=Type of support +DolibarrHelpCenter=Dolibarr център за помощ и поддръжка +ToGoBackToDolibarr=В противен случай, кликнете тук, за да продължите да използвате Dolibarr. +TypeOfSupport=Тип поддръжка TypeSupportCommunauty=Общност (безплатно) TypeSupportCommercial=Търговски TypeOfHelp=Тип -NeedHelpCenter=Need help or support? +NeedHelpCenter=Нуждаете се от помощ или поддръжка? Efficiency=Ефективност TypeHelpOnly=Само помощ TypeHelpDev=Помощ + развитие -TypeHelpDevForm=Help+Development+Training -BackToHelpCenter=Otherwise, go back to Help center home page. -LinkToGoldMember=You can call one of the trainers preselected by Dolibarr for your language (%s) by clicking their Widget (status and maximum price are automatically updated): +TypeHelpDevForm=Помощ + развитие + обучение +BackToHelpCenter=В противен случай се върнете в началната страница на помощния център. +LinkToGoldMember=Можете да се обадите на някой от обучаващите, предварително избрани от Dolibarr за вашия език (%s), като кликнете върху тяхната джаджа (статуса и максималната цена са автоматично актуализирани): PossibleLanguages=Поддържани езици -SubscribeToFoundation=Help the Dolibarr project, subscribe to the foundation +SubscribeToFoundation=Помогнете на проекта Dolibarr, като се присъедините към фондацията SeeOfficalSupport=За официална поддръжка на Dolibarr за Вашият език:
%s diff --git a/htdocs/langs/bg_BG/holiday.lang b/htdocs/langs/bg_BG/holiday.lang index e0194788563..615a1b6e0ad 100644 --- a/htdocs/langs/bg_BG/holiday.lang +++ b/htdocs/langs/bg_BG/holiday.lang @@ -1,7 +1,7 @@ # Dolibarr language file - Source file is en_US - holiday HRM=ЧР -Holidays=Отпуск -CPTitreMenu=Отпуск +Holidays=Отпуски +CPTitreMenu=Отпуски MenuReportMonth=Месечно извлечение MenuAddCP=Нова молба за отпуск NotActiveModCP=Необходимо е да активирате модула 'Отпуски', за да видите тази страница. @@ -9,93 +9,93 @@ AddCP=Кандидатстване за отпуск DateDebCP=Начална дата DateFinCP=Крайна дата DateCreateCP=Дата на създаване -DraftCP=Проект +DraftCP=Чернова ToReviewCP=Очаква одобрение -ApprovedCP=Утвърден -CancelCP=Отменен -RefuseCP=Отказ -ValidatorCP=Утвърждаващ -ListeCP=Списък с отпуски -LeaveId=№ на отпуск -ReviewedByCP=Ще бъде утвърден от +ApprovedCP=Одобрена +CancelCP=Анулирана +RefuseCP=Отхвърлена +ValidatorCP=Одобряващ +ListeCP=Списък с молби за отпуск +LeaveId=Идентификатор на молба за отпуск +ReviewedByCP=Ще бъде одобрена от UserForApprovalID=Одобряващ потребител UserForApprovalFirstname=Собствено име на одобряващия потребител UserForApprovalLastname=Фамилия на одобряващия потребител -UserForApprovalLogin=Входна информация за одобряващия потребител +UserForApprovalLogin=Потребителско име на одобряващия потребител DescCP=Описание SendRequestCP=Създаване на молба за отпуск -DelayToRequestCP=Молбите за отпуски трябва да бъдат направени най-малко %s ден(а) преди началната им дата. -MenuConfCP=Баланс на отпуските +DelayToRequestCP=Молбите за отпуск трябва да бъдат направени най-малко %s ден(а) преди началната им дата. +MenuConfCP=Баланс на отпуски SoldeCPUser=Баланса на отпуските е %s дни. -ErrorEndDateCP=Трябва да изберете крайната дата, по-голяма от началната дата. +ErrorEndDateCP=Трябва да изберете крайна дата, която е по-голяма от началната дата. ErrorSQLCreateCP=Възникна SQL грешка по време на създаването: ErrorIDFicheCP=Възникна грешка, молбата за отпуск не съществува. ReturnCP=Назад към предишната страница -ErrorUserViewCP=Не сте упълномощени да четете тази молба за отпуск. -InfosWorkflowCP=Информация Workflow -RequestByCP=По искане на +ErrorUserViewCP=Не сте упълномощен да прочетете тази молба за отпуск. +InfosWorkflowCP=Информационен работен процес +RequestByCP=По молба на TitreRequestCP=Молба за отпуск -TypeOfLeaveId=№ на отпускът -TypeOfLeaveCode=Код за вида на отпускът -TypeOfLeaveLabel=Вид на отпускът -NbUseDaysCP=Брой на дните на използваните отпуски +TypeOfLeaveId=Идентификатор за вид отпуск +TypeOfLeaveCode=Код за вид отпуск +TypeOfLeaveLabel=Етикет за вид отпуск +NbUseDaysCP=Брой дни използвани за отпуск NbUseDaysCPShort=Използвани дни NbUseDaysCPShortInMonth=Използвани дни в месеца DateStartInMonth=Начална дата в месеца DateEndInMonth=Крайна дата в месеца -EditCP=Редактиране +EditCP=Промяна DeleteCP=Изтриване -ActionRefuseCP=Отказване -ActionCancelCP=Отказ -StatutCP=Състояние -TitleDeleteCP=Изтриване на молбата за отпуск -ConfirmDeleteCP=Потвърждаване на изтриването на тази молба за отпуск? -ErrorCantDeleteCP=Грешка: нямате необходимите права за да изтриете тази молба за отпуск. -CantCreateCP=Вие нямате право да кандидатствате за отпуск. -InvalidValidatorCP=Трябва да изберете лице одобрява молба ви за отпуск. -NoDateDebut=Трябва да изберете началната дата. -NoDateFin=Трябва да изберете крайна дата. +ActionRefuseCP=Отхвърляне +ActionCancelCP=Анулиране +StatutCP=Статус +TitleDeleteCP=Изтриване на молба за отпуск +ConfirmDeleteCP=Сигурни ли сте, че искате да изтриете тази молба за отпуск? +ErrorCantDeleteCP=Грешка: нямате необходимите права, за да изтриете тази молба за отпуск. +CantCreateCP=Нямате право да създавате молби за отпуск. +InvalidValidatorCP=Трябва да изберете потребител, който да одобри вашата молба за отпуск. +NoDateDebut=Необходимо е да изберете начална дата. +NoDateFin=Необходимо е да изберете крайна дата. ErrorDureeCP=Вашата молба за отпуск не съдържа работен ден. -TitleValidCP=Одобряване на молбата за отпуск -ConfirmValidCP=Сигурни ли сте, че желаете да одобрите тази молба за отпуск? -DateValidCP=Дата на утвърждаване +TitleValidCP=Одобряване на молба за отпуск +ConfirmValidCP=Сигурни ли сте, че искате да одобрите тази молба за отпуск? +DateValidCP=Дата на одобрение TitleToValidCP=Изпращане на молба за отпуск -ConfirmToValidCP=Сигурни ли сте, че желаете да изпратите молбата за отпуск? -TitleRefuseCP=Отхвърляне на молбата за отпуск -ConfirmRefuseCP=Сигурни ли сте, че желаете да отхвърлите молбата за отпуск? -NoMotifRefuseCP=Вие трябва да изберете причина за отказ на искането. -TitleCancelCP=Анулиране на молбата за отпуск +ConfirmToValidCP=Сигурни ли сте, че искате да изпратите молбата за отпуск? +TitleRefuseCP=Отхвърляне на молба за отпуск +ConfirmRefuseCP=Сигурни ли сте, че искате да отхвърлите молбата за отпуск? +NoMotifRefuseCP=Необходимо е да посочите причина за отхвърляне на молбата. +TitleCancelCP=Анулиране на молба за отпуск ConfirmCancelCP=Сигурни ли сте, че искате да анулирате молбата за отпуск? -DetailRefusCP=Причина за отказа -DateRefusCP=Дата на отказ -DateCancelCP=Дата на анулирането -DefineEventUserCP=Присвояване изключително отпуск за потребителя -addEventToUserCP=Присвояване напусне -NotTheAssignedApprover=Вие не сте назначен да одобрявате това +DetailRefusCP=Причина за отхвърляне +DateRefusCP=Дата на отхвърляне +DateCancelCP=Дата на анулиране +DefineEventUserCP=Възлагане на извънреден отпуск за потребител +addEventToUserCP=Възлагане на отпуск +NotTheAssignedApprover=Вие не сте определен като одобряващ потребител MotifCP=Причина UserCP=Потребител -ErrorAddEventToUserCP=Възникна грешка при добавяне на изключително отпуск. -AddEventToUserOkCP=Добавянето на извънредния отпуск е завършена. +ErrorAddEventToUserCP=Възникна грешка при добавяне на извънреден отпуск. +AddEventToUserOkCP=Добавянето на извънредния отпуск е завършено. MenuLogCP=История на промените -LogCP=Списък на актуализациите на наличните почивни дни -ActionByCP=В изпълнение на -UserUpdateCP=За потребителя +LogCP=Списък с актуализации на наличните почивни дни +ActionByCP=Изпълнено от +UserUpdateCP=За потребител PrevSoldeCP=Предишен баланс NewSoldeCP=Нов баланс -alreadyCPexist=Вече е направена молба за отпуск за този период. -FirstDayOfHoliday=Първи ден от отпуска -LastDayOfHoliday=Последен ден на отпуска +alreadyCPexist=Вече е създадена молба за отпуск в този период. +FirstDayOfHoliday=Първи ден от отпуск +LastDayOfHoliday=Последен ден от отпуск BoxTitleLastLeaveRequests=Молби за отпуск: %s последно променени HolidaysMonthlyUpdate=Месечна актуализация -ManualUpdate=Ръчна акуализация -HolidaysCancelation=Отказване на молба за отпуск +ManualUpdate=Ръчна актуализация +HolidaysCancelation=Анулиране на молба за отпуск EmployeeLastname=Фамилия на служителя EmployeeFirstname=Собствено име на служителя TypeWasDisabledOrRemoved=Вида отпуск (%s) беше деактивиран или премахнат LastHolidays=Молби за отпуск: %s последни AllHolidays=Всички молби за отпуск HalfDay=Полудневен -NotTheAssignedApprover=Вие не сте назначен да одобрявате това +NotTheAssignedApprover=Вие не сте определен като одобряващ потребител LEAVE_PAID=Платен отпуск LEAVE_SICK=Болничен отпуск LEAVE_OTHER=Неплатен отпуск @@ -103,28 +103,28 @@ LEAVE_PAID_FR=Платен отпуск ## Configuration du Module ## LastUpdateCP=Последно автоматично актуализиране на разпределението на отпуските MonthOfLastMonthlyUpdate=Месец на последната автоматична актуализация на разпределението на отпуските -UpdateConfCPOK=Актуализира се успешно. -Module27130Name= Управление на молби за отпуск +UpdateConfCPOK=Успешно актуализирано. +Module27130Name= Молби за отпуск Module27130Desc= Управление на молби за отпуск ErrorMailNotSend=Възникна грешка при изпращане на имейл: NoticePeriod=Период на известяване #Messages HolidaysToValidate=Валидиране на молби за отпуск -HolidaysToValidateBody=Отдолу е молба за отпуск за валидиране -HolidaysToValidateDelay=Тази молба за отпуск ще се случи в период от по-малко от %s дни. -HolidaysToValidateAlertSolde=Потребителят, който е подал молбата за отпуск, няма достатъчно налични дни. +HolidaysToValidateBody=По-долу е молба за отпуск за валидиране +HolidaysToValidateDelay=Тази молба за отпуск е за период по-малък от %s дни. +HolidaysToValidateAlertSolde=Потребителят, който е създал молбата за отпуск, няма достатъчно налични дни. HolidaysValidated=Валидирани молби за отпуск -HolidaysValidatedBody=Вашата молба за отпуск от %s до %s е била валидирана. -HolidaysRefused=Молбата отказана -HolidaysRefusedBody=Вашата молба за отпуск от %s до %s е била отказана поради следната причина: -HolidaysCanceled=Отказани молби за отпуск -HolidaysCanceledBody=Вашата молба за отпуск от %s до %s е била отказана. +HolidaysValidatedBody=Вашата молба за отпуск от %s до %s е валидирана. +HolidaysRefused=Молбата е отхвърлена +HolidaysRefusedBody=Вашата молба за отпуск от %s до %s е отхвърлена поради следната причина: +HolidaysCanceled=Анулирани молби за отпуск +HolidaysCanceledBody=Вашата молба за отпуск от %s до %s е анулирана. FollowedByACounter=1: Този вид отпуск е необходимо да бъде проследяван от брояч. Броячът се увеличава ръчно или автоматично, а когато молбата за отпуск е валидирана, броячът се намалява.
0: Не се проследява от брояч. NoLeaveWithCounterDefined=Няма дефинирани видове отпуск, които трябва да бъдат проследявани от брояч -GoIntoDictionaryHolidayTypes=Отидете в Начало - Настройки - Речници - Видове отпуски , за да настроите различните видове отпуски. -HolidaySetup=Настройка на модул Отпуск +GoIntoDictionaryHolidayTypes=Отидете в Начало -> Настройки -> Речници -> Видове отпуски , за да настроите различните видове отпуски. +HolidaySetup=Настройка на модул Молби за отпуск HolidaysNumberingModules=Модели за номериране на молби за отпуск -TemplatePDFHolidays=Шаблон за молби за отпуск PDF -FreeLegalTextOnHolidays=Свободен текст в PDF файла +TemplatePDFHolidays=PDF шаблон за молби за отпуск +FreeLegalTextOnHolidays=Свободен текст в молбите за отпуск WatermarkOnDraftHolidayCards=Воден знак върху черновата на молба за отпуск -HolidaysToApprove=Отпуски за одобрение +HolidaysToApprove=Молби за отпуск за одобрение diff --git a/htdocs/langs/bg_BG/interventions.lang b/htdocs/langs/bg_BG/interventions.lang index 8b4ded3adda..d1aadd1c05d 100644 --- a/htdocs/langs/bg_BG/interventions.lang +++ b/htdocs/langs/bg_BG/interventions.lang @@ -1,66 +1,66 @@ # Dolibarr language file - Source file is en_US - interventions -Intervention=Намеса -Interventions=Интервенциите -InterventionCard=Интервенция карта -NewIntervention=Нов намеса -AddIntervention=Създаване на намеса +Intervention=Интервенция +Interventions=Интервенции +InterventionCard=Протокол за интервенция +NewIntervention=Нова интервенция +AddIntervention=Създаване на интервенция ChangeIntoRepeatableIntervention=Променете на повтаряема интервенция -ListOfInterventions=Списък на интервенциите -ActionsOnFicheInter=Действия на интервенцията +ListOfInterventions=Списък на интервенции +ActionsOnFicheInter=Свързани събития LastInterventions=Интервенции: %s последни AllInterventions=Всички интервенции -CreateDraftIntervention=Създаване на проект -InterventionContact=Интервенция контакт +CreateDraftIntervention=Създаване на чернова +InterventionContact=Свързани контакти DeleteIntervention=Изтриване на интервенция -ValidateIntervention=Проверка на интервенция +ValidateIntervention=Валидиране на интервенция ModifyIntervention=Промяна на интервенция -DeleteInterventionLine=Изтрий ред намеса +DeleteInterventionLine=Изтриване на ред в интервенцията ConfirmDeleteIntervention=Сигурни ли сте, че искате да изтриете тази интервенция? -ConfirmValidateIntervention=Сигурни ли сте, че искате да валидирате тази интервенция под името %s? -ConfirmModifyIntervention=Сигурни ли сте, че искате да редактирате тази интервенция? +ConfirmValidateIntervention=Сигурни ли сте, че искате да валидирате тази интервенция с № %s? +ConfirmModifyIntervention=Сигурни ли сте, че искате да промените тази интервенция? ConfirmDeleteInterventionLine=Сигурни ли сте, че искате да изтриете този ред от интервенцията? ConfirmCloneIntervention=Сигурни ли сте, че искате да клонирате тази интервенция? NameAndSignatureOfInternalContact=Име и подпис на изпълнителя: NameAndSignatureOfExternalContact=Име и подпис на клиента: -DocumentModelStandard=Стандартен документ модел за интервенции -InterventionCardsAndInterventionLines=Интервенции и линии на интервенции -InterventionClassifyBilled=Класифицирай като "Таксувани" -InterventionClassifyUnBilled=Класифицирай като "Нетаксувани" -InterventionClassifyDone=Класифицирайте като изпълнена -StatusInterInvoiced=Таксува -SendInterventionRef=Подаване на намеса %s -SendInterventionByMail=Изпращане на интервенцията по имейл -InterventionCreatedInDolibarr=Намеса %s създадена -InterventionValidatedInDolibarr=Намеса %s валидирана -InterventionModifiedInDolibarr=Намеса %s променена +DocumentModelStandard=Стандартен документ за интервенции +InterventionCardsAndInterventionLines=Интервенции и редове от интервенции +InterventionClassifyBilled=Класифициране като 'Фактурирана' +InterventionClassifyUnBilled=Класифициране като 'Нетаксувана' +InterventionClassifyDone=Класифициране като 'Изпълнена' +StatusInterInvoiced=Фактурирана +SendInterventionRef=Изпращане на интервенция %s +SendInterventionByMail=Изпращане на интервенция по имейл +InterventionCreatedInDolibarr=Интервенция %s е създадена +InterventionValidatedInDolibarr=Интервенция %s е валидирана +InterventionModifiedInDolibarr=Интервенция %s е променена InterventionClassifiedBilledInDolibarr=Интервенция %s е фактурирана -InterventionClassifiedUnbilledInDolibarr=Интервенция %s е нефактурирана +InterventionClassifiedUnbilledInDolibarr=Интервенция %s е нетаксувана InterventionSentByEMail=Интервенция %s е изпратена по имейл -InterventionDeletedInDolibarr=Намеса %s изтрита -InterventionsArea=Зона Намеси -DraftFichinter=Чернови намеси +InterventionDeletedInDolibarr=Интервенция %s е изтрита +InterventionsArea=Секция за интервенции +DraftFichinter=Чернови интервенции LastModifiedInterventions=Интервенции: %s последно променени FichinterToProcess=Интервенции за извършване ##### Types de contacts ##### -TypeContact_fichinter_external_CUSTOMER=Проследяване на контакт с клиентите +TypeContact_fichinter_external_CUSTOMER=Последващ контакт на клиента # Modele numérotation -PrintProductsOnFichinter=Отпечатайте също линиите от типа "Продукт" (не само услуги) в картата на интервенцията -PrintProductsOnFichinterDetails=намеси генерирани от поръчки +PrintProductsOnFichinter=Отпечатване на редове от тип 'Продукт' (не само услуги) в интервенциите +PrintProductsOnFichinterDetails=интервенции, генерирани от поръчки UseServicesDurationOnFichinter=Използване на продължителността на услугите за интервенции генерирани от поръчки UseDurationOnFichinter=Скриване на полето за продължителност при запис на интервенция -UseDateWithoutHourOnFichinter=Скриване на часовете и минутите в полето дата при запис на интервенция -InterventionStatistics=Статистика на интервенциите +UseDateWithoutHourOnFichinter=Скриване на часовете и минутите в полето за дата при запис на интервенция +InterventionStatistics=Статистика на интервенции NbOfinterventions=Брой интервенции -NumberOfInterventionsByMonth=Брой интервенции по месец (от датата на валидиране) -AmountOfInteventionNotIncludedByDefault=Общата продължителност на интервенцията не е включена по подразбиране в печалбата (в повечето случаи графиците се използват за отчитане на времето). Добавете опцията PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT със стойност 1 в Начало - Настройка - Други настройки, за да я включите. +NumberOfInterventionsByMonth=Брой интервенции по месец (по дата на валидиране) +AmountOfInteventionNotIncludedByDefault=Общата продължителност на интервенцията не е включена по подразбиране в печалбата (в повечето случаи за отчитане на времето се използват графиците за отделно време). Добавете опцията PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT със стойност 1 в Начало -> Настройки -> Други настройки, за да я включите. ##### Exports ##### -InterId=№ на интервенцията -InterRef=Код на интервенцията -InterDateCreation=Дата на създаване на намеса -InterDuration=Продължителност на намеса -InterStatus=Статус на намеса -InterNote=Забележка към интервенцията -InterLineId=№ на линията в интервенцията -InterLineDate=Дата на линията в интервенцията -InterLineDuration=Продължителност на линията в интервенцията -InterLineDesc=Описание на линията в интервенцията +InterId=Идентификатор на интервенция +InterRef=Реф. интервенция +InterDateCreation=Дата на създаване на интервенцията +InterDuration=Продължителност на интервенцията +InterStatus=Статус на интервенцията +InterNote=Бележка към интервенцията +InterLineId=Идентификатор на реда в интервенцията +InterLineDate=Дата на реда в интервенцията +InterLineDuration=Продължителност на реда в интервенцията +InterLineDesc=Описание на реда в интервенцията diff --git a/htdocs/langs/bg_BG/languages.lang b/htdocs/langs/bg_BG/languages.lang index 59958660a2f..6030d165af6 100644 --- a/htdocs/langs/bg_BG/languages.lang +++ b/htdocs/langs/bg_BG/languages.lang @@ -1,6 +1,6 @@ # Dolibarr language file - Source file is en_US - languages Language_ar_AR=Арабски -Language_ar_EG=Arabic (Egypt) +Language_ar_EG=Арабски (Египет) Language_ar_SA=Арабски Language_bn_BD=Бенгали Language_bg_BG=Български @@ -11,41 +11,41 @@ Language_da_DA=Датски Language_da_DK=Датски Language_de_DE=Немски Language_de_AT=Немски (Австрия) -Language_de_CH=Германски (Шверцария) +Language_de_CH=Немски (Швейцария) Language_el_GR=Гръцки -Language_el_CY=Greek (Cyprus) -Language_en_AU=English (Австралия) +Language_el_CY=Гръцки (Кипър) +Language_en_AU=Английски (Австралия) Language_en_CA=Английски (Канада) -Language_en_GB=English (United Kingdom) -Language_en_IN=English (Индия) -Language_en_NZ=English (Нова Зеландия) -Language_en_SA=English (Саудитска Арабия) -Language_en_US=English (United States) -Language_en_ZA=English (Южна Африка) +Language_en_GB=Английски (Обединено кралство) +Language_en_IN=Английски (Индия) +Language_en_NZ=Английски (Нова Зеландия) +Language_en_SA=Английски (Саудитска Арабия) +Language_en_US=Английски (САЩ) +Language_en_ZA=Английски (Южна Африка) Language_es_ES=Испански Language_es_AR=Испански (Аржентина) Language_es_BO=Испански (Боливия) Language_es_CL=Испански (Чили) Language_es_CO=Испански (Колумбия) -Language_es_DO=Испански (Чили) -Language_es_EC=Spanish (Ecuador) +Language_es_DO=Испански (Доминиканска република) +Language_es_EC=Испански (Еквадор) Language_es_HN=Испански (Хондурас) Language_es_MX=Испански (Мексико) -Language_es_PA=Spanish (Panama) +Language_es_PA=Испански (Панама) Language_es_PY=Испански (Парагвай) Language_es_PE=Испански (Перу) Language_es_PR=Испански (Пуерто Рико) -Language_es_UY=Spanish (Uruguay) -Language_es_VE=Spanish (Venezuela) +Language_es_UY=Испански (Уругвай) +Language_es_VE=Испански (Венецуела) Language_et_EE=Естонски -Language_eu_ES=Баска +Language_eu_ES=Баскски Language_fa_IR=Персийски -Language_fi_FI=Завършване +Language_fi_FI=Фински Language_fr_BE=Френски (Белгия) Language_fr_CA=Френски (Канада) Language_fr_CH=Френски (Швейцария) Language_fr_FR=Френски -Language_fr_NC=French (Нова Каледония) +Language_fr_NC=Френски (Нова Каледония) Language_fy_NL=Фризийски Language_he_IL=Иврит Language_hr_HR=Хърватски @@ -55,18 +55,18 @@ Language_is_IS=Исландски Language_it_IT=Италиански Language_ja_JP=Японски Language_ka_GE=Грузински -Language_km_KH=Khmer +Language_km_KH=Кхмерски Language_kn_IN=Каннада Language_ko_KR=Корейски Language_lo_LA=Лаоски Language_lt_LT=Литовски Language_lv_LV=Латвийски Language_mk_MK=Македонски -Language_mn_MN=Mongolian -Language_nb_NO=Норвежки език (книжовен) +Language_mn_MN=Монголски +Language_nb_NO=Норвежки (Bokmål) Language_nl_BE=Холандски (Белгия) Language_nl_NL=Холандски (Холандия) -Language_pl_PL=Лак +Language_pl_PL=Полски Language_pt_BR=Португалски (Бразилия) Language_pt_PT=Португалски Language_ro_RO=Румънски @@ -80,9 +80,10 @@ Language_sq_AL=Албански Language_sk_SK=Словашки Language_sr_RS=Сръбски Language_sw_SW=Суахили -Language_th_TH=Thai +Language_th_TH=Тайски Language_uk_UA=Украински Language_uz_UZ=Узбекски Language_vi_VN=Виетнамски Language_zh_CN=Китайски -Language_zh_TW=Chinese (Traditional) +Language_zh_TW=Китайски (традиционен) +Language_bh_MY=Малайски diff --git a/htdocs/langs/bg_BG/link.lang b/htdocs/langs/bg_BG/link.lang index 7e61f07501a..e435a9128bc 100644 --- a/htdocs/langs/bg_BG/link.lang +++ b/htdocs/langs/bg_BG/link.lang @@ -1,10 +1,10 @@ # Dolibarr language file - Source file is en_US - languages -LinkANewFile=Свържи нов файл/документ +LinkANewFile=Свързване на нов файл / документ LinkedFiles=Свързани файлове и документи NoLinkFound=Няма регистрирани връзки -LinkComplete=Файлът е свързан успешно +LinkComplete=Файлът е успешно свързан ErrorFileNotLinked=Файлът не може да бъде свързан -LinkRemoved=Връзка %s е премахната -ErrorFailedToDeleteLink= Неуспех при премахване на връзка '%s' -ErrorFailedToUpdateLink= Неуспех при промяна на връзка '%s' -URLToLink=URL за връзка +LinkRemoved=Връзката %s е премахната +ErrorFailedToDeleteLink= Премахването на връзката '%s' не е успешно +ErrorFailedToUpdateLink= Актуализацията на връзката '%s' не е успешна +URLToLink=URL връзка diff --git a/htdocs/langs/bg_BG/mails.lang b/htdocs/langs/bg_BG/mails.lang index a86d997442c..3e0699cfba3 100644 --- a/htdocs/langs/bg_BG/mails.lang +++ b/htdocs/langs/bg_BG/mails.lang @@ -78,9 +78,9 @@ GroupEmails=Групови имейли OneEmailPerRecipient=Един имейл за получател (по подразбиране е избран един имейл за всеки запис) WarningIfYouCheckOneRecipientPerEmail=Внимание, ако поставите отметка в това квадратче, това означава, че само един имейл ще бъде изпратен за няколко различни избрани записа, така че, ако съобщението ви съдържа заместващи променливи, които се отнасят до данни от даден запис, няма да е възможно да ги замените. ResultOfMailSending=Резултат от масовото изпращане на имейл -NbSelected=Number selected -NbIgnored=Number ignored -NbSent=Number sent +NbSelected=Брой избрани +NbIgnored=Брой игнорирани +NbSent=Брой изпратени SentXXXmessages=%s изпратен(о)(и) съобщени(е)(я). ConfirmUnvalidateEmailing=Сигурни ли сте, че искате да превърнете имейла %s в чернова? MailingModuleDescContactsWithThirdpartyFilter=Контакт с клиентски филтри diff --git a/htdocs/langs/bg_BG/main.lang b/htdocs/langs/bg_BG/main.lang index bb9c15de13a..7481d5cd06c 100644 --- a/htdocs/langs/bg_BG/main.lang +++ b/htdocs/langs/bg_BG/main.lang @@ -44,8 +44,8 @@ ErrorConstantNotDefined=Параметър %s не е дефиниран ErrorUnknown=Неизвестна грешка ErrorSQL=Грешка в SQL ErrorLogoFileNotFound=Не е открит файл с лого '%s' -ErrorGoToGlobalSetup=Отворете настройка на „Фирма/Организация“, за да коригирате това -ErrorGoToModuleSetup=Отидете в настройка на модула, за да коригирате това +ErrorGoToGlobalSetup=Отидете в настройката на „Фирма / Организация“, за да коригирате това. +ErrorGoToModuleSetup=Отидете в настройката на модула, за да коригирате това. ErrorFailedToSendMail=Неуспешно изпращане на имейл (подател = %s, получател = %s) ErrorFileNotUploaded=Файлът не беше качен. Уверете се, че размерът му не надвишава максимално допустимия, че е на разположение свободно пространство на диска и че няма файл със същото име в тази директория. ErrorInternalErrorDetected=Открита е грешка @@ -72,7 +72,7 @@ SeeAlso=Вижте също %s SeeHere=Вижте тук ClickHere=Кликнете тук Here=Тук -Apply=Приложи +Apply=Приложете BackgroundColorByDefault=Стандартен цвят на фона FileRenamed=Файлът е успешно преименуван FileGenerated=Файлът е успешно генериран @@ -83,7 +83,7 @@ FilesDeleted=Файлът(овете) е(са) успешно изтрит(и) FileWasNotUploaded=Избран е файл за прикачване, но все още не е качен. Кликнете върху "Прикачване на файл" за това. NbOfEntries=Брой вписвания GoToWikiHelpPage=Прочетете онлайн помощта (необходим е достъп до интернет) -GoToHelpPage=Прочетете помощта +GoToHelpPage=Прочетете помощната информация RecordSaved=Записът е съхранен RecordDeleted=Записът е изтрит RecordGenerated=Записът е генериран @@ -103,18 +103,18 @@ ConnectedOnMultiCompany=Свързан към обект ConnectedSince=Свързан от AuthenticationMode=Режим на удостоверяване RequestedUrl=Заявен URL адрес -DatabaseTypeManager=Управление на видовете бази данни +DatabaseTypeManager=Мениджър на типовете база данни RequestLastAccessInError=Последна грешка в заявката за достъп до базата данни ReturnCodeLastAccessInError=Върнат код за грешка при последната заявка за достъп до базата данни InformationLastAccessInError=Информация за грешка при последната заявка за достъп до базата данни DolibarrHasDetectedError=Dolibarr засече техническа грешка YouCanSetOptionDolibarrMainProdToZero=Можете да прочетете .log файл или да зададете опция $ dolibarr_main_prod на '0' в конфигурационния си файл, за да получите повече информация. -InformationToHelpDiagnose=Тази информация може да бъде полезна за диагностични цели (можете да зададете опция $ dolibarr_main_prod на '1', за да премахнете такива известия) +InformationToHelpDiagnose=Тази информация може да бъде полезна за диагностични цели (може да зададете опция $dolibarr_main_prod на '1', за да премахнете такива известия) MoreInformation=Повече информация TechnicalInformation=Техническа информация -TechnicalID=Техническо ID +TechnicalID=Технически идентификатор NotePublic=Бележка (публична) -NotePrivate=Бележка (частна) +NotePrivate=Бележка (лична) PrecisionUnitIsLimitedToXDecimals=Dolibarr е настроен да ограничи прецизността на единичните цени до %s десетични числа. DoTest=Тест ToFilter=Филтър @@ -145,7 +145,7 @@ NotClosed=Не е затворен Enabled=Включено Enable=Включване Deprecated=Отхвърлено -Disable=Изключи +Disable=Изключване Disabled=Изключено Add=Добавяне AddLink=Добавяне на връзка @@ -159,16 +159,16 @@ ConfirmSendCardByMail=Наистина ли искате да изпратите Delete=Изтриване Remove=Премахване Resiliate=Прекратяване -Cancel=Отказ -Modify=Редактиране +Cancel=Анулиране +Modify=Променяне Edit=Редактиране Validate=Валидиране ValidateAndApprove=Валидиране и одобряване ToValidate=За валидиране NotValidated=Не е валидиран -Save=Запис -SaveAs=Запис като -TestConnection=Проверка на връзката +Save=Съхраняване +SaveAs=Съхраняване като +TestConnection=Проверяване на връзката ToClone=Клониране ConfirmClone=Изберете данни, които искате да клонирате: NoCloneOptionsSpecified=Няма определени данни за клониране. @@ -178,20 +178,20 @@ Run=Изпълни CopyOf=Копие на Show=Покажи Hide=Скрий -ShowCardHere=Покажи картата +ShowCardHere=Показване на карта Search=Търсене SearchOf=Търсене Valid=Валидиран -Approve=Одобри -Disapprove=Не одобрявам -ReOpen=Отвори отново -Upload=Качи -ToLink=Връзка +Approve=Одобряване +Disapprove=Отхвърляне +ReOpen=Повторно отваряне +Upload=Прикачи +ToLink=Свържи Select=Изберете Choose=Избор -Resize=Преоразмери -ResizeOrCrop=Преоразмеряване или Изрязване -Recenter=Възстанови +Resize=Оразмеряване +ResizeOrCrop=Оразмеряване или изрязване +Recenter=Възстановяване Author=Автор User=Потребител Users=Потребители @@ -200,7 +200,7 @@ Groups=Групи NoUserGroupDefined=Няма дефинирана потребителска група Password=Парола PasswordRetype=Повторете паролата -NoteSomeFeaturesAreDisabled=Обърнете внимание, че много функции/модули са изключени при тази демонстрация. +NoteSomeFeaturesAreDisabled=Имайте предвид, че много функции / модули са деактивирани в тази демонстрация. Name=Име NameSlashCompany=Име / Фирма Person=Лице @@ -218,9 +218,9 @@ MultiLanguage=Мултиезичност Note=Бележка Title=Заглавие Label=Етикет -RefOrLabel=Код или етикет +RefOrLabel=Референция или етикет Info=История -Family=Семейство +Family=Фамилия Description=Описание Designation=Описание DescriptionOfLine=Описание на реда @@ -237,9 +237,9 @@ Numero=Брой Limit=Лимит Limits=Лимити Logout=Изход -NoLogoutProcessWithAuthMode=Не се прилага функция за изключване на връзката с режима за удостоверяване %s +NoLogoutProcessWithAuthMode=Няма функция за прекъсване на връзката с режим на удостоверяване %s Connection=Вход -Setup=Настройки +Setup=Настройка Alert=Предупреждение MenuWarnings=Предупреждения Previous=Предишен @@ -258,7 +258,7 @@ DateCreation=Дата на създаване DateCreationShort=Създаване DateModification=Дата на промяна DateModificationShort=Промяна -DateLastModification=Последна дата на промяна +DateLastModification=Дата на последна промяна DateValidation=Дата на валидиране DateClosing=Дата на приключване DateDue=Дата на падеж @@ -315,7 +315,7 @@ HourShort=ч MinuteShort=мин Rate=Курс CurrencyRate=Обменен валутен курс -UseLocalTax=Включи данъци +UseLocalTax=Включи данък Bytes=Байта KiloBytes=Килобайта MegaBytes=Мегабайта @@ -333,7 +333,7 @@ Copy=Копиране Paste=Поставяне Default=По подразбиране DefaultValue=Стойност по подразбиране -DefaultValues=Стандартни стойности / филтри / сортиране +DefaultValues=Стойности / филтри / сортиране Price=Цена PriceCurrency=Цена (валута) UnitPrice=Единична цена @@ -352,17 +352,17 @@ AmountHTShort=Сума (без ДДС) AmountTTCShort=Сума (с ДДС) AmountHT=Сума (без ДДС) AmountTTC=Сума (с ДДС) -AmountVAT=Сума на ДДС +AmountVAT=Размер на ДДС MulticurrencyAlreadyPaid=Вече платено, оригинална валута -MulticurrencyRemainderToPay=Оставащо за плащане, оригиналната валута +MulticurrencyRemainderToPay=Оставащо за плащане, оригинална валута MulticurrencyPaymentAmount=Сума на плащане, оригинална валута MulticurrencyAmountHT=Сума (без ДДС), оригинална валута MulticurrencyAmountTTC=Сума (с ДДС), оригинална валута -MulticurrencyAmountVAT=Сума на ДДС, оригинална валута -AmountLT1=Сума на данък 2 -AmountLT2=Сума на данък 3 -AmountLT1ES=Сума на RE -AmountLT2ES=Сума на IRPF +MulticurrencyAmountVAT=Размер на ДДС, оригинална валута +AmountLT1=Размер на данък 2 +AmountLT2=Размер на данък 3 +AmountLT1ES=Размер на RE +AmountLT2ES=Размер на IRPF AmountTotal=Обща сума AmountAverage=Средна сума PriceQtyMinHT=Цена за минимално количество (без ДДС) @@ -380,32 +380,32 @@ Totalforthispage=Общо за тази страница TotalTTC=Сума за плащане TotalTTCToYourCredit=Общо (с ДДС) към вашия кредит TotalVAT=Начислен ДДС -TotalVATIN=Общо IGST -TotalLT1=Общо данък 2 -TotalLT2=Общо данък 3 -TotalLT1ES=Общо RE -TotalLT2ES=Общо IRPF -TotalLT1IN=Общо CGST -TotalLT2IN=Общо SGST +TotalVATIN=Начислен IGST +TotalLT1=Начислен данък 2 +TotalLT2=Начислен данък 3 +TotalLT1ES=Начислен RE +TotalLT2ES=Начислен IRPF +TotalLT1IN=Начислен CGST +TotalLT2IN=Начислен SGST HT=без ДДС TTC=с ДДС INCVATONLY=с ДДС INCT=с всички данъци VAT=ДДС VATIN=IGST -VATs=Данъци върху продажбите +VATs=Данъци върху продажби VATINs=IGST данъци -LT1=Данък върху продажбите 2 -LT1Type=Данък върху продажбите 2 вид -LT2=Данък върху продажбите 3 -LT2Type=Тип данък върху продажбите 3 вид +LT1=Данък 2 върху продажби +LT1Type=Данък върху продажби 2 вид +LT2=Данък 3 върху продажби +LT2Type=Данък върху продажби 3 вид LT1ES=RE LT2ES=IRPF LT1IN=CGST LT2IN=SGST LT1GC=Допълнителни центове VATRate=Данъчна ставка -VATCode=Код за данъчна ставка +VATCode=Код на данъчна ставка VATNPR=Данъчна ставка NPR DefaultTaxRate=Данъчна ставка по подразбиране Average=Средно @@ -417,7 +417,7 @@ Modules=Модули / Приложения Option=Опция List=Списък FullList=Пълен списък -Statistics=Статистики +Statistics=Статистика OtherStatistics=Други статистически данни Status=Статус Favorite=Фаворит @@ -468,8 +468,8 @@ NoOpenedElementToProcess=Няма отворен елемент за обраб Available=Налично NotYetAvailable=Все още не е налично NotAvailable=Не е налично -Categories=Етикети / Категории -Category=Етикет / Категория +Categories=Тагове / Категории +Category=Таг / Категория By=От From=От to=за @@ -509,16 +509,16 @@ ByCompanies=По контрагенти ByUsers=По потребител Links=Връзки Link=Връзка -Rejects=Откази -Preview=Предв. преглед +Rejects=Отхвърляния +Preview=Преглед NextStep=Следваща стъпка Datas=Данни None=Няма NoneF=Няма NoneOrSeveral=Няма или няколко Late=Закъснели -LateDesc=Елементът се дефинира като Закъснение съгласно системната конфигурация в меню Начало - Настройка - Предупреждения. -NoItemLate=Няма забавен елемент +LateDesc=Елементът се дефинира като закъснял съгласно системната конфигурация в меню Начало -> Настройка -> Предупреждения. +NoItemLate=Няма закъснял елемент Photo=Снимка Photos=Снимки AddPhoto=Добавяне на снимка @@ -590,16 +590,16 @@ Keyword=Ключова дума Origin=Произход Legend=Легенда Fill=Попълване -Reset=Нулиране +Reset=Зануляване File=Файл Files=Файлове NotAllowed=Не е разрешено ReadPermissionNotAllowed=Не са предоставени права за четене -AmountInCurrency=Сума във валута %s +AmountInCurrency=Сума в %s Example=Пример Examples=Примери NoExample=Няма пример -FindBug=Съобщи за грешка +FindBug=Подаване на сигнал за грешка NbOfThirdParties=Брой контрагенти NbOfLines=Брой редове NbOfObjects=Брой обекти @@ -609,21 +609,21 @@ TotalQuantity=Общо количество DateFromTo=от %s до %s DateFrom=От %s DateUntil=До %s -Check=Маркирай -Uncheck=Отмаркирай +Check=Маркиране +Uncheck=Отмаркиране Internal=Вътрешен External=Външен Internals=Вътрешни Externals=Външни -Warning=Внимание +Warning=Предупреждение Warnings=Предупреждения BuildDoc=Създаване на документ -Entity=Субект -Entities=Субекти +Entity=Среда +Entities=Организации CustomerPreview=Преглед на клиент SupplierPreview=Преглед на доставчик -ShowCustomerPreview=Показване на преглед на клиент -ShowSupplierPreview=Показване на преглед на доставчик +ShowCustomerPreview=Преглеждане на клиент +ShowSupplierPreview=Преглеждане на доставчик RefCustomer=Реф. клиент Currency=Валута InfoAdmin=Информация за администратори @@ -634,7 +634,7 @@ UndoExpandAll=Свий всички SeeAll=Виж всички Reason=Причина FeatureNotYetSupported=Функцията все още не се поддържа -CloseWindow=Затвори прозореца +CloseWindow=Затваряне на прозорец Response=Отговор Priority=Приоритет SendByMail=Изпращане по имейл @@ -675,22 +675,22 @@ PartialWoman=Частично TotalWoman=Обща NeverReceived=Никога не е получавано Canceled=Анулирано -YouCanChangeValuesForThisListFromDictionarySetup=Може да промените стойностите за този списък от меню Настройки - Речници +YouCanChangeValuesForThisListFromDictionarySetup=Може да промените стойностите за този списък от меню Настройка - Речници YouCanChangeValuesForThisListFrom=Може да промените стойностите за този списък от меню %s YouCanSetDefaultValueInModuleSetup=Може да зададете стойността по подразбиране, използвана при създаване на нов запис в настройката на модула Color=Цвят Documents=Свързани файлове Documents2=Документи -UploadDisabled=Качването е деактивирано +UploadDisabled=Прикачването е деактивирано MenuAccountancy=Счетоводство MenuECM=Документи MenuAWStats=AWStats MenuMembers=Членове -MenuAgendaGoogle=Google бележник +MenuAgendaGoogle=Google календар ThisLimitIsDefinedInSetup=Ограничение на системата (Меню Начало - Настройка - Сигурност): %s Kb, ограничение на PHP: %s Kb NoFileFound=Няма записани документи в тази директория CurrentUserLanguage=Текущ език -CurrentTheme=Текущата тема +CurrentTheme=Текуща тема CurrentMenuManager=Текущ меню манипулатор Browser=Браузър Layout=Оформление @@ -706,11 +706,11 @@ Root=Начало Informations=Информация Page=Страница Notes=Бележки -AddNewLine=Добави нов ред -AddFile=Добави файл +AddNewLine=Добавяне на нов ред +AddFile=Добавяне на файл FreeZone=Не е предварително определен продукт / услуга -FreeLineOfType=Свободен текст към елемента, въведете: -CloneMainAttributes=Клонира обекта с неговите основни атрибути +FreeLineOfType=Елемент със свободен текст, тип: +CloneMainAttributes=Клониране на обекта с неговите основни атрибути ReGeneratePDF=Повторно генериране на PDF PDFMerge=Обединяване на PDF файлове Merge=Обединяване @@ -733,8 +733,8 @@ Result=Резултат ToTest=Тест ValidateBefore=Картата трябва да бъде валидирана, преди да използвате тази функция Visibility=Видимост -Totalizable=Обобщено -TotalizableDesc=Това поле е обобщено в списъка +Totalizable=Обобщаване +TotalizableDesc=Това поле е обобщаващо в списъка Private=Личен Hidden=Скрит Resources=Ресурси @@ -750,10 +750,10 @@ AttributeCode=Код на атрибут URLPhoto=URL адрес на снимка / лого SetLinkToAnotherThirdParty=Връзка към друг контрагент LinkTo=Връзка към -LinkToProposal=Връзка към търговско предложение +LinkToProposal=Връзка към предложение LinkToOrder=Връзка към поръчка LinkToInvoice=Връзка към фактура -LinkToTemplateInvoice=Връзка към шаблон за фактура +LinkToTemplateInvoice=Връзка към шаблонна фактура LinkToSupplierOrder=Връзка към поръчка за покупка LinkToSupplierProposal=Връзка към запитване към доставчик LinkToSupplierInvoice=Връзка към фактура за доставка @@ -775,7 +775,7 @@ ByYear=По година ByMonth=По месец ByDay=По ден BySalesRepresentative=По търговски представител -LinkedToSpecificUsers=Свързано е с конкретен потребителски контакт +LinkedToSpecificUsers=Свързани с конкретен потребител NoResults=Няма резултати AdminTools=Администрация SystemTools=Системни инструменти @@ -785,7 +785,7 @@ Element=Елемент NoPhotoYet=Все още няма налични снимки Dashboard=Табло MyDashboard=Моето табло -Deductible=Удържаем +Deductible=Начисляем from=от toward=към Access=Достъп @@ -796,7 +796,7 @@ SaveUploadedFileWithMask=Запиши файла на сървъра с име " OriginFileName=Оригинално име на файл SetDemandReason=Задайте източник SetBankAccount=Дефиниране на банкова сметка -AccountCurrency=Валута на профила +AccountCurrency=Валута на сметката ViewPrivateNote=Преглед на бележки XMoreLines=%s ред(а) е(са) скрит(и) ShowMoreLines=Показване на повече / по-малко редове @@ -808,8 +808,8 @@ ShowTransaction=Показване на запис на банкова смет ShowIntervention=Показване на интервенция ShowContract=Показване на договор GoIntoSetupToChangeLogo=Отидете в Начало - Настройка - Фирма / Организация, за да промените логото или в Начало - Настройка - Екран, за да го скриете. -Deny=Забраняване -Denied=Забранено +Deny=Отхвърляне +Denied=Отхвърлено ListOf=Списък на %s ListOfTemplates=Списък с шаблони Gender=Пол @@ -831,9 +831,9 @@ ConfirmMassDeletion=Потвърждение за масово изтриван ConfirmMassDeletionQuestion=Сигурни ли сте, че искате да изтриете избраните %s записа? RelatedObjects=Свързани обекти ClassifyBilled=Класифициране като фактурирано -ClassifyUnbilled=Класифициране като нефактурирано +ClassifyUnbilled=Класифициране като нетаксувано Progress=Прогрес -ProgressShort=Напредък +ProgressShort=Прогрес FrontOffice=Фронт офис BackOffice=Бек офис View=Преглед @@ -849,7 +849,7 @@ AllExportedMovementsWereRecordedAsExported=Всички експортирани NotAllExportedMovementsCouldBeRecordedAsExported=Не всички експортирани движения могат да бъдат записани като експортирани Miscellaneous=Разни Calendar=Календар -GroupBy=Групирай по... +GroupBy=Групиране по... ViewFlatList=Преглед на плосък списък RemoveString=Премахване на низ „%s“ SomeTranslationAreUncomplete=Някои от предлаганите езици могат да бъдат само частично преведени или да съдържат грешки. Моля, помогнете ни да коригираме езика ви като се регистрирате на адрес https://transifex.com/projects/p/dolibarr/ , за да добавите подобренията си. @@ -883,11 +883,11 @@ LeadOrProject=Възможност | Проект LeadsOrProjects=Възможности | Проекти Lead=Възможност Leads=Възможности -ListOpenLeads=Списък с отворени възможности -ListOpenProjects=Списък с отворени проекти +ListOpenLeads=Отворени възможности +ListOpenProjects=Отворени проекти NewLeadOrProject=Нова възможност или проект Rights=Права -LineNb=ред № +LineNb=Ред № IncotermLabel=Условия на доставка TabLetteringCustomer=Абревиатура на клиент TabLetteringSupplier=Абревиатура на доставчик @@ -926,7 +926,7 @@ Select2NotFound=Няма намерени резултати Select2Enter=Въвеждане Select2MoreCharacter=или повече знака Select2MoreCharacters=или повече знаци -Select2MoreCharactersMore= Синтаксис на търсенето:
| ИЛИ (а | б)
* Някакъв знак (а * б)
^ Започнете с (^ аб)
$ Завършете с ( ab $)
+Select2MoreCharactersMore= Синтаксис на търсенето:
| или (a|b)
* Някакъв знак (a*b)
^ Започнете с (^ab)
$ Завършете с (ab$)
Select2LoadingMoreResults=Зараждане на повече резултати... Select2SearchInProgress=В процес на търсене... SearchIntoThirdparties=Контрагенти @@ -957,7 +957,7 @@ Everybody=Всички PayedBy=Платено от PayedTo=Платено на Monthly=Месечно -Quarterly=Тримесечие +Quarterly=Тримесечно Annual=Годишно Local=Локално Remote=Отдалечено @@ -973,7 +973,7 @@ Inventory=Складова наличност AnalyticCode=Аналитичен код TMenuMRP=ПМИ ShowMoreInfos=Показване на повече информация -NoFilesUploadedYet=Моля, първо качете документ +NoFilesUploadedYet=Моля, първо прикачете документ SeePrivateNote=Вижте частната бележка PaymentInformation=Платежна информация ValidFrom=Валидно от diff --git a/htdocs/langs/bg_BG/margins.lang b/htdocs/langs/bg_BG/margins.lang index 09789443a91..e1f60eb1201 100644 --- a/htdocs/langs/bg_BG/margins.lang +++ b/htdocs/langs/bg_BG/margins.lang @@ -1,44 +1,44 @@ # Dolibarr language file - Source file is en_US - marges -Margin=Margin -Margins=Полета -TotalMargin=Total Margin -MarginOnProducts=Margin / Products -MarginOnServices=Margin / Services -MarginRate=Margin rate -MarkRate=Mark rate -DisplayMarginRates=Display margin rates -DisplayMarkRates=Display mark rates -InputPrice=Input price -margin=Profit margins management -margesSetup=Profit margins management setup -MarginDetails=Margin details -ProductMargins=Product margins -CustomerMargins=Customer margins -SalesRepresentativeMargins=Sales representative margins -UserMargins=User margins +Margin=Марж +Margins=Маржове +TotalMargin=Общ марж +MarginOnProducts=Марж / Продукти +MarginOnServices=Марж / Услуги +MarginRate=Брутен марж +MarkRate=Нетен марж +DisplayMarginRates=Показване на брутни маржове +DisplayMarkRates=Показване на нетни маржове +InputPrice=Входна стойност +margin=Управление на маржове за печалба +margesSetup=Настройка на маржове за печалба +MarginDetails=Маржови подробности +ProductMargins=Маржове от продукт +CustomerMargins=Маржове от клиент +SalesRepresentativeMargins=Маржове от търговски представител +UserMargins=Маржове от потребител ProductService=Продукт или услуга AllProducts=Всички продукти и услуги -ChooseProduct/Service=Изберете продукт или услуга -ForceBuyingPriceIfNull=Force buying/cost price to selling price if not defined -ForceBuyingPriceIfNullDetails=If buying/cost price not defined, and this option "ON", margin will be zero on line (buying/cost price = selling price), otherwise ("OFF"), marge will be equal to suggested default. -MARGIN_METHODE_FOR_DISCOUNT=Margin method for global discounts +ChooseProduct/Service=Избиране на продукт или услуга +ForceBuyingPriceIfNull=Форсиране на покупна цена / себестойност да бъде равна на продажната цена, ако не е дефинирана първата +ForceBuyingPriceIfNullDetails=Ако покупната цена / себестойност не е дефинирана и тази опция е включена, маржа ще бъде нула за реда (покупна цена / себестойност = продажна цена), в противен случай, ако е изключена маржа ще бъде равен на предложения по подразбиране. +MARGIN_METHODE_FOR_DISCOUNT=Маржов метод за глобални отстъпки UseDiscountAsProduct=Като продукт UseDiscountAsService=Като услуга -UseDiscountOnTotal=On subtotal -MARGIN_METHODE_FOR_DISCOUNT_DETAILS=Defines if a global discount is treated as a product, a service, or only on subtotal for margin calculation. -MARGIN_TYPE=Buying/Cost price suggested by default for margin calculation -MargeType1=Margin on Best vendor price -MargeType2=Margin on Weighted Average Price (WAP) -MargeType3=Margin on Cost Price -MarginTypeDesc=* Margin on best buying price = Selling price - Best vendor price defined on product card
* Margin on Weighted Average Price (WAP) = Selling price - Product Weighted Average Price (WAP) or best supplier price if WAP not yet defined
* Margin on Cost price = Selling price - Cost price defined on product card or WAP if cost price not defined, or best supplier price if WAP not yet defined -CostPrice=Cost price -UnitCharges=Unit charges -Charges=Charges -AgentContactType=Commercial agent contact type -AgentContactTypeDetails=Define what contact type (linked on invoices) will be used for margin report per sale representative -rateMustBeNumeric=Rate must be a numeric value -markRateShouldBeLesserThan100=Mark rate should be lower than 100 -ShowMarginInfos=Show margin infos -CheckMargins=Margins detail -MarginPerSaleRepresentativeWarning=The report of margin per user use the link between third parties and sale representatives to calculate the margin of each sale representative. Because some thirdparties may not have any ddiated sale representative and some thirdparties may be linked to several, some amounts may not be included into this report (if there is no sale representative) and some may appear on different lines (for each sale representative). +UseDiscountOnTotal=Като междинна сума +MARGIN_METHODE_FOR_DISCOUNT_DETAILS=Определя дали глобалната отстъпка се третира като продукт, услуга или само като междинна сума за изчисление на маржа. +MARGIN_TYPE=Покупна цена / себестойност предложена по подразбиране за изчисление на маржа +MargeType1=Марж по най-добра цена от доставчик +MargeType2=Марж по средно претеглена цена (WAP) +MargeType3=Марж по себестойност +MarginTypeDesc=* Марж по най-добра цена от доставчик = продажна цена - най-добра цена от доставчик, дефинирани в картата на продукта / услугата.
* Марж по средно претеглена цена (WAP) = Продажна цена - Средно претеглена цена (WAP) или най-добра цена от доставчик, ако WAP все още не е дефиниран
* Марж по себестойност = Продажна цена - Себестойност, дефинирани в картата на продукта/услугата или WAP, ако себестойността не е дефинирана, или най-добра цена от доставчик, ако WAP не е дефиниран. +CostPrice=Себестойност +UnitCharges=Единични такси +Charges=Такси +AgentContactType=Тип контакт с търговски представител +AgentContactTypeDetails=Определете какъв тип контакт (свързан към фактурите) ще бъде използван за отчет на маржа за всеки търговски представител +rateMustBeNumeric=Процента трябва да е числова стойност +markRateShouldBeLesserThan100=Нетния марж трябва да бъде по-малък от 100 +ShowMarginInfos=Показване на информация за марж +CheckMargins=Маржови подробности +MarginPerSaleRepresentativeWarning=Справката за изчисляване на маржа от всеки потребител, използва връзката между контрагентите и търговските представители. Тъй като някои контрагенти нямат само по един търговски представител, а някои контрагенти може да бъде свързани с няколко представители, то някои стойности не могат да бъдат включени в тази справка (ако няма търговски представител) и някои може да се появят на различни редове (за всеки търговски представител). diff --git a/htdocs/langs/bg_BG/other.lang b/htdocs/langs/bg_BG/other.lang index 267e68f71f3..0f11fd65898 100644 --- a/htdocs/langs/bg_BG/other.lang +++ b/htdocs/langs/bg_BG/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Брой клиентски фактури NumberOfSupplierProposals=Брой доставни фактури NumberOfSupplierOrders=Брой поръчки за покупка NumberOfSupplierInvoices=Брой доставни фактури +NumberOfContracts=Брой договори NumberOfUnitsProposals=Брой единици по търговски предложения NumberOfUnitsCustomerOrders=Брой единици по клиентски поръчки NumberOfUnitsCustomerInvoices=Брой единици по клиентски фактури NumberOfUnitsSupplierProposals=Брой единици по запитвания към доставчици NumberOfUnitsSupplierOrders=Брой единици по поръчки за покупка NumberOfUnitsSupplierInvoices=Брой единици по доставни фактури +NumberOfUnitsContracts=Брой единици по договори EMailTextInterventionAddedContact=Възложена ви е нова интервенция %s. EMailTextInterventionValidated=Интервенция %s е валидирана. EMailTextInvoiceValidated=Фактура %s е валидирана. @@ -246,10 +248,10 @@ YourPasswordHasBeenReset=Вашата парола е успешно възст ApplicantIpAddress=IP адрес на заявителя SMSSentTo=Изпратен е SMS на %s MissingIds=Липсват идентификатори -ThirdPartyCreatedByEmailCollector=Third party created by email collector from email MSGID %s -ContactCreatedByEmailCollector=Contact/address created by email collector from email MSGID %s -ProjectCreatedByEmailCollector=Project created by email collector from email MSGID %s -TicketCreatedByEmailCollector=Ticket created by email collector from email MSGID %s +ThirdPartyCreatedByEmailCollector=Контрагент, създаден чрез имейл колектор от имейл MSGID %s +ContactCreatedByEmailCollector=Контактът/адресът, създаден чрез имейл колектор от имейл MSGID %s +ProjectCreatedByEmailCollector=Проект, създаден чрез имейл колектор от имейл MSGID %s +TicketCreatedByEmailCollector=Тикет, създаден чрез имейл колектор от имейл MSGID %s ##### Export ##### ExportsArea=Секция за експорт @@ -268,5 +270,5 @@ WEBSITE_IMAGEDesc=Относителен път до изображението. WEBSITE_KEYWORDS=Ключови думи LinesToImport=Редове за импортиране -MemoryUsage=Memory usage -RequestDuration=Duration of request +MemoryUsage=Използване на паметта +RequestDuration=Продължителност на заявката diff --git a/htdocs/langs/bg_BG/products.lang b/htdocs/langs/bg_BG/products.lang index eaa2a6e5fef..751313cdc4d 100644 --- a/htdocs/langs/bg_BG/products.lang +++ b/htdocs/langs/bg_BG/products.lang @@ -159,7 +159,7 @@ SuppliersPrices=Доставни цени SuppliersPricesOfProductsOrServices=Доставни цени (на продукти/услуги) CustomCode=Митнически / Стоков / ХС код CountryOrigin=Държава на произход -Nature=Nature of produt (material/finished) +Nature=Естество на продукта (материал / завършен) ShortLabel=Кратък етикет Unit=Мярка p=е. diff --git a/htdocs/langs/bg_BG/resource.lang b/htdocs/langs/bg_BG/resource.lang index 6e187b8709a..085effaa5e7 100644 --- a/htdocs/langs/bg_BG/resource.lang +++ b/htdocs/langs/bg_BG/resource.lang @@ -5,8 +5,8 @@ DeleteResource=Изтриване на ресурс ConfirmDeleteResourceElement=Потвърждаване на изтриване на ресурса за този елемент NoResourceInDatabase=Няма ресурс в базата данни. NoResourceLinked=Няма свързан ресурс - -ResourcePageIndex=Списък ресурси +ActionsOnResource=Събития свързани с този ресурс +ResourcePageIndex=Списък с ресурси ResourceSingular=Ресурс ResourceCard=Карта на ресурс AddResource=Създаване на ресурс @@ -18,19 +18,19 @@ ResourcesLinkedToElement=Ресурси свързани към елемент ShowResource=Показване на ресурс -ResourceElementPage=Ресурси на елемент +ResourceElementPage=Ресурси ResourceCreatedWithSuccess=Ресурсът е успешно създаден -RessourceLineSuccessfullyDeleted=Линията на ресурса е успешно изтрита -RessourceLineSuccessfullyUpdated=Линията на ресурса е успешно обновена -ResourceLinkedWithSuccess=Ресурсът е свързан успешно +RessourceLineSuccessfullyDeleted=Ресурсът е успешно изтрит +RessourceLineSuccessfullyUpdated=Ресурсът е успешно актуализиран +ResourceLinkedWithSuccess=Ресурсът е успешно свързан ConfirmDeleteResource=Потвърждаване на изтриването на този ресурс RessourceSuccessfullyDeleted=Ресурсът е успешно изтрит -DictionaryResourceType=Тип на ресурси +DictionaryResourceType=Типове ресурси SelectResource=Избиране на ресурс -IdResource=Id resource -AssetNumber=Serial number -ResourceTypeCode=Resource type code +IdResource=Идентификатор на ресурс +AssetNumber=Сериен номер +ResourceTypeCode=Код за типа ресурс ImportDataset_resource_1=Ресурси diff --git a/htdocs/langs/bg_BG/salaries.lang b/htdocs/langs/bg_BG/salaries.lang index e69d8b20a81..1648598787a 100644 --- a/htdocs/langs/bg_BG/salaries.lang +++ b/htdocs/langs/bg_BG/salaries.lang @@ -1,6 +1,6 @@ # Dolibarr language file - Source file is en_US - salaries -SALARIES_ACCOUNTING_ACCOUNT_PAYMENT=Счетоводна сметка, използвана за контрагенти -SALARIES_ACCOUNTING_ACCOUNT_PAYMENT_Desc=Специализираната счетоводна сметка, дефинирана в картата на потребителя, ще се използва само за вторично счетоводно отчитане. Тя ще бъде използвана в регистъра на главната книга и като стойност по подразбиране за вторично счетоводно отчитане, ако не е дефинирана специализирана потребителска счетоводна сметка за потребителя. +SALARIES_ACCOUNTING_ACCOUNT_PAYMENT=Счетоводна сметка, използвана за служители на контрагенти +SALARIES_ACCOUNTING_ACCOUNT_PAYMENT_Desc=Специализираната счетоводна сметка, дефинирана в картата на потребителя, ще се използва само за вторично счетоводно отчитане. Тя ще бъде използвана в регистъра на главната счетоводна книга и като стойност по подразбиране за вторично счетоводно отчитане, ако не е дефинирана специализирана потребителска счетоводна сметка за потребителя. SALARIES_ACCOUNTING_ACCOUNT_CHARGE=Счетоводна сметка по подразбиране за плащане на заплати Salary=Заплата Salaries=Заплати @@ -12,10 +12,10 @@ ShowSalaryPayment=Показване на плащане на заплата THM=Средна почасова ставка TJM=Средна дневна ставка CurrentSalary=Текуща заплата -THMDescription=Тази стойност може да се използва за изчисляване на разходите за времето, изразходвано по проект, ако модула проекти се използва. +THMDescription=Тази стойност може да се използва за изчисляване на разходите за времето, което е отделено по проект, ако модула проекти се използва. TJMDescription=Тази стойност понастоящем е информативна и не се използва за изчисления LastSalaries=Плащания на заплати: %s последни AllSalaries=Всички плащания на заплати SalariesStatistics=Статистика на заплатите # Export -SalariesAndPayments=Salaries and payments +SalariesAndPayments=Заплати и плащания diff --git a/htdocs/langs/bg_BG/stocks.lang b/htdocs/langs/bg_BG/stocks.lang index 3d1e9f84720..27a3b5aa48a 100644 --- a/htdocs/langs/bg_BG/stocks.lang +++ b/htdocs/langs/bg_BG/stocks.lang @@ -22,7 +22,7 @@ LotSerial=Партиди/Серийни номера LotSerialList=Списък на партиди/серийни номера Movements=Движения ErrorWarehouseRefRequired=Изисква се референтно име на склад -ListOfWarehouses=Списък на складовете +ListOfWarehouses=Списък на складове ListOfStockMovements=Списък на движението на стоковите наличности ListOfInventories=Списък на инвентари MovementId=Идент. № за движение @@ -66,12 +66,12 @@ RuleForStockManagementIncrease=Избиране на правило за авт DeStockOnBill=Намаляване на реални наличности при валидиране на фактура за продажба / кредитно известие DeStockOnValidateOrder=Намаляване на реални наличности при валидиране на клиентска поръчка DeStockOnShipment=Намаляване на реални наличности при валидиране на доставка -DeStockOnShipmentOnClosing=Decrease real stocks when shipping is set to closed +DeStockOnShipmentOnClosing=Намаляване на реалните наличности, когато доставката е класифицирана като приключена ReStockOnBill=Увеличаване на реални наличности при валидиране на фактура за покупка / кредитно известие ReStockOnValidateOrder=Увеличаване на реални наличности при одобряване на поръчка за покупка ReStockOnDispatchOrder=Увеличаване на реални наличности при ръчно изпращане в склад, след получаване на поръчка за покупка на стоки -StockOnReception=Increase real stocks on validation of reception -StockOnReceptionOnClosing=Increase real stocks when reception is set to closed +StockOnReception=Увеличаване на реалните наличности при валидиране на приемането +StockOnReceptionOnClosing=Увеличаване на реалните наличности, когато приемането е класифицирано като приключено OrderStatusNotReadyToDispatch=Поръчка все още не е или не повече статут, който позволява изпращането на продукти на склад складове. StockDiffPhysicTeoric=Обясняване за разликата между физическа и виртуална наличност NoPredefinedProductToDispatch=Няма предварително определени продукти за този обект, така че не се изисква изпращане на наличност. @@ -83,7 +83,7 @@ PhysicalStock=Физическа наличност RealStock=Реална наличност RealStockDesc=Физическа/реална наличност е наличността, която в момента се намира в складовете. RealStockWillAutomaticallyWhen=Реалната наличност ще бъде модифицирана според това правило (както е определено в модула на Наличности): -VirtualStock=Вирт. наличност +VirtualStock=Виртуална наличност VirtualStockDesc=Виртуална наличност е изчислената наличност, която се образува след като всички отворени / предстоящи действия (които засягат наличности) се затворят (получени поръчки за покупка, изпратени клиентски поръчки и т.н.) IdWarehouse=Идент. № на склад DescWareHouse=Описание на склад @@ -114,8 +114,8 @@ UseVirtualStockByDefault=Използване на виртуални налич UseVirtualStock=Използване на виртуални наличности UsePhysicalStock=Използване на физически наличности CurentSelectionMode=Текущ режим на избор -CurentlyUsingVirtualStock=Вирт. наличност -CurentlyUsingPhysicalStock=Факт. наличност +CurentlyUsingVirtualStock=Виртуална наличност +CurentlyUsingPhysicalStock=Фактическа наличност RuleForStockReplenishment=Правило за попълване на наличности SelectProductWithNotNullQty=Избиране на най-малко един продукт с количество различно от 0 и доставчик AlertOnly= Само предупреждения diff --git a/htdocs/langs/bg_BG/supplier_proposal.lang b/htdocs/langs/bg_BG/supplier_proposal.lang index aeda262caa0..bebe7d33843 100644 --- a/htdocs/langs/bg_BG/supplier_proposal.lang +++ b/htdocs/langs/bg_BG/supplier_proposal.lang @@ -9,7 +9,7 @@ DraftRequests=Чернови на запитвания SupplierProposalsDraft=Чернови на запитвания за цени LastModifiedRequests=Запитвания за цени: %s последно променени RequestsOpened=Отворени запитвания за цени -SupplierProposalArea=Зона на Запитвания към доставчици +SupplierProposalArea=Секция за запитвания за оферти SupplierProposalShort=Запитване към доставчик SupplierProposals=Запитвания към доставчик SupplierProposalsShort=Запитвания към доставчик diff --git a/htdocs/langs/bg_BG/suppliers.lang b/htdocs/langs/bg_BG/suppliers.lang index 81f7dec537b..d83eb071c1e 100644 --- a/htdocs/langs/bg_BG/suppliers.lang +++ b/htdocs/langs/bg_BG/suppliers.lang @@ -1,7 +1,7 @@ # Dolibarr language file - Source file is en_US - vendors Suppliers=Доставчици SuppliersInvoice=Фактура за доставка -ShowSupplierInvoice=Покажи фактурата от доставчика +ShowSupplierInvoice=Показване на фактура за доставка NewSupplier=Нов доставчик History=История ListOfSuppliers=Списък на доставчици @@ -13,17 +13,17 @@ TotalBuyingPriceMinShort=Обща сума от покупните цени на TotalSellingPriceMinShort=Обща сума от продажните цени на субпродукти SomeSubProductHaveNoPrices=Някои субпродукти нямат дефинирана цена AddSupplierPrice=Добавяне на покупна цена -ChangeSupplierPrice=Променяне на покупна цена +ChangeSupplierPrice=Промяна на покупна цена SupplierPrices=Доставни цени -ReferenceSupplierIsAlreadyAssociatedWithAProduct=Този идентификатор е вече свързан с продукт: %s +ReferenceSupplierIsAlreadyAssociatedWithAProduct=Този реф. № (SKU) е вече свързан с продукт: %s NoRecordedSuppliers=Няма регистриран доставчик SupplierPayment=Плащане към доставчик -SuppliersArea=Зона на доставчиците -RefSupplierShort=Реф. № на доставчик +SuppliersArea=Секция с доставчици +RefSupplierShort=Реф. № (SKU) Availability=Наличност -ExportDataset_fournisseur_1=Фактури за доставка и подробности за фактурите +ExportDataset_fournisseur_1=Фактури за доставка и подробности за тях ExportDataset_fournisseur_2=Фактури и плащания за доставка -ExportDataset_fournisseur_3=Поръчки за покупка и подробности за поръчките +ExportDataset_fournisseur_3=Поръчки за покупка и подробности за тях ApproveThisOrder=Одобряване на поръчка ConfirmApproveThisOrder=Сигурни ли сте, че искате да одобрите тази поръчка %s? DenyingThisOrder=Отхвърляне на поръчка @@ -32,11 +32,11 @@ ConfirmCancelThisOrder=Сигурни ли сте, че искате да ану AddSupplierOrder=Създаване на поръчка за покупка AddSupplierInvoice=Създаване на фактура за доставка ListOfSupplierProductForSupplier=Списък на продукти и цени за доставчик %s -SentToSuppliers=Изпратено към доставчиците +SentToSuppliers=Изпратено към доставчици ListOfSupplierOrders=Списък на поръчки за покупка MenuOrdersSupplierToBill=Поръчки за покупка за фактуриране -NbDaysToDelivery=Забавяне на доставката (дни) -DescNbDaysToDelivery=Най-дългото забавяне на доставка на продукти от тази поръчка +NbDaysToDelivery=Забавяне на доставка (дни) +DescNbDaysToDelivery=Най-дълго забавяне на доставка за продукти от тази поръчка SupplierReputation=Репутация на доставчика DoNotOrderThisProductToThisSupplier=Не поръчвайте NotTheGoodQualitySupplier=Ниско качество diff --git a/htdocs/langs/bg_BG/trips.lang b/htdocs/langs/bg_BG/trips.lang index bd3046fe9d1..33d8424a659 100644 --- a/htdocs/langs/bg_BG/trips.lang +++ b/htdocs/langs/bg_BG/trips.lang @@ -1,5 +1,5 @@ # Dolibarr language file - Source file is en_US - trips -ShowExpenseReport=Показване на разходни отчети +ShowExpenseReport=Показване на разходен отчет Trips=Разходни отчети TripsAndExpenses=Разходни отчети TripsAndExpensesStatistics=Статистика на разходните отчети @@ -19,15 +19,15 @@ ConfirmDeleteTrip=Сигурни ли сте, че искате да изтри ListTripsAndExpenses=Списък с разходни отчети ListToApprove=Очаква одобрение ExpensesArea=Секция за разходни отчети -ClassifyRefunded=Класифициране като 'Рефинансиран' +ClassifyRefunded=Класифициране като 'Възстановен' ExpenseReportWaitingForApproval=Нов разходен отчет е изпратен за одобрение ExpenseReportWaitingForApprovalMessage=Създаден е нов разходен отчет, който очаква одобрение.
- Потребител: %s
- Период: %s
Кликнете тук, за да го одобрите или отхвърлите: %s ExpenseReportWaitingForReApproval=Разходният отчет е изпратен за повторно одобрение -ExpenseReportWaitingForReApprovalMessage=Създаден разходен отчет очаква повторно одобрение.
Отчетът %s, отказахте да одобрите по следната причина: %s.
Предложена е нова версия, която очаква одобрение.
- Потребител: %s
- Период: %s
Кликнете тук, за да одобрите или отхвърлите: %s +ExpenseReportWaitingForReApprovalMessage=Създаден разходен отчет очаква повторно одобрение.
Отчетът %s, отказахте да одобрите по следната причина: %s.
Предложена е нова версия, която очаква одобрение.
- Потребител: %s
- Период: %s
Кликнете тук, за да го одобрите или отхвърлите: %s ExpenseReportApproved=Разходният отчет е одобрен ExpenseReportApprovedMessage=Разходният отчет %s е одобрен.
- Потребител: %s
- Одобрен от: %s
Кликнете тук, за да видите разходният отчет: %s -ExpenseReportRefused=Разходния отчет е отхвърлен -ExpenseReportRefusedMessage=Разходният отчет %s е отхвърлен.
- Потребител: %s
- Отхвърлен от: %s
- Причина за отхвърляне: %s
Кликнете тук, за видите разходния отчет: %s +ExpenseReportRefused=Разходният отчет е отхвърлен +ExpenseReportRefusedMessage=Разходният отчет %s е отхвърлен.
- Потребител: %s
- Отхвърлен от: %s
- Причина за отхвърляне: %s
Кликнете тук, за да видите разходния отчет: %s ExpenseReportCanceled=Разходният отчет е анулиран ExpenseReportCanceledMessage=Разходният отчет %s е анулиран.
- Потребител: %s
- Анулиран от: %s
- Причина за анулиране: %s
Кликнете тук, за да видите разходния отчет: %s ExpenseReportPaid=Разходният отчет е платен @@ -37,7 +37,7 @@ AnyOtherInThisListCanValidate=Лице за информиране, което TripSociete=Информация за фирма TripNDF=Информация за разходен отчет PDFStandardExpenseReports=Стандартен шаблон за генериране на PDF документ на разходния отчет -ExpenseReportLine=№ +ExpenseReportLine=Ред № TF_OTHER=Други TF_TRIP=Транспорт TF_LUNCH=Обяд @@ -73,14 +73,14 @@ EX_PAR_VP=Паркинг за ЛПС EX_CAM_VP=Поддръжка и ремонт на ЛПС DefaultCategoryCar=Режим на транспортиране по подразбиране DefaultRangeNumber=Номер на обхвата по подразбиране -UploadANewFileNow=Качете нов документ сега -Error_EXPENSEREPORT_ADDON_NotDefined=Грешка, правилото за номериране на разходни отчети не е дефинирано в настройката на модула 'Разходни отчети' +UploadANewFileNow=Прикачване на нов документ +Error_EXPENSEREPORT_ADDON_NotDefined=Грешка, правилото за номериране на разходни отчети не е дефинирано в настройката на модула разходни отчети. ErrorDoubleDeclaration=Създали сте друг разходен отчет в същия времеви период. AucuneLigne=Няма деклариран разходен отчет ModePaiement=Начин на плащане VALIDATOR=Потребител отговорен за одобрение VALIDOR=Одобрен от -AUTHOR=Записан от +AUTHOR=Създаден от AUTHORPAIEMENT=Платен от REFUSEUR=Отхвърлен от CANCEL_USER=Изтрит от @@ -112,8 +112,8 @@ ExpenseReportsToPay=Разходни отчети за плащане ConfirmCloneExpenseReport=Сигурни ли сте, че искате да клонирате този разходен отчет? ExpenseReportsIk=Индекс за отчитане на разходите ExpenseReportsRules=Правила за отчитане на разходите -ExpenseReportIkDesc=Можете да променяте изчисляването на разхода по километри, въз основа на категория и обхват, които са определени предварително. км е разстоянието в километри. -ExpenseReportRulesDesc=Можете да създавате или променяте правилата за изчисляване. Тази част ще се използва, когато потребител създаде разходен отчет. +ExpenseReportIkDesc=Може да променяте изчисляването на разхода по километри, въз основа на категория и обхват, които са определени предварително. км е разстоянието в километри. +ExpenseReportRulesDesc=Може да създавате или променяте правилата за изчисляване. Тази част ще се използва, когато потребител създаде разходен отчет. expenseReportOffset=Офсет expenseReportCoef=Коефициент expenseReportTotalForFive=Пример с км = 5 @@ -139,13 +139,13 @@ ExpenseReportConstraintViolationError=Идентификатор за наруш byEX_DAY=по ден (ограничение до %s) byEX_MON=по месец (ограничение до %s) byEX_YEA=по година (ограничение до %s) -byEX_EXP=от ред (ограничение до %s) +byEX_EXP=по ред (ограничение до %s) ExpenseReportConstraintViolationWarning=Идентификатор за нарушение на ограничението [%s]: %s превъзхожда %s %s nolimitbyEX_DAY=по ден (без ограничение) nolimitbyEX_MON=по месец (без ограничение) nolimitbyEX_YEA=по година (без ограничение) -nolimitbyEX_EXP=от ред (няма ограничение) -CarCategory=Категория на автомобила +nolimitbyEX_EXP=по ред (без ограничение) +CarCategory=Категория на автомобил ExpenseRangeOffset=Размер на офсета: %s RangeIk=Обхват на пробега AttachTheNewLineToTheDocument=Прикрепете реда към свързан документ diff --git a/htdocs/langs/bg_BG/website.lang b/htdocs/langs/bg_BG/website.lang index 18dc11e057d..7253e5c8aef 100644 --- a/htdocs/langs/bg_BG/website.lang +++ b/htdocs/langs/bg_BG/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/bg_BG/workflow.lang b/htdocs/langs/bg_BG/workflow.lang index ac65d1382f2..71026fb3062 100644 --- a/htdocs/langs/bg_BG/workflow.lang +++ b/htdocs/langs/bg_BG/workflow.lang @@ -1,20 +1,20 @@ # Dolibarr language file - Source file is en_US - workflow -WorkflowSetup=Настройки на модул Workflow -WorkflowDesc=Този модул е проектиран да редактира поведението на автоматичните действия в приложението. По подразбиране, работния процес е отворен (можете да правите неща в реда, в който желаете). Можете да активирате автоматичните действия, които ви интересуват. +WorkflowSetup=Настройка на модула работен процес +WorkflowDesc=Този модул осигурява някои автоматични действия. По подразбиране работният процес е отворен (можете да правите нещата в реда, по който искате), но тук можете да активирате някои автоматични действия. ThereIsNoWorkflowToModify=Няма налични промени на работния процес с активираните модули. # Autocreate -descWORKFLOW_PROPAL_AUTOCREATE_ORDER=Създай автоматично клиентска поръчка, след като предложението е подписано (новата поръчка че е на същатата стойност) -descWORKFLOW_PROPAL_AUTOCREATE_INVOICE=Автоматично създа фактура, след като търговското предложение е подписано (новата фактура ще има същата стойност като предложението) -descWORKFLOW_CONTRACT_AUTOCREATE_INVOICE=Автоматично създаване на клиентска фактура след като договора е валидиран -descWORKFLOW_ORDER_AUTOCREATE_INVOICE=Автоматично създай фактура, след като клиентската поръчка е затворена (новата фактура ще има същата стойност като поръчката) +descWORKFLOW_PROPAL_AUTOCREATE_ORDER=Автоматично създаване на клиентска поръчка след подписване на търговско предложение (новата поръчка ще има същата стойност като на предложение) +descWORKFLOW_PROPAL_AUTOCREATE_INVOICE=Автоматично създаване на клиентска фактура след подписване на търговско предложение (новата фактура ще има същата стойност като на предложението) +descWORKFLOW_CONTRACT_AUTOCREATE_INVOICE=Автоматично създаване на клиентска фактура след валидиране на договор +descWORKFLOW_ORDER_AUTOCREATE_INVOICE=Автоматично създаване на клиентска фактура след затваряне на клиентска поръчка (новата фактура ще има същата стойност като на поръчката) # Autoclassify customer proposal or order -descWORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL=Класифицирай свържаното предложение/предложения като платени, когато клиентската поръчка е маркирана като платена (ако стойността на поръчката е същата, като на свързаното предложение) -descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=Класифицирай вързаното предложение/я като платени, когато фактурата е валидирана (ако стойността на фактурата е същата като на подписаното предложение) -descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Класифицирай вързаната клиенска поръчка/поръчки като платени, когато фактурата е валидирана (ако стойността на фактурата е същата, като на вързаната поръчка) -descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Класифицирай свързаната клиентска поръчка/поръчки като платена, когато фактурата е маркирана като платена (ако стойността на фактурата е същата, като на вързаната поръчка) -descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Classify linked source customer order to shipped when a shipment is validated (and if quantity shipped by all shipments is the same as in the order to update) -# Autoclassify supplier order -descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Classify linked source vendor proposal(s) to billed when vendor invoice is validated (and if amount of the invoice is same than total amount of linked proposals) -descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Classify linked source purchase order(s) to billed when vendor invoice is validated (and if amount of the invoice is same than total amount of linked orders) +descWORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL=Класифициране на свързано търговско предложение - първоизточник като фактурирано след класифициране на клиентска поръчка като фактурирана (и ако стойността на поръчката е същата като общата сума на подписаното свързано предложение) +descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=Класифициране на свързано търговско предложение - първоизточник като фактурирано след валидиране на клиентска фактура (и ако стойността на фактурата е същата като общата сума на подписаното свързано предложение) +descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Класифициране на свързана клиентска поръчка - първоизточник като фактурирана след валидиране на клиентска фактура (и ако стойността на фактурата е същата като общата сума на свързаната поръчка) +descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Класифициране на свързана клиентска поръчка - първоизточник като фактурирана след плащане на клиентска фактура (и ако стойността на фактурата е същата като общата сума на свързаната поръчка) +descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Класифициране на свързана клиентска поръчка - първоизточник като изпратена след валидиране на пратка (и ако количеството, изпратено, чрез всички пратки е същото като в поръчката за актуализиране) +# Autoclassify purchase order +descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Класифициране на свързаното за запитване към доставчик - първоизточник като фактурираното след валидиране на доставната фактура (и ако стойността на фактурата е същата като общата сума на свързаното запитване) +descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Класифициране на свързаната поръчка за покупка - първоизточник като фактурирана след валидиране на доставна фактура (и ако стойността на фактурата е същата като общата сума на свързаната поръчка) AutomaticCreation=Автоматично създаване AutomaticClassification=Автоматично класифициране diff --git a/htdocs/langs/bn_BD/accountancy.lang b/htdocs/langs/bn_BD/accountancy.lang index bb141cb9eb0..758d9c340a5 100644 --- a/htdocs/langs/bn_BD/accountancy.lang +++ b/htdocs/langs/bn_BD/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/bn_BD/admin.lang b/htdocs/langs/bn_BD/admin.lang index 9eaa12ec9be..f30d6edd9f7 100644 --- a/htdocs/langs/bn_BD/admin.lang +++ b/htdocs/langs/bn_BD/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Create/modify services Permission534=Delete services Permission536=See/manage hidden services Permission538=Export services -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Read donations Permission702=Create/modify donations Permission703=Delete donations @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/bn_BD/bills.lang b/htdocs/langs/bn_BD/bills.lang index 5f39c25daf2..4467e38e1e7 100644 --- a/htdocs/langs/bn_BD/bills.lang +++ b/htdocs/langs/bn_BD/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma invoice InvoiceProFormaDesc=Proforma invoice is an image of a true invoice but has no accountancy value. InvoiceReplacement=Replacement invoice InvoiceReplacementAsk=Replacement invoice for invoice -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Credit note InvoiceAvoirAsk=Credit note to correct invoice InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/bn_BD/companies.lang b/htdocs/langs/bn_BD/companies.lang index 5ebfc8b1564..010d9bc67d7 100644 --- a/htdocs/langs/bn_BD/companies.lang +++ b/htdocs/langs/bn_BD/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias name (commercial, trademark, ...) AliasNameShort=Alias Name Companies=Companies CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=None Vendor=Vendor +Supplier=Vendor AddContact=Create contact AddContactAddress=Create contact/address EditContact=Edit contact diff --git a/htdocs/langs/bn_BD/other.lang b/htdocs/langs/bn_BD/other.lang index a6802140be3..8a5ccdbab5c 100644 --- a/htdocs/langs/bn_BD/other.lang +++ b/htdocs/langs/bn_BD/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=The intervention %s has been validated. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/bn_BD/website.lang b/htdocs/langs/bn_BD/website.lang index 534756ac932..0ee00aff7c0 100644 --- a/htdocs/langs/bn_BD/website.lang +++ b/htdocs/langs/bn_BD/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/bs_BA/accountancy.lang b/htdocs/langs/bs_BA/accountancy.lang index 427995e88d0..bf7de1af534 100644 --- a/htdocs/langs/bs_BA/accountancy.lang +++ b/htdocs/langs/bs_BA/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/bs_BA/admin.lang b/htdocs/langs/bs_BA/admin.lang index 06471c6fe6b..a8fe248b017 100644 --- a/htdocs/langs/bs_BA/admin.lang +++ b/htdocs/langs/bs_BA/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Create/modify services Permission534=Delete services Permission536=See/manage hidden services Permission538=Export services -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Read donations Permission702=Create/modify donations Permission703=Delete donations @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/bs_BA/bills.lang b/htdocs/langs/bs_BA/bills.lang index 6b4f729a832..abe5086202e 100644 --- a/htdocs/langs/bs_BA/bills.lang +++ b/htdocs/langs/bs_BA/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Predračun InvoiceProFormaDesc=Predračun izgleda isto kao račun, ali nema računovodstvene vrijednosti. InvoiceReplacement=Zamjenska faktura InvoiceReplacementAsk=Zamjenska faktura za fakturu -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Knjižna obavijest InvoiceAvoirAsk=Knjižna obavijest za korekciju računa InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/bs_BA/companies.lang b/htdocs/langs/bs_BA/companies.lang index 4a2e08700d5..f4be43431d8 100644 --- a/htdocs/langs/bs_BA/companies.lang +++ b/htdocs/langs/bs_BA/companies.lang @@ -28,7 +28,7 @@ AliasNames=Nadimak (komercijalni, trgovačkim, ...) AliasNameShort=Alias Name Companies=Kompanije CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Apsolutni popusti prodavača (uneseni od strane SupplierAbsoluteDiscountMy=Apsolutni popusti prodavača (uneseni od strane sebe) DiscountNone=Ništa Vendor=Vendor +Supplier=Vendor AddContact=Napravi kontakt AddContactAddress=Napravi kontakt/adresu EditContact=Uredi kontakt diff --git a/htdocs/langs/bs_BA/other.lang b/htdocs/langs/bs_BA/other.lang index 7bd1e35524f..648a6c40933 100644 --- a/htdocs/langs/bs_BA/other.lang +++ b/htdocs/langs/bs_BA/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=The intervention %s has been validated. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/bs_BA/website.lang b/htdocs/langs/bs_BA/website.lang index 978ed485cd6..8aa3e8d93f8 100644 --- a/htdocs/langs/bs_BA/website.lang +++ b/htdocs/langs/bs_BA/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/ca_ES/accountancy.lang b/htdocs/langs/ca_ES/accountancy.lang index 529605e4a5f..951da450713 100644 --- a/htdocs/langs/ca_ES/accountancy.lang +++ b/htdocs/langs/ca_ES/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Compte de resultats comptable (pèrdua) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Revista de tancament ACCOUNTING_ACCOUNT_TRANSFER_CASH=Compte de comptabilitat de la transferència bancària de transició +TransitionalAccount=Compte de transferència bancària transitòria ACCOUNTING_ACCOUNT_SUSPENSE=Compte comptable d'espera DONATION_ACCOUNTINGACCOUNT=Compte comptable per registrar les donacions @@ -216,8 +217,8 @@ DescThirdPartyReport=Consulteu aquí la llista dels clients i proveïdors de ter ListAccounts=Llistat dels comptes comptables UnknownAccountForThirdparty=Compte comptable de tercer desconeguda, utilitzarem %s UnknownAccountForThirdpartyBlocking=Compte comptable de tercer desconegut. Error de bloqueig -ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Third-party account not defined or third party unknown. We will use %s -ThirdpartyAccountNotDefinedOrThirdPartyUnknownBlocking=Third-party account not defined or third party unknown. Blocking error. +ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Compte de tercers no definit o tercer desconegut. Utilitzarem %s +ThirdpartyAccountNotDefinedOrThirdPartyUnknownBlocking=Compte de tercers no definit o tercer desconegut. Error de bloqueig. UnknownAccountForThirdpartyAndWaitingAccountNotDefinedBlocking=Compte de tercers desconegut i compte d'espera no definit. Error de bloqueig PaymentsNotLinkedToProduct=Pagament no vinculat a cap producte / servei @@ -230,7 +231,7 @@ TotalMarge=Marge total de vendes DescVentilCustomer=Consulti aquí la llista de línies de factures de client vinculades (o no) a comptes comptables de producte DescVentilMore=En la majoria dels casos, si tu utilitzes productes o serveis predefinits i poses el número de compte a la fitxa de producte/servei, l'aplicació serà capaç de fer tots els vincles entre les línies de factura i els comptes comptables del teu pla comptable, només amb un clic mitjançant el botó "%s". Si el compte no està col·locat a la fitxa del producte/servei o si encara hi ha alguna línia no vinculada a cap compte, hauràs de fer una vinculació manual a partir del menú "%s". -DescVentilDoneCustomer=Consulta aquí la llista de línies de factures de clients i els seus comptes comptables de producte +DescVentilDoneCustomer=Consulta aquí la llista de línies de factures a clients i els seus comptes comptables de producte DescVentilTodoCustomer=Comptabilitza les línies de factura encara no comptabilitzades amb un compte comptable de producte ChangeAccount=Canvia el compte comptable de producte/servei per les línies seleccionades amb el següent compte comptable: Vide=- @@ -292,7 +293,7 @@ Modelcsv_cogilog=Exporta a Cogilog Modelcsv_agiris=Exporta a Agiris Modelcsv_openconcerto=Exporta per a OpenConcerto (Test) Modelcsv_configurable=Exporta CSV configurable -Modelcsv_FEC=Export FEC +Modelcsv_FEC=Exporta FEC Modelcsv_Sage50_Swiss=Exportació per Sage 50 Switzerland ChartofaccountsId=Id pla comptable @@ -317,9 +318,9 @@ WithoutValidAccount=Sense compte dedicada vàlida WithValidAccount=Amb compte dedicada vàlida ValueNotIntoChartOfAccount=Aquest compte comptable no existeix al pla comptable AccountRemovedFromGroup=S'ha eliminat el compte del grup -SaleLocal=Local sale -SaleExport=Export sale -SaleEEC=Sale in EEC +SaleLocal=Venda local +SaleExport=Venda d’exportació +SaleEEC=Venda en CEE ## Dictionary Range=Rang de compte comptable @@ -340,7 +341,7 @@ UseMenuToSetBindindManualy=Línies encara no enllaçades, utilitzeu el menú %s). L'ús d'aquesta funció no és necessària. Es dóna per als usuaris que alberguen Dolibarr en un servidor que no ofereix els permisos d'eliminació de fitxers generats pel servidor web. PurgeDeleteLogFile=Suprimeix els fitxers de registre, incloent %s definit per al mòdul Syslog (sense risc de perdre dades) -PurgeDeleteTemporaryFiles=Delete all temporary files (no risk of losing data). Note: Deletion is done only if the temp directory was created 24 hours ago. +PurgeDeleteTemporaryFiles=Elimineu tots els fitxers temporals (no hi ha risc de perdre dades). Nota: La supressió només es fa si el directori temporal es va crear fa 24 hores. PurgeDeleteTemporaryFilesShort=Elimina els fitxers temporals PurgeDeleteAllFilesInDocumentsDir=Elimineu tots els arxius del directori: %s .
Això esborrarà tots documents generats i relacionats amb els elements (Tercers, factures etc ...), arxius carregats al mòdul ECM, còpies de seguretat de la Base de Dades, paperera i arxius temporals. PurgeRunNow=Purgar @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Caselles de verificació des de taula ExtrafieldLink=Enllaç a un objecte ComputedFormula=Camp calculat ComputedFormulaDesc=Podeu introduir aquí una fórmula usant altres propietats d'objecte o qualsevol codi PHP per obtenir un valor calculat dinàmic. Podeu utilitzar qualsevol fórmula compatible amb PHP, inclòs l'operador "?" i els següents objectes globals: $db, $conf, $langs, $mysoc, $user, $object.
AVÍS: Només algunes propietats de $object poden estar disponibles. Si necessiteu una propietat que no s'hagi carregat, tan sols busqueu l'objecte en la formula com en el segon exemple.
L'ús d'un camp calculat significa que no podeu introduir cap valor des de la interfície. A més, si hi ha un error de sintaxi, la fórmula potser no torni res.

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

Exemple de recarrega d'object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'

Un altre exemple de fórmula per forçar la càrrega de l'objecte i el seu objecte principal:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found' +Computedpersistent=Emmagatzemar el camp computat +ComputedpersistentDesc=Els camps addicionals computats s’emmagatzemaran a la base de dades, però, el valor només es tornarà a calcular quan l’objecte d’aquest camp s’ha canviat. Si el camp calculat depèn d'altres objectes o dades globals, aquest valor podria estar equivocat !! ExtrafieldParamHelpPassword=Mantenir aquest camp buit significa que el valor s'emmagatzema sense xifrar (el camp només ha d'estar amagat amb una estrella sobre la pantalla).
Establiu aquí el valor 'auto' per utilitzar la regla de xifrat per defecte per guardar la contrasenya a la base de dades (el valor llegit serà només el "hash", no hi haurà cap manera de recuperar el valor original) ExtrafieldParamHelpselect=La llista de valors ha de ser un conjunt de línies amb un par del tipus clau,valor (on la clau no pot ser '0')

per exemple :
clau1,valor1
clau2,valor2
clau3,valor3
...

Per tenir la llista depenent d'una altra llista d'atributs complementaris:
1,valor1|options_codi_llista_pare:clau_pare
2,valor2|options_codi_llista_pare:clau_pare

Per tenir la llista depenent d'una altra llista:
1,valor1|codi_llista_pare:clau_pare
2,valor2|codi_llista_pare:clau_pare ExtrafieldParamHelpcheckbox=La llista de valor ha de ser un conjunt de línies del tipus clau,valor (a on la clau no pot ser '0')

per exemple :
1,valor1
2,valor2
3,valor3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=La llista de valor ha de ser un conjunt de línies del ExtrafieldParamHelpsellist=Llista de valors que provenen d'una taula
Sintaxi: nom_taula:nom_camp:id_camp::filtre
Exemple : c_typent:libelle:id::filter

- idfilter ha de ser necessàriament una "primary int key"
- el filtre pot ser una comprovació senzilla (eg active=1) per mostrar només valors actius
També es pot emprar $ID$ al filtre per representar el ID de l'actual objecte en curs
Per fer un SELECT al filtre empreu $SEL$
Si voleu filtrar per algun camp extra ("extrafields") empreu la sintaxi extra.codicamp=... (a on codicamp és el codi del camp extra)

Per tenir la llista depenent d'una altre llista d'atributs complementaris:
c_typent:libelle:id:options_codi_llista_pare|parent_column:filter

Per tenir la llista depenent d'una altra llista:
c_typent:libelle:id:codi_llista_pare|parent_column:filter ExtrafieldParamHelpchkbxlst=La llista de valors prové d'una taula
Sintaxi: nom_taula:nom_camp:id_camp::filtre
Exemple: c_typent:libelle:id::filter

filtre pot ser una comprovació simple (p. ex. active=1) per mostrar només el valor actiu
També podeu utilitzar $ID$ en el filtre per representar l'ID actual de l'objecte en curs
Per fer un SELECT en el filtre utilitzeu $SEL$
si voleu filtrar per camps extra utilitzeu sintaxi extra.fieldcode=... (on el codi de camp és el codi del extrafield)

Per tenir la llista depenent d'una altra llista d'atributs complementaris:
c_typent:libelle:id:options_codi_llista_pare|parent_column: filter

Per tenir la llista depenent d'una altra llista: c_typent:libelle:id:codi_llista_pare|parent_column:filter ExtrafieldParamHelplink=Els paràmetres han de ser ObjectName: Classpath
Sintaxi: ObjectName:Classpath
Exemples :
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Manteniu-vos buits per obtenir un simple separador
Establiu-ho a 1 per a un separador col·lapsat (obert per defecte)
Establiu-ho a 2 per a un separador col·lapsat (col·lapsat per defecte) LibraryToBuildPDF=Llibreria utilitzada per generar PDF LocalTaxDesc=Alguns països apliquen 2 o 3 impostos en cada línia de factura. Si aquest és el cas, escull el tipus pel segon i el tercer impost i el seu valor. Els tipus possibles són:
1: impostos locals aplicats en productes i serveis sense IVA (l'impost local serà calculat en el total sense impostos)
2: impost local aplicat en productes i serveis amb IVA (l'impost local serà calculat amb el total + l'impost principal)
3: impost local aplicat en productes sense IVA (l'impost local serà calculat en el total sense impost)
4: impost local aplicat en productes amb IVA (l'impost local serà calculat amb el total + l'impost principal)
5: impost local aplicat en serveis sense IVA (l'impost local serà calculat amb el total sense impost)
6: impost local aplicat en serveis amb IVA inclòs (l'impost local serà calculat amb el total + IVA) SMS=SMS @@ -508,7 +511,7 @@ Module23Desc=Realitza el seguiment del consum d'energies Module25Name=Comanda de vendes Module25Desc=Gestió de comandes de vendes Module30Name=Factures -Module30Desc=Gestió de factures i abonaments de clients. Gestió de factures i abonaments de proveïdors +Module30Desc=Gestió de factures i abonaments a clients. Gestió de factures i abonaments de proveïdors Module40Name=Proveïdors Module40Desc=Gestió de proveïdors i compres (comandes de compra i facturació) Module42Name=Registre de depuració @@ -654,7 +657,7 @@ Permission12=Crear/Modificar factures Permission13=Devalidar factures Permission14=Validar factures Permission15=Envia factures per e-mail -Permission16=Crear cobraments per factures de clients +Permission16=Crear cobraments per factures de client Permission19=Elimina factures de client Permission21=Consulta pressupostos Permission22=Crear/modificar pressupostos @@ -804,7 +807,7 @@ Permission401=Consultar havers Permission402=Crear/modificar havers Permission403=Validar havers Permission404=Eliminar havers -Permission430=Use Debug Bar +Permission430=Utilitzeu la barra de depuració Permission511=Consulta el pagament dels salaris Permission512=Crea/modifica el pagament dels salaris Permission514=Elimina pagament de salaris @@ -819,9 +822,9 @@ Permission532=Crear/modificar serveis Permission534=Eliminar serveis Permission536=Veure / gestionar els serveis ocults Permission538=Exportar serveis -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Llegiu factures de materials +Permission651=Crear / actualitzar factures de materials +Permission652=Eliminar factures de materials Permission701=Consultar donacions Permission702=Crear/modificar donacions Permission703=Eliminar donacions @@ -841,12 +844,12 @@ Permission1101=Consultar ordres d'enviament Permission1102=Crear/modificar ordres d'enviament Permission1104=Validar ordre d'enviament Permission1109=Eliminar ordre d'enviament -Permission1121=Read supplier proposals -Permission1122=Create/modify supplier proposals -Permission1123=Validate supplier proposals -Permission1124=Send supplier proposals -Permission1125=Delete supplier proposals -Permission1126=Close supplier price requests +Permission1121=Llegiu les propostes dels proveïdors +Permission1122=Crear / modificar propostes de proveïdors +Permission1123=Valideu les propostes dels proveïdors +Permission1124=Enviar propostes de proveïdors +Permission1125=Elimineu les propostes dels proveïdors +Permission1126=Sol·licituds de preus dels proveïdors tancats Permission1181=Consultar proveïdors Permission1182=Consulta les comandes de compra Permission1183=Crea/modifica les comandes de compra @@ -866,7 +869,7 @@ Permission1235=Envieu les factures del proveïdor per correu electrònic Permission1236=Exporta les factures, atributs i pagaments del proveïdor Permission1237=Exporta les comandes de compra i els seus detalls Permission1251=Llançar les importacions en massa a la base de dades (càrrega de dades) -Permission1321=Exporta factures de clients, atributs i cobraments +Permission1321=Exporta factures de client, atributs i cobraments Permission1322=Reobrir una factura pagada Permission1421=Exporta ordres de vendes i atributs Permission2401=Llegir accions (esdeveniments o tasques) vinculades al seu compte @@ -882,15 +885,15 @@ Permission2503=Enviar o eliminar documents Permission2515=Configuració carpetes de documents Permission2801=Utilitzar el client FTP en mode lectura (només explorar i descarregar) Permission2802=Utilitzar el client FTP en mode escriptura (esborrar o pujar arxius) -Permission3200=Read archived events and fingerprints -Permission4001=See employees -Permission4002=Create employees -Permission4003=Delete employees -Permission4004=Export employees -Permission10001=Read website content -Permission10002=Create/modify website content (html and javascript content) -Permission10003=Create/modify website content (dynamic php code). Dangerous, must be reserved to restricted developers. -Permission10005=Delete website content +Permission3200=Llegiu els esdeveniments arxivats i les empremtes dactilars +Permission4001=Vegeu empleats +Permission4002=Crea empleats +Permission4003=Suprimeix els empleats +Permission4004=Exporta empleats +Permission10001=Llegiu el contingut del lloc web +Permission10002=Crea / modifica contingut del lloc web (contingut html i javascript) +Permission10003=Creeu / modifiqueu el contingut del lloc web (codi php dinàmic). Perillós, s'ha de reservar per a desenvolupadors restringits. +Permission10005=Suprimeix el contingut del lloc web Permission20001=Consulta els dies de lliure disposició (els propis i els dels teus subordinats) Permission20002=Crea/modifica els teus dies de lliure disposició (els propis i els dels teus subordinats) Permission20003=Elimina les peticions de dies lliures retribuïts @@ -904,19 +907,19 @@ Permission23004=Executar tasca programada Permission50101=Utilitza el punt de venda Permission50201=Consultar les transaccions Permission50202=Importar les transaccions -Permission50401=Bind products and invoices with accounting accounts -Permission50411=Read operations in ledger -Permission50412=Write/Edit operations in ledger -Permission50414=Delete operations in ledger -Permission50415=Delete all operations by year and journal in ledger -Permission50418=Export operations of the ledger -Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year -Permission50440=Manage chart of accounts, setup of accountancy -Permission51001=Read assets -Permission51002=Create/Update assets -Permission51003=Delete assets -Permission51005=Setup types of asset +Permission50401=Enllaçar productes i factures amb comptes comptables +Permission50411=Llegeix les operacions en el llibre major +Permission50412=Escriure / editar les operacions en el llibre major +Permission50414=Suprimeix les operacions en el llibre major +Permission50415=Elimineu totes les operacions per any i diari en llibre major +Permission50418=Operacions d’exportació del llibre major +Permission50420=Informes d'informe i d'exportació (facturació, saldo, revistes, llibre major) +Permission50430=Definiu i tanqueu un període fiscal +Permission50440=Gestionar el gràfic de comptes, configurar la comptabilitat +Permission51001=Llegiu actius +Permission51002=Crear / actualitzar actius +Permission51003=Suprimeix els actius +Permission51005=Configuració dels tipus d’actius Permission54001=Imprimir Permission55001=Llegir enquestes Permission55002=Crear/modificar enquestes @@ -1110,7 +1113,7 @@ AreaForAdminOnly=Els paràmetres de configuració només poden ser establerts pe SystemInfoDesc=La informació del sistema és informació tècnica accessible només en només lectura als administradors. SystemAreaForAdminOnly=Aquesta àrea només està disponible per als usuaris administradors. Els permisos d'usuari de Dolibarr no poden canviar aquesta restricció. CompanyFundationDesc=Editeu la informació de l'empresa/entitat. Feu clic al botó "%s" o "%s" al final de la pàgina. -AccountantDesc=If you have an external accountant/bookkeeper, you can edit here its information. +AccountantDesc=Si teniu un comptable extern, podeu editar aquí la seva informació. AccountantFileNumber=Número de fila DisplayDesc=Els paràmetres que afecten l'aspecte i el comportament de Dolibarr es poden modificar aquí. AvailableModules=Mòduls/complements disponibles @@ -1923,5 +1926,5 @@ IFTTTDesc=Aquest mòdul està dissenyat per activar esdeveniments en IFTTT i / o UrlForIFTTT=Punt final d’URL per a IFTTT YouWillFindItOnYourIFTTTAccount=El trobareu al vostre compte IFTTT EndPointFor=Punt final per %s: %s -DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +DeleteEmailCollector=Suprimeix el recollidor de correu electrònic +ConfirmDeleteEmailCollector=Esteu segur que voleu suprimir aquest recollidor de correu electrònic? diff --git a/htdocs/langs/ca_ES/bills.lang b/htdocs/langs/ca_ES/bills.lang index ada8f6a27c0..21384e91364 100644 --- a/htdocs/langs/ca_ES/bills.lang +++ b/htdocs/langs/ca_ES/bills.lang @@ -3,14 +3,14 @@ Bill=Factura Bills=Factures BillsCustomers=Factures a clients BillsCustomer=Factura a client -BillsSuppliers=Factures del proveïdor -BillsCustomersUnpaid=Factures de clients pendents de cobrament +BillsSuppliers=Factures de proveïdor +BillsCustomersUnpaid=Factures de client pendents de cobrament BillsCustomersUnpaidForCompany=Unpaid customer invoices for %s -BillsSuppliersUnpaid=Factures de venda pendents de pagament -BillsSuppliersUnpaidForCompany=Factures de venda pendents de pagament per %s +BillsSuppliersUnpaid=Factures de proveïdor pendents de pagament +BillsSuppliersUnpaidForCompany=Factures de proveïdors pendents de pagament per %s BillsLate=Retard en el pagament BillsStatistics=Estadístiques factures a clients -BillsStatisticsSuppliers=Estadístiques de Factures de Venda +BillsStatisticsSuppliers=Estadístiques de Factures de proveïdors DisabledBecauseDispatchedInBookkeeping=Desactivat perquè la factura s'ha contabilitzat DisabledBecauseNotLastInvoice=Desactivat perque la factura no es pot eliminar. S'han creat factures després d'aquesta i crearia buits al contador. DisabledBecauseNotErasable=Desactivat perque no es pot eliminar @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Factura proforma InvoiceProFormaDesc=La factura proforma és la imatge d'una factura definitiva, però que no té cap valor comptable. InvoiceReplacement=Factura rectificativa InvoiceReplacementAsk=Factura rectificativa de la factura -InvoiceReplacementDesc=La factura rectificativa serveix per a cancel·lar i per substituir una factura existent sobre la qual encara no hi ha pagaments.

Nota: Només una factura sense cap pagament pot rectificar-se. Si aquesta última no està tancada, passarà automàticament al estat 'abandonada'. +InvoiceReplacementDesc=La factura de substitució s’utilitza per substituir completament una factura sense que s’hagi rebut cap pagament.

Nota: Només es poden substituir les factures sense pagament. Si la factura que reemplaça encara no està tancada, es tancarà automàticament a "abandonat". InvoiceAvoir=Abonament InvoiceAvoirAsk=Abonament per factura rectificativa InvoiceAvoirDesc=L'abonament és una factura negativa destinada a compensar un import de factura que difereix de l'import realment pagat (per haver pagat de més o per devolució de productes, per exemple). @@ -52,9 +52,9 @@ Invoices=Factures InvoiceLine=Línia de factura InvoiceCustomer=Factura a client CustomerInvoice=Factura a client -CustomersInvoices=Factures a clientes +CustomersInvoices=Factures a clients SupplierInvoice=Factura del proveïdor -SuppliersInvoices=Factures de Venda +SuppliersInvoices=Factures de proveïdors SupplierBill=Factura del proveïdor SupplierBills=Factures de proveïdors Payment=Pagament @@ -249,7 +249,7 @@ DatePointOfTax=Punt d'impostos NoInvoice=Cap factura ClassifyBill=Classificar la factura SupplierBillsToPay=Factures de proveïdors pendents de pagament -CustomerBillsUnpaid=Factures de clients pendents de cobrament +CustomerBillsUnpaid=Factures de client pendents de cobrament NonPercuRecuperable=No percebut recuperable SetConditions=Indicar les condicions de pagament SetMode=Indicar la forma de pagament diff --git a/htdocs/langs/ca_ES/boxes.lang b/htdocs/langs/ca_ES/boxes.lang index 0518953708d..f90f92e665a 100644 --- a/htdocs/langs/ca_ES/boxes.lang +++ b/htdocs/langs/ca_ES/boxes.lang @@ -6,7 +6,7 @@ BoxProductsAlertStock=Alertes d'estoc per a productes BoxLastProductsInContract=Últims %s productes/serveis contractats BoxLastSupplierBills=Últimes factures de Proveïdor BoxLastCustomerBills=Últimes factures de Client -BoxOldestUnpaidCustomerBills=Factures de clients més antigues pendents de cobrament +BoxOldestUnpaidCustomerBills=Factures de client més antigues pendents de cobrament BoxOldestUnpaidSupplierBills=Factures de Proveïdors més antigues pendents de pagament BoxLastProposals=Últims pressupostos BoxLastProspects=Últims clients potencials modificats @@ -27,7 +27,7 @@ BoxTitleLastModifiedSuppliers=Proveïdors: últims %s modificats BoxTitleLastModifiedCustomers=Clients: últims %s modificats BoxTitleLastCustomersOrProspects=Últims %s clients o clients potencials BoxTitleLastCustomerBills=Últimes %s factures del client -BoxTitleLastSupplierBills=Últimes %s factures del proveïdor +BoxTitleLastSupplierBills=Últimes %s factures de proveïdor BoxTitleLastModifiedProspects=Clients Potencials: últims %s modificats BoxTitleLastModifiedMembers=Últims %s socis BoxTitleLastFicheInter=Últimes %s intervencions modificades @@ -35,7 +35,7 @@ BoxTitleOldestUnpaidCustomerBills=Factures de client: les %s més antigues sense BoxTitleOldestUnpaidSupplierBills=Factures de Proveïdor: el més antic %s sense pagar BoxTitleCurrentAccounts=Comptes oberts: saldos BoxTitleLastModifiedContacts=Adreces i contactes: últims %s modificats -BoxMyLastBookmarks=Bookmarks: latest %s +BoxMyLastBookmarks=Adreces d'interès: últims %s BoxOldestExpiredServices=Serveis antics expirats BoxLastExpiredServices=Últims %s contactes amb serveis actius expirats BoxTitleLastActionsToDo=Últims %s events a realitzar @@ -78,7 +78,7 @@ BoxTitleLatestModifiedSupplierOrders=Comandes a Proveïdor: últimes %s modifica BoxTitleLastModifiedCustomerBills=Factures del client: últimes %s modificades BoxTitleLastModifiedCustomerOrders=Comandes de venda: últimes %s modificades BoxTitleLastModifiedPropals=Últims %s pressupostos modificats -ForCustomersInvoices=Factures a clientes +ForCustomersInvoices=Factures a clients ForCustomersOrders=Comandes de clients ForProposals=Pressupostos LastXMonthRolling=Els últims %s mesos consecutius diff --git a/htdocs/langs/ca_ES/cashdesk.lang b/htdocs/langs/ca_ES/cashdesk.lang index 0f4251de48f..1b0a6e3a957 100644 --- a/htdocs/langs/ca_ES/cashdesk.lang +++ b/htdocs/langs/ca_ES/cashdesk.lang @@ -68,4 +68,4 @@ Terminal=Terminal NumberOfTerminals=Nombre de terminals TerminalSelect=Selecciona el terminal que vols utilitzar: POSTicket=Tiquet TPV -BasicPhoneLayout=Use basic layout for phones +BasicPhoneLayout=Utilitzeu el disseny bàsic dels telèfons diff --git a/htdocs/langs/ca_ES/companies.lang b/htdocs/langs/ca_ES/companies.lang index 9721e179a83..90fe74a1d3b 100644 --- a/htdocs/langs/ca_ES/companies.lang +++ b/htdocs/langs/ca_ES/companies.lang @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Descomptes absoluts de proveïdor (introduïts SupplierAbsoluteDiscountMy=Descomptes absoluts del proveïdor (introduït per tu mateix) DiscountNone=Cap Vendor=Proveïdor +Supplier=Proveïdor AddContact=Crear contacte AddContactAddress=Crear contacte/adreça EditContact=Editar contacte diff --git a/htdocs/langs/ca_ES/compta.lang b/htdocs/langs/ca_ES/compta.lang index 35cad091b15..4763033a3fa 100644 --- a/htdocs/langs/ca_ES/compta.lang +++ b/htdocs/langs/ca_ES/compta.lang @@ -142,11 +142,11 @@ CalcModeVATEngagement=Mode d'%sIVA sobre ingressos-despeses%s. CalcModeDebt=Anàlisi de factures conegudes registrades, fins i tot si encara no estan comptabilitzades en el llibre major. CalcModeEngagement=Anàlisi dels pagaments registrats coneguts, fins i tot si encara no estan comptabilitzat en el Llibre Major. CalcModeBookkeeping=Anàlisi de dades publicades a la taula de compilació de llibres. -CalcModeLT1= Metode %sRE factures a clients - factures de proveïdors%s +CalcModeLT1= Metode %sRE factures a client - factures de proveïdor%s CalcModeLT1Debt=Metode %sRE a factures a clients%s CalcModeLT1Rec= Metode %sRE a factures de proveïdors%s -CalcModeLT2= Metode %sIRPF a factures a clients - factures de proveïdors%s -CalcModeLT2Debt=Metode %sIRPF a factures a clients%s +CalcModeLT2= Metode %sIRPF a factures a client - factures de proveïdor%s +CalcModeLT2Debt=Metode %sIRPF a factures a client%s CalcModeLT2Rec= Metode %sIRPF a factures de proveïdors%s AnnualSummaryDueDebtMode=Saldo d'ingressos i despeses, resum anual AnnualSummaryInputOutputMode=Saldo d'ingressos i despeses, resum anual @@ -160,7 +160,7 @@ RulesAmountWithTaxIncluded=- Els imports mostrats són amb tots els impostos inc RulesResultDue=- Inclou les factures pendents, despeses, IVA, donacions estiguen o no pagades. També s'inclou salaris pagats.
- Es basa en la data de la validació de les factures i l'IVA i en la data de venciment per a despeses. Per salaris definits amb el mòdul de Salari, s'utilitza la data de valor del pagament. RulesResultInOut=- Inclou els pagaments reals realitzats en les factures, les despeses, l'IVA i els salaris.
- Es basa en les dates de pagament de les factures, les despeses, l'IVA i els salaris. La data de la donació per a la donació. RulesCADue=- Inclou les factures degudes del client estiguin pagades o no.
- Es basa en la data de la validació d'aquestes factures.
-RulesCAIn=- Inclou tots els pagaments efectius de factures rebudes dels clients.
- Es basa en la data de pagament d'aquestes factures
+RulesCAIn=- Inclou tots els pagaments efectius de factures rebuts dels clients.
- Es basa en la data de pagament d'aquestes factures
RulesCATotalSaleJournal=Inclou totes les línies de crèdit del Diari de venda. RulesAmountOnInOutBookkeepingRecord=Inclou un registre al vostre Llibre Major amb comptes comptables que tenen el grup "DESPESA" o "INGRÉS" RulesResultBookkeepingPredefined=Inclou un registre al vostre Llibre Major amb comptes comptables que tenen el grup "DESPESA" o "INGRÉS" diff --git a/htdocs/langs/ca_ES/errors.lang b/htdocs/langs/ca_ES/errors.lang index d45575cbba1..bbe1bd29076 100644 --- a/htdocs/langs/ca_ES/errors.lang +++ b/htdocs/langs/ca_ES/errors.lang @@ -118,7 +118,7 @@ ErrorLoginHasNoEmail=Aquest usuari no té e-mail. Impossible continuar. ErrorBadValueForCode=Valor incorrecte per codi de seguretat. Torna a intentar-ho amb un nou valor... ErrorBothFieldCantBeNegative=Els camps %s i %s no poden ser negatius ErrorFieldCantBeNegativeOnInvoice=El camp %s no pot ser negatiu en aquest tipus de factura. Si voleu afegir una línia de descompte, primer cal crear el descompte amb l'enllaç %s a la pantalla i aplicar-lo a la factura. També podeu demanar-li al vostre administrador que configureu l'opció FACTURE_ENABLE_NEGATIVE_LINES a 1 per permetre el comportament anterior. -ErrorQtyForCustomerInvoiceCantBeNegative=La quantitat a les línies de factures a clients no poden ser negatives +ErrorQtyForCustomerInvoiceCantBeNegative=La quantitat a les línies de factures a client no poden ser negatives ErrorWebServerUserHasNotPermission=El compte d'execució del servidor web %s no disposa dels permisos per això ErrorNoActivatedBarcode=No hi ha activat cap tipus de codi de barres ErrUnzipFails=No s'ha pogut descomprimir el fitxer %s amb ZipArchive diff --git a/htdocs/langs/ca_ES/install.lang b/htdocs/langs/ca_ES/install.lang index 9e9c382b82d..33f9df9b20f 100644 --- a/htdocs/langs/ca_ES/install.lang +++ b/htdocs/langs/ca_ES/install.lang @@ -14,7 +14,7 @@ PHPSupportPOSTGETKo=És possible que aquest PHP no suport les variables POST i/o PHPSupportGD=Aquest PHP és compatible amb les funcions gràfiques GD. PHPSupportCurl=Aquest PHP suporta Curl. PHPSupportUTF8=Aquest PHP és compatible amb les funcions UTF8. -PHPSupportIntl=This PHP supports Intl functions. +PHPSupportIntl=Aquest PHP admet funcions Intl. PHPMemoryOK=La seva memòria màxima de sessió PHP està definida a %s. Això hauria de ser suficient. PHPMemoryTooLow=La seva memòria màxima de sessió PHP està definida a %s bytes. Això és molt poc. Es recomana modificar el paràmetre memory_limit del seu arxiu php.ini a almenys %s octets. Recheck=Faci clic aquí per realitzar un test més exhaustiu @@ -22,7 +22,7 @@ ErrorPHPDoesNotSupportSessions=La vostra instal·lació de PHP no suporta sessio ErrorPHPDoesNotSupportGD=La vostra instal·lació de PHP no és compatible amb les funcions gràfiques de GD. No hi haurà gràfics disponibles. ErrorPHPDoesNotSupportCurl=La teva instal·lació PHP no soporta Curl. ErrorPHPDoesNotSupportUTF8=Aquest PHP no suporta les funcions UTF8. Resolgui el problema abans d'instal lar Dolibarr ja que no funcionarà correctamete. -ErrorPHPDoesNotSupportIntl=Your PHP installation does not support Intl functions. +ErrorPHPDoesNotSupportIntl=La vostra instal·lació de PHP no admet funcions Intl. ErrorDirDoesNotExists=La carpeta %s no existeix o no és accessible. ErrorGoBackAndCorrectParameters=Torneu enrere i verifiqueu / corregiu els paràmetres. ErrorWrongValueForParameter=Ha indicat potser un valor incorrecte per al paràmetre '%s'. @@ -152,7 +152,7 @@ MigrationFixData=Correcció de dades desnormalitzades MigrationOrder=Migració de dades de les comandes clients MigrationSupplierOrder=Migració de dades per a comandes de proveïdors MigrationProposal=Migració de dades de pressupostos -MigrationInvoice=Migració de dades de les factures a clients +MigrationInvoice=Migració de dades de les factures a client MigrationContract=Migració de dades dels contractes MigrationSuccessfullUpdate=Actualització finalitzada MigrationUpdateFailed=L'actualització ha fallat diff --git a/htdocs/langs/ca_ES/mails.lang b/htdocs/langs/ca_ES/mails.lang index 1ec8f7d5687..1828b9c1736 100644 --- a/htdocs/langs/ca_ES/mails.lang +++ b/htdocs/langs/ca_ES/mails.lang @@ -78,9 +78,9 @@ GroupEmails=Correus grupals OneEmailPerRecipient=Un correu per destinatari (per defecte, un correu electrònic per registre seleccionat) WarningIfYouCheckOneRecipientPerEmail=Advertència, si marqueu aquesta casella, significa que només s'enviarà un correu electrònic per a diversos registres seleccionats, de manera que, si el vostre missatge conté variables de substitució que fan referència a dades d'un registre, no és possible reemplaçar-les. ResultOfMailSending=Resultat de l'enviament de correu massiu -NbSelected=Number selected -NbIgnored=Number ignored -NbSent=Number sent +NbSelected=Número seleccionat +NbIgnored=Número ignorat +NbSent=Número enviat SentXXXmessages=%s missatge(s) enviat(s). ConfirmUnvalidateEmailing=Are you sure you want to change email %s to draft status? MailingModuleDescContactsWithThirdpartyFilter=Contacte amb filtres de client diff --git a/htdocs/langs/ca_ES/members.lang b/htdocs/langs/ca_ES/members.lang index 4c1077e8d0f..7b0071dd54c 100644 --- a/htdocs/langs/ca_ES/members.lang +++ b/htdocs/langs/ca_ES/members.lang @@ -171,7 +171,7 @@ MembersStatisticsDesc=Tria les estadístiques que vols consultar... MenuMembersStats=Estadístiques LastMemberDate=Data de l'últim soci LatestSubscriptionDate=Data de l'última afiliació -MemberNature=Nature of member +MemberNature=Naturalesa del membre Public=Informació pública NewMemberbyWeb=S'ha afegit un nou soci. A l'espera d'aprovació NewMemberForm=Formulari d'inscripció diff --git a/htdocs/langs/ca_ES/other.lang b/htdocs/langs/ca_ES/other.lang index 925599d9eb8..14b335112d9 100644 --- a/htdocs/langs/ca_ES/other.lang +++ b/htdocs/langs/ca_ES/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Número de factures de client NumberOfSupplierProposals=Nombre de propostes de venedor NumberOfSupplierOrders=Nombre de comandes de compra NumberOfSupplierInvoices=Nombre de factures de venedor +NumberOfContracts=Nombre de contractes NumberOfUnitsProposals=Número d'unitats en pressupostos NumberOfUnitsCustomerOrders=Nombre d'unitats per comandes de venda NumberOfUnitsCustomerInvoices=Número d'unitats en factures de client NumberOfUnitsSupplierProposals=Nombre d'unitats en propostes de venedor NumberOfUnitsSupplierOrders=Nombre d'unitats en comandes de compra NumberOfUnitsSupplierInvoices=Nombre d'unitats a les factures del venedor +NumberOfUnitsContracts=Nombre d’unitats en contractes EMailTextInterventionAddedContact=S'ha assignat una nova intervenció %s. EMailTextInterventionValidated=Fitxa intervenció %s validada EMailTextInvoiceValidated=La factura %s ha estat validada. @@ -246,10 +248,10 @@ YourPasswordHasBeenReset=La teva contrasenya s'ha restablert correctament ApplicantIpAddress=Adreça IP del sol·licitant SMSSentTo=SMS enviat a %s MissingIds=Falta els identificadors -ThirdPartyCreatedByEmailCollector=Third party created by email collector from email MSGID %s -ContactCreatedByEmailCollector=Contact/address created by email collector from email MSGID %s -ProjectCreatedByEmailCollector=Project created by email collector from email MSGID %s -TicketCreatedByEmailCollector=Ticket created by email collector from email MSGID %s +ThirdPartyCreatedByEmailCollector=Tercers creats pel recollidor de correus electrònics MSGID %s +ContactCreatedByEmailCollector=Contacte / adreça creada pel recollidor de correus electrònics MSGID %s +ProjectCreatedByEmailCollector=Projecte creat pel recollidor de correus electrònics MSGID %s +TicketCreatedByEmailCollector=Tiquet creat pel recollidor de correus electrònics MSGID %s ##### Export ##### ExportsArea=Àrea d'exportacions @@ -269,4 +271,4 @@ WEBSITE_KEYWORDS=Paraules clau LinesToImport=Línies per importar MemoryUsage=Ús de memòria -RequestDuration=Duration of request +RequestDuration=Durada de la sol·licitud diff --git a/htdocs/langs/ca_ES/products.lang b/htdocs/langs/ca_ES/products.lang index c16392c2b98..4605e1a6df9 100644 --- a/htdocs/langs/ca_ES/products.lang +++ b/htdocs/langs/ca_ES/products.lang @@ -159,7 +159,7 @@ SuppliersPrices=Preus del proveïdor SuppliersPricesOfProductsOrServices=Preus del venedor (de productes o serveis) CustomCode=Duana / mercaderia / codi HS CountryOrigin=País d'origen -Nature=Nature of produt (material/finished) +Nature=Naturalesa del producte (material / acabat) ShortLabel=Etiqueta curta Unit=Unitat p=u. diff --git a/htdocs/langs/ca_ES/projects.lang b/htdocs/langs/ca_ES/projects.lang index 94e82793eae..5518dd13758 100644 --- a/htdocs/langs/ca_ES/projects.lang +++ b/htdocs/langs/ca_ES/projects.lang @@ -85,8 +85,8 @@ GoToGanttView=Vés a la vista de Gantt GanttView=Vista de Gantt ListProposalsAssociatedProject=Llista de propostes comercials relacionades amb el projecte ListOrdersAssociatedProject=Llista de comandes de vendes relacionades amb el projecte -ListInvoicesAssociatedProject=Llista de factures dels clients relacionades amb el projecte -ListPredefinedInvoicesAssociatedProject=Llista de factures dels clients relacionades amb el projecte +ListInvoicesAssociatedProject=Llista de factures a clients relacionades amb el projecte +ListPredefinedInvoicesAssociatedProject=Llista de factures a clients relacionades amb el projecte ListSupplierOrdersAssociatedProject=Llista de comandes de compra relacionades amb el projecte ListSupplierInvoicesAssociatedProject=Llista de factures de venedor relacionades amb el projecte ListContractAssociatedProject=Llista de contractes relacionats amb el projecte diff --git a/htdocs/langs/ca_ES/salaries.lang b/htdocs/langs/ca_ES/salaries.lang index ed8b1cef464..f4567d2fd49 100644 --- a/htdocs/langs/ca_ES/salaries.lang +++ b/htdocs/langs/ca_ES/salaries.lang @@ -18,4 +18,4 @@ LastSalaries=Últims %s pagaments de salari AllSalaries=Tots els pagaments de salari SalariesStatistics=Estadístiques de salaris # Export -SalariesAndPayments=Salaries and payments +SalariesAndPayments=Salaris i pagaments diff --git a/htdocs/langs/ca_ES/stocks.lang b/htdocs/langs/ca_ES/stocks.lang index d173d9f2f6c..f2684fdd84c 100644 --- a/htdocs/langs/ca_ES/stocks.lang +++ b/htdocs/langs/ca_ES/stocks.lang @@ -66,12 +66,12 @@ RuleForStockManagementIncrease=Tria la regla per augmentar l'estoc automàtic (l DeStockOnBill=Disminueix els estocs real en la validació de la factura/abonament de client DeStockOnValidateOrder=Disminueix els estocs reals en la validació de comandes de client DeStockOnShipment=Disminueix l'estoc real al validar l'enviament -DeStockOnShipmentOnClosing=Decrease real stocks when shipping is set to closed +DeStockOnShipmentOnClosing=Reduïu les existències reals quan l’enviament s’ha establert com a tancat ReStockOnBill=Augmenta els estocs reals en la validació de la factura/abonament del proveïdor ReStockOnValidateOrder=Augmenta els estocs reals en l'aprovació de la comanda de compra ReStockOnDispatchOrder=Augmenta els estocs reals en l'enviament manual al magatzem, després de rebre els productes de la comanda del proveïdor -StockOnReception=Increase real stocks on validation of reception -StockOnReceptionOnClosing=Increase real stocks when reception is set to closed +StockOnReception=Augmenteu les existències reals a la validació de la recepció +StockOnReceptionOnClosing=Augmenteu les existències reals quan la recepció està tancada OrderStatusNotReadyToDispatch=La comanda encara no està o no té un estat que permeti un desglossament d'estoc. StockDiffPhysicTeoric=Motiu de la diferència entre l'estoc físic i virtual NoPredefinedProductToDispatch=No hi ha productes predefinits en aquest objecte. Per tant no es pot realitzar un desglossament d'estoc. diff --git a/htdocs/langs/ca_ES/suppliers.lang b/htdocs/langs/ca_ES/suppliers.lang index 22eef83e987..65f34605229 100644 --- a/htdocs/langs/ca_ES/suppliers.lang +++ b/htdocs/langs/ca_ES/suppliers.lang @@ -1,4 +1,4 @@ -# Dolibarr language file - Source file is en_US - suppliers +# Dolibarr language file - Source file is en_US - vendors Suppliers=Proveïdors SuppliersInvoice=Factura del proveïdor ShowSupplierInvoice=Mostra la factura del proveïdor @@ -15,7 +15,7 @@ SomeSubProductHaveNoPrices=Alguns subproductes no tenen preus definits AddSupplierPrice=Afegeix preu de compra ChangeSupplierPrice=Canvia el preu de compra SupplierPrices=Preus del proveïdor -ReferenceSupplierIsAlreadyAssociatedWithAProduct=Aquesta referència de proveïdor ja està associada a la referència: %s +ReferenceSupplierIsAlreadyAssociatedWithAProduct=Aquesta referència del proveïdor ja està associada amb el producte: %s NoRecordedSuppliers=No s'ha registrat cap proveïdor SupplierPayment=Pagament al proveïdor SuppliersArea=Àrea de proveïdors @@ -35,13 +35,13 @@ ListOfSupplierProductForSupplier=Llista de productes i preus del proveïdor % SentToSuppliers=Enviat als proveïdors ListOfSupplierOrders=Llista de comandes de compra MenuOrdersSupplierToBill=Comandes de compra a facturar -NbDaysToDelivery=Temps d'entrega en dies -DescNbDaysToDelivery=El retard més gran d'entrega dels productes d'aquesta comanda +NbDaysToDelivery=Retard de lliurament (dies) +DescNbDaysToDelivery=El retard de lliurament més llarg dels productes d'aquesta comanda SupplierReputation=Reputació del proveïdor DoNotOrderThisProductToThisSupplier=No demanar -NotTheGoodQualitySupplier=Qualitat incorrecte +NotTheGoodQualitySupplier=Baixa qualitat ReputationForThisProduct=Reputació BuyerName=Nom del comprador AllProductServicePrices=Tots els preus de producte / servei -AllProductReferencesOfSupplier=Totes les referències dels productes/serveis del proveïdor +AllProductReferencesOfSupplier=Totes les referències de producte / servei del proveïdor BuyingPriceNumShort=Preus del proveïdor diff --git a/htdocs/langs/ca_ES/website.lang b/htdocs/langs/ca_ES/website.lang index ff4dd50fd8d..4c62bea2365 100644 --- a/htdocs/langs/ca_ES/website.lang +++ b/htdocs/langs/ca_ES/website.lang @@ -98,8 +98,8 @@ NoWebSiteCreateOneFirst=Encara no s'ha creat cap lloc web. Creeu-ne un primer. GoTo=Ves a DynamicPHPCodeContainsAForbiddenInstruction=Afegiu un codi PHP dinàmic que conté la instrucció PHP ' %s ' prohibida per defecte com a contingut dinàmic (vegeu les opcions ocultes WEBSITE_PHP_ALLOW_xxx per augmentar la llista d’ordres permeses). NotAllowedToAddDynamicContent=No teniu permís per afegir o editar contingut dinàmic de PHP als llocs web. Demana permís o simplement guarda el codi en etiquetes php sense modificar. -ReplaceWebsiteContent=Substituïu el contingut del lloc web +ReplaceWebsiteContent=Cerqueu o substitueixi el contingut del lloc web DeleteAlsoJs=Voleu suprimir també tots els fitxers javascript específics d'aquest lloc web? DeleteAlsoMedias=Voleu suprimir també tots els fitxers de mitjans específics d’aquest lloc web? # Export -MyWebsitePages=My website pages +MyWebsitePages=Les meves pàgines web diff --git a/htdocs/langs/ca_ES/withdrawals.lang b/htdocs/langs/ca_ES/withdrawals.lang index 8149a6968ba..ecf3b20eeff 100644 --- a/htdocs/langs/ca_ES/withdrawals.lang +++ b/htdocs/langs/ca_ES/withdrawals.lang @@ -13,7 +13,7 @@ RequestStandingOrderToTreat=Petició per a processar ordres de pagament mitjanç RequestStandingOrderTreated=Petició per a processar ordres de pagament mitjançant domiciliació bancària finalitzada NotPossibleForThisStatusOfWithdrawReceiptORLine=Encara no és possible. L'estat de la domiciliació ter que ser 'abonada' abans de poder realitzar devolucions a les seves línies NbOfInvoiceToWithdraw=Nombre de factures qualificades esperant l'ordre de domiciliació bancària -NbOfInvoiceToWithdrawWithInfo=Número de factures del client en espera de domiciliació per a clients que tenen el número de compte definida +NbOfInvoiceToWithdrawWithInfo=Número de factures a client en espera de domiciliació per a clients que tenen el número de compte definida InvoiceWaitingWithdraw=Factura esperant per domiciliació bancària AmountToWithdraw=Import a domiciliar WithdrawsRefused=Domiciliació bancària refusada @@ -69,8 +69,8 @@ WithBankUsingBANBIC=Per als comptes bancaris que utilitzen el codi BAN/BIC/SWIFT BankToReceiveWithdraw=Recepció del compte bancari CreditDate=Abonada el WithdrawalFileNotCapable=No és possible generar el fitxer bancari de domiciliació pel país %s (El país no esta suportat) -ShowWithdraw=Show Direct Debit Order -IfInvoiceNeedOnWithdrawPaymentWontBeClosed=However, if invoice has at least one direct debit payment order not yet processed, it won't be set as paid to allow prior withdrawal management. +ShowWithdraw=Mostra la comanda de domiciliació directa +IfInvoiceNeedOnWithdrawPaymentWontBeClosed=Tanmateix, si la factura té com a mínim una ordre de pagament de domiciliació bancària que encara no ha estat processada, no es definirà com a pagament per permetre la gestió prèvia de la retirada. DoStandingOrdersBeforePayments=Aquesta llengüeta et permet fer una petició de pagament per domiciliació bancària. Un cop feta, aneu al menú Bancs -> Domiciliacions bancàries per a gestionar el pagament per domiciliació. Quan el pagament és tancat, el pagament sobre la factura serà automàticament gravat, i la factura tancada si el pendent a pagar re-calculat resulta cero. WithdrawalFile=Arxiu de la domiciliació SetToStatusSent=Classificar com "Arxiu enviat" diff --git a/htdocs/langs/cs_CZ/accountancy.lang b/htdocs/langs/cs_CZ/accountancy.lang index 0612da6048c..2291178ee74 100644 --- a/htdocs/langs/cs_CZ/accountancy.lang +++ b/htdocs/langs/cs_CZ/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Výsledek účetní účet (ztráta) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Časopis uzavření ACCOUNTING_ACCOUNT_TRANSFER_CASH=Účtovací účet přechodného bankovního převodu +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Čekající účet DONATION_ACCOUNTINGACCOUNT=Účtování účet registrovaných darů diff --git a/htdocs/langs/cs_CZ/admin.lang b/htdocs/langs/cs_CZ/admin.lang index 6bb62b09319..57c17f66bca 100644 --- a/htdocs/langs/cs_CZ/admin.lang +++ b/htdocs/langs/cs_CZ/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Zaškrtávací políčka z tabulky ExtrafieldLink=Odkaz na objekt ComputedFormula=Vypočtené pole ComputedFormulaDesc=Zde můžete zadat vzorec pomocí jiných vlastností objektu nebo libovolného kódování PHP pro získání dynamické vypočtené hodnoty. Můžete použít libovolné kompatibilní formule PHP včetně "?" operátor stavu a následující globální objekt: $ db, $ conf, $ langs, $ mysoc, $ user, $ objekt .
VAROVÁNÍ : K dispozici jsou pouze některé vlastnosti objektu $. Pokud potřebujete vlastnosti, které nejsou načteny, jednoduše přiveďte objekt do vzorce, jako ve druhém příkladu.
Použití vypočítaného pole znamená, že nemůžete zadat libovolnou hodnotu z rozhraní. Také pokud existuje syntaktická chyba, vzorec může vrátit nic.

Příklad vzorce:
$ object-> id < 10 ? round($object-> id / 2, 2): ($ objekt-> id + 2 * $ user-> id) * (int) substr ($ mysoc-> zip, 1, 2 )

Příklad pro opětovné načtení objektu
(($ reloadedobj = new Societe ($ db)) && ($ reloadedobj-> fetch ($ obj-> id? $ Obj-> id: > rowid: $ object-> id))> 0))? $ reloadedobj-> array_options ['options_extrafieldkey'] * $ reloadedobj-> capital / 5: '-1'

Jiný příklad vzoru pro zatížení objektu a jeho nadřazeného objektu:
($ reloadedobj = new Task )) && ($ reloadedobj-> fetch ($ object-> id)> 0) && ($ secondloadedobj = nový projekt ($ db)) && ($ secondloadedobj-> fetch ($ reloadedobj-> fk_project)> 0))? $ secondloadedobj-> ref: 'Nadřazený projekt nebyl nalezen' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Pokud ponecháte toto pole prázdné, znamená to, že tato hodnota bude uložena bez šifrování (pole musí být skryto pouze s hvězdou na obrazovce).
Nastavte "auto" pro použití výchozího šifrovacího pravidla pro uložení hesla do databáze (pak hodnota bude číst pouze hash, žádný způsob získání původní hodnoty) ExtrafieldParamHelpselect=Seznam hodnot musí být řádky s formátovým klíčem, hodnota (kde klíč nemůže být '0')

například:
1, value1
2, value2
code3, value3
...

seznam v závislosti na dalším doplňkovém seznamu atributů:
1, value1 | options_ parent_list_code : parent_key
2, value2 | options_ parent_list_code : parent_key

Chcete-li mít seznam v závislosti na jiném seznamu:
1, hodnota1 | parent_list_code : parent_key
2, hodnota2 | parent_list_code : parent_key ExtrafieldParamHelpcheckbox=Seznam hodnot musí být řádky s formátovým klíčem, hodnota (kde klíč nemůže být '0')

například:
1, value1
2, value2
3, value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=Seznam hodnot musí být řádky s formátovým klíče ExtrafieldParamHelpsellist=Seznam hodnot pochází z tabulky
Syntaxe: table_name: label_field: id_field :: filter
Příklad: c_typent: libelle: id :: filter

- idfilter je nutně primární int klíč
- filtr může být jednoduchý test = 1) pro zobrazení pouze aktivní hodnoty
Můžete také použít $ ID $ ve filtru, který je aktuálním id aktuálního objektu
Chcete-li provést SELECT ve filtru, použijte $ SEL $
, pokud chcete filtrovat na extrafields použít syntaxi extra.fieldcode = ... (kde kód pole je kód extrafield)

Aby byl seznam v závislosti na jiném seznamu doplňkových atributů:
c_typent: libelle: id: options_ parent_list_code | parent_column: filter

Aby bylo možné mít seznam v závislosti na jiném seznamu:
c_typent: libelle: id: parent_list_code | parent_column: filtr ExtrafieldParamHelpchkbxlst=Seznam hodnot pochází z tabulky
Syntaxe: table_name: label_field: id_field :: filter
Příklad: c_typent: libelle: id :: filter

filtr může být jednoduchý test (např. Aktivní = 1) pro zobrazení pouze aktivní hodnoty
You může také použít $ ID $ ve filtru, který je aktuální id aktuálního objektu
Chcete-li provést SELECT ve filtru, použijte $ SEL $
, pokud chcete filtrovat na extrafields použijte syntaxi extra.fieldcode = ... (kde kód pole je code of extrafield)

Aby byl seznam v závislosti na jiném seznamu doplňkových atributů:
c_typent: libelle: id: options_ parent_list_code | parent_column: filter

Aby byl seznam v závislosti na jiném seznamu:
c_typent: libelle: id: parent_list_code | nadřazený sloupec: filtr ExtrafieldParamHelplink=Parametry musí být ObjectName: Classpath
Syntaxe: Název_objektu: Classpath
Příklady:
Societe: societe / class / societe.class.php
Kontakt: contact / class / contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Knihovna používaná pro generování PDF LocalTaxDesc=Některé země mohou uplatnit dvě nebo tři daně na každé čáře faktur. Pokud tomu tak je, vyberte typ druhého a třetího daně a jeho sazbu. Možné typy jsou:
1: místní daň se vztahuje na produkty a služby bez DPH (platí se na základě daně bez daně)
2: místní daň se vztahuje na produkty a služby, včetně DPH (0%) 3x342fccfda19b 3: místní daň se vztahuje na produkty bez DPH (místní taxa se vypočítává z částky bez daně)
4: místní daň se vztahuje na produkty včetně DPH (místní taxa se vypočítává z částky + hlavní daň)
5: Místní daň platí pro služby bez DPH z částky bez daně)
6: Místní daň platí za služby včetně DPH (místní taxa se vypočítává z částky + daně) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Vytvořit / upravit služby Permission534=Odstranit služby Permission536=Viz / správa skryté služby Permission538=Export služeb -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Přečtěte si dary Permission702=Vytvořit / upravit dary Permission703=Odstranit dary @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL koncový bod pro IFTTT YouWillFindItOnYourIFTTTAccount=Najdete ho na svém účtu IFTTT EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/cs_CZ/bills.lang b/htdocs/langs/cs_CZ/bills.lang index 024125e7199..bea8b4b960a 100644 --- a/htdocs/langs/cs_CZ/bills.lang +++ b/htdocs/langs/cs_CZ/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma faktura InvoiceProFormaDesc=Proforma faktura je obraz skutečné faktury, ale nemá účetní hodnotu. InvoiceReplacement=Náhradní faktura InvoiceReplacementAsk=Náhradní faktura faktury -InvoiceReplacementDesc=  Nahrazená faktura se používá k zrušení a úplné výměně faktury bez již přijaté platby.

Poznámka: Je možné vyměnit pouze faktury bez platby. Pokud již vyměněná faktura není uzavřena, bude automaticky uzavřena na "opuštěnou". +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Dobropis InvoiceAvoirAsk=Opravit fakturu na dobropis InvoiceAvoirDesc=Dobropis je negativní faktura řešící skutečnost, že na původní faktuře je částka, které se liší od částky skutečně vyplacené. (zákazník zaplatil více omylem, nebo nezaplatil vše, protože například vrátil některé produkty). diff --git a/htdocs/langs/cs_CZ/companies.lang b/htdocs/langs/cs_CZ/companies.lang index fae494503ab..01ac74f4df7 100644 --- a/htdocs/langs/cs_CZ/companies.lang +++ b/htdocs/langs/cs_CZ/companies.lang @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Slevy pro absolutní prodejce (zadané všemi u SupplierAbsoluteDiscountMy=Slevy pro absolutní prodejce (zadané sami) DiscountNone=Nikdo Vendor=Prodejce +Supplier=Prodejce AddContact=Vytvořit kontakt AddContactAddress=Vytvořit kontakt/adresu EditContact=Upravit kontakt diff --git a/htdocs/langs/cs_CZ/other.lang b/htdocs/langs/cs_CZ/other.lang index ce650924a15..a6dae8e028c 100644 --- a/htdocs/langs/cs_CZ/other.lang +++ b/htdocs/langs/cs_CZ/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Počet zákaznických faktur NumberOfSupplierProposals=Počet návrhů prodejců NumberOfSupplierOrders=Počet objednávek NumberOfSupplierInvoices=Počet faktur dodavatelů +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Počet jednotek na návrh NumberOfUnitsCustomerOrders=Počet jednotek na objednávkách prodeje NumberOfUnitsCustomerInvoices=Počet jednotek na fakturách zákazníků NumberOfUnitsSupplierProposals=Počet jednotek v návrzích prodejců NumberOfUnitsSupplierOrders=Počet jednotek na objednávkách NumberOfUnitsSupplierInvoices=Počet jednotek na faktorech dodavatelů +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=Byla přiřazena%s nová intervence . EMailTextInterventionValidated=Zásah %s byl ověřen. EMailTextInvoiceValidated=Faktura %s byla ověřena. @@ -246,10 +248,10 @@ YourPasswordHasBeenReset=Vaše heslo bylo úspěšně obnoveno ApplicantIpAddress=IP adresa žadatele SMSSentTo=SMS odeslaná na %s MissingIds=Chybějící ID -ThirdPartyCreatedByEmailCollector=Third party created by email collector from email MSGID %s -ContactCreatedByEmailCollector=Contact/address created by email collector from email MSGID %s -ProjectCreatedByEmailCollector=Project created by email collector from email MSGID %s -TicketCreatedByEmailCollector=Ticket created by email collector from email MSGID %s +ThirdPartyCreatedByEmailCollector=Subjekt vytvořený sběratelem e-mailů z e-mailu MSGID %s +ContactCreatedByEmailCollector=Kontakt/adresa vytvořená sběratelem e-mailů z e-mailu MSGID %s +ProjectCreatedByEmailCollector=Projekt vytvořený sběratelem e-mailů z e-mailu MSGID %s +TicketCreatedByEmailCollector=Lístek vytvořený sběratelem e-mailů z e-mailu MSGID %s ##### Export ##### ExportsArea=Exportní plocha @@ -268,5 +270,5 @@ WEBSITE_IMAGEDesc=Relativní cesta obrazového média. Můžete si to nechat pr WEBSITE_KEYWORDS=Klíčová slova LinesToImport=Řádky, které chcete importovat -MemoryUsage=Memory usage -RequestDuration=Duration of request +MemoryUsage=Využití paměti +RequestDuration=Doba trvání žádosti diff --git a/htdocs/langs/cs_CZ/website.lang b/htdocs/langs/cs_CZ/website.lang index 8c1881021d4..603f66e497c 100644 --- a/htdocs/langs/cs_CZ/website.lang +++ b/htdocs/langs/cs_CZ/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=Dosud nebyla vytvořena žádná webová stránka. Nejpr GoTo=Jít do DynamicPHPCodeContainsAForbiddenInstruction=Přidáte dynamický PHP kód, který obsahuje instrukci PHP '%s ' která je implicitně zakázána jako dynamický obsah (viz skryté možnosti WEBSITE_PHP_ALLOW_xxx pro zvýšení seznamu povolených příkazů). NotAllowedToAddDynamicContent=Nemáte oprávnění přidávat nebo upravovat dynamický obsah PHP na webových stránkách. Požádejte o svolení nebo ponechte kód v tagech php beze změny. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/da_DK/accountancy.lang b/htdocs/langs/da_DK/accountancy.lang index e11155f691b..3910fb365b7 100644 --- a/htdocs/langs/da_DK/accountancy.lang +++ b/htdocs/langs/da_DK/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Regnskabskonto for afventning DONATION_ACCOUNTINGACCOUNT=Regnskabskonto til registrering af donationer diff --git a/htdocs/langs/da_DK/admin.lang b/htdocs/langs/da_DK/admin.lang index 37f3564018b..198a40edff8 100644 --- a/htdocs/langs/da_DK/admin.lang +++ b/htdocs/langs/da_DK/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Afkrydsningsfelter fra bordet ExtrafieldLink=Link til et objekt ComputedFormula=Beregnet felt ComputedFormulaDesc=Du kan indtaste en formel her ved hjælp af andre egenskaber af objekt eller nogen PHP-kodning for at få en dynamisk beregningsværdi. Du kan bruge alle PHP-kompatible formler, herunder "?" betingelsesoperatør og følgende globale objekt: $ db, $ conf, $ langs, $ mysoc, $ bruger, $ objekt .
ADVARSEL : Kun nogle egenskaber af $ objekt kan være tilgængelige. Hvis du har brug for egenskaber, der ikke er indlæst, skal du bare hente objektet i din formel som i andet eksempel.
Brug af et beregnet felt betyder, at du ikke kan indtaste nogen værdier fra interface. Hvis der også er en syntaksfejl, kan formlen ikke returnere noget.

Eksempel på formel:
$ objekt-> id < 10 ? round($object-> id / 2, 2): ($ objekt-> id + 2 * $ bruger-> id) * (int) substr ($ mysoc-> zip, 1, 2 )

Eksempel på genindlæsning af objekt
(($ reloadedobj = ny Societe ($ db)) && ($ reloadedobj-> hent ($ obj-> id? $ Obj-> id: ($ obj-> rowid? $ Obj- > rowid: $ object-> id))> 0))? $ reloadedobj-> array_options ['options_extrafieldkey'] * $ reloadedobj-> kapital / 5: '-1'

Øvrige eksempel på formel for at tvinge belastning af objekt og dets overordnede objekt:
(($ reloadedobj = ny opgave ($ db )) && ($ reloadedobj-> hent ($ objekt-> id)> 0) && ($ secondloadedobj = nyt projekt ($ db)) && ($ secondloadedobj-> hent ($ reloadedobj-> fk_project)> 0))? $ secondloadedobj-> ref: 'Forældreprojekt ikke fundet' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Blankt felt her betyder, at denne værdi vil blive gemt uden kryptering (feltet skal kun være skjult med stjerne på skærmen).
Vælg 'auto' for at bruge standardkrypteringsreglen til at gemme adgangskoden til databasen (så vil værdien gemmes som en en-vejs hash uden mulighed at hente den oprindelige værdi) ExtrafieldParamHelpselect=Liste over værdier skal være linjer med formatnøgle, værdi (hvor nøglen ikke kan være '0')

for eksempel:
1, værdi1
2, værdi2
kode3, værdi3
...

For at få liste afhængig af en anden komplementær attributliste:
1, værdi1 | options_ parent_list_code : parent_key
2, value2 | options_ parent_list_code : parent_key

For at få listen afhængig af en anden liste:
1, værdi1 | parent_list_code : parent_key
2, value2 | parent_list_code : parent_key ExtrafieldParamHelpcheckbox=Liste over værdier skal være linjer med formatnøgle, værdi (hvor nøglen ikke kan være '0')

for eksempel:
1, værdi1
2, værdi2
3, værdi3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=Liste over værdier skal være linjer med formatnøgle, ExtrafieldParamHelpsellist=Liste over værdier kommer fra en tabel
Syntaks: tabelnavn: label_field: id_field :: filter
Eksempel: c_typent: libelle: id :: filter

- idfilter er nødvendigvis en primær int nøgle
- filteret kan være en simpel test = 1) for at vise kun aktiv værdi
Du kan også bruge $ ID $ i filter heks er det nuværende id for nuværende objekt
For at gøre et SELECT i filter brug $ SEL $
hvis du vil filtrere på ekstrafelter brug syntax extra.fieldcode = ... (hvor feltkode er koden for ekstrafelt)

For at få listen afhængig af en anden komplementær attributliste:
c_typent: libelle: id: options_ parent_list_code | parent_column: filter

For at have listen afhænger af en anden liste:
c_typent: libelle: id: parent_list_code | parent_column: filter ExtrafieldParamHelpchkbxlst=Liste over værdier kommer fra en tabel
Syntaks: tabelnavn: label_field: id_field :: filter
Eksempel: c_typent: libelle: id :: filter

filter kan være en simpel test (f.eks. Aktiv = 1) for at vise kun aktiv værdi
Du kan også bruge $ ID $ i filter heks er det nuværende id for nuværende objekt
For at gøre et SELECT i filter bruger $ SEL $
hvis du vil filtrere på ekstrafelter brug syntax extra.fieldcode = ... (hvor feltkode er kode for ekstrafelt)

For at få listen afhængig af en anden komplementær attributliste:
c_typent: libelle: id: options_ parent_list_code | parent_column: filter

For at få listen afhængig af en anden liste:
c_typent: libelle: id: parent_list_code | parent_column: filter ExtrafieldParamHelplink=Parametre skal være ObjectName: Classpath
Syntaks: Objektnavn: Klassepath
Eksempler:
Societe: societe / class / societe.class.php
Kontakt: kontakt / class / contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Bibliotek, der bruges for PDF generation LocalTaxDesc=Nogle lande kan anmode om to eller tre skatter på hver faktura linje. Hvis dette er tilfældet, skal du vælge typen for den anden og tredje skat og dens sats. Mulig type er:
1: Lokal afgift gælder for varer og ydelser uden moms (localtax beregnes efter beløb uden skat)
2: Lokal afgift gælder for varer og tjenesteydelser inklusive moms (localtax beregnes på beløb + hovedafgift)
3: lokal skat gælder for varer uden moms (localtax beregnes på beløb uden skat)
4: lokal skat gælder for varer inklusive moms (lokaltax beregnes på beløb + hovedstol)
5: lokal skat gælder for tjenester uden moms på beløb uden skat)
6: Lokal afgift gælder for tjenester inklusive moms (lokal taxa er beregnet på beløb + skat) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Opret/rediger ydelser Permission534=Slet ydelser Permission536=Se/administrer skjulte ydelser Permission538=Eksport af tjenesteydelser -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Læs donationer Permission702=Opret/rediger donationer Permission703=Slet donationer @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/da_DK/bills.lang b/htdocs/langs/da_DK/bills.lang index fecdf5e9714..999c8ee1115 100644 --- a/htdocs/langs/da_DK/bills.lang +++ b/htdocs/langs/da_DK/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proformafaktura InvoiceProFormaDesc=Proformafakturaen ligner en ægte faktura, men har ingen regnskabsmæssig værdi. InvoiceReplacement=Erstatningsfaktura. InvoiceReplacementAsk=Erstatningsfaktura for faktura -InvoiceReplacementDesc=Erstatningsfaktura bruges til at annullere og erstatte en faktura uden modtaget betaling .

Bemærk! Kun fakturaer uden betaling på det kan erstattes. Hvis fakturaen du udskifter endnu ikke er lukket, lukkes den automatisk for at "forladt". +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Kreditnota InvoiceAvoirAsk=Kreditnota til korrektion af faktura InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/da_DK/companies.lang b/htdocs/langs/da_DK/companies.lang index 5e399cd0080..251336c2067 100644 --- a/htdocs/langs/da_DK/companies.lang +++ b/htdocs/langs/da_DK/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias ​​navn (kommerciel, varemærke, ...) AliasNameShort=Alias ​​Navn Companies=Selskaber CountryIsInEEC=Landet er inden for Det Europæiske Økonomiske Fællesskab -PriceFormatInCurrentLanguage=Nuværende sprogs prisformat +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Navn på tredjepart ThirdPartyEmail=Tredjeparts email ThirdParty=Tredje part @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolutte leverandørrabatter (indtastet af all SupplierAbsoluteDiscountMy=Absolutte leverandørrabatter (indtastet af dig selv) DiscountNone=Ingen Vendor=Sælger +Supplier=Sælger AddContact=Opret kontakt AddContactAddress=Opret kontakt/adresse EditContact=Rediger kontakt diff --git a/htdocs/langs/da_DK/other.lang b/htdocs/langs/da_DK/other.lang index e519bdc2fb6..caf89ef07f4 100644 --- a/htdocs/langs/da_DK/other.lang +++ b/htdocs/langs/da_DK/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Antal kundefakturaer NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Antal enheder på forslag NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Antal enheder på kundefakturaer NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=En ny intervention %s er blevet tildelt dig. EMailTextInterventionValidated=Intervention %s bekræftet EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/da_DK/website.lang b/htdocs/langs/da_DK/website.lang index 455f76a52d3..9371ca1fbcb 100644 --- a/htdocs/langs/da_DK/website.lang +++ b/htdocs/langs/da_DK/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/de_AT/admin.lang b/htdocs/langs/de_AT/admin.lang index abe6c755eaf..3b52ead1173 100644 --- a/htdocs/langs/de_AT/admin.lang +++ b/htdocs/langs/de_AT/admin.lang @@ -93,5 +93,6 @@ FreeLegalTextOnInterventions=Freier Rechtstext für Eingriffe WatermarkOnDraftInterventionCards=Wasserzeichen auf Intervention Karte Dokumente (alle, wenn leer) ClickToDialSetup=Click-to-Dial-Moduleinstellungen PathToGeoIPMaxmindCountryDataFile=Pfad zur Datei mit Maxmind IP to Country Übersetzung.
Beispiel: / usr / local / share / GeoIP / GeoIP.dat +ListOfFixedNotifications=List of Fixed Notifications MailToSendShipment=Sendungen MailToSendIntervention=Eingriffe diff --git a/htdocs/langs/de_AT/companies.lang b/htdocs/langs/de_AT/companies.lang index e88febb047d..d8443484e90 100644 --- a/htdocs/langs/de_AT/companies.lang +++ b/htdocs/langs/de_AT/companies.lang @@ -4,6 +4,7 @@ Companies=Partner UserTitle=Titel PhoneMobile=Handy Web=Webadresse +OverAllInvoices=Rechnungen OverAllSupplierProposals=Preisanfrage LocalTax1IsUsedES=RE wird LocalTax2IsUsedES=IRPF verwendet wird diff --git a/htdocs/langs/de_CH/accountancy.lang b/htdocs/langs/de_CH/accountancy.lang index 68921c9dd3c..7594842ccf6 100644 --- a/htdocs/langs/de_CH/accountancy.lang +++ b/htdocs/langs/de_CH/accountancy.lang @@ -17,8 +17,8 @@ AccountancySetupDoneFromAccountancyMenu=Die meisten Einstellungen der Buchhaltun ConfigAccountingExpert=Einstellungen des erweiterten Buchhaltungsmoduls Journalization=Journalisierung JournalFinancial=Finanzjournal -BackToChartofaccounts=Zeige Kontenplan -Chartofaccounts=Kontenplan +BackToChartofaccounts=Zeige Kontenrahmen +Chartofaccounts=Kontenrahmen CurrentDedicatedAccountingAccount=Aktuell zugewiesenes Konto AssignDedicatedAccountingAccount=Neues zugewiesenes Konto InvoiceLabel=Rechnungsbezeichung @@ -66,7 +66,7 @@ AccountancyAreaDescWriteRecords=Schritt %s: Lass alle Transaktionen ins Hauptbuc AccountancyAreaDescAnalyze=Schritt %s: Erzeuge oder ergänze Transaktionen für Berichte und Exporte. AccountancyAreaDescClosePeriod=Schritt %s: Schliesse eine Geschäftsperiode ab, damit Sie nicht mehr abgeändert werden kann. TheJournalCodeIsNotDefinedOnSomeBankAccount=Hoppla - nicht alle Bankkonten haben ein Buchhaltungskonto zugewiesen - bitte korrigiere das so: -Selectchartofaccounts=Wähle deinen Kontenplan. +Selectchartofaccounts=Wähle deinen Kontenrahmen. ChangeAndLoad=Lade und ersetze Addanaccount=Buchhaltungskonto hinzüfügen SubledgerAccountLabel=Bezeichnung Nebenbuchkonto @@ -89,6 +89,7 @@ ExpenseReportsVentilation=Verknüpfung für Spesenabrechnungen CreateMvts=Neue Transaktion UpdateMvts=Transaktion bearbeiten ValidTransaction=Transaktion freigeben +WriteBookKeeping=Transaktionen im Hauptbuch eintragen AccountBalance=Saldo ObjectsRef=Referenz des Quellobjektes CAHTF=Einkaufsaufwand von Steuern @@ -131,6 +132,7 @@ ACCOUNTING_RESULT_PROFIT=Ergebniskonto (Gewinn) ACCOUNTING_RESULT_LOSS=Ergebniskonto (Verlust) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Abschlussjournal ACCOUNTING_ACCOUNT_TRANSFER_CASH=Transferkonto Banktransaktionen +TransitionalAccount=Durchlaufkonto Bank ACCOUNTING_ACCOUNT_SUSPENSE=Sperrkonto DONATION_ACCOUNTINGACCOUNT=Buchhaltungskonto für Spenden ADHERENT_SUBSCRIPTION_ACCOUNTINGACCOUNT=Buchhaltungskonto für Abonnemente @@ -143,6 +145,7 @@ ACCOUNTING_SERVICE_SOLD_ACCOUNT=Standard - Buchhaltungskonto für verkaufte Leis LabelAccount=Kontobezeichnung LabelOperation=Vorgangsbezeichnung LetteringCode=Beschriftung +Lettering=Beschriftung JournalLabel=Journalbezeichnung TransactionNumShort=Transaktionsnummer AccountingCategory=Eigene Kontogruppen @@ -176,7 +179,8 @@ DescThirdPartyReport=Liste der Buchhaltungskonten von Geschäftspartnern und Lie ListAccounts=Liste der Buchhaltungskonten UnknownAccountForThirdparty=Den Partner kenne ich nicht - wir nehmen %s. UnknownAccountForThirdpartyBlocking=Den Partner kenne ich nicht. Zugriffsfehler. -ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Der Partner ist nicht definiert oder unbekannt. Zugriffsfehler. +ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Geschäftspartner nicht definiert oder unbekannt. Ich nehme deshalb %s. +ThirdpartyAccountNotDefinedOrThirdPartyUnknownBlocking=Der Partner ist nicht definiert oder unbekannt. Zugriffsfehler. UnknownAccountForThirdpartyAndWaitingAccountNotDefinedBlocking=Mir fehlt der Partner und das Wartestellungskonto. Zugriffsfehler. PaymentsNotLinkedToProduct=Die Zahlung ist mit keinem Produkt oder Service verknüpft. Pcgtype=Kontengruppe @@ -185,7 +189,7 @@ PcgtypeDesc=Kontogruppen und -untergruppen brauche ich für vordefinierte Filter TotalVente=Gesamtumsatz vor Steuern TotalMarge=Gesamtmarge Verkauf DescVentilCustomer=Du siehst hier die Liste der Kundenrechnungen und ob diese mit einem Buchhaltungskonto verknüpft sind, oder nicht. -DescVentilMore=Wenn du in den Produkten und Leistungen die Buchhaltungskonten hinterlegt hast, kann ich jene den Rechnungspositionen automatisch zuordnen. Dafür ist die Schaltfläche "%s" da.\nDort, wo das nicht klappt, kannst du die Rechnungspositionen via "%s" von Hand zuweisen. +DescVentilMore=Wenn du in den Produkten und Leistungen die Buchhaltungskonten deines Kontenplanes hinterlegt hast, kann ich die Rechnungspositionen automatisch jenen Konten zuordnen. Dafür ist die Schaltfläche "%s" da.\nDort, wo das nicht klappt, kannst du die Rechnungspositionen via "%s" von Hand zuweisen. DescVentilDoneCustomer=Du siehst die Kundenrechnungspositionen und den aktuellen Verknüpfungsstatus zu Buchhaltungskonten. DescVentilTodoCustomer=Verknüpfe Rechnungspositionen mit Buchhaltungskonten. ChangeAccount=Ersetze für die gewählten Positionen das Buchhaltungskonto. @@ -232,13 +236,21 @@ Modelcsv_quadratus=Quadratus QuadraCompta - Format Modelcsv_ebp=EBP - Format Modelcsv_cogilog=EBP - Format Modelcsv_agiris=Agiris - Format +Modelcsv_openconcerto=Export zu OpenConcerto (Test) Modelcsv_configurable=Konfigurierbares CSV - Format +Modelcsv_Sage50_Swiss=Export zu SAGE 50 - Schweiz +ChartofaccountsId=Kontenrahmen ID InitAccountancy=Init Buchhaltung InitAccountancyDesc=Auf dieser Seite weisest du Buchhaltungskonten Produkten und Leistungen zu, die keine Konten für Ein- und Verkäufe hinterlegt haben. DefaultBindingDesc=Auf dieser Seite kannst du ein Standard - Buchhaltungskonto an alle Arten Zahlungstransaktionen zuweisen, falls noch nicht geschehen. DefaultClosureDesc=Lege hier die Parameter zum Anfügen der Bilanz fest. +OptionModeProductSell=Modus Verkauf +OptionModeProductSellIntra=Modus Export - Verkäufe in den EWR - Raum +OptionModeProductSellExport=Modus Export - Verkäufe in andere Länder OptionModeProductBuy=Modus Einkauf OptionModeProductSellDesc=Finde alle Produkte mit einem Buchhaltungskonto für Verkäufe. +OptionModeProductSellIntraDesc=Zeige alle Produkte mit einem Buchhaltungskonto für den Export in den EWR +OptionModeProductSellExportDesc=Zeige alle Produkte mit einem Buchhaltungskonto für den Export in andere Länder OptionModeProductBuyDesc=Finde alle Produkte mit einem Buchhaltungskonto für Einkäufe. CleanFixHistory=Lösche alle Kontierungscodes, die im Kontenplan nicht vorkommen, aus allen Positionen CleanHistory=Setzte alle Verknüpfungen für das gewählte Jahr zurück @@ -247,6 +259,9 @@ WithoutValidAccount=Vordefinierte Gruppen WithValidAccount=Mit geprüftem zugewiesenen Buchhaltungskonto ValueNotIntoChartOfAccount=Dieses Buchhaltungskonto exisitiert im aktuellen Kontenplan nicht... AccountRemovedFromGroup=Ich hab das Buchhaltungskonto aus der Gruppe entfernt. +SaleLocal=Inlandverkauf +SaleExport=Exportverkauf +SaleEEC=Verkauf im EWR Range=Dieses Buchhaltungskonto kommt im aktuellen Kontenplan nicht vor. Calculated=Berechnet SomeMandatoryStepsOfSetupWereNotDone=Oha - einige zwingende Einstellungen sind noch nicht gemacht worden. Bitte erledige das noch, danke. @@ -260,5 +275,6 @@ Binded=Verknüpfte Positionen ToBind=Zu verknüpfende Positionen UseMenuToSetBindindManualy=Nicht verbundenen Positionen, bitte Benutze den Menupunkt "
%s" zum manuell zuweisen. ImportAccountingEntries=Buchungen +DateExport=Datum Export WarningReportNotReliable=Obacht, dieser Bericht basiert nicht auf den Hauptbucheinträgen. Falls dort also noch Änderungen vorgenommen worden sind, wird das nicht übereinstimmen. Bei sauberer Buchführung nimmst du eher die Buchhaltungsberichte. ExpenseReportJournal=Spesenabrechnungsjournal diff --git a/htdocs/langs/de_CH/admin.lang b/htdocs/langs/de_CH/admin.lang index 681ea2e1ad7..d38cb433d55 100644 --- a/htdocs/langs/de_CH/admin.lang +++ b/htdocs/langs/de_CH/admin.lang @@ -41,6 +41,8 @@ UseSearchToSelectContactTooltip=Wenn Sie eine grosse Anzahl von Kontakten (> 100 DelaiedFullListToSelectCompany=Nicht so eingängig, aber schneller geht's in der Combo List - Ansicht, wenn ich auf Tastendruck warten soll, bevor ich die Partnerliste lade. DelaiedFullListToSelectContact=Nicht so eingängig, aber schneller geht's in der Combo List - Ansicht, wenn ich auf Tastendruck warten soll, bevor ich die Kontaktliste lade. NumberOfKeyToSearch=Anzahl der Zeichen, die die Suche auslösen sollen: 1 %s +NumberOfBytes=Anzahl Bytes +SearchString=Suchtext AllowToSelectProjectFromOtherCompany=Erlaube bei den Elementen eines Partners, die Projekte von anderen Partnern zu verlinken UsePreviewTabs=Vorschautabs verwenden MySQLTimeZone=Aktuelle Zeitzone von MySql (Datenbank) @@ -74,7 +76,7 @@ Language_en_US_es_MX_etc=Sprache setzen (de_CH, en_GB,...) SystemToolsAreaDesc=Dieser Bereich ist voll mit Administratorfunktionen - Wähle im Menu aus. Purge=Säubern PurgeAreaDesc=Hier können Sie alle vom System erzeugten und gespeicherten Dateien löschen (temporäre Dateien oder alle Dateien im Verzeichnis %s). Diese Funktion ist richtet sich vorwiegend an Benutzer ohne Zugriff auf das Dateisystem des Webservers (z.B. Hostingpakete) -PurgeDeleteTemporaryFiles=Alle temporären Dateien löschen (kein Datenverlustrisiko) +PurgeDeleteTemporaryFiles=Lösche alle Temporären Dateien. Dabei gehen keine Arbeitsdaten verloren.\nHinweis: Das funktioniert nur, wenn das Verzeichnis 'Temp' seit 24h da ist. PurgeDeleteTemporaryFilesShort=Temporärdateien löschen PurgeDeleteAllFilesInDocumentsDir=Alle Datein im Verzeichnis %s löschen. Dies beinhaltet temporäre Dateien ebenso wie Datenbanksicherungen, Dokumente (Geschäftspartner, Rechnungen, ...) und alle Inhalte des ECM-Moduls. PurgeNDirectoriesDeleted=%s Dateien oder Verzeichnisse gelöscht. @@ -165,7 +167,7 @@ ModuleFamilyProducts=Produktmanagement (PM) ModuleFamilyHr=Personalverwaltung (PM) ModuleFamilyProjects=Projektverwaltung/Zusammenarbeit ModuleFamilyECM=Inhaltsverwaltung (ECM) -ModuleFamilyPortal=Homepages und weitere Frontanwendungen +ModuleFamilyPortal=Webseiten und andere Frontend Anwendungen DoNotUseInProduction=Nicht in Produktion nutzen ThisIsAlternativeProcessToFollow=Dies ist ein alternativer Setup-Prozess: FindPackageFromWebSite=Finde das passende Dolibarrpaket (zum Beispiel auf der Dolibarr - Website %s) @@ -175,6 +177,7 @@ UnpackPackageInModulesRoot=Zum Einbinden eines externen Moduls entpackst du dere SetupIsReadyForUse=Modulinstallation abgeschlossen. Aktiviere und konfiguriere nun das Modul im Menu "%s". InfDirExample=
Dann deklariere in conf.php
$dolibarr_main_url_root_alt='/custom'
$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'
\n"#" heisst, die Variablen sind auskommentiert und werden nicht berücksichtigt.\nEntferne einfach "#", um die Variablen scharf zu schalten. YouCanSubmitFile=Du kannst das Modul - Archiv auch hochladen: +CallUpdatePage=Zur Aktualisierung der Daten und der Datenbankstruktur gehst du zur Seite %s. UpdateServerOffline=Update-Server offline WithCounter=Zähler verwalten GenericMaskCodes=Sie können ein beliebiges Numerierungsschema wählen. Dieses Schema könnte z.B. so aussehen:
{000000} steht für eine 6-stellige Nummer, die sich bei jedem neuen %s automatisch erhöht. Wählen Sie die Anzahl der Nullen je nach gewünschter Nummernlänge. Der Zähler füllt sich automatisch bis zum linken Ende mit Nullen um das gewünschte Format abzubilden.
{000000+000} führt zu einem ähnlichen Ergebnis, allerdings mit einem Wertsprung in Höhe des Werts rechts des Pluszeichens, der beim ersten %s angewandt wird.
{000000@x} wie zuvor, jedoch stellt sich der Zähler bei Erreichen des Monats x (zwischen 1 und 12) automatisch auf 0 zurück. Ist diese Option gewählt und x hat den Wert 2 oder höher, ist die Folge {mm}{yy} or {mm}{yyyy} ebenfalls erfoderlich.
{dd} Tag (01 bis 31).
{mm} Monat (01 bis 12).
{yy}, {yyyy} or {y} Jahreszahl 1-, 2- oder 4-stellig.
@@ -191,13 +194,28 @@ UMask=Umask Parameter für neue Dateien auf Unix/Linux/BSD-Dateisystemen. UMaskExplanation=Über diesen Parameter können Sie die standardmässigen Dateiberechtigungen für vom System erzeugte/verwaltete Inhalte festlegen.
Erforderlich ist ein Oktalwert (0666 bedeutet z.B. Lesen und Schreiben für alle).
Auf Windows-Umgebungen haben diese Einstellungen keinen Effekt. SeeWikiForAllTeam=Schaue die Wiki-Seite mit der Liste der Mitwirkenden und ihrer Organisation an. AddCRIfTooLong=Es gibt keine automatische Textformatierung, zu langer Text wird in Dokumenten nicht angezeigt. Bitte fügen Sie bei Bedarf Zeilenumbrüche im Textfeld hinzu. +ConfirmPurge=Möchtest du diese Aktion wirklich durchführen?\nDabei gehen alle Datein (im ECM, Attachments etc) unwiederbringlich verloren. +ExamplesWithCurrentSetup=Beispiele mit der derzeitigen Systemkonfiguration ListOfDirectoriesForModelGenODT=Liste der Verzeichnisse mit Vorlagendateien mit OpenDocument-Format.

Fügen Sie hier den vollständigen Pfad der Verzeichnisse ein.
Trennen Sie jedes Verzeichnis mit einer Zeilenschaltung
Verzeichnisse des ECM-Moduls fügen Sie z.B. so ein DOL_DATA_ROOT/ecm/yourdirectoryname.

Dateien in diesen Verzeichnissen müssen mit .odt oder .ods enden. +NumberOfModelFilesFound=Anzahl der .odt / .ods Vorlagen in diesen Verzeichnissen. +DescWeather=Diese Piktogramme werden bei verspäteten Tasks gemäss folgenden Werten angezeigt. +ThisForceAlsoTheme=Dieser Menu Manager übersteuert die Benutzereinstellung. Er funktioniert nicht auf allen Smartphones. Wähle einen anderen, falls Probleme auftauchen. +ConnectionTimeout=Zeitüberschreitung in der Verbindung ResponseTimeout=Antwort Timeout +NoSmsEngine=Es ist kein SMS Sendedienst verfügbar.\nIn der Standardinstallation ist keiner installiert, denn das gibt es bei externen Anbietern.\nFinde deinen Anbieter via %s. PDFDesc=Globale Einstellungen für automatisch generierte PDFs +PDFAddressForging=Regeln für Adressfelder +HideAnyVATInformationOnPDF=Verstecke MWST - Informationen. PDFRulesForSalesTax=Regeln für die MWST +HideLocalTaxOnPDF=Verstecke den %s Satz +HideDescOnPDF=Verstecke Produktbeschreibungen +HideRefOnPDF=Verstecke Produktnummern +HideDetailsOnPDF=Verstecke Produktzeilen PlaceCustomerAddressToIsoLocation=ISO Position für die Kundenadresse verwenden +ButtonHideUnauthorized=Buttons für Nicht-Admins ausblenden anstatt ausgrauen? OldVATRates=Alter MwSt. Satz NewVATRates=Neuer MwSt. Satz +MassConvert=Massenkonvertierung starten HtmlText=HTML Float=Gleitkommazahl Boolean=Boolean (Ein Kontrollkästchen) @@ -206,18 +224,30 @@ ExtrafieldMail =E-Mail ExtrafieldSelect =Wähle Liste ExtrafieldSelectList =Wähle von Tabelle ExtrafieldPassword=Passwort +ExtrafieldRadio=Einfachauswahl (Radiobuttons) ExtrafieldCheckBox=Kontrollkästchen ExtrafieldCheckBoxFromList=Kontrollkästchen aus Tabelle +ComputedFormulaDesc=Du kannst hier Formeln mit weiteren Objekteigenschaften oder in PHP eingeben, um dynamisch berechnete Werte zu generieren. Alle PHP konformen Formeln sind erlaubt inkl dem Operator "?:" und folgende globale Objekte:$db, $conf, $langs, $mysoc, $user, $object.
Obacht: Vielleicht sind nur einige Eigenschaften von $object verfügbar. Wenn dir eine Objekteigenschaft fehlt, packe das gesamte Objekt einfach in deine Formel, wie im Beispiel zwei.
"Computed field" heisst, du kannst nicht selber Werte eingeben. Wenn Syntakfehler vorliegen, liefert die Formel ggf. gar nichts retour.

Ein Formelbeispiel:
$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Beispiel zum Neuladen eines Objektes
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'

Eine Weitere Variante zum erzwungenen Neuladen des Objekts und seiner Eltern:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Übergeordnetes Projekt nicht gefunden...' +ExtrafieldParamHelpPassword=Wenn leer, wird das Passwort unverschlüsselt geschrieben.
Gib 'auto' an für die Standardverschlüsselung - es wird nur der Hash ausgelesen und man kann das Passwort unmöglich herausfinden. +ExtrafieldParamHelpselect=Parameterlisten müssen das Format Schlüssel,Wert haben

zum Beispiel:
1,Wert1
2,Wert2
3,Wert3
...

Um die Liste in Abhängigkeit zu einer anderen zu haben:
1,Wert1|parent_list_code:parent_key
2,Wert2|parent_list_code:parent_key +ExtrafieldParamHelpcheckbox=Die Liste muss im Format: Schlüssel, Wert sein (wobei der Schlüssel nicht '0' sein kann)

zum Beispiel:
1, Wert1
2, Wert2
3, Wert3
... +ExtrafieldParamHelpradio=Die Liste muss im Format: Schlüssel, Wert sein (wobei der Schlüssel nicht '0' sein kann)

zum Beispiel:
1, Wert1
2, Wert2
3, Wert3
... LibraryToBuildPDF=Verwendete Bibliothek zur PDF-Erzeugung SetAsDefault=Als Standard definieren +BarcodeInitForthird-parties=Barcode Init. für alle Partner BarcodeInitForProductsOrServices=Alle Strichcodes für Produkte oder Services initialisieren oder zurücksetzen EraseAllCurrentBarCode=Alle aktuellen Barcode-Werte löschen ConfirmEraseAllCurrentBarCode=Wirklich alle aktuellen Barcode-Werte löschen? AllBarcodeReset=Alle Barcode-Werte wurden entfernt NoBarcodeNumberingTemplateDefined=Mir fehlt ein aktives Barcode - Nummernschema. Das wird im Modul "Barcodes" aktiviert. +ShowDetailsInPDFPageFoot=Mehr Detailinfos in der Fusszeile anzeigen, wie z.B. Firmenadresse, oder Vertreternamen (Zusätzlich zur Firmennummer, Firmenvermögen und MWST - Nummer). +NoDetails=Keine weiteren Details in der Fusszeile DisplayCompanyManagers=Anzeige der Namen der Geschäftsführung EnableAndSetupModuleCron=Wenn du diese Rechnung in regelmässigem Abstand automatisch erzeugen lassen willst, musst du das Modul '%s' aktivieren und konfigurieren. Natürlich kannst du weiterhin hier die Rechnung manuell auslösen. Du wirst gewarnt, falls du die Rechnung manuell auslösen willst, aber bereits eine automatisch erstellte da ist. +ModuleCompanyCodeCustomerAquarium=%s gefolgt von der Kundennummer für den Kontierungscode +ModuleCompanyCodeSupplierAquarium=%sgefolgt von der Lieferantennummer für den Kontierungscode ModuleCompanyCodePanicum=Leeren Kontierungscode zurückgeben. +ModuleCompanyCodeDigitaria=Kontierungscode Abhängig von der Kundennummer. Zusammengesetzt aus dem Buchstaben "C", gefolgt von den ersten fünf Buchstaben der Kundennummer. Use3StepsApproval=Standardmässig, Einkaufsaufträge müssen durch zwei unterschiedlichen Benutzer erstellt und freigegeben werden (ein Schritt/Benutzer zum Erstellen und ein Schritt/Benutzer für die Freigabe). Beachten Sie, wenn ein Benutzer beide Rechte hat - zum Erstellen und Freigeben, dann reicht ein Benutzer für diesen Vorgang. Optional können Sie einen zusätzlichen Schritt/User für die Freigabe einrichten, wenn der Betrag einen bestimmten dedizierten Wert übersteigt (wenn der Betrag höher wird, werden 3 Stufen notwendig: 1=Validierung, 2=erste Freigabe und 3=Gegenfreigabe.
Lassen Sie das Feld leer, wenn eine Freigabe (2 Schritte) ausreicht; tragen Sie einen sehr niedrigen Wert (0.1) ein, wenn eine zweite Freigabe notwendig ist. UseDoubleApproval=3-fach Verarbeitungsschritte verwenden, wenn der Betrag (ohne Steuer) höher ist als ... WarningPHPMail=Obacht: Wenn du eine externe Mailadresse verwendest (also nicht die deines aktuellen Hostings hier, gibst du hier den Mailserver, der zu deiner gewünschten E-Mail Adresse passt, ein (z.B. den SMTP von GMX, wenn du eine GMX - Adresse hinterlegst.)
Trage hier also Mailserver / Benutzer / Passwort deines externen Anbieters ein.
Sonst kann es vorkommen, dass Mails hier nicht herausgeschickt werden, weil der lokale Maildienst einen Absender mit falscher Domäne erhält, und das blockiert. @@ -225,51 +255,91 @@ WarningPHPMail2=Falls dein Anbieter Mailclients auf einen IP-Adressbereich einsc ClickToShowDescription=Klicken um die Beschreibung zu sehen DependsOn=Dieses Modul benötigt die folgenden Module RequiredBy=Diese Modul wird durch folgende Module verwendet +EnableDefaultValues=Eigene Standartwerte erlauben. +EnableOverwriteTranslation=Eigene Übersetzungen erlauben WarningSettingSortOrder=Warnung: Änderungen an der Standardsortierreihenfolge können zu Fehlern führen, falls das betreffende Feld nicht vorhanden ist. Falls dies passiert, entfernen sie das betreffende Feld oder stellen die den Defaultwert wieder her. ProductDocumentTemplates=Dokumentvorlagen zur Erstellung von Produktdokumenten WatermarkOnDraftExpenseReports=Wasserzeichen auf Entwurf von Ausgabenbelegen AttachMainDocByDefault=Setzen Sie diesen Wert auf 1, wenn Sie das Hauptdokument standardmässig per E-Mail anhängen möchten (falls zutreffend). +davDescription=WebDAV Server einrichten DAVSetup=Einstellungen de Moduls "DAV" +DAV_ALLOW_PRIVATE_DIR=WebDAV - Ordner "private" aktivieren (Login nötig). +DAV_ALLOW_PRIVATE_DIRTooltip=Das Standart - Privatverzeichnis in WebDAV kann jeder mit seinen Logindaten benutzen. +DAV_ALLOW_PUBLIC_DIR=WebDAV - Ordner "public" aktivieren (Kein Login nötig). +DAV_ALLOW_PUBLIC_DIRTooltip=Das Öffentliche Verzeichnis in WebDAV kann jeder ohne irgendein Login benutzen. +DAV_ALLOW_ECM_DIR=DMS/ECM - Privatverzeichnis aktivieren (Login erforderlich). Das ist das Stammverzeichnis des DMS/ECM Modules. +DAV_ALLOW_ECM_DIRTooltip=Hier kommen alle selbst hochgeladenen DMS/ECM Dateien hin. Dazu braucht es einen ein Benutzerlogin mit den erforderlichen Rechten. +Module1Desc=Geschäftspartner- und Kontakteverwaltung (Kunden, Leads, ...) +Module10Name=Buchhaltung einfach Module10Desc=Einfache Buchhaltungsberichte (Journale, Umsätze) auf Basis von Datenbankinhalten. Es wird keine Hauptbuch-Tabelle verwendet. Module20Desc=Angeboteverwaltung Module22Desc=E-Mail-Kampagnenverwaltung +Module25Name=Kundenaufträge +Module25Desc=Kunden - Auftragsverwaltung Module40Name=Lieferanten +Module40Desc=Lieferantenverwaltung und Einkauf (Bestellungen und Rechnungen) Module49Desc=Bearbeiterverwaltung +Module50Desc=Produkteverwaltung Module52Name=Produktbestände +Module52Desc=Lagerverwaltung (für Produkte) +Module53Desc=Dienstleistungen Module54Name=Verträge/Abonnements +Module57Name=Debit - Zahlungen Module70Name=Arbeitseinsätze Module80Name=Auslieferungen +Module80Desc=Versand und Lieferverfolgung +Module85Name=Bankkonten & Bargeld Module100Desc=Hinzufügen eines Links zu einer externen Website als Icon im Hauptmenü. Die Webseite wird in einem Dolibarr-Frame unter dem Haupt-Menü angezeigt. Module105Desc=Mailman oder SPIP Schnittstelle für die Mitgliedsmodul +Module200Desc=LDAP Synchronisierung Module240Desc=Werkzeug zum Datenexport (mit Assistent) Module250Desc=Tool zum Importieren von Daten in Dolibarr (mit Unterstützung) Module310Desc=Management von Mitglieder einer Stiftung/Vereins +Module320Desc=RSS Feed auf Dolibarr - Seiten zeigen +Module330Name=Lesezeichen und Verknüpfungen Module330Desc=Erstellen Sie Verknüpfungen zu den internen oder externen Seiten, auf die Sie häufig zugreifen (Favoriten). -Module400Name=Projekte oder Interessenten +Module400Name=Projekte oder Chancen Module400Desc=Management von Projekten, Interessenten/Chancen und/oder Aufgaben. Sie können auch jedes beliebige Element (Rechnung, Auftrag, Offerte, Intervention,...) einem Projekt zuordnen und erhalten eine Querschnittsansicht aus der Projektsicht. +Module500Name=Steuern und Sonderausgaben +Module500Desc=Andere Aufwände (MWST, Sozialabgaben, Dividenden,...) Module510Desc=Erfassen und Verfolgen von Vergütungen der Mitarbeiter Module520Name=Kredite Module600Desc=Ereignisbasierte E-Mail - Benachrichtigungen
  • Für Benutzer, gemäss Einstellungen im Benutzerprofil
  • Für Geschäftspartner, gemäss Einstellungen in Partnerkontakten
  • Für selbstgewählte E-Mail Adressen
Module600Long=Obacht: Hier geht es um automatisierte Benachrichtigungen für Geschäftsvorfälle. Kalendererinnerungen legst du im Modul "Kalender" fest. Module610Desc=Erstellung von Produktvarianten (Farbe, Größe etc.) Module770Desc=Verwaltung von Reisekostenabrechnungen (Verkehrsmittel, Verpflegung,....) +Module1120Name=Lieferantenofferten +Module1120Desc=Lieferanten - Offerten und Preise einholen. Module1200Desc=Mantis-Integation Module1520Desc=E-Mail Kampagnendokument erstellen Module1780Name=Kategorien/#tags Module2000Desc=Ermöglicht die Bearbeitung von Textfeldern mit dem CKEditor (html). +Module2200Desc=Mathematische Ausdrücke für Preise aktivieren +Module2300Desc=Geplante Aufgaben (CronJobs, ChronoTable) verwalten. Module2400Name=Ereignisse/Termine Module2400Desc=Ereignisse verfolgen. Lassen Sie Dolibarr automatische Ereignisse zur Verfolgung protokollieren oder nehmen Sie manuelle Ereignisse oder Besprechungen auf. Dies ist das Hauptmodul für ein gutes Management von Kunden- oder Lieferanten-Beziehungen. +Module2500Desc=Document - / Electronic Content Management System. Deine Dokumente werden automatisch organisiert. Du kannst deine Dateien teilen. Module2660Desc=Aktivieren Sie den Dolibarr Webservice-Client (Kann verwendet werden, um Daten/Anfragen an externe Server zu übertragen. Nur Lieferantenbestellungen werden derzeit unterstützt.) Module2700Desc=Benutze den Gravatar - Dienst, um Fotos von deinen Benutzern und Mitgliedern darzustellen. (www.gravatar.com) +Module3200Name=Unveränderbare Archive +Module20000Name=Ferienverwaltung Module20000Desc=Mitarbeiterurlaubsanträge erfassen und verfolgen +Module40000Name=Multiwährungsfähigkeit Module40000Desc=Verwendung alternativer Währungen in Preisen und Dokumenten +Module50100Name=Simple POS Module50100Desc=Kassenmodul (Simple POS) +Module50150Name=Take POS Module50150Desc=Kassenmodul (TouchPOS) +Module50200Desc=PayPal Zahlungsmaske aktivieren. So können deine Kunden Dolibarr - Rechnungen via PayPal oder Kreditkarte bezahlen. +Module50300Desc=Stripe Zahlungsmaske aktivieren. So können deine Kunden Dolibarr - Rechnungen via Wallets oder Kreditkarte (plus weitere Stripe Zahlungsmöglichkeiten) bezahlen. +Module50400Name=Doppelte Buchhaltung Module50400Desc=Buchhaltungsverwaltung (doppelte Buchhaltung, unterstützt Haupt- und Nebenbücher). Export des Hauptbuchs in verschiedene andere Buchhaltungssoftware-Formate. +Module54000Desc=Direktdruck (ohne die Dokumente zu öffnen) mittels CUPS IPP.\nDer Server muss dazu CUPS am Laufen haben und Zugriff auf einen Drucker haben. Module55000Name=Befragung, Umfrage oder Abstimmung Module55000Desc=Modul zur Erstellung von Online-Umfragen, Umfragen oder Abstimmungen (wie Doodle, Studs, Rdvz,....) Module62000Name=Lieferbedingungen Module62000Desc=Hinzufügen von Funktionen zur Verwaltung von Lieferbedingungen (Incoterms) +Module63000Desc=Hier kannst du deine Ressourcen (Drucker, Räume, Fahrzeuge) Kalenderereignissen zuweisen. Permission26=Angebote schliessen Permission61=Leistungen ansehen Permission62=Leistungen erstellen/bearbeiten @@ -282,18 +352,50 @@ Permission125=Mit Benutzer verbundene Geschäftspartner löschen Permission126=Geschäftspartner exportieren Permission144=Löschen Sie alle Projekte und Aufgaben (einschliesslich privater Projekte in denen ich kein Kontakt bin) Permission172=Reise- und Spesenabrechnung erstellen/ändern +Permission181=Lieferantenbestellungen einsehen +Permission184=Lieferantenbestellungen bestätigen +Permission185=Lieferantenbestellungen auslösen oder verwerfen +Permission187=Lieferantenbestellungen schliessen +Permission188=Lieferantenbestellungen zurückziehen Permission193=Leitungen abbrechen Permission203=Bestellungsverbindungen Bestellungen +Permission215=Lieferanten einrichten +Permission300=Barcodes auslesen +Permission301=Barcodes erzeugen und ändern. Permission311=Leistungen einsehen Permission331=Lesezeichen einsehen Permission332=Lesezeichen erstellen/bearbeiten Permission401=Rabatte einsehen +Permission430=PHP Debug Bar verwenden +Permission511=Lohnzahlungen einsehen +Permission512=Lohnzahlungen erstellen und bearbeiten +Permission514=Lohnzahlungen löschen Permission520=Darlehen einsehen Permission525=Darlehens-rechner Permission527=Exportiere Darlehen Permission531=Leistungen einsehen +Permission650=Rechnungen für Rohmaterialien einsehen. +Permission651=Rechnungen für Rohmaterialien erzeugen und bearbeiten +Permission652=Rechnungen für Rohmaterialien löschen Permission701=Spenden einsehen +Permission1121=Partnerofferten einsehen +Permission1122=Partnerofferten erzeugen und bearbeiten +Permission1123=Partnerofferten freigeben +Permission1124=Partnerofferten auslösen +Permission1125=Partnerofferten löschen +Permission1126=Lieferanten - Preisanfragen schliessen +Permission1182=Lieferantenbestellungen einsehen +Permission1185=Lieferantenbestellungen bestätigen +Permission1186=Lieferantenbestellungen auslösen +Permission1187=Empfangsbestätigung Lieferantenbestellung quittieren +Permission1188=Lieferantenbestellungen löschen +Permission1190=Lieferantenbestellungen bestätigen (zweite Bestätigung). +Permission1231=Lieferantenrechnungen einsehen +Permission1232=Lieferantenrechnungen erzeugen und bearbeiten Permission1235=Lieferantenrechnungen per E-Mail versenden +Permission1236=Kundenrechnungen, -attribute und -zahlungen exportieren +Permission1237=Lieferantenbestellungen mit Details exportieren +Permission1421=Kundenaufträge mit Attributen exportieren Permission2414=Aktionen und Aufgaben anderer exportieren Permission59002=Gewinspanne definieren DictionaryCompanyJuridicalType=Rechtsformen von Unternehmen @@ -303,6 +405,8 @@ DictionaryPaperFormat=Papierformate DictionaryEMailTemplates=E-Mail Textvorlagen SetupSaved=Setup gespeichert BackToDictionaryList=Zurück zu der Stammdatenliste +VATIsUsedDesc=Standardmässig folgt der Umsatzsteuersatz beim Erstellen von Interessenten, Rechnungen, Aufträgen usw. der aktiven Standardregel:
Wenn der Verkäufer nicht der Umsatzsteuer unterliegt, ist die Umsatzsteuer standardmäßig 0. Regelende.
Ist das (Land des Verkäufers = Land des Käufers), entspricht die Umsatzsteuer standardmässig der Umsatzsteuer des Produkts im Land des Verkäufers. Regelende.
Wenn der Verkäufer und der Käufer beide in der Europäischen Gemeinschaft ansässig sind und es sich bei den Waren um transportbezogene Produkte handelt (Spedition, Versand, Fluggesellschaft), beträgt die Standard-Mehrwertsteuer 0. Diese Regel ist abhängig vom Land des Verkäufers - wenden Sie sich an Ihren Buchhalter. Die Mehrwertsteuer ist vom Käufer an die Zollstelle in seinem Land und nicht an den Verkäufer zu entrichten. Regelende.
Wenn der Verkäufer und der Käufer beide in der Europäischen Gemeinschaft ansässig sind und der Käufer kein Unternehmen ist (mit einer registrierten innergemeinschaftlichen Umsatzsteuer-Identifikationsnummer), gilt standardmässig der Umsatzsteuersatz des Landes des Verkäufers. Regelende.
Wenn der Verkäufer und der Käufer beide in der Europäischen Gemeinschaft ansässig sind und der Käufer ein Unternehmen ist (mit einer registrierten innergemeinschaftlichen Umsatzsteuer-Identifikationsnummer), beträgt die Umsatzsteuer standardmässig 0. Regelende.
In allen anderen Fällen lautet der vorgeschlagene Standardwert Umsatzsteuer = 0. Regelende. +VATIsNotUsedDesc=Standardmässig beträgt die vorgeschlagene Umsatzsteuer 0, was für Fälle wie Vereine, Einzelpersonen oder kleine Unternehmen verwendet werden kann. LocalTax1IsNotUsedDescES=Standardmässig werden die vorgeschlagenen RE 0 ist. Ende der Regel. LocalTax2IsNotUsedDescES=Standardmässig werden die vorgeschlagenen IRPF 0 ist. Ende der Regel. DriverType=Treiber Typ @@ -318,6 +422,7 @@ InfoWebServer=Infos Webserver InfoDatabase=Infos Datenbank InfoPHP=Infos PHP BrowserName=Browser Name +AccountantDesc=Wenn Sie einen externen Buchhalter haben, können Sie hier seine Informationen bearbeiten. TriggerDisabledByName=Trigger in dieser Datei sind durch das -NORUN-Suffix in ihrem Namen deaktviert. DictionaryDesc=Definieren Sie hier alle Defaultwerte. Sie können die vordefinierten Werte mit ihren eigenen ergänzen. MiscellaneousDesc=Alle anderen sicherheitsrelevanten Parameter werden hier definiert. @@ -402,6 +507,7 @@ ExpenseReportsIkSetup=Modul Spesenabrechnungen (Milles Index) einrichten ExpenseReportsRulesSetup=Modul Spesenabrechnungen (Regeln) einrichten ExpenseReportNumberingModules=Modul Spesenabrechnung (Numerierung) YouMayFindNotificationsFeaturesIntoModuleNotification=Du kannst automatische Benachrichtigungen im Modul "Benachrichtigungen" festlegen und verwalten. +ListOfFixedNotifications=List of Fixed Notifications ConfFileMustContainCustom=Zur Installation eines externen Modules speichern Sie die Modul-Dateien in Verzeichnis %s. Damit Dolibarr dieses Verzeichniss verwendet, musst du in der Setupdatei conf.php die Optionen
$dolibarr_main_url_root_alt auf
$dolibarr_main_url_root_alt="/custom" oder
'%s/custom'; hinzufügen oder anpassen. LinkColor=Linkfarbe MinimumNoticePeriod=Kündigungsfrist (Ihre Kündigung muss vor dieser Zeit erfolgen) @@ -446,5 +552,8 @@ NoNewEmailToProcess=Ich habe keinen neuen E-Mails (die zu den Filtern passen) ab RecordEvent=E-Mail Ereignisse NbOfEmailsInInbox=Anzahl E-Mails im Quellverzeichnis ResourceSetup=Modul Ressourcen einrichten +UseSearchToSelectResource=Zeige eine Suchmaske für Ressourcen, statt eine Drop-down - Liste +DisabledResourceLinkUser=Verknüpfungsmöglichkeit zwischen Ressource und Benutzer unterbinden. +DisabledResourceLinkContact=Verknüpfungsmöglichkeit zwischen Ressource und Kontakt unterbinden. ConfirmUnactivation=Bestätige das Zurücksetzen des Moduls. ExportSetup=Modul Daten-Export einrichten diff --git a/htdocs/langs/de_CH/agenda.lang b/htdocs/langs/de_CH/agenda.lang index ceec4e4ec1a..c53b0758424 100644 --- a/htdocs/langs/de_CH/agenda.lang +++ b/htdocs/langs/de_CH/agenda.lang @@ -11,6 +11,7 @@ AgendaAutoActionDesc=Gib hier an, welche Ereignisse automatisch in den Kalender AgendaSetupOtherDesc=Hier gibst Du die Exportoptionen zu externen Kalendern, wie Google Calendar oder Thunderbird an. EventRemindersByEmailNotEnabled=Benachrichtigungen sind in den Moduleinstellungen deaktiviert (%s). NewCompanyToDolibarr=Partner %s erzeugt +COMPANY_DELETEInDolibarr=Partner %s gelöscht. MemberModifiedInDolibarr=Mitglied %s bearbeitet MemberResiliatedInDolibarr=Mitlglied %s geschlossen. MemberSubscriptionAddedInDolibarr=Abonnement %s für Mitlglied %s hinzugefügt @@ -37,6 +38,7 @@ EXPENSE_REPORT_REFUSEDInDolibarr=Spesenabrechnung %s zurückgewiesen PROJECT_MODIFYInDolibarr=Projekt %s bearbeitet TICKET_CREATEInDolibarr=Ticket %s erzeugt TICKET_MODIFYInDolibarr=Ticket %s bearbeitet +TICKET_CLOSEInDolibarr=Ticket %s geschlossen. TICKET_DELETEInDolibarr=Ticket %s gelöscht AgendaModelModule=Vorlagen zum Ereignis AgendaUrlOptionsNotAdmin=logina=!%s ,zum Aktionen, die nicht vom Benutzer %s sind, anzuzeigen. diff --git a/htdocs/langs/de_CH/boxes.lang b/htdocs/langs/de_CH/boxes.lang index 477ecc4581a..154ca19a7eb 100644 --- a/htdocs/langs/de_CH/boxes.lang +++ b/htdocs/langs/de_CH/boxes.lang @@ -9,6 +9,7 @@ BoxLastActions=Neueste Aktionen BoxLastMembers=Neueste Mitglieder BoxFicheInter=Neueste Arbeitseinsätze BoxTitleLastRssInfos=%s neueste News von %s +BoxTitleLastModifiedProspects=Interessenten: zuletzt %s geändert BoxTitleLastFicheInter=%s zuletzt bearbietet Eingriffe BoxLastExpiredServices=%s älteste Kontakte mit aktiven abgelaufenen Leistungen BoxTitleLastActionsToDo=%s neueste Aktionen zu erledigen @@ -18,6 +19,5 @@ BoxGoodCustomers=Guter Kunde LastRefreshDate=Datum der letzten Aktualisierung NoRecordedCustomers=Keine erfassten Kunden NoRecordedContacts=Keine erfassten Kontakte -NoRecordedProspects=Keine erfassten Leads NoRecordedInterventions=Keine verzeichneten Einsätze LastXMonthRolling=%s letzte Monate gleitend diff --git a/htdocs/langs/de_CH/categories.lang b/htdocs/langs/de_CH/categories.lang index 2146cad9197..691489c9b61 100644 --- a/htdocs/langs/de_CH/categories.lang +++ b/htdocs/langs/de_CH/categories.lang @@ -8,11 +8,13 @@ AddIn=Einfügen in Classify=Einstufen CategoriesArea=Schlagwörter / Kategorien ProductsCategoriesArea=Schlagwörter / Kategorien für Produkte und Dienstleistungen +SuppliersCategoriesArea=Bereich für Lieferanten-Tags / Kategorien CustomersCategoriesArea=Schlagwörter / Kategorien für Kunden MembersCategoriesArea=Schlagwörter / Kategorien für Mitglieder ContactsCategoriesArea=Schlagwörter / Kategorien für Kontakte AccountsCategoriesArea=Schlagwörter / Kategorien für Konten ProjectsCategoriesArea=Schlagwörter / Kategorien für Projekte +UsersCategoriesArea=Benutzerschlagworte und -kategorien SubCats=Unterkategorien CatList=Liste der Schlagwörter / Kategorien NewCategory=Neues Schlagwort / Neue Kategorie @@ -25,6 +27,7 @@ ImpossibleAddCat=Das Schlagwort / die Kategorie %s kann nicht hinzugefügt werde ObjectAlreadyLinkedToCategory=Das Element ist bereits mit dieser Kategorie verknüpft. ProductIsInCategories=Produkt/Leistung ist mit folgenden Schlagwörtern / Kategorien verknüpft CompanyIsInCustomersCategories=Dieser Partner ist mit folgenden Kunden- Schlagwörtern / Kategorien verknüpft. +CompanyIsInSuppliersCategories=Dieser Partner ist mit folgenden Lieferanten- Schlagwörtern / Kategorien verknüpft. MemberIsInCategories=Dieses Mitglied ist mit folgenden Mitglieder- Schlagwörtern / Kategorien verknüpft ContactIsInCategories=Dieser Kontakt ist mit folgenden Kontakte- Schlagwörtern / Kategorien verknüpft. ProductHasNoCategory=Dieses Produkt oder diese Leistung ist nicht verschlagwortet oder kategoriesiert. @@ -40,19 +43,25 @@ ContentsNotVisibleByAllShort=Private Inhalte DeleteCategory=Lösche Schlagwort / Kategorie ConfirmDeleteCategory=Bist du sicher, dass du das Schlagwort resp. die Kategorie löschen willst? NoCategoriesDefined=Kein Schlagwort oder keine Kategorie definiert +SuppliersCategoryShort=Lieferanten-Tag / Kategorie CustomersCategoryShort=Kundenschlagworte / -kategorien ProductsCategoryShort=Produktschlagworte / -kategorien MembersCategoryShort=Mitgliederschlagworte / -kategorien +SuppliersCategoriesShort=Lieferanten-Tags / Kategorien CustomersCategoriesShort=Kundenschlagworte / -kategorien ProspectsCategoriesShort=Leadschlagworte / -kategorien +CustomersProspectsCategoriesShort=Kund./Interess. Tags / Kategorien ProductsCategoriesShort=Produktschlagworte / -kategorien MembersCategoriesShort=Mitgliederschlagworte / -kategorien ContactCategoriesShort=Kontaktkschlagworte / -kategorien AccountsCategoriesShort=Kontenschlagworte / -kategorien ProjectsCategoriesShort=Projektschlagworte / -kateorien +UsersCategoriesShort=Benutzerschlagworte und -kategorien +ThisCategoryHasNoSupplier=Mit dieser Kategorie ist kein Lieferant verknüpft. ThisCategoryHasNoAccount=Dieser Kategorie sind keine Konten zugewiesen. ThisCategoryHasNoProject=Mit dieser Kategorie ist kein Projekt verknüpft. CategId=Schlagwort / Kategorie ID +CatSupList=Liste der Lieferantenschlagworte / -kategorien CatCusList=Liste der Kunden-/ Interessentenschlagworte / -kategorien CatProdList=Liste der Produktschlagworte / -kategorien CatMemberList=Liste der Mitgliederschlagworte / -kategorien @@ -64,6 +73,7 @@ CatProJectLinks=Verknüpfungen zwischen Projekten und Schlagwörtern / Kategorie ExtraFieldsCategories=Ergänzende Eigenschaften CategoriesSetup=Suchwörter/Kategorien Einrichten CategorieRecursiv=Automatisch mit übergeordnetem Schlagwort / Kategorie verbinden +CategorieRecursivHelp=Wenn aktiviert, wird das Produkt auch zur übergeordneten Kategorie zugewiesen, wenn es einer Unterkategorie zugewiesen wird. AddProductServiceIntoCategory=Folgendes Produkt / folgende Leistung hinzufügen ShowCategory=Zeige Schlagwort / Kategorie ChooseCategory=Wähle die Kategorie. diff --git a/htdocs/langs/de_CH/commercial.lang b/htdocs/langs/de_CH/commercial.lang index 3cc56c712d1..d0f7a56779e 100644 --- a/htdocs/langs/de_CH/commercial.lang +++ b/htdocs/langs/de_CH/commercial.lang @@ -1,14 +1,21 @@ # Dolibarr language file - Source file is en_US - commercial Commercial=Vertrieb CommercialArea=Vertriebs - Übersicht +DeleteAction=Löschen eines Ereignis NewAction=Neue/r Termin/Aufgabe ConfirmDeleteAction=Willst du dieses Ereignis wirklich löschen? CardAction=Ereignisse Übersicht ActionOnCompany=Verknüpfte Firma TaskRDVWith=Treffen mit %s +ShowTask=Zeige Aufgabe +ShowAction=Ereignisse anzeigen SaleRepresentativesOfThirdParty=Vertriebsmitarbeiter des Partners +ShowCustomer=Zeige Kunden +ShowProspect=Zeige Interessent LastDoneTasks=Die neuesten %s erledigten Aufgaben. StatusActionDone=Abgeschlossen +ActionAC_FAX=Fax versenden +ActionAC_PROP=Angebot senden ActionAC_EMAIL_IN=E-Mail Eingang ActionAC_RDV=Treffen ActionAC_INT=Eingriff vor Ort @@ -17,6 +24,9 @@ ActionAC_CLO=Schliessen ActionAC_COM=Kundenbestellung per Post verschicken ActionAC_SUP_ORD=Lieferantenbestellung per Post senden ActionAC_SUP_INV=Lieferantenrechnung per Post senden +Stats=Verkaufsstatistik +StatusProsp=Interessenten Status +NoLimit=Kein Limit ToOfferALinkForOnlineSignature=Link zur Digitalen Unterschrift WelcomeOnOnlineSignaturePage=Willkommen auf der Seite zum Offerten von %s zu aktzeptieren. ThisScreenAllowsYouToSignDocFrom=Hier kannst du die Offerte akzeptieren, unterzeichen oder zurückweisen. diff --git a/htdocs/langs/de_CH/companies.lang b/htdocs/langs/de_CH/companies.lang index 1565f2d23e9..bbfe4ef8af3 100644 --- a/htdocs/langs/de_CH/companies.lang +++ b/htdocs/langs/de_CH/companies.lang @@ -5,7 +5,6 @@ ConfirmDeleteCompany=Willst du diesen Geschäftspartner und alle damit verbunden ConfirmDeleteContact=Willst du diesen Kontakt und alle damit verbundenen Informationen wirklich löschen? MenuNewThirdParty=Erzeuge Geschäftspartner MenuNewCustomer=Erzeuge Kunde -MenuNewProspect=Erzeuge Lead MenuNewSupplier=Erzeuge Lieferant NewCompany=Erzeuge Unternehmen (Lead / Kunde / Lieferant) NewThirdParty=Erzeuge Geschäftspartner (Lead / Kunde / Lieferant) @@ -16,10 +15,12 @@ IdThirdParty=Geschäftspartner ID IdCompany=Unternehmens ID IdContact=Kontakt ID ThirdPartyContact=Geschäftspartner-Kontakt +Companies=Unternehmen CountryIsInEEC=EU - Staat PriceFormatInCurrentLanguage=Währungsanzeige dieser Sprache ThirdPartyName=Name des Geschäftspartners ThirdPartyEmail=E-Mail des Geschäftspartners +ThirdPartyProspectsStats=Interessenten Statistik ThirdPartyType=Typ des Geschäftspartners ToCreateContactWithSameName=Erzeuge einen Kontakt mit den selben Angaben, wie der Geschäftspartner. Meistens (auch wenn der Partner eine natürliche Person ist), braucht es das nicht. ReportByMonth=Monatsbericht @@ -27,6 +28,7 @@ ReportByCustomers=Kundenbericht PostOrFunction=Position NatureOfThirdParty=Typ des Geschäftspartners Region-State=Land / Region +CountryCode=Ländercode PhoneShort=Telefon No_Email=E-Mail kampagnen ablehnen DefaultLang=Standardsprache @@ -37,6 +39,7 @@ CopyAddressFromSoc=Übernehme die Adresse vom Geschäftspartner ThirdpartyNotCustomerNotSupplierSoNoRef=Hoppla, der Partner ist weder Kunde noch Lieferant, keine Objekte zum Verknüpfen verfügbar. ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Hoppla, der Partner ist weder Kunde noch Lieferant, keine Rabatte verfügbar. PaymentBankAccount=Bankkonto für Zahlung +OverAllInvoices=Rechnungen OverAllSupplierProposals=Generelle Preisanfragen LocalTax1IsUsed=Zweite Steuer verwenden LocalTax2IsUsed=Dritte Steuer nutzen @@ -73,29 +76,56 @@ ProfId3LU=Id. Prof. 3 ProfId4LU=Id. Prof. 4 ProfId5LU=Id. Prof. 5 ProfId6LU=Id. Prof. 6 +ProfId5MA=Id prof. 5 (C.I.C.E) ProfId4NL=- ProfId2PT=Prof Id 2 (Social Security Number) ProfId3PT=Prof Id 3 (Commercial Record-Nummer) ProfId4PT=Prof Id 4 (Konservatorium) ProfId2TN=Prof Id 2 (Geschäftsjahr matricule) ProfId3TN=Prof Id 3 (Douane-Code) +ProfId1US=Employer Identification Number (FEIN) ProfId2US=Id. Prof. 6 ProfId3US=Id. Prof. 6 ProfId4US=Id. Prof. 6 ProfId5US=Id. Prof. 6 ProfId6US=Id. Prof. 6 ProfId1RU=Prof ID 1 (OGRN) -ProspectCustomer=Lead / Kunde +ProfId3DZ=TIN – Steuer-Identifikationsnummer (EU) +VATIntra=MWST - Nummer +VATIntraShort=MWST - Nummer +VATReturn=MWST Rückerstattung CustomerCard=Kundenkarte CustomerRelativeDiscountShort=Rabatt rel. CustomerAbsoluteDiscountShort=Rabatt abs. CompanyHasNoRelativeDiscount=Dieser Kunde hat standardmässig keinen relativen Rabatt +HasRelativeDiscountFromSupplier=Dieser Lieferant gibt standardmässig %s%% Rabatt. +HasNoRelativeDiscountFromSupplier=Du hast keinen Standardrabatt bei diesem Lieferanten. +CompanyHasAbsoluteDiscount=Dieser Kunde hat noch Rabatt-Gutschriften über %s %s +CompanyHasDownPaymentOrCommercialDiscount=Dieser Kunde hat noch Rabatt-Gutschriften über %s %s +HasNoAbsoluteDiscountFromSupplier=Du hast keine Gutschriften von diesem Lieferanten übrig. +HasAbsoluteDiscountFromSupplier=Du hast bei diesem Lieferanten noch %s %s Gutschriften (Gutscheine oder Anzahlungen) zur Verfügung. +HasDownPaymentOrCommercialDiscountFromSupplier=Du hast bei diesem Lieferanten noch %s %s Gutschriften (kaufmännisch, Anzahlungen) zur Verfügung. +HasCreditNoteFromSupplier=Du hast Gutscheine über %s%s von diesem Lieferanten. +CustomerAbsoluteDiscountAllUsers=Absolute Kundenrabatte (von allen Vertretern gewährt) +CustomerAbsoluteDiscountMy=Absolute Kundenrabatte (von dir gewährt) +SupplierAbsoluteDiscountAllUsers=Absolute Lieferantenrabatte (von allen Vertretern angegeben) +SupplierAbsoluteDiscountMy=Absolute Lieferantenrabatte (von dir selbst eingegeben) +AddContact=Kontakt erstellen +AddContactAddress=Kontakt/Adresse erstellen ContactId=Kontakt ID +FromContactName=Name NoContactDefinedForThirdParty=Für diesen Geschäftspartner ist kein Kontakt eingetragen NoContactDefined=Kein Kontakt vorhanden AddThirdParty=Geschäftspartner erstellen +CustomerCodeDesc=Kundennummer, eindeutig für jeden Kunden +SupplierCodeDesc=Lieferantennummer, eindeutig für jeden Lieferanten RequiredIfCustomer=Erforderlich falls Geschäftspartner Kunde oder Interessent ist +RequiredIfSupplier=Erforderlich, wenn der Partner Lieferant ist +ValidityControledByModule=Durch Modul validiert +ListOfThirdParties=Geschäftspartner +ShowCompany=Geschäftspartner anzeigen ShowContact=Zeige Kontaktangaben +ContactsAllShort=Alle (Kein Filter) ContactForOrdersOrShipments=Bestellungs- oder Lieferkontakt ContactForProposals=Offertskontakt NoContactForAnyOrder=Kein Kontakt für Bestellungen @@ -103,16 +133,60 @@ NoContactForAnyOrderOrShipments=Dieser Kontakt ist kein Kontakt für eine Bestel NoContactForAnyProposal=Kein Kontakt für Offerte NoContactForAnyContract=Kein Kontakt für Verträge NoContactForAnyInvoice=Dieser Kontakt ist kein Kontakt für jegliche Rechnung +NewContactAddress=Neuer Kontakt / Adresse +MyContacts=Meine Kontakte +ThisUserIsNot=Dieser Benutzer ist weder ein Lead, Kunde, noch Lieferant +VATIntraCheckDesc=Der Link %s frägt die MWST - Nummer im Europäischen Verzeichnis (VIES) ab. Deshalb muss die MWST Nummer das Länderprefix haben. +VATIntraCheckableOnEUSite=Innergemeinschaftliche MWST Nummer überprüfen (EU Website) +VATIntraManualCheck=MWST - Nummer manuell überprüfen lassen: %s. +NorProspectNorCustomer=Weder Interessent noch Kunde +ContactPrivate=Privat +ContactPublic=Öffentlich OthersNotLinkedToThirdParty=Andere, nicht mit einem Geschäftspartner verknüpfte Projekte TE_GROUP=Grossunternehmen +TE_WHOLE=Distributor +StatusProspect-1=Nicht kontaktieren +StatusProspect0=Noch kein Kontaktversuch +StatusProspect3=Erfolgreich kontaktiert +ProspectsByStatus=Leads nach Status +NoParentCompany=Keine Mutterfirma ContactNotLinkedToCompany=Kontakt keinem Geschäftspartner zugeordnet DolibarrLogin=Dolibarr Benutzername +ExportDataset_company_1=Geschäftspartner und ihre Eigenschaften +ExportDataset_company_2=Kontakte und deren Eigenschaften +ImportDataset_company_1=Geschäftspartner und deren Eigenschaften +ImportDataset_company_2=Zusätzliche Partnerkontakte und -attribute +ImportDataset_company_3=Partner - Bankverbindungen +ImportDataset_company_4=Partnervertreter (Weise Vertreter Partnern zu) +PriceLevel=Preisniveau +PriceLevelLabels=Preisniveau - Labels ConfirmDeleteFile=Sind Sie sicher dass Sie diese Datei löschen möchten? AllocateCommercial=Vertriebsmitarbeiter zuweisen FiscalMonthStart=Ab Monat des Geschäftsjahres +YouMustAssignUserMailFirst=Für E-Mail - Benachrichtigung hinterlegst du bitte zuerst eine E-Mail Adresse im Benutzerprofil. YouMustCreateContactFirst=Sie müssen erst E-Mail-Kontakte beim Geschäftspartner anlegen, um E-Mail-Benachrichtigungen hinzufügen zu können. +ListSuppliersShort=Liste Lieferanten +ListProspectsShort=Liste Interessenten +ListCustomersShort=Kundenliste +LastModifiedThirdParties=Die letzten %s bearbeiteten Partner +UniqueThirdParties=Anzahl Geschäftspartner InActivity=Offen +ActivityCeased=Inaktiv +ThirdPartyIsClosed=Der Partner ist inaktiv. OutstandingBillReached=Kreditlimit erreicht +OrderMinAmount=Mindestbestellmenge +MonkeyNumRefModelDesc=Generiere die Kundennummer im Format %syymm-nnnn und die Lieferantennummer als %syymm-nnnn. (y=Jahr; m=Monat; n=fortlaufende Zahl). MergeOriginThirdparty=Geschäftspartner duplizieren (Geschäftspartner, den Sie löschen möchten) MergeThirdparties=Zusammenführen von Geschäftspartnern +ConfirmMergeThirdparties=Willst du diesen Partner wirklich mit dem aktuellen Verbinden?\nAlle verknüpften Objekte werden dabei übernommen und dann der gewählte Partner gelöscht. +ThirdpartiesMergeSuccess=Ich habe die Partner erfolgreich zusammengeführt. SaleRepresentativeLogin=Login des Verkaufsmitarbeiters +SaleRepresentativeFirstname=Vorname des Vertreters +SaleRepresentativeLastname=Nachname des Vertreters +ErrorThirdpartiesMerge=Hoppla, da ist etwas beim Löschen des Partners schief gelaufen...\nAber ich habe die Verknüpfung Rückgängig gemacht.\nBitte prüfe die Logs. +NewCustomerSupplierCodeProposed=Diese Nummer ist schon im Gebrauch. Wähle eine andere. +PaymentTypeCustomer=Kundenzahlung +PaymentTermsCustomer=Zahlungsbedingungen für Kunden +PaymentTypeSupplier=Lieferantenzahlung +PaymentTermsSupplier=Zahlungsbedingungen für Lieferanten +MulticurrencyUsed=Benutze Multiwährungsfähigkeit diff --git a/htdocs/langs/de_CH/deliveries.lang b/htdocs/langs/de_CH/deliveries.lang index 857d52bd6b2..102ee9f3a78 100644 --- a/htdocs/langs/de_CH/deliveries.lang +++ b/htdocs/langs/de_CH/deliveries.lang @@ -1,5 +1,16 @@ # Dolibarr language file - Source file is en_US - deliveries -DeliveryRef=Ref. Lieferung +DeliveryRef=Lieferungsnummer +DeliveryCard=Lieferschein +DeliveryOrder=Lieferauftrag +CreateDeliveryOrder=Erzeuge Lieferschein DeliveryStateSaved=Lieferstatus gespeichert +ValidateDeliveryReceiptConfirm=Bist du sicher, dass du diesen Lieferschein frei geben willst? +DeleteDeliveryReceiptConfirm=Bist du sicher, dass du den Lieferschein %s löschen willst? +TrackingNumber=Sendungsverfolgungsnummer +DeliveryNotValidated=Die Lieferung ist nicht freigegeben StatusDeliveryValidated=Erhalten +NameAndSignature=Name / Unterschrift +Deliverer=Lieferant +ErrorStockIsNotEnough=Der Lagerbestand ist zu klein ShowReceiving=Lieferschein anzeigen +NonExistentOrder=Nicht vorhandene Bestellung diff --git a/htdocs/langs/de_CH/dict.lang b/htdocs/langs/de_CH/dict.lang index 7bf16b52f02..027873e4cf9 100644 --- a/htdocs/langs/de_CH/dict.lang +++ b/htdocs/langs/de_CH/dict.lang @@ -1,6 +1,13 @@ # Dolibarr language file - Source file is en_US - dict +CountryGB=England CountryBY=Weissrussland CountryHM=Heard und McDonald Inseln +CountryKG=Kirgisien +CountryMM=Myanmar +CountryTC=Turks- und Caicosinseln +CountryAE=Vereinigte Arabische Emirate +CurrencyCentEUR=Cents +DemandReasonTypeSRC_SRC_CUSTOMER=Einkaufskontakt ExpCycloCat=Motorfahrrad ExpMotoCat=Töff ExpAuto3CV=3 PS diff --git a/htdocs/langs/de_CH/errors.lang b/htdocs/langs/de_CH/errors.lang index b3df9508811..a4be143308a 100644 --- a/htdocs/langs/de_CH/errors.lang +++ b/htdocs/langs/de_CH/errors.lang @@ -1,12 +1,29 @@ # Dolibarr language file - Source file is en_US - errors +ErrorBadEMail=E-Mail%s ist nicht korrekt. ErrorBadValueForParamNotAString=Ungültiger Wert für ihre Parameter. Das passiert normalerweise, wenn die Übersetzung fehlt. +ErrorFailToCopyDir=Konnte das Verzeichnis '%s' nicht nach '%s' kopieren. ErrorFailToRenameFile=Konnte die Datei '%s' nicht in '%s' umzubenennen. +ErrorFailToMakeReplacementInto=Ich konnte die Ersetzungen nicht in die Datei '%s' schreiben... +ErrorFailToGenerateFile=Ich konnte die Datei '%s' nicht erzeugen... +ErrorBadThirdPartyName=Ungültige Geschäftspartner - Bezeichnung +ErrorBadBarCodeSyntax=Falsche Syntax für den Strichcode. Vielleicht hast du eine falsche Strichcode - Art eingestellt oder eine falsche Strichcodemaske definiert? +ErrorBarCodeRequired=Strichcode erforderlich +ErrorBarCodeAlreadyUsed=Diesen Strichcode verwende ich bereits. +ErrorBadSupplierCodeSyntax=Die eingegebene Lieferanten Nr. ist unzulässig. +ErrorSupplierCodeRequired=Lieferanten-Nr. erforderlich +ErrorSupplierCodeAlreadyUsed=Diese Lieferanten Nr. ist bereits vergeben. ErrorBadValueForParameter=Ungültiger Wert '%s' für Parameter '%s' +ErrorUserCannotBeDelete=Ich kann diesen Benutzer nicht löschen... Vieleicht ist er noch mit anderen Dolibarr - Objekten verknüpft? ErrorFieldsRequired=Ein oder mehrere erforderliche Felder wurden nicht ausgefüllt- +ErrorSubjectIsRequired=Bitte gib einen E-Mail - Betreff an. ErrorFileSizeTooLarge=Die Grösse der gewählten Datei übersteigt den zulässigen Maximalwert. ErrorSizeTooLongForIntType=Die Grösse überschreitet das Maximum für den Typ 'int' (%s Ziffern maximal) ErrorSizeTooLongForVarcharType=Die Grösse überschreitet das Maximum für den Typ 'string' (%s Zeichen maximal) ErrorNoValueForCheckBoxType=Bitte Wert für Checkbox-Liste eingeben +ErrorFieldCanNotContainSpecialNorUpperCharacters=Das Feld %s darf keine Sonderzeichen, Grossbuchstaben enthalten. Ebenfalls darf es nicht allein aus Ziffern bestehen. +ErrorFieldMustHaveXChar=Das Feld %s muss mindestens %s Zeichen haben. +ErrorCantSaveADoneUserWithZeroPercentage=Ereignisse können nicht mit Status "Nicht begonnen" gespeichert werden, wenn das Feld "Erledigt durch" schon ausgefüllt ist. +ErrorPleaseTypeBankTransactionReportName=Gib hier den Bankkontoauszug im Format YYYYMM oder YYYYMMDD an, in den du diesen Eintrag eintragen willst. ErrorModuleSetupNotComplete=Das Setup des Moduls scheint unvollständig zu sein. Führen Sie nochmal das Setup aus um das Modul zu vervollständigen. ErrorProdIdAlreadyExist=%s wurde bereits einem Geschäftspartner zugewiesen ErrorForbidden3=Es scheint keine ordnungsgemässe Authentifizierung für das System vorzuliegen. Bitte werfen Sie einen Blick auf die Systemdokumentation um die entsprechenden Authentifizierungsoptionen zu verwalten (htaccess, mod_auth oder andere...) diff --git a/htdocs/langs/de_CH/interventions.lang b/htdocs/langs/de_CH/interventions.lang index 04bf236f996..4daf054e896 100644 --- a/htdocs/langs/de_CH/interventions.lang +++ b/htdocs/langs/de_CH/interventions.lang @@ -4,6 +4,7 @@ Interventions=Arbeitseinsätze InterventionCard=Einsatzkarte NewIntervention=Neuer Einsatz AddIntervention=Einsatz erstellen +ChangeIntoRepeatableIntervention=Umstellen auf wiederkehrender Arbeitseinsatz ListOfInterventions=Liste der Arbeitseinsätze ActionsOnFicheInter=Aktionen zum Einsatz LastInterventions=Letzte %s Einsätze @@ -19,6 +20,8 @@ ConfirmValidateIntervention=Bist du sicher, dass du den Arbeitseinsatz %s ConfirmModifyIntervention=Bist du sicher, dass du diesen Arbeitseinsatz ändern willst? ConfirmDeleteInterventionLine=Bist du sicher, dass du diese Einsatzposition löschen willst? ConfirmCloneIntervention=Bist du sicher, dass du diesen Einsatz duplizieren willst? +NameAndSignatureOfInternalContact=Name / Unterschrift Ausführender +NameAndSignatureOfExternalContact=Name / Unterschrift Kunde DocumentModelStandard=Standard-Dokumentvorlage für Arbeitseinsätze InterventionCardsAndInterventionLines=Einsatz und Einsatzpositionen InterventionClassifyBilled=Auf "verrechnet" setzten @@ -26,6 +29,7 @@ InterventionClassifyUnBilled=Auf "nicht verrechnet" setzen InterventionClassifyDone=Auf "erledigt" setzen StatusInterInvoiced=Verrechnet SendInterventionRef=Einsatz %s einreichen +SendInterventionByMail=Einsatz per E-Mail versenden InterventionCreatedInDolibarr=Einsatz %s erstellt InterventionValidatedInDolibarr=Einsatz %s freigegeben InterventionModifiedInDolibarr=Einsatz %s geändert @@ -43,6 +47,8 @@ UseServicesDurationOnFichinter=Benutze Servicezeiten für Arbeitseinsätze aus B UseDurationOnFichinter=Versteckt das Feld "Dauer" auf der Einsatzkarte UseDateWithoutHourOnFichinter=Versteckt Stunden und Minuten im Datumsfeld von Einsatzkarten InterventionStatistics=Einsatzstatistik +NbOfinterventions=Anzahl Einsatzkarten +NumberOfInterventionsByMonth=Einsatzkarten pro Monat (Nach Freigabedatum) AmountOfInteventionNotIncludedByDefault=Der Aufwand für Einsätze ist im Normalfall nicht im Profit eingerechnet. Meistens wird das über die Zeiterfassung geregelt.\nDamit die Einsatz - Aufwände im Profit sichtbar werden, fügst du Unter Einstellungen -> Weitere Einstellungen die Option 'PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT' hinzu und setzest diese auf den Wert 1 InterId=Einsatz ID InterRef=Einsatz Ref. diff --git a/htdocs/langs/de_CH/main.lang b/htdocs/langs/de_CH/main.lang index 4064e5e9ec4..cbe2c53512c 100644 --- a/htdocs/langs/de_CH/main.lang +++ b/htdocs/langs/de_CH/main.lang @@ -131,6 +131,7 @@ AmountLT2=MwSt.-Betrag 3 PriceQtyMinHTCurrency=Mindestmengenpreis exkl. MWST Percentage=Prozentangabe TotalHTShort=Total exkl. MWST +TotalHT100Short=Total 100%% (exkl.) TotalHTShortCurrency=Total exkl. MWST in Originalwährung TotalTTCShort=Totalbetrag (inkl. MwSt.) TotalHT=Total exkl. Steuern @@ -164,7 +165,6 @@ ActionRunningNotStarted=Nicht begonnen ActionRunningShort=In Bearbeitung LatestLinkedEvents=Die neuesten %s verknüpften Vorgänge CompanyFoundation=Firma / Organisation -Accountant=Berater ContactsForCompany=Ansprechpartner/Adressen dieses Geschäftspartners ContactsAddressesForCompany=Ansprechpartner / Adressen zu diesem Geschäftspartner AddressesForCompany=Adressen für den Geschäftspartner @@ -268,9 +268,15 @@ ConfirmMassDeletionQuestion=Bist du sicher, dass du diese %s Einträge löschen ClassifyBilled=Verrechnet ClassifyUnbilled=Auf "Nicht verrechnet" setzen Progress=Fortschritt +ProgressShort=Fortschr. BackOffice=Dolibarr ExportFilteredList=Exportiere gefilterte Positionen ExportList=Exportiere Positionen +IncludeDocsAlreadyExported=Beziehe bereits exportierte Dokumente mit ein +ExportOfPiecesAlreadyExportedIsEnable=Bereits exportierte Dateien erneut exportieren ist "Ein". +ExportOfPiecesAlreadyExportedIsDisable=Bereits exportierte Dateien erneut exportieren ist "Aus". +AllExportedMovementsWereRecordedAsExported=Alles erfolgreich exportiert:-) +NotAllExportedMovementsCouldBeRecordedAsExported=Nicht alles konnte korrekt exportiert werden:-( Calendar=Kalender GroupBy=Sortieren nach ViewFlatList=Einfache Liste anzeigen @@ -279,6 +285,7 @@ SomeTranslationAreUncomplete=Du siehst ungenaue Übersetzungen oder unvollständ DirectDownloadLink=Direkter externer Downloadlink DirectDownloadInternalLink=Direkter Downloadlink, wenn eingeloggt und die Rechte vorhanden sind. ActualizeCurrency=Aktualisiere Währung +ModuleBuilder=Modul und Applikationsentwicklungsumgebung SetMultiCurrencyCode=Setze Währung BulkActions=Stapelverarbeitungen ClickToShowHelp=Clicke hier für Kontexthilfe. @@ -328,3 +335,10 @@ YouAreCurrentlyInSandboxMode=Wir sind aktuell im %s "sandbox" Modus Inventory=Inventar AnalyticCode=Analysecode TMenuMRP=UVP +ShowMoreInfos=Mehr Informationen +NoFilesUploadedYet=Bitte lade zuerst ein Dokument hoch. +SeePrivateNote=Privatnotiz Einblenden +PaymentInformation=Zahlungsinformationen +ValidFrom=Gültig von +ValidUntil=Gültig bis +NoRecordedUsers=Keine Benutzer diff --git a/htdocs/langs/de_CH/members.lang b/htdocs/langs/de_CH/members.lang index f1606b59016..27d4cf7781a 100644 --- a/htdocs/langs/de_CH/members.lang +++ b/htdocs/langs/de_CH/members.lang @@ -19,6 +19,7 @@ MemberType=Mitgliederart MembersTypes=Mitgliederarten MemberStatusDraft=Entwürfe (benötigen Bestätigung) MemberStatusDraftShort=Entwurf +NewSubscriptionDesc=Mit diesem Formular können Sie Ihr Abonnement als neues Mitglied der Stiftung registrieren. Wenn Sie Ihr Abonnement verlängern möchten (falls Sie bereits Mitglied sind), wenden Sie sich stattdessen per E-Mail an den Stiftungsrat. %s. Subscriptions=Abonnemente ListOfSubscriptions=Liste der Abonnemente NewMemberType=Neue Mitgliederart @@ -26,6 +27,15 @@ SubscriptionRequired=Abonnement notwendig VoteAllowed=Abstimmen erlaubt ShowSubscription=Abonnement anzeigen CardContent=Inhalt Ihrer Mitgliederkarte +DescADHERENT_AUTOREGISTER_NOTIF_MAIL_SUBJECT=Betreff der Benachrichtigungs-E-Mail bei automatischer Anmeldung eines Gastes +DescADHERENT_AUTOREGISTER_NOTIF_MAIL=Inhalt der Benachrichtigungs-E-Mail, bei automatischer Anmeldung eines Gastes +DescADHERENT_EMAIL_TEMPLATE_AUTOREGISTER=E-Mail-Vorlage zum Senden von E-Mails an ein Mitglied bei Mitglieder-Autoabonnements +DescADHERENT_EMAIL_TEMPLATE_MEMBER_VALIDATION=E-Mail-Vorlage zum Senden von E-Mails an ein Mitglied bei der Mitgliederüberprüfung +DescADHERENT_EMAIL_TEMPLATE_SUBSCRIPTION=E-Mail-Vorlage zum Senden einer E-Mail an ein Mitglied bei der Aufnahme eines neuen Abonnements +DescADHERENT_EMAIL_TEMPLATE_REMIND_EXPIRATION=E-Mail-Vorlage zum Senden einer E-Mail-Erinnerung, wenn das Abonnement abläuft +DescADHERENT_EMAIL_TEMPLATE_CANCELATION=E-Mail-Vorlage zum Senden von E-Mails an ein Mitglied bei Kündigung der Mitgliedschaft +DescADHERENT_MAIL_FROM=Absender E-Mail für automatische E-Mails +ShowTypeCard=Typ anzeigen '%s' HTPasswordExport=htpassword Datei generieren MembersAndSubscriptions=Mitglieder und Abonnemente SubscriptionPayment=Zahlung des Mitgliedsbeitrags diff --git a/htdocs/langs/de_CH/orders.lang b/htdocs/langs/de_CH/orders.lang index 586ad1cdaef..259d17f8c74 100644 --- a/htdocs/langs/de_CH/orders.lang +++ b/htdocs/langs/de_CH/orders.lang @@ -1,9 +1,12 @@ # Dolibarr language file - Source file is en_US - orders OrdersArea=Kundenauftrags-Übersicht OrderCard=Bestell-Karte +CustomersOrders=Kundenaufträge CancelOrder=Bestellung verwerfen +ShowOrder=Zeige Bestellung NoOrder=Keine Bestellung CloseOrder=Bestellung schliessen +OrderMode=Bestellweise OtherOrders=Bestellungen Anderer Error_OrderNotChecked=Keine zu verrechnenden Bestellungen ausgewählt OrderByEMail=E-Mail diff --git a/htdocs/langs/de_CH/other.lang b/htdocs/langs/de_CH/other.lang index ec3c0d29495..036a386eede 100644 --- a/htdocs/langs/de_CH/other.lang +++ b/htdocs/langs/de_CH/other.lang @@ -1,11 +1,16 @@ # Dolibarr language file - Source file is en_US - other NumberingShort=Nr +ToolsDesc=Alle Werkzeuge, die nicht in anderen Menüeinträgen enthalten sind, werden hier gruppiert.
Alle Werkzeuge können über das linke Menü aufgerufen werden. Notify_COMPANY_SENTBYMAIL=Von Geschäftspartner-Karte gesendete Mails Notify_FICHEINTER_VALIDATE=Eingriff freigegeben Notify_FICHINTER_ADD_CONTACT=Kontakt zu Einsatz hinzugefügt Notify_FICHINTER_SENTBYMAIL=Service per E-Mail versendet TotalSizeOfAttachedFiles=Gesamtgrösse der angehängten Dateien/Dokumente MaxSize=Maximalgrösse +PredefinedMailContentContract=__(Hallo)__\n\n\n__(Mit freundlichen Grüssen)__\n\n__USER_SIGNATURE__ +PredefinedMailContentThirdparty=__ (Hallo) __ __ (Mit freundlichen Grüssen) __ __USER_SIGNATURE__ +PredefinedMailContentContact=__ (Hallo) __ __ (Mit freundlichen Grüssen) __ __USER_SIGNATURE__ +PredefinedMailContentUser=__ (Hallo) __ __ (Mit freundlichen Grüssen) __ __USER_SIGNATURE__ ChooseYourDemoProfil=Bitte wählen Sie das Demo-Profil das Ihrem Einsatzgebiet am ehesten entspricht ModifiedById=Letzte Änderung durch User ModifiedByLogin=Letzte Änderung durch Userlogin diff --git a/htdocs/langs/de_CH/paybox.lang b/htdocs/langs/de_CH/paybox.lang index 5106ba52404..d6f6464804c 100644 --- a/htdocs/langs/de_CH/paybox.lang +++ b/htdocs/langs/de_CH/paybox.lang @@ -1,5 +1,5 @@ # Dolibarr language file - Source file is en_US - paybox ThisIsInformationOnPayment=Informationen zu der vorzunehmenden Zahlunge -YourPaymentHasBeenRecorded=Hiermit Bestätigen wir die Zahlung ausgeführt wurde. Vielen Dank. +YourPaymentHasBeenRecorded=Diese Seite bestätigt, dass Ihre Zahlung erfasst wurde. Vielen Dank. PAYBOX_CGI_URL_V2=Url für das Paybox Zahlungsmodul "CGI Modul" VendorName=Name des Anbieters diff --git a/htdocs/langs/de_CH/printing.lang b/htdocs/langs/de_CH/printing.lang index d8736396f5c..6ef248bee04 100644 --- a/htdocs/langs/de_CH/printing.lang +++ b/htdocs/langs/de_CH/printing.lang @@ -1,6 +1,7 @@ # Dolibarr language file - Source file is en_US - printing Module64000Desc=Direktdrucksystem aktivieren PrintingSetup=Direktdrucksystem einrichten +PrintingDesc=Dieses Modul kann Dokumente direkt an einen Drucker schicken. Der Druckbutton erscheint in entsprechenden Modulen. MenuDirectPrinting=Direktdruck - Jobs PrintingDriverDesc=Konfigurationsvariablen für den Druckertreiber. FileWasSentToPrinter=Die Datei %s wurde an den Drucker gesendet @@ -9,8 +10,10 @@ NoActivePrintingModuleFound=Ich habe keinen Druckertreiber gefunden. Bitte kontr PleaseSelectaDriverfromList=Wähle einen Treiber aus der Liste. PleaseConfigureDriverfromList=Richte den gewählten Druckertreiber ein. PRINTGCP_INFO=Google OAuth Schnittstelle einrichten +PrintGCPDesc=Dieser Treiber schickt Dokumente via Google Cloud Print an einen Drucker. GCP_OwnerName=Besitzer GCP_connectionStatus=On- oder Offline? +PrintIPPDesc=Dieser Treiber schickt Dokumente direkt an einen CUPS - Drucker in einer Linuxumgebung. PRINTIPP_USER=Benutzer NoDefaultPrinterDefined=Du hast keinen Standarddrucker defininert. DefaultPrinter=Standarddrucker @@ -20,6 +23,7 @@ IPP_State_reason1=Statusgrund1 IPP_BW=schwarz / weiss IPP_Media=Druckmedium DirectPrintingJobsDesc=Hier siehst du die laufenden Druckjobs aller verfügbaren Drucker. +GoogleAuthNotConfigured=Google OAuth ist nicht konfiguriert. Aktiviere das Modul OAuth und trage dort Google ID / Secret ein. GoogleAuthConfigured=Die Google OAuth - Zugangsdaten sind im Modul OAuth eingetragen. PrintingDriverDescprintgcp=Konfigurationsvariablen für Google Cloud Print. PrintingDriverDescprintipp=Cups Driver - Konfigurationsvariablen diff --git a/htdocs/langs/de_CH/propal.lang b/htdocs/langs/de_CH/propal.lang index 7d3aff55e84..a663ec20a9e 100644 --- a/htdocs/langs/de_CH/propal.lang +++ b/htdocs/langs/de_CH/propal.lang @@ -1,10 +1,14 @@ # Dolibarr language file - Source file is en_US - propal +ProposalsOpened=Offene Angebote ProposalCard=Angebotskarte +NewPropal=Neues Angebot Prospect=Lead LastPropals=%s neueste Angebote ProposalsStatistics=Angebote Statistiken PropalsOpened=Offen +PropalStatusSigned=Unterzeichnet (ist zu verrechnen) PropalsToClose=Zu schliessende Angebote +ListOfProposals=Liste der Angebote DefaultProposalDurationValidity=Standardmässige Gültigkeitsdatuer (Tage) AvailabilityPeriod=Verfügbarkeitszeitraum SetAvailability=Verfügbarkeitszeitraum definieren diff --git a/htdocs/langs/de_CH/users.lang b/htdocs/langs/de_CH/users.lang index 174caca5cdd..ab3eb40ac4c 100644 --- a/htdocs/langs/de_CH/users.lang +++ b/htdocs/langs/de_CH/users.lang @@ -37,3 +37,4 @@ DisabledInMonoUserMode=Im Wartungsmodus deaktiviert UserAccountancyCode=Buchhaltungskonto zum Benutzer DateEmployment=Datum der Anstellung DateEmploymentEnd=Datum des Austrittes +CantDisableYourself=Du kannst dein eigenes Benutzerkonto nicht löschen. diff --git a/htdocs/langs/de_CH/website.lang b/htdocs/langs/de_CH/website.lang index 82ca7baa8f4..c01a50b4b9f 100644 --- a/htdocs/langs/de_CH/website.lang +++ b/htdocs/langs/de_CH/website.lang @@ -4,3 +4,4 @@ WEBSITE_CSS_URL=URL zu externer CSS Datei ViewSiteInNewTab=Webauftritt in neuem Tab anzeigen SetAsHomePage=Als Startseite definieren WebsiteAccounts=Webseitenkonten +BackToListOfThirdParty=Zurück zur Liste für Partner diff --git a/htdocs/langs/de_DE/accountancy.lang b/htdocs/langs/de_DE/accountancy.lang index f9e9e1e9380..36aaddcf541 100644 --- a/htdocs/langs/de_DE/accountancy.lang +++ b/htdocs/langs/de_DE/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Buchhaltungskonten in Wartestellung DONATION_ACCOUNTINGACCOUNT=Buchhaltungskonto für die Buchung von Spenden @@ -302,9 +303,9 @@ InitAccountancyDesc=Auf dieser Seite kann ein Sachkonto für Artikel und Dienstl DefaultBindingDesc=Diese Seite kann verwendet werden, um ein Standardkonto festzulegen, das für die Verknüpfung von Transaktionsdatensätzen zu Lohnzahlungen, Spenden, Steuern und Mwst. verwendet werden soll, wenn kein bestimmtes Konto angegeben wurde. DefaultClosureDesc=This page can be used to set parameters to use to enclose a balance sheet. Options=Optionen -OptionModeProductSell=Modus Verkauf -OptionModeProductSellIntra=Mode sales exported in EEC -OptionModeProductSellExport=Mode sales exported in other countries +OptionModeProductSell=Modus Verkäufe Inland +OptionModeProductSellIntra=Modus Verkäufe in EU/EWG +OptionModeProductSellExport=Modus Verkäufe Export (ausserhalb EU/EWG) OptionModeProductBuy=Modus Einkäufe OptionModeProductSellDesc=Alle Artikel mit Sachkonten für Vertrieb anzeigen OptionModeProductSellIntraDesc=Show all products with accounting account for sales in EEC. @@ -317,9 +318,9 @@ WithoutValidAccount=Mit keinem gültigen dedizierten Konto WithValidAccount=Mit gültigen dedizierten Konto ValueNotIntoChartOfAccount=Dieser Wert für das Buchhaltungs-Konto existiert nicht im Kontenplan AccountRemovedFromGroup=Account removed from group -SaleLocal=Local sale -SaleExport=Export sale -SaleEEC=Sale in EEC +SaleLocal=Verkauf Inland +SaleExport=Verkauf Export (ausserhalb EWG) +SaleEEC=Verkauf in EU/EWG ## Dictionary Range=Bereich von Sachkonten diff --git a/htdocs/langs/de_DE/admin.lang b/htdocs/langs/de_DE/admin.lang index 7006ed146e8..c3449107abb 100644 --- a/htdocs/langs/de_DE/admin.lang +++ b/htdocs/langs/de_DE/admin.lang @@ -149,7 +149,7 @@ SystemToolsAreaDesc=In diesem Bereich finden Sie die Verwaltungsfunktionen. Verw Purge=Bereinigen PurgeAreaDesc=Auf dieser Seite können Sie alle von Dolibarr erzeugten oder gespeicherten Dateien (temporäre Dateien oder alle Dateien im Verzeichnis %s ) löschen. Die Verwendung dieser Funktion ist in der Regel nicht erforderlich. Es wird als Workaround für Benutzer bereitgestellt, deren Dolibarr von einem Anbieter gehostet wird, der keine Berechtigungen zum löschen von Dateien anbietet, die vom Webserver erzeugt wurden. PurgeDeleteLogFile=Löschen der Protokolldateien, einschließlich %s, die für das Syslog-Modul definiert wurden (kein Risiko Daten zu verlieren) -PurgeDeleteTemporaryFiles=Delete all temporary files (no risk of losing data). Note: Deletion is done only if the temp directory was created 24 hours ago. +PurgeDeleteTemporaryFiles=Löschen Sie alle temporären Dateien (kein Datenverlustrisiko). Hinweis: Das Löschen erfolgt nur, wenn das temporäre Verzeichnis vor über 24 Stunden erstellt wurde. PurgeDeleteTemporaryFilesShort=temporäre Dateien löschen PurgeDeleteAllFilesInDocumentsDir=Alle Dateien im Verzeichnis: %s löschen:
Dadurch werden alle erzeugten Dokumente löschen, die sich auf verknüpfte (Dritte, Rechnungen usw....), Dateien, die in das ECM Modul hochgeladen wurden, Datenbank, Backup, Dumps und temporäre Dateien beziehen. PurgeRunNow=Jetzt bereinigen @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Kontrollkästchen / Dropdownliste aus DB-Tabelle (meh ExtrafieldLink=Verknüpftes Objekt ComputedFormula=Berechnetes Feld ComputedFormulaDesc=Sie können hier eine Formel eingeben, indem Sie andere Eigenschaften des Objekts oder eine beliebige PHP-Codierung verwenden, um einen dynamisch berechneten Wert zu erhalten. Sie können alle PHP-kompatiblen Formeln verwenden, einschließlich des "?" Bedingungsoperator und folgendes globales Objekt: $ db, $ conf, $ langs, $ mysoc, $ user, $ object .
WARNUNG : Möglicherweise sind nur einige Eigenschaften von $ object verfügbar. Wenn Sie Eigenschaften benötigen, die nicht geladen sind, holen Sie sich das Objekt wie im zweiten Beispiel in Ihre Formel.
Wenn Sie ein berechnetes Feld verwenden, können Sie keinen Wert von der Schnittstelle eingeben. Wenn ein Syntaxfehler vorliegt, gibt die Formel möglicherweise auch nichts zurück.

Beispiel der Formel:
$ object-> id <10? round ($ object-> id / 2, 2): ($ object-> id + 2 * $ user-> id) * (int) substr ($ mysoc-> zip, 1, 2)

Beispiel zum erneuten Laden eines Objekts
(($ reloadedobj = new Societe ($ db)) && ($ reloadedobj-> fetch ($ obj-> id? $ obj-> id: ($ obj-> rowid? $ obj-> rowid: $ object-> id ))> 0))? $ reloadedobj-> array_options ['options_extrafieldkey'] * $ reloadedobj-> capital / 5: '-1'

Ein weiteres Beispiel für eine Formel zum Erzwingen des Ladens eines Objekts und seines übergeordneten Objekts:
(($ reloadedobj = neue Aufgabe ($ db)) && ($ reloadedobj-> Abrufen ($ object-> id)> 0) && ($ secondloadedobj = neues Projekt ($ db)) && ($ secondloadedobj-> Abrufen ($ reloadedobj-> fk_project)> 0))? $ secondloadedobj-> ref: 'Übergeordnetes Projekt nicht gefunden' +Computedpersistent=Speichere berechnetes Feld +ComputedpersistentDesc=Berechnete Extrafelder werden in der Datenbank gespeichert, dennoch wird ihr Wert nur dann neu berechnet wenn sich das Objekt zu diesem Feld ändert. Falls das berechnete Feld von anderen Objekten oder globalen Daten abhängt, kann sein Wert falsch sein! ExtrafieldParamHelpPassword=Wenn Sie dieses Feld leer lassen, wird dieser Wert unverschlüsselt gespeichert (das Feld darf nur mit einem Stern auf dem Bildschirm ausgeblendet werden).
Stellen Sie 'auto'; ein, um die Standardverschlüsselungsregel zum Speichern des Kennworts in der Datenbank zu verwenden (dann ist der gelesene Wert nur der Hash, keine Möglichkeit, den ursprünglichen Wert abzurufen). ExtrafieldParamHelpselect=Die Liste der Werte muss aus Zeilen mit dem Format Schlüssel, Wert bestehen (wobei Schlüssel nicht '0' sein darf)

zum Beispiel:
1, value1
2, value2
Code3, Wert3
...

Damit die Liste von einer anderen ergänzenden Attributliste abhängt:
1, value1 | options_ parent_list_code : parent_key
2, value2 | options_ parent_list_code : parent_key

Um die Liste von einer anderen Liste abhängig zu machen:
1, value1 | parent_list_code : parent_key
2, value2 | parent_list_code : parent_key ExtrafieldParamHelpcheckbox=Die Liste der Werte muss aus Zeilen mit dem Format Schlüssel, Wert bestehen (wobei Schlüssel nicht '0' sein darf)

zum Beispiel:
1, value1
2, value2
3, value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=Die Liste der Werte muss aus Zeilen mit dem Format Schl ExtrafieldParamHelpsellist=Die Liste der Werte stammt aus einer Tabelle
Syntax: table_name: label_field: id_field :: filter
Beispiel: c_typent: libelle: id :: filter

- idfilter ist notwendigerweise ein primärer int-Schlüssel
- Filter kann ein einfacher Test sein (z. B. aktiv = 1), um nur den aktiven Wert anzuzeigen
Sie können $ ID $ auch in Filtern verwenden, bei denen es sich um die aktuelle ID des aktuellen Objekts handelt
Verwenden Sie $ SEL $, um ein SELECT im Filter durchzuführen
Wenn Sie nach Extrafeldern filtern möchten, verwenden Sie die Syntax extra.fieldcode = ... (wobei field code der Code des Extrafelds ist)

Damit die Liste von einer anderen ergänzenden Attributliste abhängt:
c_typent: libelle: id: options_ parent_list_code | parent_column: filter

Um die Liste von einer anderen Liste abhängig zu machen:
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::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Bibliothek zum Erstellen von PDF-Dateien LocalTaxDesc=Einige Länder erheben möglicherweise zwei oder drei Steuern auf jede Rechnungsposition. Wenn dies der Fall ist, wählen Sie den Typ für die zweite und dritte Steuer und ihren Steuersatz. Mögliche Typen sind:
1: auf Produkte und Dienstleistungen ohne Mehrwertsteuer wird eine örtliche Steuer erhoben (die örtliche Steuer wird auf den Betrag ohne Mehrwertsteuer berechnet)
2: Für Produkte und Dienstleistungen einschließlich Mehrwertsteuer wird eine lokale Steuer erhoben (die lokale Steuer wird auf den Betrag + die Hauptsteuer berechnet).
3: auf Produkte ohne Mehrwertsteuer wird eine lokale Steuer erhoben (die lokale Steuer wird auf den Betrag ohne Mehrwertsteuer berechnet)
4: Für Produkte einschließlich Mehrwertsteuer wird eine lokale Steuer erhoben (die Mehrwertsteuer wird auf den Betrag + die Haupt-Mehrwertsteuer berechnet).
5: auf Dienstleistungen ohne Mehrwertsteuer wird eine lokale Steuer erhoben (die lokale Steuer wird auf den Betrag ohne Mehrwertsteuer berechnet)
6: Für Dienstleistungen einschließlich Mehrwertsteuer wird eine lokale Steuer erhoben (die lokale Steuer wird auf den Betrag und die Steuer berechnet). SMS=SMS @@ -624,13 +627,13 @@ Module20000Desc=Verwalten (erstellen, ablehnen, genehmigen) Sie die Urlaubsantr Module39000Name=Chargen- und Seriennummernverwaltung Module39000Desc=Verwaltung von Chargen- und Seriennummern sowie von Haltbarkeits- und Verkaufslimitdatum Module40000Name=Mehrere Währungen -Module40000Desc=Use alternative currencies in prices and documents +Module40000Desc=Nutze alternative Währungen bei Preisen und in Dokumenten Module50000Name=PayBox Module50000Desc=Bieten Sie Ihren Kunden Onlinezahlungen via PayBox an (Kredit- / Debitkarten). Dies kann verwendet werden, um Ihren Kunden Ad-hoc-Zahlungen oder Zahlungen in Bezug auf ein bestimmtes Dolibarr-Objekt (Rechnung, Bestellung usw.) zu ermöglichen. Module50100Name=einfaches POS-Kassensystem Module50100Desc=einfaches POS Kassenmodul (Simple POS) Module50150Name=Kassensystem TakePOS -Module50150Desc=Point of Sale module TakePOS (touchscreen POS). +Module50150Desc=Kassenterminal "TakePOS" (Kassenteminal mit Touchscreen) Module50200Name=PayPal Module50200Desc=Bieten Sie Kunden eine PayPal-Online-Zahlungsseite (PayPal-Konto oder Kredit- / Debitkarten). Dies kann verwendet werden, um Ihren Kunden Ad-hoc-Zahlungen oder Zahlungen in Bezug auf ein bestimmtes Dolibarr-Objekt (Rechnung, Bestellung usw.) zu ermöglichen. Module50300Name=Stripe @@ -668,7 +671,7 @@ Permission32=Produkte/Leistungen erstellen/bearbeiten Permission34=Produkte/Leistungen löschen Permission36=Projekte/Leistungen exportieren Permission38=Produkte exportieren -Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet) +Permission41=Lesen Sie Projekte und Aufgaben (gemeinsames Projekt und Projekte, für die ich Kontakt habe). Kann auch die für mich oder meine Hierarchie verbrauchte Zeit für zugewiesene Aufgaben eingeben (Arbeitszeittabelle) Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks Permission44=Projekte löschen (gemeinsame Projekte und Projekte, in denen ich Ansprechpartner bin) Permission45=Projekte exportieren @@ -719,7 +722,7 @@ Permission147=Statistiken einsehen Permission151=Bestellung mit Zahlart Lastschrift Permission152=Lastschriftaufträge erstellen/bearbeiten Permission153=Bestellungen mit Zahlart Lastschrift übertragen -Permission154=Record Credits/Rejections of direct debit payment orders +Permission154=Gutschriften / Ablehnungen von Lastschrift-Zahlungsaufträgen erfassen Permission161=Verträge/Abonnements einsehen Permission162=Verträge/Abonnements erstellen/bearbeiten Permission163=Service/Abonnement in einem Vertrag aktivieren @@ -819,9 +822,9 @@ Permission532=Leistungen erstellen/bearbeiten Permission534=Leistungen löschen Permission536=Versteckte Leistungen einsehen/verwalten Permission538=Leistungen exportieren -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Spenden anzeigen Permission702=Spenden erstellen/bearbeiten Permission703=Spenden löschen @@ -852,7 +855,7 @@ Permission1182=Lieferantenbestellungen anzeigen Permission1183=Lieferantenbestellungen erstellen/bearbeiten Permission1184=Lieferantenbestellungen freigeben Permission1185=Lieferantenbestellungen bestätigen/genehmigen -Permission1186=Order purchase orders +Permission1186=Lieferantenbestellungen übermitteln Permission1187=Acknowledge receipt of purchase orders Permission1188=Delete purchase orders Permission1190=Approve (second approval) purchase orders @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1134,7 +1137,7 @@ MAIN_MAX_DECIMALS_TOT=Maximale Anzahl an Dezimalstellen für Gesamtsummen MAIN_MAX_DECIMALS_SHOWN=Maximal auf dem Bildschirm angezeigte Anzahl an Dezimalstellen für Preise (Fügen Sie ... nach dieser Nummer ein, wenn Sie ... sehen wollen, falls ein Bildschirmpreis abgeschnitten wurde. MAIN_ROUNDING_RULE_TOT=Step of rounding range (for countries where rounding is done on something other than base 10. For example, put 0.05 if rounding is done by 0.05 steps) UnitPriceOfProduct=Nettostückpreis -TotalPriceAfterRounding=Total price (excl/vat/incl tax) after rounding +TotalPriceAfterRounding=Gesamtpreis (Netto/USt./Brutto) gerundet ParameterActiveForNextInputOnly=Die Einstellungen werden erst bei der nächsten Eingabe wirksam NoEventOrNoAuditSetup=No security event has been logged. This is normal if Audit has not been enabled in the "Setup - Security - Events" page. NoEventFoundWithCriteria=No security event has been found for this search criteria. @@ -1831,7 +1834,7 @@ TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta i BaseCurrency=Unternehmen-Basiswährung (Kann in den Einsttelungen unter Unternehmen verändert werden) WarningNoteModuleInvoiceForFrenchLaw=Dieses Modul %s erfüllt die Französische Gesetzgebung (Loi Finance 2016). WarningNoteModulePOSForFrenchLaw=Modul %s entspricht der französischen Gesetzgebung (Loi Finance 2016), weil das Modul "Unveränderbare Logs" automatisch aktiviert wird. -WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software. +WarningInstallationMayBecomeNotCompliantWithLaw=Sie versuchen, das externe Modul %s zu installieren. Mit der Aktivierung eines externen Moduls vertrauen Sie dem Herausgeber des Moduls und Sie sind sich sicher, dass Ihr System weiterhin die Gesetze Ihres Landes (%s) erfüllt. Falls das Modul Funktionalität bietet, die in Ihrem Land nicht erlaubt sind dann setzen Sie damit illegale Software ein und sind dafür voll verantwortlich. MAIN_PDF_MARGIN_LEFT=Linker Rand im PDF MAIN_PDF_MARGIN_RIGHT=Rechter Rand im PDF MAIN_PDF_MARGIN_TOP=Oberer Rand im PDF @@ -1851,31 +1854,31 @@ ChartLoaded=Chart of account loaded SocialNetworkSetup=Einstellungen vom Modul für Soziale Medien EnableFeatureFor=Aktiviere Features für %s VATIsUsedIsOff=Note: The option to use Sales Tax or VAT has been set to Off in the menu %s - %s, so Sales tax or Vat used will always be 0 for sales. -SwapSenderAndRecipientOnPDF=Swap sender and recipient address position on PDF documents -FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields 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. -EmailCollector=Email collector +SwapSenderAndRecipientOnPDF=Tausche Position der Absender- und Empfängeradresse in PDF-Dokumenten +FeatureSupportedOnTextFieldsOnly=Warnung: Diese Funktion unterstützt nur Textfelder. Außerdem muss der URL-Parameter action=create oder action=edit gesetzt werden ODER der Seitenname muss mit 'new.php' enden, damit diese Funktion ausgelöst wird. +EmailCollector=eMail-Collector EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some records automatically (like leads). -NewEmailCollector=New Email Collector -EMailHost=Host of email IMAP server -MailboxSourceDirectory=Mailbox source directory -MailboxTargetDirectory=Mailbox target directory -EmailcollectorOperations=Operations to do by collector -MaxEmailCollectPerCollect=Max number of emails collected per collect +NewEmailCollector=Neuer eMail-Colletor +EMailHost=Hostname des IMAP-Servers +MailboxSourceDirectory=Quellverzechnis des eMail-Kontos +MailboxTargetDirectory=Zielverzechnis des eMail-Kontos +EmailcollectorOperations=Aktivitäten, die der eMail-Collector ausführen soll +MaxEmailCollectPerCollect=Maximale Anzahl an einzusammelnden eMails je Collect-Vorgang CollectNow=Jetzt abrufen -ConfirmCloneEmailCollector=Are you sure you want to clone the Email collector %s ? -DateLastCollectResult=Date latest collect tried -DateLastcollectResultOk=Date latest collect successfull -LastResult=Latest result -EmailCollectorConfirmCollectTitle=Email collect confirmation -EmailCollectorConfirmCollect=Do you want to run the collection for this collector now ? +ConfirmCloneEmailCollector=Sind Sie sicher, dass Sie den eMail-Collektor %s duplizieren möchten? +DateLastCollectResult=Datum des letzten eMail-Collect-Versuchs +DateLastcollectResultOk=Datum des letzten, erfolgreichen eMail-Collect +LastResult=Letztes Ergebnis +EmailCollectorConfirmCollectTitle=eMail-Collect-Bestätigung +EmailCollectorConfirmCollect=Möchten Sie den Einsammelvorgang für diesen eMail-Collector starten? NoNewEmailToProcess=Keine neue e-Mail (passende Filter) zum Verarbeiten NothingProcessed=Nicht ausgeführt -XEmailsDoneYActionsDone=%s emails qualified, %s emails successfully processed (for %s record/actions done) -RecordEvent=Record email event -CreateLeadAndThirdParty=Create lead (and third party if necessary) -CreateTicketAndThirdParty=Create ticket (and third party if necessary) +XEmailsDoneYActionsDone=%seMails qualifiziert, %seMails erfolgreich verarbeitet (für %sAufzeichnungen/Aktionen durchgeführt) +RecordEvent=eMail-Ereignis aufzeichnen/registrieren +CreateLeadAndThirdParty=als potentiellen Verkaufskontakt anlegen +CreateTicketAndThirdParty=als (Support-)Ticket anlegen CodeLastResult=Letzter Resultatcode -NbOfEmailsInInbox=Number of emails in source directory +NbOfEmailsInInbox=Anzahl eMails im Quellverzeichnis LoadThirdPartyFromName=Load third party searching on %s (load only) LoadThirdPartyFromNameOrCreate=Load third party searching on %s (create if not found) WithDolTrackingID=Dolibarr Tracking ID gefunden @@ -1922,6 +1925,6 @@ IFTTT_DOLIBARR_ENDPOINT_SECUREKEY=Sicherheitsschlüssel zum Schutz der Endpunkt- IFTTTDesc=Dieses Modul wurde entwickelt, um Ereignisse auf IFTTT auszulösen und/oder eine Aktion auf externe IFTTT-Trigger auszuführen. UrlForIFTTT=URL-Endpunkt für IFTTT YouWillFindItOnYourIFTTTAccount=Sie finden es auf Ihrem IFTTTT-Konto. -EndPointFor=End point for %s : %s -DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +EndPointFor=Endpunkt für %s:%s +DeleteEmailCollector=Lösche eMail-Collector +ConfirmDeleteEmailCollector=Sind Sie sicher, dass Sie diesen eMail-Collector löschen wollen? diff --git a/htdocs/langs/de_DE/bills.lang b/htdocs/langs/de_DE/bills.lang index 3a2f1f00e1f..a5809f83189 100644 --- a/htdocs/langs/de_DE/bills.lang +++ b/htdocs/langs/de_DE/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma-Rechnung InvoiceProFormaDesc=Die Proforma-Rechnung ist das Abbild einer echten Rechnung, hat aber keinen buchhalterischen Wert. InvoiceReplacement=Ersatzrechnung InvoiceReplacementAsk=Ersatzrechnung für Rechnung -InvoiceReplacementDesc=Ersatzrechnungen dienen dem Storno und vollständigen Ersatz einer Rechnung ohne bereits erfolgtem Zahlungseingang.

Hinweis: Rechnungen mit Zahlungseingang können nicht ersetzt werden. Falls noch nicht geschlossen, werden ersetzte Rechnungen automatisch als 'Aufgegeben geschlossen' markiert. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Gutschrift InvoiceAvoirAsk=Gutschrift zur Rechnungskorrektur InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/de_DE/companies.lang b/htdocs/langs/de_DE/companies.lang index eb7a7196675..9492897f2b6 100644 --- a/htdocs/langs/de_DE/companies.lang +++ b/htdocs/langs/de_DE/companies.lang @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute Lieferantenrabatte (von allen Benutzer SupplierAbsoluteDiscountMy=Absolute Lieferantenrabatte (durch sie erfasst) DiscountNone=Keine Vendor=Lieferant +Supplier=Lieferant AddContact=Kontakt anlegen AddContactAddress=Kontakt/Adresse anlegen EditContact=Kontakt bearbeiten diff --git a/htdocs/langs/de_DE/other.lang b/htdocs/langs/de_DE/other.lang index b79e8d73ab4..96d28a4bd00 100644 --- a/htdocs/langs/de_DE/other.lang +++ b/htdocs/langs/de_DE/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Anzahl Kundenrechnungen NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Anzahl von Einheiten in Angeboten NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Anzahl von Einheiten in Kundenrechnungen NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=Serviceauftrag %s wurde freigegeben EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/de_DE/website.lang b/htdocs/langs/de_DE/website.lang index a06c0d64103..ec04253430d 100644 --- a/htdocs/langs/de_DE/website.lang +++ b/htdocs/langs/de_DE/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=Bisher wurde noch keine Website erstellt. Erstellen sie GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/de_DE/workflow.lang b/htdocs/langs/de_DE/workflow.lang index 84ac37001a7..2303c72355e 100644 --- a/htdocs/langs/de_DE/workflow.lang +++ b/htdocs/langs/de_DE/workflow.lang @@ -1,20 +1,20 @@ # Dolibarr language file - Source file is en_US - workflow WorkflowSetup=Workflow Moduleinstellungen -WorkflowDesc=This module provides some automatic actions. By default, the workflow is open (you can do things in the order you want) but here you can activate some automatic actions. +WorkflowDesc=Dieses Modul liefert verschiedene, automatisierte Aktionen. Standardmäßig ist der Workflow flexibel (d.h. Sie sind frei in der Reihenfolge der Abarbeitung) aber über diesen Modul können Sie einige Aktionen automatisiert ablaufen lassen. ThereIsNoWorkflowToModify=Es sind keine Workflow-Änderungen möglich mit den aktivierten Modulen. # Autocreate -descWORKFLOW_PROPAL_AUTOCREATE_ORDER=Automatically create a sales order after a commercial proposal is signed (the new order will have same amount as the proposal) -descWORKFLOW_PROPAL_AUTOCREATE_INVOICE=Automatically create a customer invoice after a commercial proposal is signed (the new invoice will have same amount as the proposal) +descWORKFLOW_PROPAL_AUTOCREATE_ORDER=Erstellt automatisch eine Bestellung, nachdem ein Angebot als "unterzeichnet" markiert wurde. Die neue Bestellung hat dann den selben Wert wie das Angebot. +descWORKFLOW_PROPAL_AUTOCREATE_INVOICE=Erstellt automatisch eine Kundenrechnung, nachdem ein Angebot als "unterzeichnet" markiert wurde. Diese neue Kundenrechnung lautet über den selben Betrag wie das Angebot. descWORKFLOW_CONTRACT_AUTOCREATE_INVOICE=Erstelle automatisch eine Kundenrechnung, nachdem der Vertrag bestätigt wurde. -descWORKFLOW_ORDER_AUTOCREATE_INVOICE=Automatically create a customer invoice after a sales order is closed (the new invoice will have same amount as the order) +descWORKFLOW_ORDER_AUTOCREATE_INVOICE=Erstellt automatisch eine Kundenrechnung, nachdem eine Bestellung geschlossen wurde. Die neue Kundenrechnung lautet über den selben Betrag wie die Bestellung. # Autoclassify customer proposal or order -descWORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL=Classify linked source proposal as billed when sales order is set to billed (and if the amount of the order is the same as the total amount of the signed linked proposal) -descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=Classify linked source proposal as billed when customer invoice is validated (and if the amount of the invoice is the same as the total amount of the signed linked proposal) -descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Classify linked source sales order as billed when customer invoice is validated (and if the amount of the invoice is the same as the total amount of the linked order) -descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Classify linked source sales order as billed when customer invoice is set to paid (and if the amount of the invoice is the same as the total amount of the linked order) -descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Classify linked source sales order as shipped when a shipment is validated (and if the quantity shipped by all shipments is the same as in the order to update) +descWORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL=Setzt das entsprechende Angebot auf "abgerechnet", sofern die Kundenbestellung auf "abgerechnet" gesetzt wurde und sofern der Betrag in der Bestellung gleich dem dem Betrag im Angebot ist. +descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=Setzt das verknüpfte Angebot auf "abgerechnet", sofern die Kundenrechnung erstellt wurde und sofern der Rechnungsbetrag identisch zur Angebotsumme ist. +descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Kennzeichne die verknüpfte Kundenbestellung(en) als fakturiert ( = in Rechnung gestellt) sofern die Kundenrechnung als geprüft markiert wurde und die Beträge übereinstimmen. +descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Kennzeichne die verknüpfte Kundenbestellung(en) als fakturiert ( = in Rechnung gestellt) sofern die Kundenrechnung als bezahlt markiert wurde und die Beträge übereinstimmen. +descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Kennzeichne die verknüpften Aufträge als geliefert wenn die Lieferung erfolgt ist (und die Liefermenge der Bestellmenge entspricht). # Autoclassify purchase order -descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Classify linked source vendor proposal as billed when vendor invoice is validated (and if the amount of the invoice is the same as the total amount of the linked proposal) -descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Classify linked source purchase order as billed when vendor invoice is validated (and if the amount of the invoice is the same as the total amount of the linked order) +descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Setzt das verknüpfte Lieferantenangebot auf "abgerechnet", sofern die Lieferanrenrechnung erstellt wurde und sofern der Rechnungsbetrag identisch zur Angebotsumme ist. +descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Kennzeichne die verknüpfte Einkaufsbestellung als abgerechnet wenn die Lieferantenrechnung erstellt wurde und wenn die Beträge überein stimmen. AutomaticCreation=automatische Erstellung AutomaticClassification=Automatische Klassifikation diff --git a/htdocs/langs/el_GR/accountancy.lang b/htdocs/langs/el_GR/accountancy.lang index cda38d3b569..c14fa13dcc9 100644 --- a/htdocs/langs/el_GR/accountancy.lang +++ b/htdocs/langs/el_GR/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/el_GR/admin.lang b/htdocs/langs/el_GR/admin.lang index dd5792b897c..8a86a6f41c5 100644 --- a/htdocs/langs/el_GR/admin.lang +++ b/htdocs/langs/el_GR/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Βιβλιοθήκη δημιουργίας PDF LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Create/modify services Permission534=Delete services Permission536=See/manage hidden services Permission538=Export services -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Read donations Permission702=Δημιουργία / τροποποίηση δωρεές Permission703=Διαγραφή δωρεές @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/el_GR/bills.lang b/htdocs/langs/el_GR/bills.lang index 3ff30a5d4fc..23c3e7a1d6b 100644 --- a/htdocs/langs/el_GR/bills.lang +++ b/htdocs/langs/el_GR/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Προτιμολόγιο InvoiceProFormaDesc=Το Προτιμολόγιο είναι η εικόνα ενός πραγματικού τιμολογίου, χωρίς όμως να έχει χρηματική αξία InvoiceReplacement=Τιμολόγιο Αντικατάστασης InvoiceReplacementAsk=Αντικατάσταση τιμολογίου με -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Πιστωτικό τιμολόγιο InvoiceAvoirAsk=Πιστωτικό τιμολόγιο για την διόρθωση τιμολογίου InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/el_GR/companies.lang b/htdocs/langs/el_GR/companies.lang index a6a81513340..67fadea2908 100644 --- a/htdocs/langs/el_GR/companies.lang +++ b/htdocs/langs/el_GR/companies.lang @@ -28,7 +28,7 @@ AliasNames=Ψευδώνυμο (εμπορικό, εμπορικό σήμα, ...) AliasNameShort=Alias Name Companies=Εταιρίες CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=Καμία Vendor=Vendor +Supplier=Vendor AddContact=Δημιουργία επαφής AddContactAddress=Δημιουργία επαφής/διεύθυνση EditContact=Επεξεργασία επαφής diff --git a/htdocs/langs/el_GR/other.lang b/htdocs/langs/el_GR/other.lang index 53b5bc5a0cc..7d46bb0c404 100644 --- a/htdocs/langs/el_GR/other.lang +++ b/htdocs/langs/el_GR/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=Η %s παρέμβαση έχει επικυρωθεί. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/el_GR/website.lang b/htdocs/langs/el_GR/website.lang index cf8c218f6a8..1307d469d99 100644 --- a/htdocs/langs/el_GR/website.lang +++ b/htdocs/langs/el_GR/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/en_AU/admin.lang b/htdocs/langs/en_AU/admin.lang index f792eabe51a..7b0034e0ce8 100644 --- a/htdocs/langs/en_AU/admin.lang +++ b/htdocs/langs/en_AU/admin.lang @@ -3,5 +3,7 @@ OldVATRates=Old GST rate NewVATRates=New GST rate DictionaryVAT=GST Rates or Sales Tax Rates OptionVatMode=GST due +ListOfNotificationsPerUserOrContact=List of notifications (events) available per user* or per contact** +ListOfFixedNotifications=List of Fixed Notifications LinkColor=Colour of links OperationParamDesc=Define values to use for action, or how to extract values. For example:
objproperty1=SET:abc
objproperty1=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:abc
objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)
options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)
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/en_CA/admin.lang b/htdocs/langs/en_CA/admin.lang index e5e33b73dd6..93fc98ac3e2 100644 --- a/htdocs/langs/en_CA/admin.lang +++ b/htdocs/langs/en_CA/admin.lang @@ -2,5 +2,7 @@ LocalTax1Management=PST Management CompanyZip=Postal code LDAPFieldZip=Postal code +ListOfNotificationsPerUserOrContact=List of notifications (events) available per user* or per contact** +ListOfFixedNotifications=List of Fixed Notifications FormatZip=Postal code OperationParamDesc=Define values to use for action, or how to extract values. For example:
objproperty1=SET:abc
objproperty1=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:abc
objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)
options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)
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/en_GB/accountancy.lang b/htdocs/langs/en_GB/accountancy.lang index ed606456013..ebc1a049f9c 100644 --- a/htdocs/langs/en_GB/accountancy.lang +++ b/htdocs/langs/en_GB/accountancy.lang @@ -83,7 +83,6 @@ ListeMvts=List of transactions ErrorDebitCredit=Debit and Credit fields cannot have values at the same time AddCompteFromBK=Add finance accounts to the group ListAccounts=List of the financial accounts -ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Third-party account not defined or third party unknown. Blocking error. Pcgtype=Group account Pcgsubtype=Subgroup account DescVentilCustomer=View the list of customer invoice lines linked (or not) to a product financial account @@ -115,10 +114,10 @@ ErrorAccountingJournalIsAlreadyUse=This journal is already in use AccountingAccountForSalesTaxAreDefinedInto=Note: Financial account for Sales Tax is defined in menu %s - %s Modelcsv=Example of export Selectmodelcsv=Select an example of export -Modelcsv_FEC=Export FEC (Art. L47 A) ChartofaccountsId=Chart of accounts ID InitAccountancyDesc=This page can be used to create a financial account for products and services that do not have a financial account defined for sales and purchases. DefaultBindingDesc=This page can be used to set a default account for linking transaction records about payments, salaries, donations, taxes and vat when no specific finance account had already been set. +DefaultClosureDesc=This page can be used to set parameters to use to enclose a balance sheet. OptionModeProductSell=Type of sale OptionModeProductBuy=Type of purchase OptionModeProductSellDesc=Show all products with finance accounts for sales. diff --git a/htdocs/langs/en_GB/admin.lang b/htdocs/langs/en_GB/admin.lang index 29af3e502f6..c5e3e488406 100644 --- a/htdocs/langs/en_GB/admin.lang +++ b/htdocs/langs/en_GB/admin.lang @@ -46,5 +46,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 +ListOfNotificationsPerUserOrContact=List of notifications (events) available per user* or per contact** +ListOfFixedNotifications=List of Fixed Notifications FormatZip=Postcode OperationParamDesc=Define values to use for action, or how to extract values. For example:
objproperty1=SET:abc
objproperty1=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:abc
objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)
options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)
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/en_IN/admin.lang b/htdocs/langs/en_IN/admin.lang index e3cc80d5cea..02a8712d64f 100644 --- a/htdocs/langs/en_IN/admin.lang +++ b/htdocs/langs/en_IN/admin.lang @@ -13,5 +13,7 @@ ProposalsNumberingModules=Quotation numbering models ProposalsPDFModules=Quotation documents models FreeLegalTextOnProposal=Free text on quotations WatermarkOnDraftProposal=Watermark on draft quotations (none if empty) +ListOfNotificationsPerUserOrContact=List of notifications (events) available per user* or per contact** +ListOfFixedNotifications=List of Fixed Notifications MailToSendProposal=Customer quotations OperationParamDesc=Define values to use for action, or how to extract values. For example:
objproperty1=SET:abc
objproperty1=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:abc
objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)
options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)
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/es_CL/accountancy.lang b/htdocs/langs/es_CL/accountancy.lang index 24bccccfe21..e2157b1e314 100644 --- a/htdocs/langs/es_CL/accountancy.lang +++ b/htdocs/langs/es_CL/accountancy.lang @@ -24,15 +24,20 @@ AssignDedicatedAccountingAccount=Nueva cuenta para asignar InvoiceLabel=Etiqueta de factura OverviewOfAmountOfLinesNotBound=Descripción general de la cantidad de líneas no vinculadas a una cuenta de contabilidad OverviewOfAmountOfLinesBound=Descripción general de la cantidad de líneas ya vinculadas a una cuenta de contabilidad +ConfirmDeleteCptCategory=¿Está seguro de que desea eliminar esta cuenta contable del grupo de cuentas contables? JournalizationInLedgerStatus=Estado de la periodización AlreadyInGeneralLedger=Ya se ha contabilizado en libros mayores NotYetInGeneralLedger=Aún no se ha contabilizado en libros mayores GroupIsEmptyCheckSetup=El grupo está vacío, verifique la configuración del grupo de contabilidad personalizado DetailByAccount=Mostrar detalles por cuenta +AccountWithNonZeroValues=Cuentas con valores distintos de cero. +CountriesInEECExceptMe=Países en EEC excepto %s +AccountantFiles=Documentos contables de exportación MainAccountForCustomersNotDefined=Cuenta de contabilidad principal para los clientes no definidos en la configuración MainAccountForSuppliersNotDefined=Cuenta de contabilidad principal para proveedores no definidos en la configuración MainAccountForUsersNotDefined=Cuenta de contabilidad principal para los usuarios no definidos en la configuración MainAccountForVatPaymentNotDefined=Cuenta de contabilidad principal para el pago de IVA no definido en la configuración +MainAccountForSubscriptionPaymentNotDefined=Cuenta contable principal para el pago de suscripción no definido en la configuración AccountancyArea=Área de contabilidad AccountancyAreaDescActionOnce=Las siguientes acciones generalmente se ejecutan una sola vez o una vez al año ... AccountancyAreaDescActionOnceBis=Deben seguirse los pasos para ahorrarle tiempo en el futuro al sugerirle la cuenta de contabilidad predeterminada correcta al hacer la publicación (registro de escritura en Revistas y Libro mayor) @@ -44,7 +49,9 @@ AccountancyAreaDescVat=PASO %s: Defina cuentas contables para cada tasa de IVA. AccountancyAreaDescDefault=PASO %s: Defina cuentas de contabilidad predeterminadas. Para esto, use la entrada del menú %s. AccountancyAreaDescExpenseReport=PASO %s: Defina las cuentas de contabilidad predeterminadas para cada tipo de informe de gastos. Para esto, use la entrada del menú %s. AccountancyAreaDescSal=PASO %s: Defina cuentas de contabilidad predeterminadas para el pago de salarios. Para esto, use la entrada del menú %s. +AccountancyAreaDescContrib=PASO %s: Defina cuentas de contabilidad predeterminadas para gastos especiales (impuestos diversos). Para esto, use la entrada de menú %s. AccountancyAreaDescDonation=PASO %s: Defina las cuentas de contabilidad predeterminadas para la donación. Para esto, use la entrada del menú %s. +AccountancyAreaDescSubscription=PASO %s: Defina cuentas de contabilidad predeterminadas para la suscripción de miembros. Para esto, use la entrada de menú %s. AccountancyAreaDescMisc=PASO %s: Defina la cuenta predeterminada obligatoria y cuentas de contabilidad predeterminadas para transacciones misceláneas. Para esto, use la entrada del menú %s. AccountancyAreaDescLoan=PASO %s: defina cuentas de contabilidad predeterminadas para préstamos. Para esto, use la entrada del menú %s. AccountancyAreaDescBank=PASO %s: Defina las cuentas de contabilidad y el código del diario para cada banco y cuenta financiera. Para esto, use la entrada del menú %s. @@ -56,20 +63,26 @@ AccountancyAreaDescClosePeriod=PASO %s: Cierre el período para que no podamos r TheJournalCodeIsNotDefinedOnSomeBankAccount=Un paso obligatorio en la configuración no fue completo (diario de códigos de contabilidad no definido para todas las cuentas bancarias) Selectchartofaccounts=Seleccione gráfico de cuentas activo Addanaccount=Agregar cuenta contable +SubledgerAccount=Cuenta auxiliar +SubledgerAccountLabel=Etiqueta de cuenta de libro auxiliar ShowAccountingAccount=Mostrar cuenta contable MenuDefaultAccounts=Cuentas predeterminadas MenuBankAccounts=cuentas bancarias MenuTaxAccounts=Cuentas fiscales MenuExpenseReportAccounts=Cuentas de informe de gastos MenuProductsAccounts=Cuentas de productos +MenuClosureAccounts=Cuentas de cierre +Binding=Vinculante a las cuentas CustomersVentilation=Encuadernación de factura del cliente SuppliersVentilation=Encuadernación de factura del proveedor ExpenseReportsVentilation=Encuadernación del informe de gastos CreateMvts=Crear nueva transacción UpdateMvts=Modificación de una transacción ValidTransaction=Validar transacción +WriteBookKeeping=Registrar transacciones en Ledger Bookkeeping=Libro mayor ObjectsRef=Referencia de objeto de origen +CAHTF=Total vendedor comprado antes de impuestos TotalExpenseReport=Informe de gastos totales InvoiceLines=Líneas de facturas para enlazar InvoiceLinesDone=Líneas de facturas encuadernadas @@ -85,31 +98,44 @@ VentilatedinAccount=Vinculado exitosamente a la cuenta de contabilidad NotVentilatedinAccount=No vinculado a la cuenta de contabilidad XLineSuccessfullyBinded=%s productos / servicios vinculados con éxito a una cuenta de contabilidad XLineFailedToBeBinded=%s productos / servicios no estaban vinculados a ninguna cuenta de contabilidad +ACCOUNTING_LIMIT_LIST_VENTILATION=Número de elementos a enlazar mostrados por página (máximo recomendado: 50) ACCOUNTING_LIST_SORT_VENTILATION_TODO=Comience la clasificación de la página "Encuadernación para hacer" por los elementos más recientes ACCOUNTING_LIST_SORT_VENTILATION_DONE=Comience la clasificación de la página "Encuadernación realizada" por los elementos más recientes ACCOUNTING_LENGTH_DESCRIPTION=Truncar descripción de productos y servicios en listados después de x caracteres (Mejor = 50) ACCOUNTING_LENGTH_DESCRIPTION_ACCOUNT=Truncar formulario de descripción de cuenta de productos y servicios en listados después de x caracteres (Mejor = 50) ACCOUNTING_LENGTH_GACCOUNT=Longitud de las cuentas de contabilidad generales (si establece el valor en 6 aquí, la cuenta '706' aparecerá como '706000' en la pantalla) +ACCOUNTING_LENGTH_AACCOUNT=Longitud de las cuentas contables de terceros (si establece el valor en 6 aquí, la cuenta '401' aparecerá como '401000' en la pantalla) +ACCOUNTING_MANAGE_ZERO=Permite administrar un número diferente de ceros al final de una cuenta contable. Necesitado por algunos países (como Suiza). Si está desactivado (predeterminado), puede configurar los dos parámetros siguientes para solicitar a la aplicación que agregue ceros virtuales. BANK_DISABLE_DIRECT_INPUT=Deshabilitar la grabación directa de transacciones en cuenta bancaria ACCOUNTING_ENABLE_EXPORT_DRAFT_JOURNAL=Habilitar exportación de borrador en diario +ACCOUNTANCY_COMBO_FOR_AUX=Habilitar la lista combinada para la cuenta subsidiaria (puede ser lenta si tiene muchos terceros) ACCOUNTING_SELL_JOURNAL=Libro de ventas ACCOUNTING_MISCELLANEOUS_JOURNAL=Diario misceláneo ACCOUNTING_EXPENSEREPORT_JOURNAL=Diario del informe de gastos +ACCOUNTING_RESULT_PROFIT=Cuenta contable de resultados (beneficio) +ACCOUNTING_RESULT_LOSS=Cuenta contable de resultados (pérdida) +ACCOUNTING_ACCOUNT_TRANSFER_CASH=Cuenta contable de transferencia bancaria transitoria. ACCOUNTING_ACCOUNT_SUSPENSE=Cuenta de contabilidad de espera DONATION_ACCOUNTINGACCOUNT=Cuenta de contabilidad para registrar donaciones +ADHERENT_SUBSCRIPTION_ACCOUNTINGACCOUNT=Cuenta contable para registrar suscripciones. ACCOUNTING_PRODUCT_BUY_ACCOUNT=Cuenta de contabilidad por defecto para productos comprados (se usa si no está definido en la hoja del producto) ACCOUNTING_PRODUCT_SOLD_ACCOUNT=Cuenta de contabilidad por defecto para los productos vendidos (utilizada si no está definida en la hoja del producto) +ACCOUNTING_PRODUCT_SOLD_INTRA_ACCOUNT=Cuenta contable por defecto para los productos vendidos en EEC (usado si no está definido en la hoja del producto) +ACCOUNTING_PRODUCT_SOLD_EXPORT_ACCOUNT=Cuenta contable por defecto para la exportación de productos vendidos fuera de la CEE (se usa si no se define en la hoja del producto) ACCOUNTING_SERVICE_BUY_ACCOUNT=Cuenta de contabilidad por defecto para los servicios comprados (se usa si no se define en la hoja de servicio) ACCOUNTING_SERVICE_SOLD_ACCOUNT=Cuenta de contabilidad por defecto para los servicios vendidos (utilizada si no está definida en la hoja de servicio) LabelAccount=Cuenta LabelOperation=Operación de etiqueta Sens=Significado +LetteringCode=Codigo de letras +JournalLabel=Etiqueta de revista NumPiece=Pieza número TransactionNumShort=Num. transacción AccountingAccountGroupsDesc=Puede definir aquí algunos grupos de cuentas contables. Se usarán para informes de contabilidad personalizados. DeleteMvt=Eliminar líneas de libro mayor DelYear=Año para borrar DelJournal=Diario para eliminar +ConfirmDeleteMvt=Esto eliminará todas las líneas del Libro mayor por año y / o de una revista específica. Se requiere al menos un criterio. FinanceJournal=Diario de finanzas ExpenseReportsJournal=Diario de informes de gastos DescFinanceJournal=Diario financiero que incluye todos los tipos de pagos por cuenta bancaria @@ -120,28 +146,40 @@ ProductAccountNotDefined=Cuenta para producto no definido FeeAccountNotDefined=Cuenta por tarifa no definida BankAccountNotDefined=Cuenta bancaria no definida CustomerInvoicePayment=Pago de factura de cliente +ThirdPartyAccount=Cuenta de terceros NewAccountingMvt=Nueva transacción NumMvts=Numero de transacciones ListeMvts=Lista de movimientos ErrorDebitCredit=Débito y crédito no pueden tener el mismo valor AddCompteFromBK=Agregar cuentas de contabilidad al grupo +ReportThirdParty=Lista de cuenta de terceros +DescThirdPartyReport=Consulte aquí la lista de proveedores y clientes externos y sus cuentas contables. ListAccounts=Lista de cuentas contables -ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Third-party account not defined or third party unknown. Blocking error. +UnknownAccountForThirdparty=Cuenta de terceros desconocida. Usaremos %s +UnknownAccountForThirdpartyBlocking=Cuenta de terceros desconocida. Error de bloqueo +ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Cuenta de terceros no definida o tercero desconocido. Usaremos %s +ThirdpartyAccountNotDefinedOrThirdPartyUnknownBlocking=Cuenta de terceros no definida o tercero desconocido. Error de bloqueo. +UnknownAccountForThirdpartyAndWaitingAccountNotDefinedBlocking=Cuenta de terceros desconocida y cuenta de espera no definida. Error de bloqueo PaymentsNotLinkedToProduct=Pago no vinculado a ningún producto / servicio +PcgtypeDesc=El grupo y el subgrupo de cuenta se utilizan como criterios predefinidos de "filtro" y "agrupación" para algunos informes contables. Por ejemplo, 'INGRESOS' o 'GASTOS' se utilizan como grupos para cuentas contables de productos para generar el informe de gastos / ingresos. TotalVente=Volumen de negocios total antes de impuestos TotalMarge=Margen total de ventas DescVentilCustomer=Consulte aquí la lista de líneas de facturación de clientes vinculadas (o no) a una cuenta de contabilidad de producto +DescVentilMore=En la mayoría de los casos, si utiliza productos o servicios predefinidos y configura el número de cuenta en la tarjeta de producto / servicio, la aplicación podrá hacer todo el enlace entre sus líneas de factura y la cuenta contable de su plan de cuentas, solo en un clic con el botón "%s" . Si la cuenta no se configuró en las tarjetas de producto / servicio o si todavía tiene algunas líneas que no están vinculadas a una cuenta, deberá realizar un enlace manual desde el menú " %s ". DescVentilDoneCustomer=Consulte aquí la lista de las líneas de clientes de facturas y su cuenta de contabilidad de productos DescVentilTodoCustomer=Vincular líneas de factura que ya no están vinculadas con una cuenta de contabilidad de producto ChangeAccount=Cambie la cuenta de contabilidad de producto / servicio para líneas seleccionadas con la siguiente cuenta de contabilidad: DescVentilSupplier=Consulte aquí la lista de líneas de facturación de proveedores vinculadas o aún no vinculadas a una cuenta de contabilidad de productos +DescVentilDoneSupplier=Consulte aquí la lista de las líneas de facturas de proveedores y sus cuentas contables. DescVentilTodoExpenseReport=Vincular las líneas de informe de gastos que ya no están vinculadas con una cuenta de contabilidad de tarifas DescVentilExpenseReport=Consulte aquí la lista de líneas de informe de gastos vinculadas (o no) a una cuenta de contabilidad de tasas +DescVentilExpenseReportMore=Si configura una cuenta contable en el tipo de líneas de informe de gastos, la aplicación podrá hacer todo el enlace entre sus líneas de informe de gastos y la cuenta contable de su plan de cuentas, solo con un clic con el botón "%s" . Si la cuenta no se estableció en el diccionario de tarifas o si todavía tiene algunas líneas no vinculadas a ninguna cuenta, deberá realizar un enlace manual desde el menú " %s ". DescVentilDoneExpenseReport=Consulte aquí la lista de las líneas de informes de gastos y su cuenta de contabilidad de tarifas ValidateHistory=Enlazar automáticamente AutomaticBindingDone=Encuadernación automática hecha ErrorAccountancyCodeIsAlreadyUse=No puede eliminar esta cuenta porque está siendo usada MvtNotCorrectlyBalanced=El movimiento no está correctamente equilibrado. Débito = %s | Crédito = %s +Balancing=Equilibrio FicheVentilation=Tarjeta de enlace GeneralLedgerIsWritten=Las transacciones se escriben en el Libro mayor GeneralLedgerSomeRecordWasNotRecorded=Algunas de las transacciones no pueden ser contabilizadas. Si no hay otro mensaje de error, esto es probablemente porque ya estaban en el diario. @@ -151,6 +189,7 @@ ChangeBinding=Cambiar la encuadernación Accounted=Contabilizado en el libro mayor NotYetAccounted=Aún no contabilizado en el libro mayor ApplyMassCategories=Aplicar categorías de masa +AddAccountFromBookKeepingWithNoCategories=Cuenta disponible aún no en el grupo personalizado. CategoryDeleted=La categoría de la cuenta de contabilidad ha sido eliminada AccountingJournals=Libros contables AccountingJournal=Diario de contabilidad @@ -162,25 +201,42 @@ AccountingAccountForSalesTaxAreDefinedInto=Nota: La cuenta de contabilidad para ExportDraftJournal=Exportar borrador del diario Selectmodelcsv=Seleccione un modelo Modelcsv_normal=Exportación clasica -Modelcsv_FEC=Export FEC (Art. L47 A) +Modelcsv_CEGID=Exportación para Comptabilité Experto CEGID +Modelcsv_COALA=Exportación para Salvia Coala +Modelcsv_bob50=Exportación para Sage BOB 50 +Modelcsv_ciel=Exportación para Sage Ciel Compta o Compta Evolution +Modelcsv_quadratus=Exportar para Quadratus QuadraCompta +Modelcsv_ebp=Exportación para EBP +Modelcsv_cogilog=Exportación para Cogilog +Modelcsv_agiris=Exportación para Agiris +Modelcsv_openconcerto=Exportar para OpenConcerto (Prueba) +Modelcsv_configurable=Exportar CSV Configurable +Modelcsv_Sage50_Swiss=Exportación para Sage 50 Suiza ChartofaccountsId=Plan de cuentas Id InitAccountancy=Contabilidad inicial InitAccountancyDesc=Esta página se puede usar para inicializar una cuenta de contabilidad en productos y servicios que no tienen una cuenta de contabilidad definida para ventas y compras. DefaultBindingDesc=Esta página se puede usar para establecer una cuenta predeterminada que se usará para vincular el registro de transacciones sobre los salarios de pago, donaciones, impuestos y IVA cuando no se haya establecido una cuenta contable específica. OptionModeProductSell=Ventas de modo +OptionModeProductSellIntra=Venta de modo exportado en EEC. +OptionModeProductSellExport=Venta de modo exportado en otros países. OptionModeProductBuy=Compras de modo OptionModeProductSellDesc=Mostrar todos los productos con cuenta de contabilidad para ventas. +OptionModeProductSellIntraDesc=Mostrar todos los productos con cuenta contable para ventas en EEC. OptionModeProductBuyDesc=Mostrar todos los productos con cuenta de contabilidad para compras. CleanFixHistory=Eliminar el código de contabilidad de las líneas que no existen en los cuadros de cuentas CleanHistory=Restablecer todas las vinculaciones para el año seleccionado PredefinedGroups=Grupos predefinidos ValueNotIntoChartOfAccount=Este valor de la cuenta de contabilidad no existe en el cuadro de cuentas +SaleEEC=Venta en EEC SomeMandatoryStepsOfSetupWereNotDone=Algunos pasos obligatorios de configuración no se hicieron, por favor complételos ErrorNoAccountingCategoryForThisCountry=No hay un grupo de cuenta contable disponible para el país %s (Consulte Inicio - Configuración - Diccionarios) ErrorInvoiceContainsLinesNotYetBounded=Intenta hacer un diario de algunas líneas de la factura %s , pero algunas otras líneas aún no están limitadas a la cuenta de contabilidad. Se rechaza la periodización de todas las líneas de factura para esta factura. ErrorInvoiceContainsLinesNotYetBoundedShort=Algunas líneas en la factura no están vinculadas a la cuenta contable. ExportNotSupported=El formato de exportación establecido no es compatible con esta página +BookeppingLineAlreayExists=Líneas ya existentes en la contabilidad. Binded=Líneas atadas ToBind=Líneas para enlazar +UseMenuToSetBindindManualy=Líneas aún no enlazadas, use el menú %s para hacer el enlace manualmente +WarningReportNotReliable=Advertencia, este informe no se basa en el Libro mayor, por lo que no contiene la transacción modificada manualmente en el Libro mayor. Si su publicación está actualizada, la vista de contabilidad es más precisa. ExpenseReportJournal=Diario del informe de gastos InventoryJournal=Revista de inventario diff --git a/htdocs/langs/es_CL/admin.lang b/htdocs/langs/es_CL/admin.lang index 6a15d209266..7e164b901b1 100644 --- a/htdocs/langs/es_CL/admin.lang +++ b/htdocs/langs/es_CL/admin.lang @@ -4,7 +4,10 @@ VersionLastInstall=Versión de instalación inicial VersionLastUpgrade=Versión de actualización más reciente. VersionUnknown=Desconocido VersionRecommanded=Recomendado +FileCheck=Comprobaciones de integridad del conjunto de archivos +FileCheckDesc=Esta herramienta le permite verificar la integridad de los archivos y la configuración de su aplicación, comparando cada archivo con el oficial. También se puede verificar el valor de algunas constantes de configuración. Puede usar esta herramienta para determinar si algún archivo ha sido modificado (por ejemplo, por un hacker). FileIntegrityIsStrictlyConformedWithReference=La integridad de los archivos está estrictamente conformada con la referencia. +FileIntegrityIsOkButFilesWereAdded=La verificación de integridad de los archivos ha pasado, sin embargo, se han agregado algunos archivos nuevos. FileIntegritySomeFilesWereRemovedOrModified=La verificación de la integridad de los archivos ha fallado. Algunos archivos fueron modificados, eliminados o agregados. MakeIntegrityAnalysisFrom=Haga un análisis de integridad de los archivos de la aplicación desde LocalSignature=Firma local incorporada (menos confiable) @@ -12,13 +15,19 @@ RemoteSignature=Firma distante remota (más confiable) FilesMissing=Archivos perdidos FilesAdded=Archivos agregados FileCheckDolibarr=Verificar la integridad de los archivos de la aplicación +AvailableOnlyOnPackagedVersions=El archivo local para la verificación de integridad solo está disponible cuando la aplicación se instala desde un paquete oficial XmlNotFound=Xml Integrity Archivo de la aplicación no encontrado SessionId=ID de sesión SessionSaveHandler=Handler para guardar sesiones +SessionSavePath=Ubicación de guardado de sesión ConfirmPurgeSessions=¿De verdad quieres purgar todas las sesiones? Esto desconectará a todos los usuarios (excepto usted). +NoSessionListWithThisHandler=Guardar el controlador de sesión configurado en su PHP no permite enumerar todas las sesiones en ejecución. +ConfirmLockNewSessions=¿Estás seguro de que deseas restringir cualquier nueva conexión de Dolibarr a ti mismo? Solo el usuario %s podrá conectarse después de eso. UnlockNewSessions=Eliminar bloqueo de conexión YourSession=Tu sesión +Sessions=Sesiones de Usuarios WebUserGroup=Usuario / grupo del servidor web +NoSessionFound=Su configuración de PHP parece no permitir el listado de sesiones activas. El directorio utilizado para guardar sesiones ( %s ) puede estar protegido (por ejemplo, por permisos del sistema operativo o por la directiva PHP open_basedir). DBStoringCharset=Juego de caracteres de base de datos para almacenar datos DBSortingCharset=Juego de caracteres de base de datos para ordenar los datos WarningModuleNotActive=El módulo %s debe estar habilitado. @@ -29,6 +38,8 @@ SetupArea=Configurar UploadNewTemplate=Cargar nueva plantilla (s) FormToTestFileUploadForm=Formulario para probar la carga del archivo (según la configuración) IfModuleEnabled=Nota: sí es efectivo solo si el módulo %s está habilitado +RemoveLock=Elimine / rename el archivo %s si existe, para permitir el uso de la herramienta Actualizar / Instalar. +RestoreLock=Restaure el archivo %s , solo con permiso de lectura, para deshabilitar cualquier uso posterior de la herramienta Actualizar / Instalar. SecuritySetup=Configuración de seguridad SecurityFilesDesc=Define aquí las opciones relacionadas con la seguridad sobre la carga de archivos. ErrorModuleRequirePHPVersion=Error, este módulo requiere PHP versión %s o superior @@ -36,8 +47,15 @@ ErrorModuleRequireDolibarrVersion=Error, este módulo requiere Dolibarr versión ErrorDecimalLargerThanAreForbidden=Error, una precisión superior a %s no es compatible. DictionarySetup=Configuración del diccionario ErrorReservedTypeSystemSystemAuto=El valor 'sistema' y 'systemauto' para el tipo está reservado. Puede usar 'user' como valor para agregar su propio registro +DisableJavascript=Deshabilitar las funciones de JavaScript y Ajax +DisableJavascriptNote=Nota: Para propósitos de prueba o depuración. Para la optimización para personas ciegas o navegadores de texto, es posible que prefiera utilizar la configuración en el perfil del usuario. UseSearchToSelectCompanyTooltip=Además, si tiene un gran número de terceros (> 100 000), puede aumentar la velocidad estableciendo constante COMPANY_DONOTSEARCH_ANYWHERE en 1 en Configuración-> Otro. La búsqueda se limitará al inicio de la cadena. UseSearchToSelectContactTooltip=Además, si tiene un gran número de terceros (> 100 000), puede aumentar la velocidad estableciendo CONTACT_DONOTSEARCH_ANYWHERE constante en 1 en Configuración-> Otro. La búsqueda se limitará al inicio de la cadena. +DelaiedFullListToSelectCompany=Espere hasta que se presione una tecla antes de cargar el contenido de la lista de combo de Terceros.
Esto puede aumentar el rendimiento si tiene un gran número de terceros, pero es menos conveniente. +DelaiedFullListToSelectContact=Espere hasta que se presione una tecla antes de cargar el contenido de la lista de combo de contactos.
Esto puede aumentar el rendimiento si tiene una gran cantidad de contactos, pero es menos conveniente. +NumberOfKeyToSearch=Número de caracteres para activar la búsqueda: %s +NumberOfBytes=Número de bytes +SearchString=Cadena de búsqueda NotAvailableWhenAjaxDisabled=No disponible cuando Ajax está deshabilitado AllowToSelectProjectFromOtherCompany=En el documento de un tercero, puede elegir un proyecto vinculado a otro tercero JavascriptDisabled=JavaScript deshabilitado @@ -45,12 +63,14 @@ UsePreviewTabs=Usa pestañas de vista previa ShowPreview=Mostrar vista previa CurrentTimeZone=TimeZone PHP (servidor) MySQLTimeZone=TimeZone MySql (base de datos) +TZHasNoEffect=Las fechas son almacenadas y devueltas por el servidor de bases de datos como si se mantuvieran como una cadena enviada. La zona horaria tiene efecto solo cuando se usa la función UNIX_TIMESTAMP (que no debe ser utilizada por Dolibarr, por lo que la base de datos TZ no debería tener ningún efecto, incluso si se cambia después de ingresar los datos). Space=Espacio NextValue=Siguiente valor NextValueForInvoices=Siguiente valor (facturas) NextValueForCreditNotes=Siguiente valor (notas de crédito) NextValueForDeposit=Siguiente valor (pago inicial) NextValueForReplacements=Siguiente valor (reemplazos) +MustBeLowerThanPHPLimit=Nota: su configuración de PHP actualmente limita el tamaño de archivo máximo para cargar %s %s, independientemente del valor de este parámetro NoMaxSizeByPHPLimit=Nota: no hay límite establecido en su configuración de PHP MaxSizeForUploadedFiles=Tamaño máximo para los archivos cargados (0 para no permitir ninguna carga) UseCaptchaCode=Use el código gráfico (CAPTCHA) en la página de inicio de sesión @@ -65,6 +85,7 @@ DetailPosition=Ordenar número para definir la posición del menú AllMenus=Todo NotConfigured=Módulo / Aplicación no configurada SetupShort=Configurar +OtherSetup=Otra configuración CurrentValueSeparatorThousand=Mil separadores Destination=Destino IdModule=ID del módulo @@ -77,14 +98,20 @@ PHPTZ=Servidor PHP Zona horaria DaylingSavingTime=Horario de verano CurrentHour=Tiempo de PHP (servidor) CurrentSessionTimeOut=Tiempo de espera actual de la sesión +YouCanEditPHPTZ=Para configurar una zona horaria de PHP diferente (no es necesario), puede intentar agregar un archivo .htaccess con una línea como esta "SetEnv TZ Europe / Paris" +HoursOnThisPageAreOnServerTZ=La advertencia, a diferencia de otras pantallas, las horas en esta página no se encuentran en su zona horaria local, sino de la zona horaria del servidor. +MaxNbOfLinesForBoxes=Max. número de líneas para widgets PositionByDefault=Orden predeterminada MenusDesc=Los administradores de menú establecen el contenido de las dos barras de menú (horizontal y vertical). MenusEditorDesc=El editor de menú le permite definir entradas de menú personalizadas. Úselo con cuidado para evitar la inestabilidad y las entradas de menú permanentemente inalcanzables.
Algunos módulos agregan entradas de menú (en el menú Todo principalmente). Si elimina algunas de estas entradas por error, puede restablecerlas deshabilitando y volviendo a habilitar el módulo. MenuForUsers=Menú para usuarios +Language_en_US_es_MX_etc=Idioma (en_US, es_MX, ...) SystemInfo=Información del sistema SystemToolsArea=Área de herramientas del sistema +SystemToolsAreaDesc=Esta área proporciona funciones de administración. Utilice el menú para elegir la función requerida. +PurgeAreaDesc=Esta página le permite eliminar todos los archivos generados o almacenados por Dolibarr (archivos temporales o todos los archivos en el directorio %s ). Usando esta característica normalmente no es necesario. Se proporciona como una solución para los usuarios cuyo Dolibarr está alojado por un proveedor que no ofrece permisos para eliminar archivos generados por el servidor web. PurgeDeleteLogFile=Eliminar archivos de registro, incluido %s definido para el módulo Syslog (sin riesgo de perder datos) -PurgeDeleteTemporaryFiles=Eliminar todos los archivos temporales (sin riesgo de perder datos) +PurgeDeleteAllFilesInDocumentsDir=Eliminar todos los archivos en el directorio: %s .
Esto eliminará todos los documentos generados relacionados con elementos (terceros, facturas, etc.), archivos cargados en el módulo ECM, volcados de copia de seguridad de bases de datos y archivos temporales. PurgeRunNow=Purgar ahora PurgeNothingToDelete=Sin directorio o archivos para eliminar. PurgeNDirectoriesDeleted=%s archivos o directorios eliminados. @@ -95,9 +122,12 @@ Backup=Respaldo Restore=Restaurar RunCommandSummary=La copia de seguridad se ha lanzado con el siguiente comando BackupFileSuccessfullyCreated=Archivo de respaldo generado con éxito +YouCanDownloadBackupFile=El archivo generado ahora se puede descargar NoBackupFileAvailable=No hay archivos de respaldo disponibles. ToBuildBackupFileClickHere=Para crear un archivo de copia de seguridad, haga clic aquí . +ImportMySqlDesc=Para importar un archivo de copia de seguridad de MySQL, puede usar phpMyAdmin a través de su alojamiento o usar el comando mysql desde la línea de comandos.
Por ejemplo: ImportPostgreSqlDesc=Para importar un archivo de copia de seguridad, debe usar el comando pg_restore desde la línea de comando: +FileNameToGenerate=Nombre de archivo para copia de seguridad: CommandsToDisableForeignKeysForImport=Comando para desactivar claves externas en la importación CommandsToDisableForeignKeysForImportWarning=Obligatorio si desea poder restaurar su volcado sql más tarde MySqlExportParameters=Parámetros de exportación de MySQL @@ -115,14 +145,22 @@ IgnoreDuplicateRecords=Ignorar errores de registro duplicado (INSERTAR IGNORAR) AutoDetectLang=Autodetectar (idioma del navegador) FeatureDisabledInDemo=Característica deshabilitada en demostración FeatureAvailableOnlyOnStable=Característica solo disponible en versiones estables oficiales +BoxesDesc=Los widgets son componentes que muestran información que puede agregar para personalizar algunas páginas. Puede elegir entre mostrar el widget o no seleccionando la página de destino y haciendo clic en 'Activar', o haciendo clic en la papelera para deshabilitarla. OnlyActiveElementsAreShown=Solo se muestran los elementos de los módulos habilitados . +ModulesDesc=Los módulos / aplicaciones determinan qué funciones están disponibles en el software. Algunos módulos requieren que se otorguen permisos a los usuarios después de activar el módulo. Haga clic en el botón de encendido / apagado (al final de la línea del módulo) para habilitar / deshabilitar un módulo / aplicación. +ModulesDeployDesc=Si los permisos en su sistema de archivos lo permiten, puede utilizar esta herramienta para implementar un módulo externo. El módulo será visible en la pestaña %s . ModulesMarketPlaces=Buscar aplicaciones / módulos externos ModulesDevelopYourModule=Desarrolla tu propia aplicación / módulos +ModulesDevelopDesc=También puede desarrollar su propio módulo o encontrar un socio para desarrollar uno para usted. +DOLISTOREdescriptionLong=En lugar de activar el sitio web www.dolistore.com para encontrar un módulo externo, puede utilizar esta herramienta integrada que realizará la búsqueda en el mercado externo para usted (puede ser lento, necesita un acceso a Internet) ... NotCompatible=Este módulo no parece compatible con su Dolibarr %s (Min. %s - Max. %s). CompatibleAfterUpdate=Este módulo requiere una actualización de su Dolibarr %s (Min. %s - Max. %s). SeeInMarkerPlace=Ver en Market place AchatTelechargement=Compra / Descarga +GoModuleSetupArea=Para implementar / instalar un nuevo módulo, vaya al área de configuración del módulo: %s . DoliStoreDesc=DoliStore, el mercado oficial para los módulos externos Dolibarr ERP / CRM +DoliPartnersDesc=Lista de empresas que ofrecen módulos o características desarrollados a medida.
Nota: dado que Dolibarr es una aplicación de código abierto, cualquier persona con experiencia en programación PHP puede desarrollar un módulo. +WebSiteDesc=Sitios web externos para más módulos complementarios (no principales) ... URL=Enlazar BoxesAvailable=Widgets disponibles BoxesActivated=Widgets activados @@ -131,8 +169,11 @@ SourceFile=Archivo fuente AvailableOnlyIfJavascriptAndAjaxNotDisabled=Disponible solo si JavaScript no está deshabilitado Required=Necesario UsedOnlyWithTypeOption=Usado solo por alguna opción de agenda +DoNotStoreClearPassword=Cifre las contraseñas almacenadas en la base de datos (NO como texto sin formato). Se recomienda encarecidamente activar esta opción. +MainDbPasswordFileConfEncrypted=Cifra la contraseña de la base de datos almacenada en conf.php. Se recomienda encarecidamente activar esta opción. InstrucToEncodePass=Para codificar la contraseña en el archivo conf.php, reemplace la línea
$dolibarr_main_db_pass="...";
por
$dolibarr_main_db_pass="crypted:%s"; InstrucToClearPass=Para decodificar la contraseña (elimina) en el archivo conf.php, reemplace la línea
$dolibarr_main_db_pass="crypted: ...";
por
$dolibarr_main_db_pass="%s"; +ProtectAndEncryptPdfFiles=Proteger los archivos PDF generados. Esto NO se recomienda ya que rompe la generación de PDF a granel. ProtectAndEncryptPdfFilesDesc=La protección de un documento PDF lo mantiene disponible para leer e imprimir con cualquier navegador PDF. Sin embargo, la edición y copia ya no es posible. Tenga en cuenta que el uso de esta característica hace que la creación de un archivo PDF global fusionado no funcione. Feature=Característica Developpers=Desarrolladores / contribuyentes @@ -142,29 +183,64 @@ OfficialWebHostingService=Servicios de alojamiento web a los que se hace referen ReferencedPreferredPartners=Socios Preferidos ForDocumentationSeeWiki=Para documentación del usuario o desarrollador (Doc, Preguntas frecuentes ...),
echa un vistazo a la Wiki de Dolibarr:
%s ForAnswersSeeForum=Para cualquier otra pregunta/ayuda, puede utilizar el foro de Dolibarr:
%s +HelpCenterDesc1=Aquí hay algunos recursos para obtener ayuda y apoyo con Dolibarr. +HelpCenterDesc2=Algunos de estos recursos solo están disponibles en inglés . CurrentMenuHandler=Manejador de menú actual SpaceX=Espacio X SpaceY=Espacio Y Emails=Correos electrónicos EMailsSetup=Configuración de correos electrónicos +EMailsDesc=Esta página le permite anular sus parámetros de PHP predeterminados para el envío de correo electrónico. En la mayoría de los casos en Unix / Linux OS, la configuración de PHP es correcta y estos parámetros no son necesarios. EmailSenderProfiles=Perfiles de remitentes de correos electrónicos +MAIN_MAIL_SMTP_PORT=Puerto SMTP / SMTPS (valor predeterminado en php.ini: %s ) +MAIN_MAIL_SMTP_SERVER=SMTP / SMTPS Host (valor predeterminado en php.ini: %s ) +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=Puerto SMTP / SMTPS (no definido en PHP en sistemas similares a Unix) +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP / SMTPS Host (no definido en PHP en sistemas similares a Unix) +MAIN_MAIL_EMAIL_FROM=Correo electrónico del remitente para correos electrónicos automáticos (valor predeterminado en php.ini: %s ) +MAIN_MAIL_ERRORS_TO=El correo electrónico utilizado para el error devuelve correos electrónicos (campos 'Errores a' en los correos electrónicos enviados) +MAIN_MAIL_AUTOCOPY_TO=Copiar (Bcc) todos los correos electrónicos enviados a +MAIN_DISABLE_ALL_MAILS=Deshabilitar todo el envío de correo electrónico (para propósitos de prueba o demostraciones) MAIN_MAIL_FORCE_SENDTO=Enviar todos los correos electrónicos a (en lugar de destinatarios reales, para fines de prueba) +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Agregar usuarios empleados con correo electrónico a la lista de destinatarios permitidos +MAIN_MAIL_SENDMODE=Método de envío de correo electrónico +MAIN_MAIL_SMTPS_ID=ID de SMTP (si el servidor de envío requiere autenticación) +MAIN_MAIL_SMTPS_PW=Contraseña SMTP (si el servidor de envío requiere autenticación) +MAIN_MAIL_EMAIL_TLS=Utilizar cifrado TLS (SSL) +MAIN_MAIL_EMAIL_STARTTLS=Usar cifrado TLS (STARTTLS) +MAIN_MAIL_EMAIL_DKIM_ENABLED=Usa DKIM para generar firma de correo electrónico +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Dominio de correo electrónico para usar con dkim +MAIN_DISABLE_ALL_SMS=Deshabilitar todo el envío de SMS (para propósitos de prueba o demostraciones) MAIN_SMS_SENDMODE=Método a usar para enviar SMS +MAIN_MAIL_SMS_FROM=Número de teléfono del remitente predeterminado para el envío de SMS +MAIN_MAIL_DEFAULT_FROMTYPE=Correo electrónico predeterminado del remitente para envío manual (correo electrónico del usuario o correo electrónico de la empresa) UserEmail=Correo electrónico del usuario +CompanyEmail=Email de la empresa FeatureNotAvailableOnLinux=Característica no disponible en sistemas como Unix. Pruebe su programa sendmail localmente. +SubmitTranslation=Si la traducción de este idioma no está completa o si encuentra errores, puede corregirlos editando los archivos en el directorio langs / %s y envíe su cambio a www.transifex.com/dolibarr-association/dolibarr/ SubmitTranslationENUS=Si la traducción de este idioma no está completa o si encuentra errores, puede corregir esto editando archivos en el directorio langs /%s y enviando archivos modificados en dolibarr.org/forum o para desarrolladores en github.com/Dolibarr/dolibarr. ModulesSetup=Módulos / configuración de la aplicación +ModuleFamilyCrm=Gestión de la relación con el cliente (CRM) +ModuleFamilySrm=Gestión de relaciones con proveedores (VRM) +ModuleFamilyProducts=Gestión de producto (PM) ModuleFamilyProjects=Proyectos / trabajo colaborativo ModuleFamilyTechnic=Herramientas de varios módulos ModuleFamilyFinancial=Módulos financieros (Contabilidad / Tesorería) ModuleFamilyECM=Gestión de contenido electrónico (ECM) +ModuleFamilyPortal=Sitios web y otras aplicaciones frontales. ModuleFamilyInterface=Interfaces con sistemas externos MenuHandlers=Controladores de menú MenuAdmin=Editor de menú ThisIsAlternativeProcessToFollow=Esta es una configuración alternativa para procesar manualmente: +FindPackageFromWebSite=Encuentre un paquete que proporcione las funciones que necesita (por ejemplo, en el sitio web oficial %s). +DownloadPackageFromWebSite=Descargue el paquete (por ejemplo, desde el sitio web oficial %s). +UnpackPackageInDolibarrRoot=Desempaquete / descomprima los archivos empaquetados en el directorio de su servidor Dolibarr: %s +UnpackPackageInModulesRoot=Para implementar / instalar un módulo externo, descomprima / descomprima los archivos empaquetados en el directorio del servidor dedicado a los módulos externos:
%s +SetupIsReadyForUse=El despliegue del módulo ha finalizado. Sin embargo, debe habilitar y configurar el módulo en su aplicación yendo a los módulos de configuración de la página: %s . NotExistsDirect=El directorio raíz alternativo no está definido en un directorio existente.
InfDirAlt=Desde la versión 3, es posible definir un directorio raíz alternativo. Esto le permite almacenar, en un directorio dedicado, complementos y plantillas personalizadas.
Simplemente cree un directorio en la raíz de Dolibarr (p. Ej .: personalizado).
InfDirExample=
Entonces, declare en el archivo conf.php
$dolibarr_main_url_root_alt = '/ custom'
$ dolibarr_main_document_root_alt = '/path/of /dolibarr/htdocs /custom'
Si estas líneas se comentan con "#", para habilitarlas, simplemente elimine el comentario del carácter "#". +YouCanSubmitFile=Alternativamente, puedes subir el paquete de archivos .zip del módulo: +CallUpdatePage=Vaya a la página que actualiza la estructura de la base de datos y los datos: %s. LastActivationIP=Última activación IP UpdateServerOffline=Servidor de actualización fuera de línea WithCounter=Administrar un contador @@ -185,32 +261,49 @@ ErrorCantUseRazIfNoYearInMask=Error, no se puede usar la opción @ para restable ErrorCantUseRazInStartedYearIfNoYearMonthInMask=Error, no puede usar la opción @ si la secuencia {aa} {mm} o {aaaa} {mm} no está en la máscara. UMask=Parámetro UMask para nuevos archivos en el sistema de archivos Unix / Linux / BSD / Mac. UMaskExplanation=Este parámetro le permite definir permisos establecidos por defecto en los archivos creados por Dolibarr en el servidor (durante la carga, por ejemplo).
Debe ser el valor octal (por ejemplo, 0666 significa leer y escribir para todos).
parámetro es inútil en un servidor de Windows. +SeeWikiForAllTeam=Eche un vistazo a la página de Wiki para obtener una lista de colaboradores y su organización. UseACacheDelay=Retardo para la respuesta de exportación en caché en segundos (0 o vacío para no caché) DisableLinkToHelpCenter=Ocultar enlace "Necesita ayuda o soporte" en la página de inicio de sesión DisableLinkToHelp=Ocultar link para ayuda online "%s" +AddCRIfTooLong=No hay ajuste de texto automático, el texto que es demasiado largo no se mostrará en los documentos. Por favor agregue retornos de carro en el área de texto si es necesario. +ConfirmPurge=¿Estás seguro de que quieres ejecutar esta purga?
Esto eliminará de forma permanente todos sus archivos de datos sin posibilidad de restaurarlos (archivos ECM, archivos adjuntos ...). MinLength=Longitud mínima LanguageFilesCachedIntoShmopSharedMemory=Archivos .lang cargados en la memoria compartida +ExamplesWithCurrentSetup=Ejemplos con la configuración actual. ListOfDirectories=Lista de directorios de plantillas de OpenDocument ListOfDirectoriesForModelGenODT=Lista de directorios que contienen archivos de plantillas con formato OpenDocument.

Ponga aquí la ruta completa de directorios.
Agregue un retorno de carro entre cada directorio.
Para agregar un directorio del módulo GED, agregue aquí DOL_DATA_ROOT/ecm/yourdirectoryname.

Los archivos en esos directorios deben terminar con .odt o .ods. +NumberOfModelFilesFound=Número de archivos de plantilla ODT / ODS encontrados en estos directorios FollowingSubstitutionKeysCanBeUsed=
Para saber cómo crear sus plantillas de documento Odt, antes de almacenarlas en esos directorios, lea la documentación wiki: FirstnameNamePosition=Posición del nombre / apellido +DescWeather=Las siguientes imágenes se mostrarán en el tablero cuando el número de acciones tardías alcance los siguientes valores: KeyForWebServicesAccess=Clave para usar los servicios web (parámetro "dolibarrkey" en los servicios web) TestSubmitForm=Formulario de prueba de entrada +ThisForceAlsoTheme=El uso de este administrador de menús también usará su propio tema, independientemente de la elección del usuario. Además, este administrador de menú especializado para teléfonos inteligentes no funciona en todos los teléfonos inteligentes. Utilice otro administrador de menú si tiene problemas con el suyo. ThemeDir=Directorio de pieles +ConnectionTimeout=El tiempo de conexión expiro ResponseTimeout=Tiempo de espera de respuesta SmsTestMessage=Mensaje de prueba de __PHONEFROM__ a __PHONETO__ ModuleMustBeEnabledFirst=El módulo %s debe estar habilitado primero si necesitas esta característica. SecurityToken=Clave para asegurar URLs +NoSmsEngine=No hay administrador de remitente de SMS disponible. Un administrador de remitentes de SMS no se instala con la distribución predeterminada porque dependen de un proveedor externo, pero puede encontrar algunos en %s +PDFAddressForging=Reglas para cajas de direcciones +HideAnyVATInformationOnPDF=Ocultar toda la información relacionada con el Impuesto de Ventas / IVA PDFRulesForSalesTax=Reglas para el impuesto a las ventas / IVA +HideLocalTaxOnPDF=Ocultar la tasa %s en la columna Venta de impuestos +HideDescOnPDF=Ocultar descripción de productos +HideRefOnPDF=Ocultar productos ref. +HideDetailsOnPDF=Ocultar detalles de líneas de productos PlaceCustomerAddressToIsoLocation=Utilice la posición estándar francesa (La Poste) para la posición de la dirección del cliente Library=Biblioteca UrlGenerationParameters=Parámetros para asegurar URLs SecurityTokenIsUnique=Use un parámetro de clave segura único para cada URL EnterRefToBuildUrl=Ingrese la referencia para el objeto %s GetSecuredUrl=Obtener URL calculado +ButtonHideUnauthorized=Ocultar botones para usuarios no administradores para acciones no autorizadas en lugar de mostrar botones deshabilitados en gris OldVATRates=Tasa de IVA anterior NewVATRates=Nueva tasa de IVA PriceBaseTypeToChange=Modificar en precios con el valor de referencia base definido en +MassConvert=Lanzar la conversión a granel String=Cuerda Int=Entero Float=Flotador @@ -218,11 +311,21 @@ Boolean=Boolean (una casilla de verificación) ExtrafieldSelect =Seleccionar lista ExtrafieldSelectList =Seleccionar de la mesa ExtrafieldSeparator=Separador (no un campo) +ExtrafieldRadio=Botones de radio (solo una opción) ExtrafieldCheckBox=Casillas de verificación ExtrafieldCheckBoxFromList=Casillas de verificación de la mesa ExtrafieldLink=Enlace a un objeto ComputedFormula=Campo computado +ComputedFormulaDesc=Puede ingresar aquí una fórmula usando otras propiedades de objeto o cualquier código PHP para obtener un valor computado dinámico. Puedes usar cualquier fórmula compatible con PHP incluyendo "?" operador de condición y siguiente objeto global: $ db, $ conf, $ langs, $ mysoc, $ usuario, $ objeto .
ADVERTENCIA : Solo algunas propiedades de $ object pueden estar disponibles. Si necesita una propiedad no cargada, solo busque el objeto en su fórmula como en el segundo ejemplo.
El uso de un campo computado significa que no puede ingresar ningún valor desde la interfaz. Además, si hay un error de sintaxis, la fórmula puede no devolver nada.

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

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

Otro ejemplo de fórmula para forzar la carga del objeto y su objeto padre:
(($ reloadedobj = nueva tarea ($ db)) && ($ reloadedobj-> fetch ($ object-> id)> 0) && ($ secondloadedobj = new Project ($ db)) && ($ secondloadedobj-> fetch ($ reloadedobj-> fk_project)> 0))? $ secondloadedobj-> ref: 'Proyecto principal no encontrado' +ExtrafieldParamHelpPassword=Si deja este campo en blanco, significa que este valor se almacenará sin cifrado (el campo solo debe estar oculto con una estrella en la pantalla).
Establezca 'auto' para usar la regla de cifrado predeterminada para guardar la contraseña en la base de datos (entonces el valor leído será solo el hash, no hay manera de recuperar el valor original) +ExtrafieldParamHelpselect=La lista de valores debe ser líneas con clave de formato, valor (donde la clave no puede ser '0')

por ejemplo:
1, valor1
2, valor2
código3, valor3
...

Para tener la lista dependiendo de otra lista de atributos complementarios:
1, value1 | options_ parent_list_code : parent_key
2, value2 | options_ parent_list_code : parent_key

Para tener la lista dependiendo de otra lista:
1, valor1 | parent_list_code : parent_key
2, valor2 | parent_list_code : parent_key +ExtrafieldParamHelpcheckbox=La lista de valores debe ser líneas con clave de formato, valor (donde la clave no puede ser '0')

por ejemplo:
1, valor1
2, valor2
3, valor3
... +ExtrafieldParamHelpradio=La lista de valores debe ser líneas con clave de formato, valor (donde la clave no puede ser '0')

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

- idfilter es necesariamente una clave int primaria
- el filtro puede ser una prueba simple (por ejemplo, activo = 1) para mostrar solo el valor activo
También puede usar $ ID $ en el filtro, que es la identificación actual del objeto actual
Para hacer un SELECCIONAR en filtro usa $ SEL $
Si desea filtrar en campos adicionales use la sintaxis extra.fieldcode = ... (donde código de campo es el código de campo adicional)

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

Para tener la lista dependiendo de otra lista:
c_typent: libelle: id: parent_list_code | parent_column: filter +ExtrafieldParamHelpchkbxlst=La lista de valores proviene de una tabla.
Sintaxis: table_name: label_field: id_field :: filter
Ejemplo: c_typent: libelle: id :: filter

El filtro puede ser una prueba simple (por ejemplo, activo = 1) para mostrar solo el valor activo
También puede usar $ ID $ en el filtro, que es la identificación actual del objeto actual
Para hacer un SELECCIONAR en filtro usa $ SEL $
Si desea filtrar en campos adicionales use la sintaxis extra.fieldcode = ... (donde código de campo es el código de campo adicional)

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

Para tener la lista dependiendo de otra lista:
c_typent: libelle: id: parent_list_code | parent_column: filter +ExtrafieldParamHelplink=Los parámetros deben ser ObjectName: Classpath
Sintaxis: ObjectName: Classpath
Ejemplos:
Societe: societe / class / societe.class.php
Contacto: contact / class / contact.class.php LibraryToBuildPDF=Biblioteca utilizada para la generación de PDF +LocalTaxDesc=Algunos países pueden aplicar dos o tres impuestos en cada línea de factura. Si este es el caso, elija el tipo para el segundo y tercer impuesto y su tasa. Los tipos posibles son:
1: el impuesto local se aplica a los productos y servicios sin IVA (el impuesto local se calcula sobre el monto sin impuestos)
2: el impuesto local se aplica a los productos y servicios, incluido el IVA
3: el impuesto local se aplica a los productos sin IVA (el impuesto local se calcula sobre el monto sin impuestos)
4: el impuesto local se aplica a los productos, incluido el IVA
5: el impuesto local se aplica a los servicios sin IVA (el impuesto local se calcula sobre el monto sin impuestos)
6: el impuesto local se aplica a los servicios, incluido el IVA (el impuesto local se calcula sobre el monto + impuesto) LinkToTestClickToDial=Ingrese un número de teléfono para llamar y mostrar un enlace para probar la URL de ClickToDial para el usuario %s RefreshPhoneLink=Actualizar enlace LinkToTest=Enlace de clic generado para el usuario %s(haga clic en el número de teléfono para probar) @@ -230,74 +333,152 @@ KeepEmptyToUseDefault=Manténgalo vacío para usar el valor predeterminado DefaultLink=Enlace predeterminado ValueOverwrittenByUserSetup=Advertencia, este valor puede ser sobrescrito por la configuración específica del usuario (cada usuario puede establecer su propia URL de clicktodial) ExternalModule=Módulo externo: instalado en el directorio %s +BarcodeInitForthird-parties=Inicio masivo de código de barras para terceros. BarcodeInitForProductsOrServices=Inicialización o reinicio masivo del código de barras para productos o servicios CurrentlyNWithoutBarCode=Actualmente, tiene %s registros en %s %s sin código de barras definido. InitEmptyBarCode=Valor inicial para los próximos %s registros vacíos EraseAllCurrentBarCode=Borrar todos los valores actuales del código de barras ConfirmEraseAllCurrentBarCode=¿Seguro que quieres borrar todos los valores actuales del código de barras? AllBarcodeReset=Todos los valores del código de barras han sido eliminados +NoBarcodeNumberingTemplateDefined=Ninguna plantilla de código de barras de numeración habilitada en la configuración del módulo de código de barras. +ShowDetailsInPDFPageFoot=Agregue más detalles al pie de página, como la dirección de la empresa o los nombres de los gerentes (además de las identificaciones profesionales, el capital de la empresa y el número de IVA). +NoDetails=No hay detalles adicionales en el pie de página. DisplayCompanyManagers=Mostrar nombres de administrador DisplayCompanyInfoAndManagers=Mostrar los nombres de administrador y dirección de la compañía +EnableAndSetupModuleCron=Si desea que esta factura recurrente se genere automáticamente, el módulo * %s * debe estar habilitado y configurado correctamente. De lo contrario, la generación de facturas debe hacerse manualmente desde esta plantilla usando el botón * Crear *. Tenga en cuenta que incluso si habilita la generación automática, puede iniciar la generación manual de forma segura. No es posible generar duplicados para el mismo período. +ModuleCompanyCodeCustomerAquarium=%s seguido de un código de cliente para un código de contabilidad de cliente +ModuleCompanyCodeSupplierAquarium=%s seguido de un código de proveedor para un código de contabilidad de proveedor ModuleCompanyCodePanicum=Devuelve un código de contabilidad vacío. +ModuleCompanyCodeDigitaria=El código contable depende del código de terceros. El código se compone del carácter "C" en la primera posición, seguido de los primeros 5 caracteres del código de terceros. Use3StepsApproval=De forma predeterminada, los pedidos de compra deben ser creados y aprobados por 2 usuarios diferentes (un paso / usuario para crear y un paso / usuario para aprobar. Tenga en cuenta que si el usuario tiene ambos permisos para crear y aprobar, un paso / usuario será suficiente) . Puede solicitar con esta opción que presente un tercer paso / aprobación del usuario, si el monto es mayor que un valor dedicado (por lo que se necesitarán 3 pasos: 1 = validación, 2 = primera aprobación y 3 = segunda aprobación si el monto es suficiente).
Configure esto como vacío si una aprobación (2 pasos) es suficiente, configúrelo a un valor muy bajo (0.1) si siempre se requiere una segunda aprobación (3 pasos). UseDoubleApproval=Utilice una aprobación de 3 pasos cuando la cantidad (sin impuestos) sea más alta que ... +WarningPHPMail=ADVERTENCIA: a menudo es mejor configurar los correos electrónicos salientes para usar el servidor de correo electrónico de su proveedor en lugar de la configuración predeterminada. Algunos proveedores de correo electrónico (como Yahoo) no le permiten enviar un correo electrónico desde otro servidor que no sea su propio servidor. Su configuración actual utiliza el servidor de la aplicación para enviar correo electrónico y no el servidor de su proveedor de correo electrónico, por lo que algunos destinatarios (el compatible con el protocolo DMARC restrictivo) le preguntarán a su proveedor de correo electrónico si pueden aceptar su correo electrónico y algunos proveedores de correo electrónico. (como Yahoo) puede responder "no" porque el servidor no es de ellos, por lo que pocos de sus correos electrónicos enviados no serán aceptados (tenga cuidado también con la cuota de envío de su proveedor de correo electrónico).
Si su proveedor de correo electrónico (como Yahoo) tiene esta restricción, debe cambiar la configuración de correo electrónico para elegir el otro método "Servidor SMTP" e ingresar el servidor SMTP y las credenciales proporcionadas por su proveedor de correo electrónico. WarningPHPMail2=Si su proveedor SMTP de correo electrónico necesita restringir el cliente de correo electrónico a algunas direcciones IP (muy raras), esta es la dirección IP del agente de usuario de correo (MUA) para su aplicación ERP CRM: %s . ClickToShowDescription=Haga clic para mostrar la descripción +DependsOn=Este módulo necesita el módulo (s) RequiredBy=Este módulo es requerido por el módulo (s) +TheKeyIsTheNameOfHtmlField=Este es el nombre del campo HTML. Se requiere conocimiento técnico para leer el contenido de la página HTML para obtener el nombre clave de un campo. +PageUrlForDefaultValues=Debe ingresar la ruta relativa de la URL de la página. Si incluye parámetros en la URL, los valores predeterminados serán efectivos si todos los parámetros se configuran en el mismo valor. +PageUrlForDefaultValuesCreate=
Ejemplo:
Para el formulario para crear un nuevo tercero, es %s .
Para la URL de los módulos externos instalados en el directorio personalizado, no incluya "custom /", así que use la ruta como mymodule / mypage.php y no custom / mymodule / mypage.php.
Si desea un valor predeterminado solo si la URL tiene algún parámetro, puede usar %s +PageUrlForDefaultValuesList=
Ejemplo:
Para la página que enumera a terceros, es %s .
Para la URL de los módulos externos instalados en el directorio personalizado, no incluya "custom /", así que use una ruta como mymodule / mypagelist.php y no custom / mymodule / mypagelist.php.
Si desea un valor predeterminado solo si la URL tiene algún parámetro, puede usar %s +EnableDefaultValues=Habilitar la personalización de los valores por defecto. +GoIntoTranslationMenuToChangeThis=Se ha encontrado una traducción para la clave con este código. Para cambiar este valor, debe editarlo desde Home-Setup-translation. WarningSettingSortOrder=Advertencia: establecer un orden de clasificación predeterminado puede dar como resultado un error técnico al ir a la página de la lista si el campo es un campo desconocido. Si experimenta dicho error, vuelva a esta página para eliminar el orden de clasificación predeterminado y restablecer el comportamiento predeterminado. ProductDocumentTemplates=Plantillas de documentos para generar documentos de productos FreeLegalTextOnExpenseReports=Texto legal gratuito en informes de gastos WatermarkOnDraftExpenseReports=Marca de agua en los borradores de informes de gastos AttachMainDocByDefault=Establezca esto en 1 si desea adjuntar el documento principal al correo electrónico de forma predeterminada (si corresponde) +DAV_ALLOW_PRIVATE_DIR=Habilitar el directorio privado genérico (directorio dedicado de WebDAV llamado "privado" - es necesario iniciar sesión) +DAV_ALLOW_PRIVATE_DIRTooltip=El directorio privado genérico es un directorio WebDAV al que cualquiera puede acceder con su inicio de sesión / aprobación de la aplicación. +DAV_ALLOW_PUBLIC_DIR=Habilitar el directorio público genérico (directorio dedicado de WebDAV llamado "público" - no se requiere inicio de sesión) +DAV_ALLOW_PUBLIC_DIRTooltip=El directorio público genérico es un directorio WebDAV al que todos pueden acceder (en modo de lectura y escritura), sin necesidad de autorización (cuenta de inicio de sesión / contraseña). +DAV_ALLOW_ECM_DIR=Habilitar el directorio privado DMS / ECM (directorio raíz del módulo DMS / ECM - es necesario iniciar sesión) +DAV_ALLOW_ECM_DIRTooltip=El directorio raíz donde se cargan manualmente todos los archivos cuando se utiliza el módulo DMS / ECM. De manera similar al acceso desde la interfaz web, necesitará un nombre de usuario / contraseña válido con permisos adecuados para acceder a ella. +Module0Name=Usuarios y Grupos Module0Desc=Gestión de usuarios / empleados y grupos +Module1Desc=Gestión de empresas y contactos (clientes, prospectos ...). Module2Desc=Administración comercial +Module10Name=Contabilidad (simplificada) +Module10Desc=Informes contables simples (revistas, facturación) basados en el contenido de la base de datos. No utiliza ninguna tabla de contabilidad. Module20Name=Cotizaciones Module20Desc=Gestión de cotizaciones/propuestas comerciales +Module22Name=Correos masivos Module23Desc=Monitoreo del consumo de energías +Module25Name=Ordenes de venta +Module25Desc=Gestión de órdenes de venta Module30Name=Facturas +Module30Desc=Gestión de facturas y notas de crédito para clientes. Gestión de facturas y notas de crédito para proveedores. Module40Name=Vendedores +Module40Desc=Proveedores y gestión de compras (órdenes de compra y facturación). Module42Desc=Instalaciones de registro (archivo, syslog, ...). Dichos registros son para fines técnicos / de depuración. Module49Desc=Gestión del editor Module51Name=Envíos masivos Module51Desc=Gerencia de correo de papel en masa +Module54Desc=Gestión de contratos (servicios o suscripciones recurrentes). Module55Desc=Gestión del código de barras Module56Desc=Integración de telefonía +Module57Name=Pagos de débito directo bancario +Module57Desc=Gestión de órdenes de pago de débito directo. Incluye generación de archivo SEPA para países europeos. Module58Desc=Integración de un sistema ClickToDial (Asterisk, ...) Module59Desc=Agregar función para generar una cuenta de Bookmark4u desde una cuenta de Dolibarr Module70Desc=Gestión de intervención Module75Name=Notas de gastos y viaje Module75Desc=Gestión de gastos y viajes Module80Name=Envíos +Module85Name=Bancos y efectivo Module85Desc=Gestión de cuentas bancarias o de efectivo +Module100Name=Sitio externo +Module100Desc=Agregue un enlace a un sitio web externo como icono del menú principal. El sitio web se muestra en un marco debajo del menú superior. Module105Desc=Mailman o interfaz SPIP para el módulo miembro +Module200Desc=Sincronización de directorios LDAP Module210Desc=Integración PostNuke Module240Name=Exportación de datos +Module240Desc=Herramienta para exportar datos de Dolibarr (con asistentes). Module250Name=Importaciones de datos +Module250Desc=Herramienta para importar datos a Dolibarr (con asistentes) Module310Desc=Gestión de miembros de la Fundación +Module320Desc=Añadir un feed RSS a las páginas de Dolibarr. +Module330Name=Marcadores y accesos directos +Module330Desc=Cree accesos directos, siempre accesibles, a las páginas internas o externas a las que accede con frecuencia. +Module400Name=Proyectos o Leads +Module400Desc=Gestión de proyectos, leads / oportunidades y / o tareas. También puede asignar cualquier elemento (factura, pedido, propuesta, intervención, ...) a un proyecto y obtener una vista transversal desde la vista del proyecto. Module410Desc=Integración de Webcalendar Module500Desc=Gestión de otros gastos (impuestos a la venta, impuestos sociales o fiscales, dividendos, ...) +Module510Name=Sueldos +Module510Desc=Registrar y rastrear los pagos de los empleados +Module520Name=Prestamos Module520Desc=Gestión de préstamos +Module600Desc=Enviar notificaciones por correo electrónico desencadenadas por un evento empresarial: por usuario (configuración definida en cada usuario), por contactos de terceros (configuración definida en cada tercero) o por correos electrónicos específicos +Module600Long=Tenga en cuenta que este módulo envía correos electrónicos en tiempo real cuando se produce un evento empresarial específico. Si está buscando una función para enviar recordatorios por correo electrónico para eventos de agenda, ingrese a la configuración del módulo Agenda. +Module610Desc=Creación de variantes de producto (color, tamaño, etc.). +Module770Name=Reporte de gastos +Module770Desc=Gestionar informes de gastos reclamaciones (transporte, comida, ...) +Module1120Name=Propuestas Comerciales de Proveedores Module1120Desc=Solicitar propuesta comercial del vendedor y precios Module1200Desc=Integración Mantis Module1520Name=Generación de documentos +Module1520Desc=Generación masiva de documentos por email. Module1780Name=Etiquetas / Categorías +Module1780Desc=Crear etiquetas / categoría (productos, clientes, proveedores, contactos o miembros) +Module2000Desc=Permitir que los campos de texto sean editados / formateados usando CKEditor (html) +Module2200Desc=Usa expresiones matemáticas para autogeneración de precios. Module2300Name=Trabajos programados Module2300Desc=Gestión programada de trabajos (alias cron o crono tabla) Module2400Name=Eventos / Agenda +Module2400Desc=Eventos de pista. Registre eventos automáticos con fines de seguimiento o registre eventos o reuniones manuales. Este es el módulo principal para una buena gestión de relaciones con clientes o proveedores. Module2500Desc=Sistema de gestión de documentos / gestión electrónica de contenidos. Organización automática de sus documentos generados o almacenados. Compártelos cuando lo necesites. Module2600Name=API / servicios web (servidor SOAP) Module2600Desc=Habilite el servidor Dolibarr SOAP que proporciona servicios de API Module2610Name=API / servicios web (servidor REST) Module2610Desc=Habilite el servidor REST Dolibarr proporcionando servicios API Module2660Name=Llamar a WebServices (cliente SOAP) +Module2660Desc=Habilitar el cliente de servicios web de Dolibarr (puede usarse para enviar datos / solicitudes a servidores externos. Actualmente solo se admiten pedidos de compra). +Module2700Desc=Utilice el servicio Gravatar en línea (www.gravatar.com) para mostrar la foto de los usuarios / miembros (que se encuentra en sus correos electrónicos). Necesita acceso a internet Module2900Desc=Capacidades de conversiones GeoIP Maxmind +Module3200Desc=Habilitar un registro inalterable de eventos empresariales. Los eventos se archivan en tiempo real. El registro es una tabla de solo lectura de eventos encadenados que se pueden exportar. Este módulo puede ser obligatorio para algunos países. Module4000Desc=Gestión de recursos humanos (gestión del departamento, contratos de empleados y sentimientos) Module5000Name=Multi-compañía Module5000Desc=Le permite administrar múltiples compañías Module6000Desc=Gestión de flujo de trabajo (creación automática de objeto y / o cambio de estado automático) +Module10000Desc=Crea sitios web (públicos) con un editor WYSIWYG. Simplemente configure su servidor web (Apache, Nginx, ...) para que apunte al directorio dedicado de Dolibarr para tenerlo en línea en Internet con su propio nombre de dominio. +Module20000Name=Gestión de solicitudes de licencia +Module20000Desc=Definir y rastrear las solicitudes de permiso de los empleados. +Module39000Desc=Lotes, números de serie, gestión de la fecha de caducidad de los productos. +Module40000Name=Multi moneda +Module40000Desc=Utilizar monedas alternativas en precios y documentos. +Module50000Desc=Ofrecer a los clientes una página de pago en línea PayBox (tarjetas de crédito / débito). Esto se puede usar para permitir que sus clientes realicen pagos ad-hoc o pagos relacionados con un objeto Dolibarr específico (factura, pedido, etc.) +Module50200Desc=Ofrezca a los clientes una página de pago en línea de PayPal (cuenta de PayPal o tarjetas de crédito / débito). Esto se puede usar para permitir que sus clientes realicen pagos ad-hoc o pagos relacionados con un objeto Dolibarr específico (factura, pedido, etc.) +Module50300Name=Raya +Module50300Desc=Ofrezca a los clientes una página de pago en línea de Stripe (tarjetas de crédito / débito). Esto se puede usar para permitir que sus clientes realicen pagos ad-hoc o pagos relacionados con un objeto Dolibarr específico (factura, pedido, etc.) +Module50400Name=Contabilidad (doble entrada) +Module50400Desc=Gestión contable (entradas dobles, soporte de contabilidad general y auxiliar). Exportar el libro mayor en varios otros formatos de software de contabilidad. +Module54000Desc=Impresión directa (sin abrir los documentos) mediante la interfaz IPP de Cups (la impresora debe estar visible desde el servidor y CUPS debe estar instalada en el servidor). Module55000Name=Encuesta, encuesta o voto +Module55000Desc=Cree encuestas en línea, encuestas o votos (como Doodle, Studs, RDVz, etc.) Module59000Desc=Módulo para administrar márgenes Module60000Desc=Módulo para gestionar comisiones +Module62000Desc=Añadir características para gestionar Incoterms. +Module63000Desc=Gestionar recursos (impresoras, coches, salas, ...) para asignar a eventos. Permission11=Lea las facturas de los clientes Permission12=Crear/modificar facturas de clientes Permission13=Desvalorizar facturas de clientes @@ -314,6 +495,9 @@ Permission27=Eliminar cotizaciones Permission28=Exportar las cotizaciones Permission31=Leer productos Permission36=Ver / administrar productos ocultos +Permission41=Leer proyectos y tareas (proyectos compartidos y proyectos para los que estoy en contacto). También puede ingresar el tiempo consumido, para mí o para mi jerarquía, en las tareas asignadas (hoja de horas) +Permission42=Crear / modificar proyectos (proyecto compartido y proyectos para los que estoy en contacto). También puede crear tareas y asignar usuarios a proyectos y tareas. +Permission44=Eliminar proyectos (proyectos compartidos y proyectos para los que estoy en contacto) Permission45=Proyectos de exportación Permission61=Leer intervenciones Permission67=Intervenciones de exportación @@ -336,18 +520,23 @@ Permission109=Eliminar envíos Permission111=Leer cuentas financieras Permission112=Crear/modificar / eliminar y comparar transacciones Permission113=Configurar cuentas financieras (crear, administrar categorías) +Permission114=Conciliar transacciones Permission115=Exportar transacciones y estados de cuenta Permission116=Transferencias entre cuentas +Permission117=Gestionar cheques despachando Permission121=Leer terceros vinculados al usuario Permission122=Crear/modificar terceros vinculados al usuario Permission125=Eliminar terceros vinculados al usuario Permission126=Exportar terceros +Permission141=Lee todos los proyectos y tareas (también proyectos privados para los que no soy contacto) +Permission142=Crear / modificar todos los proyectos y tareas (también proyectos privados para los cuales no soy un contacto) Permission144=Eliminar todos los proyectos y tareas (también proyectos privados para los que no estoy en contacto) Permission146=Leer proveedores Permission147=Leer estadísticas Permission151=Lea las órdenes de pago de débito directo Permission152=Crear/modificar una orden de pago de débito directo Permission153=Enviar / Transmitir órdenes de pago de débito directo +Permission154=Registro de Créditos / Rechazos de órdenes de pago por domiciliación bancaria. Permission161=Leer contratos/suscripciones Permission163=Activar un servicio / suscripción de un contrato Permission164=Deshabilitar un servicio / suscripción de un contrato @@ -358,6 +547,15 @@ Permission173=Eliminar viajes y gastos Permission174=Lee todos los viajes y gastos Permission178=Viajes y gastos de exportación Permission180=Leer proveedores +Permission181=Leer órdenes de compra +Permission182=Crear / modificar órdenes de compra. +Permission183=Validar pedidos de compra +Permission184=Aprobar ordenes de compra +Permission185=Ordenar o cancelar pedidos de compra +Permission186=Recibe órdenes de compra +Permission187=Cerrar órdenes de compra +Permission188=Cancelar órdenes de compra +Permission194=Lee las líneas de ancho de banda Permission203=Ordenar pedidos de conexiones Permission204=Solicitar conexiones Permission205=Gestionar las conexiones @@ -378,15 +576,20 @@ Permission244=Ver los contenidos de las categorías ocultas Permission251=Leer otros usuarios y grupos PermissionAdvanced251=Leer otros usuarios Permission252=Permisos de lectura de otros usuarios +Permission253=Crea / modifica otros usuarios, grupos y permisos. PermissionAdvanced253=Crear/modificar usuarios y permisos internos / externos Permission254=Crear/modificar solo usuarios externos Permission256=Eliminar o deshabilitar a otros usuarios +Permission262=Extienda el acceso a todos los terceros (no solo a terceros para los cuales ese usuario es un representante de ventas).
No es efectivo para usuarios externos (siempre se limita a ellos mismos para propuestas, pedidos, facturas, contratos, etc.).
No es efectivo para proyectos (solo reglas sobre permisos de proyectos, visibilidad y asignaciones). Permission271=Lee CA Permission272=Leer facturas Permission273=Emitir facturas Permission281=Leer contactos Permission291=Tarifas de lectura Permission292=Establecer permisos sobre las tarifas +Permission293=Modificar las tarifas del cliente. +Permission300=Leer codigos de barras +Permission301=Crear / modificar códigos de barras Permission311=Leer Servicios Permission312=Asignar servicio / suscripción al contrato Permission331=Leer marcadores @@ -400,6 +603,10 @@ Permission401=Leer descuentos Permission402=Crear/modificar descuentos Permission403=Validar descuentos Permission404=Eliminar descuentos +Permission430=Utilice la barra de depuración +Permission511=Leer pagos de salarios. +Permission512=Crear / modificar pagos de salarios. +Permission514=Eliminar pagos de salarios. Permission517=Salarios de exportación Permission520=Leer préstamos Permission522=Crear/modificar préstamos @@ -409,6 +616,9 @@ Permission527=Préstamos a la exportación Permission531=Leer Servicios Permission536=Ver / administrar servicios ocultos Permission538=Servicios de exportación +Permission650=Leer las listas de materiales +Permission651=Crear / actualizar facturas de materiales +Permission652=Eliminar listas de materiales Permission701=Leer donaciones Permission771=Lea los informes de gastos (el suyo y sus subordinados) Permission772=Crear/modificar informes de gastos @@ -422,12 +632,34 @@ Permission1101=Leer órdenes de entrega Permission1102=Crear/modificar órdenes de entrega Permission1104=Validar órdenes de entrega Permission1109=Eliminar pedidos de entrega +Permission1121=Leer propuestas de proveedores +Permission1122=Crear / modificar propuestas de proveedores. +Permission1123=Validar propuestas de proveedores. +Permission1124=Enviar propuestas de proveedores +Permission1125=Eliminar propuestas de proveedores +Permission1126=Cerrar las solicitudes de precios de proveedores Permission1181=Leer proveedores +Permission1182=Leer órdenes de compra +Permission1183=Crear / modificar órdenes de compra. +Permission1184=Validar pedidos de compra +Permission1185=Aprobar ordenes de compra +Permission1186=Ordenar órdenes de compra +Permission1187=Acuse de recibo de las órdenes de compra +Permission1188=Eliminar órdenes de compra +Permission1190=Aprobar (segunda aprobación) órdenes de compra Permission1201=Obtener el resultado de una exportación Permission1202=Crear / Modificar una exportación +Permission1231=Leer facturas de proveedores +Permission1232=Crear / modificar facturas de proveedores +Permission1233=Validar facturas de proveedores +Permission1234=Eliminar facturas de proveedores +Permission1235=Enviar facturas de proveedores por correo electrónico +Permission1236=Exportar facturas de proveedores, atributos y pagos. +Permission1237=Órdenes de compra de exportación y sus detalles. Permission1251=Ejecutar las importaciones masivas de datos externos en la base de datos (carga de datos) Permission1321=Exportar facturas, atributos y pagos de clientes Permission1322=Reabrir una factura paga +Permission1421=Exportación de pedidos y atributos de venta. Permission2414=Exportar acciones / tareas de otros Permission2501=Leer / Descargar documentos Permission2502=Descargar documentos @@ -435,6 +667,12 @@ Permission2503=Presentar o eliminar documentos Permission2515=Configurar directorios de documentos Permission2801=Use el cliente FTP en modo de lectura (navegue y descargue solamente) Permission2802=Utilice el cliente FTP en modo de escritura (eliminar o cargar archivos) +Permission4004=Empleados de exportación +Permission10001=Leer el contenido del sitio web +Permission10002=Crear / modificar el contenido del sitio web (contenido html y javascript) +Permission10003=Crear / modificar el contenido del sitio web (código php dinámico). Peligroso, debe reservarse a desarrolladores restringidos. +Permission20001=Lea las solicitudes de licencia (su licencia y las de sus subordinados) +Permission20002=Cree / modifique sus solicitudes de licencia (su licencia y las de sus subordinados) Permission20003=Eliminar solicitudes de permiso Permission20004=Lea todas las solicitudes de licencia (incluso del usuario no subordinado) Permission20005=Crear / modificar solicitudes de abandono para todos (incluso para usuarios no subordinados) @@ -443,38 +681,77 @@ Permission23001=Leer trabajo programado Permission23002=Crear / actualizar trabajo programado Permission23003=Eliminar trabajo programado Permission23004=Ejecutar trabajo programado +Permission50101=Use el punto de venta Permission50201=Leer transacciones Permission50202=Transacciones de importación +Permission50401=Enlazar productos y facturas con cuentas contables. +Permission50411=Leer operaciones en el libro mayor +Permission50412=Escribir / editar operaciones en el libro mayor. +Permission50420=Reportes y reportes de exportación (facturación, balance, revistas, libro mayor) +Permission50440=Gestionar plan de cuentas, configuración de contabilidad. +Permission51002=Crear / actualizar activos +Permission51005=Configuración de tipos de activos Permission54001=Impresión Permission59003=Lea cada margen de usuario Permission63004=Enlace de recursos a eventos de la agenda +DictionaryCompanyType=Tipos de terceros +DictionaryCompanyJuridicalType=Entidades legales de terceros +DictionaryProspectLevel=Potencial de prospecto +DictionaryCanton=Estados / Provincias +DictionaryCivility=Título de civilidad +DictionarySocialContributions=Tipos de impuestos sociales o fiscales. DictionaryVAT=Tipos de IVA o tasas de impuestos a las ventas DictionaryRevenueStamp=Cantidad de estampillas fiscales +DictionaryPaymentConditions=Términos de pago +DictionaryTypeContact=Contacto / tipos de direcciones +DictionaryTypeOfContainer=Sitio web - Tipo de páginas web / contenedores DictionaryEcotaxe=Ecotax (RAEE) +DictionaryFormatCards=Formatos de tarjeta DictionaryFees=Informe de gastos: tipos de líneas de informe de gastos DictionarySendingMethods=Métodos de envío +DictionaryStaff=Número de empleados DictionaryAvailability=Retraso en la entrega DictionarySource=Origen de las propuestas / órdenes DictionaryAccountancyCategory=Grupos personalizados para informes DictionaryAccountancysystem=Modelos para el cuadro de cuentas DictionaryAccountancyJournal=Libros contables +DictionaryEMailTemplates=Plantillas de correo electrónico +DictionaryMeasuringUnits=Unidades de medida DictionaryProspectStatus=Estado de la perspectiva +DictionaryHolidayTypes=Tipos de licencia +DictionaryOpportunityStatus=Estado de plomo para proyecto / lider +BackToModuleList=Volver a la lista de módulos +BackToDictionaryList=Volver a la lista de diccionarios TypeOfRevenueStamp=Tipo de sello fiscal +VATManagement=Gestión de impuestos de ventas +VATIsUsedDesc=De forma predeterminada, al crear prospectos, facturas, pedidos, etc., la tasa del impuesto a las ventas sigue la regla estándar activa:
Si el vendedor no está sujeto al impuesto sobre las ventas, entonces el impuesto sobre las ventas se establece de manera predeterminada en 0. Fin de la regla.
Si (el país del vendedor = el país del comprador), entonces el impuesto sobre las ventas por defecto es igual al impuesto sobre las ventas del producto en el país del vendedor. Fin de la regla.
Si el vendedor y el comprador están en la Comunidad Europea y los productos son productos relacionados con el transporte (transporte, envío, línea aérea), el IVA predeterminado es 0. Esta regla depende del país del vendedor; consulte con su contador. El IVA debe ser pagado por el comprador a la oficina de aduanas de su país y no al vendedor. Fin de la regla.
Si el vendedor y el comprador pertenecen a la Comunidad Europea y el comprador no es una empresa (con un número de IVA intracomunitario registrado), entonces el IVA está predeterminado para la tasa de IVA del país del vendedor. Fin de la regla.
Si el vendedor y el comprador están en la Comunidad Europea y el comprador es una empresa (con un número de IVA intracomunitario registrado), el IVA es 0 por defecto. Fin de la regla.
En cualquier otro caso, el valor predeterminado propuesto es Impuesto de ventas = 0. Fin de la regla. +VATIsNotUsedDesc=Por defecto, el impuesto a las ventas propuesto es 0, que se puede utilizar para casos como asociaciones, individuos o pequeñas empresas. +VATIsUsedExampleFR=En Francia, significa empresas u organizaciones que tienen un sistema fiscal real (real real o normal simplificado). Un sistema en el que se declara el IVA. +VATIsNotUsedExampleFR=En Francia, significa asociaciones que no están declaradas sin impuestos de ventas o compañías, organizaciones o profesiones liberales que han elegido el sistema fiscal de microempresas (impuestos a las ventas en franquicia) y pagaron una franquicia Impuestos a las ventas sin declaración de impuestos a las ventas. Esta opción mostrará la referencia "Impuesto de ventas no aplicable - art-293B de CGI" en las facturas. LocalTax1IsNotUsed=No use el segundo impuesto +LocalTax1IsUsedDesc=Use un segundo tipo de impuesto (que no sea el primero) +LocalTax1IsNotUsedDesc=No use otro tipo de impuesto (que no sea el primero) LocalTax1Management=Segundo tipo de impuesto LocalTax2IsNotUsed=No use el tercer impuesto +LocalTax2IsUsedDesc=Use un tercer tipo de impuesto (que no sea el primero) +LocalTax2IsNotUsedDesc=No use otro tipo de impuesto (que no sea el primero) LocalTax2Management=Tercer tipo de impuesto +LocalTax1IsUsedDescES=La tasa de RE por defecto al crear prospectos, facturas, pedidos, etc. sigue la regla estándar activa:
Si el comprador no está sujeto a RE, RE por defecto = 0. Fin de la regla.
Si el comprador está sujeto a RE, entonces RE es el predeterminado. Fin de la regla.
LocalTax1IsNotUsedDescES=Por defecto, la RE propuesta es 0. Fin de la regla. LocalTax1IsUsedExampleES=En España son profesionales sujetos a algunas secciones específicas del IAE español. LocalTax1IsNotUsedExampleES=En España son profesionales y sociedades y están sujetas a ciertas secciones del IAE español. +LocalTax2IsUsedDescES=La tasa de IRPF por defecto al crear prospectos, facturas, pedidos, etc. sigue la regla estándar activa:
Si el vendedor no está sujeto a IRPF, entonces IRPF por defecto = 0. Fin de la regla.
Si el vendedor está sujeto a IRPF, entonces el IRPF por defecto. Fin de la regla.
LocalTax2IsNotUsedDescES=Por defecto, el IRPF propuesto es 0. Fin de la regla. LocalTax2IsUsedExampleES=En España, autónomos y profesionales independientes que prestan servicios y empresas que han elegido el sistema impositivo de los módulos. +LocalTax2IsNotUsedExampleES=En España son empresas no sujetas al régimen fiscal de los módulos. CalcLocaltax=Informes sobre impuestos locales CalcLocaltax1Desc=Los informes de impuestos locales se calculan con la diferencia entre las ventas locales y las compras locales. CalcLocaltax2Desc=Los informes de impuestos locales son el total de compras de impuestos locales CalcLocaltax3Desc=Los informes de impuestos locales son el total de las ventas de impuestos locales LabelUsedByDefault=Etiqueta usada por defecto si no se puede encontrar traducción para el código LabelOnDocuments=Etiqueta en documentos +LabelOrTranslationKey=Etiqueta o clave de traducción +NbOfDays=Numero de dias AtEndOfMonth=Al final del mes CurrentNext=Actual / Siguiente Offset=Compensar @@ -489,6 +766,7 @@ DatabasePort=Puerto de base DatabaseUser=Usuario de la base DatabasePassword=Contraseña de la base Tables=Mesas +NbOfRecord=No. de registros DriverType=Tipo de controlador SummarySystem=Resumen de información del sistema SummaryConst=Lista de todos los parámetros de configuración de Dolibarr @@ -499,17 +777,36 @@ Skin=Tema de la piel DefaultSkin=Tema predeterminado de la piel MaxSizeList=Longitud máxima para la lista DefaultMaxSizeList=Longitud máxima predeterminada para las listas +DefaultMaxSizeShortList=Longitud máxima predeterminada para listas cortas (es decir, en la tarjeta del cliente) MessageLogin=Mensaje de la página de inicio LoginPage=Página de inicio de sesión PermanentLeftSearchForm=Formulario de búsqueda permanente en el menú de la izquierda +EnableMultilangInterface=Habilitar soporte multilenguaje EnableShowLogo=Mostrar logo en el menú de la izquierda CompanyInfo=Empresa / Organización +CompanyIds=Identidades de la empresa / organización CompanyCurrency=Moneda principal DoNotSuggestPaymentMode=No sugiera NoActiveBankAccountDefined=No se definió una cuenta bancaria activa OwnerOfBankAccount=Propietario de la cuenta bancaria %s BankModuleNotActive=Módulo de cuentas bancarias no habilitado ShowBugTrackLink=Mostrar el link "%s" +DelaysOfToleranceDesc=Establezca el retraso antes de que aparezca un icono de alerta %s en la pantalla para el elemento tardío. +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Orden no procesada +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Orden de compra no procesada +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Propuesta no cerrada +Delays_MAIN_DELAY_PROPALS_TO_BILL=Propuesta no facturada +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Servicio para activar +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Factura del proveedor sin pagar +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Factura del cliente sin pagar +Delays_MAIN_DELAY_MEMBERS=Cuota de membresía retrasada +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Depósito de cheques no hecho +Delays_MAIN_DELAY_EXPENSEREPORTS=Informe de gastos para aprobar +SetupDescription1=Antes de comenzar a utilizar Dolibarr, se deben definir algunos parámetros iniciales y habilitar / configurar los módulos. +SetupDescription2=Las siguientes dos secciones son obligatorias (las dos primeras entradas en el menú de configuración): +SetupDescription3=%s -> %s
Parámetros básicos utilizados para personalizar el comportamiento predeterminado de su aplicación (por ejemplo, para funciones relacionadas con el país). +SetupDescription4=%s -> %s
Este software es un conjunto de muchos módulos / aplicaciones, todos más o menos independientes. Los módulos relevantes a sus necesidades deben estar habilitados y configurados. Los nuevos elementos / opciones se agregan a los menús con la activación de un módulo. +SetupDescription5=Otras entradas del menú de configuración manejan parámetros opcionales. LogEvents=Eventos de auditoría de seguridad InfoDolibarr=Sobre Dolibarr InfoBrowser=Acerca del navegador @@ -519,35 +816,67 @@ InfoDatabase=Acerca de la base InfoPerf=Sobre representaciones BrowserOS=Sistema operativo del navegador ListOfSecurityEvents=Lista de eventos de seguridad de Dolibarr +LogEventDesc=Habilitar el registro para eventos de seguridad específicos. Administradores el registro a través del menú %s - %s . Advertencia, esta característica puede generar una gran cantidad de datos en la base de datos. AreaForAdminOnly=Los parámetros de configuración solo pueden modificarse por usuarios administradores. SystemInfoDesc=La información del sistema es información técnica miscelánea que obtienes en modo solo lectura y visible solo para los administradores. +CompanyFundationDesc=Editar la información de la empresa / entidad. Haga clic en el botón "%s" o "%s" en la parte inferior de la página. +AccountantDesc=Si tiene un contador / contador externo, puede editar aquí su información. AvailableModules=Aplicación / módulos disponibles ToActivateModule=Para activar los módulos, vaya al Área de configuración (Inicio-> Configuración-> Módulos). SessionTimeOut=Tiempo de espera para la sesión +SessionExplanation=Este número garantiza que la sesión nunca caducará antes de este retraso, si el limpiador de sesión se realiza mediante el limpiador de sesión interno de PHP (y nada más). El limpiador interno de sesiones de PHP no garantiza que la sesión caduque después de este retraso. Expirará, después de este retraso, y cuando se ejecute el limpiador de sesiones, por lo que todos los accesos %s / %s , pero solo durante el acceso realizado por otras sesiones (si el valor es 0, significa que la eliminación de la sesión se realiza solo mediante un proceso externo) .
Nota: en algunos servidores con un mecanismo de limpieza de sesión externo (cron en debian, ubuntu ...), las sesiones pueden destruirse después de un período definido por una configuración externa, sin importar el valor ingresado aquí. TriggersAvailable=Disparadores disponibles +TriggersDesc=Los disparadores son archivos que modificarán el comportamiento del flujo de trabajo de Dolibarr una vez que se copien en el directorio htdocs / core / triggers . Realizan nuevas acciones, activadas en eventos Dolibarr (creación de nueva empresa, validación de facturas, ...). TriggerDisabledByName=Los desencadenantes en este archivo están deshabilitados por el sufijo -NORUN en su nombre. TriggerDisabledAsModuleDisabled=Los disparadores en este archivo están deshabilitados ya que el módulo %s está deshabilitado. TriggerAlwaysActive=Los activadores en este archivo están siempre activos, cualesquiera que sean los módulos Dolibarr activados. TriggerActiveAsModuleActive=Los disparadores en este archivo están activos ya que el módulo %s está habilitado. DictionaryDesc=Inserta todos los datos de referencia. Puede agregar sus valores a los valores predeterminados. +ConstDesc=Esta página le permite editar (anular) los parámetros que no están disponibles en otras páginas. Estos son en su mayoría parámetros reservados para desarrolladores / solución avanzada de problemas. Para obtener una lista completa de los parámetros disponibles, consulte aquí . MiscellaneousDesc=Todos los demás parámetros relacionados con la seguridad se definen aquí. LimitsSetup=Límites / configuración de precisión +LimitsDesc=Puede definir límites, precisiones y optimizaciones utilizadas por Dolibarr aquí +MAIN_MAX_DECIMALS_UNIT=Max. decimales por precios unitarios +MAIN_MAX_DECIMALS_TOT=Max. decimales para precios totales +MAIN_MAX_DECIMALS_SHOWN=Max. Decimales por precios mostrados en pantalla . Agregue un punto suspensivo ... después de este parámetro (por ejemplo, "2 ...") si desea ver " ... " con el sufijo del precio truncado. +MAIN_ROUNDING_RULE_TOT=Paso del rango de redondeo (para países donde el redondeo se realiza en otra cosa que no sea la base 10. Por ejemplo, coloque 0.05 si el redondeo se realiza con 0.05 pasos) UnitPriceOfProduct=Precio unitario neto de un producto +TotalPriceAfterRounding=Precio total (sin IVA / IVA incluido) después del redondeo ParameterActiveForNextInputOnly=Parámetro efectivo solo para la siguiente entrada +NoEventOrNoAuditSetup=No se ha registrado ningún evento de seguridad. Esto es normal si la auditoría no se ha habilitado en la página "Configuración - Seguridad - Eventos". +NoEventFoundWithCriteria=No se ha encontrado ningún evento de seguridad para este criterio de búsqueda. SeeLocalSendMailSetup=Consulte su configuración de sendmail local +BackupDesc2=Realice una copia de seguridad del contenido del directorio "documentos" ( %s ) que contiene todos los archivos cargados y generados. Esto también incluirá todos los archivos de volcado generados en el Paso 1. +BackupDesc3=Realice una copia de seguridad de la estructura y el contenido de su base de datos ( %s ) en un archivo de volcado. Para ello, puede utilizar el siguiente asistente. +BackupDescX=El directorio archivado debe almacenarse en un lugar seguro. BackupDescY=El archivo de volcado generado debe almacenarse en un lugar seguro. +BackupPHPWarning=La copia de seguridad no se puede garantizar con este método. Anterior recomendado. +RestoreDesc=Para restaurar una copia de seguridad de Dolibarr, se requieren dos pasos. +RestoreDesc2=Restaure el archivo de copia de seguridad (archivo zip, por ejemplo) del directorio "documentos" a una nueva instalación de Dolibarr o en este directorio actual de documentos ( %s ). +RestoreDesc3=Restaure la estructura de la base de datos y los datos de un archivo de volcado de respaldo en la base de datos de la nueva instalación de Dolibarr o en la base de datos de esta instalación actual ( %s ). Advertencia: una vez que se complete la restauración, debe usar un nombre de usuario / contraseña, que existía desde el momento de la copia de seguridad / instalación para volver a conectarse.
Para restaurar una base de datos de respaldo en esta instalación actual, puede seguir este asistente. RestoreMySQL=Importación de MySQL ForcedToByAModule=Esta regla es forzada a %s por un módulo activado +RunningUpdateProcessMayBeRequired=Parece que se requiere ejecutar el proceso de actualización (la versión del programa %s difiere de la versión de la base de datos %s) YouMustRunCommandFromCommandLineAfterLoginToUser=Debe ejecutar este comando desde la línea de comando después de iniciar sesión en un shell con el usuario %s o debe agregar la opción -W al final de la línea de comandos para proporcionar una contraseña de %s. DownloadMoreSkins=Más pieles para descargar +SimpleNumRefModelDesc=Devuelve el número de referencia con el formato %syymm-nnnn donde yy es año, mm es mes y nnnn es secuencial sin restablecimiento +ShowProfIdInAddress=Mostrar identificación profesional con direcciones +ShowVATIntaInAddress=Ocultar número de IVA intracomunitario con direcciones MeteoStdMod=Modo estandar MeteoUseMod=Haz clic para usar %s TestLoginToAPI=Prueba de inicio de sesión a la API +ExternalAccess=Acceso externo / internet +MAIN_PROXY_USE=Utilice un servidor proxy (de lo contrario el acceso es directo a internet) +MAIN_PROXY_HOST=Servidor proxy: Nombre / Dirección +MAIN_PROXY_USER=Servidor proxy: Login / Usuario +DefineHereComplementaryAttributes=Defina aquí cualquier atributo adicional / personalizado que desee incluir para: %s ExtraFields=Atributos complementarios ExtraFieldsLines=Atributos complementarios (líneas) ExtraFieldsLinesRec=Atributos complementarios (líneas plantillas de facturas) ExtraFieldsSupplierOrdersLines=Atributos complementarios (líneas de pedido) ExtraFieldsSupplierInvoicesLines=Atributos complementarios (líneas de factura) +ExtraFieldsThirdParties=Atributos complementarios (tercero) +ExtraFieldsContacts=Atributos complementarios (contactos / dirección) ExtraFieldsMember=Atributos complementarios (miembro) ExtraFieldsMemberType=Atributos complementarios (tipo de miembro) ExtraFieldsCustomerInvoices=Atributos complementarios (facturas) @@ -560,52 +889,92 @@ ExtraFieldHasWrongValue=El atributo %s tiene un valor incorrecto. AlphaNumOnlyLowerCharsAndNoSpace=solo caracteres alfanuméricos y minúsculas sin espacio SendmailOptionNotComplete=Advertencia, en algunos sistemas Linux, para enviar correos electrónicos desde su correo electrónico, la configuración de ejecución de sendmail debe contener la opción -ba (parámetro mail.force_extra_parameters en su archivo php.ini). Si algunos destinatarios nunca reciben correos electrónicos, intente editar este parámetro de PHP con mail.force_extra_parameters = -ba). PathToDocuments=Camino a los documentos +SendmailOptionMayHurtBuggedMTA=La función para enviar correos electrónicos mediante el método "PHP mail direct" generará un mensaje de correo que algunos servidores de correo de recepción podrían no analizar correctamente. El resultado es que algunas personas alojadas en esas plataformas con errores no pueden leer algunos correos. Este es el caso de algunos proveedores de Internet (Ej .: Orange en Francia). Este no es un problema con Dolibarr o PHP, sino con el servidor de correo receptor. Sin embargo, puede agregar una opción MAIN_FIX_FOR_BUGGED_MTA a 1 en Configuración - Otros para modificar Dolibarr para evitar esto. Sin embargo, puede experimentar problemas con otros servidores que utilizan estrictamente el estándar SMTP. La otra solución (recomendada) es utilizar el método "biblioteca de sockets SMTP", que no tiene inconvenientes. TranslationSetup=Configuración de la traducción TranslationKeySearch=Buscar una clave o cadena de traducción TranslationOverwriteKey=Sobrescribir una cadena de traducción +TranslationDesc=Cómo configurar el idioma de visualización:
* Predeterminado / En todo el sistema: menú Inicio -> Configuración -> Mostrar
* Por usuario: haga clic en el nombre de usuario en la parte superior de la pantalla y modifique la pestaña Configuración de pantalla de usuario en la tarjeta de usuario. TranslationOverwriteDesc=También puede anular cadenas que llenan la siguiente tabla. Elija su idioma del menú desplegable "%s", inserte la cadena de clave de traducción en "%s" y su nueva traducción en "%s" +TranslationOverwriteDesc2=Puede usar la otra pestaña para ayudarlo a saber qué clave de traducción usar TranslationString=Cadena de traducción CurrentTranslationString=Cadena de traducción actual WarningAtLeastKeyOrTranslationRequired=Se requiere un criterio de búsqueda al menos para la cadena clave o de traducción NewTranslationStringToShow=Nueva cadena de traducción para mostrar OriginalValueWas=La traducción original se sobrescribe. El valor original fue:

%s +TransKeyWithoutOriginalValue=Obligó una nueva traducción para la clave de traducción ' %s ' que no existe en ningún archivo de idioma TotalNumberOfActivatedModules=Aplicaciones/módulos activos: %s/%s YouMustEnableOneModule=Debe al menos habilitar 1 módulo +ClassNotFoundIntoPathWarning=La clase %s no se encuentra en la ruta de PHP +OnlyFollowingModulesAreOpenedToExternalUsers=Tenga en cuenta que solo los siguientes módulos están disponibles para usuarios externos (independientemente de los permisos de dichos usuarios) y solo si se otorgan permisos:
SuhosinSessionEncrypt=Almacenamiento de sesión cifrado por Suhosin ConditionIsCurrently=La condición es actualmente %s +YouUseBestDriver=Utiliza el controlador %s, que es el mejor controlador disponible en la actualidad. +YouDoNotUseBestDriver=Utiliza el controlador %s, pero se recomienda el controlador %s. +NbOfProductIsLowerThanNoPb=Sólo tiene productos / servicios %s en la base de datos. Esto no requiere ninguna optimización particular. SearchOptim=Optimización de búsqueda +YouHaveXProductUseSearchOptim=Tiene productos %s en la base de datos. Debe agregar la constante PRODUCT_DONOTSEARCH_ANYWHERE a 1 en Home-Setup-Other. Limite la búsqueda al comienzo de las cadenas, lo que hace posible que la base de datos utilice índices y debería obtener una respuesta inmediata. +BrowserIsOK=Está utilizando el navegador web %s. Este navegador está bien para la seguridad y el rendimiento. +BrowserIsKO=Está utilizando el navegador web %s. Se sabe que este navegador es una mala elección para la seguridad, el rendimiento y la confiabilidad. Recomendamos usar Firefox, Chrome, Opera o Safari. XCacheInstalled=XCache está cargado. +AddRefInList=Mostrar cliente / vendedor ref. Lista de información (lista de selección o cuadro combinado) y la mayoría de los hipervínculos.
Aparecerán terceros con un formato de nombre de "CC12345 - SC45678 - The Big Company corp". en lugar de "The Big Company corp". +AddAdressInList=Mostrar la lista de información de la dirección del cliente / proveedor (seleccionar lista o cuadro combinado)
Aparecerán terceros con el formato de nombre "The Big Company corp. - 21 jump street 123456 Big town - USA" en lugar de "The Big Company corp". +AskForPreferredShippingMethod=Pregunte por el método de envío preferido para terceros. FillThisOnlyIfRequired=Ejemplo: +2 (llenar solo si se experimentan problemas de compensación de zona horaria) PasswordGenerationStandard=Devuelve una contraseña generada de acuerdo con el algoritmo interno de Dolibarr: 8 caracteres que contienen números compartidos y caracteres en minúscula. +PasswordGenerationNone=No sugiera una contraseña generada. La contraseña debe escribirse manualmente. PasswordGenerationPerso=Devuelve una contraseña de acuerdo a tu configuración definida personalmente. SetupPerso=De acuerdo con tu configuración PasswordPatternDesc=Descripción del patrón de contraseña +DisableForgetPasswordLinkOnLogonPage=No mostrar el enlace "Contraseña olvidada" en la página de inicio de sesión UsersSetup=Configuración del módulo de usuarios +UserMailRequired=Email requerido para crear un nuevo usuario HRMSetup=Configuración del módulo RRHH CompanySetup=Configuración del módulo de empresas +CompanyCodeChecker=Opciones para la generación automática de códigos de clientes / proveedores. +AccountCodeManager=Opciones para la generación automática de códigos contables de clientes / proveedores. +NotificationsDesc=Las notificaciones por correo electrónico se pueden enviar automáticamente para algunos eventos de Dolibarr.
Los destinatarios de las notificaciones se pueden definir: +NotificationsDescUser=* por usuario, un usuario a la vez. +NotificationsDescGlobal=* o configurando direcciones de correo electrónico globales en esta página de configuración. +DocumentModelOdt=Genere documentos desde plantillas de OpenDocument (archivos .ODT / .ODS de LibreOffice, OpenOffice, KOffice, TextEdit, ...) WatermarkOnDraft=Marca de agua en el borrador del documento JSOnPaimentBill=Activar la función para completar automáticamente las líneas de pago en forma de pago +CompanyIdProfChecker=Reglas para las identificaciones profesionales +MustBeMandatory=¿Obligatorio crear terceros (si se define el número de IVA o el tipo de empresa)? MustBeInvoiceMandatory=Obligatorio para validar facturas? TechnicalServicesProvided=Servicios técnicos proporcionados +WebDAVSetupDesc=Este es el enlace para acceder al directorio WebDAV. Contiene un directorio "público" abierto a cualquier usuario que conozca la URL (si se permite el acceso al directorio público) y un directorio "privado" que necesita una cuenta / contraseña de inicio de sesión para acceder. +WebDavServer=URL raíz del servidor %s: %s WebCalUrlForVCalExport=Un enlace de exportación al formato %s está disponible en el siguiente enlace: %s BillsSetup=Configuración del módulo de facturas BillsNumberingModule=Modelo de numeración de facturas y notas de crédito BillsPDFModules=Modelos de documentos de factura +BillsPDFModulesAccordindToInvoiceType=Documentos de facturas de modelos según tipo de factura. PaymentsPDFModules=Modelos de documentos de pago ForceInvoiceDate=Forzar fecha de factura a fecha de validación SuggestedPaymentModesIfNotDefinedInInvoice=Modo de pago sugerido en la factura por defecto si no está definido para la factura +SuggestPaymentByRIBOnAccount=Sugerir pago por retiro en cuenta +SuggestPaymentByChequeToAddress=Sugerir pago por cheque a FreeLegalTextOnInvoices=Texto libre en las facturas WatermarkOnDraftInvoices=Marca de agua en borradores de facturas (ninguna si está vacía) PaymentsNumberingModule=Modelo de numeración de pagos +SuppliersPayment=Pagos de proveedores +SupplierPaymentSetup=Configuración de pagos de proveedores PropalSetup=Configuración del módulo Cotizaciones ProposalsNumberingModules=Módulos de numeración de cotizaciones ProposalsPDFModules=Modelos de documentos de cotizaciones +SuggestedPaymentModesIfNotDefinedInProposal=Modo de pago sugerido en la propuesta por defecto si no está definido para la propuesta FreeLegalTextOnProposal=Texto libre en cotizaciones WatermarkOnDraftProposal=Marca de agua en cotizaciones borrador (en caso de estar vacío) BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL=Preguntar por el destino de la cuenta bancaria +SupplierProposalSetup=Solicitud de precios de configuración del módulo de proveedores. +SupplierProposalNumberingModules=Solicitudes de precio proveedores de numeración de modelos. +SupplierProposalPDFModules=Solicitudes de precio proveedores documentos modelos. +FreeLegalTextOnSupplierProposal=Texto libre en las solicitudes de precios proveedores +WatermarkOnDraftSupplierProposal=Marca de agua en los proveedores de solicitudes de precios de borrador (ninguno si está vacío) BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_PROPOSAL=Preguntar por el destino de la cuenta bancaria de la solicitud de precio WAREHOUSE_ASK_WAREHOUSE_DURING_ORDER=Pida la fuente de Warehouse para ordenar BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_ORDER=Preguntar por el destino de la cuenta bancaria de la orden de compra +OrdersSetup=Configuración de gestión de órdenes de venta OrdersNumberingModules=Modelos de numeración de pedidos OrdersModelModule=Modelos de documentos de pedido WatermarkOnDraftOrders=Marca de agua a borradores de pedidos (ninguna si está vacía) @@ -622,7 +991,9 @@ TemplatePDFContracts=Modelos de documentos de contratos WatermarkOnDraftContractCards=Marca de agua en los proyectos de contratos (ninguno si está vacío) MembersSetup=Configuración del módulo de miembros AdherentLoginRequired=Administre un inicio de sesión para cada miembro +AdherentMailRequired=Correo electrónico requerido para crear un nuevo miembro MemberSendInformationByMailByDefault=La casilla de verificación para enviar la confirmación de correo a los miembros (validación o nueva suscripción) está activada por defecto +MEMBER_REMINDER_EMAIL=Habilitar recordatorio automático por correo electrónico de suscripciones caducadas. Nota: El módulo %s debe estar habilitado y configurado correctamente para enviar recordatorios. LDAPSetup=Configuración de LDAP LDAPSynchronizeUsers=Organización de usuarios en LDAP LDAPSynchronizeGroups=Organización de grupos en LDAP @@ -630,6 +1001,7 @@ LDAPSynchronizeContacts=Organización de contactos en LDAP LDAPSynchronizeMembers=Organización de los miembros de la fundación en LDAP LDAPSynchronizeMembersTypes=La organización de los miembros de la fundación escribe en LDAP LDAPServerPort=Puerto de servicio +LDAPServerPortExample=Puerto predeterminado: 389 LDAPServerUseTLS=Usa TLS LDAPServerUseTLSExample=Su servidor LDAP usa TLS LDAPAdminDn=Administrador DN @@ -666,21 +1038,44 @@ LDAPTestSynchroMemberType=Pruebe la sincronización del tipo de miembro LDAPTestSearch=Pruebe una búsqueda LDAP LDAPSynchroOK=Prueba de sincronización exitosa LDAPSynchroKO=Prueba de sincronización fallida +LDAPSynchroKOMayBePermissions=Prueba de sincronización fallida. Compruebe que la conexión al servidor esté configurada correctamente y permita las actualizaciones de LDAP LDAPTCPConnectOK=Conexión TCP al servidor LDAP exitosa (Servidor = %s, Puerto = %s) LDAPTCPConnectKO=No se pudo conectar TCP al servidor LDAP (Servidor = %s, Puerto = %s) +LDAPBindOK=Conexión / autenticación con el servidor LDAP correcta (Servidor = %s, Puerto = %s, Admin = %s, Contraseña = %s) +LDAPBindKO=Falló la conexión / autenticación al servidor LDAP (Servidor = %s, Puerto = %s, Admin = %s, Contraseña = %s) LDAPSetupForVersion3=Servidor LDAP configurado para la versión 3 LDAPSetupForVersion2=Servidor LDAP configurado para la versión 2 LDAPDolibarrMapping=Mapas de Dolibarr LDAPLdapMapping=Asignación de LDAP LDAPFieldLoginUnix=Iniciar sesión (Unix) +LDAPFieldLoginExample=Ejemplo: uid +LDAPFilterConnectionExample=Ejemplo: & (objectClass = inetOrgPerson) +LDAPFieldLoginSambaExample=Ejemplo: samaccountname +LDAPFieldFullnameExample=Ejemplo: cn +LDAPFieldPasswordNotCrypted=Contraseña no cifrada +LDAPFieldPasswordExample=Ejemplo: userPassword +LDAPFieldCommonNameExample=Ejemplo: cn +LDAPFieldNameExample=Ejemplo: sn LDAPFieldFirstName=Primer nombre +LDAPFieldFirstNameExample=Ejemplo: givenName LDAPFieldMail=Dirección de correo electrónico +LDAPFieldMailExample=Ejemplo: correo LDAPFieldPhone=Número de teléfono profesional +LDAPFieldPhoneExample=Ejemplo: número telefónico LDAPFieldHomePhone=Número de teléfono personal +LDAPFieldHomePhoneExample=Ejemplo: homephone LDAPFieldMobile=Teléfono celular +LDAPFieldMobileExample=Ejemplo: móvil LDAPFieldFax=Número de fax +LDAPFieldFaxExample=Ejemplo: facsimiletelephonenumber LDAPFieldAddress=Calle +LDAPFieldAddressExample=Ejemplo: calle +LDAPFieldZipExample=Ejemplo: código postal +LDAPFieldTownExample=Ejemplo: l +LDAPFieldDescriptionExample=Ejemplo: descripción LDAPFieldNotePublic=Nota pública +LDAPFieldCompanyExample=Ejemplo: o +LDAPFieldSidExample=Ejemplo: objectid LDAPFieldEndLastSubscription=Fecha de finalización de la suscripción LDAPFieldTitleExample=Ejemplo: título LDAPSetupNotComplete=La configuración de LDAP no está completa (vaya a las pestañas de otros) @@ -692,26 +1087,38 @@ LDAPDescMembers=Esta página le permite definir el nombre de los atributos LDAP LDAPDescValues=Los valores de ejemplo están diseñados para OpenLDAP con los siguientes esquemas cargados: core.schema, cosine.schema, inetorgperson.schema ). Si usa estos valores y OpenLDAP, modifique su archivo de configuración de LDAP slapd.conf para que se carguen todos estos esquemas. ForANonAnonymousAccess=Para un acceso autenticado (para un acceso de escritura, por ejemplo) PerfDolibarr=Configuración de rendimiento / informe de optimización +YouMayFindPerfAdviceHere=Esta página proporciona algunas verificaciones o consejos relacionados con el rendimiento. +NotInstalled=No está instalado, por lo que su servidor no se ralentiza por esto. ApplicativeCache=Caché aplicable MemcachedNotAvailable=No se encontró caché aplicativo. Puede mejorar el rendimiento instalando un servidor de caché Memcached y un módulo capaz de usar este servidor de caché. Más información aquí http: //wiki.dolibarr.org/index.php/Module_MemCached_EN .
Tenga en cuenta que muchos proveedores de alojamiento web no proporcionan dicho servidor de caché. MemcachedModuleAvailableButNotSetup=El módulo memcached para la memoria caché aplicativa se encuentra pero la configuración del módulo no está completa. MemcachedAvailableAndSetup=El módulo memcached dedicado a usar el servidor memcached está habilitado. OPCodeCache=Caché OPCode +NoOPCodeCacheFound=No se ha encontrado ningún caché OPCode. Quizás esté utilizando un caché OPCode que no sea XCache o eAccelerator (bueno), o tal vez no tenga un caché OPCode (muy malo). HTTPCacheStaticResources=Caché HTTP para recursos estáticos (css, img, javascript) FilesOfTypeCached=Los archivos del tipo %s están en caché en el servidor HTTP FilesOfTypeNotCached=El servidor HTTP no almacena en caché los archivos del tipo %s FilesOfTypeCompressed=Los archivos del tipo %s están comprimidos por el servidor HTTP FilesOfTypeNotCompressed=Los archivos del tipo %s no son comprimidos por el servidor HTTP CacheByServer=Caché por servidor +CacheByServerDesc=Por ejemplo, usando la directiva de Apache "ExpiresByType image / gif A2592000" CacheByClient=Caché por navegador CompressionOfResources=Compresión de respuestas HTTP +CompressionOfResourcesDesc=Por ejemplo, usando la directiva de Apache "AddOutputFilterByType DEFLATE" TestNotPossibleWithCurrentBrowsers=Tal detección automática no es posible con los navegadores actuales +DefaultValuesDesc=Aquí puede definir el valor predeterminado que desea utilizar al crear un nuevo registro, y / o filtros predeterminados o el orden de clasificación cuando enumera los registros. DefaultSearchFilters=Filtros de búsqueda predeterminados DefaultSortOrder=Ordenar por defecto +DefaultMandatory=Campos de formulario obligatorios ProductSetup=Configuración del módulo de productos ServiceSetup=Configuración del módulo de servicios ProductServiceSetup=Configuración de módulos de productos y servicios +NumberOfProductShowInSelect=Número máximo de productos para mostrar en las listas de selección de combo (0 = sin límite) +ViewProductDescInFormAbility=Mostrar descripciones de productos en formularios (de lo contrario, se muestra en una ventana emergente de información sobre herramientas) MergePropalProductCard=Activar en el producto / servicio pestaña Archivos adjuntos una opción para combinar el documento PDF del producto con la propuesta PDF azur si el producto / servicio figura en la propuesta +ViewProductDescInThirdpartyLanguageAbility=Mostrar descripciones de los productos en el idioma del tercero. +UseSearchToSelectProductTooltip=Además, si tiene una gran cantidad de productos (> 100 000), puede aumentar la velocidad configurando la constante PRODUCT_DONOTSEARCH_ANYWHERE en 1 en Configuración-> Otros. La búsqueda se limitará entonces al inicio de la cadena. +UseSearchToSelectProduct=Espere hasta que presione una tecla antes de cargar el contenido de la lista de combo de productos (esto puede aumentar el rendimiento si tiene una gran cantidad de productos, pero es menos conveniente) SetDefaultBarcodeTypeProducts=Tipo de código de barras predeterminado para usar en productos SetDefaultBarcodeTypeThirdParties=Tipo de código de barras predeterminado para usar con terceros UseUnits=Defina una unidad de medida para Cantidad durante la orden, propuesta o edición de líneas de factura @@ -745,14 +1152,21 @@ BarcodeDescDATAMATRIX=Código de barras del tipo Datamatrix BarcodeDescQRCODE=Código de barras del tipo de código QR GenbarcodeLocation=Herramienta de línea de comandos de generación de código de barras (utilizada por el motor interno para algunos tipos de códigos de barras). Debe ser compatible con "genbarcode".
Por ejemplo: / usr / local / bin / genbarcode BarCodeNumberManager=Administrador para definir automáticamente los números de código de barras +WithdrawalsSetup=Configuración del módulo de pagos de débito directo. ExternalRSSSetup=Configuración de importaciones de RSS externo NewRSS=Nueva fuente RSS RSSUrlExample=Una fuente RSS interesante MailingSetup=Configuración del módulo de correo electrónico +MailingEMailFrom=Correo electrónico del remitente (De) para los correos electrónicos enviados por el módulo de correo electrónico +MailingEMailError=Devolver correo electrónico (Errors-to) para correos electrónicos con errores MailingDelay=Segundos para esperar después de enviar el siguiente mensaje +NotificationSetup=Configuración del módulo de notificación por correo electrónico +NotificationEMailFrom=Correo electrónico del remitente (De) para correos electrónicos enviados por el módulo de notificaciones FixedEmailTarget=Recipiente +SendingsSetup=Configuración del módulo de envío SendingsReceiptModel=Modelo de recibo de envío SendingsNumberingModules=Módulos de numeración de los mensajes +NoNeedForDeliveryReceipts=En la mayoría de los casos, las hojas de envío se utilizan como hojas para las entregas a los clientes (lista de productos para enviar) y hojas que son recibidas y firmadas por el cliente. Por lo tanto, el recibo de entregas del producto es una función duplicada y rara vez se activa. DeliveryOrderNumberingModules=Módulo de numeración de recibos de entregas de productos DeliveryOrderModel=Modelo de recepción de entregas de productos DeliveriesOrderAbility=Productos de soporte recibos de entregas @@ -760,10 +1174,12 @@ FreeLegalTextOnDeliveryReceipts=Texto libre en recibos de entrega ActivateFCKeditor=Activa el editor avanzado para: FCKeditorForCompany=Creación / edición WYSIWIG de descripción y nota de elementos (excepto productos / servicios) FCKeditorForProduct=WYSIWIG creación / edición de productos / servicios descripción y nota +FCKeditorForProductDetails=Creación / edición WYSIWIG de líneas de detalles de productos para todas las entidades (propuestas, pedidos, facturas, etc.). Advertencia: el uso de esta opción para este caso no se recomienda seriamente, ya que puede crear problemas con los caracteres especiales y el formato de página al crear archivos PDF. FCKeditorForMailing=Creación / edición WYSIWIG para eMailings masivos (Herramientas-> eMailing) FCKeditorForUserSignature=Creación / edición WYSIWIG de la firma del usuario FCKeditorForMail=Creación / edición WYSIWIG para todo el correo (excepto Herramientas-> correo electrónico) StockSetup=Configuración del módulo de stock +IfYouUsePointOfSaleCheckModule=Si utiliza el módulo de Punto de Venta (POS) provisto por defecto o un módulo externo, su configuración puede ser ignorada por su módulo de POS. La mayoría de los módulos de POS están diseñados de forma predeterminada para crear una factura de inmediato y disminuir el stock, independientemente de las opciones aquí. Por lo tanto, si necesita o no una disminución de existencias al registrar una venta desde su POS, verifique también la configuración de su módulo POS. MenuDeleted=Menú borrado NotTopTreeMenuPersonalized=Menús personalizados no vinculados a una entrada del menú superior Menu=Selección de menú @@ -781,6 +1197,7 @@ DetailRight=Condición para mostrar menús grises no autorizados DetailLangs=Nombre de archivo Lang para la traducción del código de etiqueta DetailUser=Pasante / Externo / Todos Target=Objetivo +DetailTarget=Destino para enlaces (_blank top abre una nueva ventana) DetailLevel=Nivel (-1: menú superior, 0: menú del encabezado,> 0 menú y submenú) ModifMenu=Cambio de menú ConfirmDeleteMenu=¿Seguro que quieres eliminar la entrada del menú %s? @@ -788,7 +1205,10 @@ FailedToInitializeMenu=Error al inicializar el menú TaxSetup=Impuestos, impuestos sociales o fiscales y configuración del módulo de dividendos OptionVatMode=IVA debido OptionVATDebitOption=Devengo +OptionVatDefaultDesc=El IVA se debe:
- En la entrega de bienes (basado en la fecha de factura)
- En pagos por servicios. +OptionVatDebitOptionDesc=El IVA se debe:
- En la entrega de bienes (basado en la fecha de factura)
- En factura (débito) por servicios. OptionPaymentForProductAndServicesDesc=El IVA es pagadero:
- en el pago de bienes
- en los pagos por servicios +SummaryOfVatExigibilityUsedByDefault=Tiempo de elegibilidad de IVA por defecto de acuerdo a la opción elegida: OnPayment=En pago SupposedToBePaymentDate=Fecha de pago utilizada SupposedToBeInvoiceDate=Fecha de la factura utilizada @@ -801,16 +1221,32 @@ AccountancyCodeBuy=Cuenta de compra código AgendaSetup=Configuración del módulo de eventos y agenda PasswordTogetVCalExport=Clave para autorizar el enlace de exportación PastDelayVCalExport=No exportar evento más antiguo que +AGENDA_USE_EVENT_TYPE=Usar tipos de eventos (administrados en el menú Configuración -> Diccionarios -> Tipo de eventos de agenda) +AGENDA_USE_EVENT_TYPE_DEFAULT=Establecer automáticamente este valor predeterminado para el tipo de evento en el formulario de creación de evento +AGENDA_DEFAULT_FILTER_TYPE=Configure automáticamente este tipo de evento en el filtro de búsqueda de la vista de agenda +AGENDA_DEFAULT_FILTER_STATUS=Establecer automáticamente este estado para eventos en el filtro de búsqueda de la vista de agenda AGENDA_DEFAULT_VIEW=¿Qué pestaña desea abrir de forma predeterminada al seleccionar el menú Agenda? AGENDA_REMINDER_EMAIL=Habilite el recordatorio de eventos por correo electrónico (la opción recordar/demorar se puede definir en cada evento). Nota: El módulo %s debe estar habilitado y configurado correctamente para que el recordatorio se envíe con la frecuencia correcta. +AGENDA_REMINDER_BROWSER=Active el recordatorio de eventos en el navegador del usuario (cuando se alcanza la fecha del evento, cada usuario puede rechazar esto de la pregunta de confirmación del navegador) AGENDA_REMINDER_BROWSER_SOUND=Habilitar notificación de sonido AGENDA_SHOW_LINKED_OBJECT=Mostrar objeto vinculado en la vista de agenda ClickToDialUrlDesc=Se llama a Url cuando se hace clic en el picto de un teléfono. En la URL, puede usar etiquetas
__ PHONETO __ que se reemplazarán por el número de teléfono de la persona a quien llamar
__ PHONEFROM __ que se reemplazará por el número de teléfono de la llamada persona (suya)
__ LOGIN __ que se reemplazará con clicktodial de inicio de sesión (definido en la tarjeta de usuario)
__ PASS __ que se reemplazará con clicktodial contraseña (definida en usuario tarjeta). +ClickToDialDesc=Este módulo hace que los números de teléfono hagan clic enlaces Un clic en el icono hará que su teléfono llame al número. Esto se puede usar para llamar a un sistema de centro de llamadas de Dolibarr que puede llamar al número de teléfono en un sistema SIP, por ejemplo. ClickToDialUseTelLink=Use solo un enlace "tel:" en los números de teléfono +ClickToDialUseTelLinkDesc=Use este método si sus usuarios tienen un softphone o una interfaz de software instalada en la misma computadora que el navegador y se le llama cuando hace clic en un enlace de su navegador que comienza con "tel:". Si necesita una solución de servidor completa (sin necesidad de instalación de software local), debe configurar esto en "No" y completar el siguiente campo. +CashDesk=Punto de venta +CashDeskSetup=Configuración del módulo de punto de venta +CashDeskThirdPartyForSell=Tercero genérico predeterminado para usar en ventas CashDeskBankAccountForSell=Cuenta predeterminada para usar para recibir pagos en efectivo +CashDeskBankAccountForCheque=Cuenta predeterminada a utilizar para recibir pagos con cheque. CashDeskBankAccountForCB=Cuenta predeterminada para usar para recibir pagos con tarjeta de crédito +CashDeskDoNotDecreaseStock=Deshabilite la disminución de existencias cuando se realiza una venta desde el punto de venta (si es "no", se realiza una disminución de existencias para cada venta realizada desde POS, independientemente de la opción establecida en el stock de módulos). CashDeskIdWareHouse=Fuerce y restrinja el almacén para utilizarlo en la disminución de existencias +StockDecreaseForPointOfSaleDisabled=Disminución de stock desde punto de venta deshabilitado +StockDecreaseForPointOfSaleDisabledbyBatch=La disminución de stock en POS no es compatible con el módulo Serial / Lot management (actualmente activo), por lo que la disminución de stock está deshabilitada. +CashDeskYouDidNotDisableStockDecease=No desactivó la disminución de existencias al realizar una venta desde el punto de venta. Por lo tanto se requiere un almacén. BookmarkSetup=Configuración del módulo marcador +BookmarkDesc=Este módulo le permite administrar los marcadores. También puede agregar accesos directos a cualquier página de Dolibarr o sitios web externos en su menú de la izquierda. NbOfBoomarkToShow=Número máximo de marcadores para mostrar en el menú de la izquierda WebServicesSetup=Configuración del módulo de servicios web WebServicesDesc=Al habilitar este módulo, Dolibarr se convierte en un servidor de servicios web para proporcionar servicios web diversos. @@ -822,10 +1258,15 @@ ApiExporerIs=Puede explorar y probar las API en la URL OnlyActiveElementsAreExposed=Solo los elementos de los módulos habilitados están expuestos WarningAPIExplorerDisabled=El explorador API se ha deshabilitado. El explorador de API no está obligado a proporcionar servicios de API. Es una herramienta para que el desarrollador encuentre / pruebe API REST. Si necesita esta herramienta, vaya a la configuración del módulo API REST para activarla. BankSetupModule=Configuración del módulo de banco +FreeLegalTextOnChequeReceipts=Texto libre en los recibos de cheques BankOrderShow=Mostrar el orden de las cuentas bancarias para los países que usan "número de banco detallado" BankOrderESDesc=Orden de exhibición en español +ChequeReceiptsNumberingModule=Verifique el módulo de numeración de recibos MultiCompanySetup=Configuración de módulo multi-compañía +SuppliersSetup=Configuración del módulo de proveedor +SuppliersCommandModel=Plantilla completa de pedido de compra (logo ...) SuppliersInvoiceModel=Plantilla completa de la factura del proveedor (logotipo ...) +SuppliersInvoiceNumberingModel=Facturas de proveedores de numeración de modelos. IfSetToYesDontForgetPermission=Si se establece en sí, no se olvide de proporcionar permisos a los grupos o usuarios permitidos para la segunda aprobación PathToGeoIPMaxmindCountryDataFile=Ruta al archivo que contiene la traducción de Maxmind a la traducción del país.
Ejemplos:
/usr/local/share/GeoIP/GeoIP.dat
/usr/share/GeoIP/GeoIP.dat NoteOnPathLocation=Tenga en cuenta que su archivo de datos de IP a país debe estar dentro de un directorio que su PHP puede leer (consulte la configuración de PHP open_basedir y los permisos del sistema de archivos). @@ -837,6 +1278,7 @@ ProjectsSetup=Configuración del módulo de proyecto ProjectsModelModule=Modelo de documento de informes de proyecto TasksNumberingModules=Módulo de numeración de tareas TaskModelModule=Tareas informa el modelo del documento +UseSearchToSelectProject=Espere hasta que se presione una tecla antes de cargar el contenido de la lista de combo Proyecto.
Esto puede mejorar el rendimiento si tiene una gran cantidad de proyectos, pero es menos conveniente. AccountingPeriodCard=Período contable NewFiscalYear=Nuevo período contable OpenFiscalYear=Período contable abierto @@ -851,18 +1293,27 @@ NoAmbiCaracAutoGeneration=No utilice caracteres ambiguos ("1", "l", "i", "|", "0 SalariesSetup=Configuración de los salarios del módulo SortOrder=Orden de clasificación Format=Formato +TypePaymentDesc=0: Tipo de pago del cliente, 1: Tipo de pago del proveedor, 2: Tipo de pago de los clientes y proveedores IncludePath=Incluir ruta (definida en la variable %s) ExpenseReportsSetup=Configuración del módulo Informes de gastos TemplatePDFExpenseReports=Plantillas de documentos para generar el documento de informe de gastos ExpenseReportsIkSetup=Configuración del módulo Informes de gastos: índice Milles NoModueToManageStockIncrease=No se ha activado ningún módulo capaz de gestionar el aumento automático de existencias. El aumento de existencias se realizará solo con la entrada manual. +YouMayFindNotificationsFeaturesIntoModuleNotification=Puede encontrar opciones para notificaciones por correo electrónico habilitando y configurando el módulo "Notificación". ListOfNotificationsPerUser=Lista de notificaciones por usuario * +ListOfNotificationsPerUserOrContact=Lista de notificaciones (eventos) disponibles por usuario * o por contacto ** +ListOfFixedNotifications=Lista de notificaciones fijas +GoOntoUserCardToAddMore=Vaya a la pestaña "Notificaciones" de un usuario para agregar o eliminar notificaciones para usuarios GoOntoContactCardToAddMore=Vaya a la pestaña "Notificaciones" de un tercero para agregar o eliminar notificaciones de contactos/direcciones Threshold=Límite +BackupDumpWizard=Asistente para construir el archivo de copia de seguridad SomethingMakeInstallFromWebNotPossible=La instalación del módulo externo no es posible desde la interfaz web por el siguiente motivo: +SomethingMakeInstallFromWebNotPossible2=Por esta razón, el proceso de actualización descrito aquí es un proceso manual que solo puede realizar un usuario privilegiado. InstallModuleFromWebHasBeenDisabledByFile=La instalación del módulo externo de la aplicación ha sido desactivada por su administrador. Debes pedirle que elimine el archivo %s para permitir esta función. ConfFileMustContainCustom=La instalación o creación de un módulo externo desde la aplicación necesita guardar los archivos del módulo en el directorio %s. Para que Dolibarr procese este directorio, debe configurar su conf/conf.php para agregar las 2 líneas de directiva:
$dolibarr_main_url_root_alt ='/custom';
$dolibarr_main_document_root_alt='%s/custom'; HighlightLinesOnMouseHover=Resalta las líneas de la mesa cuando el movimiento del mouse pasa por encima +HighlightLinesColor=Resalte el color de la línea cuando pase el mouse (use 'ffffff' para no resaltar) +HighlightLinesChecked=Resalte el color de la línea cuando esté marcada (use 'ffffff' para no resaltar) TextTitleColor=Color del texto del título de la página LinkColor=Color de enlaces PressF5AfterChangingThis=Presione CTRL + F5 en el teclado o borre la caché de su navegador después de cambiar este valor para que sea efectivo @@ -876,17 +1327,22 @@ BackgroundTableLineEvenColor=Color de fondo para líneas de mesas uniformes MinimumNoticePeriod=Periodo de preaviso mínimo (Su solicitud de ausencia debe hacerse antes de este retraso) NbAddedAutomatically=Cantidad de días añadidos a los contadores de usuarios (automáticamente) cada mes EnterAnyCode=Este campo contiene una referencia para identificar la línea. Ingrese cualquier valor de su elección, pero sin caracteres especiales. +UnicodeCurrency=Ingrese aquí entre llaves, lista de bytes que representan el símbolo de moneda. Por ejemplo: para $, ingrese [36] - para brasil R $ [82,36] - para €, ingrese [8364] ColorFormat=El color RGB está en formato HEX, por ejemplo: FF0000 PositionIntoComboList=Posición de la línea en listas combinadas SellTaxRate=Tasa de impuesto a la venta RecuperableOnly=Sí para el IVA "No percibido pero recuperable" dedicado para un estado en Francia. Mantenga el valor en "No" en todos los demás casos. +UrlTrackingDesc=Si el proveedor o el servicio de transporte ofrece una página o sitio web para verificar el estado de sus envíos, puede ingresar aquí. Puede usar la clave {TRACKID} en los parámetros de la URL para que el sistema la reemplace con el número de seguimiento que el usuario ingresó en la tarjeta de envío. +OpportunityPercent=Cuando cree un cliente potencial, definirá una cantidad estimada de proyecto / cliente potencial. De acuerdo con el estado del cliente potencial, esta cantidad se puede multiplicar por esta tasa para evaluar el monto total que todos sus clientes potenciales pueden generar. El valor es un porcentaje (entre 0 y 100). TemplateForElement=Este registro de plantilla está dedicado a qué elemento +TemplateIsVisibleByOwnerOnly=La plantilla es visible solo para el propietario VisibleNowhere=Visible en ninguna parte FillFixTZOnlyIfRequired=Ejemplo: +2 (llenar solo si se experimentó un problema) ExpectedChecksum=Suma de comprobación esperada CurrentChecksum=Cheque actual ForcedConstants=Valores constantes requeridos MailToSendProposal=Propuestas de clientes +MailToSendOrder=Ordenes de venta MailToSendInvoice=Facturas de cliente MailToSendSupplierRequestForQuotation=Solicitud de presupuesto MailToSendSupplierOrder=Ordenes de compra @@ -897,7 +1353,10 @@ YouUseLastStableVersion=Usas la última versión estable TitleExampleForMajorRelease=Ejemplo de mensaje que puede usar para anunciar esta versión principal (no dude en utilizarla en sus sitios web) TitleExampleForMaintenanceRelease=Ejemplo de mensaje que puede usar para anunciar esta versión de mantenimiento (no dude en utilizarla en sus sitios web) ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s está disponible. La versión %s es una versión importante con muchas características nuevas para usuarios y desarrolladores. Puede descargarlo desde el área de descarga del portal https://www.dolibarr.org (versiones estables del subdirectorio). Puede leer ChangeLog para obtener la lista completa de cambios. +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s está disponible. La versión %s es una versión de mantenimiento, por lo que solo contiene correcciones de errores. Recomendamos a todos los usuarios actualizar a esta versión. Una versión de mantenimiento no introduce nuevas funciones o cambios en la base de datos. Puede descargarlo desde el área de descarga del portal https://www.dolibarr.org (subdirectorio Estable versiones). Puede leer el registro de cambios para obtener una lista completa de los cambios. +MultiPriceRuleDesc=Cuando la opción "Varios niveles de precios por producto / servicio" está habilitada, puede definir diferentes precios (uno por nivel de precio) para cada producto. Para ahorrar tiempo, aquí puede ingresar una regla para autocalcular un precio para cada nivel basado en el precio del primer nivel, por lo que tendrá que ingresar solo un precio para el primer nivel para cada producto. Esta página está diseñada para ahorrarle tiempo, pero solo es útil si los precios de cada nivel son relativos al primer nivel. Puedes ignorar esta página en la mayoría de los casos. ModelModulesProduct=Plantillas para documentos de productos +ToGenerateCodeDefineAutomaticRuleFirst=Para poder generar códigos automáticamente, primero debe definir un administrador para definir automáticamente el número de código de barras. SeeSubstitutionVars=Ver * nota para la lista de posibles variables de sustitución AllPublishers=Todos los editores AddRemoveTabs=Agregar o eliminar pestañas @@ -916,14 +1375,75 @@ AddOtherPagesOrServices=Agregar otras páginas o servicios AddModels=Agregar documento o plantillas de numeración AddSubstitutions=Añadir sustituciones de teclas DetectionNotPossible=La detección no es posible +UrlToGetKeyToUseAPIs=Url para obtener el token para utilizar la API (una vez que se ha recibido, se guarda en la tabla de usuarios de la base de datos y debe proporcionarse en cada llamada a la API) ListOfAvailableAPIs=Lista de API disponibles +activateModuleDependNotSatisfied=El módulo "%s" depende del módulo "%s", que falta, por lo que el módulo "%1$s" puede no funcionar correctamente. Instale el módulo "%2$s" o desactive el módulo "%1$s" si quiere estar a salvo de alguna sorpresa +CommandIsNotInsideAllowedCommands=El comando que está intentando ejecutar no está en la lista de comandos permitidos definidos en el parámetro $ dolibarr_main_restrict_os_commands en el archivo conf.php . LandingPage=Página de destino +SamePriceAlsoForSharedCompanies=Si utiliza un módulo de varias empresas, con la opción "Precio único", el precio también será el mismo para todas las empresas si los productos se comparten entre entornos. ModuleEnabledAdminMustCheckRights=Módulo ha sido activado. Los permisos para los módulos activados se otorgaron solo a los usuarios administradores. Es posible que deba otorgar permisos a otros usuarios o grupos manualmente si es necesario. +UserHasNoPermissions=Este usuario no tiene permisos definidos. +TypeCdr=Utilice "Ninguno" si la fecha de pago es la fecha de la factura más un delta en días (delta es el campo "%s")
Use "Al final del mes", si, después de delta, la fecha debe aumentarse para llegar al final del mes (+ un "%s" opcional en días)
Utilice "Actual / Siguiente" para que la fecha del plazo de pago sea el primer N del mes después de delta (delta es el campo "%s", N se almacena en el campo "%s") BaseCurrency=Moneda de referencia de la empresa (entre en la configuración de la empresa para cambiar esto) +WarningNoteModulePOSForFrenchLaw=Este módulo %s cumple con las leyes francesas (Loi Finance 2016) porque el módulo de Registros no reversibles se activa automáticamente. +WarningInstallationMayBecomeNotCompliantWithLaw=Está intentando instalar el módulo %s que es un módulo externo. Activar un módulo externo significa que confía en el editor de ese módulo y que está seguro de que este módulo no afecta negativamente el comportamiento de su aplicación y cumple con las leyes de su país (%s). Si el módulo introduce una característica ilegal, usted se hace responsable del uso de software ilegal. +NothingToSetup=No se requiere ninguna configuración específica para este módulo. SetToYesIfGroupIsComputationOfOtherGroups=Establezca esto en sí si este grupo es un cálculo de otros grupos +EnterCalculationRuleIfPreviousFieldIsYes=Ingrese la regla de cálculo si el campo anterior se estableció en Sí (por ejemplo, 'CODEGRP1 + CODEGRP2') SeveralLangugeVariatFound=Varias variantes de lenguaje encontradas -OperationParamDesc=Define values to use for action, or how to extract values. For example:
objproperty1=SET:abc
objproperty1=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:abc
objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)
options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. +GDPRContact=Oficial de protección de datos (DPO, privacidad de datos o contacto GDPR) +GDPRContactDesc=Si almacena datos sobre empresas / ciudadanos europeos, puede nombrar al contacto que es responsable del Reglamento general de protección de datos aquí +HelpOnTooltip=Texto de ayuda para mostrar en información sobre herramientas +HelpOnTooltipDesc=Coloque texto o una clave de traducción aquí para que el texto se muestre en una información sobre herramientas cuando este campo aparezca en un formulario +YouCanDeleteFileOnServerWith=Puede eliminar este archivo en el servidor con la línea de comandos:
%s +ChartLoaded=Plan de cuenta cargado +EnableFeatureFor=Habilitar características para %s +VATIsUsedIsOff=Nota: La opción de usar el impuesto sobre las ventas o el IVA se ha establecido en Desactivado en el menú %s - %s, por lo que el impuesto sobre las ventas o IVA utilizado siempre será 0 para las ventas. +SwapSenderAndRecipientOnPDF=Intercambiar la posición de la dirección del remitente y el destinatario en documentos PDF +FeatureSupportedOnTextFieldsOnly=Advertencia, función compatible solo en los campos de texto. También se debe establecer un parámetro de URL action = create o action = edit O el nombre de la página debe terminar con 'new.php' para activar esta función. +EmailCollector=Recolector de correo electronico +EmailCollectorDescription=Agregue un trabajo programado y una página de configuración para escanear los buzones de correo electrónico con regularidad (utilizando el protocolo IMAP) y registre los correos electrónicos recibidos en su aplicación, en el lugar correcto y / o cree algunos registros automáticamente (como clientes potenciales). +NewEmailCollector=Nuevo coleccionista de email +EMailHost=Host del servidor de correo electrónico IMAP +EmailcollectorOperations=Operaciones a realizar por coleccionista. +MaxEmailCollectPerCollect=Número máximo de correos electrónicos recogidos por cobro +ConfirmCloneEmailCollector=¿Está seguro de que desea clonar el recopilador de correo electrónico %s? +DateLastCollectResult=Fecha de última recopilación probada +DateLastcollectResultOk=Fecha última recogida exitosa +EmailCollectorConfirmCollectTitle=Correo electrónico recoger confirmación +EmailCollectorConfirmCollect=¿Quieres ejecutar la colección para este coleccionista ahora? +NoNewEmailToProcess=No hay correo electrónico nuevo (filtros coincidentes) para procesar +XEmailsDoneYActionsDone=correos electrónicos %s calificados, correos electrónicos %s procesados con éxito (para %s registro / acciones realizadas) +RecordEvent=Grabar evento de correo electrónico +CreateLeadAndThirdParty=Crear plomo (y tercero si es necesario) +CodeLastResult=Código de resultado más reciente +NbOfEmailsInInbox=Número de correos electrónicos en el directorio de origen +LoadThirdPartyFromName=Cargar búsqueda de terceros en %s (solo carga) +LoadThirdPartyFromNameOrCreate=Cargar búsqueda de terceros en %s (crear si no se encuentra) +ECMAutoTree=Mostrar arbol ECM automatico +OperationParamDesc=Defina valores para usar para la acción, o cómo extraer valores. Por ejemplo:
objproperty1 = SET: abc
objproperty1 = SET: un valor con reemplazo de __objproperty1__
objproperty3 = SETIFEMPTY: abc
objproperty4 = EXTRACT: HEADER: X-Myheaderkey. * [^ \\ s] + (. *)
options_myextrafield = EXTRACT: SUBJECT: ([^ \\ s] *)
object.objproperty5 = EXTRACT: BODY: el nombre de mi empresa es \\ s ([^ \\ s] *)

Utilizar una ; Char como separador para extraer o configurar varias propiedades. +OpeningHoursDesc=Introduzca aquí el horario habitual de apertura de su empresa. +ResourceSetup=Configuración del módulo de recursos UseSearchToSelectResource=Use un formulario de búsqueda para elegir un recurso (en lugar de una lista desplegable). DisabledResourceLinkUser=Deshabilitar característica para vincular un recurso a los usuarios DisabledResourceLinkContact=Deshabilitar característica para vincular un recurso a contactos ConfirmUnactivation=Confirmar restablecimiento del módulo +OnMobileOnly=Sólo en pantalla pequeña (teléfono inteligente) +DisableProspectCustomerType=Deshabilite el tipo de tercero "Prospecto + Cliente" (por lo tanto, el tercero debe ser Prospecto o Cliente, pero no pueden ser ambos) +MAIN_OPTIMIZEFORTEXTBROWSER=Simplificar la interfaz para ciegos. +MAIN_OPTIMIZEFORTEXTBROWSERDesc=Habilite esta opción si es una persona ciega o si utiliza la aplicación desde un navegador de texto como Lynx o Links. +ThisValueCanOverwrittenOnUserLevel=Este valor puede ser sobrescrito por cada usuario desde su página de usuario - pestaña '%s' +DefaultCustomerType=Tipo de tercero por defecto para el formulario de creación de "Nuevo cliente" +ABankAccountMustBeDefinedOnPaymentModeSetup=Nota: La cuenta bancaria debe definirse en el módulo de cada modo de pago (Paypal, Stripe, ...) para que esta función funcione. +RootCategoryForProductsToSellDesc=Si se define, solo los productos dentro de esta categoría o niños de esta categoría estarán disponibles en el Punto de venta +DebugBar=Barra de debug +WarningValueHigherSlowsDramaticalyOutput=Advertencia, los valores más altos ralentizan dramáticamente la salida. +EXPORTS_SHARE_MODELS=Los modelos de exportación se comparten con todos. +IfTrackingIDFoundEventWillBeLinked=Tenga en cuenta que si se encuentra un ID de seguimiento en el correo electrónico entrante, el evento se vinculará automáticamente a los objetos relacionados. +IFTTT_SERVICE_KEY=IFTTT clave de servicio +IFTTTDesc=Este módulo está diseñado para desencadenar eventos en IFTTT y / o para ejecutar alguna acción en desencadenadores IFTTT externos. +UrlForIFTTT=Punto final de URL para IFTTT +YouWillFindItOnYourIFTTTAccount=Lo encontrarás en tu cuenta de IFTTT. +EndPointFor=Punto final para %s: %s +DeleteEmailCollector=Eliminar el colector de correo electrónico +ConfirmDeleteEmailCollector=¿Estás seguro de que deseas eliminar este recopilador de correo electrónico? diff --git a/htdocs/langs/es_CL/agenda.lang b/htdocs/langs/es_CL/agenda.lang index 1c7223c54c1..d9cea825edb 100644 --- a/htdocs/langs/es_CL/agenda.lang +++ b/htdocs/langs/es_CL/agenda.lang @@ -17,8 +17,12 @@ ViewWeek=Vista de la semana ViewPerUser=Por usuario ViewPerType=Por tipo de vista AutoActions=Llenado automático +AgendaAutoActionDesc=Aquí puede definir los eventos que desea que Dolibarr cree automáticamente en Agenda. Si no se marca nada, solo las acciones manuales se incluirán en los registros y se mostrarán en la Agenda. El seguimiento automático de las acciones comerciales realizadas en objetos (validación, cambio de estado) no se guardará. +AgendaSetupOtherDesc=Esta página ofrece opciones para permitir la exportación de sus eventos Dolibarr a un calendario externo (Thunderbird, Google Calendar, etc.) AgendaExtSitesDesc=Esta página permite declarar fuentes externas de calendarios para ver sus eventos en la agenda de Dolibarr. ActionsEvents=Eventos por los cuales Dolibarr creará una acción en agenda automáticamente +EventRemindersByEmailNotEnabled=Los recordatorios de eventos por correo electrónico no se habilitaron en la configuración del módulo %s. +COMPANY_DELETEInDolibarr=%s de terceros eliminado PropalClosedSignedInDolibarr=Propuesta %s firmada PropalClosedRefusedInDolibarr=Propuesta %s rechazada PropalValidatedInDolibarr=Propuesta %s validada @@ -32,6 +36,7 @@ MemberSubscriptionDeletedInDolibarr=Suscripción %s para el miembro %s eliminado ShipmentValidatedInDolibarr=Envío %s validado ShipmentClassifyClosedInDolibarr=Envío %s clasificado facturado ShipmentUnClassifyCloseddInDolibarr=Envío %s clasificado reabierto +ShipmentBackToDraftInDolibarr=Envío %s volver al estado de borrador ShipmentDeletedInDolibarr=Envío %s eliminado OrderCreatedInDolibarr=Orden %s creado OrderValidatedInDolibarr=Orden %s validada @@ -41,22 +46,34 @@ OrderBilledInDolibarr=Orden %s clasificado facturado OrderApprovedInDolibarr=Orden %s aprobada OrderRefusedInDolibarr=Orden %s rechazada OrderBackToDraftInDolibarr=Ordene %s vuelva al estado del borrador +ProposalSentByEMail=Propuesta comercial %s enviada por correo electrónico +ContractSentByEMail=Contrato %s enviado por correo electrónico +OrderSentByEMail=Pedido de venta %s enviado por correo electrónico +InvoiceSentByEMail=Factura del cliente %s enviada por correo electrónico +SupplierOrderSentByEMail=Orden de compra %s enviada por correo electrónico +SupplierInvoiceSentByEMail=Factura del proveedor %s enviada por correo electrónico +ShippingSentByEMail=Envío %s enviado por correo electrónico ShippingValidated=Envío %s validado ProposalDeleted=Propuesta eliminada OrderDeleted=Orden eliminada InvoiceDeleted=Factura borrada +TICKET_MODIFYInDolibarr=Boleto %s modificado +TICKET_ASSIGNEDInDolibarr=Boleto %s asignado +TICKET_CLOSEInDolibarr=Boleto %s cerrado DateActionEnd=Fecha final AgendaUrlOptions1=También puede agregar los siguientes parámetros para filtrar la salida: AgendaUrlOptions3=logina =%s para restringir la salida a acciones propiedad de un usuario%s. AgendaUrlOptionsNotAdmin=logina=!%s para restringir la salida a acciones que no son propiedad del usuario %s. AgendaUrlOptions4=logint =%s para restringir la salida a acciones asignadas al usuario %s (propietario y otros). AgendaUrlOptionsProject= project = __ PROJECT_ID __ para restringir el resultado a acciones vinculadas al proyecto __ PROJECT_ID __ . +AgendaUrlOptionsNotAutoEvent=notactiontype = systemauto para excluir eventos automáticos. AgendaShowBirthdayEvents=Mostrar cumpleaños de contactos AgendaHideBirthdayEvents=Ocultar cumpleaños de contactos ExportDataset_event1=Lista de eventos de la agenda DefaultWorkingDays=Rango predeterminado de días laborables en la semana (Ejemplo: 1-5, 1-6) DefaultWorkingHours=Horas de trabajo predeterminadas en el día (Ejemplo: 9-18) ExtSites=Importar calendarios externos +ExtSitesEnableThisTool=Mostrar calendarios externos (definidos en la configuración global) en Agenda. No afecta a los calendarios externos definidos por los usuarios. AgendaExtNb=Calendario no. %s ExtSiteUrlAgenda=URL para acceder al archivo .ical DateActionBegin=Fecha del evento de inicio diff --git a/htdocs/langs/es_CL/assets.lang b/htdocs/langs/es_CL/assets.lang index aa1b21e31d6..76872a25ac6 100644 --- a/htdocs/langs/es_CL/assets.lang +++ b/htdocs/langs/es_CL/assets.lang @@ -3,11 +3,15 @@ Assets =Bienes AccountancyCodeAsset =Código de contabilidad (activo) AccountancyCodeDepreciationAsset =Código de contabilidad (cuenta de activos de depreciación) AccountancyCodeDepreciationExpense =Código de contabilidad (cuenta de gastos de depreciación) +AssetsTypeSetup=Configuración de tipo de activo DeleteType=Borrar +ConfirmDeleteAssetType=¿Estás seguro de que quieres eliminar este tipo de activo? +ShowTypeCard=Mostrar tipo '%s' ModuleAssetsName =Bienes ModuleAssetsDesc =Descripción de los activos AssetsSetup =Configuración de activos AssetsSetupPage =Página de configuración de activos +ExtraFieldsAssetsType =Atributos complementarios (Tipo de activo) AssetsTypeId=Identificación del tipo de activo AssetsTypeLabel=Etiqueta de tipo de activo MenuAssets =Bienes diff --git a/htdocs/langs/es_CL/banks.lang b/htdocs/langs/es_CL/banks.lang index 986887cb0c5..b6aa61864a8 100644 --- a/htdocs/langs/es_CL/banks.lang +++ b/htdocs/langs/es_CL/banks.lang @@ -1,8 +1,10 @@ # Dolibarr language file - Source file is en_US - banks +MenuBankCash=Bancos | Efectivo MenuVariousPayment=Pagos diversos MenuNewVariousPayment=Nuevo pago misceláneo BankAccount=cuenta bancaria BankAccounts=Cuentas bancarias +BankAccountsAndGateways=Cuentas bancarias | Puertas de acceso AccountRef=Ref de cuenta financiera AccountLabel=Etiqueta de cuenta financiera CashAccount=Cuenta de efectivo @@ -27,6 +29,8 @@ AccountStatementShort=Declaración AccountStatements=Estados de cuenta LastAccountStatements=Últimos estados de cuenta IOMonthlyReporting=Informes mensuales +BankAccountDomiciliation=Dirección del banco +RIBControlError=Fallo en la comprobación de integridad de valores. Esto significa que la información para este número de cuenta no está completa o es incorrecta (ver país, números e IBAN). CreateAccount=Crear una cuenta MenuNewFinancialAccount=Nueva cuenta financiera EditFinancialAccount=Editar cuenta @@ -51,6 +55,7 @@ ListTransactionsByCategory=Entradas de la lista / categoría TransactionsToConciliate=Entradas para conciliar Conciliable=Puede ser reconciliado Conciliation=Reconciliación +SaveStatementOnly=Guardar solo declaración ReconciliationLate=Reconciliación tarde OnlyOpenedAccount=Solo cuentas abiertas AccountToCredit=Cuenta al crédito @@ -64,10 +69,12 @@ AddBankRecord=Añadir entrada AddBankRecordLong=Agregar entrada manualmente DateConciliating=Fecha de conciliación BankLineConciliated=Entrada reconciliada -WithdrawalPayment=Pago de retiros +SupplierInvoicePayment=Pago del vendedor +WithdrawalPayment=Orden de pago de débito SocialContributionPayment=Pago de impuestos sociales/fiscales BankTransfer=transferencia bancaria BankTransfers=transferencias bancarias +TransferDesc=Tras transferir de una cuenta a otra, Dolibarr escribirá dos registros (una cuenta de débito en origen y un crédito en una cuenta de destino). La misma cantidad (excepto el signo), la etiqueta y la fecha se utilizarán para esta transacción) TransferTo=A TransferFromToDone=Una transferencia de %s a %s de %s %s ha sido grabada. CheckTransmitter=Transmisor @@ -78,6 +85,7 @@ ConfirmDeleteCheckReceipt=¿Seguro que quieres eliminar este recibo de cheque? BankChecks=Cheques bancarios BankChecksToReceipt=Cheques en espera de depósito ShowCheckReceipt=Mostrar recibo de depósito de cheques +NumberOfCheques=No. de cheque DeleteTransaction=Eliminar la entrada ConfirmDeleteTransaction=¿Seguro que quieres eliminar esta entrada? ThisWillAlsoDeleteBankRecord=Esto también eliminará la entrada bancaria generada @@ -92,6 +100,8 @@ PaymentDateUpdateFailed=La fecha de pago no se pudo actualizar Transactions=Actas BankTransactionLine=Entrada bancaria AllAccounts=Todas las cuentas bancarias y de efectivo +FutureTransaction=Transacción futura. No se puede reconciliar. +SelectChequeTransactionAndGenerate=Seleccione / filtrar cheques para incluir en el recibo de depósito de cheques y haga clic en "Crear". InputReceiptNumber=Elija el extracto bancario relacionado con la conciliación. Use un valor numérico ordenable: AAAAMM o AAAAMMDD EventualyAddCategory=Eventualmente, especifique una categoría en la cual clasificar los registros ToConciliate=¿Para reconciliar? @@ -103,7 +113,16 @@ ConfirmDeleteRib=¿Seguro que quieres eliminar este registro de BAN? ConfirmRejectCheck=¿Seguro que quieres marcar este cheque como rechazado? RejectCheckDate=Fecha en que se devolvió el cheque BankAccountModelModule=Plantillas de documentos para cuentas bancarias +DocumentModelSepaMandate=Plantilla de mandato de la SEPA. Útil para los países europeos en la CEE solamente. DocumentModelBan=Plantilla para imprimir una página con información de BAN. +NewVariousPayment=Nuevo pago misceláneo +VariousPayment=Pago misceláneo VariousPayments=Pagos diversos +ShowVariousPayment=Mostrar pago misceláneo +AddVariousPayment=Añadir pago misceláneo SEPAMandate=Mandato de la SEPA YourSEPAMandate=Su mandato de SEPA +FindYourSEPAMandate=Este es su mandato de SEPA para autorizar a nuestra empresa a realizar un pedido de débito directo a su banco. Devuélvalo firmado (escaneo del documento firmado) o envíelo por correo a +AutoReportLastAccountStatement=Rellene automáticamente el campo 'número de extracto bancario' con el último número de extracto al realizar la conciliación +CashControl=Cerca de efectivo POS +NewCashFence=Nueva valla de efectivo diff --git a/htdocs/langs/es_CL/bills.lang b/htdocs/langs/es_CL/bills.lang index 84353e435a0..21dcccac244 100644 --- a/htdocs/langs/es_CL/bills.lang +++ b/htdocs/langs/es_CL/bills.lang @@ -4,6 +4,8 @@ BillsCustomer=Factura del cliente BillsSuppliers=Facturas del vendedor BillsCustomersUnpaid=Facturas pendientes de pago de los clientes BillsCustomersUnpaidForCompany=Facturas impagadas de los clientes para %s +BillsSuppliersUnpaid=Facturas de proveedores sin pagar +BillsSuppliersUnpaidForCompany=Facturas de proveedores sin pagar por %s BillsLate=Pagos atrasados BillsStatistics=Estadísticas de facturas de clientes DisabledBecauseDispatchedInBookkeeping=Desactivado porque la factura se envió a la contabilidad @@ -16,8 +18,10 @@ InvoiceProFormaAsk=Factura de proforma InvoiceProFormaDesc= Factura proforma es una imagen de una factura verdadera pero no tiene valor contable. InvoiceReplacement=Factura de reemplazo InvoiceReplacementAsk=Reemplazo de factura por factura +InvoiceReplacementDesc=La factura de reemplazo se utiliza para reemplazar completamente una factura sin que se haya recibido ningún pago.

Nota: Solo las facturas sin pago pueden ser reemplazadas. Si la factura que reemplaza aún no está cerrada, se cerrará automáticamente a "abandonada". InvoiceAvoir=Nota de crédito InvoiceAvoirAsk=Nota de crédito para corregir la factura +InvoiceAvoirDesc=La nota de crédito es una factura negativa utilizada para corregir el hecho de que una factura muestra una cantidad que difiere de la cantidad realmente pagada (por ejemplo, el cliente pagó demasiado por error o no pagará la cantidad completa ya que algunos productos fueron devueltos). invoiceAvoirWithLines=Crear nota de crédito con líneas de la factura de origen invoiceAvoirWithPaymentRestAmount=Crear nota de crédito con la factura pendiente de pago de origen invoiceAvoirLineWithPaymentRestAmount=Nota de crédito por el monto restante no pagado @@ -28,6 +32,7 @@ ReplacementByInvoice=Reemplazado por factura CorrectInvoice=Corregir factura %s CorrectionInvoice=Factura de corrección UsedByInvoice=Utilizado para pagar la factura %s +NoReplacableInvoice=No hay facturas reemplazables. NoInvoiceToCorrect=Sin factura para corregir InvoiceHasAvoir=Fue fuente de una o varias notas de crédito CardBill=Tarjeta de factura @@ -35,6 +40,8 @@ PredefinedInvoices=Facturas Predefinidas InvoiceCustomer=Factura del cliente CustomerInvoice=Factura del cliente CustomersInvoices=Facturas de clientes +SupplierInvoice=Factura del proveedor +SupplierBill=Factura del proveedor SupplierBills=facturas de proveedores PaymentBack=Pago de vuelta CustomerInvoicePaymentBack=Pago de vuelta @@ -42,21 +49,31 @@ PaymentsBack=Pagos de vuelta paymentInInvoiceCurrency=en la moneda de las facturas DeletePayment=Eliminar pago ConfirmDeletePayment=¿Seguro que quieres eliminar este pago? +ConfirmConvertToReduc2=El monto se guardará entre todos los descuentos y podría utilizarse como un descuento para una factura actual o futura para este cliente. +ConfirmConvertToReducSupplier2=El monto se guardará entre todos los descuentos y podría utilizarse como un descuento para una factura actual o futura de este proveedor. +SupplierPayments=Pagos de proveedores ReceivedCustomersPayments=Pagos recibidos de los clientes +PayedSuppliersPayments=Pagos pagados a los vendedores ReceivedCustomersPaymentsToValid=Recibió pagos de clientes para validar PaymentsReportsForYear=Informes de pagos para %s PaymentsAlreadyDone=Pagos ya hechos PaymentsBackAlreadyDone=Pagos ya hechos PaymentRule=Regla de pago PaymentTypeDC=Tarjeta de crédito débito +PaymentTerm=Plazo de pago +PaymentConditions=Términos de pago +PaymentConditionsShort=Términos de pago PaymentAmount=Monto del pago PaymentHigherThanReminderToPay=Pago más alto que un recordatorio para pagar +HelpPaymentHigherThanReminderToPay=Atención, el monto de pago de una o más facturas es mayor que el monto pendiente de pago.
Edite su entrada, de lo contrario confirme y considere crear una nota de crédito por el exceso recibido por cada factura pagada en exceso. +HelpPaymentHigherThanReminderToPaySupplier=Atención, el monto de pago de una o más facturas es mayor que el monto pendiente de pago.
Edite su entrada, de lo contrario confirme y considere crear una nota de crédito por el exceso pagado por cada factura pagada en exceso. ClassifyUnBilled=Clasificar 'Unbilled' CreateCreditNote=Crear nota de crédito AddBill=Crear factura o nota de crédito AddToDraftInvoices=Agregar a la factura borrador SearchACustomerInvoice=Buscar una factura de cliente CancelBill=Cancelar una factura +SendRemindByMail=Enviar recordatorio por correo electrónico DoPayment=Ingrese el pago DoPaymentBack=Ingrese el reembolso ConvertToReduc=Marcar como crédito disponible @@ -78,6 +95,8 @@ BillStatusNotRefunded=No reembolsado BillStatusClosedUnpaid=Cerrado (sin pagar) BillStatusClosedPaidPartially=Pagado (parcialmente) BillShortStatusPaid=Pagado +BillShortStatusPaidBackOrConverted=Reembolsado o convertido +Refunded=Reintegrado BillShortStatusConverted=Pagado BillShortStatusCanceled=Abandonado BillShortStatusValidated=Validado @@ -87,11 +106,16 @@ BillShortStatusNotRefunded=No reembolsado BillShortStatusClosedUnpaid=Cerrado BillShortStatusClosedPaidPartially=Pagado (parcialmente) PaymentStatusToValidShort=Validar +ErrorVATIntraNotConfigured=Número de IVA intracomunitario aún no definido +ErrorNoPaiementModeConfigured=No se ha definido ningún tipo de pago por defecto. Ir a la configuración del módulo de factura para solucionar este problema. +ErrorCreateBankAccount=Cree una cuenta bancaria, luego vaya al panel de configuración del módulo Factura para definir los tipos de pago ErrorBillNotFound=La factura %s no existe +ErrorInvoiceAlreadyReplaced=Error, intentó validar una factura para reemplazar la factura %s. Pero este ya ha sido reemplazado por la factura %s. ErrorDiscountAlreadyUsed=Error, descuento ya usado ErrorInvoiceAvoirMustBeNegative=Error, la factura correcta debe tener una cantidad negativa ErrorInvoiceOfThisTypeMustBePositive=Error, este tipo de factura debe tener una cantidad positiva ErrorCantCancelIfReplacementInvoiceNotValidated=Error, no puede cancelar una factura que ha sido reemplazada por otra factura que todavía está en estado de borrador +ErrorThisPartOrAnotherIsAlreadyUsedSoDiscountSerieCantBeRemoved=Esta parte u otra ya está en uso, por lo que no se pueden eliminar las series de descuento BillFrom=De BillTo=A ActionsOnBill=Acciones en la factura @@ -101,10 +125,13 @@ FoundXQualifiedRecurringInvoiceTemplate=Se encontró %s factura (s) de plantilla NotARecurringInvoiceTemplate=No es una factura de plantilla recurrente LatestTemplateInvoices=%s últimas plantillas de facturas LatestCustomerTemplateInvoices=%s últimas plantillas de facturas de cliente +LatestSupplierTemplateInvoices=Las últimas facturas de la plantilla de proveedor %s LastCustomersBills=Últimas facturas de clientes %s +LastSuppliersBills=Las últimas facturas de proveedor %s AllCustomerTemplateInvoices=Todas las plantillas de facturas DraftBills=Borrador de facturas CustomersDraftInvoices=Factura del cliente +SuppliersDraftInvoices=Proyecto de facturas del vendedor. Unpaid=No pagado ConfirmDeleteBill=¿Seguro que quieres eliminar esta factura? ConfirmValidateBill=¿Está seguro de que desea validar esta factura con referencia %s? @@ -113,20 +140,28 @@ ConfirmClassifyPaidBill=¿Está seguro de que desea cambiar la factura del %s ConfirmCancelBill=¿Seguro que quieres cancelar la factura del %s? ConfirmCancelBillQuestion=¿Por qué quiere clasificar esta factura como "abandonada"? ConfirmClassifyPaidPartially=¿Está seguro de que desea cambiar la factura del %s al estado pagado? +ConfirmClassifyPaidPartiallyQuestion=Esta factura no ha sido pagada en su totalidad. ¿Cuál es la razón para cerrar esta factura? +ConfirmClassifyPaidPartiallyReasonAvoir=Queda sin pagar (%s %s) es un descuento otorgado porque el pago se realizó antes del plazo. Regularizo el IVA con una nota de crédito. ConfirmClassifyPaidPartiallyReasonDiscount=El no pagado restante (%s %s) es un descuento otorgado porque el pago se realizó antes del plazo. ConfirmClassifyPaidPartiallyReasonDiscountNoVat=El impago restante (%s%s) es un descuento otorgado porque el pago se realizó antes del plazo. Acepto perder el IVA sobre este descuento. ConfirmClassifyPaidPartiallyReasonDiscountVat=El impago restante (%s%s) es un descuento otorgado porque el pago se realizó antes del plazo. Recupero el IVA de este descuento sin una nota de crédito. ConfirmClassifyPaidPartiallyReasonBadCustomer=Mal cliente ConfirmClassifyPaidPartiallyReasonProductReturned=Productos devueltos parcialmente ConfirmClassifyPaidPartiallyReasonOther=Cantidad abandonada por otra razón +ConfirmClassifyPaidPartiallyReasonDiscountNoVatDesc=Esta opción es posible si su factura ha recibido comentarios adecuados. (Ejemplo: solo el impuesto correspondiente al precio que realmente se pagó otorga derechos de deducción ») +ConfirmClassifyPaidPartiallyReasonDiscountVatDesc=En algunos países, esta opción podría ser posible solo si su factura contiene las notas correctas. ConfirmClassifyPaidPartiallyReasonAvoirDesc=Utilice esta opción si el resto no es adecuado +ConfirmClassifyPaidPartiallyReasonBadCustomerDesc=Un mal cliente es un cliente que se niega a pagar su deuda. ConfirmClassifyPaidPartiallyReasonProductReturnedDesc=Esta opción se usa cuando el pago no está completo porque algunos de los productos fueron devueltos +ConfirmClassifyPaidPartiallyReasonOtherDesc=Utilice esta opción si todas las demás no son adecuadas, por ejemplo, en la siguiente situación:
- Pago no completado porque algunos productos fueron enviados de vuelta.
- cantidad reclamada demasiado importante porque se olvidó un descuento
En todos los casos, la cantidad reclamada en exceso debe corregirse en el sistema contable mediante la creación de una nota de crédito. ConfirmClassifyAbandonReasonOtherDesc=Esta elección se usará en todos los demás casos. Por ejemplo, porque planea crear una factura de reemplazo. ConfirmCustomerPayment=¿Confirma esta entrada de pago para %s %s? ConfirmSupplierPayment=¿Confirma esta entrada de pago para %s %s? ConfirmValidatePayment=¿Seguro que quieres validar este pago? No se puede hacer ningún cambio una vez que se valida el pago. UnvalidateBill=Desvalidar factura +NumberOfBillsByMonth=Nº de facturas al mes. AmountOfBills=Cantidad de facturas +AmountOfBillsHT=Importe de las facturas (neto de impuestos) AmountOfBillsByMonthHT=Importe de facturas por mes (neto de impuestos) ShowSocialContribution=Mostrar impuesto social / fiscal ShowBill=Mostrar factura @@ -166,8 +201,11 @@ DateInvoice=Fecha de la factura DatePointOfTax=Punto de impuesto NoInvoice=Sin factura ClassifyBill=Clasificar factura +SupplierBillsToPay=Facturas de proveedores sin pagar CustomerBillsUnpaid=Facturas pendientes de pago de los clientes NonPercuRecuperable=No recuperable +SetConditions=Establecer condiciones de pago +SetMode=Establecer tipo de pago SetRevenuStamp=Establecer sello de ingresos Billed=Pagado RepeatableInvoice=Factura de la plantilla @@ -176,7 +214,9 @@ Repeatable=Modelo ChangeIntoRepeatableInvoice=Convertir en factura de plantilla CreateRepeatableInvoice=Crear factura de plantilla CreateFromRepeatableInvoice=Crear a partir de la factura de la plantilla +CustomersInvoicesAndInvoiceLines=Facturas de los clientes y detalles de la factura. CustomersInvoicesAndPayments=Facturas y pagos de clientes +ExportDataset_invoice_1=Facturas de los clientes y detalles de la factura. ExportDataset_invoice_2=Facturas y pagos de clientes Reductions=Reducciones AddDiscount=Crear descuento @@ -206,6 +246,8 @@ DiscountStillRemaining=Descuentos o créditos disponibles DiscountAlreadyCounted=Descuentos o créditos ya consumidos CustomerDiscounts=Descuentos para clientes BillAddress=Dirección de la cuenta +HelpAbandonBadCustomer=Esta cantidad se ha abandonado (el cliente dice que es un mal cliente) y se considera una pérdida excepcional. +HelpAbandonOther=Esta cantidad ha sido abandonada debido a que fue un error (el cliente o la factura equivocados se reemplazaron por otro, por ejemplo) IdSocialContribution=Identificación de pago de impuesto social / fiscal PaymentId=Identificación de pago PaymentRef=Pago ref. @@ -214,18 +256,28 @@ InvoiceRef=Factura ref. InvoiceDateCreation=Fecha de creación de la factura InvoiceStatus=Estado de la factura InvoiceNote=Nota de factura +OrderBilled=Orden facturada +DonationPaid=Donacion pagada WatermarkOnDraftBill=Marca de agua en borradores de facturas (nada si está vacío) InvoiceNotChecked=Sin factura seleccionada ConfirmCloneInvoice=¿Seguro que quieres clonar esta factura %s? DisabledBecauseReplacedInvoice=Acción deshabilitada porque la factura ha sido reemplazada +DescTaxAndDividendsArea=Esta área presenta un resumen de todos los pagos realizados para gastos especiales. Sólo se incluyen aquí los registros con pagos durante el año fijo. +NbOfPayments=No. de pagos SplitDiscount=Split de descuento en dos +ConfirmSplitDiscount=¿Está seguro de que desea dividir este descuento de %s %s en dos descuentos más pequeños? +TypeAmountOfEachNewDiscount=Cantidad de entrada para cada una de dos partes: +TotalOfTwoDiscountMustEqualsOriginal=El total de los dos nuevos descuentos debe ser igual al monto del descuento original. ConfirmRemoveDiscount=¿Seguro que quieres eliminar este descuento? RelatedBill=Factura relacionada RelatedBills=Facturas relacionadas RelatedCustomerInvoices=Facturas de clientes relacionadas +RelatedSupplierInvoices=Facturas de proveedores relacionados LatestRelatedBill=La última factura relacionada +WarningBillExist=Advertencia, ya existen una o más facturas. MergingPDFTool=Fusionando la herramienta PDF AmountPaymentDistributedOnInvoice=Monto del pago distribuido en la factura +PaymentOnDifferentThirdBills=Permitir pagos en diferentes facturas de terceros, pero la misma empresa matriz PaymentNote=Nota de pago ListOfPreviousSituationInvoices=Lista de facturas de situación previas ListOfNextSituationInvoices=Lista de próximas facturas de situación @@ -235,12 +287,14 @@ FrequencyUnit=Unidad de frecuencia toolTipFrequency=Ejemplos:
Establecer 7, Día : dar una nueva factura cada 7 días
Establecer 3, Mes : dar una nueva factura cada 3 meses NextDateToExecution=Fecha para la próxima generación de facturas DateLastGeneration=Fecha de última generación +MaxPeriodNumber=Max. número de generación de factura NbOfGenerationDone=Número de generación de factura ya realizada NbOfGenerationDoneShort=Número de generación realizada MaxGenerationReached=Número máximo de generaciones alcanzadas GeneratedFromRecurringInvoice=Generado a partir de la factura recurrente de la plantilla %s DateIsNotEnough=Fecha no alcanzada todavía InvoiceGeneratedFromTemplate=Factura %s generada a partir de la factura recurrente de la plantilla %s +GeneratedFromTemplate=Generado desde la factura de plantilla %s WarningInvoiceDateInFuture=Advertencia, la fecha de la factura es más alta que la fecha actual WarningInvoiceDateTooFarInFuture=Advertencia, la fecha de la factura está muy lejos de la fecha actual ViewAvailableGlobalDiscounts=Ver descuentos disponibles @@ -261,6 +315,7 @@ PaymentConditionShort14D=14 dias PaymentCondition14D=14 dias PaymentConditionShort14DENDMONTH=14 días de fin de mes PaymentCondition14DENDMONTH=Dentro de los 14 días siguientes al final del mes +FixAmount=Cantidad fija VarAmount=Cantidad variable (%% tot) PaymentTypeVIR=transferencia bancaria PaymentTypeShortVIR=transferencia bancaria @@ -272,8 +327,11 @@ PaymentTypeTIP=TIP (Documentos contra pago) PaymentTypeTRA=giro bancario BankDetails=Detalles del banco BankCode=codigo bancario +DeskCode=Código de sucursal BankAccountNumber=Número de cuenta +BankAccountNumberKey=Suma de comprobación BIC=BIC / SWIFT +BICNumber=Código BIC / SWIFT ExtraInfos=Infos adicionales RegulatedOn=Regulado en ChequeNumber=Verificar N ° @@ -283,16 +341,27 @@ ChequeMaker=Portador Cheque/Transferencia ChequeBank=Banco de cheque CheckBank=Cheque PrettyLittleSentence=Acepte la cantidad de pagos adeudados por cheques emitidos a mi nombre como miembro de una asociación contable aprobada por la Administración Fiscal. +IntracommunityVATNumber=ID IVA intracomunitario +PaymentByChequeOrderedTo=Los pagos con cheques (impuestos incluidos) se pagan a %s, se envían a +PaymentByChequeOrderedToShort=Los pagos con cheque (impuestos incluidos) son pagaderos a +PaymentByTransferOnThisBankAccount=Pago por transferencia a la siguiente cuenta bancaria VATIsNotUsedForInvoice=* IVA no aplicable art-293B de CGI LawApplicationPart2=los bienes siguen siendo propiedad de +LawApplicationPart3=El vendedor hasta el pago total de LawApplicationPart4=su precio. LimitedLiabilityCompanyCapital=SARL con Capital de UseDiscount=Use descuento UseCreditNoteInInvoicePayment=Reduzca la cantidad a pagar con este crédito +MenuChequeDeposits=Depósitos de cheques MenuCheques=Cheques +MenuChequesReceipts=Revisar recibos +ChequesReceipts=Revisar recibos +ChequesArea=Check depósitos area +ChequeDeposits=Depósitos de cheques DepositId=Depósito de ID NbCheque=Cantidad de cheques CreditNoteConvertedIntoDiscount=Este %s se ha convertido en %s +UsBillingContactAsIncoiveRecipientIfExist=Utilice el contacto / dirección con el tipo 'contacto de facturación' en lugar de la dirección de un tercero como destinatario de las facturas ShowUnpaidAll=Mostrar todas las facturas impagas ShowUnpaidLateOnly=Mostrar solo las facturas pendientes de pago PaymentInvoiceRef=Factura de pago %s @@ -301,15 +370,22 @@ Reported=Retrasado DisabledBecausePayments=No es posible ya que hay algunos pagos CantRemovePaymentWithOneInvoicePaid=No se puede eliminar el pago ya que hay al menos una factura clasificada pagada ExpectedToPay=Pago esperado +CantRemoveConciliatedPayment=No se puede eliminar el pago reconciliado PayedByThisPayment=Pagado por este pago +ClosePaidInvoicesAutomatically=Clasifique "Pagadas" todas las facturas estándar, de anticipo o de reemplazo pagadas en su totalidad. ClosePaidCreditNotesAutomatically=Clasifique "Pagado" todas las notas de crédito completamente devueltas. +ClosePaidContributionsAutomatically=Clasifique "Pagado" todas las contribuciones sociales o fiscales pagadas por completo. +AllCompletelyPayedInvoiceWillBeClosed=Todas las facturas que no queden por pagar se cerrarán automáticamente con el estado "Pagado". ToMakePayment=Paga ToMakePaymentBack=Pagar ListOfYourUnpaidInvoices=Lista de facturas impagas NoteListOfYourUnpaidInvoices=Nota: Esta lista contiene solo facturas para terceros a los que está vinculado como representante de ventas. RevenueStamp=Sello de ingresos +YouMustCreateInvoiceFromThird=Esta opción solo está disponible cuando se crea una factura desde la pestaña "Cliente" de un tercero +YouMustCreateInvoiceFromSupplierThird=Esta opción solo está disponible cuando se crea una factura desde la pestaña "Proveedor" de un tercero YouMustCreateStandardInvoiceFirstDesc=Primero debe crear una factura estándar y convertirla en "plantilla" para crear una nueva factura de plantilla PDFCrabeDescription=Factura plantilla en PDF Crabe. Una plantilla de factura completa (Plantilla recomendada) +PDFSpongeDescription=Factura PDF plantilla de esponja. Una plantilla de factura completa. PDFCrevetteDescription=Plantilla de factura en PDF Crevette. Una plantilla de factura completa para facturas de situación TerreNumRefModelDesc1=Número de devolución con formato %saaam-nnnn para facturas estándar y %saaam-nnnn para notas de crédito donde yy es año, mm es mes y nnnn es una secuencia sin interrupción y sin retorno a 0 MarsNumRefModelDesc1=Número de devolución con el formato %syymm-nnnn para facturas estándar, %syymm-nnnn para facturas de reposición, %syymm-nnnn para facturas de anticipo y %syymm-nnnn para las notas de crédito donde yy es año, mm es mes y nnnn es una secuencia sin interrupción y sin volver a 0 @@ -319,6 +395,10 @@ TypeContact_facture_internal_SALESREPFOLL=Factura de cliente representativa de s TypeContact_facture_external_BILLING=Contacto cliente de facturación cotización TypeContact_facture_external_SHIPPING=Contacto de envío del cliente TypeContact_facture_external_SERVICE=Contacto de servicio al cliente +TypeContact_invoice_supplier_internal_SALESREPFOLL=Representante de seguimiento de la factura del vendedor +TypeContact_invoice_supplier_external_BILLING=Contacto factura vendedor +TypeContact_invoice_supplier_external_SHIPPING=Contacto de envío del vendedor +TypeContact_invoice_supplier_external_SERVICE=Contacto de servicio al vendedor InvoiceFirstSituationAsk=Primera factura de situación InvoiceFirstSituationDesc=Las facturas de situación están relacionadas con situaciones relacionadas con una progresión, por ejemplo, la progresión de una construcción. Cada situación está vinculada a una factura. InvoiceSituationAsk=Factura siguiendo la situación @@ -336,10 +416,13 @@ situationInvoiceShortcode_S=D CantBeLessThanMinPercent=El progreso no puede ser menor que su valor en la situación anterior. PDFCrevetteSituationNumber=Situación N ° %s PDFCrevetteSituationInvoiceLineDecompte=Factura de situación - COUNT +PDFCrevetteSituationInvoiceLine=Situación N ° %s: Inv. N ° %s en %s TotalSituationInvoice=Situación total invoiceLineProgressError=El progreso de la línea de la factura no puede ser mayor o igual a la siguiente línea de la factura +updatePriceNextInvoiceErrorUpdateline=Error: actualizar el precio en la línea de factura: %s ToCreateARecurringInvoice=Para crear una factura recurrente para este contrato, primero cree esta factura en borrador, luego conviértala en una plantilla de factura y defina la frecuencia para la generación de facturas futuras. ToCreateARecurringInvoiceGene=Para generar facturas futuras de forma regular y manual, solo vaya al menú %s - %s - %s. +ToCreateARecurringInvoiceGeneAuto=Si necesita que dichas facturas se generen automáticamente, solicite a su administrador que habilite y configure el módulo %s . Tenga en cuenta que ambos métodos (manual y automático) se pueden usar juntos sin riesgo de duplicación. DeleteRepeatableInvoice=Eliminar factura de plantilla ConfirmDeleteRepeatableInvoice=¿Estás seguro de que deseas eliminar la factura de la plantilla? CreateOneBillByThird=Cree una factura por un tercero (de lo contrario, una factura por pedido) diff --git a/htdocs/langs/es_CL/bookmarks.lang b/htdocs/langs/es_CL/bookmarks.lang index 8b386412649..8c3c7bda847 100644 --- a/htdocs/langs/es_CL/bookmarks.lang +++ b/htdocs/langs/es_CL/bookmarks.lang @@ -3,9 +3,8 @@ AddThisPageToBookmarks=Agregar página actual a marcadores ListOfBookmarks=Lista de marcadores EditBookmarks=Listar/editar Marcadores ShowBookmark=Mostrar marcador -OpenANewWindow=Abrir en nueva ventana -ReplaceWindow=Reemplazar ventana actual +OpenANewWindow=Abre una nueva pestaña BehaviourOnClick=Comportamiento cuando se selecciona una URL de marcador -SetHereATitleForLink=Establecer un título para el marcador -UseAnExternalHttpLinkOrRelativeDolibarrLink=Utilizar una URL http externa o una URL relativa de Dolibarr -ChooseIfANewWindowMustBeOpenedOnClickOnBookmark=Escoger si la página enlazada debe abrirse en una nueva ventana o no +SetHereATitleForLink=Establecer un nombre para el marcador +UseAnExternalHttpLinkOrRelativeDolibarrLink=Utilice un enlace externo / absoluto (https: // URL) o un enlace interno / relativo (/ DOLIBARR_ROOT / htdocs / ...) +ChooseIfANewWindowMustBeOpenedOnClickOnBookmark=Elija si la página vinculada debería abrirse en la pestaña actual o en una nueva pestaña diff --git a/htdocs/langs/es_CL/boxes.lang b/htdocs/langs/es_CL/boxes.lang index bd777a32504..7066b77ba75 100644 --- a/htdocs/langs/es_CL/boxes.lang +++ b/htdocs/langs/es_CL/boxes.lang @@ -1,11 +1,28 @@ # Dolibarr language file - Source file is en_US - boxes +BoxLoginInformation=Información Entrar +BoxLastRssInfos=Información RSS +BoxLastProducts=Últimos productos / Servicios %s +BoxLastCustomerBills=Últimas facturas de clientes BoxOldestUnpaidCustomerBills=Las facturas impagas más antiguas de los clientes +BoxOldestUnpaidSupplierBills=Las facturas de proveedores impagas más antiguas BoxLastProposals=Últimas propuestas comerciales BoxLastProspects=Últimas prospectos modificados +BoxLastCustomerOrders=Últimos pedidos de venta BoxCurrentAccounts=Abre el saldo de cuentas BoxTitleLastRssInfos=Las últimas %s noticias de %s +BoxTitleLastProducts=Productos / Servicios: Última modificación %s. +BoxTitleLastModifiedSuppliers=Proveedores: última modificación de %s +BoxTitleLastModifiedCustomers=Clientes: última %s modificada BoxTitleLastCustomersOrProspects=Últimos %s clientes o prospectos +BoxTitleLastCustomerBills=Las últimas facturas de los clientes %s +BoxTitleLastSupplierBills=Las últimas facturas de proveedores %s +BoxTitleLastModifiedProspects=Perspectivas: última modificación de %s +BoxTitleLastModifiedMembers=Últimos miembros de %s BoxTitleLastFicheInter=Últimas intervenciones modificadas con %s +BoxTitleOldestUnpaidCustomerBills=Facturas de clientes: más antiguas %s sin pagar +BoxTitleOldestUnpaidSupplierBills=Facturas de proveedores: las más antiguas %s sin pagar +BoxTitleLastModifiedContacts=Contactos / Direcciones: Última modificación %s +BoxMyLastBookmarks=Marcadores: el último %s BoxOldestExpiredServices=Servicios expirados activos más antiguos BoxLastExpiredServices=Últimos %s contactos más antiguos con servicios activos caducados BoxTitleLastActionsToDo=Últimas %s acciones para hacer @@ -13,21 +30,36 @@ BoxTitleLastModifiedDonations=Las últimas %s donaciones modificadas BoxTitleLastModifiedExpenses=Últimos informes de gastos modificados %s BoxGlobalActivity=Actividad global (facturas, propuestas, pedidos) BoxTitleGoodCustomers=%s Buenos clientes +FailedToRefreshDataInfoNotUpToDate=Error al actualizar el flujo de RSS. Última fecha de actualización correcta: %s LastRefreshDate=Última fecha de actualización NoRecordedBookmarks=No hay marcadores definidos ClickToAdd=Haga clic aquí para agregar. NoRecordedCustomers=Sin clientes registrados NoRecordedContacts=Sin contactos grabados NoActionsToDo=No hay acciones para hacer +NoRecordedOrders=No hay órdenes de venta registradas NoRecordedProposals=Sin cotizaciones registradas NoRecordedInvoices=No hay facturas registradas de clientes NoUnpaidCustomerBills=No hay facturas impagas de los clientes +NoUnpaidSupplierBills=No hay facturas de proveedores sin pagar +NoModifiedSupplierBills=No hay facturas de proveedores registrados NoRecordedProducts=Sin productos / servicios grabados NoRecordedProspects=Sin perspectivas registradas NoContractedProducts=No hay productos/servicios contratados NoRecordedContracts=Sin contratos grabados NoRecordedInterventions=Sin intervenciones registradas +BoxLatestSupplierOrders=Últimas órdenes de compra +NoSupplierOrder=No hay orden de compra registrada +BoxCustomersInvoicesPerMonth=Facturas de clientes por mes +BoxCustomersOrdersPerMonth=Pedidos de ventas por mes +BoxSuppliersOrdersPerMonth=Pedidos de proveedores por mes BoxProposalsPerMonth=Cotizaciones por mes +NoTooLowStockProducts=Ningún producto está bajo el límite de stock bajo +BoxProductDistribution=Productos / Servicios de Distribución. +BoxTitleLastModifiedSupplierBills=Facturas de proveedores: última %s modificada +BoxTitleLatestModifiedSupplierOrders=Pedidos de proveedores: última modificación de %s +BoxTitleLastModifiedCustomerBills=Facturas de clientes: última %s modificada +BoxTitleLastModifiedCustomerOrders=Órdenes de venta: última %s modificada BoxTitleLastModifiedPropals=Últimas %s propuestas modificadas ForCustomersInvoices=Facturas de clientes ForProposals=Cotizaciones diff --git a/htdocs/langs/es_CL/commercial.lang b/htdocs/langs/es_CL/commercial.lang index fd74feaecb6..0f6f95c7d14 100644 --- a/htdocs/langs/es_CL/commercial.lang +++ b/htdocs/langs/es_CL/commercial.lang @@ -4,6 +4,7 @@ ConfirmDeleteAction=¿Seguro que quieres eliminar este evento? CardAction=Tarjeta de evento ActionOnCompany=Compañía vinculada TaskRDVWith=Encuentro con %s +ShowTask=Mostrar tarea ShowAction=Mostrar evento ThirdPartiesOfSaleRepresentative=Terceros con representante de ventas SaleRepresentativesOfThirdParty=Representantes de ventas de terceros @@ -36,13 +37,14 @@ ActionDoneBy=Evento hecho por ActionAC_FAX=Enviar fax ActionAC_PROP=Envío cotización por correo ActionAC_EMAIL=Enviar correo electrónico +ActionAC_EMAIL_IN=Recepción de correo electrónico ActionAC_RDV=Reuniones ActionAC_INT=Intervención en el sitio ActionAC_FAC=Enviar la factura del cliente por correo ActionAC_REL=Enviar la factura del cliente por correo (recordatorio) ActionAC_CLO=Cerrar ActionAC_EMAILING=Enviar correo masivo -ActionAC_COM=Enviar la orden del cliente por correo +ActionAC_COM=Enviar pedido por correo ActionAC_SHIP=Enviar el envío por correo ActionAC_SUP_ORD=Enviar pedido de compra por correo ActionAC_SUP_INV=Enviar la factura del proveedor por correo @@ -55,3 +57,4 @@ StatusProsp=Estado de la perspectiva DraftPropals=Cotizaciones borrador WelcomeOnOnlineSignaturePage=Bienvenido a la página para aceptar propuestas comerciales de %s ThisScreenAllowsYouToSignDocFrom=Esta pantalla le permite aceptar y firmar, o rechazar, un presupuesto/propuesta comercial +SignatureProposalRef=Firma de cotización / propuesta comercial %s diff --git a/htdocs/langs/es_CL/companies.lang b/htdocs/langs/es_CL/companies.lang index eb33bc05d52..f5ce06adfc8 100644 --- a/htdocs/langs/es_CL/companies.lang +++ b/htdocs/langs/es_CL/companies.lang @@ -5,8 +5,12 @@ SelectThirdParty=Seleccione un tercero ConfirmDeleteCompany=¿Está seguro de que desea eliminar esta empresa y toda la información heredada? DeleteContact=Eliminar un contacto/dirección ConfirmDeleteContact=¿Está seguro de que desea eliminar este contacto y toda la información heredada? +MenuNewThirdParty=Nueva tercera parte +MenuNewProspect=Nueva perspectiva +MenuNewSupplier=Nuevo vendedor MenuNewPrivateIndividual=Nueva privada individual NewCompany=Nueva compañía (prospecto, cliente, vendedor) +NewThirdParty=Nuevo tercero (prospecto, cliente, vendedor) CreateDolibarrThirdPartySupplier=Crear un tercero (vendedor) CreateThirdPartyOnly=Crear un tercero CreateThirdPartyAndContact=Crear un tercero + un contacto infantil @@ -15,14 +19,21 @@ IdThirdParty=Id tercero IdCompany=ID de la compañía IdContact=ID de contacto Contacts=Contactos/Direcciones +ThirdPartyContacts=Contactos de terceros +ThirdPartyContact=Contacto / dirección de terceros CompanyName=Nombre de empresa AliasNames=Nombre de alias (comercial, marca registrada, ...) Companies=Compañías +CountryIsInEEC=El país está dentro de la Comunidad Económica Europea. +ThirdPartyName=Nombre de terceros +ThirdPartyEmail=Correo electrónico de terceros ThirdPartyProspects=Perspectivas ThirdPartyProspectsStats=Perspectivas ThirdPartyCustomersWithIdProf12=Clientes con %s o %s ThirdPartySuppliers=Vendedores +ThirdPartyType=Tipo de terceros Individual=Individuo privado +ToCreateContactWithSameName=Creará automáticamente un contacto / dirección con la misma información que el tercero bajo el tercero. En la mayoría de los casos, incluso si su tercero es una persona física, basta con crear un tercero solo. ParentCompany=Empresa matriz Subsidiaries=Subsidiarias CivilityCode=Código de civilidad @@ -35,9 +46,15 @@ CountryCode=Código de país CountryId=Identificación del país Call=Llamada PhonePerso=Pers. teléfono +No_Email=Rechazar correos electrónicos a granel Town=Ciudad Poste=Posición +VATIsUsed=Impuesto a las ventas utilizado +VATIsUsedWhenSelling=Esto define si este tercero incluye un impuesto a la venta o no cuando realiza una factura a sus propios clientes. VATIsNotUsed=Impuesto a las ventas no se utiliza +CopyAddressFromSoc=Copie la dirección de los detalles de terceros +ThirdpartyNotCustomerNotSupplierSoNoRef=Terceros ni cliente ni proveedor, no hay objetos de referencia disponibles. +ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Terceros ni cliente ni proveedor, no hay descuentos disponibles. OverAllProposals=Cotizaciones OverAllSupplierProposals=Peticiones de precio LocalTax1IsUsed=Use el segundo impuesto @@ -72,6 +89,8 @@ ProfId4PT=Prof Id 4 (Conservatorio) ProfId2TN=Prof Id 2 (matrícula fiscal) ProfId3TN=Prof Id 3 (código de Douane) ProfId1US=Id del profesor (FEIN) +VATIntra=ID de IVA +VATIntraShort=ID de IVA VATIntraSyntaxIsValid=La sintaxis es valida VATReturn=Devolución del IVA ProspectCustomer=Prospecto/Cliente @@ -80,12 +99,22 @@ CustomerRelativeDiscount=Descuento relativo del cliente SupplierRelativeDiscount=Descuento relativo del vendedor CustomerAbsoluteDiscountShort=Descuento absoluto CompanyHasNoRelativeDiscount=Este cliente no tiene descuento relativo por defecto +HasRelativeDiscountFromSupplier=Tiene un descuento predeterminado de %s%% de este proveedor +HasNoRelativeDiscountFromSupplier=No tiene un descuento relativo predeterminado de este proveedor +CompanyHasAbsoluteDiscount=Este cliente tiene descuentos disponibles (notas de créditos o anticipos) para %s %s +CompanyHasDownPaymentOrCommercialDiscount=Este cliente tiene descuentos disponibles (comerciales, pagos iniciales ) para %s %s CompanyHasCreditNote=Este cliente todavía tiene notas de crédito por %s%s +HasNoAbsoluteDiscountFromSupplier=No tiene ningún crédito de descuento disponible de este proveedor. +HasAbsoluteDiscountFromSupplier=Tiene descuentos disponibles (notas de créditos o anticipos) para %s %s de este proveedor +HasDownPaymentOrCommercialDiscountFromSupplier=Tiene descuentos disponibles (comerciales, anticipos) para %s %s de este proveedor +HasCreditNoteFromSupplier=Tiene notas de crédito para %s %s de este proveedor CompanyHasNoAbsoluteDiscount=Este cliente no tiene crédito de descuento disponible CustomerAbsoluteDiscountAllUsers=Descuentos absolutos de clientes (concedidos por todos los usuarios) CustomerAbsoluteDiscountMy=Descuentos absolutos de clientes (otorgados por usted) SupplierAbsoluteDiscountAllUsers=Descuentos absolutos de proveedores (ingresados ​​por todos los usuarios) SupplierAbsoluteDiscountMy=Descuentos absolutos de proveedores (ingresados ​​por usted mismo) +Vendor=Vendedor +Supplier=Vendedor AddContactAddress=Crear contacto / dirección EditContactAddress=Editar contacto / dirección ContactId=ID de contacto @@ -93,12 +122,20 @@ NoContactDefinedForThirdParty=Sin contacto definido para este tercero NoContactDefined=Sin contacto definido DefaultContact=Contacto / dirección predeterminados AddThirdParty=Crear un tercero +CustomerCode=Código de cliente +SupplierCode=Código de proveedor +CustomerCodeShort=Código de cliente +SupplierCodeShort=Código de proveedor +CustomerCodeDesc=Código de cliente, único para todos los clientes. +SupplierCodeDesc=Código de proveedor, único para todos los proveedores RequiredIfCustomer=Obligatorio si un tercero es un cliente o prospecto RequiredIfSupplier=Requerido si un tercero es un vendedor +ValidityControledByModule=Validez controlada por módulo ProspectToContact=Perspectiva de contactar CompanyDeleted=La compañía "%s" eliminada de la base de datos. ListOfContacts=Lista de contactos/direcciones ListOfContactsAddresses=Lista de contactos/direcciones +ListOfThirdParties=Lista de terceros ContactsAllShort=Todo (Sin filtro) ContactType=Tipo de Contacto ContactForOrders=Contacto de la orden @@ -111,9 +148,16 @@ NoContactForAnyOrderOrShipments=Este contacto no es un contacto para ningún ped NoContactForAnyProposal=Este contacto no es contacto de ninguna cotización NoContactForAnyContract=Este contacto no es un contacto para ningún contrato NoContactForAnyInvoice=Este contacto no es un contacto para ninguna factura +NewContactAddress=Nuevo Contacto / Dirección EditCompany=Editar empresa +ThisUserIsNot=Este usuario no es prospecto, cliente ni vendedor. VATIntraCheck=Cheque +VATIntraCheckDesc=La identificación del IVA debe incluir el prefijo del país. El enlace %s utiliza el servicio europeo de verificación de IVA (VIES), que requiere acceso a Internet desde el servidor Dolibarr. +VATIntraCheckableOnEUSite=Compruebe la identificación del IVA intracomunitaria en el sitio web de la Comisión Europea +VATIntraManualCheck=También puede consultar manualmente en el sitio web de la Comisión Europea %s ErrorVATCheckMS_UNAVAILABLE=No es posible comprobar. El servicio de verificación no proporcionado por el estado miembro (%s). +NorProspectNorCustomer=No prospecto, ni cliente +JuridicalStatus=Tipo de entidad jurídica ProspectLevel=Potencial prospectivo OthersNotLinkedToThirdParty=Otros, no vinculados a un tercero ProspectStatus=Estado de la perspectiva @@ -138,14 +182,24 @@ ExportCardToFormat=Exportar la tarjeta al formato ContactNotLinkedToCompany=Contacto no vinculado a ningún tercero DolibarrLogin=Ingreso Dolibbarr NoDolibarrAccess=Sin acceso a Dolibarr +ExportDataset_company_1=Terceros (empresas / fundaciones / personas físicas) y sus propiedades. +ImportDataset_company_2=Contactos / direcciones y atributos adicionales de terceros +ImportDataset_company_4=Representantes de ventas de terceros (asignar representantes de ventas / usuarios a empresas) DeliveryAddress=Dirección de entrega SupplierCategory=Categoría del vendedor DeleteFile=Borrar archivo ConfirmDeleteFile=¿Seguro que quieres eliminar este archivo? AllocateCommercial=Asignado al representante de ventas Organization=Organización +FiscalYearInformation=Año fiscal FiscalMonthStart=Mes de inicio del año fiscal +YouMustAssignUserMailFirst=Debe crear un correo electrónico para este usuario antes de poder agregar una notificación por correo electrónico. YouMustCreateContactFirst=Para poder agregar notificaciones por correo electrónico, primero debe definir contactos con correos electrónicos válidos para el tercero +ListSuppliersShort=Lista de vendedores +ListProspectsShort=Lista de prospectos +ListCustomersShort=Lista de clientes +ThirdPartiesArea=Terceros / Contactos +UniqueThirdParties=Total de Terceros InActivity=Abierto ThirdPartyIsClosed=Tercero está cerrado ProductsIntoElements=Lista de productos / servicios en %s @@ -153,11 +207,16 @@ CurrentOutstandingBill=Factura pendiente actual OutstandingBill=Max. por factura pendiente OutstandingBillReached=Max. por la factura pendiente alcanzado OrderMinAmount=Monto mínimo para la orden +MonkeyNumRefModelDesc=Devuelva un número con el formato %syymm-nnnn para el código del cliente y %syymm-nnnn para el código del proveedor donde yy es año, mm es mes y nnnn es una secuencia sin interrupción ni devolución a 0. LeopardNumRefModelDesc=El código es libre. Este código se puede modificar en cualquier momento. ManagingDirectors=Nombre del gerente (CEO, director, presidente ...) MergeOriginThirdparty=Tercero duplicado (tercero que desea eliminar) +ConfirmMergeThirdparties=¿Está seguro de que desea fusionar este tercero con el actual? Todos los objetos vinculados (facturas, pedidos, ...) se moverán al tercero actual, luego se eliminará el tercero. ThirdpartiesMergeSuccess=Los terceros se han fusionado SaleRepresentativeLogin=Inicio de sesión del representante de ventas SaleRepresentativeFirstname=Nombre del representante de ventas SaleRepresentativeLastname=Apellido del representante de ventas ErrorThirdpartiesMerge=Hubo un error al eliminar los terceros. Por favor revise el registro. Los cambios han sido revertidos. +PaymentTermsSupplier=Plazo de pago - Proveedor +MulticurrencyUsed=Utilizar la moneda múltiple +MulticurrencyCurrency=Moneda diff --git a/htdocs/langs/es_CL/compta.lang b/htdocs/langs/es_CL/compta.lang index 6c137808035..2aa54a47917 100644 --- a/htdocs/langs/es_CL/compta.lang +++ b/htdocs/langs/es_CL/compta.lang @@ -11,6 +11,7 @@ FeatureIsSupportedInInOutModeOnly=Característica solo disponible en el modo de VATReportBuildWithOptionDefinedInModule=Las cantidades que se muestran aquí se calculan utilizando las reglas definidas por la configuración del módulo de impuestos. LTReportBuildWithOptionDefinedInModule=Las cantidades que se muestran aquí se calculan utilizando las reglas definidas por la configuración de la empresa. Param=Configurar +RemainingAmountPayment=Cantidad de pago restante: Accountparent=Cuenta para padres Accountsparent=Cuentas de padres MenuReportInOut=Ingresos / gastos @@ -65,6 +66,7 @@ AddSocialContribution=Agregar impuesto social / fiscal ContributionsToPay=Impuestos sociales/fiscales a pagar AccountancyTreasuryArea=Área de facturación y pago PaymentCustomerInvoice=Pago de factura de cliente +PaymentSupplierInvoice=pago factura proveedor PaymentSocialContribution=Pago de impuestos sociales/fiscales PaymentVat=Pago del IVA ListPayment=Lista de pagos @@ -91,6 +93,7 @@ SocialContributionsPayments=Pagos de impuestos sociales/fiscales ShowVatPayment=Mostrar el pago del IVA BalanceVisibilityDependsOnSortAndFilters=El saldo es visible en esta lista solo si la tabla se ordena de forma ascendente en %s y se filtra para 1 cuenta bancaria CustomerAccountancyCode=Código de contabilidad del cliente +SupplierAccountancyCode=código de contabilidad del vendedor CustomerAccountancyCodeShort=Cust. cuenta. código SupplierAccountancyCodeShort=Cenar. cuenta. código Turnover=Facturación facturada @@ -106,6 +109,7 @@ NewCheckDeposit=Nuevo depósito de cheque NewCheckDepositOn=Crear recibo para el depósito en la cuenta: %s NoWaitingChecks=No hay cheques pendientes de depósito. DateChequeReceived=Verificar fecha de recepción +NbOfCheques=No. de cheques PaySocialContribution=Pagar un impuesto social / fiscal ConfirmPaySocialContribution=¿Estás seguro de que quieres clasificar este impuesto social o fiscal como pagado? DeleteSocialContribution=Eliminar un pago de impuestos sociales o fiscales @@ -115,6 +119,7 @@ CalcModeVATDebt=Modo %sIVA sobre compromisos contables%s. CalcModeVATEngagement=Modo %s IVA en ingresos-gastos%s. CalcModeDebt=Análisis de facturas registradas conocidas incluso si aún no se contabilizan en el libro mayor. CalcModeEngagement=Análisis de los pagos registrados conocidos, incluso si aún no se contabilizan en el Libro mayor. +CalcModeBookkeeping=Análisis de los datos registrados en la tabla de Contabilidad. CalcModeLT1=Modo %sRE en facturas de clientes - facturas de proveedores %s CalcModeLT1Debt=Modo %sRE en las facturas del cliente %s CalcModeLT1Rec=Modo %sRE en facturas de proveedores %s @@ -131,11 +136,14 @@ SeeReportInBookkeepingMode=Consulte %sInforme de facturación%s para real RulesAmountWithTaxIncluded=- Las cantidades que se muestran son con todos los impuestos incluidos RulesResultDue=- Incluye facturas pendientes, gastos, IVA, donaciones ya sean pagadas o no. También incluye salarios pagados.
- Se basa en la fecha de validación de facturas e IVA y en la fecha de vencimiento de los gastos. Para los salarios definidos con el módulo Salario, se usa la fecha de valor del pago. RulesResultInOut=- Incluye los pagos reales realizados en facturas, gastos, IVA y salarios.
- Se basa en las fechas de pago de las facturas, gastos, IVA y salarios. La fecha de donación para la donación. +RulesCADue=- Incluye las facturas debidas del cliente, ya sean pagadas o no.
- Se basa en la fecha de validación de estas facturas.
+RulesCAIn=- Incluye todos los pagos efectivos de las facturas recibidas de los clientes.
- Se basa en la fecha de pago de estas facturas.
RulesCATotalSaleJournal=Incluye todas las líneas de crédito del diario Sale. RulesAmountOnInOutBookkeepingRecord=Incluye registro en su Libro mayor con cuentas de contabilidad que tiene el grupo "GASTOS" o "INGRESOS" RulesResultBookkeepingPredefined=Incluye registro en su Libro mayor con cuentas de contabilidad que tiene el grupo "GASTOS" o "INGRESOS" RulesResultBookkeepingPersonalized=Muestra un registro en su Libro mayor con cuentas de contabilidad agrupadas por grupos personalizados SeePageForSetup=Ver el menú %s para la configuración +DepositsAreNotIncluded=- Las facturas de anticipo no están incluidas. LT1ReportByCustomers=Informe el impuesto 2 por un tercero LT2ReportByCustomers=Informe el impuesto 3 por un tercero LT1ReportByCustomersES=Informe de un tercero RE @@ -180,6 +188,7 @@ RefExt=Ref externo ToCreateAPredefinedInvoice=Para crear una plantilla de factura, cree una factura estándar, luego, sin validarla, haga clic en el botón "%s". LinkedOrder=Enlace a la orden CalculationRuleDesc=Para calcular el IVA total, hay dos métodos:
El método 1 es redondear el IVA en cada línea y luego sumarlas.
El método 2 es sumar todos los IVA en cada línea, luego redondear el resultado.
El resultado final puede diferir de algunos centavos. El modo predeterminado es el modo %s. +CalculationRuleDescSupplier=Según el proveedor, elija el método apropiado para aplicar la misma regla de cálculo y obtenga el mismo resultado esperado por su proveedor. TurnoverPerProductInCommitmentAccountingNotRelevant=El informe de la facturación obtenida por producto no está disponible. Este informe solo está disponible para facturación facturada. TurnoverPerSaleTaxRateInCommitmentAccountingNotRelevant=El informe de Cifra de negocios recaudada por tasa de impuesto a la venta no está disponible. Este informe solo está disponible para facturación facturada. AccountancyJournal=Revista de códigos contables @@ -187,7 +196,10 @@ ACCOUNTING_VAT_SOLD_ACCOUNT=Cuenta de contabilidad de forma predeterminada para ACCOUNTING_VAT_BUY_ACCOUNT=Cuenta de contabilidad de forma predeterminada para el IVA en compras (se usa si no está definido en la configuración del diccionario de IVA) ACCOUNTING_VAT_PAY_ACCOUNT=Cuenta de contabilidad por defecto para pagar el IVA ACCOUNTING_ACCOUNT_CUSTOMER=Cuenta de contabilidad utilizada para terceros clientes +ACCOUNTING_ACCOUNT_CUSTOMER_Desc=La cuenta contable dedicada definida en la tarjeta de terceros se utilizará solo para la contabilidad de Libro mayor auxiliar. Este se usará para el Libro mayor general y como valor predeterminado de la contabilidad del Libro mayor auxiliar si no se define una cuenta de cuenta del cliente dedicada a un tercero. ACCOUNTING_ACCOUNT_SUPPLIER=Cuenta de contabilidad utilizada para terceros proveedores +ACCOUNTING_ACCOUNT_SUPPLIER_Desc=La cuenta contable dedicada definida en la tarjeta de terceros se utilizará solo para la contabilidad de Libro mayor auxiliar. Este se usará para el Libro mayor y como valor predeterminado de la contabilidad del Libro mayor auxiliar si no se define una cuenta de proveedor dedicada en un tercero. +ConfirmCloneTax=Confirmar el clon de un impuesto social / fiscal. CloneTaxForNextMonth=Clonarlo para el próximo mes SimpleReport=Informe simple AddExtraReport=Informes adicionales (agregar informe de clientes extranjeros y nacionales) @@ -199,6 +211,7 @@ ImportDataset_tax_vat=Pagos de IVA ErrorBankAccountNotFound=Error: cuenta bancaria no encontrada FiscalPeriod=Período contable ListSocialContributionAssociatedProject=Lista de contribuciones sociales asociadas con el proyecto +AccountingAffectation=Asignación de contabilidad LastDayTaxIsRelatedTo=Último día del período el impuesto está relacionado con VATDue=Impuesto de venta reclamado ByVatRate=Por tasa de impuesto a la venta diff --git a/htdocs/langs/es_CL/ecm.lang b/htdocs/langs/es_CL/ecm.lang index 6bff606eb69..eb90a48c10f 100644 --- a/htdocs/langs/es_CL/ecm.lang +++ b/htdocs/langs/es_CL/ecm.lang @@ -1,5 +1,5 @@ # Dolibarr language file - Source file is en_US - ecm -ECMNbOfDocs=N° de documentos en el directorio +ECMNbOfDocs=Nº de documentos en el directorio. ECMAddSection=Agregar directorio ECMCreationDate=Fecha de creación ECMNbOfSubDir=Cantidad de subdirectorios @@ -20,6 +20,8 @@ ECMDocsByProjects=Documentos vinculados a proyectos ECMDocsByUsers=Documentos vinculados a usuarios ECMDocsByInterventions=Documentos vinculados a intervenciones ECMDocsByExpenseReports=Documentos vinculados a informes de gastos +ECMDocsByHolidays=Documentos vinculados a vacaciones +ECMDocsBySupplierProposals=Documentos vinculados a propuestas de proveedores. ECMNoDirectoryYet=Sin directorio creado DeleteSection=Eliminar directorio ConfirmDeleteSection=¿Puedes confirmar que quieres borrar el directorio %s? diff --git a/htdocs/langs/es_CL/install.lang b/htdocs/langs/es_CL/install.lang index 718af0a4691..3e9a45b1ffb 100644 --- a/htdocs/langs/es_CL/install.lang +++ b/htdocs/langs/es_CL/install.lang @@ -1,19 +1,37 @@ # Dolibarr language file - Source file is en_US - install InstallEasy=Simplemente siga las instrucciones paso a paso. MiscellaneousChecks=Verificación de requisitos previos +ConfFileDoesNotExistsAndCouldNotBeCreated=El archivo de configuración %s no existe y no se pudo crear. ConfFileCouldBeCreated=Se puede crear el archivo de configuración %s. +ConfFileIsNotWritable=El archivo de configuración %s no se puede escribir. Compruebe los permisos. Para la primera instalación, su servidor web debe poder escribir en este archivo durante el proceso de configuración ("chmod 666", por ejemplo, en un sistema operativo tipo Unix). ConfFileIsWritable=El archivo de configuración %s es escribible. ConfFileMustBeAFileNotADir=El archivo de configuración %s debe ser un archivo, no un directorio. +ConfFileReload=Recarga de parámetros desde archivo de configuración. PHPSupportSessions=Este PHP admite sesiones. PHPSupportPOSTGETOk=Este PHP soporta variables POST y GET. +PHPSupportPOSTGETKo=Es posible que su configuración de PHP no admita las variables POST y / o GET. Verifique el parámetro variables_order en php.ini. +PHPSupportGD=Este PHP soporta funciones gráficas GD. +PHPSupportCurl=Este PHP soporta Curl. +PHPSupportUTF8=Este PHP soporta funciones UTF8. +PHPSupportIntl=Este PHP soporta funciones de Intl. PHPMemoryOK=Su memoria de sesión máxima de PHP está configurada en %s. Esto debería ser suficiente. +PHPMemoryTooLow=La memoria de sesión máxima de PHP se establece en %s bytes. Esto es demasiado bajo. Cambie su php.ini para establecer el parámetro memory_limit en al menos %s bytes. +Recheck=Haga clic aquí para una prueba más detallada +ErrorPHPDoesNotSupportSessions=Su instalación de PHP no admite sesiones. Esta función es necesaria para permitir que Dolibarr funcione. Compruebe su configuración de PHP y los permisos del directorio de sesiones. +ErrorPHPDoesNotSupportGD=Su instalación de PHP no soporta funciones gráficas de GD. No habrá gráficos disponibles. ErrorPHPDoesNotSupportCurl=Su instalación de PHP no es compatible con Curl. +ErrorPHPDoesNotSupportUTF8=Su instalación de PHP no es compatible con las funciones UTF8. Dolibarr no puede funcionar correctamente. Resuelve esto antes de instalar Dolibarr. +ErrorPHPDoesNotSupportIntl=Su instalación de PHP no admite funciones de Intl. ErrorDirDoesNotExists=El directorio %s no existe. +ErrorGoBackAndCorrectParameters=Regresa y revisa / corrige los parámetros. ErrorWrongValueForParameter=Puede haber escrito un valor incorrecto para el parámetro '%s'. ErrorFailedToConnectToDatabase=Error al conectarse a la base de datos '%s'. ErrorDatabaseVersionTooLow=La versión de la base de datos (%s) es demasiado antigua. Se requiere la versión %s o superior. ErrorPHPVersionTooLow=La versión de PHP es muy antigua. La versión %s es obligatoria. +ErrorConnectedButDatabaseNotFound=La conexión al servidor se realizó correctamente, pero no se encontró la base de datos '%s'. +IfDatabaseNotExistsGoBackAndUncheckCreate=Si la base de datos no existe, regrese y marque la opción "Crear base de datos". IfDatabaseExistsGoBackAndCheckCreate=Si la base de datos ya existe, retroceda y desmarque la opción "Crear base de datos". +WarningBrowserTooOld=La versión del navegador es demasiado antigua. Se recomienda encarecidamente actualizar su navegador a una versión reciente de Firefox, Chrome u Opera. PHPVersion=Versión de PHP License=Usando licencia WebPagesDirectory=Directorio donde se almacenan las páginas web @@ -21,10 +39,19 @@ DocumentsDirectory=Directorio para almacenar documentos cargados y generados CheckToForceHttps=Marque esta opción para forzar conexiones seguras (https).
Esto requiere que el servidor web esté configurado con un certificado SSL. DolibarrDatabase=Base de Datos Dolibarr DatabaseType=Tipo de base +ServerAddressDescription=Nombre o dirección IP para el servidor de la base de datos. Normalmente, 'localhost' cuando el servidor de la base de datos está alojado en el mismo servidor que el servidor web. ServerPortDescription=Puerto del servidor de base de datos Mantente vacío si desconocido. +DatabasePrefix=Prefijo de tabla de base de datos +AdminLogin=Cuenta de usuario para el propietario de la base de datos Dolibarr. +PasswordAgain=Vuelva a escribir la confirmación de la contraseña AdminPassword=Contraseña para el propietario de la base de datos Dolibarr. CreateDatabase=Crear base de datos +CreateUser=Cree una cuenta de usuario o otorgue permiso de cuenta de usuario en la base de datos de Dolibarr DatabaseSuperUserAccess=Servidor de base de datos: acceso de superusuario +CheckToCreateDatabase=Marque la casilla si la base de datos aún no existe y, por lo tanto, debe crearse.
En este caso, también debe completar el nombre de usuario y la contraseña de la cuenta de superusuario al final de esta página. +CheckToCreateUser=Marque la casilla si:
la cuenta de usuario de la base de datos aún no existe y por lo tanto debe crearse, o
si la cuenta de usuario existe pero la base de datos no existe y se deben otorgar permisos.
En este caso, se debe introducir la cuenta de usuario y la contraseña y el nombre de cuenta y contraseña de superusuario en la parte inferior de esta página. Si esta casilla no está marcada, el propietario de la base de datos y la contraseña ya deben existir. +DatabaseRootLoginDescription=Nombre de cuenta de superusuario (para crear nuevas bases de datos o nuevos usuarios), obligatorio si la base de datos o su propietario aún no existen. +KeepEmptyIfNoPassword=Deje en blanco si el superusuario no tiene contraseña (NO se recomienda) DatabaseCreation=Creación de base CreateDatabaseObjects=Creación de objetos de base ReferenceDataLoading=Carga de datos de referencia @@ -33,6 +60,9 @@ CreateTableAndPrimaryKey=Crear tabla %s CreateOtherKeysForTable=Crear claves e índices foráneos para la tabla %s OtherKeysCreation=Creación de claves e índices extranjeros AdminAccountCreation=Creación de inicio +PleaseTypePassword=Por favor escriba una contraseña, las contraseñas vacías no están permitidas! +PleaseTypeALogin=Por favor escriba un nombre de usuario! +PasswordsMismatch=Las contraseñas difieren, por favor intente de nuevo! SystemIsInstalled=Esta instalación está completa. SystemIsUpgraded=Dolibarr se ha actualizado con éxito. YouNeedToPersonalizeSetup=Debe configurar Dolibarr para que se ajuste a sus necesidades (apariencia, características, ...). Para hacer esto, por favor, siga el siguiente enlace: @@ -41,13 +71,16 @@ GoToDolibarr=Ir a Dolibarr GoToSetupArea=Ir a Dolibarr (área de configuración) GoToUpgradePage=Ir a la página de actualización de nuevo WithNoSlashAtTheEnd=Sin la barra "/" al final +AdminLoginAlreadyExists=La cuenta de administrador de Dolibarr ' %s ' ya existe. Vuelve si quieres crear otro. FailedToCreateAdminLogin=Error al crear la cuenta de administrador de Dolibarr. +WarningRemoveInstallDir=Advertencia, por razones de seguridad, una vez que se complete la instalación o la actualización, debe agregar un archivo llamado install.lock en el directorio de documentos de Dolibarr para evitar nuevamente el uso accidental / malicioso de las herramientas de instalación. ChoosedMigrateScript=Elija script de migración DataMigration=Migración de base de datos (datos) DatabaseMigration=Migración de la base de datos (estructura + algunos datos) ProcessMigrateScript=Procesamiento de script ChooseYourSetupMode=Elija su modo de configuración y haga clic en "Comenzar" ... FreshInstall=Instalación nueva +FreshInstallDesc=Utilice este modo si esta es su primera instalación. Si no, este modo puede reparar una instalación previa incompleta. Si desea actualizar su versión, elija el modo "Actualizar". UpgradeDesc=Utilice este modo si ha reemplazado archivos antiguos de Dolibarr con archivos de una versión más nueva. Esto actualizará su base de datos y datos. Start=comienzo InstallNotAllowed=La configuración no está permitida por los permisos de conf.php @@ -57,17 +90,36 @@ DatabaseVersion=Versión de base ServerVersion=Versión de servidor de base YouMustCreateItAndAllowServerToWrite=Debe crear este directorio y permitir que el servidor web escriba en él. DBSortingCollation=Orden de clasificación de caracteres +YouAskDatabaseCreationSoDolibarrNeedToConnect=Seleccionó crear la base de datos %s , pero para esto, Dolibarr necesita conectarse al servidor %s con el superusuario %s permisos. +YouAskLoginCreationSoDolibarrNeedToConnect=Seleccionó crear el usuario de la base de datos %s , pero para esto, Dolibarr necesita conectarse al servidor %s con los permisos de superusuario %s . +BecauseConnectionFailedParametersMayBeWrong=La conexión de la base de datos falló: los parámetros del host o superusuario deben ser incorrectos. OrphelinsPaymentsDetectedByMethod=Pago de huérfanos detectado por el método %s RemoveItManuallyAndPressF5ToContinue=Quítelo manualmente y presione F5 para continuar. +IfLoginDoesNotExistsCheckCreateUser=Si el usuario aún no existe, debe marcar la opción "Crear usuario" +ErrorConnection=El servidor " %s ", el nombre de la base de datos " %s ", el inicio de sesión " %s ", o la contraseña de la base de datos puede ser incorrecta o la versión del cliente PHP puede ser demasiado antigua en comparación con la versión de la base de datos. InstallChoiceRecommanded=Opción recomendada para instalar la versión %s de su versión actual %s InstallChoiceSuggested= Opción de instalación sugerida por el instalador . +MigrateIsDoneStepByStep=La versión de destino (%s) tiene un espacio de varias versiones. El asistente de instalación volverá a sugerir una migración adicional una vez que este se complete. +CheckThatDatabasenameIsCorrect=Compruebe que el nombre de la base de datos " %s " sea correcto. IfAlreadyExistsCheckOption=Si este nombre es correcto y esa base de datos aún no existe, debe marcar la opción "Crear base de datos". OpenBaseDir=Parámetro PHP openbasedir +YouAskToCreateDatabaseSoRootRequired=Has marcado la casilla "Crear base de datos". Para esto, debe proporcionar el nombre de usuario / contraseña del superusuario (parte inferior del formulario). +YouAskToCreateDatabaseUserSoRootRequired=Has marcado la casilla "Crear propietario de base de datos". Para esto, debe proporcionar el nombre de usuario / contraseña del superusuario (parte inferior del formulario). +NextStepMightLastALongTime=El paso actual puede tardar varios minutos. Por favor, espere hasta que la siguiente pantalla se muestre completamente antes de continuar. +MigrationCustomerOrderShipping=Migración de envío para almacenamiento de pedidos de ventas. MigrationShippingDelivery=Actualice el almacenamiento de envío MigrationShippingDelivery2=Actualice el almacenamiento del envío 2 MigrationFinished=Migración finalizada +LastStepDesc=Último paso : defina aquí el nombre de usuario y la contraseña que desea utilizar para conectarse a Dolibarr. No pierda esto, ya que es la cuenta maestra para administrar todas las otras cuentas de usuario / adicionales. ActivateModule=Activar el módulo %s ShowEditTechnicalParameters=Haga clic aquí para mostrar / editar los parámetros avanzados (modo experto) +WarningUpgrade=Advertencia: ¿Ejecutó primero una copia de seguridad de la base de datos? Esto es muy recomendable. La pérdida de datos (debido a, por ejemplo, errores en mysql versión 5.5.40 / 41/42/43) puede ser posible durante este proceso, por lo que es esencial realizar un volcado completo de su base de datos antes de iniciar cualquier migración. Haga clic en Aceptar para iniciar el proceso de migración ... +ErrorDatabaseVersionForbiddenForMigration=La versión de su base de datos es %s. Tiene un error crítico que hace posible la pérdida de datos si realiza cambios estructurales en su base de datos, como lo requiere el proceso de migración. Por esta razón, no se permitirá la migración hasta que actualice su base de datos a una versión de capa (parcheada) (lista de versiones de buggy conocidas: %s) +KeepDefaultValuesWamp=Utilizó el asistente de configuración de Dolibarr de DoliWamp, por lo que los valores propuestos aquí ya están optimizados. Cámbialas solo si sabes lo que estás haciendo. +KeepDefaultValuesDeb=Usó el asistente de configuración de Dolibarr de un paquete de Linux (Ubuntu, Debian, Fedora ...), por lo que los valores propuestos aquí ya están optimizados. Solo se debe ingresar la contraseña del propietario de la base de datos para crear. Cambie otros parámetros solo si sabe lo que está haciendo. +KeepDefaultValuesMamp=Utilizó el asistente de configuración de Dolibarr de DoliMamp, por lo que los valores propuestos aquí ya están optimizados. Cámbialas solo si sabes lo que estás haciendo. +KeepDefaultValuesProxmox=Utilizó el asistente de configuración de Dolibarr desde un dispositivo virtual Proxmox, por lo que los valores propuestos aquí ya están optimizados. Cámbialas solo si sabes lo que estás haciendo. +UpgradeExternalModule=Ejecutar proceso de actualización dedicado de módulo externo SetAtLeastOneOptionAsUrlParameter=Establezca al menos una opción como parámetro en URL. Por ejemplo: '... repair.php? Standard = confirmed' NothingToDelete=Nada para limpiar / eliminar MigrationFixData=Solución para datos desnormalizados @@ -76,6 +128,7 @@ MigrationSupplierOrder=Migración de datos para pedidos del proveedor MigrationProposal=Migración de datos de cotizaciones MigrationInvoice=Migración de datos para las facturas del cliente MigrationContract=Migración de datos para contratos +MigrationSuccessfullUpdate=Actualización exitosa MigrationUpdateFailed=Proceso de actualización fallido MigrationRelationshipTables=Migración de datos para tablas de relaciones (%s) MigrationPaymentsUpdate=Corrección de datos de pago @@ -87,7 +140,9 @@ MigrationContractsUpdate=Corrección de datos contractuales MigrationContractsNumberToUpdate=%scontrato (s) para actualizar MigrationContractsLineCreation=Crear una línea de contrato para la ref. De contrato %s MigrationContractsNothingToUpdate=No más cosas para hacer +MigrationContractsFieldDontExist=El campo fk_facture ya no existe. Nada que hacer. MigrationContractsEmptyDatesUpdate=Contrato de corrección de fecha vacía +MigrationContractsEmptyDatesUpdateSuccess=La corrección de la fecha vacía del contrato se realizó con éxito MigrationContractsEmptyDatesNothingToUpdate=Sin contrato fecha vacía para corregir MigrationContractsEmptyCreationDatesNothingToUpdate=Sin fecha de creación de contrato para corregir MigrationContractsInvalidDatesUpdate=Corrección de contrato de fecha de mal valor @@ -107,11 +162,20 @@ MigrationDeliveryDetail=Actualización de entrega MigrationStockDetail=Actualizar el valor de stock de los productos MigrationMenusDetail=Actualizar tablas de menús dinámicos MigrationDeliveryAddress=Actualizar la dirección de entrega en los envíos +MigrationProjectTaskActors=Migración de datos para la tabla llx_projet_task_actors MigrationProjectUserResp=Campo de migración de datos fk_user_resp de llx_projet a llx_element_contact MigrationProjectTaskTime=Tiempo de actualización pasado en segundos MigrationActioncommElement=Actualizar datos sobre acciones +MigrationPaymentMode=Migración de datos por tipo de pago. MigrationCategorieAssociation=Migración de categorías +MigrationEvents=Migración de eventos para agregar el propietario del evento en la tabla de asignación +MigrationEventsContact=Migración de eventos para agregar contactos de eventos a la tabla de asignación MigrationRemiseEntity=Actualizar el valor del campo de entidad de llx_societe_remise MigrationRemiseExceptEntity=Actualizar el valor del campo de entidad de llx_societe_remise_except MigrationUserRightsEntity=Actualizar el valor del campo de entidad de llx_user_rights MigrationUserGroupRightsEntity=Actualizar el valor del campo de entidad de llx_usergroup_rights +MigrationUserPhotoPath=Migración de rutas de fotos para usuarios. +ErrorFoundDuringMigration=Se informaron errores durante el proceso de migración, por lo que el siguiente paso no está disponible. Para ignorar los errores, puede hacer clic aquí , pero es posible que la aplicación o algunas características no funcionen correctamente hasta que se resuelvan los errores. +YouTryInstallDisabledByDirLock=La aplicación intentó auto actualizarse, pero las páginas de instalación / actualización se han deshabilitado por seguridad (directorio renombrado con el sufijo .lock).
+YouTryInstallDisabledByFileLock=La aplicación intentó auto actualizarse, pero las páginas de instalación / actualización se han deshabilitado por seguridad (debido a la existencia de un archivo de bloqueo install.lock en el directorio de documentos de dolibarr).
+ClickOnLinkOrRemoveManualy=Haga clic en el siguiente enlace. Si siempre ve esta misma página, debe eliminar / cambiar el nombre del archivo install.lock en el directorio de documentos. diff --git a/htdocs/langs/es_CL/interventions.lang b/htdocs/langs/es_CL/interventions.lang index 40cc84043e9..8cdf1db9495 100644 --- a/htdocs/langs/es_CL/interventions.lang +++ b/htdocs/langs/es_CL/interventions.lang @@ -1,6 +1,7 @@ # Dolibarr language file - Source file is en_US - interventions InterventionCard=Tarjeta de intervención NewIntervention=Nueva intervención +ChangeIntoRepeatableIntervention=Cambio a intervención repetible. ListOfInterventions=Lista de intervenciones ActionsOnFicheInter=Acciones en intervención InterventionContact=Contacto de intervención @@ -11,6 +12,7 @@ ConfirmValidateIntervention=¿Estas seguro que deseas validad esta intervención ConfirmModifyIntervention=¿Estás seguro de que deseas modificar esta intervención? ConfirmDeleteInterventionLine=¿Estás seguro de que deseas eliminar esta línea de intervención? ConfirmCloneIntervention=¿Estás seguro de que quieres clonar esta intervención? +NameAndSignatureOfInternalContact=Nombre y firma de la intervención: DocumentModelStandard=Modelo de documento estándar para intervenciones InterventionCardsAndInterventionLines=Intervenciones y líneas de intervenciones InterventionClassifyBilled=Clasificar "Facturado" @@ -18,10 +20,12 @@ InterventionClassifyUnBilled=Clasificar "Sin facturar" InterventionClassifyDone=Clasificar "Hecho" StatusInterInvoiced=Pagado SendInterventionRef=Presentación de la intervención %s +SendInterventionByMail=Enviar intervención por correo electrónico InterventionCreatedInDolibarr=Intervención %s creado InterventionModifiedInDolibarr=Intervención %s modificado InterventionClassifiedBilledInDolibarr=Intervención %s configurada como facturada InterventionClassifiedUnbilledInDolibarr=Intervención %s configurada como no facturada +InterventionSentByEMail=Intervención %s enviada por correo electrónico InterventionDeletedInDolibarr=Intervención %s eliminado InterventionsArea=Área de intervenciones DraftFichinter=Borrador de intervenciones @@ -31,6 +35,8 @@ TypeContact_fichinter_external_CUSTOMER=Seguimiento de contacto con el cliente PrintProductsOnFichinter=Imprima también líneas de tipo "producto" (no solo servicios) en la tarjeta de intervención PrintProductsOnFichinterDetails=intervenciones generadas a partir de órdenes UseServicesDurationOnFichinter=Usar la duración de los servicios para las intervenciones generadas a partir de órdenes +NbOfinterventions=Nº de tarjetas de intervención. +NumberOfInterventionsByMonth=Nº de tarjetas de intervención por mes (fecha de validación). AmountOfInteventionNotIncludedByDefault=La cantidad de intervención no se incluye por defecto en los beneficios (en la mayoría de los casos, las hojas de tiempo se utilizan para contar el tiempo invertido). Agregue la opción PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT a 1 en home-setup-other para incluirlos. InterId=Id de intervención InterRef=Intervención ref. diff --git a/htdocs/langs/es_CL/main.lang b/htdocs/langs/es_CL/main.lang index 29fae5a5cca..8eb9aef7170 100644 --- a/htdocs/langs/es_CL/main.lang +++ b/htdocs/langs/es_CL/main.lang @@ -36,13 +36,20 @@ ErrorGoToModuleSetup=Ir a la configuración del módulo para arreglar esto ErrorFailedToSendMail=Error al enviar el correo (remitente = %s, receptor = %s) ErrorFileNotUploaded=El archivo no fue cargado. Compruebe que el tamaño no exceda el máximo permitido, que el espacio libre esté disponible en el disco y que no haya un archivo con el mismo nombre en este directorio. ErrorWrongHostParameter=Parámetro de host incorrecto +ErrorYourCountryIsNotDefined=Tu país no está definido. Vaya a Home-Setup-Edit y vuelva a publicar el formulario. +ErrorRecordIsUsedByChild=Error al eliminar este registro. Este registro es utilizado por al menos un registro secundario. ErrorWrongValueForParameterX=Valor incorrecto para el parámetro %s ErrorNoRequestInError=Sin solicitud por error +ErrorServiceUnavailableTryLater=Servicio no disponible en este momento. Inténtalo de nuevo más tarde. ErrorDuplicateField=Duplicar valor en un campo único +ErrorSomeErrorWereFoundRollbackIsDone=Se encontraron algunos errores. Los cambios se han retrotraído. +ErrorConfigParameterNotDefined=El parámetro %s no está definido en el archivo de configuración de Dolibarr conf.php . ErrorCantLoadUserFromDolibarrDatabase=Falló al encontrar el usuario %s en la base de datos Dolibarr. ErrorNoVATRateDefinedForSellerCountry=Error, sin tasas de IVA definidas para el país '%s'. ErrorNoSocialContributionForSellerCountry=Error, ningún tipo de impuestos sociales/fiscales definidos para el país '%s'. ErrorFailedToSaveFile=Error, no se pudo guardar el archivo. +ErrorCannotAddThisParentWarehouse=Está intentando agregar un almacén principal que ya es secundario de un almacén existente +MaxNbOfRecordPerPage=Max. número de registros por página NotAuthorized=Usted no está autorizado a hacer eso. SetDate=Establece la fecha SeeAlso=Véase también %s @@ -54,8 +61,10 @@ FileRenamed=El archivo fue renombrado con éxito FileGenerated=El archivo fue generado con éxito FileSaved=El archivo se guardó con éxito FileUploaded=El archivo se cargó correctamente +FileTransferComplete=Archivo (s) subido exitosamente FilesDeleted=Archivo eliminado con éxito FileWasNotUploaded=Se seleccionó un archivo para el archivo adjunto pero aún no se cargó. Haga clic en "Adjuntar archivo" para esto. +NbOfEntries=Numero de entradas GoToWikiHelpPage=Lea la ayuda en línea (se necesita acceso a Internet) GoToHelpPage=Leer la ayuda RecordDeleted=Registro borrado @@ -65,6 +74,8 @@ Undefined=Indefinido PasswordForgotten=¿Contraseña olvidada? NoAccount=Sin cuenta? SeeAbove=Véase más arriba +LastConnexion=Último acceso +PreviousConnexion=Inicio de sesión anterior PreviousValue=Valor anterior ConnectedOnMultiCompany=Conectado al entorno AuthenticationMode=Modo de autenticación @@ -78,18 +89,21 @@ TechnicalID=ID técnico NotePrivate=Nota (privado) PrecisionUnitIsLimitedToXDecimals=Dolibarr se configuró para limitar la precisión del precio unitario a %s decimales. DoTest=Prueba +WarningYouHaveAtLeastOneTaskLate=Advertencia, tiene al menos un elemento que ha excedido el tiempo de tolerancia. OnlineHelp=Ayuda en linea Under=debajo Period=Período PeriodEndDate=Fecha de finalización del período NotClosed=No se ha cerrado Enabled=Habilitado +Enable=Habilitar Disable=Inhabilitar Disabled=Deshabilitado AddLink=Agregar enlace AddToDraft=Agregar al borrador Update=Actualizar CloseBox=Retire el widget de su tablero de instrumentos +ConfirmSendCardByMail=¿Realmente desea enviar el contenido de esta tarjeta por correo a %s ? Delete=Borrar Remove=retirar Resiliate=Terminar @@ -100,6 +114,7 @@ Save=Guardar SaveAs=Guardar como TestConnection=Conexión de prueba ToClone=Clonar +ConfirmClone=Elija los datos que desea clonar: NoCloneOptionsSpecified=No hay datos para clonar definidos. Run=correr Show=Mostrar @@ -107,6 +122,7 @@ Hide=Ocultar ShowCardHere=Mostrar tarjeta SearchOf=Buscar Valid=Válido +Upload=Subir ToLink=Enlazar Choose=Escoger Resize=Cambiar el tamaño @@ -117,6 +133,8 @@ NoteSomeFeaturesAreDisabled=Tenga en cuenta que muchas características / módul PersonalValue=Valor personal MultiLanguage=Multi lenguaje Info=Iniciar sesión +DescriptionOfLine=Descripción de la línea +DateOfLine=Fecha de la linea Model=Plantilla de documento DefaultModel=Plantilla de documento predeterminada Action=Evento @@ -155,6 +173,9 @@ Mb=megabyte Tb=Tuberculosis Copy=Dupdo Default=Defecto +DefaultValues=Valores predeterminados / filtros / clasificación +UnitPriceHT=Precio unitario (excl.) +UnitPriceHTCurrency=Precio unitario (excl.) (Moneda) UnitPriceTTC=Precio unitario PriceU=ARRIBA. PriceUHT=P.U. (net) @@ -164,11 +185,15 @@ Amount=Cantidad AmountInvoice=Importe de la factura AmountInvoiced=Monto facturado AmountPayment=Monto del pago +AmountHTShort=Cantidad (excl.) AmountTTCShort=Monto (IVA inc.) +AmountHT=Importe (sin IVA) AmountTTC=Monto (impuesto inc.) AmountVAT=IVA +MulticurrencyAlreadyPaid=Ya pagado, moneda original. MulticurrencyRemainderToPay=Permanecer en el pago, moneda original MulticurrencyPaymentAmount=Importe del pago, moneda original +MulticurrencyAmountHT=Importe (sin IVA), moneda original MulticurrencyAmountTTC=Importe (inc. De impuestos), moneda original MulticurrencyAmountVAT=Importe de la cantidad, moneda original AmountLT1=Impuesto a la cantidad 2 @@ -176,8 +201,14 @@ AmountLT2=Impuesto a la cantidad 3 AmountLT1ES=Cantidad RE AmountTotal=Cantidad total AmountAverage=Cantidad promedio +PriceQtyMinHT=Precio cantidad min. (sin impuestos) +PriceQtyMinHTCurrency=Precio cantidad min. (sin IVA) (moneda) SubTotal=Total parcial +TotalHT100Short=Total de 100%% (excl.) +TotalHTShortCurrency=Total (excl. En moneda) TotalTTCShort=Total (IVA inc.) +TotalHT=Total (sin IVA) +TotalHTforthispage=Total (sin IVA) para esta página Totalforthispage=Total para esta página TotalTTC=Total (impuesto inc.) TotalTTCToYourCredit=Total (impuesto inc.) A su crédito @@ -185,6 +216,7 @@ TotalVAT=Total impuestos TotalLT1=Impuesto total 2 TotalLT2=Impuesto total 3 TotalLT2ES=IRPF total +HT=Excl. impuesto TTC=Inc. impuesto INCVATONLY=IVA incluido INCT=Inc. todos los impuestos @@ -194,6 +226,7 @@ LT1=Impuesto a las ventas 2 LT1Type=Tipo de impuesto a las ventas 2 LT2=Impuesto a las ventas 3 LT2Type=Tipo de impuesto a las ventas 3 +LT1GC=Centavos adicionales VATRate=Tasa de impuesto VATCode=Código de tasa impositiva VATNPR=Tasa de impuesto NPR @@ -216,6 +249,8 @@ Accountant=Contador ContactsForCompany=Contactos para este tercero ContactsAddressesForCompany=Contactos/direcciones para este tercero AddressesForCompany=Direcciones para este tercero +ActionsOnCompany=Eventos para este tercero. +ActionsOnContact=Eventos para este contacto / dirección ActionsOnMember=Eventos sobre este miembro NActionsLate=%s tarde Completed=Terminado @@ -224,6 +259,7 @@ Filter=Filtrar FilterOnInto=Criterio de búsqueda '%s' en los campos %s ChartGenerated=Gráfico generado GeneratedOn=Construir en %s +DolibarrWorkBoard=Artículos abiertos NoOpenedElementToProcess=Sin elemento abierto para procesar NotYetAvailable=No disponible aún Categories=Etiquetas / categorías @@ -233,6 +269,7 @@ ResultKo=Fracaso Reporting=Informes Drafts=Borrador Opened=Abierto +ClosedAll=Cerrado (todos) Size=tamaño Topic=Tema ByCompanies=Por terceros @@ -242,6 +279,7 @@ Preview=Previsualizar NextStep=Próximo paso None=Ninguna Late=Tarde +LateDesc=Un elemento se define como Retrasado según la configuración del sistema en el menú Inicio - Configuración - Alertas. NoItemLate=No hay artículo tarde Photo=Imagen Photos=Imágenes @@ -291,6 +329,7 @@ InfoAdmin=Información para administradores Undo=Deshacer UndoExpandAll=Deshacer expandir FeatureNotYetSupported=Característica aún no compatible +SendByMail=Enviar por correo electrónico MailSentBy=Correo electrónico enviado por TextUsedInTheMessageBody=Cuerpo del correo electronico SendAcknowledgementByMail=Enviar correo electrónico de confirmación @@ -304,6 +343,9 @@ CanBeModifiedIfKo=Puede ser modificado si no es válido ValueIsValid=El valor es valido ValueIsNotValid=El valor no es válido RecordCreatedSuccessfully=Registro creado con éxito +RecordsModified=%s registros modificados +RecordsDeleted=%s registro (s) eliminado (s) +RecordsGenerated=%s registro (s) generado (s) AutomaticCode=Código automático FeatureDisabled=Característica deshabilitada MoveBox=Mover widget @@ -314,6 +356,7 @@ Receive=Recibir CompleteOrNoMoreReceptionExpected=Completo o nada más esperado YouCanChangeValuesForThisListFromDictionarySetup=Puede cambiar los valores para esta lista desde el menú Configuración - Diccionarios YouCanChangeValuesForThisListFrom=Puede cambiar los valores para esta lista desde el menú %s +YouCanSetDefaultValueInModuleSetup=Puede establecer el valor predeterminado utilizado al crear un nuevo registro en la configuración del módulo Documents=Archivos UploadDisabled=Carga inhabilitada MenuAgendaGoogle=Agenda de Google @@ -327,17 +370,23 @@ UnHidePassword=Mostrar comando real con contraseña clara AddNewLine=Agregar nueva línea AddFile=Agregar archivo FreeZone=No es un producto / servicio predefinido +FreeLineOfType=Artículo de texto libre, escriba: CloneMainAttributes=Clonar objeto con sus atributos principales +ReGeneratePDF=Volver a generar PDF Merge=Unir DocumentModelStandardPDF=Plantilla PDF estándar PrintContentArea=Mostrar página para imprimir área de contenido principal MenuManager=Administrador de menú +WarningYouAreInMaintenanceMode=Advertencia, está en modo de mantenimiento: solo el inicio de sesión %s tiene permiso para usar la aplicación en este modo. CoreErrorMessage=Disculpe, ocurrió un error. Póngase en contacto con el administrador del sistema para verificar los registros o deshabilitar $ dolibarr_main_prod = 1 para obtener más información. ValidatePayment=Validar el pago FieldsWithAreMandatory=Campos con %s son obligatorios +FieldsWithIsForPublic=Los campos con %s se muestran en la lista pública de miembros. Si no quieres esto, desmarca la casilla "público". +AccordingToGeoIPDatabase=(De acuerdo a la conversión de GeoIP) RequiredField=campo requerido ToTest=Prueba ValidateBefore=La tarjeta debe ser validada antes de usar esta característica +TotalizableDesc=Este campo es totalizable en lista. Hidden=Oculto Source=Fuente Before=antes de @@ -350,10 +399,15 @@ LinkTo=Enlace a LinkToProposal=Enlace a la propuesta LinkToOrder=Enlace a la orden LinkToInvoice=Enlace a la factura +LinkToTemplateInvoice=Enlace a la factura de la plantilla +LinkToSupplierOrder=Enlace a la orden de compra +LinkToSupplierProposal=Enlace a la propuesta del vendedor +LinkToSupplierInvoice=Enlace a la factura del vendedor LinkToContract=Enlace a contrato LinkToIntervention=Enlace a la intervención SetToDraft=Volver al borrador ClickToEdit=Haz click para editar +ClickToRefresh=Haga clic para actualizar EditHTMLSource=Editar fuente HTML ByCountry=Por país ByTown=Por la ciudad @@ -363,6 +417,7 @@ NoResults=No hay resultados SystemTools=Herramientas del sistema ModulesSystemTools=Herramientas de módulos NoPhotoYet=No hay fotos disponibles todavía +MyDashboard=Mi tablero SelectAction=Seleccione la acción SelectTargetUser=Seleccionar usuario / empleado objetivo HelpCopyToClipboard=Usa Ctrl + C para copiar al portapapeles @@ -375,6 +430,7 @@ AddBox=Agregar caja SelectElementAndClick=Seleccione un elemento y haga clic en %s PrintFile=Imprimir archivo %s ShowTransaction=Mostrar entrada en cuenta bancaria +GoIntoSetupToChangeLogo=Vaya a Inicio - Configuración - Compañía para cambiar el logotipo o vaya a Inicio - Configuración - Mostrar para ocultar. Deny=Negar Denied=Negado ListOfTemplates=Lista de plantillas @@ -384,28 +440,47 @@ Sincerely=Sinceramente DeleteLine=Eliminar línea ConfirmDeleteLine=¿Estás seguro de que deseas eliminar esta línea? NoPDFAvailableForDocGenAmongChecked=No hay PDF disponible para la generación de documentos entre el registro verificado +TooManyRecordForMassAction=Demasiados registros seleccionados para la acción de masas. La acción está restringida a una lista de registros %s. NoRecordSelected=Ningún registro seleccionado MassFilesArea=Área para archivos creados por acciones masivas +ConfirmMassDeletion=Confirmación de eliminación masiva +ConfirmMassDeletionQuestion=¿Está seguro de que desea eliminar los registros seleccionados %s? ClassifyBilled=Clasificar pago ClassifyUnbilled=Clasificar sin facturar FrontOffice=Oficina frontal ExportFilteredList=Exportar lista filtrada ExportList=Lista de exportación +ExportOfPiecesAlreadyExportedIsEnable=Se habilita la exportación de piezas ya exportadas. +ExportOfPiecesAlreadyExportedIsDisable=La exportación de piezas ya exportadas está deshabilitada. +AllExportedMovementsWereRecordedAsExported=Todos los movimientos exportados fueron registrados como exportados. +NotAllExportedMovementsCouldBeRecordedAsExported=No todos los movimientos exportados pudieron registrarse como exportados Miscellaneous=Diverso GroupBy=Agrupar por... RemoveString=Eliminar la cadena '%s' +SomeTranslationAreUncomplete=Algunos de los idiomas ofrecidos pueden estar solo parcialmente traducidos o pueden contener errores. Ayude a corregir su idioma registrándose en https://transifex.com/projects/p/dolibarr/ para agregar sus mejoras. DirectDownloadLink=Enlace de descarga directa (público / externo) DirectDownloadInternalLink=Enlace de descarga directa (debe registrarse y necesita permisos) DownloadDocument=Descargar documento ActualizeCurrency=Actualizar la tasa de cambio +ModuleBuilder=Módulo y generador de aplicaciones ClickToShowHelp=Haga clic para mostrar la ayuda de información sobre herramientas ExpenseReport=Informe de gastos ExpenseReports=Reporte de gastos HR=HORA HRAndBank=Recursos Humanos y Banco TitleSetToDraft=Volver al borrador +ConfirmSetToDraft=¿Está seguro de que desea volver al estado de borrador? ImportId=Importar identificación +EMailTemplates=Plantillas de correo electrónico +LeadOrProject=Plomo Proyecto +LeadsOrProjects=Lleva | Proyectos +Lead=Dirigir +Leads=Lleva +ListOpenLeads=Lista de clientes potenciales abiertos +ListOpenProjects=Listar proyectos abiertos +NewLeadOrProject=Nuevo plomo o proyecto LineNb=Line no +TabLetteringSupplier=Letras del vendedor Monday=lunes Tuesday=martes Thursday=jueves @@ -430,12 +505,21 @@ Select2LoadingMoreResults=Cargando más resultados ... Select2SearchInProgress=Búsqueda en progreso ... SearchIntoCustomerInvoices=Facturas de cliente SearchIntoSupplierInvoices=Facturas del vendedor +SearchIntoCustomerOrders=Ordenes de venta SearchIntoSupplierOrders=Ordenes de compra SearchIntoCustomerProposals=Propuestas de clientes SearchIntoSupplierProposals=Propuestas del vendedor SearchIntoCustomerShipments=Envíos de clientes SearchIntoExpenseReports=Reporte de gastos +SearchIntoLeaves=Salir +SearchIntoTickets=Entradas NbComments=Numero de comentarios CommentAdded=Comentario agregado Everybody=Todos +PayedTo=Pagado para AssignedTo=Asignado a +ConfirmMassDraftDeletion=Confirmación de borrado masivo borrador +SelectAThirdPartyFirst=Seleccione un tercero primero ... +YouAreCurrentlyInSandboxMode=Actualmente se encuentra en el modo "zona de pruebas" %s +ValidFrom=Válida desde +NoRecordedUsers=No hay usuarios diff --git a/htdocs/langs/es_CL/members.lang b/htdocs/langs/es_CL/members.lang index 69068ec83aa..c360e73cbaf 100644 --- a/htdocs/langs/es_CL/members.lang +++ b/htdocs/langs/es_CL/members.lang @@ -3,6 +3,7 @@ MembersArea=Área de miembros MemberCard=Tarjeta de miembro SubscriptionCard=Tarjeta de suscripción ShowMember=Mostrar tarjeta de miembro +ThirdpartyNotLinkedToMember=Tercero no vinculado a un miembro MembersTickets=Entradas de los miembros FundationMembers=Miembros de la fundación ErrorMemberIsAlreadyLinkedToThisThirdParty=Otro miembro (nombre: %s, login: %s) ya está asignado al tercero %s. Primero elimine la asignación, porque un tercero no puede vincularse solo a un miembro (y viceversa). @@ -49,7 +50,9 @@ Subscriptions=Suscripciones SubscriptionLate=Tarde SubscriptionNotReceived=Suscripción nunca recibida ListOfSubscriptions=Lista de suscripciones +SendCardByMail=Enviar tarjeta por email NoTypeDefinedGoToSetup=Ningún tipo de miembro definido. Ir al menú "Tipos de miembros" +WelcomeEMail=Correo de bienvenida SubscriptionRequired=Suscripción requerida VoteAllowed=Voto permitido MorPhy=Moral / Físico @@ -83,6 +86,16 @@ YourSubscriptionWasRecorded=Su nueva suscripción fue grabada YourMembershipWasCanceled=Su membresía fue cancelada CardContent=Contenido de su tarjeta de miembro ThisIsContentOfYourMembershipRequestWasReceived=Queremos informarle que se recibió su solicitud de membresía.

+ThisIsContentOfSubscriptionReminderEmail=Queremos informarle que su suscripción está a punto de caducar o ya ha caducado (__MEMBER_LAST_SUBSCRIPTION_DATE_END__). Esperamos que lo renueven.

+ThisIsContentOfYourCard=Este es un resumen de la información que tenemos sobre usted. Por favor, póngase en contacto con nosotros si algo es incorrecto.

+DescADHERENT_AUTOREGISTER_NOTIF_MAIL_SUBJECT=Asunto de la notificación por correo electrónico recibida en caso de autoinscripción de un invitado +DescADHERENT_AUTOREGISTER_NOTIF_MAIL=Contenido del correo electrónico de notificación recibido en caso de inscripción automática de un invitado +DescADHERENT_EMAIL_TEMPLATE_AUTOREGISTER=Plantilla de correo electrónico que se utilizará para enviar un correo electrónico a un miembro en la suscripción automática de miembros +DescADHERENT_EMAIL_TEMPLATE_MEMBER_VALIDATION=Plantilla de correo electrónico para usar para enviar un correo electrónico a un miembro en la validación de miembros +DescADHERENT_EMAIL_TEMPLATE_SUBSCRIPTION=Plantilla de correo electrónico que se utiliza para enviar un correo electrónico a un miembro en una nueva grabación de suscripción +DescADHERENT_EMAIL_TEMPLATE_REMIND_EXPIRATION=Plantilla de correo electrónico que se utilizará para enviar un recordatorio por correo electrónico cuando la suscripción esté a punto de caducar +DescADHERENT_EMAIL_TEMPLATE_CANCELATION=Plantilla de correo electrónico que se utiliza para enviar un correo electrónico a un miembro en caso de cancelación de miembro +DescADHERENT_MAIL_FROM=Correo electrónico del remitente para correos electrónicos automáticos DescADHERENT_ETIQUETTE_TYPE=Formato de la página de etiquetas DescADHERENT_ETIQUETTE_TEXT=Texto impreso en las hojas de direcciones de los miembros DescADHERENT_CARD_TYPE=Página de formato de tarjetas @@ -103,6 +116,8 @@ DocForAllMembersCards=Genera tarjetas de visita para todos los miembros DocForOneMemberCards=Genera tarjetas de visita para un miembro en particular DocForLabels=Generar hojas de direcciones SubscriptionPayment=Pago de suscripción +LastSubscriptionDate=Fecha del último pago de suscripción +LastSubscriptionAmount=Cantidad de la última suscripción MembersStatisticsByState=Estadísticas de miembros por estado / provincia MembersStatisticsByTown=Estadísticas de miembros por ciudad NoValidatedMemberYet=No se encontraron miembros validados @@ -126,8 +141,12 @@ MembersStatisticsByProperties=Estadísticas de miembros por naturaleza MembersByNature=Esta pantalla muestra estadísticas de los miembros por naturaleza. MembersByRegion=Esta pantalla muestra estadísticas de los miembros por región. VATToUseForSubscriptions=Tipo de IVA para suscripciones +NoVatOnSubscription=Sin IVA para suscripciones. ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS=Producto utilizado para la línea de suscripción en la factura: %s SubscriptionRecorded=Suscripción grabada NoEmailSentToMember=No se envió ningún correo electrónico al miembro EmailSentToMember=Correo electrónico enviado al miembro al %s SendReminderForExpiredSubscriptionTitle=Enviar recordatorio por correo electrónico para la suscripción caducada +SendReminderForExpiredSubscription=Enviar recordatorio por correo electrónico a los miembros cuando la suscripción está a punto de caducar (el parámetro es el número de días antes del final de la suscripción para enviar el recordatorio. Puede ser una lista de días separados por un punto y coma, por ejemplo, '10; 5; 0; -5 ') +YouMayFindYourInvoiceInThisEmail=Puede encontrar su factura adjunta a este correo electrónico. +XMembersClosed=%s miembro (s) cerrado (s) diff --git a/htdocs/langs/es_CL/orders.lang b/htdocs/langs/es_CL/orders.lang index 0a809f07ec0..daed592b977 100644 --- a/htdocs/langs/es_CL/orders.lang +++ b/htdocs/langs/es_CL/orders.lang @@ -15,6 +15,14 @@ MakeOrder=Hacer orden SupplierOrder=Orden de compra SuppliersOrders=Ordenes de compra SuppliersOrdersRunning=Pedidos de compra actuales +CustomerOrder=Órdenes de venta +CustomersOrders=Ordenes de venta +CustomersOrdersRunning=Órdenes de venta actuales +CustomersOrdersAndOrdersLines=Pedidos de venta y detalles del pedido +OrdersDeliveredToBill=Pedidos de venta entregados a la factura. +OrdersToBill=Pedidos de venta entregados +OrdersInProcess=Órdenes de venta en proceso +OrdersToProcess=Pedidos de venta para procesar SuppliersOrdersToProcess=Órdenes de compra para procesar StatusOrderCanceledShort=Cancelado StatusOrderSentShort=En proceso @@ -51,14 +59,18 @@ AddToDraftOrders=Añadir a orden de borrador OrdersOpened=Órdenes para procesar NoDraftOrders=No hay borradores de pedidos NoOrder=Sin orden +LastOrders=Últimos pedidos de %s +LastCustomerOrders=Últimos pedidos de %s LastSupplierOrders=Últimas %s órdenes de compra LastModifiedOrders=Últimas %s órdenes modificadas AllOrders=Todas las órdenes NbOfOrders=Numero de ordenes OrdersStatistics=Estadísticas de la orden OrdersStatisticsSuppliers=Estadísticas de orden de compra +AmountOfOrdersByMonthHT=Cantidad de pedidos por mes (sin IVA) ListOfOrders=Lista de ordenes CloseOrder=Cerrar orden +ConfirmCloseOrder=¿Está seguro de que desea configurar este pedido para entregado? Una vez que se entrega un pedido, se puede configurar para facturarse. ConfirmDeleteOrder=¿Seguro que quieres eliminar esta orden? ConfirmValidateOrder=¿Estas seguro que deseas validar esta orden con el nombre %s? ConfirmUnvalidateOrder=¿Estas seguro que deseas restaurar la orden %s al estado de borrador? @@ -80,11 +92,14 @@ AuthorRequest=Solicitar autor UserWithApproveOrderGrant=Usuarios con permiso de "aprobar órdenes". PaymentOrderRef=Pago del pedido %s ConfirmCloneOrder=¿Estas seguro que deseas clonar esta orden %s? +DispatchSupplierOrder=Recibiendo orden de compra %s FirstApprovalAlreadyDone=Primera aprobación ya hecha SecondApprovalAlreadyDone=Segunda aprobación ya hecha SupplierOrderReceivedInDolibarr=La orden de compra %s recibió %s +SupplierOrderSubmitedInDolibarr=Orden de compra %s enviada SupplierOrderClassifiedBilled=Pedido de compra %s establecido facturado OtherOrders=Otras órdenes +TypeContact_commande_internal_SALESREPFOLL=Representante seguimiento de orden de venta TypeContact_commande_internal_SHIPPING=Representante de seguimiento de envío TypeContact_commande_external_BILLING=Contacto cliente de facturación cotización TypeContact_commande_external_SHIPPING=Contacto de envío del cliente @@ -98,6 +113,7 @@ Error_COMMANDE_SUPPLIER_ADDON_NotDefined=Constante COMMANDE_SUPPLIER_ADDON no de Error_COMMANDE_ADDON_NotDefined=Constant COMMANDE_ADDON no definido Error_OrderNotChecked=No hay pedidos para facturar seleccionados PDFEinsteinDescription=Un modelo de pedido completo (logotipo ...) +PDFEratostheneDescription=Un modelo de pedido completo (logo ...) PDFEdisonDescription=Un modelo de orden simple PDFProformaDescription=Una factura proforma completa (logotipo ...) CreateInvoiceForThisCustomer=Pagar Pedidos diff --git a/htdocs/langs/es_CL/other.lang b/htdocs/langs/es_CL/other.lang index 5d75b77f846..cd109e65f63 100644 --- a/htdocs/langs/es_CL/other.lang +++ b/htdocs/langs/es_CL/other.lang @@ -3,6 +3,7 @@ SecurityCode=Código de seguridad NumberingShort=NORTE Tools=Herramientas TMenuTools=Herramientas +ToolsDesc=Todas las herramientas no incluidas en otras entradas del menú se agrupan aquí.
Se puede acceder a todas las herramientas a través del menú de la izquierda. Birthday=Cumpleaños BirthdayAlertOn=alerta de cumpleaños activa BirthdayAlertOff=alerta de cumpleaños inactiva @@ -12,11 +13,22 @@ PreviousMonthOfInvoice=Mes anterior (número 1-12) de la fecha de facturación NextMonthOfInvoice=El mes siguiente (número 1-12) de la fecha de la factura TextNextMonthOfInvoice=Mes siguiente (texto) de fecha de factura DocFileGeneratedInto=Archivo de documento generado en %s. +MessageOK=Mensaje en la página de devolución para un pago validado. +MessageKO=Mensaje en la página de devolución para un pago cancelado. ContentOfDirectoryIsNotEmpty=El contenido de este directorio no está vacío. +DeleteAlsoContentRecursively=Marque para borrar todo el contenido recursivamente YearOfInvoice=Año de la fecha de factura PreviousYearOfInvoice=Año anterior de la fecha de facturación NextYearOfInvoice=El año siguiente a la fecha de la factura +Notify_ORDER_VALIDATE=Pedido de venta validado +Notify_ORDER_SENTBYMAIL=Pedido de venta enviado por correo +Notify_ORDER_SUPPLIER_SENTBYMAIL=Orden de compra enviada por correo electrónico +Notify_ORDER_SUPPLIER_VALIDATE=Orden de compra registrada +Notify_ORDER_SUPPLIER_APPROVE=Orden de compra aprobada +Notify_ORDER_SUPPLIER_REFUSE=Orden de compra rechazada Notify_PROPAL_VALIDATE=Validación cotización cliente +Notify_PROPAL_CLOSE_SIGNED=Propuesta de cliente cerrada firmada +Notify_PROPAL_CLOSE_REFUSED=Propuesta de cliente cerrada rechazada Notify_PROPAL_SENTBYMAIL=Envío cotización por e-mail Notify_WITHDRAW_TRANSMIT=Retirada de transmisión Notify_WITHDRAW_CREDIT=Retiro de crédito @@ -27,6 +39,10 @@ Notify_BILL_VALIDATE=Factura del cliente validada Notify_BILL_UNVALIDATE=Factura del cliente sin validar Notify_BILL_CANCEL=Factura del cliente cancelada Notify_BILL_SENTBYMAIL=Factura del cliente enviada por correo +Notify_BILL_SUPPLIER_VALIDATE=Factura del proveedor validada +Notify_BILL_SUPPLIER_PAYED=Factura pagada al vendedor +Notify_BILL_SUPPLIER_SENTBYMAIL=Factura del proveedor enviada por correo +Notify_BILL_SUPPLIER_CANCELED=Factura del vendedor cancelada Notify_CONTRACT_VALIDATE=Contrato validado Notify_FICHEINTER_VALIDATE=Intervención validada Notify_FICHINTER_ADD_CONTACT=Contacto agregado a la intervención @@ -38,14 +54,26 @@ Notify_MEMBER_SUBSCRIPTION=Miembro suscrito Notify_MEMBER_RESILIATE=Miembro terminado Notify_MEMBER_DELETE=Miembro eliminado Notify_PROJECT_CREATE=Creación del proyecto +Notify_HOLIDAY_VALIDATE=Deja la solicitud validada (se requiere aprobación) +Notify_HOLIDAY_APPROVE=Dejar la solicitud aprobada SeeModuleSetup=Ver configuración del módulo %s NbOfAttachedFiles=Número de archivos / documentos adjuntos TotalSizeOfAttachedFiles=Tamaño total de los archivos / documentos adjuntos MaxSize=Talla máxima AttachANewFile=Adjunte un nuevo archivo / documento LinkedObject=Objeto vinculado +NbOfActiveNotifications=Número de notificaciones (número de correos electrónicos del destinatario) PredefinedMailTest=__(Hola)__\nEste es un correo de prueba enviado a __EMAIL__.\nLas dos líneas están separadas por un retorno de carro.\n\n__USER_SIGNATURE__ PredefinedMailTestHtml=__(Hola)__\nEste es un correo de prueba (la palabra prueba debe estar en negrita).
Las dos líneas están separadas por un retorno de carro.

__USER_SIGNATURE__ +PredefinedMailContentSendInvoice=__ (Hola) __ Encuentre la factura __REF__ adjunta __ONLINE_PAYMENT_TEXT_AND_URL__ __ (Atentamente) __ __USER_SIGNATURE__ +PredefinedMailContentSendInvoiceReminder=__ (Hola) __ Nos gustaría recordarle que la factura __REF__ no parece haber sido pagada. Se adjunta una copia de la factura como recordatorio. __ONLINE_PAYMENT_TEXT_AND_URL__ __ (Atentamente) __ __USER_SIGNATURE__ +PredefinedMailContentSendProposal=__ (Hola) __ Encuentre la propuesta comercial __REF__ adjunta __ (Atentamente) __ __USER_SIGNATURE__ +PredefinedMailContentSendSupplierProposal=__ (Hola) __ Por favor encuentre la solicitud de precio __REF__ adjunta __ (Atentamente) __ __USER_SIGNATURE__ +PredefinedMailContentSendOrder=__ (Hola) __ Encuentre el pedido __REF__ adjunto __ (Atentamente) __ __USER_SIGNATURE__ +PredefinedMailContentSendSupplierOrder=__ (Hola) __ Encuentra nuestro pedido __REF__ adjunto __ (Atentamente) __ __USER_SIGNATURE__ +PredefinedMailContentSendSupplierInvoice=__ (Hola) __ Encuentre la factura __REF__ adjunta __ (Atentamente) __ __USER_SIGNATURE__ +PredefinedMailContentSendShipping=__ (Hola) __ Encuentra el envío __REF__ adjunto __ (Atentamente) __ __USER_SIGNATURE__ +PredefinedMailContentSendFichInter=__ (Hola) __ Encuentre la intervención __REF__ adjunta __ (Atentamente) __ __USER_SIGNATURE__ DemoDesc=Dolibarr es un ERP / CRM compacto que admite varios módulos comerciales. Una demostración que muestra todos los módulos no tiene sentido ya que este escenario nunca ocurre (varios cientos disponibles). Entonces, varios perfiles de demostración están disponibles. ChooseYourDemoProfilMore=... o crea tu propio perfil
(selección manual del módulo) DemoFundation=Administrar miembros de una fundación @@ -83,15 +111,35 @@ EnableGDLibraryDesc=Instale o habilite la biblioteca de GD en su instalación de ProfIdShortDesc=Prof Id %s es una información que depende del país de un tercero.
Por ejemplo, para el país %s, es el código%s. DolibarrDemo=Demo de Dolibarr ERP / CRM StatsByNumberOfUnits=Estadísticas para suma de cantidad de productos / servicios +StatsByNumberOfEntities=Estadísticas en número de entidades referidas (nº de factura, o pedido ...) NumberOfProposals=Número de propuestas +NumberOfCustomerOrders=Número de órdenes de venta NumberOfCustomerInvoices=Número de facturas de clientes +NumberOfSupplierProposals=Número de propuestas de proveedores +NumberOfSupplierOrders=Número de órdenes de compra +NumberOfSupplierInvoices=Número de facturas del vendedor NumberOfUnitsProposals=Número de unidades en las propuestas +NumberOfUnitsCustomerOrders=Número de unidades en órdenes de venta NumberOfUnitsCustomerInvoices=Número de unidades en las facturas de los clientes +NumberOfUnitsSupplierProposals=Número de unidades en las propuestas de los proveedores. +NumberOfUnitsSupplierOrders=Número de unidades en órdenes de compra +NumberOfUnitsSupplierInvoices=Número de unidades en las facturas de los proveedores. +EMailTextInterventionAddedContact=Se le ha asignado una nueva intervención %s. EMailTextInterventionValidated=La intervención %s ha sido validada. +EMailTextProposalValidated=La propuesta %s ha sido validada. +EMailTextProposalClosedSigned=La propuesta %s ha sido cerrada y firmada. +EMailTextOrderApproved=El pedido %s ha sido aprobado. +EMailTextOrderApprovedBy=La orden %s ha sido aprobada por %s. +EMailTextOrderRefused=La orden %s ha sido rechazada. +EMailTextOrderRefusedBy=La orden %s ha sido rechazada por %s. +EMailTextExpenseReportApproved=Informe de gastos %s ha sido aprobado. +EMailTextHolidayValidated=Deja la solicitud %s ha sido validado. +EMailTextHolidayApproved=Deja la solicitud %s ha sido aprobada. ImportedWithSet=Conjunto de datos de importación ResizeDesc=Ingrese un nuevo ancho O nueva altura. La relación se mantendrá durante el cambio de tamaño ... NewSizeAfterCropping=Nuevo tamaño después del recorte DefineNewAreaToPick=Defina una nueva área en la imagen para elegir (haga clic con el botón izquierdo en la imagen y luego arrastre hasta que llegue a la esquina opuesta) +CurrentInformationOnImage=Esta herramienta fue diseñada para ayudarte a redimensionar o recortar una imagen. Esta es la información sobre la imagen editada actual. YouReceiveMailBecauseOfNotification=Usted recibe este mensaje porque su correo electrónico ha sido agregado a la lista de objetivos para ser informado de eventos particulares en el software %s de %s. YouReceiveMailBecauseOfNotification2=Este evento es el siguiente: ThisIsListOfModules=Esta es una lista de módulos preseleccionados por este perfil de demostración (solo los módulos más comunes son visibles en esta demostración). Edítelo para tener una demostración más personalizada y haga clic en "Comenzar". @@ -114,9 +162,15 @@ SourcesRepository=Repositorio de fuentes PassEncoding=Codificación de contraseña PermissionsAdd=Permisos agregados YourPasswordMustHaveAtLeastXChars=Su contraseña debe tener al menos %s caracteres +MissingIds=IDs que faltan +ThirdPartyCreatedByEmailCollector=Tercero creado por el recolector de correo electrónico del correo electrónico MSGID %s +ContactCreatedByEmailCollector=Contacto / dirección creada por el recolector de correo electrónico del correo electrónico MSGID %s +ProjectCreatedByEmailCollector=Proyecto creado por el recolector de correo electrónico del correo electrónico MSGID %s +TicketCreatedByEmailCollector=Ticket creado por el recolector de correo electrónico del correo electrónico MSGID %s LibraryUsed=Biblioteca utilizada LibraryVersion=Versión de biblioteca NoExportableData=No se pueden exportar datos (no hay módulos con datos exportables cargados o sin permisos) WebsiteSetup=Configuración del sitio web del módulo +WEBSITE_IMAGEDesc=Ruta relativa de los medios de imagen. Puede mantenerlo vacío, ya que rara vez se utiliza (puede ser utilizado por contenido dinámico para mostrar una vista previa de una lista de publicaciones de blog). WEBSITE_KEYWORDS=Palabras clave LinesToImport=Líneas para importar diff --git a/htdocs/langs/es_CL/products.lang b/htdocs/langs/es_CL/products.lang index 5514d75f4c1..8ef82a6ff34 100644 --- a/htdocs/langs/es_CL/products.lang +++ b/htdocs/langs/es_CL/products.lang @@ -6,6 +6,8 @@ ProductDescriptionTranslated=Descripción traducida del producto ProductNoteTranslated=Nota traducida del producto ProductServiceCard=Tarjeta de Productos/Servicios ProductId=Identificación de producto / servicio +ProductVatMassChange=Actualización de IVA global +ProductVatMassChangeDesc=¡Esta herramienta actualiza la tasa de IVA definida en TODOS los productos y servicios! MassBarcodeInit=Iniciar de código de barras masivo MassBarcodeInitDesc=Esta página se puede utilizar para inicializar un código de barras en objetos que no tienen definido el código de barras. Verifique antes de que se complete la configuración del módulo de código de barras. ProductAccountancyBuyCode=Código de contabilidad (compra) @@ -21,6 +23,7 @@ ServicesOnSaleOnly=Servicios solo para venta ServicesOnPurchaseOnly=Servicios solo para compra ServicesNotOnSell=Servicios no en venta y no en compra ServicesOnSellAndOnBuy=Servicios para venta y compra +LastModifiedProductsAndServices=Últimos productos / servicios %s modificados LastRecordedProducts=Últimos %s productos grabados LastRecordedServices=Últimos %s servicios grabados NotOnSell=No en venta @@ -31,10 +34,14 @@ ProductStatusNotOnBuyShort=No en compra UpdateVAT=Actualizar IVA UpdateDefaultPrice=Actualizar el precio predeterminado UpdateLevelPrices=Actualizar precios para cada nivel +SellingPriceHT=Precio de venta (sin IVA) SellingPriceTTC=Precio de venta (IVA incluido) +SellingMinPriceTTC=Precio mínimo de venta (impuestos incluidos) +CostPriceDescription=Este campo de precio (sin impuestos) se puede usar para almacenar el monto promedio que este producto le cuesta a su empresa. Puede ser cualquier precio que usted mismo calcule, por ejemplo, a partir del precio de compra promedio más el costo promedio de producción y distribución. CostPriceUsage=Este valor podría usarse para calcular el margen. SoldAmount=Cantidad vendida PurchasedAmount=Cantidad comprada +MinPrice=Min. precio de venta EditSellingPriceLabel=Editar etiqueta de precio de venta CantBeLessThanMinPrice=El precio de venta no puede ser inferior al mínimo permitido para este producto (%s sin IVA). Este mensaje también puede aparecer si escribe un descuento demasiado importante. ErrorProductAlreadyExists=Un producto con referencia %s ya existe. @@ -42,15 +49,20 @@ ErrorProductBadRefOrLabel=Valor incorrecto para referencia o etiqueta. ErrorProductClone=Hubo un problema al intentar clonar el producto o servicio. ErrorPriceCantBeLowerThanMinPrice=Error, el precio no puede ser inferior al precio mínimo. Suppliers=Vendedores +SupplierRef=SKU del proveedor ProductsAndServicesArea=Área de productos y servicios ProductsArea=Área de producto ServicesArea=Área de servicios ListOfStockMovements=Lista de movimientos de stock +SupplierCard=Tarjeta de proveedor SetDefaultBarcodeType=Establecer el tipo de código de barras BarcodeValue=Valor de código de barras NoteNotVisibleOnBill=Nota (no visible en las facturas, cotizaciones, etc.) ServiceLimitedDuration=Si el producto es un servicio de duración limitada: +MultiPricesAbility=Múltiples segmentos de precios por producto / servicio (cada cliente está en un segmento de precios) MultiPricesNumPrices=Cantidad de precios +AssociatedProductsAbility=Activar productos virtuales (kits) +AssociatedProducts=Productos virtuales AssociatedProductsNumber=Cantidad de productos que componen este producto virtual ParentProductsNumber=Número de producto de embalaje principal ParentProducts=Productos para padres @@ -61,13 +73,23 @@ CategoryFilter=Filtro de categoría ProductToAddSearch=Buscar producto para agregar NoMatchFound=No se encontraron coincidencias ListOfProductsServices=Lista de productos / servicios +ProductAssociationList=Lista de productos / servicios que son componentes de este producto / kit virtual ProductParentList=Lista de productos/servicios virtuales con este producto como componente ErrorAssociationIsFatherOfThis=Uno de los productos seleccionados es el padre con el producto actual ConfirmDeleteProduct=¿Seguro que quieres eliminar este producto/servicio? ProductDeleted=Producto / Servicio "%s" borrado de la base de datos. ExportDataset_produit_1=Productos ConfirmDeleteProductLine=¿Estás seguro de que deseas eliminar esta línea de productos? +QtyMin=Min. Cantidad de compra +PriceQtyMin=Precio cantidad min. +PriceQtyMinCurrency=Precio (moneda) para esta cantidad. (sin descuento) +VATRateForSupplierProduct=Tasa de IVA (para este vendedor / producto) +DiscountQtyMin=Descuento para esta cantidad. +NoPriceDefinedForThisSupplier=Sin precio / cantidad definida para este vendedor / producto +NoSupplierPriceDefinedForThisProduct=Ningún precio / cantidad de vendedor definido para este producto +PredefinedServicesToSell=Servicio Predefinido PredefinedProductsAndServicesToSell=Productos / servicios predefinidos para vender +PredefinedProductsAndServicesToPurchase=Productos / servicios predefinidos para comprar. NotPredefinedProducts=Productos / servicios no predefinidos GenerateThumb=Generar imagen ServiceNb=Servicio #%s @@ -75,12 +97,16 @@ ListProductServiceByPopularity=Lista de productos/servicios por popularidad ListProductByPopularity=Lista de productos por popularidad ListServiceByPopularity=Lista de servicios por popularidad ConfirmCloneProduct=¿Está seguro que desea clonar el producto o servicio %s? +CloneContentProduct=Clona toda la información principal del producto / servicio. +CloneCompositionProduct=Clonar producto / servicio virtual CloneCombinationsProduct=Clonar variantes de productos ProductIsUsed=Este producto es usado NewRefForClone=Referencia de nuevo producto/servicio CustomerPrices=Precios de cliente SuppliersPrices=Precios del proveedor +SuppliersPricesOfProductsOrServices=Precios de venta (de productos o servicios). CustomCode=Código de Aduanas / Productos / HS +Nature=Naturaleza del producto (material / acabado) ProductCodeModel=Plantilla de referencia de producto ServiceCodeModel=Plantilla de referencia de servicio AlwaysUseNewPrice=Utilice siempre el precio actual del producto/servicio @@ -89,6 +115,7 @@ PriceByQuantity=Diferentes precios por cantidad DisablePriceByQty=Deshabilitar precios por cantidad PriceByQuantityRange=Rango Cantidad MultipriceRules=Reglas del segmento de precios +UseMultipriceRules=Utilice las reglas de segmento de precios (definidas en la configuración del módulo del producto) para calcular automáticamente los precios de todos los demás segmentos de acuerdo con el primer segmento KeepEmptyForAutoCalculation=Manténgase vacío para que esto se calcule automáticamente a partir del peso o volumen de productos Build=Producir ProductsMultiPrice=Productos y precios para cada segmento de precio @@ -99,15 +126,20 @@ Quarter1=1er. Trimestre Quarter2=2do. Trimestre Quarter3=3er. Trimestre Quarter4=4to. Trimestre +BarCodePrintsheet=Imprimir código de barras +PageToGenerateBarCodeSheets=Con esta herramienta, puede imprimir hojas de pegatinas de códigos de barras. Elija el formato de su página de etiqueta, el tipo de código de barras y el valor del código de barras, luego haga clic en el botón %s . NumberOfStickers=Número de stickers para imprimir en la página PrintsheetForOneBarCode=Imprime varios stickers para un código de barras BuildPageToPrint=Generar página para imprimir FillBarCodeTypeAndValueManually=Llenar el tipo y el valor del código de barras manualmente. FillBarCodeTypeAndValueFromProduct=Llenar el tipo y el valor del código de barras de un producto. FillBarCodeTypeAndValueFromThirdParty=Llenar el tipo y el valor del código de barras de un tercero. +DefinitionOfBarCodeForProductNotComplete=La definición del tipo o valor del código de barras no está completa para el producto %s. +DefinitionOfBarCodeForThirdpartyNotComplete=Definición del tipo o valor del código de barras no completo para terceros %s. ResetBarcodeForAllRecords=Defina el valor del código de barras para todos los registros (esto también restablecerá el valor del código de barras ya definido con los nuevos valores) 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 @@ -115,11 +147,15 @@ MinimumPriceLimit=El precio mínimo no puede ser inferior a %s PriceExpressionSelected=Expresión de precio seleccionado PriceExpressionEditorHelp1="precio = 2 + 2" o "2 + 2" para establecer el precio. Utilizar ; para separar expresiones PriceExpressionEditorHelp2=Puede acceder a ExtraFields con variables como #extrafield_myextrafieldkey # y variables globales con #global_mycode # +PriceExpressionEditorHelp3=Tanto en el precio del producto / servicio como en el de los proveedores, existen estas variables disponibles:
# tva_tx # # localtax1_tx # # localtax2_tx # # peso # # longitud # # superficie # # precio_min # +PriceExpressionEditorHelp4=Solo en el precio del producto / servicio: # supplier_min_price #
Solo en precios de proveedores: # supplier_quantity # y # supplier_tva_tx # PriceMode=Modo de precio DefaultPrice=Precio predeterminado ComposedProductIncDecStock=Aumentar / Disminuir el stock al cambiar producto padre +ComposedProduct=Productos infantiles MinCustomerPrice=Precio mínimo de venta DynamicPriceConfiguration=Configuración dinámica de precios +DynamicPriceDesc=Puede definir fórmulas matemáticas para calcular los precios de Cliente o Proveedor. Tales fórmulas pueden usar todos los operadores matemáticos, algunas constantes y variables. Aquí puede definir las variables que desea utilizar. Si la variable necesita una actualización automática, puede definir la URL externa para permitir que Dolibarr actualice el valor automáticamente. AddVariable=Agregar variable AddUpdater=Agregar actualización VariableToUpdate=Variable para actualizar @@ -136,6 +172,7 @@ IncludingProductWithTag=Incluye producto / servicio con etiqueta DefaultPriceRealPriceMayDependOnCustomer=El precio predeterminado, el precio real puede depender del cliente NbOfQtyInProposals=Cantidad en propuestas ClinkOnALinkOfColumn=Haga clic en un enlace de la columna %s para obtener una vista detallada ... +ProductsOrServicesTranslations=Traducciones de productos / servicios TranslatedLabel=Etiqueta traducida TranslatedDescription=Descripción traducida TranslatedNote=Notas traducidas @@ -144,6 +181,8 @@ VolumeUnits=Unidad de volumen SizeUnits=Unidad de tamaño ConfirmDeleteProductBuyPrice=¿Estás seguro de que deseas eliminar este precio de compra? SubProduct=Sub producto +UseProductFournDesc=Agregue una función para definir las descripciones de los productos definidos por los proveedores además de las descripciones para los clientes. +ProductSupplierDescription=Descripción del vendedor para el producto. ProductAttributeName=Atributo de variante %s ProductAttributeDeleteDialog=¿Estás seguro de que deseas eliminar este atributo? Todos los valores serán eliminados ProductAttributeValueDeleteDialog=¿Estás seguro de que deseas eliminar el valor "%s" con la referencia "%s" de este atributo? @@ -162,9 +201,15 @@ TooMuchCombinationsWarning=Generar muchas variantes puede dar como resultado una DoNotRemovePreviousCombinations=No eliminar variantes anteriores UsePercentageVariations=Usar variaciones porcentuales ErrorDeletingGeneratedProducts=Hubo un error al intentar eliminar las variantes de productos existentes +NbOfDifferentValues=No. de valores diferentes +NbProducts=No. de productos ParentProduct=Producto principal HideChildProducts=Ocultar productos variantes +ShowChildProducts=Mostrar productos variantes +NoEditVariants=Vaya a la tarjeta del producto principal y edite el impacto del precio de las variantes en la pestaña de variantes ConfirmCloneProductCombinations=¿Le gustaría copiar todas las variantes del producto al otro producto principal con la referencia dada? CloneDestinationReference=Referencia del producto de destino ErrorCopyProductCombinations=Hubo un error al copiar las variantes del producto ErrorDestinationProductNotFound=Producto de destino no encontrado +ActionAvailableOnVariantProductOnly=Acción solo disponible en la variante de producto. +ProductsPricePerCustomer=Precios de producto por cliente. diff --git a/htdocs/langs/es_CL/projects.lang b/htdocs/langs/es_CL/projects.lang index 7d7fa48df2e..228b0ad6dac 100644 --- a/htdocs/langs/es_CL/projects.lang +++ b/htdocs/langs/es_CL/projects.lang @@ -4,6 +4,7 @@ ProjectLabel=Etiqueta del proyecto ProjectsArea=Área de proyectos SharedProject=Todos PrivateProject=Contactos del proyecto +ProjectsImContactFor=Proyectos para que soy explícitamente un contacto AllAllowedProjects=Todo el proyecto que puedo leer (mío + público) MyProjectsDesc=Esta vista está limitada a los proyectos para los que es contacto ProjectsPublicDesc=Esta vista presenta todos los proyectos que puede leer. @@ -20,15 +21,21 @@ OnlyYourTaskAreVisible=Solo las tareas asignadas a ti son visibles. Asigna la ta ProjectCategories=Etiquetas / categorías de proyecto ConfirmDeleteAProject=¿Seguro que quieres eliminar este proyecto? ConfirmDeleteATask=¿Seguro que quieres eliminar esta tarea? +OpportunitiesStatusForOpenedProjects=Lleva cantidad de proyectos abiertos por estado. +OpportunitiesStatusForProjects=Lleva cantidad de proyectos por estado. ShowProject=Mostrar proyecto SetProject=Establecer proyecto NoProject=Ningún proyecto definido o propiedad TimeSpentByYou=Tiempo pasado por ti TimeSpentByUser=Tiempo dedicado por el usuario TimesSpent=Tiempo dedicado +TaskId=ID de tarea +RefTask=Tarea ref. +LabelTask=Etiqueta de tarea TaskTimeSpent=Tiempo dedicado a tareas NewTimeSpent=Tiempo dedicado BillTime=Bill el tiempo pasado +BillTimeShort=Tiempo de facturación TaskDateStart=Fecha de inicio de la tarea TaskDateEnd=Fecha de finalización de tarea TaskDescription=Descripción de la tarea @@ -44,6 +51,20 @@ ListOfTasks=Lista de tareas GoToListOfTimeConsumed=Ir a la lista de tiempo consumido GoToListOfTasks=Ir a la lista de tareas GoToGanttView=Ve a la vista de Gantt +ListProposalsAssociatedProject=Listado de las propuestas comerciales relacionadas con el proyecto. +ListOrdersAssociatedProject=Lista de pedidos relacionados con el proyecto. +ListInvoicesAssociatedProject=Listado de facturas de clientes relacionadas con el proyecto. +ListPredefinedInvoicesAssociatedProject=Lista de facturas de plantillas de clientes relacionadas con el proyecto. +ListSupplierOrdersAssociatedProject=Listado de órdenes de compra relacionadas con el proyecto. +ListSupplierInvoicesAssociatedProject=Listado de facturas de proveedores relacionadas con el proyecto. +ListContractAssociatedProject=Listado de contratos relacionados con el proyecto. +ListShippingAssociatedProject=Listado de envíos relacionados con el proyecto. +ListFichinterAssociatedProject=Listado de intervenciones relacionadas con el proyecto. +ListExpenseReportsAssociatedProject=Listado de informes de gastos relacionados con el proyecto. +ListDonationsAssociatedProject=Listado de donaciones relacionadas con el proyecto. +ListVariousPaymentsAssociatedProject=Lista de pagos varios relacionados con el proyecto. +ListSalariesAssociatedProject=Listado de pagos de salarios relacionados con el proyecto. +ListActionsAssociatedProject=Listado de eventos relacionados con el proyecto. ListTaskTimeUserProject=Lista de tiempo consumido en las tareas del proyecto ListTaskTimeForTask=Lista de tiempo consumido en la tarea ActivityOnProjectToday=Actividad en proyecto hoy @@ -60,11 +81,13 @@ ConfirmCloseAProject=¿Seguro que quieres cerrar este proyecto? AlsoCloseAProject=También cierre el proyecto (manténgalo abierto si todavía necesita seguir tareas de producción en él) ReOpenAProject=Proyecto abierto ConfirmReOpenAProject=¿Estás seguro de que quieres volver a abrir este proyecto? +ProjectContact=Contactos de proyecto ActionsOnProject=Eventos en el proyecto YouAreNotContactOfProject=No eres un contacto de este proyecto privado DeleteATimeSpent=Eliminar el tiempo pasado ConfirmDeleteATimeSpent=¿Estás seguro de que deseas eliminar este tiempo gastado? ShowMyTasksOnly=Ver solo las tareas asignadas a mí +TaskRessourceLinks=Contactos de tarea NoTasks=No hay tareas para este proyecto LinkedToAnotherCompany=Vinculado a otro tercero TaskIsNotAssignedToUser=Tarea no asignada al usuario. Use el botón '%s' para asignar la tarea ahora. @@ -83,6 +106,14 @@ ErrorShiftTaskDate=Imposible cambiar la fecha de la tarea según la fecha de ini TaskCreatedInDolibarr=Tarea %s creada TaskModifiedInDolibarr=Tarea %s modificada TaskDeletedInDolibarr=Tarea %s eliminada +OpportunityStatus=Estado de plomo +OpportunityStatusShort=Estado de plomo +OpportunityProbability=Probabilidad de plomo +OpportunityProbabilityShort=Probab plomo. +OpportunityAmount=Cantidad de plomo +OpportunityAmountShort=Cantidad de plomo +OpportunityAmountAverageShort=Cantidad de plomo promedio +OpportunityAmountWeigthedShort=Cantidad de plomo ponderada WonLostExcluded=Ganado/Perdido excluido TypeContact_project_internal_PROJECTLEADER=Líder del proyecto TypeContact_project_external_PROJECTLEADER=Líder del proyecto @@ -94,26 +125,50 @@ TypeContact_project_task_internal_TASKCONTRIBUTOR=Colaborador TypeContact_project_task_external_TASKCONTRIBUTOR=Colaborador SelectElement=Seleccionar elemento AddElement=Enlace al elemento +DocumentModelBeluga=Plantilla de documento de proyecto para la descripción de objetos vinculados +DocumentModelBaleine=Plantilla de documento de proyecto para tareas +DocumentModelTimeSpent=Plantilla de informe de proyecto para el tiempo empleado. PlannedWorkload=Carga de trabajo planificada ProjectReferers=Artículos relacionados ProjectMustBeValidatedFirst=El proyecto debe ser validado primero FirstAddRessourceToAllocateTime=Asignar un recurso de usuario a la tarea para asignar tiempo TimeAlreadyRecorded=Este es el tiempo que ya se ha registrado para esta tarea / día y el usuario %s +NoUserAssignedToTheProject=No hay usuarios asignados a este proyecto. TimeSpentBy=Tiempo consumido por AssignTaskToMe=Asignarme una tarea AssignTaskToUser=Asignar tarea a %s SelectTaskToAssign=Seleccionar tarea para asignar ... +ManageTasks=Usar proyectos para seguir tareas y / o informar el tiempo empleado (hojas de tiempo) ManageOpportunitiesStatus=Usa proyectos para seguir leads / opportinuties +ProjectNbProjectByMonth=Nº de proyectos creados por mes. +ProjectNbTaskByMonth=Nº de tareas creadas por mes. +ProjectOppAmountOfProjectsByMonth=Cantidad de clientes potenciales por mes +ProjectWeightedOppAmountOfProjectsByMonth=Cantidad ponderada de clientes potenciales por mes +ProjectOpenedProjectByOppStatus=Abrir proyecto / liderar por estado de plomo ProjectsStatistics=Estadísticas de proyectos / leads TasksStatistics=Estadísticas sobre proyectos/tareas principales TaskAssignedToEnterTime=Tarea asignada Ingresar el tiempo en esta tarea debería ser posible. IdTaskTime=Tiempo de la tarea de identificación +YouCanCompleteRef=Si desea completar la referencia con algún sufijo, se recomienda agregar un carácter para separarlo, por lo que la numeración automática seguirá funcionando correctamente para los próximos proyectos. Por ejemplo %s-MYSUFFIX OpenedProjectsByThirdparties=Proyectos abiertos por terceros +OnlyOpportunitiesShort=Solo lleva +OpenedOpportunitiesShort=Conductores abiertos +NotOpenedOpportunitiesShort=No es una ventaja abierta +NotAnOpportunityShort=No es una pista +OpportunityTotalAmount=Cantidad total de clientes potenciales +OpportunityPonderatedAmount=Cantidad ponderada de clientes potenciales +OpportunityPonderatedAmountDesc=Cantidad de leads ponderada con probabilidad OppStatusQUAL=Calificación OppStatusPROPO=Cotización +AllowToLinkFromOtherCompany=Permite vincular proyectos de otra empresa.

Valores soportados:
- Mantener vacío: puede vincular cualquier proyecto de la empresa (por defecto)
- "todos": puede vincular cualquier proyecto, incluso proyectos de otras compañías
- Una lista de identificadores de terceros separados por comas: puede vincular todos los proyectos de estos terceros (Ejemplo: 123,4795,53)
LatestProjects=Últimos %s proyectos LatestModifiedProjects=Últimos proyectos modificados %s +NoAssignedTasks=No se encontraron tareas asignadas (asigne proyectos / tareas al usuario actual desde el cuadro de selección superior para ingresar el tiempo) AllowCommentOnProject=Permitir comentarios de los usuarios sobre los proyectos RecordsClosed=%s proyecto (s) cerrado SendProjectRef=Proyecto de información %s +ModuleSalaryToDefineHourlyRateMustBeEnabled=El módulo 'Salarios' debe estar habilitado para definir la tarifa por hora de los empleados para que el tiempo empleado se valore +NewTaskRefSuggested=Referencia de tarea ya utilizada, se requiere una nueva referencia de tarea TimeSpentForInvoice=Tiempo dedicado +InvoiceGeneratedFromTimeSpent=La factura %s se ha generado desde el tiempo invertido en el proyecto +ProjectBillTimeDescription=Verifique si ingresa la hoja de tiempo en las tareas del proyecto Y planea generar facturas de la hoja de tiempo para facturar al cliente del proyecto (no verifique si planea crear una factura que no esté basada en las hojas de tiempo ingresadas). diff --git a/htdocs/langs/es_CL/propal.lang b/htdocs/langs/es_CL/propal.lang index 1ab2a26f16f..de37c77b039 100644 --- a/htdocs/langs/es_CL/propal.lang +++ b/htdocs/langs/es_CL/propal.lang @@ -43,7 +43,9 @@ ErrorPropalNotFound=%s cotizaciones no encontradas AddToDraftProposals=Añadir a cotización borrador NoDraftProposals=Sin cotizaciones borrador CopyPropalFrom=Crear cotización por copia de una existente +CreateEmptyPropal=Crear propuesta comercial vacía o desde lista de productos / servicios. DefaultProposalDurationValidity=Validar duración de cotización (en días) +UseCustomerContactAsPropalRecipientIfExist=Utilice el contacto / dirección con el tipo 'Propuesta de seguimiento de contacto' si se define en lugar de la dirección de un tercero como dirección del destinatario de la propuesta ConfirmClonePropal=¿Está seguro de que desea clonar la propuesta comercial %s? ConfirmReOpenProp=¿Está seguro de que desea abrir de nuevo la propuesta comercial %s? ProposalsAndProposalsLines=Cotizaciones a clientes y líneas de cotizaciones @@ -63,3 +65,4 @@ DefaultModelPropalCreate=Creación de modelo por defecto DefaultModelPropalToBill=Modelo por defecto al cerrar una cotización (a facturar) DefaultModelPropalClosed=Modelo por defecto al cerrar una cotización (no facturado) ProposalCustomerSignature=Aprobación, timbre, fecha y firma +ProposalsStatisticsSuppliers=Estadísticas de propuestas de proveedores. diff --git a/htdocs/langs/es_CL/receptions.lang b/htdocs/langs/es_CL/receptions.lang index b2805eae1e4..7413f516204 100644 --- a/htdocs/langs/es_CL/receptions.lang +++ b/htdocs/langs/es_CL/receptions.lang @@ -1,4 +1,32 @@ # Dolibarr language file - Source file is en_US - receptions +RefReception=Árbitro. recepción +Reception=Recepción +ReceptionsArea=Area de recepciones +ListOfReceptions=Lista de recepciones +LastReceptions=Últimas recepciones de %s +StatisticsOfReceptions=Estadisticas para recepciones. +NumberOfReceptionsByMonth=Número de recepciones por mes. +ReceptionCard=Tarjeta de recepcion +NewReception=Nueva recepcion +CreateReception=Crear recepcion +QtyInOtherReceptions=Cantidad en otras recepciones +OtherReceptionsForSameOrder=Otras recepciones para este pedido. +ReceptionsAndReceivingForSameOrder=Recepciones y recibos por este pedido. +ReceptionsToValidate=Recepciones para validar StatusReceptionCanceled=Cancelado +StatusReceptionValidated=Validado (productos a enviar o ya enviados) StatusReceptionProcessed=Procesada StatusReceptionProcessedShort=Procesada +ConfirmDeleteReception=¿Estás seguro de que deseas eliminar esta recepción? +ConfirmValidateReception=¿Está seguro de que desea validar esta recepción con la referencia %s ? +ConfirmCancelReception=¿Seguro que quieres cancelar esta recepción? +StatsOnReceptionsOnlyValidated=Estadísticas realizadas en recepciones solo validadas. La fecha utilizada es la fecha de validación de la recepción (la fecha de entrega prevista no siempre se conoce). +SendReceptionByEMail=Enviar recepción por correo electrónico +SendReceptionRef=Presentación de la recepción %s +ActionsOnReception=Eventos en recepción +ReceptionCreationIsDoneFromOrder=Por el momento, la creación de una nueva recepción se realiza desde la tarjeta de pedido. +ProductQtyInReceptionAlreadySent=Cantidad de producto de pedido abierto ya enviado +ProductQtyInSuppliersReceptionAlreadyRecevied=Cantidad de producto de pedido de proveedor abierto ya recibido +ValidateOrderFirstBeforeReception=Primero debe validar el pedido antes de poder hacer recepciones. +ReceptionsNumberingModules=Módulo de numeración para recepciones. +ReceptionsReceiptModel=Plantillas de documentos para recepciones. diff --git a/htdocs/langs/es_CL/stocks.lang b/htdocs/langs/es_CL/stocks.lang index 3ec3de75e9f..4e9f9b90191 100644 --- a/htdocs/langs/es_CL/stocks.lang +++ b/htdocs/langs/es_CL/stocks.lang @@ -1,7 +1,7 @@ # Dolibarr language file - Source file is en_US - stocks WarehouseCard=Tarjeta de almacenamiento ParentWarehouse=Almacén principal -NewWarehouse=Nuevo almacén/área de stock +NewWarehouse=Nuevo almacén / ubicación de stock WarehouseEdit=Modificar el almacén WarehouseSource=Almacén de origen WarehouseSourceNotDefined=Sin almacén definido @@ -18,6 +18,7 @@ MovementId=Identificación del movimiento StockMovementForId=ID de movimiento %d ListMouvementStockProject=Lista de movimientos de stock asociados al proyecto StocksArea=Área de almacenes +IncludeAlsoDraftOrders=Incluir también órdenes de giro. Location=Ubicación LocationSummary=Nombre corto NumberOfDifferentProducts=Cantidad de productos diferentes @@ -34,30 +35,31 @@ StockLowerThanLimit=Stock inferior al límite de alerta (%s) PMPValue=Precio promedio ponderado EnhancedValueOfWarehouses=Valor de las bodegas UserWarehouseAutoCreate=Crear un almacén de usuario automáticamente al crear un usuario -AllowAddLimitStockByWarehouse=Permitir agregar límite y stock deseado por pareja (producto, almacén) en lugar de por producto -IndependantSubProductStock=Las existencias de productos y subproductos son independientes +AllowAddLimitStockByWarehouse=Administre también los valores para el stock mínimo y deseado por emparejamiento (producto-almacén) además de los valores por producto +IndependantSubProductStock=El stock de producto y el stock de subproducto son independientes. QtyDispatched=Cantidad despachada QtyDispatchedShort=Cantidad despachada QtyToDispatchShort=Cantidad a despachar OrderDispatch=Recibos de artículos -RuleForStockManagementDecrease=Regla para la disminución automática de la gestión de stock (la disminución manual siempre es posible, incluso si se activa una regla de disminución automática) -RuleForStockManagementIncrease=Regla para el aumento automático de la gestión de existencias (el aumento manual siempre es posible, incluso si se activa una regla de aumento automático) -DeStockOnBill=Disminuir las existencias reales en las facturas de clientes / validación de notas de crédito -DeStockOnValidateOrder=Disminuir las existencias reales en la validación de pedidos de clientes +RuleForStockManagementDecrease=Elija Regla para la reducción automática de existencias (siempre es posible una reducción manual, incluso si se activa una regla de disminución automática) +RuleForStockManagementIncrease=Elija la regla para el aumento automático de existencias (siempre es posible un aumento manual, incluso si se activa una regla de aumento automático) +DeStockOnBill=Disminuir las existencias reales en la validación de la factura del cliente / nota de crédito +DeStockOnValidateOrder=Disminuir las existencias reales en la validación de la orden de venta. DeStockOnShipment=Disminuir las existencias reales en la validación de envío -DeStockOnShipmentOnClosing=Disminuir las existencias reales en la clasificación de envío cerrado -ReStockOnBill=Aumentar el stock real en la validación de facturas/notas de crédito de proveedores -ReStockOnDispatchOrder=Aumente las existencias reales en el despacho manual a los almacenes, después de que el proveedor ordene la recepción de los bienes +DeStockOnShipmentOnClosing=Disminuir las existencias reales cuando el envío se establece en cerrado +ReStockOnBill=Aumentar las existencias reales en la validación de la factura del proveedor / nota de crédito +ReStockOnValidateOrder=Aumentar las existencias reales en la aprobación de la orden de compra +ReStockOnDispatchOrder=Aumente las existencias reales en el envío manual al almacén, después del pedido de compra de las mercancías. OrderStatusNotReadyToDispatch=El pedido todavía no tiene o no tiene un estado que permite el despacho de productos en almacenes de existencias. StockDiffPhysicTeoric=Explicación de la diferencia entre stock físico y virtual NoPredefinedProductToDispatch=No hay productos predefinidos para este objeto. Por lo tanto, no se requiere envío en stock. DispatchVerb=Envío StockLimit=Límite de existencias para alerta StockLimitDesc=(vacío) significa que no hay advertencia.
0 se puede utilizar como advertencia tan pronto como el stock esté vacío. -PhysicalStock=Stock fisico -RealStockDesc=Las existencias físicas o reales son las existencias que tiene actualmente en sus almacenes / emplazamientos internos. -RealStockWillAutomaticallyWhen=El stock real cambiará automáticamente de acuerdo con estas reglas (consulte la configuración del módulo de stock para cambiar esto): -VirtualStockDesc=Las existencias virtuales son las acciones que recibirá una vez que todas las acciones pendientes pendientes que afecten a las existencias se cerrarán (orden de proveedor recibida, pedido del cliente enviado, ...) +PhysicalStock=Inventario FISICO +RealStockDesc=El stock físico / real es el stock actualmente en los almacenes. +RealStockWillAutomaticallyWhen=El stock real se modificará de acuerdo con esta regla (como se define en el módulo de Stock): +VirtualStockDesc=El stock virtual es el stock calculado disponible una vez que se cierran todas las acciones abiertas / pendientes (que afectan a las acciones) (pedidos recibidos, pedidos de ventas enviados, etc.) IdWarehouse=Id almacén LieuWareHouse=Almacén de localización WarehousesAndProductsBatchDetail=Almacenes y productos (con detalle por lote / serie) @@ -73,7 +75,6 @@ ThisWarehouseIsPersonalStock=Este almacén representa stock personal de %s %s SelectWarehouseForStockDecrease=Elija el almacén para usar para la disminución de stock SelectWarehouseForStockIncrease=Elija un almacén para aumentar las existencias NoStockAction=Stock sin movimientos -DesiredStock=Stock óptima deseado DesiredStockDesc=Esta cantidad de stock será el valor utilizado para rellenar el stock mediante la función de reposición. StockToBuy=Ordenar Replenishment=Reposición @@ -88,8 +89,8 @@ SelectProductWithNotNullQty=Seleccione al menos un producto con una cantidad no AlertOnly=Solo alertas WarehouseForStockDecrease=El almacén %s se usará para la disminución de stock WarehouseForStockIncrease=El almacén %s se usará para aumentar las existencias -ReplenishmentStatusDesc=Esta es una lista de todos los productos con un stock inferior al stock deseado (o menor que el valor de alerta si está marcada la casilla "solo alerta"). Con la casilla de verificación, puede crear pedidos a proveedores para completar la diferencia. -ReplenishmentOrdersDesc=Esta es una lista de todos los pedidos a proveedores abiertos, incluidos los productos predefinidos. Solo se muestran pedidos abiertos con productos predefinidos, por lo que los pedidos que pueden afectar a las existencias son visibles aquí. +ReplenishmentStatusDesc=Esta es una lista de todos los productos con un stock inferior al stock deseado (o inferior al valor de alerta si la casilla de verificación "solo alerta" está marcada). Usando la casilla de verificación, puede crear órdenes de compra para llenar la diferencia. +ReplenishmentOrdersDesc=Esta es una lista de todas las órdenes de compra abiertas que incluyen productos predefinidos. Solo las órdenes abiertas con productos predefinidos, por lo que las órdenes que pueden afectar a las existencias, son visibles aquí. Replenishments=Reposición NbOfProductBeforePeriod=Cantidad de producto %s en stock antes del período seleccionado (<%s) NbOfProductAfterPeriod=Cantidad de producto %s en stock después del período seleccionado (> %s) @@ -99,19 +100,19 @@ RecordMovement=Transferencia de registros ReceivingForSameOrder=Recibos por esta orden StockMovementRecorded=Movimientos de stock grabados RuleForStockAvailability=Reglas sobre requisitos de stock -StockMustBeEnoughForInvoice=El nivel de stock debe ser suficiente para agregar producto / servicio a la factura (se realiza un control en el stock real actual al agregar una línea en la factura, cualquiera que sea la regla para el cambio automático de stock) -StockMustBeEnoughForOrder=El nivel de stock debe ser suficiente para agregar producto / servicio al pedido (la verificación se realiza sobre el stock real actual al agregar una línea al orden, cualquiera que sea la regla para el cambio automático de stock) -StockMustBeEnoughForShipment=El nivel de stock debe ser suficiente para agregar producto / servicio al envío (el control se realiza sobre el stock real actual al agregar una línea al envío, cualquiera que sea la regla para el cambio automático de stock) +StockMustBeEnoughForInvoice=El nivel de stock debe ser suficiente para agregar un producto / servicio a la factura (el cheque se realiza en el stock real actual al agregar una línea en la factura, independientemente de la regla para el cambio automático de stock) +StockMustBeEnoughForOrder=El nivel de stock debe ser suficiente para agregar el producto / servicio al pedido (la verificación se realiza en el stock real actual al agregar una línea en el pedido, cualquiera que sea la regla para el cambio automático de stock) +StockMustBeEnoughForShipment=El nivel de stock debe ser suficiente para agregar el producto / servicio al envío (la verificación se realiza en el stock real actual al agregar una línea en el envío, independientemente de la regla para el cambio automático de stock) MovementLabel=Etiqueta de movimiento InventoryCode=Código de movimiento o inventario WarehouseAllowNegativeTransfer=Stock puede ser negativo qtyToTranferIsNotEnough=No tiene stock suficiente de su almacén de origen y su configuración no permite existencias negativas. MovementCorrectStock=Corrección de Stock para el producto %s InventoryCodeShort=Inv./Mov. código -NoPendingReceptionOnSupplierOrder=No hay recepción pendiente debido a la orden abierta a proveedor +NoPendingReceptionOnSupplierOrder=No hay recepción pendiente debido a la orden de compra abierta. ThisSerialAlreadyExistWithDifferentDate=Este número de lote/serie (%s) ya existe pero con fecha de consumo o de vencimiento diferente (se encontró %s pero ingresó %s). OpenInternal=Abierto solo para acciones internas -UseDispatchStatus=Utilice un estado de envío (aprobación / rechazo) para las líneas de productos en la recepción de pedidos del proveedor +UseDispatchStatus=Utilice un estado de envío (aprobar / rechazar) para las líneas de productos en la recepción de la orden de compra OptionMULTIPRICESIsOn=La opción "varios precios por segmento" está activada. Significa que un producto tiene varios precios de venta por lo que el valor de venta no se puede calcular ProductStockWarehouseCreated=Límite de stock para alerta y stock óptimo deseado correctamente creado ProductStockWarehouseUpdated=Límite de stock para alerta y stock óptimo deseado correctamente actualizado @@ -128,9 +129,9 @@ inventoryErrorQtyAdd=Error: una cantidad es menor que cero inventoryWarningProductAlreadyExists=Este producto ya está en la lista SelectCategory=Filtro de categoría SelectFournisseur=Filtro de proveedor -INVENTORY_DISABLE_VIRTUAL=Permitir que no se destockone producto infantil de un kit en inventario +INVENTORY_DISABLE_VIRTUAL=Producto virtual (kit): no disminuir el stock de un producto infantil INVENTORY_USE_MIN_PA_IF_NO_LAST_PA=Utilice el precio de compra si no se puede encontrar el último precio de compra -INVENTORY_USE_INVENTORY_DATE_FROM_DATEMVT=Movimiento de stock tiene fecha de inventario +INVENTORY_USE_INVENTORY_DATE_FROM_DATEMVT=El movimiento de stock tiene fecha de inventario. inventoryChangePMPPermission=Permitir cambiar el valor de PMP para un producto OnlyProdsInStock=No agregue productos sin stock TheoricalQty=Cantidad teórica @@ -140,10 +141,14 @@ RealValue=Valor real RegulatedQty=Cantidad regulada AddInventoryProduct=Agregar producto al inventario FlushInventory=Inventario sobrante -ConfirmFlushInventory=¿Confirmas esta acción? +ConfirmFlushInventory=¿Confirma usted esta acción? InventoryFlushed=Inventario eliminado ExitEditMode=Edición de salida inventoryDeleteLine=Eliminar línea RegulateStock=Regular el stock -StockSupportServices=Servicios de soporte de gestión de stock -StockSupportServicesDesc=Por defecto, puede almacenar solo productos con el tipo "producto". Si está activado, y si el servicio de módulo está activado, también puede almacenar un producto con el tipo "servicio" +StockSupportServices=Servicios de gestión de stock. +StockSupportServicesDesc=Por defecto, puede almacenar solo productos del tipo "producto". También puede almacenar un producto de tipo "servicio" si los Servicios del módulo y esta opción están habilitados. +StockIncreaseAfterCorrectTransfer=Incremento por corrección / transferencia. +StockDecreaseAfterCorrectTransfer=Disminución por corrección / transferencia +StockIncrease=Aumento de existencias +StockDecrease=Disminución de existencias diff --git a/htdocs/langs/es_CL/supplier_proposal.lang b/htdocs/langs/es_CL/supplier_proposal.lang index 0c2537dd99d..649d19042a4 100644 --- a/htdocs/langs/es_CL/supplier_proposal.lang +++ b/htdocs/langs/es_CL/supplier_proposal.lang @@ -1,5 +1,6 @@ # Dolibarr language file - Source file is en_US - supplier_proposal SupplierProposal=Propuestas comerciales del vendedor +supplier_proposalDESC=Gestionar solicitudes de precios a proveedores. SupplierProposalNew=Nueva solicitud de precio CommRequest=Precio requerido CommRequests=Peticiones de precio diff --git a/htdocs/langs/es_CL/ticket.lang b/htdocs/langs/es_CL/ticket.lang index 39e2e1b15ba..288993b4520 100644 --- a/htdocs/langs/es_CL/ticket.lang +++ b/htdocs/langs/es_CL/ticket.lang @@ -3,6 +3,10 @@ Module56000Name=Entradas Module56000Desc=Sistema de tickets para gestión de problemas o solicitudes Permission56001=Ver entradas Permission56002=Modificar entradas +Permission56005=Ver boletos de todos los terceros (no es efectivo para usuarios externos, siempre debe limitarse al tercero del que dependen) +TicketDictType=Boleto - Tipos +TicketDictCategory=Boleto - Grupos +TicketDictSeverity=Ticket - Severidades TicketTypeShortINCIDENT=Solicitud de asistencia ErrorBadEmailAddress=Campo '%s' incorrecto MenuTicketMyAssign=Mis boletos @@ -11,21 +15,27 @@ MenuListNonClosed=Boletos abiertos TypeContact_ticket_internal_CONTRIBUTOR=Colaborador TypeContact_ticket_external_SUPPORTCLI=Contacto con el cliente / seguimiento de incidentes OriginEmail=Fuente de correo electrónico +Notify_TICKET_SENTBYMAIL=Enviar mensaje de boleto por correo electrónico NotRead=No leer Read=Leer +NeedMoreInformation=Esperando informacion Answered=Contestada Waiting=Esperando Type=Tipo MailToSendTicketMessage=Para enviar un correo electrónico desde un mensaje de ticket +TicketSetupDictionaries=El tipo de ticket, severidad y códigos analíticos son configurables desde los diccionarios. TicketParamMail=Configuración de correo electrónico TicketEmailNotificationFrom=Correo electrónico de notificación de TicketEmailNotificationFromHelp=Utilizado en la respuesta del mensaje del boleto por ejemplo TicketEmailNotificationTo=Notificaciones de correo electrónico a TicketEmailNotificationToHelp=Envíe notificaciones por correo electrónico a esta dirección. +TicketNewEmailBodyLabel=Mensaje de texto enviado después de crear un ticket. TicketNewEmailBodyHelp=El texto especificado aquí se insertará en el correo electrónico confirmando la creación de un nuevo ticket desde la interfaz pública. La información sobre la consulta del ticket se agrega automáticamente. TicketsEmailMustExist=Requerir una dirección de correo electrónico existente para crear un boleto TicketsEmailMustExistHelp=En la interfaz pública, la dirección de correo electrónico ya debe estar llena en la base de datos para crear un nuevo ticket. PublicInterface=Interfaz pública +TicketUrlPublicInterfaceLabelAdmin=URL alternativa para la interfaz pública +TicketUrlPublicInterfaceHelpAdmin=Es posible definir un alias para el servidor web y, por lo tanto, hacer que la interfaz pública esté disponible con otra URL (el servidor debe actuar como un proxy en esta nueva URL) TicketPublicInterfaceTextHome=Puede crear un ticket de soporte o visualizar existente a partir de su ticket de seguimiento de identificador. ExtraFieldsTicket=Atributos adicionales TicketCkEditorEmailNotActivated=El editor de HTML no está activado. Coloque el contenido FCKEDITOR_ENABLE_MAIL en 1 para obtenerlo. @@ -37,15 +47,21 @@ TicketsShowModuleLogoHelp=Habilite esta opción para ocultar el módulo de logot TicketsShowCompanyLogoHelp=Habilite esta opción para ocultar el logotipo de la empresa principal en las páginas de la interfaz pública TicketsEmailAlsoSendToMainAddress=También envíe notificaciones a la dirección de correo electrónico principal TicketsEmailAlsoSendToMainAddressHelp=Habilite esta opción para enviar un correo electrónico a la dirección "Correo electrónico de notificación de" (consulte la configuración a continuación) +TicketsLimitViewAssignedOnly=Restrinja la visualización a los tickets asignados al usuario actual (no es efectivo para usuarios externos, siempre debe limitarse al tercero del que dependen) TicketsLimitViewAssignedOnlyHelp=Solo las entradas asignadas al usuario actual serán visibles. No se aplica a un usuario con derechos de gestión de tickets. TicketsActivatePublicInterface=Activar la interfaz pública TicketsActivatePublicInterfaceHelp=La interfaz pública permite a los visitantes crear tickets. TicketsAutoAssignTicket=Asigna automáticamente al usuario que creó el ticket +TicketNotifyTiersAtCreation=Notificar a un tercero en la creación +TicketsDisableCustomerEmail=Deshabilite siempre los correos electrónicos cuando se crea un ticket desde la interfaz pública TicketsIndex=Ticket - hogar TicketList=Lista de entradas +TicketAssignedToMeInfos=Esta página muestra la lista de tickets creada por o asignada al usuario actual NoTicketsFound=No se encontró boleto +NoUnreadTicketsFound=No se encontraron entradas sin leer TicketViewAllTickets=Ver todos los boletos TicketStatByStatus=Entradas por estado +Ticket=Boleto TicketCard=Tarjeta de boleto CreateTicket=Crear boleto TicketsManagement=Gestión de entradas @@ -55,6 +71,7 @@ SeeTicket=Ver boleto TicketReadOn=Sigue leyendo TicketHistory=Historial de entradas TicketAssigned=Ticket ahora está asignado +TicketChangeCategory=Cambiar código analítico TicketChangeSeverity=Cambiar severidad TicketAddMessage=Añade un mensaje AddMessage=Añade un mensaje @@ -75,9 +92,12 @@ SendMessageByEmail=Enviar mensaje por correo electrónico ErrorMailRecipientIsEmptyForSendTicketMessage=El destinatario está vacío. Sin enviar correo electrónico TicketMessageMailIntroHelp=Este texto se agrega solo al comienzo del correo electrónico y no se guardará. TicketMessageMailIntroLabelAdmin=Introducción al mensaje cuando se envía un correo electrónico +TicketMessageMailIntroText=Hola,
Se envió una nueva respuesta en un ticket que contactaste. Aquí está el mensaje:
TicketMessageMailSignatureHelp=Este texto se agrega solo al final del correo electrónico y no se guardará. +TicketMessageMailSignatureText=

Sinceramente,

-

TicketMessageMailSignatureLabelAdmin=Firma del correo electrónico de respuesta TicketMessageHelp=Solo este texto se guardará en la lista de mensajes en la tarjeta de boletos. +TicketTimeToRead=Tiempo transcurrido antes de leer TicketContacts=Boleto de contactos TicketDocumentsLinked=Documentos vinculados al boleto ConfirmReOpenTicket=¿Confirma volver a abrir este ticket? @@ -85,10 +105,15 @@ TicketAssignedToYou=Boleto asignado TicketAssignedEmailBody=Se le ha asignado el ticket # %s por %s TicketEmailOriginIssuer=Emisor al origen de los boletos LinkToAContract=Enlace a un contrato +UnableToCreateInterIfNoSocid=No se puede crear una intervención cuando no se define un tercero TicketMailExchanges=Intercambios de correo TicketChangeStatus=Cambiar Estado +TicketConfirmChangeStatus=Confirme el cambio de estado: %s? TicketNotNotifyTiersAtCreate=No notificar a la compañía en crear NoLogForThisTicket=Aún no hay registro para este boleto +TicketLogPropertyChanged=Ticket %s modificado: clasificación de %s a %s +TicketLogClosedBy=Boleto %s cerrado por %s +TicketLogReopen=Boleto %s reabierto TicketSystem=Sistema de entradas ShowListTicketWithTrackId=Mostrar lista de tickets de la ID de la pista ShowTicketWithTrackId=Mostrar ticket desde ID de seguimiento @@ -99,16 +124,28 @@ TicketNewEmailSubject=Confirmación de creación de entradas TicketNewEmailBody=Este es un correo electrónico automático para confirmar que ha registrado un nuevo boleto. TicketNewEmailBodyCustomer=Este es un correo electrónico automático para confirmar que se acaba de crear un nuevo ticket en su cuenta. TicketNewEmailBodyInfosTicket=Información para monitorear el boleto +TicketNewEmailBodyInfosTrackId=Número de seguimiento de entradas: %s TicketNewEmailBodyInfosTrackUrl=Puede ver el progreso del ticket haciendo clic en el enlace de arriba. TicketEmailPleaseDoNotReplyToThisEmail=¡Por favor no responda directamente a este correo! Usa el enlace para responder a la interfaz. TicketPublicInfoCreateTicket=Este formulario le permite registrar un ticket de soporte en nuestro sistema de gestión. TicketPublicPleaseBeAccuratelyDescribe=Por favor describe con precisión el problema. Proporcione la mayor cantidad de información posible que nos permita identificar correctamente su solicitud. TicketPublicMsgViewLogIn=Ingrese la ID de seguimiento de boletos +TicketTrackId=ID de seguimiento público +OneOfTicketTrackId=Una de tus ID de seguimiento +ErrorTicketNotFound=¡No se encontró el ticket con el ID de seguimiento %s! Subject=Tema ViewTicket=Ver boleto ViewMyTicketList=Ver mi lista de boletos +ErrorEmailMustExistToCreateTicket=Error: la dirección de correo electrónico no se encuentra en nuestra base de datos TicketNewEmailSubjectAdmin=Nuevo boleto creado +TicketNewEmailBodyAdmin=

El ticket se acaba de crear con ID # %s, ver información:

SeeThisTicketIntomanagementInterface=Ver boleto en la interfaz de administración +ErrorEmailOrTrackingInvalid=Mal valor para el seguimiento de ID o correo electrónico +OldUser=Antiguo usuario +NumberOfTicketsByMonth=Número de entradas al mes +NbOfTickets=Número de entradas +TicketNotificationNumberEmailSent=Correo electrónico de notificación enviado: %s +ActionsOnTicket=Eventos en la entrada BoxLastTicketDescription=Últimas %s entradas creadas BoxLastTicketNoRecordedTickets=No hay entradas recientes sin leer BoxLastModifiedTicketDescription=Las últimas entradas modificadas %s diff --git a/htdocs/langs/es_CL/workflow.lang b/htdocs/langs/es_CL/workflow.lang index 9946bbcb13d..b1ea13c8a0b 100644 --- a/htdocs/langs/es_CL/workflow.lang +++ b/htdocs/langs/es_CL/workflow.lang @@ -1,15 +1,14 @@ # Dolibarr language file - Source file is en_US - workflow WorkflowSetup=Configuración del módulo de flujo de trabajo -WorkflowDesc=Este módulo está diseñado para modificar el comportamiento de las acciones automáticas en la aplicación. Por defecto, el flujo de trabajo está abierto (puede hacer las cosas en el orden que desee). Usted puede activar las acciones automáticas que le interesen. ThereIsNoWorkflowToModify=No hay modificaciones de flujo de trabajo disponibles con los módulos activados. -descWORKFLOW_PROPAL_AUTOCREATE_ORDER=Crear automáticamente un pedido de cliente después de que se firme una propuesta comercial (el nuevo pedido tendrá la misma cantidad que la propuesta) -descWORKFLOW_PROPAL_AUTOCREATE_INVOICE=Cree automáticamente una factura de cliente después de que se firme una propuesta comercial (la nueva factura tendrá el mismo importe que la propuesta) +descWORKFLOW_PROPAL_AUTOCREATE_ORDER=Crear automáticamente un pedido de venta después de que se haya firmado una propuesta comercial (el nuevo pedido tendrá la misma cantidad que la propuesta) +descWORKFLOW_PROPAL_AUTOCREATE_INVOICE=Crear automáticamente una factura de cliente después de que se haya firmado una propuesta comercial (la nueva factura tendrá el mismo importe que la propuesta) descWORKFLOW_CONTRACT_AUTOCREATE_INVOICE=Crear automáticamente una factura de cliente después de que un contrato es validado -descWORKFLOW_ORDER_AUTOCREATE_INVOICE=Cree automáticamente una factura de cliente después de cerrar una orden de cliente (la nueva factura tendrá el mismo importe que la orden) -descWORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL=Clasifique la(s) fuente(s) propuesta(s) vinculada(s) a facturar cuando el pedido del cliente se configura para facturar (y si el monto del pedido es igual al monto total de propuestas vinculadas firmadas) -descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=Clasifique la (s) propuesta (s) fuente (s) vinculada (s) para facturar cuando la factura del cliente sea validada (y si el monto de la factura es igual al monto total de las propuestas vinculadas firmadas) -descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Clasifique los pedidos de origen del cliente vinculados para facturar cuando se valida la factura del cliente (y si el importe de la factura es igual al importe total de los pedidos vinculados) -descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Clasifique los pedidos de origen del cliente vinculados para facturar cuando la factura del cliente se establece como pagada (y si el importe de la factura es igual al importe total de los pedidos vinculados) -descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Clasifique la orden del cliente de origen vinculado para enviar cuando se valida un envío (y si la cantidad enviada por todos los envíos es la misma que en el orden de actualización) -descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Clasifique la (s) propuesta (s) de proveedores de origen vinculados para facturar cuando se valida la factura del proveedor (y si el importe de la factura es igual al importe total de las propuestas vinculadas) -descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Clasifique las órdenes de compra de origen vinculadas para facturar cuando se valida la factura del proveedor (y si el importe de la factura es igual al importe total de las órdenes vinculadas) +descWORKFLOW_ORDER_AUTOCREATE_INVOICE=Crear automáticamente una factura de cliente después de que se cierre un pedido de venta (la nueva factura tendrá el mismo importe que el pedido) +descWORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL=Clasifique la propuesta de origen vinculado como facturada cuando el pedido de venta se establece en facturado (y si el monto del pedido es el mismo que el monto total de la propuesta vinculada firmada) +descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=Clasifique la propuesta de origen vinculado como facturada cuando la factura del cliente se valida (y si el monto de la factura es el mismo que el monto total de la propuesta vinculada firmada) +descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Clasifique el pedido de ventas de origen vinculado como facturado cuando la factura del cliente se valida (y si el monto de la factura es el mismo que el monto total del pedido vinculado) +descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Clasifique el pedido de venta de origen vinculado como facturado cuando la factura del cliente se establece en pagada (y si el monto de la factura es el mismo que el monto total del pedido vinculado) +descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Clasifique el pedido de venta de origen vinculado como enviado cuando se valida un envío (y si la cantidad enviada por todos los envíos es la misma que en el pedido de actualización) +descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Clasifique la propuesta del proveedor de origen vinculado como facturada cuando se valida la factura del proveedor (y si el monto de la factura es el mismo que el monto total de la propuesta vinculada) +descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Clasifique la orden de compra de origen vinculado como facturada cuando se valida la factura del proveedor (y si el monto de la factura es el mismo que el monto total del pedido vinculado) diff --git a/htdocs/langs/es_CO/admin.lang b/htdocs/langs/es_CO/admin.lang index 88f1d404b80..c931369f00e 100644 --- a/htdocs/langs/es_CO/admin.lang +++ b/htdocs/langs/es_CO/admin.lang @@ -101,7 +101,6 @@ MenuForUsers=Menú para usuarios. SystemInfo=Información del sistema SystemToolsArea=Área de herramientas del sistema PurgeDeleteLogFile=Elimine los archivos de registro, incluido el %s definido para el módulo Syslog (sin riesgo de perder datos) -PurgeDeleteTemporaryFiles=Eliminar todos los archivos temporales (sin riesgo de perder datos) PurgeDeleteTemporaryFilesShort=Borrar archivos temporales PurgeRunNow=Purga ahora PurgeNothingToDelete=No hay directorio o archivos para eliminar. @@ -666,7 +665,6 @@ ListOfSecurityEvents=Listado de eventos de seguridad de Dolibarr. AreaForAdminOnly=Los parámetros de configuración solo pueden ser configurados por usuarios administradores . SystemInfoDesc=La información del sistema es información técnica diversa que se obtiene en modo de solo lectura y visible solo para administradores. CompanyFundationDesc=Editar la información de la empresa / entidad. Haga clic en el botón "%s" o "%s" en la parte inferior de la página. -AccountantDesc=Edite los detalles de su contador / contador AvailableModules=Aplicación / módulos disponibles ToActivateModule=Para activar los módulos, vaya al área de configuración (Inicio-> Configuración-> Módulos). SessionTimeOut=Tiempo fuera para sesión @@ -1072,6 +1070,8 @@ ExpenseReportsRulesSetup=Configuración de los informes de gastos del módulo - ExpenseReportNumberingModules=Módulo de numeración de informes de gastos. NoModueToManageStockIncrease=No se ha activado ningún módulo capaz de gestionar el aumento automático de stock. El aumento de stock se realizará solo con entrada manual. ListOfNotificationsPerUser=Lista de notificaciones por usuario * +ListOfNotificationsPerUserOrContact=List of notifications (events) available per user* or per contact** +ListOfFixedNotifications=List of Fixed Notifications GoOntoUserCardToAddMore=Vaya a la pestaña "Notificaciones" de un usuario para agregar o eliminar notificaciones para usuarios GoOntoContactCardToAddMore=Vaya a la pestaña "Notificaciones" de un tercero para agregar o eliminar notificaciones de contactos / direcciones Threshold=Límite diff --git a/htdocs/langs/es_CO/bills.lang b/htdocs/langs/es_CO/bills.lang index b018909f2aa..91e935e7a99 100644 --- a/htdocs/langs/es_CO/bills.lang +++ b/htdocs/langs/es_CO/bills.lang @@ -18,7 +18,6 @@ InvoiceProFormaAsk=Factura de proforma InvoiceProFormaDesc= Factura proforma es una imagen de una factura real pero no tiene valor contable. InvoiceReplacement=Factura de reemplazo InvoiceReplacementAsk=Factura de reemplazo para la factura. -InvoiceReplacementDesc= Factura de reemplazo se utiliza para cancelar y reemplazar completamente una factura que no haya recibido ningún pago.

Nota: Solo se pueden reemplazar las facturas que no tengan ningún pago. Si la factura que reemplaza aún no está cerrada, se cerrará automáticamente a "abandonada". InvoiceAvoir=Nota de crédito InvoiceAvoirAsk=Nota de crédito para corregir factura invoiceAvoirWithLines=Crear nota de crédito con líneas de la factura de origen. diff --git a/htdocs/langs/es_DO/admin.lang b/htdocs/langs/es_DO/admin.lang index 79fb1cc6155..9bc2c2bc07b 100644 --- a/htdocs/langs/es_DO/admin.lang +++ b/htdocs/langs/es_DO/admin.lang @@ -7,4 +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 +ListOfNotificationsPerUserOrContact=List of notifications (events) available per user* or per contact** +ListOfFixedNotifications=List of Fixed Notifications OperationParamDesc=Define values to use for action, or how to extract values. For example:
objproperty1=SET:abc
objproperty1=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:abc
objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)
options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)
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/es_EC/admin.lang b/htdocs/langs/es_EC/admin.lang index 6e52d4ec437..e388f61c604 100644 --- a/htdocs/langs/es_EC/admin.lang +++ b/htdocs/langs/es_EC/admin.lang @@ -107,7 +107,6 @@ SystemToolsAreaDesc=Esta área proporciona funciones de administración. Utilice Purge=Purgar PurgeAreaDesc=Esta página le permite eliminar todos los archivos generados o almacenados por Dolibarr (archivos temporales o todos los archivos en el directorio %s). Usando esta característica normalmente no es necesario. Se proporciona como una solución para los usuarios cuyo Dolibarr está alojado por un proveedor que no ofrece permisos para eliminar archivos generados por el servidor web. PurgeDeleteLogFile=Eliminar archivo de registro %s definido para el módulo de Registro del Sistema (Syslog) (sin riesgo de perder datos) -PurgeDeleteTemporaryFiles=Eliminar todos los archivos temporales. PurgeDeleteAllFilesInDocumentsDir=Eliminar todos los archivos en el directorio: %s.
Esto eliminará todos los documentos generados relacionados con los elementos (terceros, facturas, etc.), los archivos cargados en el módulo ECM, los volcados de respaldo de la base de datos y archivos temporales. PurgeRunNow=Purgar ahora PurgeNothingToDelete=Sin directorio o archivos que desea eliminar. @@ -811,7 +810,6 @@ LogEventDesc=Habilitar el registro para eventos de seguridad específicos. Los a AreaForAdminOnly=Los parámetros de configuración sólo pueden ser establecidos por usuarios de administrador . SystemInfoDesc=La información del sistema es la información técnica diversa que se obtiene en el modo de solo lectura y visible sólo para los administradores. CompanyFundationDesc=Editar la información de la empresa / entidad. Haga clic en el botón " %s" o " %s" en la parte inferior de la página. -AccountantDesc=Edite los detalles de su contador / contador AvailableModules=Aplicaciones / módulos disponibles ToActivateModule=Para activar los módulos, vaya a área de configuración (Inicio-> Configuración-> Módulos). SessionTimeOut=Tiempo de espera para la sesión diff --git a/htdocs/langs/es_ES/accountancy.lang b/htdocs/langs/es_ES/accountancy.lang index f80257a135c..c98d1b1ed99 100644 --- a/htdocs/langs/es_ES/accountancy.lang +++ b/htdocs/langs/es_ES/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Cuenta contable de resultados (Pérdidas) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Diario de cierre ACCOUNTING_ACCOUNT_TRANSFER_CASH=Cuenta de caja +TransitionalAccount=Cuenta de transferencia bancaria de transición ACCOUNTING_ACCOUNT_SUSPENSE=Cuenta operaciones pendientes de asignar DONATION_ACCOUNTINGACCOUNT=Cuenta contable para registrar donaciones @@ -216,7 +217,7 @@ DescThirdPartyReport=Consulte aquí el listado de clientes y proveedores y sus c ListAccounts=Listado de cuentas contables UnknownAccountForThirdparty=Cuenta contable de tercero desconocida, usaremos %s UnknownAccountForThirdpartyBlocking=Cuenta contable de tercero desconocida. Error de bloqueo -ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Third-party account not defined or third party unknown. We will use %s +ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Cuenta de tercero no definida o tercero desconocido. Usaremos %s ThirdpartyAccountNotDefinedOrThirdPartyUnknownBlocking=Cuenta del tercero desconocida o tercero desconocido. Error de bloqueo UnknownAccountForThirdpartyAndWaitingAccountNotDefinedBlocking=Cuenta del tercero desconocida y cuenta de espera no definida. Error de bloqueo PaymentsNotLinkedToProduct=Pagos no vinculados a un producto/servicio @@ -292,7 +293,7 @@ Modelcsv_cogilog=Eportar a Cogilog Modelcsv_agiris=Exportar a Agiris Modelcsv_openconcerto=Exportar a OpenConcerto (En pruebas) Modelcsv_configurable=Exportación CSV Configurable -Modelcsv_FEC=Export FEC +Modelcsv_FEC=Exportación FEC Modelcsv_Sage50_Swiss=Exportación a Sage 50 Suiza ChartofaccountsId=Id plan contable @@ -317,9 +318,9 @@ WithoutValidAccount=Sin cuenta dedicada válida WithValidAccount=Con cuenta dedicada válida ValueNotIntoChartOfAccount=Este valor de cuenta contable no existe en el plan general contable AccountRemovedFromGroup=Cuenta eliminada del grupo -SaleLocal=Local sale -SaleExport=Export sale -SaleEEC=Sale in EEC +SaleLocal=Venta local +SaleExport=Venta de exportación +SaleEEC=Venta en CEE ## Dictionary Range=Rango de cuenta contable @@ -340,7 +341,7 @@ UseMenuToSetBindindManualy=No es posible autodetectar, utilice el menú %s
). El uso de esta función no es necesaria. Se proporciona como solución para los usuarios cuyos Dolibarr se encuentran en un proveedor que no ofrece permisos para eliminar los archivos generados por el servidor web. PurgeDeleteLogFile=Eliminar archivos de registro, incluidos %s definidos por el módulo Syslog (sin riesgo de perder datos) -PurgeDeleteTemporaryFiles=Delete all temporary files (no risk of losing data). Note: Deletion is done only if the temp directory was created 24 hours ago. +PurgeDeleteTemporaryFiles=Eliminar todos los archivos temporales (sin riesgo de perder datos). Nota: la eliminación se realiza solo si el directorio temporal se creó hace 24 horas. PurgeDeleteTemporaryFilesShort=Eliminar archivos temporales PurgeDeleteAllFilesInDocumentsDir=Eliminar todos los archivos del directorio %s. Serán eliminados archivos temporales y archivos relacionados con elementos (terceros, facturas, etc.), archivos subidos al módulo GED, copias de seguridad de la base de datos y archivos temporales. PurgeRunNow=Purgar @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Casilla de selección de tabla ExtrafieldLink=Objeto adjuntado ComputedFormula=Campo combinado ComputedFormulaDesc=Puede introducir aquí una fórmula utilizando otras propiedades de objeto o cualquier código PHP para obtener un valor calculado dinámico. Puede utilizar cualquier fórmula compatible con PHP, incluido el operador de condición "?" y los objetos globales siguientes: $db, $conf, $langs, $mysoc, $user, $object.
ATENCIÓN: Sólo algunas propiedades de $object pueden estar disponibles. Si necesita propiedades no cargadas, solo busque el objeto en su fórmula como en el segundo ejemplo.
Usando un campo computado significa que no puede ingresar ningún valor de la interfaz. Además, si hay un error de sintaxis, la fórmula puede devolver nada.

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

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

Otro ejemplo de fórmula para forzar la carga del objeto y su objeto principal:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found' +Computedpersistent=Almacenar campo combinado +ComputedpersistentDesc=Los campos adicionales calculados se almacenarán en la base de datos, sin embargo, el valor solo se volverá a calcular cuando se cambie el objeto de este campo. ¡Si el campo calculado depende de otros objetos o datos globales, este valor podría ser incorrecto! ExtrafieldParamHelpPassword=Mantener este campo vacío significa que el valor se almacenará sin cifrado (el campo permanecerá solo oculto con estrellas en la pantalla).
Establezca aquí el valor 'auto' para usar la regla de cifrado predeterminada para guardar la contraseña en la base de datos (entonces el valor leído será solo el hash, no hay forma de recuperar el valor original) ExtrafieldParamHelpselect=El listado de valores tiene que ser líneas key,valor

por ejemplo:
1,value1
2,value2
3,value3
...

Para tener una lista en funcion de campos adicionales de lista:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

Para tener la lista en función de otra:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=El listado de valores tiene que ser líneas con el formato key,valor

por ejemplo:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=El listado de valores tiene que ser líneas con el form ExtrafieldParamHelpsellist=Lista de valores proviene de una tabla
Sintaxis: nombre_tabla: etiqueta_field: id_field :: filtro
Ejemplo: c_typent: libelle: id :: filtro

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

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

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

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

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

Para que la lista dependa de otra lista:
c_typent: libelle: id: parent_list_code | parent_column: filter ExtrafieldParamHelplink=Los parámetros deben ser ObjectName: Classpath
Sintaxis: ObjectName:Classpath
Ejemplo:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Mantener vacío para un separador simple.
Establézcalo a 1 para un separador colapsado (abierto de manera predeterminada)
Establézcalo a 2 para un separador de colapso (colapsado de forma predeterminada) LibraryToBuildPDF=Libreria usada en la generación de los PDF LocalTaxDesc=Algunos países aplican 2 o 3 tasas a cada línea de factura. Si es el caso, escoja el tipo de la segunda y tercera tasa y su valor. Los posibles tipos son:
1 : tasa local aplicable a productos y servicios sin IVA (tasa local es calculada sobre la base imponible)
2 : tasa local se aplica a productos y servicios incluyendo el IVA (tasa local es calculada sobre base imponible+IVA)
3 : tasa local se aplica a productos sin IVA (tasa local es calculada sobre la base imponible)
4 : tasa local se aplica a productos incluyendo el IVA (tasa local es calculada sobre base imponible+IVA)
5 : tasa local se aplica a servicios sin IVA (tasa local es calculada sobre base imponible)
6 : tasa local se aplica a servicios incluyendo el IVA (tasa local es calculada sobre base imponible+IVA) SMS=SMS @@ -804,7 +807,7 @@ Permission401=Consultar haberes Permission402=Crear/modificar haberes Permission403=Validar haberes Permission404=Eliminar haberes -Permission430=Use Debug Bar +Permission430=Usa barra de debug Permission511=Consultar pagos de salarios Permission512=Crear/modificar pagos de salarios Permission514=Eliminar pagos de salarios @@ -819,9 +822,9 @@ Permission532=Crear/modificar servicios Permission534=Eliminar servicios Permission536=Ver/gestionar los servicios ocultos Permission538=Exportar servicios -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Leer lista de materiales +Permission651=Crear/Actualizar lista de material +Permission652=Eliminar lista de material Permission701=Consultar donaciones Permission702=Crear/modificar donaciones Permission703=Eliminar donaciones @@ -841,12 +844,12 @@ Permission1101=Consultar ordenes de envío Permission1102=Crear/modificar ordenes de envío Permission1104=Validar orden de envío Permission1109=Eliminar orden de envío -Permission1121=Read supplier proposals -Permission1122=Create/modify supplier proposals -Permission1123=Validate supplier proposals -Permission1124=Send supplier proposals -Permission1125=Delete supplier proposals -Permission1126=Close supplier price requests +Permission1121=Leer presupuestos de proveedor +Permission1122=Crear/modificar presupuestos de proveedor +Permission1123=Validar presupuestos de proveedor +Permission1124=Enviar presupuestos de proveedor +Permission1125=Eliminar presupuestos de proveedor +Permission1126=Cerrar presupuestos de proveedor Permission1181=Consultar proveedores Permission1182=Leer pedidos de compra Permission1183=Crear/modificar pedidos a proveedores @@ -882,15 +885,15 @@ Permission2503=Enviar o eliminar documentos Permission2515=Configuración directorios de documentos Permission2801=Utilizar el cliente FTP en modo lectura (sólo explorar y descargar) Permission2802=Utilizar el cliente FTP en modo escritura (borrar o subir archivos) -Permission3200=Read archived events and fingerprints -Permission4001=See employees -Permission4002=Create employees -Permission4003=Delete employees -Permission4004=Export employees -Permission10001=Read website content -Permission10002=Create/modify website content (html and javascript content) -Permission10003=Create/modify website content (dynamic php code). Dangerous, must be reserved to restricted developers. -Permission10005=Delete website content +Permission3200=Leer eventos archivados y huellas digitales +Permission4001=Ver empleados +Permission4002=Crear empleados +Permission4003=Eliminar empleados +Permission4004=Exportar empleados +Permission10001=Leer contenido del sitio web +Permission10002=Crear modificar contenido del sitio web (contenido html y javascript) +Permission10003=Crear/modificar contenido del sitio web (código php dinámico). Peligroso, debe reservarse a desarrolladores restringidos. +Permission10005=Eliminar contenido del sitio web Permission20001=Leer peticiones días líbres (suyos y subordinados) Permission20002=Crear/modificar peticiones días libres (suyos y de sus subordinados) Permission20003=Eliminar peticiones de días retribuidos @@ -904,19 +907,19 @@ Permission23004=Ejecutar Trabajo programado Permission50101=Utilizar TPV Permission50201=Consultar las transacciones Permission50202=Importar las transacciones -Permission50401=Bind products and invoices with accounting accounts -Permission50411=Read operations in ledger -Permission50412=Write/Edit operations in ledger -Permission50414=Delete operations in ledger -Permission50415=Delete all operations by year and journal in ledger -Permission50418=Export operations of the ledger -Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year -Permission50440=Manage chart of accounts, setup of accountancy -Permission51001=Read assets -Permission51002=Create/Update assets -Permission51003=Delete assets -Permission51005=Setup types of asset +Permission50401=Contabilizar productos y facturas con cuentas contables +Permission50411=Leer operaciones del Libro Mayor +Permission50412=Registrar/Editar operaciones en el Libro Mayor +Permission50414=Eliminar operaciones del Libro Mayor +Permission50415=Eliminar todas las operaciones por año y diario del Libro Mayor +Permission50418=Exportar operaciones del Libro Mayor +Permission50420=Informes y exportaciones (facturación, balance, diarios, libro mayor) +Permission50430=Definir y cerrar un período fiscal. +Permission50440=Gestionar plan contable, configuración de contabilidad. +Permission51001=Leer activos +Permission51002=Crear/actualizar activos +Permission51003=Eliminar activos +Permission51005=Configurar tipos de activos Permission54001=Imprimir Permission55001=Leer encuestas Permission55002=Crear/modificar encuestas @@ -1110,7 +1113,7 @@ AreaForAdminOnly=Los parámetros de configuración solamente pueden ser tratados SystemInfoDesc=La información del sistema es información técnica accesible solamente en solo lectura a los administradores. SystemAreaForAdminOnly=Esta área está disponible solo para usuarios administradores. Los permisos de usuario de Dolibarr no pueden cambiar esta restricción. CompanyFundationDesc=Edite la información de la empresa o institución. Haga clic en el botón "%s" o "%s" a pié de página -AccountantDesc=If you have an external accountant/bookkeeper, you can edit here its information. +AccountantDesc=Si tiene un contable/asesor externo, puede editar aquí su información. AccountantFileNumber=Código contable DisplayDesc=Los parámetros que afectan el aspecto y el comportamiento de Dolibarr se pueden modificar aquí. AvailableModules=Módulos disponibles @@ -1923,5 +1926,5 @@ IFTTTDesc=Este módulo está diseñado para desencadenar eventos en IFTTT y/o pa UrlForIFTTT=URL endpoint de IFTTT YouWillFindItOnYourIFTTTAccount=Lo encontrará en su cuenta de IFTTT. EndPointFor=End point for %s : %s -DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +DeleteEmailCollector=Eliminar el recolector de e-mail +ConfirmDeleteEmailCollector=¿Está seguro de que querer eliminar este recolector de e-mail? diff --git a/htdocs/langs/es_ES/cashdesk.lang b/htdocs/langs/es_ES/cashdesk.lang index 0fd77fcbbac..c2754213585 100644 --- a/htdocs/langs/es_ES/cashdesk.lang +++ b/htdocs/langs/es_ES/cashdesk.lang @@ -68,4 +68,4 @@ Terminal=Terminal NumberOfTerminals=Número de terminales TerminalSelect=Seleccione el terminal que desea usar: POSTicket=Ticket POS -BasicPhoneLayout=Use basic layout for phones +BasicPhoneLayout=Utilizar diseño básico para teléfonos. diff --git a/htdocs/langs/es_ES/companies.lang b/htdocs/langs/es_ES/companies.lang index 7d1aa5104f8..62e66cd8440 100644 --- a/htdocs/langs/es_ES/companies.lang +++ b/htdocs/langs/es_ES/companies.lang @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Descuentos fijos de proveedores (acordado por t SupplierAbsoluteDiscountMy=Descuentos fijos de proveedores (acordados personalmente) DiscountNone=Ninguna Vendor=Proveedor +Supplier=Proveedor AddContact=Crear contacto AddContactAddress=Crear contacto/dirección EditContact=Editar contacto diff --git a/htdocs/langs/es_ES/mails.lang b/htdocs/langs/es_ES/mails.lang index 3ec73be0883..c8a8896187b 100644 --- a/htdocs/langs/es_ES/mails.lang +++ b/htdocs/langs/es_ES/mails.lang @@ -78,9 +78,9 @@ GroupEmails=E-mail grupales OneEmailPerRecipient=Un e-mail por destinatario (de forma predeterminada, un e-mail por registro seleccionado) WarningIfYouCheckOneRecipientPerEmail=Atención: Si marca esta casilla, significa que solo se enviará un e-mail para varios registros diferentes seleccionados, por lo tanto, si su mensaje contiene variables de sustitución que hacen referencia a los datos de un registro, no será posible reemplazarlos. ResultOfMailSending=Resultado del envío masivo de e-mails -NbSelected=Number selected -NbIgnored=Number ignored -NbSent=Number sent +NbSelected=Seleccionados +NbIgnored=Ignorados +NbSent=Enviados SentXXXmessages=%s mensaje(s) enviado(s) ConfirmUnvalidateEmailing=¿Está seguro de querer cambiar el estado del e-mailing %s a borrador? MailingModuleDescContactsWithThirdpartyFilter=Filtro de contactos con tercero diff --git a/htdocs/langs/es_ES/members.lang b/htdocs/langs/es_ES/members.lang index 369def6ea99..a1025b9b61e 100644 --- a/htdocs/langs/es_ES/members.lang +++ b/htdocs/langs/es_ES/members.lang @@ -171,7 +171,7 @@ MembersStatisticsDesc=Elija las estadísticas que desea consultar... MenuMembersStats=Estadísticas LastMemberDate=Última fecha de miembro LatestSubscriptionDate=Fecha de la última cotización -MemberNature=Nature of member +MemberNature=Naturaleza del miembro Public=Información pública NewMemberbyWeb=Nuevo miembro añadido. En espera de validación NewMemberForm=Formulario de inscripción diff --git a/htdocs/langs/es_ES/other.lang b/htdocs/langs/es_ES/other.lang index 047bd238587..e3a372cd525 100644 --- a/htdocs/langs/es_ES/other.lang +++ b/htdocs/langs/es_ES/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Número de facturas a clientes NumberOfSupplierProposals=Número de presupuestos de proveedores NumberOfSupplierOrders=Número de pedidos a proveedores NumberOfSupplierInvoices=Número de facturas de proveedores +NumberOfContracts=Número de contratos NumberOfUnitsProposals=Número de unidades en los presupuestos a clientes NumberOfUnitsCustomerOrders=Número de unidades en los pedidos de clientes NumberOfUnitsCustomerInvoices=Número de unidades en las facturas a clientes NumberOfUnitsSupplierProposals=Número de unidades en los presupuestos de proveedores NumberOfUnitsSupplierOrders=Número de unidades en los pedidos a proveedores NumberOfUnitsSupplierInvoices=Número de unidades en las facturas de proveedores +NumberOfUnitsContracts=Número de unidades en los contratos EMailTextInterventionAddedContact=Se le ha asignado la intervención %s EMailTextInterventionValidated=Ficha intervención %s validada EMailTextInvoiceValidated=Factura %s ha sido validada. diff --git a/htdocs/langs/es_ES/products.lang b/htdocs/langs/es_ES/products.lang index 26f341e862a..68d21c54e3c 100644 --- a/htdocs/langs/es_ES/products.lang +++ b/htdocs/langs/es_ES/products.lang @@ -159,7 +159,7 @@ SuppliersPrices=Precios de proveedores SuppliersPricesOfProductsOrServices=Precios de proveedores (productos o servicios) CustomCode=Código aduanero CountryOrigin=País de origen -Nature=Nature of produt (material/finished) +Nature=Naturaleza del producto (materia prima/acabado) ShortLabel=Etiqueta corta Unit=Unidad p=u. diff --git a/htdocs/langs/es_ES/salaries.lang b/htdocs/langs/es_ES/salaries.lang index 741fff7e2a4..48215b71f6e 100644 --- a/htdocs/langs/es_ES/salaries.lang +++ b/htdocs/langs/es_ES/salaries.lang @@ -18,4 +18,4 @@ LastSalaries=Últimos %s pagos salariales AllSalaries=Todos los pagos salariales SalariesStatistics=Estadísticas salariales # Export -SalariesAndPayments=Salaries and payments +SalariesAndPayments=Salarios y pagos diff --git a/htdocs/langs/es_ES/stocks.lang b/htdocs/langs/es_ES/stocks.lang index 017b503b915..7595b3f75ee 100644 --- a/htdocs/langs/es_ES/stocks.lang +++ b/htdocs/langs/es_ES/stocks.lang @@ -66,12 +66,12 @@ RuleForStockManagementIncrease=Regla para el aumento automático de stocks (el a DeStockOnBill=Decrementar los stocks físicos sobre las facturas/abonos a clientes DeStockOnValidateOrder=Decrementar el stock real en la validación los pedidos de clientes DeStockOnShipment=Decrementar stock real en la validación de envíos -DeStockOnShipmentOnClosing=Decrease real stocks when shipping is set to closed +DeStockOnShipmentOnClosing=Decrementar el stock real en el cierre del envío ReStockOnBill=Incrementar el stock real en la validación de las facturas/abonos de proveedores ReStockOnValidateOrder=Incrementar los stocks físicos en la aprobación de pedidos a proveedores ReStockOnDispatchOrder=Incrementa el stock real en el desglose manual de la recepción de los pedidos a proveedores -StockOnReception=Increase real stocks on validation of reception -StockOnReceptionOnClosing=Increase real stocks when reception is set to closed +StockOnReception=Incrementar el stock real en la validación de la recepción. +StockOnReceptionOnClosing=Incrementar el stock real en el cierre de la recepción OrderStatusNotReadyToDispatch=El pedido aún no está o no tiene un estado que permita un desglose de stock. StockDiffPhysicTeoric=Motivo de la diferencia entre valores físicos y teóricos NoPredefinedProductToDispatch=No hay productos predefinidos en este objeto. Por lo tanto no se puede realizar un desglose de stock. diff --git a/htdocs/langs/es_ES/website.lang b/htdocs/langs/es_ES/website.lang index 8e33637f714..58ebf80dece 100644 --- a/htdocs/langs/es_ES/website.lang +++ b/htdocs/langs/es_ES/website.lang @@ -98,8 +98,8 @@ NoWebSiteCreateOneFirst=Todavía no se ha creado ningún sitio web. Cree uno pri GoTo=Ir a DynamicPHPCodeContainsAForbiddenInstruction=Ha añadido código PHP dinámico que contiene la instrucción de PHP '%s' que está prohibida por defecto como contenido dinámico (vea las opciones ocultas WEBSITE_PHP_ALLOW_xxx para aumentar la lista de comandos permitidos). NotAllowedToAddDynamicContent=No tiene permiso para agregar o editar contenido dinámico de PHP en sitios web. Pida permiso o simplemente mantenga el código en las etiquetas php sin modificar. -ReplaceWebsiteContent=Reemplazar el contenido del sitio web +ReplaceWebsiteContent=Buscar o reemplazar el contenido del sitio web DeleteAlsoJs=¿Eliminar también todos los archivos javascript específicos de este sitio web? DeleteAlsoMedias=¿Eliminar también todos los archivos de medios específicos de este sitio web? # Export -MyWebsitePages=My website pages +MyWebsitePages=Mis páginas web diff --git a/htdocs/langs/es_ES/withdrawals.lang b/htdocs/langs/es_ES/withdrawals.lang index c82b2821aa9..e31170475ac 100644 --- a/htdocs/langs/es_ES/withdrawals.lang +++ b/htdocs/langs/es_ES/withdrawals.lang @@ -69,8 +69,8 @@ WithBankUsingBANBIC=Para las cuentas bancarias que utilizan el código BAN/BIC/S BankToReceiveWithdraw=Cuenta bancaria para recibir la domiciliación CreditDate=Abonada el WithdrawalFileNotCapable=No es posible generar el fichero bancario de domiciliación para el país %s (El país no está soportado) -ShowWithdraw=Show Direct Debit Order -IfInvoiceNeedOnWithdrawPaymentWontBeClosed=However, if invoice has at least one direct debit payment order not yet processed, it won't be set as paid to allow prior withdrawal management. +ShowWithdraw=Mostrar domiciliación +IfInvoiceNeedOnWithdrawPaymentWontBeClosed=Sin embargo, si la factura tiene pendiente algún pago por domiciliación no procesado, no será marcada como pagada para permitir la gestión de la domiciliación. DoStandingOrdersBeforePayments=Esta pestaña le permite realizar una petición de domiciliación. Una vez realizadas las peticiones, vaya al menú Bancos->Domiciliaciones para gestionar la domiciliación. Al cerrar una domiciliación, los pagos de las facturas se registrarán automáticamente, y las facturas completamente pagadas serán cerradas. WithdrawalFile=Archivo de la domiciliación SetToStatusSent=Clasificar como "Archivo enviado" diff --git a/htdocs/langs/es_MX/accountancy.lang b/htdocs/langs/es_MX/accountancy.lang index 8150366c070..d712bd5c6c4 100644 --- a/htdocs/langs/es_MX/accountancy.lang +++ b/htdocs/langs/es_MX/accountancy.lang @@ -46,7 +46,6 @@ NewAccountingMvt=Nueva transacción NumMvts=Número de transacción ListeMvts=Lista de movimientos ErrorDebitCredit=Débito y Crédito no pueden tener un valor al mismo tiempo -ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Third-party account not defined or third party unknown. Blocking error. TotalVente=Facturación total antes de impuestos TotalMarge=Margen de ventas total DescVentilExpenseReport=Consulte aquí la lista de líneas de reporte de gastos vinculadas (o no) a una cuenta de contabilidad de comisiones @@ -57,7 +56,7 @@ AccountingJournalType5=Informe de gastos AccountingJournalType9=Tiene nuevo ErrorAccountingJournalIsAlreadyUse=Este diario ya está en uso ExportDraftJournal=Exportar borrador de diario -Modelcsv_FEC=Export FEC (Art. L47 A) +DefaultClosureDesc=This page can be used to set parameters to use to enclose a balance sheet. SomeMandatoryStepsOfSetupWereNotDone=Algunos pasos obligatorios de la instalación no se realizaron, favor de completar ExportNotSupported=El formato de exportación configurado no se admite en esta página NoJournalDefined=Ningún diario definido diff --git a/htdocs/langs/es_MX/admin.lang b/htdocs/langs/es_MX/admin.lang index 9747469d49d..6c0f8fd1ec9 100644 --- a/htdocs/langs/es_MX/admin.lang +++ b/htdocs/langs/es_MX/admin.lang @@ -87,7 +87,6 @@ SystemInfo=Información del sistema SystemToolsArea=Área de herramientas del sistema SystemToolsAreaDesc=Esta área provee funciones administrativas. Usar el menú para seleccionar la característica requerida. PurgeAreaDesc=Esta página te permite eliminar todos los archivos generados o guardados por Dolibarr (archivos temporales o todos los archivos en %s el directorio). Usar esta característica no es normalmente necesario. Esta es proporcionada como una solución alternativa para usuarios cuyo Dolibarr es hospedado por un proveedor que no ofrece permisos de borrado de archivos generados por el servidor web. -PurgeDeleteTemporaryFiles=Eliminar todos los archivos temporales (sin riesgo de perder datos) PurgeRunNow=Purgar ahora PurgeNothingToDelete=Ningún directorio o archivos que desee eliminar. PurgeNDirectoriesDeleted= %s archivos o directorios eliminados. @@ -132,6 +131,8 @@ DictionaryProspectStatus=Estatus del cliente potencial Upgrade=Actualizar LDAPFieldFirstName=Nombre(s) AGENDA_SHOW_LINKED_OBJECT=Mostrar objeto vinculado en la vista de agenda +ListOfNotificationsPerUserOrContact=List of notifications (events) available per user* or per contact** +ListOfFixedNotifications=List of Fixed Notifications ConfFileMustContainCustom=Instalar o construir un módulo externo desde la aplicación necesita guardar los archivos del módulo en el directorio %s . Para que este directorio sea procesado por Dolibarr, debe configurar su conf/conf.php para agregar las 2 líneas de directiva: $dolibarr_main_url_root_alt='/custom';
$dolibarr_main_document_root_alt='%s/custom'; MailToSendProposal=Propuestas de clientes MailToSendInvoice=Facturas de clientes diff --git a/htdocs/langs/es_PA/admin.lang b/htdocs/langs/es_PA/admin.lang index 5f6898087d4..a4a7a82aaa0 100644 --- a/htdocs/langs/es_PA/admin.lang +++ b/htdocs/langs/es_PA/admin.lang @@ -1,3 +1,5 @@ # Dolibarr language file - Source file is en_US - admin VersionUnknown=Desconocido +ListOfNotificationsPerUserOrContact=List of notifications (events) available per user* or per contact** +ListOfFixedNotifications=List of Fixed Notifications OperationParamDesc=Define values to use for action, or how to extract values. For example:
objproperty1=SET:abc
objproperty1=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:abc
objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)
options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)
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/es_PE/accountancy.lang b/htdocs/langs/es_PE/accountancy.lang index c651b103468..24d7b8e4f3b 100644 --- a/htdocs/langs/es_PE/accountancy.lang +++ b/htdocs/langs/es_PE/accountancy.lang @@ -43,6 +43,5 @@ ACCOUNTING_PRODUCT_BUY_ACCOUNT=Cuenta de contabilidad por defecto para los produ Sens=Significado Codejournal=Periódico FinanceJournal=Periodo Financiero -ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Third-party account not defined or third party unknown. Blocking error. TotalMarge=Margen total de ventas -Modelcsv_FEC=Export FEC (Art. L47 A) +DefaultClosureDesc=This page can be used to set parameters to use to enclose a balance sheet. diff --git a/htdocs/langs/es_PE/admin.lang b/htdocs/langs/es_PE/admin.lang index cc415c6dda9..0f15310bb3a 100644 --- a/htdocs/langs/es_PE/admin.lang +++ b/htdocs/langs/es_PE/admin.lang @@ -5,4 +5,6 @@ Permission93=Eliminar impuestos e IGV DictionaryVAT=Tasa de IGV (Impuesto sobre ventas en EEUU) UnitPriceOfProduct=Precio unitario sin IGV de un producto OptionVatMode=Opción de carga de IGV +ListOfNotificationsPerUserOrContact=List of notifications (events) available per user* or per contact** +ListOfFixedNotifications=List of Fixed Notifications OperationParamDesc=Define values to use for action, or how to extract values. For example:
objproperty1=SET:abc
objproperty1=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:abc
objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)
options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)
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/es_VE/admin.lang b/htdocs/langs/es_VE/admin.lang index 9d3c0f25368..4daf55ade15 100644 --- a/htdocs/langs/es_VE/admin.lang +++ b/htdocs/langs/es_VE/admin.lang @@ -32,4 +32,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) +ListOfNotificationsPerUserOrContact=List of notifications (events) available per user* or per contact** +ListOfFixedNotifications=List of Fixed Notifications OperationParamDesc=Define values to use for action, or how to extract values. For example:
objproperty1=SET:abc
objproperty1=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:abc
objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)
options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)
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/et_EE/accountancy.lang b/htdocs/langs/et_EE/accountancy.lang index f06e0291439..69bb680becb 100644 --- a/htdocs/langs/et_EE/accountancy.lang +++ b/htdocs/langs/et_EE/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/et_EE/admin.lang b/htdocs/langs/et_EE/admin.lang index 89b4189f8ab..bb4631de3fe 100644 --- a/htdocs/langs/et_EE/admin.lang +++ b/htdocs/langs/et_EE/admin.lang @@ -20,8 +20,8 @@ LocalSignature=Embedded local signature (less reliable) RemoteSignature=Remote distant signature (more reliable) FilesMissing=Missing Files FilesUpdated=Updated Files -FilesModified=Modified Files -FilesAdded=Added Files +FilesModified=Muudetud failid +FilesAdded=Lisatud failid FileCheckDolibarr=Check integrity of application files AvailableOnlyOnPackagedVersions=The local file for integrity checking is only available when the application is installed from an official package XmlNotFound=Xml Integrity File of application not found @@ -35,7 +35,7 @@ LockNewSessions=Keela uued ühendused ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user %s will be able to connect after that. UnlockNewSessions=Luba uued ühendused YourSession=Sinu sessioon -Sessions=Users Sessions +Sessions=Kasutajate sessioonid WebUserGroup=Veebiserveri kasutaja/grupp NoSessionFound=Your PHP configuration seems to not allow listing of active sessions. The directory used to save sessions (%s) may be protected (for example by OS permissions or by PHP directive open_basedir). DBStoringCharset=Märgistik, mida kasutatakse andmete salvestamiseks andmebaasi @@ -114,14 +114,14 @@ NotConfigured=Moodul/Rakendus pole veel seadistatud Active=Aktiivne SetupShort=Seadistamine OtherOptions=Muud seaded -OtherSetup=Other Setup +OtherSetup=Muud seadistused CurrentValueSeparatorDecimal=Kümnendkoha eraldaja CurrentValueSeparatorThousand=Tuhandete eraldaja Destination=Sihtkoht IdModule=Mooduli ID IdPermissions=Kasutajaõiguste ID LanguageBrowserParameter=Parameeter %s -LocalisationDolibarrParameters=Localization parameters +LocalisationDolibarrParameters=Lokaliseerimise parameetrid ClientTZ=Kliendi ajavöönd (kasutaja) ClientHour=Kliendi aeg (kasutaja) OSTZ=Serveri operatsioonisüsteemi ajavöönd @@ -133,15 +133,15 @@ YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to a HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server. Box=Vidin Boxes=Vidinad -MaxNbOfLinesForBoxes=Max. number of lines for widgets -AllWidgetsWereEnabled=All available widgets are enabled +MaxNbOfLinesForBoxes=Vidinate maksimaalne ridade arv +AllWidgetsWereEnabled=Kõik saadaval vidinad on lubatud PositionByDefault=Vaikimisi järjestus Position=Ametikoht MenusDesc=Menu managers set content of the two menu bars (horizontal and vertical). MenusEditorDesc=The menu editor allows you to define custom menu entries. Use it carefully to avoid instability and permanently unreachable menu entries.
Some modules add menu entries (in menu All mostly). If you remove some of these entries by mistake, you can restore them disabling and reenabling the module. MenuForUsers=Kasutajatele mõeldud menüü -LangFile=File. Lang -Language_en_US_es_MX_etc=Language (en_US, es_MX, ...) +LangFile=.lang fail +Language_en_US_es_MX_etc=Keel (en_US,es_MX,...) System=Süsteem SystemInfo=Süsteemi info SystemToolsArea=Süsteemi tööriistade ala @@ -150,7 +150,7 @@ Purge=Tühjenda PurgeAreaDesc=This page allows you to delete all files generated or stored by Dolibarr (temporary files or all files in %s directory). Using this feature is not normally necessary. It is provided as a workaround for users whose Dolibarr is hosted by a provider that does not offer permissions to delete files generated by the web server. PurgeDeleteLogFile=Delete log files, including %s defined for Syslog module (no risk of losing data) PurgeDeleteTemporaryFiles=Delete all temporary files (no risk of losing data). Note: Deletion is done only if the temp directory was created 24 hours ago. -PurgeDeleteTemporaryFilesShort=Delete temporary files +PurgeDeleteTemporaryFilesShort=Kustuta ajutised failid PurgeDeleteAllFilesInDocumentsDir=Delete all files in directory: %s.
This will delete all generated documents related to elements (third parties, invoices etc...), files uploaded into the ECM module, database backup dumps and temporary files. PurgeRunNow=Tühjenda nüüd PurgeNothingToDelete=Pole ühtki faili ega kausta, mida kustutada. @@ -173,7 +173,7 @@ ImportMySqlDesc=To import a MySQL backup file, you may use phpMyAdmin via your h ImportPostgreSqlDesc=Varukoopia importimiseks pead kasutama käsureal pg_restore käsku: ImportMySqlCommand=%s %s < minuvarukoopia.sql ImportPostgreSqlCommand=%s %s minuvarukoopia.sql -FileNameToGenerate=Filename for backup: +FileNameToGenerate=Varukoopia faili nimi: Compression=Pakkimine CommandsToDisableForeignKeysForImport=Käsk, millega keelata välisvõtmete kasutamise keelamine importimisel CommandsToDisableForeignKeysForImportWarning=Kohustuslik, kui tahad tõmmist hiljem taastamiseks kasutada @@ -201,18 +201,18 @@ ModulesDesc=The modules/applications determine which features are available in t ModulesMarketPlaceDesc=Alla laadimiseks leiad rohkem mooduleid Internetist. ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab %s. ModulesMarketPlaces=Otsi katsetuskärgus rakendusi/mooduleid -ModulesDevelopYourModule=Develop your own app/modules +ModulesDevelopYourModule=Arenda enda äpp/moodul ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you. DOLISTOREdescriptionLong=Instead of switching on
www.dolistore.com web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)... NewModule=Uus -FreeModule=Free -CompatibleUpTo=Compatible with version %s +FreeModule=Vaba +CompatibleUpTo=Ühilduv versioooniga %s NotCompatible=This module does not seem compatible with your Dolibarr %s (Min %s - Max %s). CompatibleAfterUpdate=This module requires an update to your Dolibarr %s (Min %s - Max %s). SeeInMarkerPlace=See in Market place -Updated=Updated +Updated=Uuendatud Nouveauté=Novelty -AchatTelechargement=Buy / Download +AchatTelechargement=Osta / Laadi alla GoModuleSetupArea=To deploy/install a new module, go to the Module setup area: %s. DoliStoreDesc=DoliStore on ametlik Dolibarr ERP/CRM moodulite müümiseks kasutatav koht DoliPartnersDesc=List of companies providing custom-developed modules or features.
Note: since Dolibarr is an open source application, anyone experienced in PHP programming may develop a module. @@ -238,31 +238,31 @@ ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to Feature=Funktsionaalsus DolibarrLicense=Litsents Developpers=Arendajad/toetajad -OfficialWebSite=Dolibarr official web site -OfficialWebSiteLocal=Local web site (%s) -OfficialWiki=Dolibarr documentation / Wiki +OfficialWebSite=Dolibarri ametlik veebileht +OfficialWebSiteLocal=Kohalik veebisait (%s) +OfficialWiki=Dolibarri dokumentatsioon / Wiki OfficialDemo=Dolibarri online demo OfficialMarketPlace=Väliste moodulite ja lisade ametlik müügikoht OfficialWebHostingService=Viidatavad veebimajutuse pakkujad (pilveteenused) ReferencedPreferredPartners=Eelistatud partnerid -OtherResources=Other resources -ExternalResources=External Resources -SocialNetworks=Social Networks +OtherResources=Muud ressursid +ExternalResources=Välised ressursid +SocialNetworks=Sotsiaalvõrgud ForDocumentationSeeWiki=Kasutaja või arendaja dokumentatsiooni (KKK jms) võid leida
ametlikust Dolibarri Wikist:
%s ForAnswersSeeForum=Muude küsimuste või abi küsimise tarbeks saab kasutada Dolibarri foorumit:
%s HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr. HelpCenterDesc2=Some of these resources are only available in english. CurrentMenuHandler=Praegune menüü töötleja MeasuringUnit=Mõõtühik -LeftMargin=Left margin -TopMargin=Top margin -PaperSize=Paper type +LeftMargin=Vasak serv +TopMargin=Ülemine serv +PaperSize=Paberi tüüp Orientation=Orientation SpaceX=Space X SpaceY=Space Y -FontSize=Font size -Content=Content -NoticePeriod=Notice period +FontSize=Kirjasuurus +Content=Sisu +NoticePeriod=Teavitamisperiood NewByMonth=New by month Emails=E-postid EMailsSetup=E-posti seadistamine @@ -278,12 +278,12 @@ MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos) MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes) MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list -MAIN_MAIL_SENDMODE=Email sending method -MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication) -MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication) -MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption -MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption -MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature +MAIN_MAIL_SENDMODE=E-posti saatmise viis +MAIN_MAIL_SMTPS_ID=SMTP-ID (kui saatev server nõuab autentimist) +MAIN_MAIL_SMTPS_PW=SMTP parool (kui saatev server nõuab autentimist) +MAIN_MAIL_EMAIL_TLS=Kasutage TLS (SSL) krüpteerimist +MAIN_MAIL_EMAIL_STARTTLS=Kasutage TLS (STARTTLS) krüpteerimist +MAIN_MAIL_EMAIL_DKIM_ENABLED=E-posti allkirja loomiseks kasutage DKIM-i MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing @@ -291,18 +291,18 @@ MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos) MAIN_SMS_SENDMODE=SMSi saatmiseks kasutatav meetod MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email) -UserEmail=User email -CompanyEmail=Company Email +UserEmail=Kasutaja e-post +CompanyEmail=Ettevõtte e-post FeatureNotAvailableOnLinux=Funktsionaalsus pole kasutatav Unixi laadsel süsteemil. Kontrolli oma sendmail programmi seadistust. SubmitTranslation=If the translation for this language is not complete or you find errors, you can correct this by editing files in directory langs/%s and submit your change to www.transifex.com/dolibarr-association/dolibarr/ SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory langs/%s and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr. ModuleSetup=Moodulite seadistamine -ModulesSetup=Modules/Application setup +ModulesSetup=Moodulid / rakenduse seadistamine ModuleFamilyBase=Süsteem -ModuleFamilyCrm=Customer Relationship Management (CRM) -ModuleFamilySrm=Vendor Relationship Management (VRM) -ModuleFamilyProducts=Product Management (PM) -ModuleFamilyHr=Human Resource Management (HR) +ModuleFamilyCrm=Kliendisuhete haldamine (CRM) +ModuleFamilySrm=Müügisuhete haldamine (VRM) +ModuleFamilyProducts=Toote haldamine (PM) +ModuleFamilyHr=Personalijuhtimine (HR) ModuleFamilyProjects=Projektid/koostöö ModuleFamilyOther=Muu ModuleFamilyTechnic=Multimoodulite tööriistad @@ -314,8 +314,8 @@ ModuleFamilyInterface=Interfaces with external systems MenuHandlers=Menüüde töötlejad MenuAdmin=Menüü toimeti DoNotUseInProduction=Ära kasuta tootmispaigaldustes -ThisIsProcessToFollow=Upgrade procedure: -ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually: +ThisIsProcessToFollow=Uuendusprotseduur: +ThisIsAlternativeProcessToFollow=See on käsitsi töödeldav alternatiivne seadistus: StepNb=Samm %s FindPackageFromWebSite=Find a package that provides the features you need (for example on the official web site %s). DownloadPackageFromWebSite=Download package (for example from the official web site %s). @@ -325,13 +325,13 @@ SetupIsReadyForUse=Module deployment is finished. You must however enable and se NotExistsDirect=The alternative root directory is not defined to an existing directory.
InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.
Just create a directory at the root of Dolibarr (eg: custom).
InfDirExample=
Then declare it in the file conf.php
$dolibarr_main_url_root_alt='/custom'
$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'
If these lines are commented with "#", to enable them, just uncomment by removing the "#" character. -YouCanSubmitFile=Alternatively, you may upload the module .zip file package: -CurrentVersion=Dolibarri praegune versioo +YouCanSubmitFile=Teise võimalusena võite mooduli .zip failipaketi üles laadida: +CurrentVersion=Praegune Dolibarr versioon CallUpdatePage=Browse to the page that updates the database structure and data: %s. LastStableVersion=Viimane stabiilne versioon -LastActivationDate=Latest activation date -LastActivationAuthor=Latest activation author -LastActivationIP=Latest activation IP +LastActivationDate=Viimane aktiveerimise kuupäev +LastActivationAuthor=Viimane aktiveerimise autor +LastActivationIP=Viimane aktiveerimise IP UpdateServerOffline=Update server offline WithCounter=Manage a counter GenericMaskCodes=Sa võid sisestada suvalise numeratsiooni maski. Järgnevas maskis saab kasutada järgmisi silte:
{000000} vastab arvule, mida suurendatakse iga sündmuse %s korral. Sisesta niipalju nulle, kui soovid loenduri pikkuseks. Loendurile lisatakse vasakult alates niipalju nulle, et ta oleks maskiga sama pikk.
{000000+000} on eelmisega sama, kuid esimesele %s lisatakse nihe, mis vastab + märgist paremal asuvale arvule.
{000000@x} on eelmisega sama, ent kuuni x jõudmisel nullitakse loendur (x on 1 ja 12 vahel, või 0 seadistuses määratletud majandusaasta alguse kasutamiseks, või 99 loenduri nullimiseks iga kuu alguses). Kui kasutad seda funktsiooni ja x on 2 või kõrgem, siis on jada {yy}{mm} or {yyyy}{mm} nõutud.
{dd} päev (01 kuni 31).
{mm} kuu (01 kuni 12).
{yy}, {yyyy} või {y} aasta 2, 4 või 1 numbri kasutamisks.
@@ -351,40 +351,40 @@ ErrorCantUseRazIfNoYearInMask=Viga: ei saa kasutada seadet @ iga aasta alguses l ErrorCantUseRazInStartedYearIfNoYearMonthInMask=Viga: ei saa kasutada võimalust @, kui maskis ei sisaldu jada {yy} {mm} või {yyyy} {mm}. UMask=Umask parameeter uute failide loomiseks Unix/Linux/BSD/Mac failisüsteemidel. UMaskExplanation=See parameeter võimaldab määratleda Dolibarri poolt loodud failide vaikimise õigused (näiteks üleslaadimise ajal)
See peab olema kaheksandsüsteemi väärtus (nt 0666 tähendab lubada kõigile lugemise ja kirjutamise õigused)
Windows serveris seda parameetrit ei kasutata. -SeeWikiForAllTeam=Take a look at the Wiki page for a list of contributors and their organization +SeeWikiForAllTeam=Vaadake Wiki lehekülge, kus on nimekiri osalejatest ja nende organisatsioonist UseACacheDelay= Eksportimise vastuse vahemällu salvestamise viivitus (0 või tühi vahemälu mitte kasutamiseks) DisableLinkToHelpCenter=Peida link "Vajad abi või tuge" sisselogimise lehel -DisableLinkToHelp=Hide link to online help "%s" +DisableLinkToHelp=Peida link veebipõhisele abile " %s " AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed. ConfirmPurge=Are you sure you want to execute this purge?
This will permanently delete all your data files with no way to restore them (ECM files, attached files...). MinLength=Minimaalne pikkus LanguageFilesCachedIntoShmopSharedMemory=Jagatud mällu laetud .lang failid -LanguageFile=Language file -ExamplesWithCurrentSetup=Examples with current configuration +LanguageFile=Keelefail +ExamplesWithCurrentSetup=Praeguse konfiguratsiooniga näited ListOfDirectories=OpenDocument mallide kaustad ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.

Put here full path of directories.
Add a carriage return between eah directory.
To add a directory of the GED module, add here DOL_DATA_ROOT/ecm/yourdirectoryname.

Files in those directories must end with .odt or .ods. -NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories +NumberOfModelFilesFound=Nendes kataloogides leiduvate ODT / ODS-malli failide arv ExampleOfDirectoriesForModelGen=Süntaksi näited:
c:\\mydir
/home/mydir
DOL_DATA_ROOT/ecm/ecmdir FollowingSubstitutionKeysCanBeUsed=
Enne dokumendimallide loomist loe wikis olevat dokumentatsiooni: FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template FirstnameNamePosition=Nimi/perekonnanimi ametikoht -DescWeather=The following images will be shown on the dashboard when the number of late actions reach the following values: +DescWeather=Juhtpaneelil kuvatakse järgmised pildid, kui hilisemate toimingute arv on järgmine: KeyForWebServicesAccess=Veebiteenuste kasutamise võti (parameeter "dolibarrkey" webservices moodulis) TestSubmitForm=Sisestamise testimiseks mõeldud vorm ThisForceAlsoTheme=Using this menu manager will also use its own theme whatever the user choice. Also this menu manager specialized for smartphones does not work on all smartphone. Use another menu manager if you experience problems with yours. ThemeDir=Kestade kataloog -ConnectionTimeout=Connection timeout +ConnectionTimeout=Ühenduse aegumine ResponseTimeout=Vastuse aegumine SmsTestMessage=Test sõnum __TELEFONIST__TELEFONI__ -ModuleMustBeEnabledFirst=Module %s must be enabled first if you need this feature. +ModuleMustBeEnabledFirst=Selle funktsiooni kasutamiseks tuleb kõigepealt aktiveerida moodul %s . SecurityToken=URLide kaitsmiseks kasutatav võti NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external vendor, but you can find some on %s PDF=PDF -PDFDesc=Global options for PDF generation. +PDFDesc=PDFi globaalsed seaded. PDFAddressForging=Rules for address boxes -HideAnyVATInformationOnPDF=Hide all information related to Sales Tax / VAT -PDFRulesForSalesTax=Rules for Sales Tax / VAT -PDFLocaltax=Rules for %s +HideAnyVATInformationOnPDF=Peida kõik müügimaksu / käibemaksuga seotud andmed +PDFRulesForSalesTax=Müügimaksu / käibemaksu reeglid +PDFLocaltax=%s reeglid HideLocalTaxOnPDF=Hide %s rate in column Tax Sale HideDescOnPDF=Hide products description HideRefOnPDF=Hide products ref. @@ -400,28 +400,30 @@ OldVATRates=Vana käibemaksumäär NewVATRates=Uus käibemaksumäär PriceBaseTypeToChange=Muuda hindadel, mille baasväärtus on defineeritud kui MassConvert=Launch bulk conversion -String=Sõne +String=Sõna TextLong=Pikk tekst -HtmlText=Html text +HtmlText=HTML-tekst Int=Täisarv Float=Ujukomaarv DateAndTime=Kuupäev ja tund Unique=Unikaalne -Boolean=Boolean (one checkbox) +Boolean=Tõeväärtus (üks märkeruut) ExtrafieldPhone = Telefon ExtrafieldPrice = Hind ExtrafieldMail = E-post -ExtrafieldUrl = Url +ExtrafieldUrl = URL ExtrafieldSelect = Valikute nimekiri ExtrafieldSelectList = Vali tabelist -ExtrafieldSeparator=Separator (not a field) +ExtrafieldSeparator=Eraldaja (mitte väli) ExtrafieldPassword=Salasõna -ExtrafieldRadio=Radio buttons (one choice only) -ExtrafieldCheckBox=Checkboxes -ExtrafieldCheckBoxFromList=Checkboxes from table -ExtrafieldLink=Link to an object -ComputedFormula=Computed field +ExtrafieldRadio=Raadionupud (ainult üks valik) +ExtrafieldCheckBox=Märkeruudud +ExtrafieldCheckBoxFromList=Märkeruudud tabelist +ExtrafieldLink=Viide objektile +ComputedFormula=Arvutatud väli ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -437,23 +440,23 @@ RefreshPhoneLink=Värskenda linki LinkToTest=Kasutaja %s jaoks genereeriti klõpsatav link (testimiseks klõpsa telefoninumbril) KeepEmptyToUseDefault=Jäta tühjaks vaikeväärtuse kasutamiseks DefaultLink=Vaikimisi link -SetAsDefault=Set as default +SetAsDefault=Määra vaikimisi ValueOverwrittenByUserSetup=Hoiatus: kasutaja võib selle väärtuse üle kirjutada oma seadetega (iga kasutaja saab määratleda isikliku clicktodial URLi) ExternalModule=Väline moodul - paigaldatud kausta %s -BarcodeInitForthird-parties=Mass barcode init for third-parties +BarcodeInitForthird-parties=Mass-vöötkoodi loomine kolmandatele osapooltele BarcodeInitForProductsOrServices=Toodete/teenuste jaoks massiline vöötkoodide loomine või lähtestamine -CurrentlyNWithoutBarCode=Currently, you have %s record on %s %s without barcode defined. +CurrentlyNWithoutBarCode=Praegu on teil %s kirje %s %s kohta ilma vöötkoodi määramata. InitEmptyBarCode=Järgmise %s tühja kirje lähtestamise väärtus EraseAllCurrentBarCode=Kustuta kõik hetkel kasutatavad vöötkoodide väärtused -ConfirmEraseAllCurrentBarCode=Are you sure you want to erase all current barcode values? +ConfirmEraseAllCurrentBarCode=Kas soovite kindlasti kõik praegused vöötkoodi väärtused kustutada? AllBarcodeReset=Kõik triipkoodi väärtused on eemaldatud NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the Barcode module setup. -EnableFileCache=Enable file cache -ShowDetailsInPDFPageFoot=Add more details into footer, such as company address or manager names (in addition to professional ids, company capital and VAT number). -NoDetails=No additional details in footer -DisplayCompanyInfo=Display company address -DisplayCompanyManagers=Display manager names -DisplayCompanyInfoAndManagers=Display company address and manager names +EnableFileCache=Luba faili vahemälu +ShowDetailsInPDFPageFoot=Lisage jalusesse rohkem üksikasju, näiteks ettevõtte aadress või juhtide nimed (ettevõtte registrikood, kapital ja KMKR number). +NoDetails=Jaluses ei ole täiendavaid andmeid +DisplayCompanyInfo=Kuva ettevõtte aadressi +DisplayCompanyManagers=Kuva haldajate nimed +DisplayCompanyInfoAndManagers=Kuva ettevõtte aadress ja haldaja nimed EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible. ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code ModuleCompanyCodeSupplierAquarium=%s followed by vendor code for a vendor accounting code @@ -463,24 +466,24 @@ Use3StepsApproval=By default, Purchase Orders need to be created and approved by UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than... WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not theirs, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).
If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider. WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: %s. -ClickToShowDescription=Click to show description -DependsOn=This module needs the module(s) -RequiredBy=This module is required by module(s) +ClickToShowDescription=Klõpsake kirjelduse nägemiseks +DependsOn=See moodul vajab moodulit +RequiredBy=See moodul on mooduli(te) poolt nõutav TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field. PageUrlForDefaultValues=You must enter the relative path of the page URL. If you include parameters in URL, the default values will be effective if all parameters are set to same value. PageUrlForDefaultValuesCreate=
Example:
For the form to create a new third party, it is %s.
For URL of external modules installed into custom directory, do not include the "custom/", so use path like mymodule/mypage.php and not custom/mymodule/mypage.php.
If you want default value only if url has some parameter, you can use %s PageUrlForDefaultValuesList=
Example:
For the page that lists third parties, it is %s.
For URL of external modules installed into custom directory, do not include the "custom/" so use a path like mymodule/mypagelist.php and not custom/mymodule/mypagelist.php.
If you want default value only if url has some parameter, you can use %s AlsoDefaultValuesAreEffectiveForActionCreate=Also note that overwritting default values for form creation works only for pages that were correctly designed (so with parameter action=create or presend...) -EnableDefaultValues=Enable customization of default values -EnableOverwriteTranslation=Enable usage of overwritten translation +EnableDefaultValues=Lubage vaikeväärtuste kohandamine +EnableOverwriteTranslation=Lubage ülekirjutatud tõlke kasutamine GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation. WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior. Field=Väli -ProductDocumentTemplates=Document templates to generate product document +ProductDocumentTemplates=Dokumendi mallid tootedokumendi loomiseks FreeLegalTextOnExpenseReports=Free legal text on expense reports WatermarkOnDraftExpenseReports=Watermark on draft expense reports AttachMainDocByDefault=Set this to 1 if you want to attach main document to email by default (if applicable) -FilesAttachedToEmail=Attach file +FilesAttachedToEmail=Lisage fail SendEmailsReminders=Send agenda reminders by emails davDescription=Setup a WebDAV server DAVSetup=Setup of module DAV @@ -493,11 +496,11 @@ DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploade # Modules Module0Name=Kasutajad ja grupid Module0Desc=Users / Employees and Groups management -Module1Name=Third Parties -Module1Desc=Companies and contacts management (customers, prospects...) +Module1Name=Kolmandad isikud +Module1Desc=Ettevõtete ja kontaktide haldamine (kliendid, huvilised ...) Module2Name=Äritegevus Module2Desc=Äritegevuse seadistamine -Module10Name=Accounting (simplified) +Module10Name=Raamatupidamine (lihtsustatud) Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table. Module20Name=Pakkumised Module20Desc=Pakkumiste haldamine @@ -505,16 +508,16 @@ Module22Name=Mass Emailings Module22Desc=Manage bulk emailing Module23Name=Energia Module23Desc=Energiatarbimise järelevalve -Module25Name=Sales Orders -Module25Desc=Sales order management +Module25Name=Müügitellimused +Module25Desc=Müügitellimuste haldamine Module30Name=Arved Module30Desc=Management of invoices and credit notes for customers. Management of invoices and credit notes for suppliers -Module40Name=Vendors -Module40Desc=Vendors and purchase management (purchase orders and billing) +Module40Name=Tarnijad +Module40Desc=Tarnijad ja ostuhaldus (ostutellimused ja arveldus) Module42Name=Debug Logs Module42Desc=Logging facilities (file, syslog, ...). Such logs are for technical/debug purposes. -Module49Name=Toimetid -Module49Desc=Toimetite haldamine +Module49Name=Toimetajad +Module49Desc=Toimetaja haldamine Module50Name=Tooted Module50Desc=Management of Products Module51Name=Masspostitus @@ -541,14 +544,14 @@ Module75Name=Kulud ja lähetused Module75Desc=Kulude ja lähetuste haldamine Module80Name=Saadetised Module80Desc=Shipments and delivery note management -Module85Name=Banks & Cash +Module85Name=Pangad ja kassa Module85Desc=Panga- ja kassakontode haldamine -Module100Name=External Site +Module100Name=Väline veebileht Module100Desc=Add a link to an external website as a main menu icon. Website is shown in a frame under the top menu. Module105Name=Mailman ja SPIP Module105Desc=Mailman või SPIP liides liikme mooduli jaoks Module200Name=LDAP -Module200Desc=LDAP directory synchronization +Module200Desc=LDAP kausta sünkroniseerimine Module210Name=PostNuke Module210Desc=PostNuke integratsioon Module240Name=Andmete eksport @@ -578,7 +581,7 @@ Module610Name=Product Variants Module610Desc=Creation of product variants (color, size etc.) Module700Name=Annetused Module700Desc=Annetuste haldamine -Module770Name=Expense Reports +Module770Name=Kulude aruanne Module770Desc=Manage expense reports claims (transportation, meal, ...) Module1120Name=Vendor Commercial Proposals Module1120Desc=Request vendor commercial proposal and prices @@ -819,9 +822,9 @@ Permission532=Teenuste loomine/muutmine Permission534=Teenuste kustutamine Permission536=Peidetud teenuste vaatamine/haldamine Permission538=Teenuste eksport -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Annetuste vaatamine Permission702=Annetuste loomine/muutmine Permission703=Annetuste kustutamine @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -939,7 +942,7 @@ DictionaryActions=Types of agenda events DictionarySocialContributions=Types of social or fiscal taxes DictionaryVAT=Käibe- või müügimaksumäärad DictionaryRevenueStamp=Amount of tax stamps -DictionaryPaymentConditions=Payment Terms +DictionaryPaymentConditions=Maksetähtajad DictionaryPaymentModes=Payment Modes DictionaryTypeContact=Kontakti/Aadressi tüübid DictionaryTypeOfContainer=Website - Type of website pages/containers @@ -1082,7 +1085,7 @@ Delays_MAIN_DELAY_PROPALS_TO_BILL=Proposal not billed Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Service to activate Delays_MAIN_DELAY_RUNNING_SERVICES=Expired service Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Unpaid vendor invoice -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Unpaid customer invoice +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Tasumata müügiarve Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Pending bank reconciliation Delays_MAIN_DELAY_MEMBERS=Delayed membership fee Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Check deposit not done @@ -1278,7 +1281,7 @@ SuggestPaymentByChequeToAddress=Suggest payment by check to FreeLegalTextOnInvoices=Vaba tekst arvetel WatermarkOnDraftInvoices=Vesimärk arvete mustanditel (puudub, kui tühi) PaymentsNumberingModule=Payments numbering model -SuppliersPayment=Vendor payments +SuppliersPayment=Tarnija maksed SupplierPaymentSetup=Vendor payments setup ##### Proposals ##### PropalSetup=Pakkumiste mooduli seadistamine @@ -1777,14 +1780,14 @@ FillFixTZOnlyIfRequired=Example: +2 (fill only if problem experienced) ExpectedChecksum=Expected Checksum CurrentChecksum=Current Checksum ForcedConstants=Required constant values -MailToSendProposal=Customer proposals +MailToSendProposal=Müügipakkumised MailToSendOrder=Sales orders -MailToSendInvoice=Customer invoices +MailToSendInvoice=Müügiarved MailToSendShipment=Saadetised MailToSendIntervention=Sekkumised MailToSendSupplierRequestForQuotation=Quotation request MailToSendSupplierOrder=Purchase orders -MailToSendSupplierInvoice=Vendor invoices +MailToSendSupplierInvoice=Tarnija arved MailToSendContract=Lepingud MailToThirdparty=Kolmandad isikud MailToMember=Liikmed @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/et_EE/agenda.lang b/htdocs/langs/et_EE/agenda.lang index 0bd909eb402..8140922c4f7 100644 --- a/htdocs/langs/et_EE/agenda.lang +++ b/htdocs/langs/et_EE/agenda.lang @@ -5,16 +5,16 @@ Agenda=Päevakava TMenuAgenda=Päevakava Agendas=Päevakavad LocalAgenda=Sisemine kalender -ActionsOwnedBy=Event owned by +ActionsOwnedBy=Sündmus kuulub ActionsOwnedByShort=Omanik AffectedTo=Mõjutatud isik -Event=Sündmus +Event=Tegevus Events=Tegevused EventsNb=Tegevuste arv ListOfActions=Tegevuste nimekiri -EventReports=Event reports +EventReports=Tegevuste aruanded Location=Asukoht -ToUserOfGroup=To any user in group +ToUserOfGroup=Iga grupi kasutajale EventOnFullDay=Tegevus kestab kogu/kõik päeva(d) MenuToDoActions=Kõik lõpetamata tegevused MenuDoneActions=Kõik lõpetatud tegevused @@ -37,68 +37,68 @@ AgendaExtSitesDesc=See leht võimaldab määratleda väliseid kalendreid, mis sa ActionsEvents=Tegevused, mille kohta lisab Dolibarr automaatselt päevakavasse sündmuse. EventRemindersByEmailNotEnabled=Event reminders by email was not enabled into %s module setup. ##### Agenda event labels ##### -NewCompanyToDolibarr=Third party %s created -COMPANY_DELETEInDolibarr=Third party %s deleted -ContractValidatedInDolibarr=Contract %s validated -CONTRACT_DELETEInDolibarr=Contract %s deleted -PropalClosedSignedInDolibarr=Proposal %s signed -PropalClosedRefusedInDolibarr=Proposal %s refused +NewCompanyToDolibarr=Kolmasosapool %s loodud +COMPANY_DELETEInDolibarr=Kolmasosapool %s kustutatud +ContractValidatedInDolibarr=Leping %s kinnitatud +CONTRACT_DELETEInDolibarr=Leping %s kustutatud +PropalClosedSignedInDolibarr=Pakkumine %s kinnitatud +PropalClosedRefusedInDolibarr=Pakkumisest %s keelduti PropalValidatedInDolibarr=Pakkumine %s on kinnitatud -PropalClassifiedBilledInDolibarr=Proposal %s classified billed +PropalClassifiedBilledInDolibarr=Pakkumine %s arveldatud InvoiceValidatedInDolibarr=Arve %s on kinnitatud InvoiceValidatedInDolibarrFromPos=Invoice %s validated from POS InvoiceBackToDraftInDolibarr=Arve %s on tagasi mustandi staatuses InvoiceDeleteDolibarr=Arve %s on kustutatud -InvoicePaidInDolibarr=Invoice %s changed to paid -InvoiceCanceledInDolibarr=Invoice %s canceled -MemberValidatedInDolibarr=Member %s validated -MemberModifiedInDolibarr=Member %s modified -MemberResiliatedInDolibarr=Member %s terminated -MemberDeletedInDolibarr=Member %s deleted +InvoicePaidInDolibarr=Arve %s märgitud makstuks +InvoiceCanceledInDolibarr=Arve %s tühistatud +MemberValidatedInDolibarr=Liige %s kinnitatud +MemberModifiedInDolibarr=Liige %s muudetud +MemberResiliatedInDolibarr=Liige %s lõpetatud +MemberDeletedInDolibarr=Liige %s kustutatud MemberSubscriptionAddedInDolibarr=Subscription %s for member %s added MemberSubscriptionModifiedInDolibarr=Subscription %s for member %s modified MemberSubscriptionDeletedInDolibarr=Subscription %s for member %s deleted -ShipmentValidatedInDolibarr=Shipment %s validated -ShipmentClassifyClosedInDolibarr=Shipment %s classified billed -ShipmentUnClassifyCloseddInDolibarr=Shipment %s classified reopened -ShipmentBackToDraftInDolibarr=Shipment %s go back to draft status -ShipmentDeletedInDolibarr=Shipment %s deleted -OrderCreatedInDolibarr=Order %s created +ShipmentValidatedInDolibarr=Saadetis %s kinnitatud +ShipmentClassifyClosedInDolibarr=Saadetise %s arveldatud +ShipmentUnClassifyCloseddInDolibarr=Saadetis %s taasavatud +ShipmentBackToDraftInDolibarr=Saadetis %s on muudetud mustandiks +ShipmentDeletedInDolibarr=Saadetis %s kustutatud +OrderCreatedInDolibarr=Tellimus %s loodud OrderValidatedInDolibarr=Tellimus %s on kinnitatud -OrderDeliveredInDolibarr=Order %s classified delivered +OrderDeliveredInDolibarr=Tellimus %s tarnitud OrderCanceledInDolibarr=Tellimus %s on tühistatud -OrderBilledInDolibarr=Order %s classified billed -OrderApprovedInDolibarr=Tellimus %s on heaks kiidetud -OrderRefusedInDolibarr=Tellimus %s on tagasi lükatud +OrderBilledInDolibarr=Tellimus %s arveldatud +OrderApprovedInDolibarr=Tellimus %s kinnitatud +OrderRefusedInDolibarr=Tellimusest %s keelduti OrderBackToDraftInDolibarr=Tellimus %s on muudetud mustandiks ProposalSentByEMail=Commercial proposal %s sent by email -ContractSentByEMail=Contract %s sent by email -OrderSentByEMail=Sales order %s sent by email -InvoiceSentByEMail=Customer invoice %s sent by email -SupplierOrderSentByEMail=Purchase order %s sent by email -SupplierInvoiceSentByEMail=Vendor invoice %s sent by email -ShippingSentByEMail=Shipment %s sent by email -ShippingValidated= Shipment %s validated -InterventionSentByEMail=Intervention %s sent by email -ProposalDeleted=Proposal deleted -OrderDeleted=Order deleted -InvoiceDeleted=Invoice deleted -PRODUCT_CREATEInDolibarr=Product %s created -PRODUCT_MODIFYInDolibarr=Product %s modified -PRODUCT_DELETEInDolibarr=Product %s deleted -EXPENSE_REPORT_CREATEInDolibarr=Expense report %s created -EXPENSE_REPORT_VALIDATEInDolibarr=Expense report %s validated -EXPENSE_REPORT_APPROVEInDolibarr=Expense report %s approved -EXPENSE_REPORT_DELETEInDolibarr=Expense report %s deleted -EXPENSE_REPORT_REFUSEDInDolibarr=Expense report %s refused +ContractSentByEMail=Leping %s saadetud e-postiga +OrderSentByEMail=Müügitellimus %s saadetud e-postiga +InvoiceSentByEMail=Kliendi arve %s saadetud e-postiga +SupplierOrderSentByEMail=Ostutellimus %s saadetud e-postiga +SupplierInvoiceSentByEMail=Tarnija arve %s saadetud e-postiga +ShippingSentByEMail=Saadetise %s saadetud e-postiga +ShippingValidated= Saadetis %s kinnitatud +InterventionSentByEMail=Sekkumine %s saadetud e-postiga +ProposalDeleted=Pakkumine kustutatud +OrderDeleted=Tellimus kustutatud +InvoiceDeleted=Arve kustutatud +PRODUCT_CREATEInDolibarr=Toode %s loodud +PRODUCT_MODIFYInDolibarr=Toote %s muudetud +PRODUCT_DELETEInDolibarr=Toode %s kustutatud +EXPENSE_REPORT_CREATEInDolibarr=Kuluaruanne %s loodud +EXPENSE_REPORT_VALIDATEInDolibarr=Kuluaruanne %s kinnitatud +EXPENSE_REPORT_APPROVEInDolibarr=Kuluaruanne %s heaks kiidetud +EXPENSE_REPORT_DELETEInDolibarr=Kuluaruanne %s kustutatud +EXPENSE_REPORT_REFUSEDInDolibarr=Kuluaruanne %s keeldutud PROJECT_CREATEInDolibarr=Projekt %s on loodud -PROJECT_MODIFYInDolibarr=Project %s modified -PROJECT_DELETEInDolibarr=Project %s deleted -TICKET_CREATEInDolibarr=Ticket %s created -TICKET_MODIFYInDolibarr=Ticket %s modified -TICKET_ASSIGNEDInDolibarr=Ticket %s assigned -TICKET_CLOSEInDolibarr=Ticket %s closed -TICKET_DELETEInDolibarr=Ticket %s deleted +PROJECT_MODIFYInDolibarr=Projekti %s muudetud +PROJECT_DELETEInDolibarr=Projekt %s kustutatud +TICKET_CREATEInDolibarr=Pilet %s loodud +TICKET_MODIFYInDolibarr=Pilet %s muudetud +TICKET_ASSIGNEDInDolibarr=Pilet %s määratud +TICKET_CLOSEInDolibarr=Pilet %s suletud +TICKET_DELETEInDolibarr=Pilet %s kustutatud ##### End agenda events ##### AgendaModelModule=Document templates for event DateActionStart=Alguskuupäev @@ -109,18 +109,18 @@ AgendaUrlOptionsNotAdmin=logina=!%s to restrict output to actions not own AgendaUrlOptions4=logint=%s to restrict output to actions assigned to user %s (owner and others). AgendaUrlOptionsProject=project=__PROJECT_ID__ to restrict output to actions linked to project __PROJECT_ID__. AgendaUrlOptionsNotAutoEvent=notactiontype=systemauto to exclude automatic events. -AgendaShowBirthdayEvents=Show birthdays of contacts -AgendaHideBirthdayEvents=Hide birthdays of contacts +AgendaShowBirthdayEvents=Näita kontaktide sünnipäevi +AgendaHideBirthdayEvents=Peida kontaktide sünnipäevad Busy=Hõivatud ExportDataset_event1=Päevakavas olevate tegevuste nimekiri DefaultWorkingDays=Default working days range in week (Example: 1-5, 1-6) -DefaultWorkingHours=Default working hours in day (Example: 9-18) +DefaultWorkingHours=Vaikimisi tööaeg (näide: 9-18) # External Sites ical ExportCal=Ekspordi kalender ExtSites=Impordi väline kalender ExtSitesEnableThisTool=Show external calendars (defined in global setup) in Agenda. Does not affect external calendars defined by users. ExtSitesNbOfAgenda=Kalendrite arv -AgendaExtNb=Calendar no. %s +AgendaExtNb=Kalendri nr. %s ExtSiteUrlAgenda=URL .ical failile ligi pääsemiseks ExtSiteNoLabel=Kirjeldus puudub VisibleTimeRange=Nähtav ajavahemik @@ -129,10 +129,10 @@ AddEvent=Loo sündmus MyAvailability=Minu saadavus ActionType=Sündmuse tüüp DateActionBegin=Sündmuse alguse kuupäev -ConfirmCloneEvent=Are you sure you want to clone the event %s? +ConfirmCloneEvent=Kas soovite kindlasti sündmuse kloonida %s ? RepeatEvent=Korda sündmust EveryWeek=Igal nädalal EveryMonth=Igal kuul DayOfMonth=Kuu päeval DayOfWeek=Nädala päeval -DateStartPlusOne=Date start + 1 hour +DateStartPlusOne=Kuupäeva algus + 1 tund diff --git a/htdocs/langs/et_EE/assets.lang b/htdocs/langs/et_EE/assets.lang index 0d459677948..0c25eb8ba5a 100644 --- a/htdocs/langs/et_EE/assets.lang +++ b/htdocs/langs/et_EE/assets.lang @@ -16,44 +16,44 @@ # # Generic # -Assets = Assets -NewAsset = New asset -AccountancyCodeAsset = Accounting code (asset) -AccountancyCodeDepreciationAsset = Accounting code (depreciation asset account) -AccountancyCodeDepreciationExpense = Accounting code (depreciation expense account) -NewAssetType=New asset type -AssetsTypeSetup=Asset type setup -AssetTypeModified=Asset type modified -AssetType=Asset type -AssetsLines=Assets +Assets = Varad +NewAsset = Uus vara +AccountancyCodeAsset = Raamatupidamise kood (vara) +AccountancyCodeDepreciationAsset = Raamatupidamise kood (amortisatsioonivara konto) +AccountancyCodeDepreciationExpense = Raamatupidamise kood (amortisatsioonikulu konto) +NewAssetType=Uus vara tüüp +AssetsTypeSetup=Varade tüübi seadistamine +AssetTypeModified=Varade tüüp on muudetud +AssetType=Vara tüüp +AssetsLines=Varad DeleteType=Kustuta -DeleteAnAssetType=Delete an asset type -ConfirmDeleteAssetType=Are you sure you want to delete this asset type? +DeleteAnAssetType=Kustuta vara tüüp +ConfirmDeleteAssetType=Kas soovite kindlasti selle vara tüübi kustutada? ShowTypeCard=Kuva tüüp '%s' # Module label 'ModuleAssetsName' -ModuleAssetsName = Assets +ModuleAssetsName = Varad # Module description 'ModuleAssetsDesc' -ModuleAssetsDesc = Assets description +ModuleAssetsDesc = Varade kirjeldus # # Admin page # -AssetsSetup = Assets setup -Settings = Settings -AssetsSetupPage = Assets setup page -ExtraFieldsAssetsType = Complementary attributes (Asset type) -AssetsType=Asset type -AssetsTypeId=Asset type id -AssetsTypeLabel=Asset type label -AssetsTypes=Assets types +AssetsSetup = Varade seadistamine +Settings = Seaded +AssetsSetupPage = Varade seadistamise leht +ExtraFieldsAssetsType = Täiendavad atribuudid (vara tüüp) +AssetsType=Vara tüüp +AssetsTypeId=Varade tüübi ID +AssetsTypeLabel=Varade tüübi silt +AssetsTypes=Varade liigid # # Menu # -MenuAssets = Assets -MenuNewAsset = New asset -MenuTypeAssets = Type assets +MenuAssets = Varad +MenuNewAsset = Uus vara +MenuTypeAssets = Tüüp varasid MenuListAssets = Loend MenuNewTypeAssets = Uus MenuListTypeAssets = Loend @@ -61,5 +61,5 @@ MenuListTypeAssets = Loend # # Module # -NewAssetType=New asset type -NewAsset=New asset +NewAssetType=Uus vara tüüp +NewAsset=Uus vara diff --git a/htdocs/langs/et_EE/banks.lang b/htdocs/langs/et_EE/banks.lang index 91cd2cc0f24..57eb2a49921 100644 --- a/htdocs/langs/et_EE/banks.lang +++ b/htdocs/langs/et_EE/banks.lang @@ -1,13 +1,13 @@ # Dolibarr language file - Source file is en_US - banks Bank=Pank -MenuBankCash=Banks | Cash -MenuVariousPayment=Miscellaneous payments -MenuNewVariousPayment=New Miscellaneous payment +MenuBankCash=Pangad | Kassa +MenuVariousPayment=Mitmesugused maksed +MenuNewVariousPayment=Uus mitmesugune makse BankName=Panga nimi FinancialAccount=Konto BankAccount=Pangakonto BankAccounts=Pangakontod -BankAccountsAndGateways=Bank accounts | Gateways +BankAccountsAndGateways=Pangakontod | Sisendid ShowAccount=Show Account AccountRef=Finantskonto viide AccountLabel=Finantskonto silt @@ -30,7 +30,7 @@ AllTime=From start Reconciliation=Vastavusse viimine RIB=Arvelduskonto number IBAN=IBAN number -BIC=BIC/SWIFT code +BIC=BIC / SWIFT kood SwiftValid=BIC/SWIFT valid SwiftVNotalid=BIC/SWIFT not valid IbanValid=BAN valid @@ -42,7 +42,7 @@ AccountStatementShort=Väljavõte AccountStatements=Kontoväljavõtted LastAccountStatements=Viimased kontoväljavõtted IOMonthlyReporting=Igakuine aruandlus -BankAccountDomiciliation=Bank address +BankAccountDomiciliation=Panga aadress BankAccountCountry=Konto riik BankAccountOwner=Konto omaniku nimi BankAccountOwnerAddress=Konto omaniku aadress @@ -76,7 +76,7 @@ TransactionsToConciliate=Entries to reconcile Conciliable=Saab viia vastavusse Conciliate=Vii vastavusse Conciliation=Vastavusse viimine -SaveStatementOnly=Save statement only +SaveStatementOnly=Salvesta ainult avaldus ReconciliationLate=Reconciliation late IncludeClosedAccount=Sh suletud tehingute summad OnlyOpenedAccount=Ainult avatud tehingud @@ -98,9 +98,9 @@ BankLineConciliated=Entry reconciled Reconciled=Reconciled NotReconciled=Not reconciled CustomerInvoicePayment=Kliendi laekumi -SupplierInvoicePayment=Vendor payment +SupplierInvoicePayment=Tarnija makse SubscriptionPayment=Liikmemaks -WithdrawalPayment=Debit payment order +WithdrawalPayment=Deebetmaksekorraldus SocialContributionPayment=Social/fiscal tax payment BankTransfer=Pangaülekanne BankTransfers=Pangaülekanded @@ -158,7 +158,7 @@ DocumentModelSepaMandate=Template of SEPA mandate. Useful for European countries DocumentModelBan=Template to print a page with BAN information. NewVariousPayment=New miscellaneous payment VariousPayment=Miscellaneous payment -VariousPayments=Miscellaneous payments +VariousPayments=Mitmesugused maksed ShowVariousPayment=Show miscellaneous payment AddVariousPayment=Add miscellaneous payment SEPAMandate=SEPA mandate diff --git a/htdocs/langs/et_EE/bills.lang b/htdocs/langs/et_EE/bills.lang index 3d3140d1068..e7d4083a6a7 100644 --- a/htdocs/langs/et_EE/bills.lang +++ b/htdocs/langs/et_EE/bills.lang @@ -1,16 +1,16 @@ # Dolibarr language file - Source file is en_US - bills Bill=Arve Bills=Arved -BillsCustomers=Customer invoices +BillsCustomers=Kliendi arved BillsCustomer=Müügiarve -BillsSuppliers=Vendor invoices +BillsSuppliers=Tarnija arved BillsCustomersUnpaid=Maksmata kliendiarved -BillsCustomersUnpaidForCompany=Unpaid customer invoices for %s -BillsSuppliersUnpaid=Unpaid vendor invoices -BillsSuppliersUnpaidForCompany=Unpaid vendors invoices for %s +BillsCustomersUnpaidForCompany=Tasumata kliendiarved %s +BillsSuppliersUnpaid=Tasumata tarnija arved +BillsSuppliersUnpaidForCompany=Tasumata tarnijate arved %s BillsLate=Hilinenud maksed BillsStatistics=Müügiiarvete statistika -BillsStatisticsSuppliers=Vendors invoices statistics +BillsStatisticsSuppliers=Tarnijate arved statistika DisabledBecauseDispatchedInBookkeeping=Disabled because invoice was dispatched into bookkeeping DisabledBecauseNotLastInvoice=Disabled because invoice is not erasable. Some invoices were recorded after this one and it will create holes in the counter. DisabledBecauseNotErasable=Disabled because cannot be erased @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma arve InvoiceProFormaDesc=Proforma arve on õige arve kujuga, kuid ei oma raamatupidamislikku tähendust. InvoiceReplacement=Parandusarve InvoiceReplacementAsk=Parandusarve asendab arve -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Kreeditarve InvoiceAvoirAsk=Kreeditarve parandab arve InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). @@ -53,9 +53,9 @@ InvoiceLine=Arve rida InvoiceCustomer=Müügiarve CustomerInvoice=Müügiarve CustomersInvoices=Müügiarved -SupplierInvoice=Vendor invoice -SuppliersInvoices=Vendors invoices -SupplierBill=Vendor invoice +SupplierInvoice=Tarnija arve +SuppliersInvoices=Tarnijate arved +SupplierBill=Tarnija arve SupplierBills=ostuarved Payment=Makse PaymentBack=Tagasimakse @@ -65,12 +65,12 @@ PaymentsBack=Tagasimaksed paymentInInvoiceCurrency=in invoices currency PaidBack=Tagasi makstud DeletePayment=Kustuta makse -ConfirmDeletePayment=Are you sure you want to delete this payment? -ConfirmConvertToReduc=Do you want to convert this %s into an absolute discount? -ConfirmConvertToReduc2=The amount will be saved among all discounts and could be used as a discount for a current or a future invoice for this customer. -ConfirmConvertToReducSupplier=Do you want to convert this %s into an absolute discount? +ConfirmDeletePayment=Kas olete kindel, et soovite selle makse kustutada? +ConfirmConvertToReduc=Kas soovite selle %s konverteerida absoluutseks allahindluseks? +ConfirmConvertToReduc2=Summa salvestatakse kõigi allahindluste hulka ja seda saab kasutada selle kliendi jooksva või tulevase arve allahindlusena. +ConfirmConvertToReducSupplier=Kas soovite selle %s konverteerida absoluutseks allahindluseks? ConfirmConvertToReducSupplier2=The amount will be saved among all discounts and could be used as a discount for a current or a future invoice for this vendor. -SupplierPayments=Vendor payments +SupplierPayments=Tarnija maksed ReceivedPayments=Laekunud maksed ReceivedCustomersPayments=Klientidelt laekunud maksed PayedSuppliersPayments=Payments paid to vendors @@ -80,16 +80,16 @@ PaymentsReports=Maksete aruanded PaymentsAlreadyDone=Juba tehtud maksed PaymentsBackAlreadyDone=Juba tehtud tagasimaksed PaymentRule=Maksereegel -PaymentMode=Payment Type +PaymentMode=Makse tüüp PaymentTypeDC=Debit/Credit Card PaymentTypePP=PayPal -IdPaymentMode=Payment Type (id) -CodePaymentMode=Payment Type (code) -LabelPaymentMode=Payment Type (label) -PaymentModeShort=Payment Type -PaymentTerm=Payment Term -PaymentConditions=Payment Terms -PaymentConditionsShort=Payment Terms +IdPaymentMode=Makse tüüp (id) +CodePaymentMode=Makse tüüp (kood) +LabelPaymentMode=Makse tüüp (silt) +PaymentModeShort=Makse tüüp +PaymentTerm=Maksetähtaeg +PaymentConditions=Maksetähtajad +PaymentConditionsShort=Maksetähtajad PaymentAmount=Makse summa PaymentHigherThanReminderToPay=Makse on suurem, kui makstava summa jääk HelpPaymentHigherThanReminderToPay=Attention, the payment amount of one or more bills is higher than the outstanding amount to pay.
Edit your entry, otherwise confirm and consider creating a credit note for the excess received for each overpaid invoice. @@ -98,7 +98,7 @@ ClassifyPaid=Liigita 'Makstud' ClassifyPaidPartially=Liigita 'Osaliselt makstud' ClassifyCanceled=Liigita 'Hüljatud' ClassifyClosed=Liigita 'Suletud' -ClassifyUnBilled=Classify 'Unbilled' +ClassifyUnBilled=Liigita „tasumata” CreateBill=Loo arve CreateCreditNote=Koosta kreeditarve AddBill=Create invoice or credit note @@ -248,7 +248,7 @@ DateInvoice=Arve kuupäev DatePointOfTax=Point of tax NoInvoice=Ühtki arvet ei ole ClassifyBill=Liigita arve -SupplierBillsToPay=Unpaid vendor invoices +SupplierBillsToPay=Tasumata tarnija arved CustomerBillsUnpaid=Maksmata kliendiarved NonPercuRecuperable=Tagastamatu SetConditions=Set Payment Terms @@ -404,7 +404,7 @@ VarAmountOneLine=Variable amount (%% tot.) - 1 line with label '%s' PaymentTypeVIR=Pangaülekanne PaymentTypeShortVIR=Pangaülekanne PaymentTypePRE=Direct debit payment order -PaymentTypeShortPRE=Debit payment order +PaymentTypeShortPRE=Deebetmaksekorraldus PaymentTypeLIQ=Sularaha PaymentTypeShortLIQ=Sularaha PaymentTypeCB=Krediitkaart @@ -428,7 +428,7 @@ Residence=Aadress IBANNumber=IBAN account number IBAN=IBAN BIC=BIC/SWIFT -BICNumber=BIC/SWIFT code +BICNumber=BIC / SWIFT kood ExtraInfos=Lisainfo RegulatedOn=Reguleeritud üksusel ChequeNumber=Tšeki nr @@ -552,4 +552,4 @@ AutoFillDateFromShort=Set start date AutoFillDateTo=Set end date for service line with next invoice date AutoFillDateToShort=Set end date MaxNumberOfGenerationReached=Max number of gen. reached -BILL_DELETEInDolibarr=Invoice deleted +BILL_DELETEInDolibarr=Arve kustutatud diff --git a/htdocs/langs/et_EE/companies.lang b/htdocs/langs/et_EE/companies.lang index b9ef4ee0fa9..df5ddbd8531 100644 --- a/htdocs/langs/et_EE/companies.lang +++ b/htdocs/langs/et_EE/companies.lang @@ -28,7 +28,7 @@ AliasNames=Hüüdnimi (ärinimi, kaubamärk, ...) AliasNameShort=Alias Name Companies=Ettevõtted CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -38,7 +38,7 @@ ThirdPartyProspectsStats=Huvilised ThirdPartyCustomers=Kliendid ThirdPartyCustomersStats=Kliendid ThirdPartyCustomersWithIdProf12=Klient koos %s või %s -ThirdPartySuppliers=Vendors +ThirdPartySuppliers=Tarnijad ThirdPartyType=Third-party type Individual=Eraisik ToCreateContactWithSameName=Will automatically create a contact/address with same information as the third party under the third party. In most cases, even if your third party is a physical person, creating a third party alone is enough. @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=Pole Vendor=Vendor +Supplier=Vendor AddContact=Uus kontakt AddContactAddress=Uus kontakt/aadress EditContact=Muuda kontakti diff --git a/htdocs/langs/et_EE/exports.lang b/htdocs/langs/et_EE/exports.lang index 69b4e92183d..0b020401a33 100644 --- a/htdocs/langs/et_EE/exports.lang +++ b/htdocs/langs/et_EE/exports.lang @@ -1,39 +1,39 @@ # Dolibarr language file - Source file is en_US - exports -ExportsArea=Ekspordi ala -ImportArea=Impordi ala -NewExport=Uus eksport -NewImport=Uus import +ExportsArea=Eksportimised +ImportArea=Import +NewExport=New Export +NewImport=New Import ExportableDatas=Eksporditav andmekogu ImportableDatas=Imporditav andmekog SelectExportDataSet=Vali eksporditav andmekog... SelectImportDataSet=Vali imporditav andmehulk... -SelectExportFields=Vali väljad, mida soovid eksportida või vali eelmääratletud ekspordi profiil -SelectImportFields=Choose 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=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: NotImportedFields=Lähtefaili väljad, mida ei impordita -SaveExportModel=Salvesta see ekspordi profiil, kui kavatsed seda hiljem uuesti kasutada... -SaveImportModel=Salvesta see impordi profiil, kui kavatsed seda hiljem uuesti kasutada... +SaveExportModel=Save your selections as an export profile/template (for reuse). +SaveImportModel=Save this import profile (for reuse) ... ExportModelName=Ekspordi profiili nimi -ExportModelSaved=Ekspordi profiil salvestatud nimega %s. +ExportModelSaved=Export profile saved as %s. ExportableFields=Eksporditavad väljad ExportedFields=Eksporditud väljad ImportModelName=Impordi profiili nimi -ImportModelSaved=Impordi profiil salvestatud nimega %s. +ImportModelSaved=Import profile saved as %s. DatasetToExport=Eksporditav andmekogu DatasetToImport=Impordi fail andmekogusse ChooseFieldsOrdersAndTitle=Vali väljade järjekord... FieldsTitle=Väljade nimed FieldTitle=Välja nimi -NowClickToGenerateToBuildExportFile=Nüüd vali liitboksis faili formaat ja klõpsa "Loo" nupul ekspordifaili loomiseks... -AvailableFormats=Saadaval olevad formaadid +NowClickToGenerateToBuildExportFile=Now, select the file format in the combo box and click on "Generate" to build the export file... +AvailableFormats=Available Formats LibraryShort=Teek Step=Samm -FormatedImport=Importimise assistent -FormatedImportDesc1=See ala võimaldab assistendi abil isikustatud andmete importimist sügavaid tehnilisi teadmisi omamata. -FormatedImportDesc2=Esimese sammuna tuleb valida imporditavate andmete liik, siis laetav fail ja seejärel laetavad väljad. -FormatedExport=Eksportimise assistent -FormatedExportDesc1=See ala võimaldab assistendi abil isikustatud andmete eksportimist sügavaid tehnilisi teadmisi omamata. -FormatedExportDesc2=Esimesena sammuna tuleb valide eelmääratletud andmekogu, seejärel sihtfailides soovitavad väljad ja nende järjekord. -FormatedExportDesc3=Kui eksporditavad andmed on valitud, saad valida sihtfaili formaadi, kuhu soovid andmeid eksportida. +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. Sheet=Leht NoImportableData=Imporditavaid andmeid ei ole (ükski moodul ei luba andmete importimist) FileSuccessfullyBuilt=File generated @@ -44,16 +44,16 @@ LineDescription=Rea kirjeldus LineUnitPrice=Rea ühikuhind LineVATRate=Rea KM määr LineQty=Rea kogus -LineTotalHT=Rea summa käibemaksuta +LineTotalHT=Amount excl. tax for line LineTotalTTC=Rea summa käibemaksuga LineTotalVAT=Rea käibemaks TypeOfLineServiceOrProduct=Rea liik (0=toode, 1=teenus) FileWithDataToImport=Imporditavate andmetega fai FileToImport=Imporditav lähtefai -FileMustHaveOneOfFollowingFormat=Imporditav fail peab olema ühes järgnevatest formaatidest -DownloadEmptyExample=Lae alla tühja lähtefaili näidis -ChooseFormatOfFileToImport=Vali kasutatav impordi faili formaat, klõpsates pildil %s selle valimiseks.. -ChooseFileToImport=Lae fail üles, seejärel klõpsa pildil %s faili kasutamiseks impordi failina... +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... SourceFileFormat=Lähtefaili formaat FieldsInSourceFile=Lähtefailis olevad väljad FieldsInTargetDatabase=Dolibarri andmebaasi sihtväljad (rasvane=kohustuslik) @@ -68,66 +68,66 @@ FieldsTarget=Sihtväljad FieldTarget=Sihtväli FieldSource=Lähteväl NbOfSourceLines=Lähtefaili ridade arv -NowClickToTestTheImport=Kontrolli üle seadistatud importimise parameetrid. Kui nad on õiged, siis klõpsa nupul "%s" importimise simulatsiooni käivitamiseks (andmebaasis andmeid ei muudeta, vaid lihtsalt simuleeritakse muudatusi hetkel) -RunSimulateImportFile=Käivita importimise simulatsioo +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 FieldNeedSource=This field requires data from the source file SomeMandatoryFieldHaveNoSource=Mõnedel kohustuslikel väljadel pole andmefailis allikat InformationOnSourceFile=Lähtefaili informatsioone InformationOnTargetTables=Sihtväljade informatsioon SelectAtLeastOneField=Vaheta ringi vähemalt üks lähteväli eksporditavate väljade veerus SelectFormat=Vali selle impordi faili formaat -RunImportFile=Käivita impordi fail -NowClickToRunTheImport=Kontrolli impordi simulatsiooni tulemust. Kui kõik on korras, käivita lõplik import. -DataLoadedWithId=All data will be loaded with the following import id: %s -ErrorMissingMandatoryValue=Kohustuslikud andmed on tühjad lähtefailis välja %s jaoks. -TooMuchErrors=On veel %s muud rida vigadega, kuid väljundit on piiratud. -TooMuchWarnings=On veel %s muud rida hoiatustega, kuid väljundit on piiratud. +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. EmptyLine=Tühi rida (ära visata) -CorrectErrorBeforeRunningImport=Enne lõpliku impordi käivitamist pead esmalt parandama kõik vead. +CorrectErrorBeforeRunningImport=You must correct all errors before running the definitive import. FileWasImported=Fail on imporditud numbriga %s. -YouCanUseImportIdToFindRecord=You can find all imported record in your database by filtering on field import_key='%s'. +YouCanUseImportIdToFindRecord=You can find all the imported records in your database by filtering on field import_key='%s'. NbOfLinesOK=Hoiatuste ja vigadeta ridu: %s. NbOfLinesImported=Edukalt imporditud ridu: %s. DataComeFromNoWhere=Sisestavat väärtust ei ole mitte kuskil lähtefailis. DataComeFromFileFieldNb=Sisestav väärtus pärineb lähtefaili %s. väljalt. -DataComeFromIdFoundFromRef=Väärtust, mis pärineb lähtefaili %s. realt, kasutatakse emaobjekti ID leidmiseks (selle kindlustamiseks, et objekt %s, millel on lähtefaili viide, oleks Dolibarris olemas). -DataComeFromIdFoundFromCodeId=Code that comes from field number %s of source file will be used to find id of parent object to use (So the code from source file must exists into dictionary %s). Note that if you know id, you can also use it into source file instead of code. Import should work in both cases. +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. DataIsInsertedInto=Lähtefailist pärinevad andmed sisestatakse järgmisse välja: -DataIDSourceIsInsertedInto=Lähtefailis leitud emaobjekti ID sisestatakse järgmisse välja: +DataIDSourceIsInsertedInto=The id of parent object was found using the data in the source file, will be inserted into the following field: DataCodeIDSourceIsInsertedInto=Koodist leitud emarea ID sisestatakse järgmisse välja: SourceRequired=Andmeväärtus on kohustuslik SourceExample=Võimaliku andmeväärtuse näide ExampleAnyRefFoundIntoElement=Iga elemendi %s jaoks leitud viide ExampleAnyCodeOrIdFoundIntoDictionary=Any code (or id) found into dictionary %s -CSVFormatDesc=Comma Separated Value faili formaat (.csv).
See on tekstifaili formaat, kus väljad on eraldatud eraldajaga [ %s ]. Kui välja sisus leidub eraldaja, eraldatakse väli teistest väljadest eraldusssümboliga [ %s ]. Eraldussümboli paomärk on [ %s ]. -Excel95FormatDesc=Excel faili formaat (.xls)
Excel 95 formaat (BIFF5). -Excel2007FormatDesc=Excel faili formaat (.xlsx)
Excel 2007 formaat (SpreadsheetML). +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). TsvFormatDesc=Tab Separated Value faili formaat (.tsv)
See on tekstifaili formaat, kus väljad on eraldatud tabulaatoriga [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 lisavalikud -Separator=Eraldaja -Enclosure=Aedik +CsvOptions=CSV format options +Separator=Field Separator +Enclosure=String Delimiter SpecialCode=Erikood ExportStringFilter=%% allows replacing one or more characters in the text -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 +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 ImportFromLine=Import starting from line number EndAtLineNb=End at line number -ImportFromToLine=Import line numbers (from - to) -SetThisValueTo2ToExcludeFirstLine=For example, set this value to 3 to exclude the 2 first lines -KeepEmptyToGoToEndOfFile=Keep this field empty to go up to the end of file -SelectPrimaryColumnsForUpdateAttempt=Select column(s) to use as primary key for update attempt +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 ImportDataset_user_1=Users (employees or not) and properties -ComputedField=Computed field +ComputedField=Arvutatud väli ## filters SelectFilterFields=Kui soovid mõnede väärtuste põhjal filtreerida, siis sisesta nad siia. FilteredFields=Filtreeritav väl FilteredFieldsValues=Filtri väärtus FormatControlRule=Format control rule ## imports updates -KeysToUseForUpdates=Key to use for updating data +KeysToUseForUpdates=Key (column) to use for updating existing data NbInsert=Number of inserted lines: %s NbUpdate=Number of updated lines: %s MultipleRecordFoundWithTheseFilters=Multiple records have been found with these filters: %s diff --git a/htdocs/langs/et_EE/holiday.lang b/htdocs/langs/et_EE/holiday.lang index ecb10d79497..a811df5093a 100644 --- a/htdocs/langs/et_EE/holiday.lang +++ b/htdocs/langs/et_EE/holiday.lang @@ -107,7 +107,7 @@ UpdateConfCPOK=Edukalt uuendatud. Module27130Name= Management of leave requests Module27130Desc= Management of leave requests ErrorMailNotSend=E-kirja saatmisel tekkis viga: -NoticePeriod=Notice period +NoticePeriod=Teavitamisperiood #Messages HolidaysToValidate=Validate leave requests HolidaysToValidateBody=Below is a leave request to validate diff --git a/htdocs/langs/et_EE/interventions.lang b/htdocs/langs/et_EE/interventions.lang index 304f7a1f4bb..f9a8bb06dfe 100644 --- a/htdocs/langs/et_EE/interventions.lang +++ b/htdocs/langs/et_EE/interventions.lang @@ -35,7 +35,7 @@ InterventionValidatedInDolibarr=Sekkumine %s on kinnitatud InterventionModifiedInDolibarr=Intervention %s modified InterventionClassifiedBilledInDolibarr=Intervention %s set as billed InterventionClassifiedUnbilledInDolibarr=Intervention %s set as unbilled -InterventionSentByEMail=Intervention %s sent by email +InterventionSentByEMail=Sekkumine %s saadetud e-postiga InterventionDeletedInDolibarr=Intervention %s deleted InterventionsArea=Interventions area DraftFichinter=Draft interventions diff --git a/htdocs/langs/et_EE/main.lang b/htdocs/langs/et_EE/main.lang index 61150076e73..045be9f36b2 100644 --- a/htdocs/langs/et_EE/main.lang +++ b/htdocs/langs/et_EE/main.lang @@ -936,11 +936,11 @@ SearchIntoUsers=Kasutajad SearchIntoProductsOrServices=Products or services SearchIntoProjects=Projektid SearchIntoTasks=Ülesanded -SearchIntoCustomerInvoices=Customer invoices -SearchIntoSupplierInvoices=Vendor invoices +SearchIntoCustomerInvoices=Kliendi arved +SearchIntoSupplierInvoices=Tarnija arved SearchIntoCustomerOrders=Sales orders SearchIntoSupplierOrders=Purchase orders -SearchIntoCustomerProposals=Customer proposals +SearchIntoCustomerProposals=Kliendi pakkumised SearchIntoSupplierProposals=Vendor proposals SearchIntoInterventions=Sekkumised SearchIntoContracts=Lepingud diff --git a/htdocs/langs/et_EE/orders.lang b/htdocs/langs/et_EE/orders.lang index 2125c5f13af..8c792f3fc7b 100644 --- a/htdocs/langs/et_EE/orders.lang +++ b/htdocs/langs/et_EE/orders.lang @@ -17,7 +17,7 @@ SupplierOrder=Purchase order SuppliersOrders=Purchase orders SuppliersOrdersRunning=Current purchase orders CustomerOrder=Sales Order -CustomersOrders=Sales Orders +CustomersOrders=Müügitellimused CustomersOrdersRunning=Current sales orders CustomersOrdersAndOrdersLines=Sales orders and order details OrdersDeliveredToBill=Sales orders delivered to bill diff --git a/htdocs/langs/et_EE/other.lang b/htdocs/langs/et_EE/other.lang index 0af94d6bd39..6a0e6fbdcd2 100644 --- a/htdocs/langs/et_EE/other.lang +++ b/htdocs/langs/et_EE/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=Sekkumine %s on kinnitatud. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/et_EE/products.lang b/htdocs/langs/et_EE/products.lang index 5eb54c89bf3..d488dbb1fea 100644 --- a/htdocs/langs/et_EE/products.lang +++ b/htdocs/langs/et_EE/products.lang @@ -79,7 +79,7 @@ ErrorProductAlreadyExists=Toode viitega %s on juba olemas. ErrorProductBadRefOrLabel=Vale viite või nime väärtus. ErrorProductClone=Toote või teenuse kloonimisel tekkis probleem. ErrorPriceCantBeLowerThanMinPrice=Error, price can't be lower than minimum price. -Suppliers=Vendors +Suppliers=Tarnijad SupplierRef=Vendor SKU ShowProduct=Näita toodet ShowService=Näita teenust diff --git a/htdocs/langs/et_EE/projects.lang b/htdocs/langs/et_EE/projects.lang index 07a4497af69..55e25fe2ef9 100644 --- a/htdocs/langs/et_EE/projects.lang +++ b/htdocs/langs/et_EE/projects.lang @@ -146,7 +146,7 @@ ErrorShiftTaskDate=Ülesande kuupäeva ei ole võimalik nihutada vastavalt uuele ProjectsAndTasksLines=Projektid ja ülesanded ProjectCreatedInDolibarr=Projekt %s on loodud ProjectValidatedInDolibarr=Project %s validated -ProjectModifiedInDolibarr=Project %s modified +ProjectModifiedInDolibarr=Projekti %s muudetud TaskCreatedInDolibarr=Ülesanne %s on loodud TaskModifiedInDolibarr=Ülesannet %s on muudetud TaskDeletedInDolibarr=Ülesanne %s on kustutatud diff --git a/htdocs/langs/et_EE/suppliers.lang b/htdocs/langs/et_EE/suppliers.lang index a68a5d7df7b..715be4d8897 100644 --- a/htdocs/langs/et_EE/suppliers.lang +++ b/htdocs/langs/et_EE/suppliers.lang @@ -1,6 +1,6 @@ -# Dolibarr language file - Source file is en_US - suppliers -Suppliers=Vendors -SuppliersInvoice=Vendor invoice +# Dolibarr language file - Source file is en_US - vendors +Suppliers=Tarnijad +SuppliersInvoice=Tarnija arve ShowSupplierInvoice=Show Vendor Invoice NewSupplier=New vendor History=Ajalugu @@ -15,15 +15,15 @@ SomeSubProductHaveNoPrices=Mõnedel alatoodetel pole määratletud hinda AddSupplierPrice=Add buying price ChangeSupplierPrice=Change buying price SupplierPrices=Vendor prices -ReferenceSupplierIsAlreadyAssociatedWithAProduct=See hankija viide on juba seotud viitega: %s +ReferenceSupplierIsAlreadyAssociatedWithAProduct=This vendor reference is already associated with a product: %s NoRecordedSuppliers=No vendor recorded -SupplierPayment=Vendor payment +SupplierPayment=Tarnija makse SuppliersArea=Vendor area RefSupplierShort=Ref. vendor Availability=Kättesaadavus -ExportDataset_fournisseur_1=Vendor invoices list and invoice lines +ExportDataset_fournisseur_1=Vendor invoices and invoice details ExportDataset_fournisseur_2=Vendor invoices and payments -ExportDataset_fournisseur_3=Purchase orders and order lines +ExportDataset_fournisseur_3=Purchase orders and order details ApproveThisOrder=KIida see tellimuse heaks ConfirmApproveThisOrder=Are you sure you want to approve order %s? DenyingThisOrder=Deny this order @@ -35,13 +35,13 @@ ListOfSupplierProductForSupplier=List of products and prices for vendor %s%s
' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/eu_ES/accountancy.lang b/htdocs/langs/eu_ES/accountancy.lang index bb141cb9eb0..758d9c340a5 100644 --- a/htdocs/langs/eu_ES/accountancy.lang +++ b/htdocs/langs/eu_ES/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/eu_ES/admin.lang b/htdocs/langs/eu_ES/admin.lang index 085961d7266..0fdb64717fc 100644 --- a/htdocs/langs/eu_ES/admin.lang +++ b/htdocs/langs/eu_ES/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Create/modify services Permission534=Delete services Permission536=See/manage hidden services Permission538=Export services -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Read donations Permission702=Create/modify donations Permission703=Delete donations @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/eu_ES/bills.lang b/htdocs/langs/eu_ES/bills.lang index 0a03fd602e1..a90736a569d 100644 --- a/htdocs/langs/eu_ES/bills.lang +++ b/htdocs/langs/eu_ES/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma invoice InvoiceProFormaDesc=Proforma invoice is an image of a true invoice but has no accountancy value. InvoiceReplacement=Replacement invoice InvoiceReplacementAsk=Replacement invoice for invoice -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Credit note InvoiceAvoirAsk=Credit note to correct invoice InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/eu_ES/companies.lang b/htdocs/langs/eu_ES/companies.lang index d4d0feb7315..6bd24295b2d 100644 --- a/htdocs/langs/eu_ES/companies.lang +++ b/htdocs/langs/eu_ES/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias name (commercial, trademark, ...) AliasNameShort=Alias Name Companies=Companies CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=None Vendor=Vendor +Supplier=Vendor AddContact=Kontaktua sortu AddContactAddress=Kontua/helbidea sortu EditContact=Kontaktua editatu diff --git a/htdocs/langs/eu_ES/other.lang b/htdocs/langs/eu_ES/other.lang index 2a38543e942..aa113e36f92 100644 --- a/htdocs/langs/eu_ES/other.lang +++ b/htdocs/langs/eu_ES/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=The intervention %s has been validated. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/eu_ES/website.lang b/htdocs/langs/eu_ES/website.lang index 4771a5d59d2..df217e77646 100644 --- a/htdocs/langs/eu_ES/website.lang +++ b/htdocs/langs/eu_ES/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/fa_IR/accountancy.lang b/htdocs/langs/fa_IR/accountancy.lang index a95ab2d55ed..5b8e93fda67 100644 --- a/htdocs/langs/fa_IR/accountancy.lang +++ b/htdocs/langs/fa_IR/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=نتیجۀ حساب حساب‌داری (ضرر) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=دفتر خاتمه ACCOUNTING_ACCOUNT_TRANSFER_CASH=حساب‌حسابداری انتقال پول بین‌بانکی +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=حساب حساب‌داری انتظار DONATION_ACCOUNTINGACCOUNT=حساب حساب‌داری ثبت کمک و اعانه diff --git a/htdocs/langs/fa_IR/admin.lang b/htdocs/langs/fa_IR/admin.lang index 14062d810cf..a142ce5e7c8 100644 --- a/htdocs/langs/fa_IR/admin.lang +++ b/htdocs/langs/fa_IR/admin.lang @@ -149,7 +149,7 @@ SystemToolsAreaDesc=این واحد دربردارندۀ عوامل مربوط Purge=پاک‌کردن PurgeAreaDesc=این صفحه به شما امکان حذف همۀ فایل‌های تولید شده و ذخیره شده با Dolibarr  را می‌دهد (فایل‌های موقت یا همۀ فایلهای داخل پوشۀ %s). استفاده از این قابلیت در شرایط عادی ضرورتی ندارد. این قابلیت برای کاربرانی ایجاد شده است که میزبانی وبگاه آن‌ها امکان حذف فایل‌هائی که توسط سرویس‌دهندۀ وب ایجاد شده‌اند را نداده است. PurgeDeleteLogFile=حذف فایل‌های گزارش‌کار، شامل تعریف %s برای واحد گزارش‌کار سامانه Syslog (خطری برای از دست دادن داده‌ها نیست) -PurgeDeleteTemporaryFiles=Delete all temporary files (no risk of losing data). Note: Deletion is done only if the temp directory was created 24 hours ago. +PurgeDeleteTemporaryFiles=حذف همۀ فایل‌های موقت (خطری برای از دست دادن داده نیست). توجه: حذف تها در صورتی انجام خواهد شد که پوشۀ موقتی حداقل 24 ساعت قبل ساخته شده باشد. PurgeDeleteTemporaryFilesShort=حذف فایل‌های موقتی PurgeDeleteAllFilesInDocumentsDir=حذف همۀ فایل‌های موجود در پوشۀ: %s.
این باعث حذف همۀ مستنداتی که به عناصر مربوطند ( اشخاص سوم، صورت‌حساب و غیره ...)، فایل‌هائی که به واحد ECM ارسال شده‌اند، نسخه‌برداری‌های پشتیبان بانک‌داده و فایل‌های موقت خواهد شد. PurgeRunNow=شروع پاک‌سازی @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=کادرهای تائید از جدول ExtrafieldLink=پیوند به یک شیء ComputedFormula=بخش محاسبه شده ComputedFormulaDesc=شما در این‌جا می‌توانید فرمولی را با استفاده از مشخصات دیگر یک شیء یا یک کدنوشتۀ PHP وارد نمائید تا یک مقدار پویای محاسبه شده دریافت کنید. شما همچنین می‌توانید هر فرمول سازگار با PHP را به همراه عمل‌گر شرطی "?" وارد نمائید که با یک شیء سراسری دنبال می‌شود: $db, $conf, $langs, $mysoc, $user, $object.
هشدار: تنها برخی از مشخصه‌های $object در دسترس هستند. در صورتی که نیاز به مشخصه‌ای دارید که بارگذاری نشده، همانند مثال دوم خودتان باید آن شیء را واکشی نمائید.
استفاده از یک بخش محاسبه‌شده به آن معناست که شما قادر نخواهید باد که از رابط خود مقداری وارد نمائید. همچنین، در صورتی که یک خطای نوشتاری وجود داشته باشد، فرمول هیچ چیز ارائه نخواهد داد.

مثال فرمول:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

مثال بارگذاری مجدد شیئ
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

مثال دیگر فرمول برای اازام به بارگذاری شیء و والد آن:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=بخش محاسبه‌شدۀ فروشگاه +ComputedpersistentDesc=بخش‌های محاسبه‌شدۀ اضافی در پایگاه داده ذخیره خواهند شد، به‌هرحال مقدار تنها در زمانی دوباره محاسبه خواهد شد که شیء این بخش تغییر کند. در صورتی که بخش محاسبه‌شده به سایر اشیاء یا داده‌های سراسری وابسته باشد، این مقدار ممکن است خطا باشد!! ExtrafieldParamHelpPassword=خالی رها کردن این بخش به معنای این است که مقدار بدون حفاظت ذخیره خواهد شد (بخش مربوطه باید با یک ستاره روی صفحه پنهان باشد).
'auto' را برای استفاده از قواعد حفاظت برای ذخیرۀ گذرواژه در بانک‌داده ذخیره کنید (مقدار خوانده شده کدبندی شده است و امکان خواندن مقدار اصلی دیگر وجود نخواهد داشت) ExtrafieldParamHelpselect=فهرست مقادیر باید به صورت سطور به شکل key,value باشد (که key نمی‌تواند برابر با 0 باشد.)

برای مثال:
1,value1
2,value2
code3,value3
...

برای برخورداری از فهرستی وابسته به فهرست دیگری از مشخصات تکمیلی:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

برای برخورداری از یک فهرست وابسته به یک فهرست دیگر:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=فهرست مقادیر باید سطوری به شکل key,value باشد که (که key نمی‌تواند برابر با 0 باشد)

برای مثال:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=فهرست مقادیر باید سطوری به شکل ExtrafieldParamHelpsellist=فهرست مقادیری که از یک جدول گرفته می‌شود
روش درج: table_name:label_field:id_field::filter
مثال: c_typent:libelle:id::filter

- idfilter برای primary int key ضروری است
- فیلتر می‌تواند یک آزمایش ساده باشد (مثلا active=1) تا صرفا مقدار فعال را نمایش دهد.
شما همچنین در فیلتر می‌توانید از $ID$ استفاده کنید که برابر با شناسۀ کنونی شیء کنونی است
برای انجام یک جستار SELECT در فیلتر از $SEL$ استفاده نمائید.
در صورتی که بخواهید بخش‌های دیگر - extrafields را فیلتر کنید از این روش استفاده کنید extra.fieldcode=... (که fieldcode درآن کد مربوط به آن extrafield است)

برای دریافت یک فهرست بسته به یک فهرست تکمیلی از مشخصه‌های دیگر:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

برای دریافت فهرستی که مبتنی بر فهرستی دیگر است:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=فهرست مقادیری که از یک جدول گرفته می‌شود
روش درج: table_name:label_field:id_field::filter
مثال: c_typent:libelle:id::filter

filter می‌تواند یک آزمایش ساده باشد (مثال active=1) برای نمایش مقدار فعال
شما همچنین می‌توانید از $ID$ در فیلتر استفاده نمائید که شناسۀ کنونی شیء فعلی است
برای انجام جستار SELECTدر فیلتر از $SEL$
اگر بخواهید از extrafields در فیلتر استفاده نمائید، از روش‌درج extra.fieldcode=... استفاده نمائید، (که کد فیلتر، همان کد extrafiled است)

باری دریافت ک فهرست وابسته به یک فهرست تکمیلی از مشخصه‌ها دیگر:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

برای دریافت یک فهرست وابسته به یک فهرست دیگر:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=مؤلفه‌ها باید به شکل ObjectName:Classpath باشد،
روش درج: ObjectName:Classpath
مثال‌ها:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=برای جداکنندۀ ساده خالی بگذارید
برای یک جداکنندۀ نزولی به 1 تنظیم کنید (به طور پیش‌فرض باز است)
برای یک جداکنندۀ نزولی به 2 تنظیم کنید ( به طور پیش‌فرض نزول کرده است) LibraryToBuildPDF=کتابخانۀ قابل استفاده برای تولید PDF LocalTaxDesc=برخی کشورها دو یا سه سطر مالیات در خصوص هر سطر از صورت‌حساب دارند. در این حالت، نوع مالیات دوم و سوم و نرخ آن را تعیین کنید. انواع قابل درج عبارتند از:
1: مالیات محلی به محصولات و خدمات بدون مالیات‌برارزش‌افزوده اختصاص داده می‌شود (مالیات محلی بر مبنای مبلغ بدون مالیات بر ارزش افزوده محاسبه می‌شود)
2: مالیات محلی بر محصولات و خدمات به‌همراه مالیات‌بر‌ارزش‌افزوده (مالیات‌محلی بر مبنای مبلغ + مالیات اصلی محاسبه می‌شود)
3: مالیات محلی بر محصولات بدون مالیات بر ارزش افزوده (مالیات محلی بر اساس مبلع بدون مالیات حساب می‌شود)
4: مالیت محلی بر محصولات به همراه مالیات بر ارزش افزوده محاسبه می‌شود (مالیات محلی بر اساس مبلغ + مالیات بر ارزش افزوده اصلی محاسبه می‌شود)
5: مالیات محلی بر بر خدمات بدون مالیات بر ارزش افزوده محاسبه می‌شود (مالیات محلی بر اساس مبلغ بدون مالیات بر ارزش افزوده)
6: مالیات محلی بر خدمات و شامل مالیات بر ارزش افزوده ( مالیات محلی بر اساس مبلغ + مالیات بر ارزش افزوده) SMS=پیامک @@ -804,7 +807,7 @@ Permission401=ملاحظۀ تخفیف‌ها Permission402=ساخت/ویرایش تخفیف‌ها Permission403=اعتباردهی تخفیف‌ها Permission404=حذف تخفیف‌ها -Permission430=Use Debug Bar +Permission430=استفاده از نوار اشکال‌یابی Permission511=ملاحظۀ پرداخت حقوق‌ها Permission512=ساخت/ویرایش پرداخت حقوق Permission514=حذف پرداخت حقوق @@ -819,9 +822,9 @@ Permission532=ایجاد/ویرایش خدمات Permission534=حذف خدمات Permission536=مشاهده/مدیریت خدمات پنهان Permission538=صادرکردن خدمات -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=خواندن صورت‌حساب‌های مواد +Permission651=ایجاد/به‌هنگام سازی صورت‌حساب‌های موا +Permission652=حذف صورت‌حساب‌های مواد Permission701=ملاحظۀ کمک‌های‌مالی Permission702=ایجاد/ویرایش کمک‌های‌مالی Permission703=حذف کمک‌های‌مالی @@ -841,12 +844,12 @@ Permission1101=ملاحظۀ سفارشات تحویل Permission1102=ساخت/ویرایش سفارشات تحویل Permission1104=اعتباردهی سفارشات تحویل Permission1109=حذف سفارشات تحویل -Permission1121=Read supplier proposals -Permission1122=Create/modify supplier proposals -Permission1123=Validate supplier proposals -Permission1124=Send supplier proposals -Permission1125=Delete supplier proposals -Permission1126=Close supplier price requests +Permission1121=خواندن پیشنهادهای تامین کنندگان +Permission1122=ساخت/ویرایش پیشنهاد‌های تامین‌کنندگان +Permission1123=تائید اعتبار پیشنهادهای تامین‌کنندگان +Permission1124=ارسال پیشنهادهای تامین کنندگان +Permission1125=حذف پیشنهادهای تامین‌کنندگان +Permission1126=بستن درخواست قیمت تامین کنندگان Permission1181=ملاحظۀ تامین‌کنندگان Permission1182=خواندن سفارشات خرید Permission1183=ساخت/ویرایش سفارشات خرید @@ -882,15 +885,15 @@ Permission2503=تسلیم یا حذف مستندات Permission2515=تنظیم پوشه‌های مستندات Permission2801=استفاده از متقاضی FTP در حالت خواندنی (منحصر به مرور و دریافت) Permission2802=استفاده از متقاضی FTP در حالت نوشتنی (حذف یا ارسال فایل) -Permission3200=Read archived events and fingerprints -Permission4001=See employees -Permission4002=Create employees -Permission4003=Delete employees -Permission4004=Export employees -Permission10001=Read website content -Permission10002=Create/modify website content (html and javascript content) -Permission10003=Create/modify website content (dynamic php code). Dangerous, must be reserved to restricted developers. -Permission10005=Delete website content +Permission3200=خواندن روی‌دادهای بایگانی شده و اثرانگشت‌ها +Permission4001=نمایش کارمندان +Permission4002=ساخت کارمند +Permission4003=حذف کارمند +Permission4004=صادرکردن کارمندان +Permission10001=خواندن محتوای وبگاه +Permission10002=ساخت/ویرایش محتوای وبگاه (محتوای html و javascript ) +Permission10003=ساخت/ویرایش محتوای وبگاه (کد پویای PHP). خطرناک، تنها باید تحت نظر توسعه‌دهندگان مشخص و محدود باشد. +Permission10005=حذف محتوای وبگاه Permission20001=ملاحظۀ درخواست‌های مرخصی (درخواست‌های مرخصی افراد تحت مدیریت شما) Permission20002=ساخت/ویرایش درخواست‌های مرخصی شما (شما و افراد تحت نظر شما) Permission20003=حذف درخواست‌های مرخصی @@ -904,19 +907,19 @@ Permission23004=اجرای وظایف زمان‌بندی‌شده Permission50101=استفاده از صندوق POS Permission50201=ملاحظۀ تراکنش‌ها Permission50202=واردکردن تراکنش‌ها -Permission50401=Bind products and invoices with accounting accounts -Permission50411=Read operations in ledger -Permission50412=Write/Edit operations in ledger -Permission50414=Delete operations in ledger -Permission50415=Delete all operations by year and journal in ledger -Permission50418=Export operations of the ledger -Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year -Permission50440=Manage chart of accounts, setup of accountancy -Permission51001=Read assets -Permission51002=Create/Update assets -Permission51003=Delete assets -Permission51005=Setup types of asset +Permission50401=بندکردن محصولات و صورت‌حساب‌های با حساب‌های حساب‌داری +Permission50411=خواندن عملیات موجود در دفترکل +Permission50412=نوشتن/ویرایش عملیات در دفترکل +Permission50414=حذف عملیات از دفترکل +Permission50415=حذف همۀ عملیات در یک سال یا یک دفترروزنامه +Permission50418=صادرکردن عمیات یک دفترکل +Permission50420=گزارش و صادرکردن گزارشات ( گردش مالی، مانده، دفترروزنامه، دفترکل) +Permission50430=تعریف و بستن بازۀ سال‌مالی +Permission50440=مدیریت نمودار حساب‌ها، برپاسازی حساب‌داری +Permission51001=خواندن دارائی‌ها +Permission51002=ساخت/به‌روزرسانی دارائی‌ها +Permission51003=حذف دارائی‌ها +Permission51005=برپاسازی انواع دارائی‌ها Permission54001=چاپ Permission55001=ملاحظۀ نظرسنجی‌ها Permission55002=ساخت/ویرایش نظرسنجی‌ها @@ -1110,7 +1113,7 @@ AreaForAdminOnly=مقادیر برپاسازی تنها توسط کاربرا SystemInfoDesc=اطلاعات سامانه، اطلاعاتی فنی است که در حالت فقط خواندنی است و تنها برای مدیران قابل نمایش است. SystemAreaForAdminOnly=این ناحیه تنها برای کاربران مدیر در دسترس است. مجوزهای کاربران Dolibarr  این محدودیت‌ها را تغییر نمی‌دهد. CompanyFundationDesc=ویرایش اطلاعات مربوط به شرکت/موجودیت. بر روی "%s" یا "%s" در انتهای صفحه کلیک نمائید. -AccountantDesc=If you have an external accountant/bookkeeper, you can edit here its information. +AccountantDesc=در صورتی‌که شما یک حساب‌دار/دفتردار بیرونی دارید، می‌توانید اطلاعات وی را این‌جا ویرایش نمائید AccountantFileNumber=کد حساب‌دار DisplayDesc=مقادیری که بر شکل و رفتار Dolibarr اثرگذارند از این‌جا قابل تغییرند. AvailableModules=برنامه‌ها/واحد‌های دردسترس @@ -1923,5 +1926,5 @@ IFTTTDesc=این واحد برای راه‌انداختن رخدادها بر I UrlForIFTTT=نشانی اینترنتی نهائی برای IFTTT YouWillFindItOnYourIFTTTAccount=شما آن را بر حساب IFTTT خود پیدا خواهید کرد EndPointFor=نقطۀ آخر برای %s : %s -DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +DeleteEmailCollector=حذف جمع‌آورندۀ رایانامه +ConfirmDeleteEmailCollector=آیا مطمئن هستید می‌خواهید این جمع‌آورندۀ رایانامه را حذف کنید؟ diff --git a/htdocs/langs/fa_IR/agenda.lang b/htdocs/langs/fa_IR/agenda.lang index 73f931ebe52..e1f74dbf8c9 100644 --- a/htdocs/langs/fa_IR/agenda.lang +++ b/htdocs/langs/fa_IR/agenda.lang @@ -38,7 +38,7 @@ ActionsEvents=روی‌دادهائی که Dolibarr برای آن‌ها در ص EventRemindersByEmailNotEnabled=یادآورنده‌های روی‌داد توسط رایانامه در بخش برپاسازی واحد %s فعال نشده اند. ##### Agenda event labels ##### NewCompanyToDolibarr=شخص‌سوم %s ساخته شد -COMPANY_DELETEInDolibarr=Third party %s deleted +COMPANY_DELETEInDolibarr=طرف‌سوم %s حذف شد ContractValidatedInDolibarr=قرارداد %s تائید شد CONTRACT_DELETEInDolibarr=قرارداد %s حذف شد PropalClosedSignedInDolibarr=پیشنهاد %s امضا شد diff --git a/htdocs/langs/fa_IR/bills.lang b/htdocs/langs/fa_IR/bills.lang index 567e78c4bb7..42ecb831c69 100644 --- a/htdocs/langs/fa_IR/bills.lang +++ b/htdocs/langs/fa_IR/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=پیش‌صورت‌حساب InvoiceProFormaDesc=پیش‌صورت‌حساب تصویری درست از یک صورت‌حساب است اما ارزش حساب‌داری ندارد. InvoiceReplacement=صورت‌حساب تعویض InvoiceReplacementAsk=صورت‌حساب تعویض برای صورت‌حساب -InvoiceReplacementDesc=صورت‌حساب تعویض برای لغو یا جایگزینی کامل یک صورت‌حساب در هنگامی که هیچ مبلغی هنوز دریافت نشده است.

نکته: تنها صورت‌حساب‌های پرداخت‌نشده قابل تعویض هستند. در صورتی که صورت‌حسابی که تعویض می‌کنید هنوز بسته نشده، به طور خودکار به صورت "معلق" بسته خواهد شد. +InvoiceReplacementDesc=فاکتور تعویض در هنگام جایگزینی یک صورت‌حساب که هرگز برای آن پرداختی وجود ندارد استفاده می‌شود.

توجه: تنها صورت‌حساب‌های بدون پرداخت قابلیت جایگزین شدن دارند. در صورتی که صورت‌حسابی که جایگزین می‌کنید هنوز بسته نشده باشد، به طور خودکار به شکل "معلق" بسته خواهد شد. InvoiceAvoir=یادداشت اعتباری InvoiceAvoirAsk=یادداشت اعتباری برای اصلاح صورت‌حساب InvoiceAvoirDesc=یادداشت اعتباری یک صورت‌حساب منفی است که این واقعیت را اصلاح می‌کند که یک صورت‌حساب مبلغی متفاوت از مبلغی که واقعا پرداخت شده نشان می‌دهد (مثلا مشتری به اشتباه مبلغی بیش از مبلغ صورت‌حساب پرداخت کرده، یا این‌که مبلغ کامل را به دلیل بازگرداندن بعضی از کالاها پرداخت نخواهد کرد). @@ -66,10 +66,10 @@ paymentInInvoiceCurrency=به واحد‌پولی صورت‌حساب PaidBack=پرداخت برگردانده شد DeletePayment=حذف پرداخت ConfirmDeletePayment=آیا مطمئنید که می‌خواهید این پرداخت را حذف کنید؟ -ConfirmConvertToReduc=Do you want to convert this %s into an absolute discount? -ConfirmConvertToReduc2=The amount will be saved among all discounts and could be used as a discount for a current or a future invoice for this customer. -ConfirmConvertToReducSupplier=Do you want to convert this %s into an absolute discount? -ConfirmConvertToReducSupplier2=The amount will be saved among all discounts and could be used as a discount for a current or a future invoice for this vendor. +ConfirmConvertToReduc=آیا می‌خواهید این %s را به یک تخفیفت مطلق تبدیل کنید؟ +ConfirmConvertToReduc2=این مبلغ در میان همۀ تخفیف‌ها ذخیره خواهد شد و می‌تواند به‌عنوان یک صورت‌حساب فعلی یا آینده برای این مشتری مورد استفاده قرار گیرد. +ConfirmConvertToReducSupplier=آیا می‌خواهید این %s را به یک تخفیفت مطلق تبدیل کنید؟ +ConfirmConvertToReducSupplier2=این مبلغ در میان همۀ تخفیف‌ها ذخیره خواهد شد و می‌تواند به‌عنوان یک صورت‌حساب فعلی یا آینده برای این فروشنده مورد استفاده قرار گیرد. SupplierPayments=پرداخت‌های فروشندگان ReceivedPayments=پول‌های دریافتی ReceivedCustomersPayments=پول‌های دریافت شده از مشتریان diff --git a/htdocs/langs/fa_IR/companies.lang b/htdocs/langs/fa_IR/companies.lang index a400f0772e7..379ad776c06 100644 --- a/htdocs/langs/fa_IR/companies.lang +++ b/htdocs/langs/fa_IR/companies.lang @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=تخفیف مطلق فروشندگان(وارد SupplierAbsoluteDiscountMy=تخفیف مطلق فروشندگان(واردشدۀ خودشما) DiscountNone=هیچ‌یک Vendor=فروشنده +Supplier=فروشنده AddContact=ساخت طرف‌تماس AddContactAddress=ساخت طرف‌تماس/نشانی EditContact=ویرایش طرف‌تماس diff --git a/htdocs/langs/fa_IR/main.lang b/htdocs/langs/fa_IR/main.lang index d68b3a85323..e5d0d766ec5 100644 --- a/htdocs/langs/fa_IR/main.lang +++ b/htdocs/langs/fa_IR/main.lang @@ -842,11 +842,11 @@ Exports=صادرات ExportFilteredList=فهرست گزینشی صادرا ExportList=فهرست صادرات ExportOptions=گزینه‌های صادرکردن -IncludeDocsAlreadyExported=Include docs already exported -ExportOfPiecesAlreadyExportedIsEnable=Export of pieces already exported is enable -ExportOfPiecesAlreadyExportedIsDisable=Export of pieces already exported is disable -AllExportedMovementsWereRecordedAsExported=All exported movements were recorded as exported -NotAllExportedMovementsCouldBeRecordedAsExported=Not all exported movements could be recorded as exported +IncludeDocsAlreadyExported=دربرگرفتن مستنداتی که قبلا صادر شده‌اند +ExportOfPiecesAlreadyExportedIsEnable=دربرگیری بخش‌هائی که قبلا صادر شده‌اند فعال است +ExportOfPiecesAlreadyExportedIsDisable=دربرگیری بخش‌هائی که قبلا صادر شده‌اند غیر فعال است +AllExportedMovementsWereRecordedAsExported=همۀ جابه‌جائی‌های صادر شده به عنوان صادرشده ثبت شد +NotAllExportedMovementsCouldBeRecordedAsExported=همۀ جابه‌جائی‌های صادرشده نمی‌توانند به‌عنوان صادرشده ثبت شوند Miscellaneous=متفرقه Calendar=تقویم GroupBy=گروه‌بندی توسط... @@ -978,4 +978,4 @@ SeePrivateNote=ملاحظۀ یادداشت خصوصی PaymentInformation=اطلاعات پرداخت ValidFrom=معتبر از ValidUntil=معتبر تا -NoRecordedUsers=No users +NoRecordedUsers=کاربری نیست diff --git a/htdocs/langs/fa_IR/other.lang b/htdocs/langs/fa_IR/other.lang index d7787db0f50..26646bd3e4c 100644 --- a/htdocs/langs/fa_IR/other.lang +++ b/htdocs/langs/fa_IR/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=مداخله٪ s را دارای اعتبار بوده است. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/fa_IR/website.lang b/htdocs/langs/fa_IR/website.lang index 8720bfb102b..e8d9603803b 100644 --- a/htdocs/langs/fa_IR/website.lang +++ b/htdocs/langs/fa_IR/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/fi_FI/accountancy.lang b/htdocs/langs/fi_FI/accountancy.lang index a855b64b9b3..96ae44884fd 100644 --- a/htdocs/langs/fi_FI/accountancy.lang +++ b/htdocs/langs/fi_FI/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/fi_FI/admin.lang b/htdocs/langs/fi_FI/admin.lang index 76c3d67dfc2..bcf1f3161f8 100644 --- a/htdocs/langs/fi_FI/admin.lang +++ b/htdocs/langs/fi_FI/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Käytettävä kirjasto PDF:n luomiseen LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=Tekstiviesti @@ -819,9 +822,9 @@ Permission532=Luoda / muuttaa palvelut Permission534=Poista palvelut Permission536=Katso / hoitaa piilotettu palvelut Permission538=Vienti palvelut -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Lue lahjoitukset Permission702=Luoda / muuttaa lahjoitusten Permission703=Poista lahjoitukset @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/fi_FI/bills.lang b/htdocs/langs/fi_FI/bills.lang index c44f6ba2298..3528ca862ab 100644 --- a/htdocs/langs/fi_FI/bills.lang +++ b/htdocs/langs/fi_FI/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma lasku InvoiceProFormaDesc=Proforma lasku on todellinen lasku, mutta sillä ei ole kirjanpidollista arvoa. InvoiceReplacement=Korvaava lasku InvoiceReplacementAsk=Laskun korvaava lasku -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Menoilmoitus InvoiceAvoirAsk=Menoilmoitus korjata laskun InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/fi_FI/companies.lang b/htdocs/langs/fi_FI/companies.lang index 2702ff40a84..cf6410370c7 100644 --- a/htdocs/langs/fi_FI/companies.lang +++ b/htdocs/langs/fi_FI/companies.lang @@ -28,7 +28,7 @@ AliasNames=Lisänimi (tuotenimi, brändi, ...) AliasNameShort=Alias Name Companies=Yritykset CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=Ei mitään Vendor=Vendor +Supplier=Vendor AddContact=Luo yhteystiedot AddContactAddress=Luo yhteystiedot/osoite EditContact=Muokkaa yhteystiedot / osoite diff --git a/htdocs/langs/fi_FI/other.lang b/htdocs/langs/fi_FI/other.lang index 14d62be772a..eb8b1a67c65 100644 --- a/htdocs/langs/fi_FI/other.lang +++ b/htdocs/langs/fi_FI/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=Väliintulo %s validoitava EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/fi_FI/website.lang b/htdocs/langs/fi_FI/website.lang index b84581dc8e9..805210f3811 100644 --- a/htdocs/langs/fi_FI/website.lang +++ b/htdocs/langs/fi_FI/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/fr_BE/accountancy.lang b/htdocs/langs/fr_BE/accountancy.lang index 008ccdab2d7..30535d01188 100644 --- a/htdocs/langs/fr_BE/accountancy.lang +++ b/htdocs/langs/fr_BE/accountancy.lang @@ -4,8 +4,7 @@ Processing=Exécution Lineofinvoice=Lignes de facture Doctype=Type de document ErrorDebitCredit=Débit et crédit ne peuvent pas être non-nuls en même temps -ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Third-party account not defined or third party unknown. Blocking error. TotalMarge=Marge de ventes totale Selectmodelcsv=Sélectionnez un modèle d'export Modelcsv_normal=Export classique -Modelcsv_FEC=Export FEC (Art. L47 A) +DefaultClosureDesc=This page can be used to set parameters to use to enclose a balance sheet. diff --git a/htdocs/langs/fr_BE/admin.lang b/htdocs/langs/fr_BE/admin.lang index 45352a47b83..3090455190b 100644 --- a/htdocs/langs/fr_BE/admin.lang +++ b/htdocs/langs/fr_BE/admin.lang @@ -17,4 +17,6 @@ IfModuleEnabled=Note: oui ne fonctionne que si le module %s est activé Module20Name=Propales Module30Name=Factures Target=Objectif +ListOfNotificationsPerUserOrContact=List of notifications (events) available per user* or per contact** +ListOfFixedNotifications=List of Fixed Notifications OperationParamDesc=Define values to use for action, or how to extract values. For example:
objproperty1=SET:abc
objproperty1=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:abc
objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)
options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)
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/fr_CA/accountancy.lang b/htdocs/langs/fr_CA/accountancy.lang index 64a7ba02334..f7069e0d730 100644 --- a/htdocs/langs/fr_CA/accountancy.lang +++ b/htdocs/langs/fr_CA/accountancy.lang @@ -81,7 +81,6 @@ FeeAccountNotDefined=Compte pour frais non définis BankAccountNotDefined=Compte pour banque non défini NumMvts=Nombre de transactions AddCompteFromBK=Ajouter des comptes comptables au groupe -ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Third-party account not defined or third party unknown. Blocking error. TotalVente=Chiffre d'affaires total avant taxes DescVentilCustomer=Consultez ici la liste des lignes de facture client liées (ou non) à un compte comptable produit DescVentilDoneCustomer=Consultez ici la liste des lignes clients des factures et leur compte comptable produit @@ -100,10 +99,10 @@ AccountingJournals=Revues comptables ShowAccoutingJournal=Afficher le journal comptable AccountingJournalType9=A-nouveau ErrorAccountingJournalIsAlreadyUse=Ce journal est déjà utilisé -Modelcsv_FEC=Export FEC (Art. L47 A) ChartofaccountsId=Carte comptable Id InitAccountancy=Compabilité initiale DefaultBindingDesc=Cette page peut être utilisée pour définir un compte par défaut à utiliser pour lier l'historique des transactions sur les salaires de paiement, le don, les taxes et la TVA lorsque aucun compte comptable spécifique n'a été défini. +DefaultClosureDesc=This page can be used to set parameters to use to enclose a balance sheet. OptionModeProductSell=Mode de ventes OptionModeProductBuy=Mode d'achats OptionModeProductSellDesc=Afficher tous les produits avec compte comptable pour les ventes. diff --git a/htdocs/langs/fr_CA/admin.lang b/htdocs/langs/fr_CA/admin.lang index 142fd0cec93..fa8441ff760 100644 --- a/htdocs/langs/fr_CA/admin.lang +++ b/htdocs/langs/fr_CA/admin.lang @@ -24,7 +24,6 @@ AllWidgetsWereEnabled=Tous les widgets disponibles sont activés MenusDesc=Les gestionnaires de menu définissent le contenu des deux barres de menus (horizontales et verticales). MenusEditorDesc=L'éditeur de menu vous permet de définir des entrées de menu personnalisées. Utilisez-le soigneusement pour éviter l'instabilité et les entrées de menu inaccessibles en permanence.
Certains modules ajoutent des entrées de menu (dans le menu principal principalement). Si vous supprimez certaines de ces entrées par erreur, vous pouvez les restaurer en désactivant et en réactivant le module. PurgeDeleteLogFile=Supprimer les fichiers journaux, y compris ceux%s définis pour le module Syslog (pas de risque de perte de données) -PurgeDeleteTemporaryFiles=Supprimez tous les fichiers temporaires (pas de risque de perte de données) PurgeDeleteTemporaryFilesShort=Supprimer les fichiers temporaires PurgeNothingToDelete=Pas de répertoire ou de fichiers à supprimer. PurgeNDirectoriesFailed=Impossible de supprimer %s fichiers ou les répertoires. @@ -200,6 +199,8 @@ ConfirmDeleteFiscalYear=Êtes-vous sûr de supprimer cette période comptable? ShowFiscalYear=Afficher la période comptable SalariesSetup=Configuration du module salariés ListOfNotificationsPerUser=Liste des notifications par utilisateur * +ListOfNotificationsPerUserOrContact=List of notifications (events) available per user* or per contact** +ListOfFixedNotifications=List of Fixed Notifications ConfFileMustContainCustom=L'installation ou la construction d'un module externe à partir de l'application doit sauvegarder les fichiers du module dans le répertoire %s. Pour que ce répertoire soit traité par Dolibarr, vous devez configurer votre conf / conf.php pour ajouter les 2 lignes de directive:
$ dolibarr_main_url_root_alt = '/ custom';
$ dolibarr_main_document_root_alt = '%s / custom'; HighlightLinesOnMouseHover=Mettez en surbrillance les lignes de table lorsque déplacement de la souris passe au-dessus PressF5AfterChangingThis=Appuyez sur CTRL + F5 sur le clavier ou effacez votre cache de navigateur après avoir changé cette valeur pour l'avoir efficace diff --git a/htdocs/langs/fr_FR/accountancy.lang b/htdocs/langs/fr_FR/accountancy.lang index ae89a4e57ae..de6f26337d7 100644 --- a/htdocs/langs/fr_FR/accountancy.lang +++ b/htdocs/langs/fr_FR/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Compte de résultat (perte) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal de fermeture ACCOUNTING_ACCOUNT_TRANSFER_CASH=Compte comptable de transfert transitoire bancaire +TransitionalAccount=Compte transitoire de virement bancaire ACCOUNTING_ACCOUNT_SUSPENSE=Compte comptable d'attente DONATION_ACCOUNTINGACCOUNT=Compte comptable pour l'enregistrement des dons @@ -216,7 +217,7 @@ DescThirdPartyReport=Consultez ici la liste des tiers clients et fournisseurs et ListAccounts=Liste des comptes comptables UnknownAccountForThirdparty=Compte de tiers inconnu. %s sera utilisé UnknownAccountForThirdpartyBlocking=Compte de tiers inconnu. Erreur bloquante. -ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Third-party account not defined or third party unknown. We will use %s +ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Code comptable du tiers non défini ou tiers inconnu. On utilisera %s. ThirdpartyAccountNotDefinedOrThirdPartyUnknownBlocking=Compte tiers non défini ou inconnu. Erreur bloquante. UnknownAccountForThirdpartyAndWaitingAccountNotDefinedBlocking=Compte tiers inconnu et compte d'attente non défini. Erreur blocante. PaymentsNotLinkedToProduct=Paiement non lié à un produit / service @@ -317,9 +318,9 @@ WithoutValidAccount=Sans compte dédié valide WithValidAccount=Avec un compte dédié valide ValueNotIntoChartOfAccount=Cette valeur de compte comptable n'existe pas dans le plan comptable AccountRemovedFromGroup=Compte supprimé du groupe -SaleLocal=Local sale -SaleExport=Export sale -SaleEEC=Sale in EEC +SaleLocal=Vente locale +SaleExport=Vente export +SaleEEC=Vente dans la CEE ## Dictionary Range=Plage de comptes @@ -340,7 +341,7 @@ UseMenuToSetBindindManualy=Lignes non encore liées, utilisez le menu $db, $conf, $langs, $mysoc, $user, $object
.
ATTENTION : Seulement quelques propriétés de l'objet $object pourraient être disponibles. Si vous avez besoin de propriétés non chargées, créez vous même une instance de l'objet dans votre formule, comme dans le deuxième exemple.
Utiliser un champs calculé signifie que vous ne pouvez pas entrer vous même toute valeur à partir de l'interface. Aussi, s'il y a une erreur de syntaxe, la formule pourrait ne rien retourner.

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

Exemple pour recharger l'objet:
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'

Un autre exemple de formule pour forcer le rechargement d'un objet et de son objet parent:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Objet parent projet non trouvé' +Computedpersistent=Stocker le champ calculé +ComputedpersistentDesc=Les champs supplémentaires calculés seront stockés dans la base de données. Toutefois, la valeur ne sera recalculée que lorsque l'objet de ce champ sera modifié. Si le champ calculé dépend d'autres objets ou de données globales, cette valeur peut être fausse !! ExtrafieldParamHelpPassword=Laissez ce champ vide signifie que la valeur sera stockée sans cryptage (le champ doit juste être caché avec des étoiles sur l'écran).
Définissez la valeur 'auto' pour utiliser la règle de cryptage par défaut pour enregistrer le mot de passe dans la base de données (ensuite la valeur utilisée sera le hash uniquement, sans moyen de retrouver la valeur d'origine) ExtrafieldParamHelpselect=La liste doit être de la forme clef,valeur (où la clé ne peut être '0')

par exemple :
1,valeur1
2,valeur2
3,valeur3
...

Pour afficher une liste dépendant d'une autre liste attribut complémentaire:
1, valeur1|options_code_liste_parente:clé_parente
2,valeur2|options_ode_liste_parente:clé_parente

Pour que la liste soit dépendante d'une autre liste:
1,valeur1|code_liste_parent:clef_parent
2,valeur2|code_liste_parent:clef_parent ExtrafieldParamHelpcheckbox=La liste doit être de la forme clef,valeur (où la clé ne peut être '0')

par exemple :
1,valeur1
2,valeur2
3,valeur3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=La liste doit être de la forme clef,valeur (où la cl ExtrafieldParamHelpsellist=Les paramètres de la liste viennent d'une table
Syntax : table_name:label_field:id_field::filter
Exemple : c_typent:libelle:id::filter

-idfilter est nécessairement une clé primaire int
- filter peut être un simple test (e.g. active=1) pour seulement montrer les valeurs actives
Vous pouvez aussi utiliser $ID$ dans le filtre qui est le ID actuel de l'objet
Pour faire un SELECT dans le filtre, utilisez $SEL$
Si vous voulez filtrer sur un extrafield, utilisez la syntaxe extra.fieldcode=... (ou fieldcode est le code de l'extrafield)

Pour avoir une liste qui dépend d'un autre attribut complémentaire:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

Pour avoir une liste qui dépend d'une autre liste:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=Les paramètres de la liste proviennent d'une table
:Syntaxe : nom_de_la_table:libelle_champ:id_champ::filtre
Exemple : c_typent:libelle:id::filter

le filtre peut n'est qu'un test (ex : active=1) pour n'afficher que les valeurs actives.
Vous pouvez aussi utiliser $ID$ dans les filtres pour indiquer l'ID de l'élément courant.
Pour utiliser un SELECT dans un filtre, utilisez $SEL$
Pour filtrer sur un attribut supplémentaire, utilisez la syntaxeextra.fieldcode=... (ou fieldcode est le code de l'attribut supplémentaire)

Pour afficher une liste dépendant d'un autre attribut supplémentaire :
c_typent:libelle:id:options_code_liste_parente|colonne_parente:filtre

Pour afficher une liste dépendant d'une autre liste :
c_typent:libelle:id:code_liste_parente|colonne_parente:filter ExtrafieldParamHelplink=Les paramètres doivent être ObjectName:Classpath
Syntaxe: ObjectName:Classpath
Exemples:
Société:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Garder vide pour un simple séparateur
Définissez-le sur 1 pour un séparateur accordéon (ouvert par défaut)
Définissez-le sur 2 pour un séparateur accordéon (réduit par défaut) LibraryToBuildPDF=Bibliothèque utilisée pour la génération des PDF LocalTaxDesc=Certains pays appliquent 2 voire 3 taux sur chaque ligne de facture. Si c'est le cas, choisissez le type du deuxième et troisième taux et sa valeur. Les types possibles sont:
1 : taxe locale sur les produits et services hors tva (la taxe locale est calculée sur le montant hors taxe)
2 : taxe locale sur les produits et services avant tva (la taxe locale est calculée sur le montant + tva)
3 : taxe locale uniquement sur les produits hors tva (la taxe locale est calculée sur le montant hors taxe)
4 : taxe locale uniquement sur les produits avant tva (la taxe locale est calculée sur le montant + tva)
5 : taxe locale uniquement sur les services hors tva (la taxe locale est calculée sur le montant hors taxe)
6 : taxe locale uniquement sur les service avant tva (la taxe locale est calculée sur le montant + tva) SMS=SMS @@ -804,7 +807,7 @@ Permission401=Consulter les avoirs Permission402=Créer/modifier les avoirs Permission403=Valider les avoirs Permission404=Supprimer les avoirs -Permission430=Use Debug Bar +Permission430=Utilisez la barre de débogage Permission511=Lire les règlements de salaires Permission512=Créer/modifier les règlements de salaires Permission514=Supprimer les paiements de salaires @@ -819,9 +822,9 @@ Permission532=Créer/modifier les services Permission534=Supprimer les services Permission536=Voir/gérer les services cachés Permission538=Exporter les services -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Lire les Nomenclatures (BOM) +Permission651=Créer/modifier les Nomenclatures (BOM) +Permission652=Supprimer les Nomenclatures (BOM) Permission701=Consulter les dons Permission702=Créer/modifier les dons Permission703=Supprimer les dons @@ -841,12 +844,12 @@ Permission1101=Consulter les bons de livraison Permission1102=Créer/modifier les bons de livraison Permission1104=Valider les bons de livraison Permission1109=Supprimer les bons de livraison -Permission1121=Read supplier proposals -Permission1122=Create/modify supplier proposals -Permission1123=Validate supplier proposals -Permission1124=Send supplier proposals -Permission1125=Delete supplier proposals -Permission1126=Close supplier price requests +Permission1121=Lire les propositions fournisseurs +Permission1122=Créer/modifier les demandes de prix fournisseurs +Permission1123=Valider les demandes de prix fournisseurs +Permission1124=Envoyer les demandes de prix fournisseurs +Permission1125=Effacer les demandes de prix de fournisseurs +Permission1126=Fermer les demandes de prix fournisseurs Permission1181=Consulter les fournisseurs Permission1182=Consulter les commandes fournisseurs Permission1183=Créer/modifier les commandes fournisseurs @@ -882,15 +885,15 @@ Permission2503=Soumettre ou supprimer des documents Permission2515=Administrer les rubriques de documents Permission2801=Utiliser un client FTP en mode lecture (parcours et téléchargement de fichiers) Permission2802=Utiliser un client FTP en mode écriture (suppression et envoi de fichiers) -Permission3200=Read archived events and fingerprints -Permission4001=See employees -Permission4002=Create employees -Permission4003=Delete employees -Permission4004=Export employees -Permission10001=Read website content -Permission10002=Create/modify website content (html and javascript content) -Permission10003=Create/modify website content (dynamic php code). Dangerous, must be reserved to restricted developers. -Permission10005=Delete website content +Permission3200=Lire les événements archivés et leurs empreintes +Permission4001=Voir les employés +Permission4002=Créer/modifier les employés +Permission4003=Supprimer les employés +Permission4004=Exporter les employés +Permission10001=Lire le contenu du site +Permission10002=Créer/modifier le contenu du site Web (contenu HTML et JavaScript) +Permission10003=Créer/modifier le contenu du site Web (code php dynamique). Dangereux, doit être réservé à un nombre restreint de développeurs. +Permission10005=Supprimer du contenu de site web Permission20001=Lire les demandes de congé (les vôtres et celle de vos subordonnés) Permission20002=Créer/modifier vos demandes de congé (les vôtres et celle de vos subordonnés) Permission20003=Supprimer les demandes de congé @@ -904,19 +907,19 @@ Permission23004=Exécuter travail planifié Permission50101=Utiliser le point de vente Permission50201=Consulter les transactions Permission50202=Importer les transactions -Permission50401=Bind products and invoices with accounting accounts -Permission50411=Read operations in ledger -Permission50412=Write/Edit operations in ledger -Permission50414=Delete operations in ledger -Permission50415=Delete all operations by year and journal in ledger -Permission50418=Export operations of the ledger -Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year -Permission50440=Manage chart of accounts, setup of accountancy -Permission51001=Read assets -Permission51002=Create/Update assets -Permission51003=Delete assets -Permission51005=Setup types of asset +Permission50401=Lier les produits et factures avec des comptes comptables +Permission50411=Lire les opérations du Grand livre +Permission50412=Créer/modifier des opérations dans le Grand livre +Permission50414=Supprimer les opérations dans le Grand livre +Permission50415=Supprimer toutes les opérations par année ou journal dans le Grand livre +Permission50418=Exporter les opérations dans le Grand livre +Permission50420=Consulter les rapports et exports de rapports (chiffre d'affaires, solde, journaux, grand livre) +Permission50430=Définir et clôturer une période fiscale +Permission50440=Gérer le plan comptable, configurer la comptabilité +Permission51001=Lire les actifs +Permission51002=Créer/Mettre à jour des actifs +Permission51003=Supprimer les actifs +Permission51005=Configurer les types d'actif Permission54001=Imprimer Permission55001=Lire sondages Permission55002=Créer/modifier les sondages @@ -1110,7 +1113,7 @@ AreaForAdminOnly=Les paramètres d'installation ne peuvent être remplis que par SystemInfoDesc=Les informations systèmes sont des informations techniques diverses accessibles en lecture seule aux administrateurs uniquement. SystemAreaForAdminOnly=Cet espace n'est accessible qu'aux utilisateurs de type administrateur. Aucune permission Dolibarr ne permet d'étendre le cercle des utilisateurs autorisés à cet espace. CompanyFundationDesc=Éditez sur cette page toutes les informations connues de la société ou de l'association que vous souhaitez gérer. Pour cela, cliquez sur les boutons "%s" ou "%s" en bas de page. -AccountantDesc=If you have an external accountant/bookkeeper, you can edit here its information. +AccountantDesc=Si vous avez un comptable externe, vous pouvez saisir ici ses informations. AccountantFileNumber=Code comptable DisplayDesc=Vous pouvez choisir ici tous les paramètres liés à l'apparence de Dolibarr AvailableModules=Modules/applications installés @@ -1923,5 +1926,5 @@ IFTTTDesc=Ce module est conçu pour déclencher des événements sur IFTTT et/ou UrlForIFTTT=URL endpoint pour IFTTT YouWillFindItOnYourIFTTTAccount=Vous le trouverez sur votre compte IFTTT EndPointFor=Endpoint pour %s: %s -DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +DeleteEmailCollector=Supprimer le collecteur d'email +ConfirmDeleteEmailCollector=Êtes-vous sûr de vouloir supprimer ce collecteur d'email ? diff --git a/htdocs/langs/fr_FR/bills.lang b/htdocs/langs/fr_FR/bills.lang index 063b1056884..41f5aca717c 100644 --- a/htdocs/langs/fr_FR/bills.lang +++ b/htdocs/langs/fr_FR/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Facture proforma InvoiceProFormaDesc=La facture proforma est une image de facture définitive mais qui n'a aucune valeur comptable. InvoiceReplacement=Facture de remplacement InvoiceReplacementAsk=Facture de remplacement de la facture -InvoiceReplacementDesc=La facture de remplacement sert à annuler et remplacer complètement une facture existante sur laquelle aucun paiement n'a encore eu lieu.

Rem: Seules les factures sans aucun paiement peuvent être remplacées. Si ces dernières ne sont pas fermées, elles le seront automatiquement au statut 'abandonnée'. +InvoiceReplacementDesc=La facture de remplacement sert à remplacer complètement une facture existante sur laquelle aucun paiement n'a encore eu lieu.

Rem: Seules les factures sans aucun paiement peuvent être remplacées. Si ces dernières ne sont pas encore fermées, elles le seront automatiquement au statut 'abandonnée'. InvoiceAvoir=Facture avoir InvoiceAvoirAsk=Facture avoir pour correction de la facture InvoiceAvoirDesc=La facture d'avoir est une facture négative destinée à compenser un montant de facture qui diffère du montant réellement versé (suite à un trop versé par le client par erreur ou un manque non versé par le client suite à un retour produit par exemple). diff --git a/htdocs/langs/fr_FR/blockedlog.lang b/htdocs/langs/fr_FR/blockedlog.lang index c9d0ff0b731..2588df90cee 100644 --- a/htdocs/langs/fr_FR/blockedlog.lang +++ b/htdocs/langs/fr_FR/blockedlog.lang @@ -48,7 +48,7 @@ DataOfArchivedEvent=Données complètes de l'événement archivé ImpossibleToReloadObject=Objet d'origine (type %s, id %s) non lié (voir la colonne 'Données complètes' pour obtenir les données sauvegardées non modifiables) BlockedLogAreRequiredByYourCountryLegislation=Le module Journaux inaltérables peut être requis par la législation de votre pays. La désactivation de ce module peut invalider toute transaction future au regard de la loi et de l'utilisation de logiciels légaux, car elles ne peuvent être validées par un contrôle fiscal. BlockedLogActivatedBecauseRequiredByYourCountryLegislation=Le module Journaux inaltérables a été activé en raison de la législation de votre pays. La désactivation de ce module peut invalider toute transaction future au regard de la loi et de l’utilisation de logiciels légaux, car elles ne peuvent pas être validées par un audit fiscal. -BlockedLogDisableNotAllowedForCountry=Liste des pays où l'utilisation de ce module est obligatoire (juste pour éviter de désactiver le module par erreur. Si votre pays est dans cette liste, la désactivation du module n'est pas possible sans la modification préalable de cette liste. Notez également que l'activation/désactivation de ce module garder une trace dans le journal des logs inaltérables). +BlockedLogDisableNotAllowedForCountry=Liste des pays où l'utilisation de ce module est obligatoire (juste pour éviter de désactiver le module par erreur. Si votre pays est dans cette liste, la désactivation du module n'est pas possible sans la modification préalable de cette liste. Notez également que l'activation/désactivation de ce module garde une trace dans le journal des logs inaltérables). OnlyNonValid=Non valide TooManyRecordToScanRestrictFilters=Trop d'enregistrements à analyser / analyser. Veuillez restreindre la liste avec des filtres plus restrictifs. RestrictYearToExport=Restreindre mois / année pour exporter diff --git a/htdocs/langs/fr_FR/cashdesk.lang b/htdocs/langs/fr_FR/cashdesk.lang index 52a6eb863a9..25465ebc4b2 100644 --- a/htdocs/langs/fr_FR/cashdesk.lang +++ b/htdocs/langs/fr_FR/cashdesk.lang @@ -68,4 +68,4 @@ Terminal=Terminal NumberOfTerminals=Nombre de terminaux TerminalSelect=Sélectionnez le terminal que vous souhaitez utiliser: POSTicket=Ticket POS -BasicPhoneLayout=Use basic layout for phones +BasicPhoneLayout=Utiliser une interface basique pour les smartphones diff --git a/htdocs/langs/fr_FR/companies.lang b/htdocs/langs/fr_FR/companies.lang index a25a7ffba4f..8f39b8ce7a9 100644 --- a/htdocs/langs/fr_FR/companies.lang +++ b/htdocs/langs/fr_FR/companies.lang @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Remises fournisseurs absolues (saisies par tous SupplierAbsoluteDiscountMy=Remises fournisseur absolues (saisies par vous-même) DiscountNone=Aucune Vendor=Fournisseur +Supplier=Fournisseur AddContact=Créer contact AddContactAddress=Créer contact/adresse EditContact=Éditer contact diff --git a/htdocs/langs/fr_FR/mails.lang b/htdocs/langs/fr_FR/mails.lang index 1e4bb836708..178b3dd421d 100644 --- a/htdocs/langs/fr_FR/mails.lang +++ b/htdocs/langs/fr_FR/mails.lang @@ -78,9 +78,9 @@ GroupEmails=Regroupement emails OneEmailPerRecipient=Un e-mail par destinataire (par défaut, un e-mail par enregistrement sélectionné) WarningIfYouCheckOneRecipientPerEmail=Attention, si vous cochez cette case, cela signifie qu'un seul email sera envoyé pour plusieurs enregistrements différents, donc, si votre message contient des variables de substitution qui se réfèrent aux données d'un enregistrement, il devient impossible de les remplacer. ResultOfMailSending=Résultat de l'envoi d'EMail en masse -NbSelected=Number selected -NbIgnored=Number ignored -NbSent=Number sent +NbSelected=Nombre sélectionné +NbIgnored=Nombre ignoré +NbSent=Nombre envoyé SentXXXmessages=%s message(s) envoyé(s). ConfirmUnvalidateEmailing=Êtes-vous sûr de vouloir repasser l'emailing %s au statut brouillon ? MailingModuleDescContactsWithThirdpartyFilter=Contact avec filtres des tiers diff --git a/htdocs/langs/fr_FR/main.lang b/htdocs/langs/fr_FR/main.lang index c0e0a3057e4..14185575b3f 100644 --- a/htdocs/langs/fr_FR/main.lang +++ b/htdocs/langs/fr_FR/main.lang @@ -947,7 +947,7 @@ SearchIntoContracts=Contrats SearchIntoCustomerShipments=Expéditions clients SearchIntoExpenseReports=Notes de frais SearchIntoLeaves=Congés -SearchIntoTickets=Gestionnaire de tickets +SearchIntoTickets=Tickets CommentLink=Commentaires NbComments=Nombre de commentaires CommentPage=Commentaires diff --git a/htdocs/langs/fr_FR/members.lang b/htdocs/langs/fr_FR/members.lang index 0f6e7ecb589..2d5b024df4f 100644 --- a/htdocs/langs/fr_FR/members.lang +++ b/htdocs/langs/fr_FR/members.lang @@ -171,7 +171,7 @@ MembersStatisticsDesc=Choisissez les statistiques que vous désirez consulter... MenuMembersStats=Statistiques LastMemberDate=Date dernier adhérent LatestSubscriptionDate=Date de dernière adhésion -MemberNature=Nature of member +MemberNature=Nature d'adhérent Public=Informations publiques NewMemberbyWeb=Nouvel adhérent ajouté. En attente de validation NewMemberForm=Nouvel Adhérent form diff --git a/htdocs/langs/fr_FR/mrp.lang b/htdocs/langs/fr_FR/mrp.lang index 6bcdb4e11c4..6916c178554 100644 --- a/htdocs/langs/fr_FR/mrp.lang +++ b/htdocs/langs/fr_FR/mrp.lang @@ -1,6 +1,6 @@ MRPArea=Espace MRP MenuBOM=Nomenclatures BOM -LatestBOMModified=Le %sdernières BOMs modifiées +LatestBOMModified=Le %s dernières BOMs modifiées BillOfMaterials=Nomenclature BOM BOMsSetup=Configuration du module BOM ListOfBOMs=Liste des BOMs diff --git a/htdocs/langs/fr_FR/other.lang b/htdocs/langs/fr_FR/other.lang index 1b8b24d61a6..f6286b6ea23 100644 --- a/htdocs/langs/fr_FR/other.lang +++ b/htdocs/langs/fr_FR/other.lang @@ -104,7 +104,7 @@ DemoFundation=Gestion des adhérents d'une association DemoFundation2=Gestion des adhérents et trésorerie d'une association DemoCompanyServiceOnly=Société ou indépendant faisant du service uniquement DemoCompanyShopWithCashDesk=Gestion d'un magasin avec caisse -DemoCompanyProductAndStocks=Société vendant des produits avec magazin +DemoCompanyProductAndStocks=Société vendant des produits avec magasin DemoCompanyAll=Société avec de multiples activités (tous les modules principaux) CreatedBy=Créé par %s ModifiedBy=Modifié par %s @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Nombre de factures clients NumberOfSupplierProposals=Nombre de demandes de prix NumberOfSupplierOrders=Nombre de commandes fournisseurs NumberOfSupplierInvoices=Nombre de factures fournisseurs +NumberOfContracts=Nombre de contrats NumberOfUnitsProposals=Quantités présentes dans les propositions commerciales NumberOfUnitsCustomerOrders=Quantités présentes dans les commandes clients NumberOfUnitsCustomerInvoices=Quantités présentes dans les factures clients NumberOfUnitsSupplierProposals=Quantités présentes dans les demande de prix NumberOfUnitsSupplierOrders=Quantités présentes dans les commandes fournisseurs NumberOfUnitsSupplierInvoices=Quantités présentes dans les factures fournisseurs +NumberOfUnitsContracts=Nombre d'unités en contrat EMailTextInterventionAddedContact=Une nouvelle intervention %s vous a été assignée EMailTextInterventionValidated=La fiche intervention %s vous concernant a été validée. EMailTextInvoiceValidated=La facture %s vous concernant a été validée. diff --git a/htdocs/langs/fr_FR/products.lang b/htdocs/langs/fr_FR/products.lang index d4135c2273e..fe794e65446 100644 --- a/htdocs/langs/fr_FR/products.lang +++ b/htdocs/langs/fr_FR/products.lang @@ -159,7 +159,7 @@ SuppliersPrices=Prix fournisseurs SuppliersPricesOfProductsOrServices=Prix fournisseurs (des produits ou services) CustomCode=Nomenclature douanière / Code SH CountryOrigin=Pays d'origine -Nature=Nature of produt (material/finished) +Nature=Nature du produit (matière première / produit fini) ShortLabel=Libellé court Unit=Unité p=u. diff --git a/htdocs/langs/fr_FR/salaries.lang b/htdocs/langs/fr_FR/salaries.lang index dc2ff783ed9..f4138177a16 100644 --- a/htdocs/langs/fr_FR/salaries.lang +++ b/htdocs/langs/fr_FR/salaries.lang @@ -18,4 +18,4 @@ LastSalaries=Les %s derniers règlements de salaires AllSalaries=Tous les règlements de salaires SalariesStatistics=Statistiques # Export -SalariesAndPayments=Salaries and payments +SalariesAndPayments=Salaires et paiements diff --git a/htdocs/langs/fr_FR/stocks.lang b/htdocs/langs/fr_FR/stocks.lang index 13367adcc31..f4d7e789ff5 100644 --- a/htdocs/langs/fr_FR/stocks.lang +++ b/htdocs/langs/fr_FR/stocks.lang @@ -66,12 +66,12 @@ RuleForStockManagementIncrease=Règle de gestion des incrémentations de stock ( DeStockOnBill=Décrémenter les stocks physiques sur validation des factures/avoirs clients DeStockOnValidateOrder=Décrémenterr les stocks physiques sur validation des commandes clients DeStockOnShipment=Décrémenter les stocks physiques sur validation des expéditions -DeStockOnShipmentOnClosing=Decrease real stocks when shipping is set to closed +DeStockOnShipmentOnClosing=Décrémente les stocks physiques au classement "clôturée" de l'expédition ReStockOnBill=Incrémenter les stocks physiques sur validation des factures/avoirs fournisseurs ReStockOnValidateOrder=Incrémenter les stocks physiques sur approbation des commandes fournisseurs ReStockOnDispatchOrder=Incrémenter les stocks physiques sur ventilation manuelle dans les entrepôts, après réception de la marchandise -StockOnReception=Increase real stocks on validation of reception -StockOnReceptionOnClosing=Increase real stocks when reception is set to closed +StockOnReception=Incrémenter les stocks physiques sur validation des réceptions +StockOnReceptionOnClosing=Incrémenter les stocks physiques lorsque la réception est classée "Close". OrderStatusNotReadyToDispatch=La commande n'a pas encore ou n'a plus un statut permettant une ventilation en stock. StockDiffPhysicTeoric=Explication de l'écart stock physique-virtuel NoPredefinedProductToDispatch=Pas de produits prédéfinis dans cet objet. Aucune ventilation en stock n'est donc à faire. diff --git a/htdocs/langs/fr_FR/website.lang b/htdocs/langs/fr_FR/website.lang index e52f9f2f955..e8a11ce5594 100644 --- a/htdocs/langs/fr_FR/website.lang +++ b/htdocs/langs/fr_FR/website.lang @@ -71,7 +71,7 @@ Banner=Bandeau BlogPost=Article de Blog WebsiteAccount=Compte de site Web WebsiteAccounts=Comptes de site web -AddWebsiteAccount=Créer un compte sur le site web +AddWebsiteAccount=Créer un compte de site web BackToListOfThirdParty=Retour à la liste pour le Tiers DisableSiteFirst=Désactiver le site Web d'abord MyContainerTitle=Titre de mon site web @@ -98,8 +98,8 @@ NoWebSiteCreateOneFirst=Aucun site Web n'a encore été créé. Créez-en un d'a GoTo=Aller à DynamicPHPCodeContainsAForbiddenInstruction=Vous ajoutez du code PHP dynamique contenant l'instruction PHP '%s ' qui est interdite par défaut en tant que contenu dynamique (voir les options masquées WEBSITE_PHP_ALLOW_xxx pour augmenter la liste des commandes autorisées). NotAllowedToAddDynamicContent=Vous n'êtes pas autorisé à ajouter ou modifier du contenu dynamique PHP sur des sites Web. Demandez la permission ou conservez simplement le code dans les balises php non modifié. -ReplaceWebsiteContent=Remplacer un contenu du site +ReplaceWebsiteContent=Rechercher ou remplacer un contenu du site DeleteAlsoJs=Supprimer également tous les fichiers javascript spécifiques à ce site? DeleteAlsoMedias=Supprimer également tous les fichiers médias spécifiques à ce site? # Export -MyWebsitePages=My website pages +MyWebsitePages=Mes pages de site web diff --git a/htdocs/langs/fr_FR/withdrawals.lang b/htdocs/langs/fr_FR/withdrawals.lang index d3ee922f75a..586da7253da 100644 --- a/htdocs/langs/fr_FR/withdrawals.lang +++ b/htdocs/langs/fr_FR/withdrawals.lang @@ -69,8 +69,8 @@ WithBankUsingBANBIC=Pour les comptes bancaires utilisant le code BAN/BIC/SWIFT BankToReceiveWithdraw=Compte bancaire pour recevoir les prélèvements CreditDate=Crédité le WithdrawalFileNotCapable=Impossible de générer le fichier de reçu des prélèvement pour votre pays %s (Votre pays n'est pas supporté) -ShowWithdraw=Show Direct Debit Order -IfInvoiceNeedOnWithdrawPaymentWontBeClosed=However, if invoice has at least one direct debit payment order not yet processed, it won't be set as paid to allow prior withdrawal management. +ShowWithdraw=Afficher ordre de prélèvement +IfInvoiceNeedOnWithdrawPaymentWontBeClosed=Toutefois, si la facture a au moins une demande de prélèvement non traité, elle ne sera pas classée payée afin de permettre le prélèvement d'abord. DoStandingOrdersBeforePayments=Cet onglet vous permet de demander un prélèvement. Une fois la demande faite, allez dans le menu Banque->Prélèvement pour gérer l'ordre de prélèvement. Lorsque l'ordre de paiement est fermé, le paiement sur la facture sera automatiquement enregistrée, et la facture fermée si le reste à payer est nul. WithdrawalFile=Fichier de prélèvement SetToStatusSent=Mettre au statut "Fichier envoyé" diff --git a/htdocs/langs/he_IL/accountancy.lang b/htdocs/langs/he_IL/accountancy.lang index bb141cb9eb0..758d9c340a5 100644 --- a/htdocs/langs/he_IL/accountancy.lang +++ b/htdocs/langs/he_IL/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/he_IL/admin.lang b/htdocs/langs/he_IL/admin.lang index 168e49e5d72..91d7f6f0c2c 100644 --- a/htdocs/langs/he_IL/admin.lang +++ b/htdocs/langs/he_IL/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=יצירה / שינוי שירותים Permission534=מחק את השירותים Permission536=ראה / ניהול שירותים נסתרים Permission538=יצוא שירותים -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=לקרוא תרומות Permission702=צור / לשנות תרומות Permission703=מחק תרומות @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/he_IL/bills.lang b/htdocs/langs/he_IL/bills.lang index 073dfd7d215..51e56257d26 100644 --- a/htdocs/langs/he_IL/bills.lang +++ b/htdocs/langs/he_IL/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma invoice InvoiceProFormaDesc=Proforma invoice is an image of a true invoice but has no accountancy value. InvoiceReplacement=Replacement invoice InvoiceReplacementAsk=Replacement invoice for invoice -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=כתב זכויות InvoiceAvoirAsk=Credit note to correct invoice InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/he_IL/companies.lang b/htdocs/langs/he_IL/companies.lang index a2a3da50aa6..e7677c858d7 100644 --- a/htdocs/langs/he_IL/companies.lang +++ b/htdocs/langs/he_IL/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias name (commercial, trademark, ...) AliasNameShort=Alias Name Companies=Companies CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=None Vendor=Vendor +Supplier=Vendor AddContact=Create contact AddContactAddress=Create contact/address EditContact=Edit contact diff --git a/htdocs/langs/he_IL/other.lang b/htdocs/langs/he_IL/other.lang index 5f07aac3436..ff970b34c23 100644 --- a/htdocs/langs/he_IL/other.lang +++ b/htdocs/langs/he_IL/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=The intervention %s has been validated. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/he_IL/website.lang b/htdocs/langs/he_IL/website.lang index 534756ac932..0ee00aff7c0 100644 --- a/htdocs/langs/he_IL/website.lang +++ b/htdocs/langs/he_IL/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/hr_HR/accountancy.lang b/htdocs/langs/hr_HR/accountancy.lang index 93dd454abfc..81a9aa03a11 100644 --- a/htdocs/langs/hr_HR/accountancy.lang +++ b/htdocs/langs/hr_HR/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/hr_HR/admin.lang b/htdocs/langs/hr_HR/admin.lang index bf0af08078e..40f4dc40255 100644 --- a/htdocs/langs/hr_HR/admin.lang +++ b/htdocs/langs/hr_HR/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Poveži s objektom ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Biblioteka korištena za kreiranje PDF-a LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Kreiraj/izmjeni usluge Permission534=Obriši usluge Permission536=Vidi/upravljaj skrivenim uslugama Permission538=Izvezi usluge -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Čitaj donacije Permission702=Kreiraj/izmjeni donacije Permission703=Obriši donacije @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/hr_HR/bills.lang b/htdocs/langs/hr_HR/bills.lang index 16543aeb9fb..6f68286f9ae 100644 --- a/htdocs/langs/hr_HR/bills.lang +++ b/htdocs/langs/hr_HR/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma invoice InvoiceProFormaDesc=Proforma invoice is an image of a true invoice but has no accountancy value. InvoiceReplacement=Zamjenski račun InvoiceReplacementAsk=Zamjenski račun za račun -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Storno računa/knjižno odobrenje InvoiceAvoirAsk=Storno računa/knjižno odobrenje za ispravak računa InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/hr_HR/companies.lang b/htdocs/langs/hr_HR/companies.lang index aa486c9437c..a8189128d76 100644 --- a/htdocs/langs/hr_HR/companies.lang +++ b/htdocs/langs/hr_HR/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias (komercijala, zaštitni znak, ...) AliasNameShort=Alias Name Companies=Kompanije CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=Ništa Vendor=Vendor +Supplier=Vendor AddContact=Kreiraj kontakt AddContactAddress=Izradi kontakt/adresu EditContact=Uredi kontakt diff --git a/htdocs/langs/hr_HR/other.lang b/htdocs/langs/hr_HR/other.lang index 755ac4b0040..81defa05c8d 100644 --- a/htdocs/langs/hr_HR/other.lang +++ b/htdocs/langs/hr_HR/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=The intervention %s has been validated. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/hr_HR/website.lang b/htdocs/langs/hr_HR/website.lang index e0b26a0ac1b..ada37124c25 100644 --- a/htdocs/langs/hr_HR/website.lang +++ b/htdocs/langs/hr_HR/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/hu_HU/accountancy.lang b/htdocs/langs/hu_HU/accountancy.lang index fe4a3421bb3..d6b1e1ba041 100644 --- a/htdocs/langs/hu_HU/accountancy.lang +++ b/htdocs/langs/hu_HU/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/hu_HU/admin.lang b/htdocs/langs/hu_HU/admin.lang index 78f0003530f..381bd02eadf 100644 --- a/htdocs/langs/hu_HU/admin.lang +++ b/htdocs/langs/hu_HU/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Létrehozza / módosítja szolgáltatások Permission534=Törlés szolgáltatások Permission536=Lásd még: / szolgáltatások kezelésére rejtett Permission538=Export szolgáltatások -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Olvassa el adományokat Permission702=Létrehozza / módosítja adományok Permission703=Törlés adományok @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/hu_HU/bills.lang b/htdocs/langs/hu_HU/bills.lang index fbc72fd179a..3b14581d116 100644 --- a/htdocs/langs/hu_HU/bills.lang +++ b/htdocs/langs/hu_HU/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma számla InvoiceProFormaDesc=Proforma számla egy kép egy valódi számla, de nincs könyvelési értéke. InvoiceReplacement=Csere számla InvoiceReplacementAsk=A számla csere számlája -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Jóváírás InvoiceAvoirAsk=Számlát javtó jóváíró számla InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/hu_HU/companies.lang b/htdocs/langs/hu_HU/companies.lang index 22ab3c6c139..06b41da68c4 100644 --- a/htdocs/langs/hu_HU/companies.lang +++ b/htdocs/langs/hu_HU/companies.lang @@ -28,7 +28,7 @@ AliasNames=Álnév megnevezése (kereskedelmi, jogvédett, ...) AliasNameShort=Alias Name Companies=Cégek CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=Nincs Vendor=Vendor +Supplier=Vendor AddContact=Kapcsolat létrehozása AddContactAddress=Kapcsolat/cím létrehozása EditContact=Kapcsoalt szerkesztése diff --git a/htdocs/langs/hu_HU/other.lang b/htdocs/langs/hu_HU/other.lang index 553b69e8446..6d0a9f9a1a6 100644 --- a/htdocs/langs/hu_HU/other.lang +++ b/htdocs/langs/hu_HU/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=A beavatkozás %s nem érvényesítette. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/hu_HU/website.lang b/htdocs/langs/hu_HU/website.lang index e84a4c5aa47..6a6693d8b9a 100644 --- a/htdocs/langs/hu_HU/website.lang +++ b/htdocs/langs/hu_HU/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/id_ID/accountancy.lang b/htdocs/langs/id_ID/accountancy.lang index 87a4ab6c61b..e54efc59469 100644 --- a/htdocs/langs/id_ID/accountancy.lang +++ b/htdocs/langs/id_ID/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/id_ID/admin.lang b/htdocs/langs/id_ID/admin.lang index 6287fa067bc..122aa5382fb 100644 --- a/htdocs/langs/id_ID/admin.lang +++ b/htdocs/langs/id_ID/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Membuat/Merubah Jasa Permission534=Menghapus Jasa Permission536=See/manage hidden services Permission538=Export services -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Membaca Sumbangan Permission702=Membuat/Merubah Sumbangan Permission703=Menghapus Sumbangan @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/id_ID/bills.lang b/htdocs/langs/id_ID/bills.lang index c2123564da9..81ec0d98abc 100644 --- a/htdocs/langs/id_ID/bills.lang +++ b/htdocs/langs/id_ID/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Tagihan Proforma InvoiceProFormaDesc=Tagihan Proforma adalah gambaran untuk tagihan sebenarnya tapi tidak mempunyai nilai akutansi. InvoiceReplacement=Taghian pengganti InvoiceReplacementAsk=Tagihan pengganti untuk tagihan -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Catatan kredit InvoiceAvoirAsk=Catatan kredit untuk tagihan yang cocok atau yang sudah benar InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/id_ID/companies.lang b/htdocs/langs/id_ID/companies.lang index 4d2e8218d11..cb085d5e958 100644 --- a/htdocs/langs/id_ID/companies.lang +++ b/htdocs/langs/id_ID/companies.lang @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=None Vendor=Vendor +Supplier=Vendor AddContact=Create contact AddContactAddress=Create contact/address EditContact=Edit contact diff --git a/htdocs/langs/id_ID/other.lang b/htdocs/langs/id_ID/other.lang index 0424ff71fbd..66f7b57c3fe 100644 --- a/htdocs/langs/id_ID/other.lang +++ b/htdocs/langs/id_ID/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=The intervention %s has been validated. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/id_ID/website.lang b/htdocs/langs/id_ID/website.lang index 534756ac932..0ee00aff7c0 100644 --- a/htdocs/langs/id_ID/website.lang +++ b/htdocs/langs/id_ID/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/is_IS/accountancy.lang b/htdocs/langs/is_IS/accountancy.lang index c15b5f30176..54ec9883ec9 100644 --- a/htdocs/langs/is_IS/accountancy.lang +++ b/htdocs/langs/is_IS/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/is_IS/admin.lang b/htdocs/langs/is_IS/admin.lang index 6492046725e..7deb68bf5a0 100644 --- a/htdocs/langs/is_IS/admin.lang +++ b/htdocs/langs/is_IS/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Búa til / breyta þjónusta Permission534=Eyða þjónustu Permission536=Sjá / stjórna falinn þjónusta Permission538=Útflutningur þjónustu -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Lesa Fjárframlög Permission702=Búa til / breyta framlög Permission703=Eyða Fjárframlög @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/is_IS/bills.lang b/htdocs/langs/is_IS/bills.lang index cb0b6d34674..d4bcf37cc17 100644 --- a/htdocs/langs/is_IS/bills.lang +++ b/htdocs/langs/is_IS/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma reikning InvoiceProFormaDesc=Proforma reikningur með mynd af a sannur reikning en hefur engar bókhalds gildi. InvoiceReplacement=Skipti reikningi InvoiceReplacementAsk=Skipti reikning fyrir reikning -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Credit athugið InvoiceAvoirAsk=Credit athugið að leiðrétta reikning InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/is_IS/companies.lang b/htdocs/langs/is_IS/companies.lang index b971ddb1127..29eb767e26f 100644 --- a/htdocs/langs/is_IS/companies.lang +++ b/htdocs/langs/is_IS/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias name (commercial, trademark, ...) AliasNameShort=Alias Name Companies=Stofnanir CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=None Vendor=Vendor +Supplier=Vendor AddContact=Create contact AddContactAddress=Create contact/address EditContact=Breyta tengilið / netfang diff --git a/htdocs/langs/is_IS/other.lang b/htdocs/langs/is_IS/other.lang index f159c4d45dd..a505cac202b 100644 --- a/htdocs/langs/is_IS/other.lang +++ b/htdocs/langs/is_IS/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=Á% afskipti s hefur verið staðfest. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/is_IS/website.lang b/htdocs/langs/is_IS/website.lang index e5fe3f05d8a..c6b0f89f0b0 100644 --- a/htdocs/langs/is_IS/website.lang +++ b/htdocs/langs/is_IS/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/it_IT/accountancy.lang b/htdocs/langs/it_IT/accountancy.lang index d48ef981c48..49e09d6bed2 100644 --- a/htdocs/langs/it_IT/accountancy.lang +++ b/htdocs/langs/it_IT/accountancy.lang @@ -9,13 +9,13 @@ ACCOUNTING_EXPORT_AMOUNT=Esporta importo ACCOUNTING_EXPORT_DEVISE=Esporta valuta Selectformat=Scegli il formato del file ACCOUNTING_EXPORT_FORMAT=Scegli il formato del file -ACCOUNTING_EXPORT_ENDLINE=Select the carriage return type +ACCOUNTING_EXPORT_ENDLINE=Seleziona il tipo di ritorno a capo ACCOUNTING_EXPORT_PREFIX_SPEC=Specifica il prefisso per il nome del file ThisService=Questo servizio ThisProduct=Questo prodotto DefaultForService=Predefinito per servizio DefaultForProduct=Predefinito per prodotto -CantSuggest=Can't suggest +CantSuggest=Non posso suggerire AccountancySetupDoneFromAccountancyMenu=La maggior parte del setup della contabilità è effettuata dal menù %s ConfigAccountingExpert=Configurazione del modulo contabilità esperta Journalization=Giornali @@ -23,14 +23,14 @@ Journaux=Giornali JournalFinancial=Giornali finanziari BackToChartofaccounts=Ritorna alla lista dell'account Chartofaccounts=Piano dei conti -CurrentDedicatedAccountingAccount=Current dedicated account +CurrentDedicatedAccountingAccount=Attuale account dedicato AssignDedicatedAccountingAccount=Nuovo account da assegnare InvoiceLabel=Etichetta fattura -OverviewOfAmountOfLinesNotBound=Overview of amount of lines not bound to an accounting account -OverviewOfAmountOfLinesBound=Overview of amount of lines already bound to an accounting account +OverviewOfAmountOfLinesNotBound=Panoramica della quantità di linee non collegate a un account contabile +OverviewOfAmountOfLinesBound=Panoramica della quantità di linee già associate a un account contabile OtherInfo=Altre informazioni DeleteCptCategory=Rimuovi conto corrente dal gruppo -ConfirmDeleteCptCategory=Are you sure you want to remove this accounting account from the accounting account group? +ConfirmDeleteCptCategory=Sei sicuro di voler rimuovere questo account contabile dal gruppo di account contabilità? JournalizationInLedgerStatus=Stato delle registrazioni AlreadyInGeneralLedger=Già registrato nei libri mastri NotYetInGeneralLedger=Non ancora registrato nei libri mastri @@ -42,7 +42,7 @@ CountriesInEEC=Paesi nella CEE CountriesNotInEEC=Paesi al di fuori della CEE CountriesInEECExceptMe=Paesi nella CEE eccetto %s CountriesExceptMe=Tutti i paesi eccetto %s -AccountantFiles=Export accounting documents +AccountantFiles=Esportare documenti contabili MainAccountForCustomersNotDefined=Account principale di contabilità per i clienti non definito nel setup MainAccountForSuppliersNotDefined=Account principale di contabilità per fornitori non definito nel setup @@ -53,10 +53,10 @@ MainAccountForSubscriptionPaymentNotDefined=Account principale di contabilità p AccountancyArea=Area di contabilità AccountancyAreaDescIntro=L'utilizzo del modulo di contabilità è effettuato in diversi step: AccountancyAreaDescActionOnce=Le seguenti azioni vengono di solito eseguite una volta sola, o una volta all'anno... -AccountancyAreaDescActionOnceBis=Next steps should be done to save you time in future by suggesting you the correct default accounting account when making the journalization (writing record in Journals and General ledger) +AccountancyAreaDescActionOnceBis=I prossimi passi dovrebbero essere fatti per farti risparmiare tempo in futuro, suggerendoti l'account di contabilità predefinito corretto quando fai la registrazione nel Giornale (registra nel Libro Mastro e Contabilità Generale) AccountancyAreaDescActionFreq=Le seguenti azioni vengono di solito eseguite ogni mese, settimana o giorno per le grandi compagnie... -AccountancyAreaDescJournalSetup=STEP %s: Create or check content of your journal list from menu %s +AccountancyAreaDescJournalSetup=PASSO %s: Crea o controlla il contenuto del tuo elenco del giornale dal menu %s AccountancyAreaDescChartModel=STEP %s: Crea un modello di piano dei conti dal menu %s AccountancyAreaDescChart=STEP %s: Crea o seleziona il tuo piano dei conti dal menu %s @@ -79,40 +79,40 @@ AccountancyAreaDescAnalyze=STEP %s: Aggiunti o modifica le transazioni esistenti AccountancyAreaDescClosePeriod=STEP %s: Chiudo il periodo così non verranno fatte modifiche in futuro. TheJournalCodeIsNotDefinedOnSomeBankAccount=Uno step obbligatorio non è stato completato (il codice del diario contabile non è stato definito per tutti i conti bancari) -Selectchartofaccounts=Seleziona una lista degli account +Selectchartofaccounts=Seleziona il piano dei conti attivo ChangeAndLoad=Cambia e carica -Addanaccount=Aggiungi un account di contabilità -AccountAccounting=Account di contabilità +Addanaccount=Aggiungi un conto di contabilità +AccountAccounting=Conto di contabilità AccountAccountingShort=Conto -SubledgerAccount=Subledger account -SubledgerAccountLabel=Subledger account label -ShowAccountingAccount=Mostra account di contabilità +SubledgerAccount=Conto del registro secondario +SubledgerAccountLabel=Etichetta del conto Registro secondario +ShowAccountingAccount=Mostra conti di contabilità ShowAccountingJournal=Mostra diario contabile -AccountAccountingSuggest=Account per contabilità suggerito -MenuDefaultAccounts=Account di default +AccountAccountingSuggest=Conto suggerito per contabilità +MenuDefaultAccounts=Conti predefiniti MenuBankAccounts=Conti bancari MenuVatAccounts=Conti IVA MenuTaxAccounts=Imposte fiscali MenuExpenseReportAccounts=Conto spese MenuLoanAccounts=Conti di prestito -MenuProductsAccounts=Account prodotto -MenuClosureAccounts=Closure accounts -ProductsBinding=Account prodotti -TransferInAccounting=Transfer in accounting -RegistrationInAccounting=Registration in accounting -Binding=Vincola all'account +MenuProductsAccounts=Conto prodotto +MenuClosureAccounts=Conti di chiusura +ProductsBinding=Conti prodotti +TransferInAccounting=Trasferimento in contabilità +RegistrationInAccounting=Registrazione in contabilità +Binding=Associazione ai conti CustomersVentilation=Collegamento fatture attive SuppliersVentilation=Associa fattura fornitore ExpenseReportsVentilation=Associa nota spese CreateMvts=Crea nuova transazione UpdateMvts=Modifica una transazione ValidTransaction=Valida transazione -WriteBookKeeping=Register transactions in Ledger +WriteBookKeeping=Registrare le transazioni nel Libro Mastro Bookkeeping=Libro contabile AccountBalance=Saldo ObjectsRef=Sorgente oggetto in riferimento -CAHTF=Total purchase vendor before tax -TotalExpenseReport=Report spese totali +CAHTF=Totale acquisto al lordo delle imposte +TotalExpenseReport=Rapporto spese totale InvoiceLines=Righe di fatture da vincolare InvoiceLinesDone=Righe di fatture bloccate ExpenseReportLines=Linee di note spese da associare @@ -120,14 +120,14 @@ ExpenseReportLinesDone=Linee vincolate di note spese IntoAccount=Collega linee con il piano dei conti -Ventilate=Vincola +Ventilate=Associa LineId=Id di linea Processing=In elaborazione EndProcessing=Fine del processo SelectedLines=Righe selezionate Lineofinvoice=Riga fattura LineOfExpenseReport=Linea di note spese -NoAccountSelected=Nessun account di contabilità selezionato +NoAccountSelected=Nessun conto di contabilità selezionato VentilatedinAccount=Collegamento completato al piano dei conti NotVentilatedinAccount=Non collegato al piano dei conti XLineSuccessfullyBinded=%sprodotti/servizi correttamente collegato ad un piano dei conti @@ -138,85 +138,86 @@ ACCOUNTING_LIST_SORT_VENTILATION_TODO=Inizia ad ordinare la pagina "Associazioni ACCOUNTING_LIST_SORT_VENTILATION_DONE=Inizia ad ordinare la pagina "Associazioni effettuate" dagli elementi più recenti ACCOUNTING_LENGTH_DESCRIPTION=Tronca la descrizione di prodotto & servizi negli elenchi dopo x caratteri (Consigliato = 50) -ACCOUNTING_LENGTH_DESCRIPTION_ACCOUNT=Truncate product & services account description form in listings after x chars (Best = 50) +ACCOUNTING_LENGTH_DESCRIPTION_ACCOUNT=Troncare il modulo di descrizione del conto prodotti e servizi in elenchi dopo x caratteri (Migliore = 50) ACCOUNTING_LENGTH_GACCOUNT=Lunghezza generale del piano dei conti (se imposti come valore 6 qui, il conto 706 apparirà come 706000) -ACCOUNTING_LENGTH_AACCOUNT=Lunghezza della contabilità di terze parti (se imposti un valore uguale a 6 ad esempio, l'account '401' apparirà come '401000' sullo schermo) -ACCOUNTING_MANAGE_ZERO=Allow to manage different number of zeros at the end of an accounting account. Needed by some countries (like Switzerland). If set to off (default), you can set the following two parameters to ask the application to add virtual zeros. -BANK_DISABLE_DIRECT_INPUT=Disabilita la registrazione diretta della transazione sul conto banca -ACCOUNTING_ENABLE_EXPORT_DRAFT_JOURNAL=Enable draft export on journal -ACCOUNTANCY_COMBO_FOR_AUX=Enable combo list for subsidiary account (may be slow if you have a lot of third parties) +ACCOUNTING_LENGTH_AACCOUNT=Lunghezza della contabilità di terze parti (se imposti un valore uguale a 6 ad esempio, il conto '401' apparirà come '401000' sullo schermo) +ACCOUNTING_MANAGE_ZERO=Consentire di gestire un diverso numero di zeri alla fine di un conto contabile. Necessario in alcuni paesi (come la Svizzera). Se impostato su off (predefinito), è possibile impostare i seguenti due parametri per chiedere all'applicazione di aggiungere zeri virtuali. +BANK_DISABLE_DIRECT_INPUT=Disabilita la registrazione diretta della transazione nel conto bancario +ACCOUNTING_ENABLE_EXPORT_DRAFT_JOURNAL=Abilita la bozza di esportazione sul giornale +ACCOUNTANCY_COMBO_FOR_AUX=Abilita l'elenco combinato per il conto secondario (potrebbe essere lento se hai un sacco di terze parti) ACCOUNTING_SELL_JOURNAL=Giornale Vendite ACCOUNTING_PURCHASE_JOURNAL=Giornale Acquisti ACCOUNTING_MISCELLANEOUS_JOURNAL=Giornale Varie ACCOUNTING_EXPENSEREPORT_JOURNAL=Giornale Note Spese ACCOUNTING_SOCIAL_JOURNAL=Giornale Sociale -ACCOUNTING_HAS_NEW_JOURNAL=Has new Journal +ACCOUNTING_HAS_NEW_JOURNAL=Ha un nuovo giornale -ACCOUNTING_RESULT_PROFIT=Result accounting account (Profit) -ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) -ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure +ACCOUNTING_RESULT_PROFIT=Conto contabile risultante (profitto) +ACCOUNTING_RESULT_LOSS=Conto contabile risultato (perdita) +ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Giornale di chiusura -ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +ACCOUNTING_ACCOUNT_TRANSFER_CASH=Conto contabile del bonifico bancario transitorio +TransitionalAccount=Conto di trasferimento bancario transitorio -ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait -DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations -ADHERENT_SUBSCRIPTION_ACCOUNTINGACCOUNT=Accounting account to register subscriptions +ACCOUNTING_ACCOUNT_SUSPENSE=Conto di contabilità di attesa +DONATION_ACCOUNTINGACCOUNT=Conto di contabilità per registrare le donazioni +ADHERENT_SUBSCRIPTION_ACCOUNTINGACCOUNT=Conto contabile per registrare gli abbonamenti -ACCOUNTING_PRODUCT_BUY_ACCOUNT=Account di contabilità predefinito per i prodotti acquistati (se non definito nella scheda prodotto) -ACCOUNTING_PRODUCT_SOLD_ACCOUNT=Account di contabilità predefinito per i prodotti venduti (se non definito nella scheda prodotto) -ACCOUNTING_PRODUCT_SOLD_INTRA_ACCOUNT=Accounting account by default for the sold products in EEC (used if not defined in the product sheet) -ACCOUNTING_PRODUCT_SOLD_EXPORT_ACCOUNT=Accounting account by default for the sold products export out of EEC (used if not defined in the product sheet) -ACCOUNTING_SERVICE_BUY_ACCOUNT=Account di contabilità predefinito per i servizi acquistati (se non definito nella scheda servizio) -ACCOUNTING_SERVICE_SOLD_ACCOUNT=Account di contabilità predefinito per i servizi venduti (se non definito nella scheda servizio) +ACCOUNTING_PRODUCT_BUY_ACCOUNT=Conto di contabilità predefinito per i prodotti acquistati (se non definito nella scheda prodotto) +ACCOUNTING_PRODUCT_SOLD_ACCOUNT=Conto di contabilità predefinito per i prodotti venduti (se non definito nella scheda prodotto) +ACCOUNTING_PRODUCT_SOLD_INTRA_ACCOUNT=Conto contabile per impostazione predefinita per i prodotti venduti in CEE (utilizzato se non definito nella scheda prodotto) +ACCOUNTING_PRODUCT_SOLD_EXPORT_ACCOUNT=Conto contabile per impostazione predefinita per l'esportazione dei prodotti venduti fuori dalla CEE (utilizzato se non definito nella scheda prodotto) +ACCOUNTING_SERVICE_BUY_ACCOUNT=Conto di contabilità per impostazione predefinita per i servizi acquistati (utilizzato se non definito nel foglio di servizio) +ACCOUNTING_SERVICE_SOLD_ACCOUNT=Conto di contabilità per impostazione predefinita per i servizi venduti (utilizzato se non definito nel foglio di servizio) Doctype=Tipo documento Docdate=Data Docref=Riferimento -LabelAccount=Etichetta account +LabelAccount=Etichetta conto LabelOperation=Etichetta operazione Sens=Verso -LetteringCode=Lettering code -Lettering=Lettering +LetteringCode=Codice impressioni +Lettering=Impressioni Codejournal=Giornale -JournalLabel=Journal label +JournalLabel=Etichetta del giornale NumPiece=Numero del pezzo TransactionNumShort=Num. transazione -AccountingCategory=Personalized groups +AccountingCategory=Gruppi personalizzati GroupByAccountAccounting=Raggruppamento piano dei conti -AccountingAccountGroupsDesc=You can define here some groups of accounting account. They will be used for personalized accounting reports. -ByAccounts=By accounts -ByPredefinedAccountGroups=By predefined groups +AccountingAccountGroupsDesc=Qui puoi definire alcuni gruppi di conti contabili. Saranno utilizzati per rapporti contabili personalizzati. +ByAccounts=Per conto +ByPredefinedAccountGroups=Per gruppi predefiniti ByPersonalizedAccountGroups=Gruppi personalizzati ByYear=Per anno NotMatch=Non impostato DeleteMvt=Cancella linee libro contabile DelYear=Anno da cancellare DelJournal=Giornale da cancellare -ConfirmDeleteMvt=This will delete all lines of the Ledger for year and/or from a specific journal. At least one criterion is required. -ConfirmDeleteMvtPartial=This will delete the transaction from the Ledger (all lines related to same transaction will be deleted) -FinanceJournal=Finance journal -ExpenseReportsJournal=Expense reports journal -DescFinanceJournal=Finance journal including all the types of payments by bank account -DescJournalOnlyBindedVisible=This is a view of record that are bound to an accounting account and can be recorded into the Ledger. -VATAccountNotDefined=Account for VAT not defined -ThirdpartyAccountNotDefined=Account for third party not defined -ProductAccountNotDefined=Account for product not defined -FeeAccountNotDefined=Account for fee not defined -BankAccountNotDefined=Account for bank not defined +ConfirmDeleteMvt=Questo cancellerà tutte le righe del libro mastro per l'anno e/o da un giornale specifico. È richiesto almeno un criterio. +ConfirmDeleteMvtPartial=Questo cancellerà la transazione dal libro mastro (tutte le righe relative alla stessa transazione saranno cancellate) +FinanceJournal=Giornale delle finanze +ExpenseReportsJournal=Rapporto spese +DescFinanceJournal=Giornale finanziario che include tutti i tipi di pagamenti per conto bancario +DescJournalOnlyBindedVisible=Questa è una vista del record che sono legati a un conto contabile e possono essere registrati nel libro mastro. +VATAccountNotDefined=Conto per IVA non definito +ThirdpartyAccountNotDefined=Conto per terze parti non definito +ProductAccountNotDefined=Account per prodotto non definito +FeeAccountNotDefined=Conto per tassa non definito +BankAccountNotDefined=Conto per banca non definito CustomerInvoicePayment=Pagamento fattura attiva -ThirdPartyAccount=Third-party account +ThirdPartyAccount=Conto terze parti NewAccountingMvt=Nuova transazione NumMvts=Numero della transazione ListeMvts=Lista dei movimenti ErrorDebitCredit=Debito e Credito non possono avere un valore contemporaneamente -AddCompteFromBK=Add accounting accounts to the group -ReportThirdParty=List third-party account -DescThirdPartyReport=Consult here the list of third-party customers and vendors and their accounting accounts +AddCompteFromBK=Aggiungi conto di contabilità al gruppo +ReportThirdParty=Elenca conti di terze parti +DescThirdPartyReport=Consulta qui l'elenco dei clienti e fornitori di terze parti e i loro conti contabili ListAccounts=Lista delle voci del piano dei conti -UnknownAccountForThirdparty=Unknown third-party account. We will use %s -UnknownAccountForThirdpartyBlocking=Unknown third-party account. Blocking error -ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Third-party account not defined or third party unknown. We will use %s +UnknownAccountForThirdparty=Conto di terze parti sconosciuto. Useremo %s +UnknownAccountForThirdpartyBlocking=Conto di terze parti sconosciuto. Errore di blocco +ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Conto di terzi non definito o sconosciuto. Useremo %s ThirdpartyAccountNotDefinedOrThirdPartyUnknownBlocking=Third-party account not defined or third party unknown. Blocking error. UnknownAccountForThirdpartyAndWaitingAccountNotDefinedBlocking=Unknown third-party account and waiting account not defined. Blocking error PaymentsNotLinkedToProduct=Payment not linked to any product / service diff --git a/htdocs/langs/it_IT/admin.lang b/htdocs/langs/it_IT/admin.lang index 76561fafefa..61af6b824bb 100644 --- a/htdocs/langs/it_IT/admin.lang +++ b/htdocs/langs/it_IT/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Campo calcolato ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Libreria utilizzata per generare PDF LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -493,7 +496,7 @@ DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploade # Modules Module0Name=Utenti e gruppi Module0Desc=Gestione utenti/impiegati e gruppi -Module1Name=Sogg. Terzi +Module1Name=Soggetti terzi Module1Desc=Companies and contacts management (customers, prospects...) Module2Name=Commerciale Module2Desc=Gestione commerciale @@ -541,7 +544,7 @@ Module75Name=Spese di viaggio e note spese Module75Desc=Gestione spese di viaggio e note spese Module80Name=Spedizioni Module80Desc=Shipments and delivery note management -Module85Name=Banks & Cash +Module85Name=Banche & Denaro Module85Desc=Gestione di conti bancari o conti di cassa Module100Name=External Site Module100Desc=Add a link to an external website as a main menu icon. Website is shown in a frame under the top menu. @@ -772,7 +775,7 @@ PermissionAdvanced253=Creare/modificare utenti interni/esterni e permessi Permission254=Eliminare o disattivare altri utenti Permission255=Cambiare le password di altri utenti Permission256=Eliminare o disabilitare altri utenti -Permission262=Extend access to all third parties (not only third parties for which that 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=Estendere l'accesso a tutte le terze parti (non solo le terze parti per le quali tale utente è un rappresentante di vendita).
Non efficace per gli utenti esterni (sempre limitato a se stessi per proposte, ordini, fatture, contratti, ecc.).
Non efficace per i progetti (solo le regole sulle autorizzazioni del progetto, la visibilità e le questioni relative all'assegnazione). Permission271=Vedere CA Permission272=Vedere fatture Permission273=Emettere fatture @@ -819,9 +822,9 @@ Permission532=Creare/modificare servizi Permission534=Eliminare servizi Permission536=Vedere/gestire servizi nascosti Permission538=Esportare servizi -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Vedere donazioni Permission702=Creare/modificare donazioni Permission703=Eliminare donazioni @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -927,8 +930,8 @@ Permission63001=Leggi risorse Permission63002=Crea/modifica risorse Permission63003=Elimina risorsa Permission63004=Collega le risorse agli eventi -DictionaryCompanyType=Third-party types -DictionaryCompanyJuridicalType=Third-party legal entities +DictionaryCompanyType=Tipo di soggetto terzo +DictionaryCompanyJuridicalType=Entità legali di terze parti DictionaryProspectLevel=Liv. cliente potenziale DictionaryCanton=States/Provinces DictionaryRegion=Regioni @@ -939,7 +942,7 @@ DictionaryActions=Tipi di azioni/eventi DictionarySocialContributions=Types of social or fiscal taxes DictionaryVAT=Aliquote IVA o Tasse di vendita DictionaryRevenueStamp=Amount of tax stamps -DictionaryPaymentConditions=Payment Terms +DictionaryPaymentConditions=Termini di Pagamento DictionaryPaymentModes=Payment Modes DictionaryTypeContact=Tipi di contatti/indirizzi DictionaryTypeOfContainer=Website - Type of website pages/containers @@ -982,9 +985,9 @@ LocalTax1Management=Secondo tipo di tassa LocalTax1IsUsedExample= LocalTax1IsNotUsedExample= LocalTax2IsNotUsed=Non usare terza tassa -LocalTax2IsUsedDesc=Use a third type of tax (other than first one) +LocalTax2IsUsedDesc=Utilizzare un terzo tipo di imposta (diversa dalla prima) LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one) -LocalTax2Management=Terzo tipo di tassa +LocalTax2Management=Terzo: tipo di tassa LocalTax2IsUsedExample= LocalTax2IsNotUsedExample= LocalTax1ManagementES=Gestione RE @@ -1180,7 +1183,7 @@ ExtraFieldsLines=Complementary attributes (lines) ExtraFieldsLinesRec=Complementary attributes (templates invoices lines) ExtraFieldsSupplierOrdersLines=Complementary attributes (order lines) ExtraFieldsSupplierInvoicesLines=Complementary attributes (invoice lines) -ExtraFieldsThirdParties=Complementary attributes (third party) +ExtraFieldsThirdParties=Attributi complementari (soggetto terzo) ExtraFieldsContacts=Complementary attributes (contacts/address) ExtraFieldsMember=Attributi Complementari (membri) ExtraFieldsMemberType=Attributi Complementari (tipo di membro) @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/it_IT/banks.lang b/htdocs/langs/it_IT/banks.lang index 9195288e505..48a20673482 100644 --- a/htdocs/langs/it_IT/banks.lang +++ b/htdocs/langs/it_IT/banks.lang @@ -1,6 +1,6 @@ # Dolibarr language file - Source file is en_US - banks Bank=Banca -MenuBankCash=Banks | Cash +MenuBankCash=Banche | Denaro MenuVariousPayment=Pagamenti vari MenuNewVariousPayment=Nuovo pagamento vario BankName=Nome della Banca @@ -30,7 +30,7 @@ AllTime=Dall'inizio Reconciliation=Riconciliazione RIB=Coordinate bancarie IBAN=Codice IBAN -BIC=BIC/SWIFT code +BIC=Codice BIC/SWIFT SwiftValid=Il codice BIC/SWIFT è valido SwiftVNotalid=BIC/SWIFT non valido IbanValid=Il codice IBAN è valido diff --git a/htdocs/langs/it_IT/bills.lang b/htdocs/langs/it_IT/bills.lang index 71887c0b194..4955a8a9598 100644 --- a/htdocs/langs/it_IT/bills.lang +++ b/htdocs/langs/it_IT/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Fattura proforma InvoiceProFormaDesc=La fattura proforma è uguale ad una fattura vera, ma non ha valore contabile. InvoiceReplacement=Fattura sostitutiva InvoiceReplacementAsk=Fattura sostitutiva -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Nota di credito InvoiceAvoirAsk=Nota di credito per correggere fattura InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). @@ -88,8 +88,8 @@ CodePaymentMode=Payment Type (code) LabelPaymentMode=Payment Type (label) PaymentModeShort=Payment Type PaymentTerm=Payment Term -PaymentConditions=Payment Terms -PaymentConditionsShort=Payment Terms +PaymentConditions=Termini di Pagamento +PaymentConditionsShort=Termini di Pagamento PaymentAmount=Importo del pagamento PaymentHigherThanReminderToPay=Pagamento superiore alla rimanenza da pagare HelpPaymentHigherThanReminderToPay=Attention, the payment amount of one or more bills is higher than the outstanding amount to pay.
Edit your entry, otherwise confirm and consider creating a credit note for the excess received for each overpaid invoice. @@ -251,7 +251,7 @@ ClassifyBill=Classificazione fattura SupplierBillsToPay=Unpaid vendor invoices CustomerBillsUnpaid=Fatture attive non pagate NonPercuRecuperable=Non recuperabile -SetConditions=Set Payment Terms +SetConditions=Imposta Termini di Pagamento SetMode=Set Payment Type SetRevenuStamp=Imposta marca da bollo Billed=Fatturati @@ -375,11 +375,11 @@ ViewAvailableGlobalDiscounts=Mostra gli sconti disponibili Statut=Stato PaymentConditionShortRECEP=Rimessa diretta PaymentConditionRECEP=Rimessa diretta -PaymentConditionShort30D=a 30 giorni +PaymentConditionShort30D=30 giorni PaymentCondition30D=Pagamento a 30 giorni PaymentConditionShort30DENDMONTH=30 giorni fine mese PaymentCondition30DENDMONTH=Pagamento a 30 giorni fine mese -PaymentConditionShort60D=a 60 giorni +PaymentConditionShort60D=60 giorni PaymentCondition60D=Pagamento a 60 giorni PaymentConditionShort60DENDMONTH=60 giorni fine mese PaymentCondition60DENDMONTH=Pagamento a 60 giorni fine mese @@ -425,10 +425,10 @@ DeskCode=Branch code BankAccountNumber=C.C. BankAccountNumberKey=Checksum Residence=Indirizzo -IBANNumber=IBAN account number +IBANNumber=Codice IBAN IBAN=IBAN BIC=BIC/SWIFT -BICNumber=BIC/SWIFT code +BICNumber=Codice BIC/SWIFT ExtraInfos=Extra info RegulatedOn=Regolamentato su ChequeNumber=Assegno N° @@ -446,7 +446,7 @@ IntracommunityVATNumber=Intra-Community VAT ID PaymentByChequeOrderedTo=Check payments (including tax) are payable to %s, send to PaymentByChequeOrderedToShort=Check payments (incl. tax) are payable to SendTo=spedire a -PaymentByTransferOnThisBankAccount=Payment by transfer to the following bank account +PaymentByTransferOnThisBankAccount=Pagamento tramite Bonifico sul seguente Conto Bancario VATIsNotUsedForInvoice=* Non applicabile IVA art-293B del CGI LawApplicationPart1=Con l'applicazione della legge 80.335 del 12/05/80 LawApplicationPart2=I beni restano di proprietà della diff --git a/htdocs/langs/it_IT/boxes.lang b/htdocs/langs/it_IT/boxes.lang index 259920ab099..1879e9f03c1 100644 --- a/htdocs/langs/it_IT/boxes.lang +++ b/htdocs/langs/it_IT/boxes.lang @@ -23,16 +23,16 @@ BoxTitleLastRssInfos=Ultime %s notizie da %s BoxTitleLastProducts=Products/Services: last %s modified BoxTitleProductsAlertStock=Prodotti: allerta scorte BoxTitleLastSuppliers=Ultimi %s ordini fornitore -BoxTitleLastModifiedSuppliers=Vendors: last %s modified -BoxTitleLastModifiedCustomers=Customers: last %s modified +BoxTitleLastModifiedSuppliers=Fornitori: ultimi %s modificati +BoxTitleLastModifiedCustomers=Clienti: ultimi %s modificati BoxTitleLastCustomersOrProspects=Ultimi %s clienti o potenziali clienti BoxTitleLastCustomerBills=Latest %s Customer invoices BoxTitleLastSupplierBills=Latest %s Vendor invoices -BoxTitleLastModifiedProspects=Prospects: last %s modified +BoxTitleLastModifiedProspects=Clienti potenziali: ultimi %s modificati BoxTitleLastModifiedMembers=Ultimi %s membri BoxTitleLastFicheInter=Ultimi %s interventi modificati BoxTitleOldestUnpaidCustomerBills=Fatture cliente: %s non pagate più vecchie -BoxTitleOldestUnpaidSupplierBills=Vendor Invoices: oldest %s unpaid +BoxTitleOldestUnpaidSupplierBills=Fatture fornitori: %s più vecchie non pagate BoxTitleCurrentAccounts=Conti aperti: bilanci BoxTitleLastModifiedContacts=Contacts/Addresses: last %s modified BoxMyLastBookmarks=Bookmarks: latest %s @@ -76,7 +76,7 @@ ForObject=On %s BoxTitleLastModifiedSupplierBills=Vendor Invoices: last %s modified BoxTitleLatestModifiedSupplierOrders=Vendor Orders: last %s modified BoxTitleLastModifiedCustomerBills=Customer Invoices: last %s modified -BoxTitleLastModifiedCustomerOrders=Sales Orders: last %s modified +BoxTitleLastModifiedCustomerOrders=Ordini: ultimi %s modificati BoxTitleLastModifiedPropals=Ultime %s proposte modificate ForCustomersInvoices=Fatture attive ForCustomersOrders=Ordini cliente diff --git a/htdocs/langs/it_IT/companies.lang b/htdocs/langs/it_IT/companies.lang index 9666ac35dfa..556096c3565 100644 --- a/htdocs/langs/it_IT/companies.lang +++ b/htdocs/langs/it_IT/companies.lang @@ -32,7 +32,7 @@ PriceFormatInCurrentLanguage=Price display format in the current language and cu ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party -ThirdParties=Third-parties +ThirdParties=Soggetti Terzi ThirdPartyProspects=Clienti potenziali ThirdPartyProspectsStats=Clienti potenziali ThirdPartyCustomers=Clienti @@ -257,8 +257,8 @@ ProfId1DZ=RC ProfId2DZ=Art. ProfId3DZ=NIF ProfId4DZ=NIS -VATIntra=VAT ID -VATIntraShort=VAT ID +VATIntra=Partita IVA +VATIntraShort=Partita IVA VATIntraSyntaxIsValid=La sintassi è valida VATReturn=Rimborso IVA ProspectCustomer=Cliente/Cliente potenziale @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Sconti globali fornitore (inseriti da tutti gli SupplierAbsoluteDiscountMy=Sconti globali fornitore (inseriti da me stesso) DiscountNone=Nessuno Vendor=Fornitore +Supplier=Fornitore AddContact=Crea contatto AddContactAddress=Crea contatto/indirizzo EditContact=Modifica contatto/indirizzo @@ -434,7 +435,7 @@ ErrorThirdpartiesMerge=Si è verificato un errore durante l'eliminazione di terz NewCustomerSupplierCodeProposed=Customer or Vendor code already used, a new code is suggested #Imports PaymentTypeCustomer=Payment Type - Customer -PaymentTermsCustomer=Payment Terms - Customer +PaymentTermsCustomer=Termini di Pagamento - Cliente PaymentTypeSupplier=Payment Type - Vendor PaymentTermsSupplier=Payment Term - Vendor MulticurrencyUsed=Use Multicurrency diff --git a/htdocs/langs/it_IT/main.lang b/htdocs/langs/it_IT/main.lang index f7995b0ef97..1cdfe3e6746 100644 --- a/htdocs/langs/it_IT/main.lang +++ b/htdocs/langs/it_IT/main.lang @@ -370,12 +370,12 @@ PriceQtyMinHTCurrency=Price quantity min. (excl. tax) (currency) Percentage=Percentuale Total=Totale SubTotal=Totale parziale -TotalHTShort=Total (excl.) -TotalHT100Short=Total 100%% (excl.) -TotalHTShortCurrency=Total (excl. in currency) +TotalHTShort=Totale Netto +TotalHT100Short=Totalke 100 1%% Netto +TotalHTShortCurrency=Totale Netto in valuta TotalTTCShort=Totale (IVA inc.) -TotalHT=Total (excl. tax) -TotalHTforthispage=Total (excl. tax) for this page +TotalHT=Totale Netto +TotalHTforthispage=Totale Netto per questa Pagina Totalforthispage=Totale in questa pagina TotalTTC=Totale (IVA inclusa) TotalTTCToYourCredit=Totale (IVA inclusa) a tuo credito @@ -462,8 +462,8 @@ Generate=Genera Duration=Durata TotalDuration=Durata totale Summary=Riepilogo -DolibarrStateBoard=Database Statistics -DolibarrWorkBoard=Open Items +DolibarrStateBoard=Statistiche Gestionale +DolibarrWorkBoard=Oggetti Aperti NoOpenedElementToProcess=Nessun elemento aperto da elaborare Available=Disponibile NotYetAvailable=Non ancora disponibile diff --git a/htdocs/langs/it_IT/members.lang b/htdocs/langs/it_IT/members.lang index 40f41c18a6c..7e387e3ebd3 100644 --- a/htdocs/langs/it_IT/members.lang +++ b/htdocs/langs/it_IT/members.lang @@ -26,7 +26,7 @@ MembersListQualified=Elenco dei membri qualificati MenuMembersToValidate=Membri da convalidare MenuMembersValidated=Membri convalidati MenuMembersUpToDate=Membri aggiornati -MenuMembersNotUpToDate=Membri non aggiornTI +MenuMembersNotUpToDate=Membri non aggiornati MenuMembersResiliated=Terminated members MembersWithSubscriptionToReceive=Membri con adesione da riscuotere DateSubscription=Data di adesione diff --git a/htdocs/langs/it_IT/other.lang b/htdocs/langs/it_IT/other.lang index b1c16f67868..4ce59b419c6 100644 --- a/htdocs/langs/it_IT/other.lang +++ b/htdocs/langs/it_IT/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Numero di ordini fornitore NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=Intervento %s convalidato EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/it_IT/website.lang b/htdocs/langs/it_IT/website.lang index 8f9b03f504a..2cd44a0519c 100644 --- a/htdocs/langs/it_IT/website.lang +++ b/htdocs/langs/it_IT/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/ja_JP/accountancy.lang b/htdocs/langs/ja_JP/accountancy.lang index e24f3e5506c..11b5f42eb07 100644 --- a/htdocs/langs/ja_JP/accountancy.lang +++ b/htdocs/langs/ja_JP/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/ja_JP/admin.lang b/htdocs/langs/ja_JP/admin.lang index 201227b6b2c..d3e4b8730ca 100644 --- a/htdocs/langs/ja_JP/admin.lang +++ b/htdocs/langs/ja_JP/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=サービスを作成/変更 Permission534=サービスを削除する Permission536=隠されたサービスを参照してください/管理 Permission538=輸出サービス -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=寄付を読む Permission702=寄付を作成/変更 Permission703=寄付を削除します。 @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/ja_JP/bills.lang b/htdocs/langs/ja_JP/bills.lang index 65249f1760e..f821606de2e 100644 --- a/htdocs/langs/ja_JP/bills.lang +++ b/htdocs/langs/ja_JP/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=見積送り状 InvoiceProFormaDesc=プロフォーマインボイスは、請求書のイメージですが、どんな会計の値を持っていません。 InvoiceReplacement=交換用の請求書 InvoiceReplacementAsk=請求書の交換請求書 -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=クレジットメモ InvoiceAvoirAsk=請求書を訂正するためにクレジットノート InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/ja_JP/companies.lang b/htdocs/langs/ja_JP/companies.lang index b7983355f88..46d03183003 100644 --- a/htdocs/langs/ja_JP/companies.lang +++ b/htdocs/langs/ja_JP/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias name (commercial, trademark, ...) AliasNameShort=Alias Name Companies=企業 CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=なし Vendor=Vendor +Supplier=Vendor AddContact=Create contact AddContactAddress=Create contact/address EditContact=コンタクト/アドレスを編集 diff --git a/htdocs/langs/ja_JP/other.lang b/htdocs/langs/ja_JP/other.lang index bb8dc667a4b..f511dcb82ee 100644 --- a/htdocs/langs/ja_JP/other.lang +++ b/htdocs/langs/ja_JP/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=介入%sが検証されています。 EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/ja_JP/website.lang b/htdocs/langs/ja_JP/website.lang index a923caf67b7..5cd14c6da32 100644 --- a/htdocs/langs/ja_JP/website.lang +++ b/htdocs/langs/ja_JP/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/ka_GE/accountancy.lang b/htdocs/langs/ka_GE/accountancy.lang index bb141cb9eb0..758d9c340a5 100644 --- a/htdocs/langs/ka_GE/accountancy.lang +++ b/htdocs/langs/ka_GE/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/ka_GE/admin.lang b/htdocs/langs/ka_GE/admin.lang index 9eaa12ec9be..f30d6edd9f7 100644 --- a/htdocs/langs/ka_GE/admin.lang +++ b/htdocs/langs/ka_GE/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Create/modify services Permission534=Delete services Permission536=See/manage hidden services Permission538=Export services -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Read donations Permission702=Create/modify donations Permission703=Delete donations @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/ka_GE/bills.lang b/htdocs/langs/ka_GE/bills.lang index c9d46e4ffff..4f114d4df1c 100644 --- a/htdocs/langs/ka_GE/bills.lang +++ b/htdocs/langs/ka_GE/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma invoice InvoiceProFormaDesc=Proforma invoice is an image of a true invoice but has no accountancy value. InvoiceReplacement=Replacement invoice InvoiceReplacementAsk=Replacement invoice for invoice -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Credit note InvoiceAvoirAsk=Credit note to correct invoice InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/ka_GE/companies.lang b/htdocs/langs/ka_GE/companies.lang index 77bd4f8a445..578f5cb8920 100644 --- a/htdocs/langs/ka_GE/companies.lang +++ b/htdocs/langs/ka_GE/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias name (commercial, trademark, ...) AliasNameShort=Alias Name Companies=Companies CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=None Vendor=Vendor +Supplier=Vendor AddContact=Create contact AddContactAddress=Create contact/address EditContact=Edit contact diff --git a/htdocs/langs/ka_GE/other.lang b/htdocs/langs/ka_GE/other.lang index a6802140be3..8a5ccdbab5c 100644 --- a/htdocs/langs/ka_GE/other.lang +++ b/htdocs/langs/ka_GE/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=The intervention %s has been validated. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/ka_GE/website.lang b/htdocs/langs/ka_GE/website.lang index 534756ac932..0ee00aff7c0 100644 --- a/htdocs/langs/ka_GE/website.lang +++ b/htdocs/langs/ka_GE/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/kn_IN/accountancy.lang b/htdocs/langs/kn_IN/accountancy.lang index bb141cb9eb0..758d9c340a5 100644 --- a/htdocs/langs/kn_IN/accountancy.lang +++ b/htdocs/langs/kn_IN/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/kn_IN/admin.lang b/htdocs/langs/kn_IN/admin.lang index c2ac3d4bc8e..4f98d74a676 100644 --- a/htdocs/langs/kn_IN/admin.lang +++ b/htdocs/langs/kn_IN/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Create/modify services Permission534=Delete services Permission536=See/manage hidden services Permission538=Export services -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Read donations Permission702=Create/modify donations Permission703=Delete donations @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/kn_IN/bills.lang b/htdocs/langs/kn_IN/bills.lang index cc78ae53b31..e7b17c926d2 100644 --- a/htdocs/langs/kn_IN/bills.lang +++ b/htdocs/langs/kn_IN/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma invoice InvoiceProFormaDesc=Proforma invoice is an image of a true invoice but has no accountancy value. InvoiceReplacement=Replacement invoice InvoiceReplacementAsk=Replacement invoice for invoice -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Credit note InvoiceAvoirAsk=Credit note to correct invoice InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/kn_IN/companies.lang b/htdocs/langs/kn_IN/companies.lang index 483d54f3a45..b24894cd7f8 100644 --- a/htdocs/langs/kn_IN/companies.lang +++ b/htdocs/langs/kn_IN/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias name (commercial, trademark, ...) AliasNameShort=Alias Name Companies=ಕಂಪನಿಗಳು CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=ಯಾವುದೂ ಇಲ್ಲ Vendor=Vendor +Supplier=Vendor AddContact=Create contact AddContactAddress=Create contact/address EditContact=ಸಂಪರ್ಕವನ್ನು ತಿದ್ದಿ diff --git a/htdocs/langs/kn_IN/other.lang b/htdocs/langs/kn_IN/other.lang index 8540b2f5d2b..a9c16fa7894 100644 --- a/htdocs/langs/kn_IN/other.lang +++ b/htdocs/langs/kn_IN/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=The intervention %s has been validated. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/kn_IN/website.lang b/htdocs/langs/kn_IN/website.lang index 534756ac932..0ee00aff7c0 100644 --- a/htdocs/langs/kn_IN/website.lang +++ b/htdocs/langs/kn_IN/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/ko_KR/accountancy.lang b/htdocs/langs/ko_KR/accountancy.lang index 734271adbf0..3ce2ffde609 100644 --- a/htdocs/langs/ko_KR/accountancy.lang +++ b/htdocs/langs/ko_KR/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/ko_KR/admin.lang b/htdocs/langs/ko_KR/admin.lang index 5b2ce325260..00d354072b1 100644 --- a/htdocs/langs/ko_KR/admin.lang +++ b/htdocs/langs/ko_KR/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Create/modify services Permission534=Delete services Permission536=See/manage hidden services Permission538=Export services -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Read donations Permission702=Create/modify donations Permission703=Delete donations @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/ko_KR/bills.lang b/htdocs/langs/ko_KR/bills.lang index 2d92a5836da..fc1a2e2058d 100644 --- a/htdocs/langs/ko_KR/bills.lang +++ b/htdocs/langs/ko_KR/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma invoice InvoiceProFormaDesc=Proforma invoice is an image of a true invoice but has no accountancy value. InvoiceReplacement=Replacement invoice InvoiceReplacementAsk=Replacement invoice for invoice -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Credit note InvoiceAvoirAsk=Credit note to correct invoice InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/ko_KR/companies.lang b/htdocs/langs/ko_KR/companies.lang index f5e2e79962a..d446029ff46 100644 --- a/htdocs/langs/ko_KR/companies.lang +++ b/htdocs/langs/ko_KR/companies.lang @@ -28,7 +28,7 @@ AliasNames=별칭 (상업용, 상표권 ...) AliasNameShort=Alias Name Companies=회사 CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=없음 Vendor=Vendor +Supplier=Vendor AddContact=연락처 생성 AddContactAddress=연락처 / 주소 생성 EditContact=연락처 편집 diff --git a/htdocs/langs/ko_KR/other.lang b/htdocs/langs/ko_KR/other.lang index dac4183c645..d7000f4e661 100644 --- a/htdocs/langs/ko_KR/other.lang +++ b/htdocs/langs/ko_KR/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=The intervention %s has been validated. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/ko_KR/website.lang b/htdocs/langs/ko_KR/website.lang index 09d273e28e7..c73b128d7bc 100644 --- a/htdocs/langs/ko_KR/website.lang +++ b/htdocs/langs/ko_KR/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/lo_LA/accountancy.lang b/htdocs/langs/lo_LA/accountancy.lang index 54ff1f68337..d64c13327b4 100644 --- a/htdocs/langs/lo_LA/accountancy.lang +++ b/htdocs/langs/lo_LA/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/lo_LA/admin.lang b/htdocs/langs/lo_LA/admin.lang index 9da8cc7c37b..f3335cb7b23 100644 --- a/htdocs/langs/lo_LA/admin.lang +++ b/htdocs/langs/lo_LA/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Create/modify services Permission534=Delete services Permission536=See/manage hidden services Permission538=Export services -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Read donations Permission702=Create/modify donations Permission703=Delete donations @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/lo_LA/bills.lang b/htdocs/langs/lo_LA/bills.lang index c9d46e4ffff..4f114d4df1c 100644 --- a/htdocs/langs/lo_LA/bills.lang +++ b/htdocs/langs/lo_LA/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma invoice InvoiceProFormaDesc=Proforma invoice is an image of a true invoice but has no accountancy value. InvoiceReplacement=Replacement invoice InvoiceReplacementAsk=Replacement invoice for invoice -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Credit note InvoiceAvoirAsk=Credit note to correct invoice InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/lo_LA/companies.lang b/htdocs/langs/lo_LA/companies.lang index 7790e8d173e..20e74ab2ac1 100644 --- a/htdocs/langs/lo_LA/companies.lang +++ b/htdocs/langs/lo_LA/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias name (commercial, trademark, ...) AliasNameShort=Alias Name Companies=Companies CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=None Vendor=Vendor +Supplier=Vendor AddContact=Create contact AddContactAddress=Create contact/address EditContact=Edit contact diff --git a/htdocs/langs/lo_LA/other.lang b/htdocs/langs/lo_LA/other.lang index b2242a76887..67df8a82501 100644 --- a/htdocs/langs/lo_LA/other.lang +++ b/htdocs/langs/lo_LA/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=The intervention %s has been validated. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/lo_LA/website.lang b/htdocs/langs/lo_LA/website.lang index 534756ac932..0ee00aff7c0 100644 --- a/htdocs/langs/lo_LA/website.lang +++ b/htdocs/langs/lo_LA/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/lt_LT/accountancy.lang b/htdocs/langs/lt_LT/accountancy.lang index e95f36b0abd..d3befafadf9 100644 --- a/htdocs/langs/lt_LT/accountancy.lang +++ b/htdocs/langs/lt_LT/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/lt_LT/admin.lang b/htdocs/langs/lt_LT/admin.lang index 2a4945d9fae..40655912693 100644 --- a/htdocs/langs/lt_LT/admin.lang +++ b/htdocs/langs/lt_LT/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Nuoroda į objektą, ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Sukurti/keisti paslaugas Permission534=Ištrinti paslaugas Permission536=Žiūrėti/tvarkyti paslėptas paslaugas Permission538=Eksportuoti paslaugas -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Skaityti aukas Permission702=Sukurti/keisti aukas Permission703=Ištrinti aukas @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/lt_LT/bills.lang b/htdocs/langs/lt_LT/bills.lang index c40206e8d2d..a0f656f429a 100644 --- a/htdocs/langs/lt_LT/bills.lang +++ b/htdocs/langs/lt_LT/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=išankstinė (proforma) sąskaita-faktūra InvoiceProFormaDesc=Išankstinė sąskaita-faktūra yra tikros sąskaitos forma, bet neatvaizduojama realioje apskaitoje. InvoiceReplacement=Sąskaitos-faktūros pakeitimas InvoiceReplacementAsk=Sąskaitos-faktūros pakeitimas sąskaita-faktūra -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Kreditinė sąskaita (kredito aviza) InvoiceAvoirAsk=Kreditinė sąskaita tikslinanti sąskaitą-faktūrą InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/lt_LT/companies.lang b/htdocs/langs/lt_LT/companies.lang index ff990678b36..4272211bf31 100644 --- a/htdocs/langs/lt_LT/companies.lang +++ b/htdocs/langs/lt_LT/companies.lang @@ -28,7 +28,7 @@ AliasNames=Pseudonimo pavadinimas (komercinis, prekės ženklas, ...) AliasNameShort=Alias Name Companies=Įmonės CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=Nė vienas Vendor=Vendor +Supplier=Vendor AddContact=Sukurti kontaktą AddContactAddress=Sukurti kontaktą / adresą EditContact=Redaguoti adresatą diff --git a/htdocs/langs/lt_LT/other.lang b/htdocs/langs/lt_LT/other.lang index eea79328a0e..7399591bf0c 100644 --- a/htdocs/langs/lt_LT/other.lang +++ b/htdocs/langs/lt_LT/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=Intervencija %s buvo patvirtinta EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/lt_LT/website.lang b/htdocs/langs/lt_LT/website.lang index 9acf3675a3b..61265c3251d 100644 --- a/htdocs/langs/lt_LT/website.lang +++ b/htdocs/langs/lt_LT/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/lv_LV/accountancy.lang b/htdocs/langs/lv_LV/accountancy.lang index 5ae8808bf6b..7808991734b 100644 --- a/htdocs/langs/lv_LV/accountancy.lang +++ b/htdocs/langs/lv_LV/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Rezultātu uzskaites konts (zaudējumi) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Noslēguma žurnāls ACCOUNTING_ACCOUNT_TRANSFER_CASH=Grāmatvedības konts bankas pārskaitījuma starp konts +TransitionalAccount=Pārejas bankas konta pārejas konts ACCOUNTING_ACCOUNT_SUSPENSE=Gaidīšanas grāmatvedības konts DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations @@ -216,7 +217,7 @@ DescThirdPartyReport=Konsultējieties ar trešo pušu klientu un pārdevēju sar ListAccounts=Grāmatvedības kontu saraksts UnknownAccountForThirdparty=Nezināmas trešās puses konts. Mēs izmantosim %s UnknownAccountForThirdpartyBlocking=Nezināms trešās puses konts. Bloķēšanas kļūda -ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Third-party account not defined or third party unknown. We will use %s +ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Trešās puses konts nav definēts vai trešā persona nav zināma. Mēs izmantosim %s ThirdpartyAccountNotDefinedOrThirdPartyUnknownBlocking=Trešās puses konts nav definēts vai trešā persona nav zināma. Bloķēšanas kļūda. UnknownAccountForThirdpartyAndWaitingAccountNotDefinedBlocking=Nav noteikts nezināms trešās puses konts un gaidīšanas konts. Bloķēšanas kļūda PaymentsNotLinkedToProduct=Maksājums nav saistīts ar kādu produktu / pakalpojumu @@ -292,7 +293,7 @@ Modelcsv_cogilog=Eksportēt uz Cogilog Modelcsv_agiris=Eksports uz Agiris Modelcsv_openconcerto=Eksportēt OpenConcerto (tests) Modelcsv_configurable=Eksportēt CSV konfigurējamu -Modelcsv_FEC=Export FEC +Modelcsv_FEC=Eksporta FEC Modelcsv_Sage50_Swiss=Eksports uz Sage 50 Šveici ChartofaccountsId=Kontu konts. Id @@ -317,9 +318,9 @@ WithoutValidAccount=Bez derīga veltīta konta WithValidAccount=Izmantojot derīgu veltītu kontu ValueNotIntoChartOfAccount=Šī grāmatvedības konta vērtība konta diagrammā nepastāv AccountRemovedFromGroup=Konts ir noņemts no grupas -SaleLocal=Local sale -SaleExport=Export sale -SaleEEC=Sale in EEC +SaleLocal=Vietējā pārdošana +SaleExport=Eksporta pārdošana +SaleEEC=Pārdošana EEK ## Dictionary Range=Range of accounting account @@ -340,7 +341,7 @@ UseMenuToSetBindindManualy=Līnijas, kas vēl nav saistītas, izmantojiet izvēl ## Import ImportAccountingEntries=Grāmatvedības ieraksti -DateExport=Date export +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 diff --git a/htdocs/langs/lv_LV/admin.lang b/htdocs/langs/lv_LV/admin.lang index c0937d9be97..226e333fcd1 100644 --- a/htdocs/langs/lv_LV/admin.lang +++ b/htdocs/langs/lv_LV/admin.lang @@ -149,7 +149,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 temporary files (no risk of losing data). Note: Deletion is done only if the temp directory was created 24 hours ago. +PurgeDeleteTemporaryFiles=Dzēst visus pagaidu failus (nav datu zaudēšanas riska). Piezīme. Dzēšana tiek veikta tikai tad, ja pagaidu katalogs tika izveidots pirms 24 stundām. PurgeDeleteTemporaryFilesShort=Dzēst 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 @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Izvēles rūtiņas no tabulas ExtrafieldLink=Saite uz objektu ComputedFormula=Aprēķinātais lauks ComputedFormulaDesc=Šeit varat ievadīt formulu, izmantojot citas objekta īpašības vai jebkuru PHP kodējumu, lai iegūtu dinamisku aprēķināto vērtību. Jūs varat izmantot jebkuru PHP saderīgu formulu, ieskaitot "?" stāvokļa operators un šāds globāls objekts: $ db, $ conf, $ langs, $ mysoc, $ user, $ object .
BRĪDINĀJUMS : tikai daži $ $ rekvizīti objekts var būt pieejams. Ja jums nav vajadzīgo īpašību, vienkārši ielādējiet objektu savā formulā, piemēram, otrajā piemērā.
Izmantojot aprēķināto lauku, jūs nevarat ievadīt sev nekādu vērtību no saskarnes. Arī tad, ja ir sintakses kļūda, formula nevar atgriezties neko.

Piemērs formulas:
$ object-> id <10? apaļa ($ object-> id / 2, 2): ($ object-> id + 2 * $ user-> id) * (int) substr ($ mysoc-> zip, 1, 2)

Piemērs, lai ielādētu objektu
(($ reloadedobj = jauns Societe ($ db)) & & ($ reloadedobj-> ielādēt ($ obj-> id? $ Obj-> id: ($ obj-> rowid? $ Obj-> rowid: $ object-> id))> 0))? $ reloadedobj-> array_options ['options_extrafieldkey'] * $ reloadedobj-> capital / 5: '-1'

Cits piemērs formulas, lai piespiestu objektu slodzi un tā mātes objektu:
(($ reloadedobj = jauns uzdevums ($ db)) && ($ reloadedobj-> fetch ($ object-> id)> 0) & & ($ secondloadedobj = jauns projekts ($ db)) & & ($ secondloadedobj-> fetch ($ reloadedobj-> fk_project )> 0))? $ secondloadedobj-> ref: 'Vecāku projekts nav atrasts' +Computedpersistent=Veikt aprēķinātu lauku +ComputedpersistentDesc=Aprēķinātie papildu lauki tiks saglabāti datubāzē, taču vērtība tiks pārrēķināta tikai tad, kad mainīsies šī lauka objekts. Ja aprēķinātais lauks ir atkarīgs no citiem objektiem vai globāliem datiem, šī vērtība var būt nepareiza! ExtrafieldParamHelpPassword=Atstājot šo lauku tukšu, tas nozīmē, ka šī vērtība tiks saglabāta bez šifrēšanas (laukam jābūt paslēptai tikai ar zvaigznīti uz ekrāna).
Iestatiet 'auto', lai izmantotu noklusējuma šifrēšanas kārtulu, lai saglabātu paroli datubāzē (pēc tam vērtība lasīt būs ashh tikai, nav iespējams izgūt sākotnējo vērtību) 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> ... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=Vērtību sarakstam jābūt rindām ar formāta atslēg ExtrafieldParamHelpsellist=Vērtību saraksts nāk no tabulas
Sintakse: table_name: label_field: id_field :: filtrs
piemērs: c_typent: libelle: id :: filtrs

- idfilter ir obligāti primārs int key | - filtrs var būt vienkāršs tests (piemēram, aktīvs = 1), lai parādītu tikai aktīvo vērtību
filtru raganā var izmantot arī $ ID $, kas ir pašreizējā objekta pašreizējais ID. $
, ja vēlaties filtrēt uz ekrāna, izmantojiet sintaksi extra.fieldcode = ... (ja lauka kods ir extrafield kods)

Lai saraksts būtu atkarīgs no cita papildu atribūtu saraksta: < br> c_typent: libelle: id: options_ vecāku_list_code | vecāku_krāsa: filtrs

Lai iegūtu sarakstu atkarībā no cita saraksta:
c_typent: libelle: id: parent_list_code | vecāku_ sleja: filtrs ExtrafieldParamHelpchkbxlst=Vērtību saraksts nāk no tabulas
Sintakse: table_name: label_field: id_field :: filtrs
piemērs: c_typent: libelle: id :: filtrs

filtrs var būt vienkāršs tests (piemēram, aktīvs = 1 ), lai parādītu tikai aktīvo vērtību
Jūs varat arī izmantot $ ID $ filtru raganā, kas ir pašreizējā objekta pašreizējais ID
Lai SELECT veiktu filtru, izmantojiet $ SEL $
, ja vēlaties filtrēt uz ekrāna. syntax extra.fieldcode = ... (ja lauka kods ir extrafield kods)

Lai iegūtu sarakstu atkarībā no cita papildu atribūtu saraksta:
c_typent: libelle: id: options_ parent_list_code | vecāku_krāsa: filtrs

Lai iegūtu sarakstu atkarībā no cita saraksta:
c_typent: libelle: id: vecāku saraksts_code | vecāku_ sleja: filtrs ExtrafieldParamHelplink=Parametriem jābūt ObjectName: Classpath
Syntax: ObjectName: Classpath
Piemēri:
Societe: societe / class / societe.class.php
Kontakti: contact / class / contact.class.php +ExtrafieldParamHelpSeparator=Vienkāršam atdalītājam jāglabā tukšs
Iestatiet to uz 1, lai atdalītu atdalītāju (atvērts pēc noklusējuma)
Iestatiet to uz 2, lai atdalītu atdalītāju (noklusēts pēc noklusējuma) LibraryToBuildPDF=Bibliotēka, ko izmanto PDF veidošanai LocalTaxDesc=Dažas valstis var piemērot divus vai trīs nodokļus katrā rēķina rindā. Šādā gadījumā izvēlieties otrā un trešā nodokļa veidu un likmi. Iespējamie veidi ir:
1: vietējais nodoklis attiecas uz produktiem un pakalpojumiem bez tvertnes (localtax tiek aprēķināts bez nodokļa)
2: vietējie nodokļi attiecas uz produktiem un pakalpojumiem, ieskaitot vat (localtax tiek aprēķināta pēc summas + galvenais nodoklis) )
3: vietējie nodokļi attiecas uz produktiem bez cisternām (localtax tiek aprēķināta bez nodokļa)
4: vietējie nodokļi attiecas uz produktiem, ieskaitot tvertni (localtax tiek aprēķināta pēc summas + galvenā tvertne)
5: vietējais nodoklis, ko piemēro par pakalpojumiem bez vat (vietējais maksājums tiek aprēķināts bez nodokļa)
6: vietējiem nodokļiem, kas attiecas uz pakalpojumiem, ieskaitot mucu (vietējais maksājums tiek aprēķināts pēc summas + nodokļa) SMS=SMS @@ -804,7 +807,7 @@ Permission401=Lasīt atlaides Permission402=Izveidot/mainīt atlaides Permission403=Apstiprināt atlaides Permission404=Dzēst atlaides -Permission430=Use Debug Bar +Permission430=Izmantot Debug Bar Permission511=Lasīt algu maksājumus Permission512=Izveidojiet / modificējiet algu maksājumus Permission514=Dzēst algu maksājumus @@ -819,9 +822,9 @@ Permission532=Izveidot/mainīt pakalpojumus Permission534=Dzēst pakalpojumus Permission536=Skatīt/vadīt slēptos pakalpojumus Permission538=Eksportēt pakalpojumus -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Lasīt materiālu rēķinus +Permission651=Izveidot / atjaunināt materiālu rēķinus +Permission652=Dzēst materiālu rēķinus Permission701=Lasīt ziedojumus Permission702=Izveidot/mainīt ziedojumus Permission703=Dzēst ziedojumus @@ -841,12 +844,12 @@ Permission1101=Skatīt piegādes pasūtījumus Permission1102=Izveidot/mainīt piegādes pasūtījumus Permission1104=Apstiprināt piegādes pasūtījumus Permission1109=Dzēst piegādes pasūtījumus -Permission1121=Read supplier proposals -Permission1122=Create/modify supplier proposals -Permission1123=Validate supplier proposals -Permission1124=Send supplier proposals -Permission1125=Delete supplier proposals -Permission1126=Close supplier price requests +Permission1121=Lasiet piegādātāja priekšlikumus +Permission1122=Izveidojiet / modificējiet piegādātāja priekšlikumus +Permission1123=Apstipriniet piegādātāja priekšlikumus +Permission1124=Sūtīt piegādātāja priekšlikumus +Permission1125=Dzēst piegādātāja priekšlikumus +Permission1126=Aizvērt piegādātāja cenu pieprasījumus Permission1181=Lasīt piegādātājus Permission1182=Lasīt pirkuma pasūtījumus Permission1183=Izveidot / mainīt pirkuma pasūtījumus @@ -882,15 +885,15 @@ Permission2503=Pievienot vai dzēst dokumentus Permission2515=Iestatīt dokumentu direktorijas Permission2801=Lietot FTP klientu lasīšanas režīmā (pārlūko un lejupielādē) Permission2802=Lietot FTP klientu rakstīšanas režīmā (dzēst vai augšupielādēt failus) -Permission3200=Read archived events and fingerprints -Permission4001=See employees -Permission4002=Create employees -Permission4003=Delete employees -Permission4004=Export employees -Permission10001=Read website content -Permission10002=Create/modify website content (html and javascript content) -Permission10003=Create/modify website content (dynamic php code). Dangerous, must be reserved to restricted developers. -Permission10005=Delete website content +Permission3200=Lasīt arhivētos notikumus un pirkstu nospiedumus +Permission4001=Skatīt darbiniekus +Permission4002=Izveidot darbiniekus +Permission4003=Dzēst darbiniekus +Permission4004=Eksportēt darbiniekus +Permission10001=Lasīt tīmekļa vietnes saturu +Permission10002=Izveidot / mainīt vietnes saturu (html un javascript saturu) +Permission10003=Izveidojiet / modificējiet vietnes saturu (dinamisko php kodu). Bīstami, tie ir jārezervē ierobežotiem izstrādātājiem. +Permission10005=Dzēst vietnes saturu Permission20001=Lasiet atvaļinājuma pieprasījumus (jūsu atvaļinājumu un jūsu padoto atvaļinājumu) Permission20002=Izveidojiet / modificējiet atvaļinājuma pieprasījumus (jūsu atvaļinājumu un jūsu padotajiem) Permission20003=Dzēst atvaļinājumu pieprasījumus @@ -904,19 +907,19 @@ Permission23004=Izpildīt ieplānoto uzdevumu Permission50101=Izmantot pārdošanas vietu Permission50201=Lasīt darījumus Permission50202=Importēt darījumus -Permission50401=Bind products and invoices with accounting accounts -Permission50411=Read operations in ledger -Permission50412=Write/Edit operations in ledger -Permission50414=Delete operations in ledger -Permission50415=Delete all operations by year and journal in ledger -Permission50418=Export operations of the ledger -Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year -Permission50440=Manage chart of accounts, setup of accountancy -Permission51001=Read assets -Permission51002=Create/Update assets -Permission51003=Delete assets -Permission51005=Setup types of asset +Permission50401=Iesiet produktus un rēķinus ar grāmatvedības kontiem +Permission50411=Lasiet operācijas virsgrāmatā +Permission50412=Rakstīt / rediģēt operācijas virsgrāmatā +Permission50414=Dzēst operācijas virsgrāmatā +Permission50415=Izdzēsiet visas darbības pēc gada un žurnāla žurnālā +Permission50418=Virsgrāmatas eksporta operācijas +Permission50420=Ziņot un eksportēt pārskatus (apgrozījums, bilance, žurnāli, virsgrāmatas) +Permission50430=Definēt un slēgt fiskālo periodu +Permission50440=Pārvaldiet kontu sarakstu, grāmatvedības uzskaiti +Permission51001=Lasīt krājumus +Permission51002=Izveidot / atjaunināt aktīvus +Permission51003=Dzēst aktīvus +Permission51005=Aktīvu iestatīšanas veidi Permission54001=Drukāt Permission55001=Lasīt aptaujas Permission55002=Izveidot/labot aptaujas @@ -1110,7 +1113,7 @@ AreaForAdminOnly=Iestatīšanas parametrus var iestatīt tikai administrator SystemInfoDesc=Sistēmas informācija ir dažādi tehniskā informācija jums tikai lasīšanas režīmā un redzama tikai administratoriem. SystemAreaForAdminOnly=Šī joma ir pieejama tikai administratora lietotājiem. Dolibarr lietotāja atļaujas nevar mainīt šo ierobežojumu. CompanyFundationDesc=Rediģējiet uzņēmuma / organizācijas informāciju. Noklikšķiniet uz pogas "%s" vai "%s" lapas apakšdaļā. -AccountantDesc=If you have an external accountant/bookkeeper, you can edit here its information. +AccountantDesc=Ja jums ir ārējais grāmatvedis / grāmatvedis, varat rediģēt šeit savu informāciju. AccountantFileNumber=Grāmatveža kods DisplayDesc=Šeit var mainīt parametrus, kas ietekmē Dolibarr izskatu un uzvedību. AvailableModules=Pieejamās progrmma / moduļi @@ -1923,5 +1926,5 @@ IFTTTDesc=Šis modulis ir paredzēts, lai aktivizētu IFTTT notikumus un / vai v UrlForIFTTT=URL beigu punkts IFTTT YouWillFindItOnYourIFTTTAccount=Jūs atradīsiet to savā IFTTT kontā EndPointFor=Beigu punkts %s: %s -DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +DeleteEmailCollector=Dzēst e-pasta kolekcionāru +ConfirmDeleteEmailCollector=Vai tiešām vēlaties dzēst šo e-pasta kolekcionāru? diff --git a/htdocs/langs/lv_LV/bills.lang b/htdocs/langs/lv_LV/bills.lang index 47690bc4ba5..44f7d7838b1 100644 --- a/htdocs/langs/lv_LV/bills.lang +++ b/htdocs/langs/lv_LV/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma rēķins InvoiceProFormaDesc=Formāta rēķins ir attēls patiesu rēķina, bet nav nekādas grāmatvedības uzskaites vērtības. InvoiceReplacement=Nomaiņas rēķins InvoiceReplacementAsk=Nomaiņa rēķins par rēķinu -InvoiceReplacementDesc= Nomaiņa rēķins tiek izmantots, lai atceltu un pilnībā nomainītu rēķinu bez jau saņemta maksājuma.

Piezīme. Var nomainīt tikai rēķinus bez maksājuma. Ja rēķins, kuru nomaināt, vēl nav aizvērts, tas tiks automātiski slēgts, lai "pamestu". +InvoiceReplacementDesc=Rezerves rēķinu izmanto, lai pilnībā aizstātu rēķinu bez maksājuma, kas jau saņemts.

Piezīme: var nomainīt tikai rēķinus, kuriem nav maksājuma. Ja aizstātais rēķins vēl nav slēgts, tas tiks automātiski aizvērts, lai to atteiktu. InvoiceAvoir=Kredīta piezīme InvoiceAvoirAsk=Kredīta piezīme, lai koriģētu rēķinu InvoiceAvoirDesc= Kredīta piezīme ir negatīvs rēķins, ko izmanto, lai izlabotu faktu, ka rēķinā parādīta summa, kas atšķiras no faktiski samaksātās summas (piemēram, klients kļūdaini samaksājis pārāk daudz vai nemaksās pilno summu kopš daži produkti tika atgriezti). diff --git a/htdocs/langs/lv_LV/cashdesk.lang b/htdocs/langs/lv_LV/cashdesk.lang index 1c71ba8aa6c..461fd16da52 100644 --- a/htdocs/langs/lv_LV/cashdesk.lang +++ b/htdocs/langs/lv_LV/cashdesk.lang @@ -68,4 +68,4 @@ Terminal=Terminal NumberOfTerminals=Termināļu skaits TerminalSelect=Atlasiet termināli, kuru vēlaties izmantot: POSTicket=POS biļete -BasicPhoneLayout=Use basic layout for phones +BasicPhoneLayout=Izmantojiet telefonu pamata izkārtojumu diff --git a/htdocs/langs/lv_LV/companies.lang b/htdocs/langs/lv_LV/companies.lang index 4061ed23e72..349661c2a6f 100644 --- a/htdocs/langs/lv_LV/companies.lang +++ b/htdocs/langs/lv_LV/companies.lang @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolūtā pārdevēju atlaides (ievada visi li SupplierAbsoluteDiscountMy=Absolūtā pārdevēja atlaides (ievadījis pats) DiscountNone=Nav Vendor=Pārdevējs +Supplier=Pārdevējs AddContact=Izveidot kontaktu AddContactAddress=Izveidot kontaktu/adresi EditContact=Labot kontaktu diff --git a/htdocs/langs/lv_LV/mails.lang b/htdocs/langs/lv_LV/mails.lang index dd400d13e7d..9eaa536b32c 100644 --- a/htdocs/langs/lv_LV/mails.lang +++ b/htdocs/langs/lv_LV/mails.lang @@ -78,9 +78,9 @@ GroupEmails=Grupas e-pasti OneEmailPerRecipient=Viens e-pasts katram adresātam (pēc noklusējuma viens e-pasts uz vienu atlasīto ierakstu) WarningIfYouCheckOneRecipientPerEmail=Brīdinājums. Ja atzīmēsit šo izvēles rūtiņu, tas nozīmē, ka tiks nosūtīts tikai viens e-pasta ziņojums, izvēloties vairākus atšķirīgus ierakstus, tādēļ, ja jūsu ziņojumā ir iekļauti aizstājējumultiņi, kas attiecas uz ieraksta datiem, tos nevar aizstāt. ResultOfMailSending=Masu sūtīšanas rezultāts -NbSelected=Number selected -NbIgnored=Number ignored -NbSent=Number sent +NbSelected=Numurs izvēlēts +NbIgnored=Numurs ignorēts +NbSent=Sūtītais numurs SentXXXmessages=%s ziņa (s) nosūtīta. ConfirmUnvalidateEmailing=Vai tiešām vēlaties mainīt e-pastu %s uz melnraksta statusu? MailingModuleDescContactsWithThirdpartyFilter=Sazinieties ar klientu filtriem diff --git a/htdocs/langs/lv_LV/members.lang b/htdocs/langs/lv_LV/members.lang index 1b53052c51a..03971532446 100644 --- a/htdocs/langs/lv_LV/members.lang +++ b/htdocs/langs/lv_LV/members.lang @@ -171,7 +171,7 @@ MembersStatisticsDesc=Izvēlieties statistiku kuru vēlaties izlasīt ... MenuMembersStats=Statistika LastMemberDate=Pēdējā biedra datums LatestSubscriptionDate=Jaunākais piereģistrēšanās datums -MemberNature=Nature of member +MemberNature=Dalībnieka raksturs Public=Informācija ir publiska NewMemberbyWeb=Jauns dalībnieks pievienots. Gaida apstiprinājumu NewMemberForm=Jauna dalībnieka forma diff --git a/htdocs/langs/lv_LV/other.lang b/htdocs/langs/lv_LV/other.lang index 78f4e29d191..6a164cc5ef3 100644 --- a/htdocs/langs/lv_LV/other.lang +++ b/htdocs/langs/lv_LV/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Klientu rēķinu skaits NumberOfSupplierProposals=Pārdevēja priekšlikumu skaits NumberOfSupplierOrders=Pirkuma pasūtījumu skaits NumberOfSupplierInvoices=Pārdevēja rēķinu skaits +NumberOfContracts=Līgumu skaits NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Vienību skaits pārdošanas pasūtījumos NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Vienību skaits pārdevēja priekšlikumos NumberOfUnitsSupplierOrders=Vienību skaits pirkuma pasūtījumos NumberOfUnitsSupplierInvoices=Vienību skaits pārdevēja rēķinos +NumberOfUnitsContracts=Vienību skaits līgumos EMailTextInterventionAddedContact=Jums ir piešķirta jauna iejaukšanās %s. EMailTextInterventionValidated=Iejaukšanās %s ir apstiprināta. EMailTextInvoiceValidated=Rēķins %s ir apstiprināts. diff --git a/htdocs/langs/lv_LV/products.lang b/htdocs/langs/lv_LV/products.lang index 6dd9360e6b9..7db31a84a8e 100644 --- a/htdocs/langs/lv_LV/products.lang +++ b/htdocs/langs/lv_LV/products.lang @@ -159,7 +159,7 @@ SuppliersPrices=Pārdevēja cenas SuppliersPricesOfProductsOrServices=Pārdevēja cenas (produktiem vai pakalpojumiem) CustomCode=Muita / Prece / HS kods CountryOrigin=Izcelsmes valsts -Nature=Nature of produt (material/finished) +Nature=Izstrādājuma veids (materiāls/gatavs) ShortLabel=Īsais nosaukums Unit=Vienība p=u. diff --git a/htdocs/langs/lv_LV/salaries.lang b/htdocs/langs/lv_LV/salaries.lang index 07b280565e6..816227ad4cb 100644 --- a/htdocs/langs/lv_LV/salaries.lang +++ b/htdocs/langs/lv_LV/salaries.lang @@ -18,4 +18,4 @@ LastSalaries=Jaunākie %s algu maksājumi AllSalaries=Visi algu maksājumi SalariesStatistics=Algas statistika # Export -SalariesAndPayments=Salaries and payments +SalariesAndPayments=Algas un maksājumi diff --git a/htdocs/langs/lv_LV/stocks.lang b/htdocs/langs/lv_LV/stocks.lang index 26ecdf29269..7a6ff663492 100644 --- a/htdocs/langs/lv_LV/stocks.lang +++ b/htdocs/langs/lv_LV/stocks.lang @@ -66,12 +66,12 @@ RuleForStockManagementIncrease=Izvēlieties noteikumu automātiskai krājumu pal DeStockOnBill=Samaziniet reālos krājumus klienta rēķina / kredītzīmes atzīmēšanā DeStockOnValidateOrder=Samaziniet reālos krājumus pārdošanas pasūtījuma apstiprināšanā DeStockOnShipment=Samazināt reālos krājumus piegādes apstiprinājuma gadījumā -DeStockOnShipmentOnClosing=Decrease real stocks when shipping is set to closed +DeStockOnShipmentOnClosing=Samazināt reālos krājumus, kad sūtījums ir noslēgts ReStockOnBill=Palieliniet reālos krājumus, apstiprinot pārdevēja rēķinu / kredīta piezīmi ReStockOnValidateOrder=Palieliniet reālo krājumu pirkšanas pasūtījuma apstiprinājumā ReStockOnDispatchOrder=Palieliniet reālos krājumus manuālajā nosūtīšanā noliktavā, pēc pirkuma pasūtījuma saņemšanas -StockOnReception=Increase real stocks on validation of reception -StockOnReceptionOnClosing=Increase real stocks when reception is set to closed +StockOnReception=Palieliniet reālos krājumus, kad apstiprināta saņemšana +StockOnReceptionOnClosing=Palieliniet reālos krājumus, kad saņemšana ir slēgta OrderStatusNotReadyToDispatch=Lai vēl nav vai vairs statusu, kas ļauj sūtījumiem produktu krājumu noliktavās. StockDiffPhysicTeoric=Explanation for difference between physical and virtual stock NoPredefinedProductToDispatch=Nav iepriekš produktu šo objektu. Līdz ar to nav nosūtot noliktavā ir nepieciešama. diff --git a/htdocs/langs/lv_LV/website.lang b/htdocs/langs/lv_LV/website.lang index 1ceefd882d9..b751bddd422 100644 --- a/htdocs/langs/lv_LV/website.lang +++ b/htdocs/langs/lv_LV/website.lang @@ -98,8 +98,8 @@ NoWebSiteCreateOneFirst=Vēl nav izveidota neviena vietne. Vispirms izveidojiet GoTo=Iet uz DynamicPHPCodeContainsAForbiddenInstruction=Jūs pievienojat dinamisku PHP kodu, kas satur PHP norādījumu ' %s ', kas pēc noklusējuma ir aizliegta kā dinamisks saturs (skatiet slēptās opcijas WEBSITE_PHP_ALLOW_xxx, lai palielinātu atļauto komandu sarakstu). NotAllowedToAddDynamicContent=Jums nav atļaujas pievienot vai rediģēt PHP dinamisko saturu tīmekļa vietnēs. Uzdodiet atļauju vai vienkārši saglabājiet kodu php tagos nemainītā veidā. -ReplaceWebsiteContent=Nomainiet vietnes saturu +ReplaceWebsiteContent=Meklēt vai aizstāt vietnes saturu DeleteAlsoJs=Vai arī dzēst visus šajā tīmekļa vietnē raksturīgos javascript failus? DeleteAlsoMedias=Vai arī dzēst visus šajā tīmekļa vietnē esošos mediju failus? # Export -MyWebsitePages=My website pages +MyWebsitePages=Manas vietnes lapas diff --git a/htdocs/langs/lv_LV/withdrawals.lang b/htdocs/langs/lv_LV/withdrawals.lang index 43d51376581..841f1627174 100644 --- a/htdocs/langs/lv_LV/withdrawals.lang +++ b/htdocs/langs/lv_LV/withdrawals.lang @@ -69,8 +69,8 @@ WithBankUsingBANBIC=Attiecībā uz banku kontiem, izmantojot IBAN / BIC / SWIFT BankToReceiveWithdraw=Bankas konta saņemšana CreditDate=Kredīts WithdrawalFileNotCapable=Unable to generate withdrawal receipt file for your country %s (Your country is not supported) -ShowWithdraw=Show Direct Debit Order -IfInvoiceNeedOnWithdrawPaymentWontBeClosed=However, if invoice has at least one direct debit payment order not yet processed, it won't be set as paid to allow prior withdrawal management. +ShowWithdraw=Rādīt tiešā debeta rīkojumu +IfInvoiceNeedOnWithdrawPaymentWontBeClosed=Tomēr, ja rēķinam ir vismaz viens tiešā debeta maksājuma rīkojums, kas vēl nav apstrādāts, tas netiks iestatīts kā maksāts, lai varētu veikt iepriekšēju izņemšanas pārvaldību. DoStandingOrdersBeforePayments=Šī cilne ļauj pieprasīt tiešā debeta maksājuma uzdevumu. Kad esat pabeidzis, dodieties uz izvēlni Bank-> Tiešais debets, lai pārvaldītu tiešā debeta maksājuma uzdevumu. Ja maksājuma uzdevums ir slēgts, rēķins tiek automātiski reģistrēts, un rēķins tiek slēgts, ja atlikušais maksājums ir nulle. WithdrawalFile=Izstāšanās fails SetToStatusSent=Nomainīt uz statusu "Fails nosūtīts" diff --git a/htdocs/langs/mk_MK/accountancy.lang b/htdocs/langs/mk_MK/accountancy.lang index bb141cb9eb0..758d9c340a5 100644 --- a/htdocs/langs/mk_MK/accountancy.lang +++ b/htdocs/langs/mk_MK/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/mk_MK/admin.lang b/htdocs/langs/mk_MK/admin.lang index 18fac329b2d..c021eeb4cff 100644 --- a/htdocs/langs/mk_MK/admin.lang +++ b/htdocs/langs/mk_MK/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Create/modify services Permission534=Delete services Permission536=See/manage hidden services Permission538=Export services -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Read donations Permission702=Create/modify donations Permission703=Delete donations @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/mk_MK/bills.lang b/htdocs/langs/mk_MK/bills.lang index a5db0421635..aef2b5fce2f 100644 --- a/htdocs/langs/mk_MK/bills.lang +++ b/htdocs/langs/mk_MK/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Про Фактура InvoiceProFormaDesc= Профактурата е иста како вистинска фактура, но нема сметководствена вредност. InvoiceReplacement=Замена на фактура InvoiceReplacementAsk=Replacement invoice for invoice -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Credit note InvoiceAvoirAsk=Credit note to correct invoice InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/mk_MK/companies.lang b/htdocs/langs/mk_MK/companies.lang index e88e4a1dee0..5a6e506d90e 100644 --- a/htdocs/langs/mk_MK/companies.lang +++ b/htdocs/langs/mk_MK/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias name (commercial, trademark, ...) AliasNameShort=Alias Name Companies=Companies CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=None Vendor=Vendor +Supplier=Vendor AddContact=Create contact AddContactAddress=Create contact/address EditContact=Edit contact diff --git a/htdocs/langs/mk_MK/other.lang b/htdocs/langs/mk_MK/other.lang index a6802140be3..8a5ccdbab5c 100644 --- a/htdocs/langs/mk_MK/other.lang +++ b/htdocs/langs/mk_MK/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=The intervention %s has been validated. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/mk_MK/website.lang b/htdocs/langs/mk_MK/website.lang index 534756ac932..0ee00aff7c0 100644 --- a/htdocs/langs/mk_MK/website.lang +++ b/htdocs/langs/mk_MK/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/mn_MN/accountancy.lang b/htdocs/langs/mn_MN/accountancy.lang index bb141cb9eb0..758d9c340a5 100644 --- a/htdocs/langs/mn_MN/accountancy.lang +++ b/htdocs/langs/mn_MN/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/mn_MN/admin.lang b/htdocs/langs/mn_MN/admin.lang index 9eaa12ec9be..f30d6edd9f7 100644 --- a/htdocs/langs/mn_MN/admin.lang +++ b/htdocs/langs/mn_MN/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Create/modify services Permission534=Delete services Permission536=See/manage hidden services Permission538=Export services -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Read donations Permission702=Create/modify donations Permission703=Delete donations @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/mn_MN/bills.lang b/htdocs/langs/mn_MN/bills.lang index c9d46e4ffff..4f114d4df1c 100644 --- a/htdocs/langs/mn_MN/bills.lang +++ b/htdocs/langs/mn_MN/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma invoice InvoiceProFormaDesc=Proforma invoice is an image of a true invoice but has no accountancy value. InvoiceReplacement=Replacement invoice InvoiceReplacementAsk=Replacement invoice for invoice -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Credit note InvoiceAvoirAsk=Credit note to correct invoice InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/mn_MN/companies.lang b/htdocs/langs/mn_MN/companies.lang index 77bd4f8a445..578f5cb8920 100644 --- a/htdocs/langs/mn_MN/companies.lang +++ b/htdocs/langs/mn_MN/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias name (commercial, trademark, ...) AliasNameShort=Alias Name Companies=Companies CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=None Vendor=Vendor +Supplier=Vendor AddContact=Create contact AddContactAddress=Create contact/address EditContact=Edit contact diff --git a/htdocs/langs/mn_MN/other.lang b/htdocs/langs/mn_MN/other.lang index a6802140be3..8a5ccdbab5c 100644 --- a/htdocs/langs/mn_MN/other.lang +++ b/htdocs/langs/mn_MN/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=The intervention %s has been validated. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/mn_MN/website.lang b/htdocs/langs/mn_MN/website.lang index 534756ac932..0ee00aff7c0 100644 --- a/htdocs/langs/mn_MN/website.lang +++ b/htdocs/langs/mn_MN/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/nb_NO/accountancy.lang b/htdocs/langs/nb_NO/accountancy.lang index 1c296c94956..1357c7572c0 100644 --- a/htdocs/langs/nb_NO/accountancy.lang +++ b/htdocs/langs/nb_NO/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Resultatregnskapskonto (tap) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Avslutningsjournal ACCOUNTING_ACCOUNT_TRANSFER_CASH=Regnskapkonto for overgangsbasert overføring +TransitionalAccount=Overgangsbasert bankoverføringskonto ACCOUNTING_ACCOUNT_SUSPENSE=Regnskapskonto for vent DONATION_ACCOUNTINGACCOUNT=Regnskapskonto for registrering av donasjoner @@ -216,7 +217,7 @@ DescThirdPartyReport=Liste over tredjeparts kunder og leverandører og deres reg ListAccounts=Liste over regnskapskontoer UnknownAccountForThirdparty=Ukjent tredjepartskonto. Vi vil bruke %s UnknownAccountForThirdpartyBlocking=Ukjent tredjepartskonto. Blokkeringsfeil -ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Third-party account not defined or third party unknown. We will use %s +ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Tredjepartskonto ikke definert eller tredjepart ukjent. Vi bruker %s ThirdpartyAccountNotDefinedOrThirdPartyUnknownBlocking=Tredjepartskonto ikke definert eller tredjepart ukjent. Blokkeringsfeil. UnknownAccountForThirdpartyAndWaitingAccountNotDefinedBlocking=Ukjent tredjepartskonto og ventekonto ikke definert. Blokkeringsfeil PaymentsNotLinkedToProduct=Betaling ikke knyttet til noen vare/tjeneste @@ -292,7 +293,7 @@ Modelcsv_cogilog=Eksport til Cogilog Modelcsv_agiris=Eksport til Agiris Modelcsv_openconcerto=Eksport for OpenConcerto (Test) Modelcsv_configurable=Eksport CSV Konfigurerbar -Modelcsv_FEC=Export FEC +Modelcsv_FEC=Eksporter FEC Modelcsv_Sage50_Swiss=Eksport for Sage 50 Switzerland ChartofaccountsId=Kontoplan ID @@ -317,9 +318,9 @@ WithoutValidAccount=Uten gyldig dedikert konto WithValidAccount=Med gyldig dedikert konto ValueNotIntoChartOfAccount=Denne verdien av regnskapskonto eksisterer ikke i kontoplanen AccountRemovedFromGroup=Kontoen er fjernet fra gruppen -SaleLocal=Local sale -SaleExport=Export sale -SaleEEC=Sale in EEC +SaleLocal=Lokalt salg +SaleExport=Eksportsalg +SaleEEC=Salg i EU ## Dictionary Range= Oversikt over regnskapskonto @@ -340,7 +341,7 @@ UseMenuToSetBindindManualy=Linjer som ennå ikke er bundet, bruk menyen
%s ). Bruk av denne funksjonen er normalt ikke nødvendig. Den leveres som en løsning for brukere hvis Dolibarr er vert for en leverandør som ikke tilbyr tillatelser for å slette filer generert av webserveren. PurgeDeleteLogFile=Slett loggfiler, inkludert %s definert for Syslog-modulen (ingen risiko for å miste data) -PurgeDeleteTemporaryFiles=Delete all temporary files (no risk of losing data). Note: Deletion is done only if the temp directory was created 24 hours ago. +PurgeDeleteTemporaryFiles=Slett alle midlertidige filer (ingen risiko for å miste data). Merk: Slettingen gjøres bare hvis temp-katalogen ble opprettet for over 24 timer siden. PurgeDeleteTemporaryFilesShort=Slett temporære filer PurgeDeleteAllFilesInDocumentsDir=Slett alle filer i katalogen: %s .
Dette vil slette alle genererte dokumenter relatert til elementer (tredjeparter, fakturaer etc ...), filer lastet opp i ECM-modulen, database backup dumper og midlertidig filer. PurgeRunNow=Start utrenskning @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Avkrysningsbokser fra tabell ExtrafieldLink=Lenke til et objekt ComputedFormula=Beregnet felt ComputedFormulaDesc=Her kan du skrive inn en formel ved hjelp av andre objektegenskaper eller PHP-koding for å få en dynamisk beregningnet verdi. Du kan bruke PHP-kompatible formler, inkludert "?" operator og følgende globale objekt: $db, $conf, $langs, $mysoc, $user, $objekt .

ADVARSEL : Kanskje bare noen egenskaper på $objekt er tilgjengelig. Hvis du trenger egenskaper som ikke er lastet, kan du bare hente objektet i formelen din som i det andre eksempelet.
Ved å bruke et beregnet felt betyr det at du ikke selv kan angi noen verdi fra grensesnittet. Også, hvis det er en syntaksfeil, kan det hende formelen ikke returnerer noe.

Eksempel på formel:
$objekt->id<10? round ($object->id / 2, 2) : ($object-> id + 2 *$user->id) * (int) substr($mysoc->zip, 1, 2)

Eksempel på å ny innlasting av objekt
(($reloadedobj = new Societe ($db)) && ($reloadedobj->fetch($obj-> id? $ obj-> id: ($obj-> rowid? $obj-> rowid: $object-> id))> 0))? $reloadedobj-> array_options ['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Annet eksempel på formel for å tvinge lasting av objekt og dets overordnede objekt:
(($reloadedobj = Ny oppgave ($db)) && ($reloadedobj->fetch($objekt->id)> 0) && ($secondloadedobj = nytt prosjekt ($db)) && ($secondloadedobj->fetch($reloadedobj-> fk_project )> 0))? $secondloadedobj-> ref: 'Foreldreprosjekt ikke funnet' +Computedpersistent=Lagre beregnede felt +ComputedpersistentDesc=Beregnede ekstrafelt vil bli lagret i databasen, men verdien blir bare omregnet når objektet til dette feltet endres. Hvis det beregnede feltet avhenger av andre objekter eller globale data, kan denne verdien være feil! ExtrafieldParamHelpPassword=Hvis dette feltet er tomt, vil denne verdien bli lagret uten kryptering (feltet må bare skjules med stjerne på skjermen).
Angi 'auto' for å bruke standard krypteringsregel for å lagre passordet i databasen (da vil verdiavlesning være bare hash, uten noen måte å hente opprinnelig verdi på) ExtrafieldParamHelpselect=Liste over verdier må være linjer med formatet nøkkel,verdi (hvor nøkkelen ikke kan være '0')

for eksempel:
1,verdi1
2,verdi2
kode3,verdi3
...

For å få listen avhengig av en annen komplementær attributtliste:
1,verdi1|options_parent_list_code:parent_key
2,value2|options_parent_list_code: parent_key

For å få listen avhengig av en annen liste:
1,verdi1|parent_list_code:parent_key
2,value2|parent_list_code : parent_key ExtrafieldParamHelpcheckbox=Liste over verdier må være linjer med formatet nøkkel,verdi (hvor nøkkelen ikke kan være '0')

for eksempel:
1,verdi1
2,verdi2
3,verdi3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=Liste over verdier må være linjer med formatet nøkke ExtrafieldParamHelpsellist=Liste over verdier kommer fra en tabell
Syntaks: tabellnavn: label_field: id_field::filter
Eksempel: c_typent: libelle:id::filter

- idfilter er nødvendigvis en primær int nøkkel
- filteret kan være en enkel test (f.eks. aktiv = 1) for å vise bare aktiv verdi
Du kan også bruke $ID$ i filtre, som er gjeldende ID for nåværende objekt
For å utføre en SELECT i filtre, bruk $SEL$
Hvis du vil filtrere på ekstrafelt, bruk syntaks extra.fieldcode=... (der feltkoden er koden til ekstrafelt)

For å få listen avhengig av en annen komplementær attributtliste:
c_typent:libelle:id:options_parent_list_code | parent_column:filter

For å få listen avhengig av en annen liste:
c_typent:libelle:id:parent_list_code |parent_column:filter ExtrafieldParamHelpchkbxlst=Liste over verdier kommer fra en tabell
Syntaks: table_name:label_field:id_field::filter
Eksempel: c_typent:libelle:id::filter

filter kan være en enkel test (f.eks. Aktiv=1 ) for å vise bare aktiv verdi
Du kan også bruke $ID$ i filter, som er gjeldende ID for nåværende objekt
For å utføre en SELECT i filter, bruk $SEL$
Hvis du vil filtrere på ekstrafeltbruk bruk syntaks extra.fieldcode=... (der feltkoden er koden til ekstrafelt)

For å få listen avhengig av en annen komplementær attributtliste:
c_typent:libelle:id:options_parent_list_code |parent_column:filter

For å få listen avhengig av en annen liste:
c_typent:libelle:id:parent_list_code |parent_column:filter ExtrafieldParamHelplink=Parametere må være ObjectName: Classpath
Syntax: ObjectName: Classpath
Eksempler:
Societe: societe / class / societe.class.php
Kontakt: kontakt / class / contact.class.php +ExtrafieldParamHelpSeparator=Hold tom for en enkel separator
Sett dette til 1 for en kollapserende separator (åpen som standard)
Sett dette til 2 for en kollapserende separator (kollapset som standard) LibraryToBuildPDF=Bibliotek brukt for PDF-generering LocalTaxDesc=For noen land gjelder to eller tre skatter på hver fakturalinje. Dersom dette er tilfelle, velg type for andre og tredje skatt, samt sats. Mulig type:
1: lokalavgift gjelder på varer og tjenester uten mva (lokal avgift er beregnet beløp uten mva)
2: lokalavgift gjelder på varer og tjenester, inkludert merverdiavgift (lokalavgift beregnes på beløpet + hovedavgift)
3: lokalavgift gjelder på varer uten mva (lokalavgift er beregnet beløp uten mva)
4: lokalagift gjelder på varer inkludert mva (lokalavgift beregnes på beløpet + hovedavgift)
5: lokal skatt gjelder tjenester uten mva (lokalavgift er beregnet beløp uten mva)
6: lokalavgift gjelder på tjenester inkludert mva (lokalavgift beregnes på beløpet + mva) SMS=SMS @@ -766,10 +769,10 @@ Permission243=Slett kategorier Permission244=Se innholdet i skjulte kategorier Permission251=Vis andre brukere og grupper PermissionAdvanced251=Vis andre brukere -Permission252=Lage/endre andre brukere, grupper og deres rettigheter +Permission252=Les tillatelser fra andre brukere Permission253=Opprett/endre andre brukere, grupper og tillatelser PermissionAdvanced253=Opprett/endre interne/eksterne brukere og tillatelser -Permission254=Slette eller deaktivere andre brukere +Permission254=Opprett/modifiser kun eksterne brukere Permission255=Opprett/endre egen brukerinformasjon Permission256=Slett eller deaktiver andre brukere Permission262=Utvid tilgangen til alle tredjeparter (ikke bare tredjeparter der brukeren er en salgsrepresentant).
Virker ikke på eksterne brukere (alltid begrenset til egne tilbud, ordre, fakturaer, kontrakter mm).
Virker ikke på prosjekter (kun regler for prosjekttillatelser, synlighet og tildeling gjelder). @@ -804,7 +807,7 @@ Permission401=Vis rabatter Permission402=Opprett/endre rabatter Permission403=Valider rabatter Permission404=Slett rabatter -Permission430=Use Debug Bar +Permission430=Bruk Debug Bar Permission511=Les lønnsutbetalinger Permission512=Opprett/endre betaling av lønn Permission514=Slett utbetalinger av lønn @@ -819,9 +822,9 @@ Permission532=Opprett/endre tjenester Permission534=Slett tjenester Permission536=Administrer skjulte tjenester Permission538=Eksporter tjenester -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Les BOM (Bills of Materials) +Permission651=Opprett/oppdater BOM +Permission652=Slett BOM Permission701=Vis donasjoner Permission702=Opprett/endre donasjoner Permission703=Slett donasjoner @@ -841,12 +844,12 @@ Permission1101=Vis pakksedler Permission1102=Opprett/endre pakksedler Permission1104=Valider pakksedler Permission1109=Slett pakksedler -Permission1121=Read supplier proposals -Permission1122=Create/modify supplier proposals -Permission1123=Validate supplier proposals -Permission1124=Send supplier proposals -Permission1125=Delete supplier proposals -Permission1126=Close supplier price requests +Permission1121=Les leverandørtilbud +Permission1122=Opprett/modifiser leverandørtilbud +Permission1123=Bekreft leverandørtilbud +Permission1124=Send leverandørtilbud +Permission1125=Slett leverandørtilbud +Permission1126=Lukk leverandør prisforespørsler Permission1181=Vis leverandører Permission1182=Les innkjøpsordre Permission1183=Opprett/modifiser innkjøpsordre @@ -882,15 +885,15 @@ Permission2503=Send eller slett dokumenter Permission2515=Oppsett av dokumentmapper Permission2801=Bruk FTP-klient i lesemodus (bla gjennom og laste ned) Permission2802=Bruk FTP-klient i skrivemodus (slette eller laste opp filer) -Permission3200=Read archived events and fingerprints -Permission4001=See employees -Permission4002=Create employees -Permission4003=Delete employees -Permission4004=Export employees -Permission10001=Read website content -Permission10002=Create/modify website content (html and javascript content) -Permission10003=Create/modify website content (dynamic php code). Dangerous, must be reserved to restricted developers. -Permission10005=Delete website content +Permission3200=Les arkiverte hendelser og fingeravtrykk +Permission4001=Se ansatte +Permission4002=Opprett ansatte +Permission4003=Slett ansatte +Permission4004=Eksporter ansatte +Permission10001=Les nettstedsinnhold +Permission10002=Opprett/endre innhold på nettstedet (html og javascript innhold) +Permission10003=Opprett/endre nettstedsinnhold (dynamisk PHP-kode). Farlig, må reserveres for erfarne utviklere. +Permission10005=Slett nettstedsinnhold Permission20001=Les permitteringsforespørsler (dine og dine underordnedes) Permission20002=Opprett/endre permisjonene dine (dine og dine underordnedes) Permission20003=Slett ferieforespørsler @@ -904,19 +907,19 @@ Permission23004=Utfør planlagt oppgave Permission50101=Bruk utsalgssted Permission50201=Les transaksjoner Permission50202=Importer transaksjoner -Permission50401=Bind products and invoices with accounting accounts -Permission50411=Read operations in ledger -Permission50412=Write/Edit operations in ledger -Permission50414=Delete operations in ledger -Permission50415=Delete all operations by year and journal in ledger -Permission50418=Export operations of the ledger -Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year -Permission50440=Manage chart of accounts, setup of accountancy -Permission51001=Read assets -Permission51002=Create/Update assets -Permission51003=Delete assets -Permission51005=Setup types of asset +Permission50401=Tilknytt varer og fakturaer til regnskapskontoer +Permission50411=Les operasjoner i hovedbok +Permission50412=Skriv/rediger operasjoner i hovedbok +Permission50414=Slett operasjoner i hovedbok +Permission50415=Slett alle operasjoner etter år og journal i hovedbok +Permission50418=Eksporter operasjoner fra hovedboken +Permission50420=Rapporter og eksportrapporter (omsetning, balanse, journaler, hovedbok) +Permission50430=Definer og lukk en regnskapsperiode +Permission50440=Administrer kontooversikt, oppsett av regnskap +Permission51001=Les eiendeler +Permission51002=Opprett/oppdater eiendeler +Permission51003=Slett eiendeler +Permission51005=Oppsett av aktivatyper Permission54001=Skriv ut Permission55001=Les meningsmålinger Permission55002=Opprett/endre meningsmålinger @@ -1110,7 +1113,7 @@ AreaForAdminOnly=Oppsettparametere kan bare angis av administratorbrukere Proforma faktura er et bilde av en ekte faktura, men har ingen verdi i regnskapsføring. InvoiceReplacement=Erstatningsfaktura InvoiceReplacementAsk=Erstatningsfaktura for faktura -InvoiceReplacementDesc=Erstatningsfaktura brukes til å avbryte og erstatte en faktura uten at betaling allerede er mottatt.

Merk: Bare faktura uten innbetaling kan erstattes. Hvis ikke faktura er lukket, vil den bli automatisk satt til 'forlatt'. +InvoiceReplacementDesc=Erstatningsfaktura brukes til å erstatte en faktura uten at betaling allerede mottatt.

Merk: Bare fakturaer uten innbetaling kan erstattes. Hvis fakturaen du erstatter, ikke er avsluttet, blir den automatisk stengt for å "forlates". InvoiceAvoir=Kreditnota InvoiceAvoirAsk=Kreditnota for å korrigere faktura InvoiceAvoirDesc=En kreditnota er en negativ faktura som brukes for å løse situasjoner hvor en faktura har et annet beløp enn det som virkelig er betalt (fordi kunden har betalt for lite ved en feil, eller for eksempel ikke ønsker å betale alt fordi han har returnert noen varer). diff --git a/htdocs/langs/nb_NO/cashdesk.lang b/htdocs/langs/nb_NO/cashdesk.lang index 9dcab394ae2..9a1c46f65a2 100644 --- a/htdocs/langs/nb_NO/cashdesk.lang +++ b/htdocs/langs/nb_NO/cashdesk.lang @@ -68,4 +68,4 @@ Terminal=Terminal NumberOfTerminals=Antall terminaler TerminalSelect=Velg terminalen du vil bruke: POSTicket=POS Billett -BasicPhoneLayout=Use basic layout for phones +BasicPhoneLayout=Bruk grunnleggende oppsett for telefoner diff --git a/htdocs/langs/nb_NO/companies.lang b/htdocs/langs/nb_NO/companies.lang index 9fc215894a4..96cb91248e5 100644 --- a/htdocs/langs/nb_NO/companies.lang +++ b/htdocs/langs/nb_NO/companies.lang @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolutte leverandørrabatter (oppgitt av alle SupplierAbsoluteDiscountMy=Absolutt leverandørrabatter (oppgitt av deg selv) DiscountNone=Ingen Vendor=Leverandør +Supplier=Leverandør AddContact=Opprett kontakt AddContactAddress=Opprett kontakt/adresse EditContact=Endre kontakt diff --git a/htdocs/langs/nb_NO/mails.lang b/htdocs/langs/nb_NO/mails.lang index a1e27fc6687..e0ab0167659 100644 --- a/htdocs/langs/nb_NO/mails.lang +++ b/htdocs/langs/nb_NO/mails.lang @@ -78,9 +78,9 @@ GroupEmails=Gruppe e-postmeldinger OneEmailPerRecipient=Én e-post per mottaker (som standard, en e-post per post valgt) WarningIfYouCheckOneRecipientPerEmail=Advarsel, hvis du merker av denne boksen, betyr det at bare en e-post vil bli sendt for flere forskjellige valgte poster, så hvis meldingen inneholder erstatningsvariabler som refererer til data i en post, blir det ikke mulig å erstatte dem. ResultOfMailSending=Resultat av massesending av e-post -NbSelected=Number selected -NbIgnored=Number ignored -NbSent=Number sent +NbSelected=Antall valgt +NbIgnored=Antall ignorert +NbSent=Antall sendt SentXXXmessages=%s melding(er) sendt. ConfirmUnvalidateEmailing=Er du sikker på at du vil endre status på epost %s til kladd? MailingModuleDescContactsWithThirdpartyFilter=Kontakt med kundefilter diff --git a/htdocs/langs/nb_NO/members.lang b/htdocs/langs/nb_NO/members.lang index 6faaf810b05..5949a5b499a 100644 --- a/htdocs/langs/nb_NO/members.lang +++ b/htdocs/langs/nb_NO/members.lang @@ -171,7 +171,7 @@ MembersStatisticsDesc=Velg statistikk du ønsker å lese ... MenuMembersStats=Statistikk LastMemberDate=Siste medlemsdato LatestSubscriptionDate=Siste abonnementsdato -MemberNature=Nature of member +MemberNature=Medlemskapets art Public=Informasjon er offentlig NewMemberbyWeb=Nytt medlem lagt til. Venter på godkjenning NewMemberForm=Skjema for nytt medlem diff --git a/htdocs/langs/nb_NO/other.lang b/htdocs/langs/nb_NO/other.lang index fea18d2ca40..020490eb57e 100644 --- a/htdocs/langs/nb_NO/other.lang +++ b/htdocs/langs/nb_NO/other.lang @@ -3,7 +3,7 @@ SecurityCode=Sikkerhetskode NumberingShort=Nr Tools=Verktøy TMenuTools=Verktøy -ToolsDesc=All tools not included in other menu entries are grouped here.
All the tools can be accessed via the left menu. +ToolsDesc=Alle verktøy som ikke er inkludert i andre menyoppføringer, er gruppert her.
Alle verktøyene kan nås via menyen til venstre. Birthday=Fødselsdag BirthdayDate=Fødselsdag DateToBirth=Fødselsdag @@ -20,10 +20,10 @@ ZipFileGeneratedInto=Zip-fil generert til %s. DocFileGeneratedInto=Doc-fil generert til %s. JumpToLogin=Frakoblet. Gå til påloggingssiden ... MessageForm=Melding på elektronisk betalingsformular -MessageOK=Message on the return page for a validated payment -MessageKO=Message on the return page for a canceled payment +MessageOK=Melding på retursiden for en godkjent betaling +MessageKO=Melding på retursiden for en kansellert betaling ContentOfDirectoryIsNotEmpty=Denne katalogen er ikke tom. -DeleteAlsoContentRecursively=Check to delete all content recursively +DeleteAlsoContentRecursively=Sjekk om du vil slette alt innhold rekursivt YearOfInvoice=År av fakturadato PreviousYearOfInvoice=Forrige års fakturadato @@ -31,15 +31,15 @@ NextYearOfInvoice=Følgende år av fakturadato DateNextInvoiceBeforeGen=Dato for neste faktura (før generering) DateNextInvoiceAfterGen=Dato for neste faktura (etter generering) -Notify_ORDER_VALIDATE=Sales order validated -Notify_ORDER_SENTBYMAIL=Sales order sent by mail -Notify_ORDER_SUPPLIER_SENTBYMAIL=Purchase order sent by email -Notify_ORDER_SUPPLIER_VALIDATE=Purchase order recorded -Notify_ORDER_SUPPLIER_APPROVE=Purchase order approved -Notify_ORDER_SUPPLIER_REFUSE=Purchase order refused -Notify_PROPAL_VALIDATE=Kundentilbud validert -Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed -Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused +Notify_ORDER_VALIDATE=Salgsordre validert +Notify_ORDER_SENTBYMAIL=Salgsordre sendt via epost +Notify_ORDER_SUPPLIER_SENTBYMAIL=Innkjøpsordre sendt via e-post +Notify_ORDER_SUPPLIER_VALIDATE=Innkjøpsordre er registrert +Notify_ORDER_SUPPLIER_APPROVE=Innkjøpsordre godkjent +Notify_ORDER_SUPPLIER_REFUSE=Innkjøpsordre avvist +Notify_PROPAL_VALIDATE=Kundetilbud validert +Notify_PROPAL_CLOSE_SIGNED=Kundetilbud lukket signert +Notify_PROPAL_CLOSE_REFUSED=Kundetilbud lukket avvist Notify_PROPAL_SENTBYMAIL=Tilbud sendt med post Notify_WITHDRAW_TRANSMIT=Overføring avbrudt Notify_WITHDRAW_CREDIT=Kreditt tilbaketrekning @@ -51,10 +51,10 @@ Notify_BILL_UNVALIDATE=Validering fjernet på kundefaktura Notify_BILL_PAYED=Kundefaktura betalt Notify_BILL_CANCEL=Kundefaktura kansellert Notify_BILL_SENTBYMAIL=Kundefaktura sendt i posten -Notify_BILL_SUPPLIER_VALIDATE=Vendor invoice validated -Notify_BILL_SUPPLIER_PAYED=Vendor invoice paid -Notify_BILL_SUPPLIER_SENTBYMAIL=Vendor invoice sent by mail -Notify_BILL_SUPPLIER_CANCELED=Vendor invoice cancelled +Notify_BILL_SUPPLIER_VALIDATE=Leverandørfaktura validert +Notify_BILL_SUPPLIER_PAYED=Leverandørfaktura betalt +Notify_BILL_SUPPLIER_SENTBYMAIL=Leverandørfaktura sendt via post +Notify_BILL_SUPPLIER_CANCELED=Leverandørfaktura kansellert Notify_CONTRACT_VALIDATE=Kontrakt validert Notify_FICHEINTER_VALIDATE=Intervensjon validert Notify_FICHINTER_ADD_CONTACT=Kontakt lagt til intervensjon @@ -70,29 +70,29 @@ Notify_PROJECT_CREATE=Opprettelse av prosjekt Notify_TASK_CREATE=Oppgave opprettet Notify_TASK_MODIFY=Oppgave endret Notify_TASK_DELETE=Oppgave slettet -Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required) -Notify_EXPENSE_REPORT_APPROVE=Expense report approved -Notify_HOLIDAY_VALIDATE=Leave request validated (approval required) -Notify_HOLIDAY_APPROVE=Leave request approved +Notify_EXPENSE_REPORT_VALIDATE=Utgiftsrapport validert(godkjenning kreves) +Notify_EXPENSE_REPORT_APPROVE=Utgiftsrapport godkjent +Notify_HOLIDAY_VALIDATE=Permisjonsforespørselen er validert (godkjenning kreves) +Notify_HOLIDAY_APPROVE=Permisjonsforespørsel godkjent SeeModuleSetup=Se oppsett av modul %s NbOfAttachedFiles=Antall vedlagte filer/dokumenter TotalSizeOfAttachedFiles=Total størrelse på vedlagte filer/dokumenter MaxSize=Maksimal størrelse AttachANewFile=Legg ved ny fil/dokument LinkedObject=Lenkede objekter -NbOfActiveNotifications=Number of notifications (no. of recipient emails) +NbOfActiveNotifications=Antall notifikasjoner (antall e-postmottakere) PredefinedMailTest=__(Hei)__\nDette er en testmelding sendt til __EMAIL__.\nDe to linjene er skilt fra hverandre med et linjeskift.\n\n__USER_SIGNATURE__ PredefinedMailTestHtml=__(Hei)__\nDette er en test e-post (ordtesten må være i fet skrift). De to linjene skilles med et linjeskift.

__USER_SIGNATURE__ PredefinedMailContentContract=__(Hei)__\n\n\n__(Vennlig hilsen)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find invoice __REF__ attached \n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to remind you that the invoice __REF__ seems to have not been paid. A copy of the invoice is attached as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find commercial proposal __REF__ attached \n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find price request __REF__ attached\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find order __REF__ attached\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find our order __REF__ attached\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find invoice __REF__ attached\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find shipping __REF__ attached\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find intervention __REF__ attached\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ +PredefinedMailContentSendInvoice=__(Hei)__\n\nVedlagt faktura __REF__ \n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Vennlig hilsen)__\n\n__USER_SIGNATURE__ +PredefinedMailContentSendInvoiceReminder=__(Hei)__\n\nVi vil gjerne minne om at fakturaen __REF__ ikke har blitt betalt. En kopi av fakturaen er vedlagt som en påminnelse.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Vennlig hilsen)__\n\n__USER_SIGNATURE__ +PredefinedMailContentSendProposal=__(Hei)__\n\nTilbud __REF__ vedlagt\n\n\n__(Vennlig hilsen)__\n\n__USER_SIGNATURE__ +PredefinedMailContentSendSupplierProposal=__(Hei)__\n\nPrisforespørsel __REF__ vedlagt\n\n\n__(Vennlig hilsen)__\n\n__USER_SIGNATURE__ +PredefinedMailContentSendOrder=__(Hei)__\n\nOrdre __REF__ vedlagt\n\n\n__(Vennlig hilsen)__\n\n__USER_SIGNATURE__ +PredefinedMailContentSendSupplierOrder=__(Hei)__\n\nBestilling __REF__ vedlagt\n\n\n__(Vennlig hilsen)__\n\n__USER_SIGNATURE__ +PredefinedMailContentSendSupplierInvoice=__(Hei)__\n\nFaktura __REF__ vedlagt\n\n\n__(Vennlig hilsen)__\n\n__USER_SIGNATURE__ +PredefinedMailContentSendShipping=__(Hei)__\n\nFraktbrev __REF__ vedlagt\n\n\n__(Vennlig hilsen)__\n\n__USER_SIGNATURE__ +PredefinedMailContentSendFichInter=__(Hei)__\n\nIntervensjon __REF__ vedlagt\n\n\n__(Vennlig hilsen)__\n\n__USER_SIGNATURE__ PredefinedMailContentThirdparty=__(Hei)__\n\n\n__(Vennlig hilsen)__\n\n__USER_SIGNATURE__ PredefinedMailContentContact=__(Hei)__\n\n\n__(Vennlig hilsen)__\n\n__USER_SIGNATURE__ PredefinedMailContentUser=__(Hei)__\n\n\n__(Vennlig hilsen)__\n\n__USER_SIGNATURE__ @@ -108,7 +108,7 @@ DemoCompanyProductAndStocks=Firma som selger varer via butikk DemoCompanyAll=Firma med mange aktiviteter (alle hovedmoduler) CreatedBy=Laget av %s ModifiedBy=Endret av %s -ValidatedBy=Validertav %s +ValidatedBy=Validert av %s ClosedBy=Lukket av %s CreatedById=Bruker-ID som opprettet ModifiedById=Bruker-ID som gjorde siste endring @@ -177,36 +177,38 @@ EnableGDLibraryDesc=Installer eller aktiver GD-bibliotek i din PHP-installasjon ProfIdShortDesc=Prof-ID %s er avhengig av tredjepartens land.
For eksempel er det for %s, koden %s. DolibarrDemo=Dolibarr ERP/CRM demo StatsByNumberOfUnits=Statistikk over summen av produkter/tjenester -StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...) +StatsByNumberOfEntities=Statistikk over antall henvisende enheter (antall fakturaer, eller ordre ...) NumberOfProposals=Antall tilbud -NumberOfCustomerOrders=Number of sales orders +NumberOfCustomerOrders=Antall salgsordre NumberOfCustomerInvoices=Antall kundefakturaer -NumberOfSupplierProposals=Number of vendor proposals -NumberOfSupplierOrders=Number of purchase orders -NumberOfSupplierInvoices=Number of vendor invoices +NumberOfSupplierProposals=Antall leverandørtilbud +NumberOfSupplierOrders=Antall innkjøpsordre +NumberOfSupplierInvoices=Antall leverandørfakturaer +NumberOfContracts=Antall kontrakter NumberOfUnitsProposals=Antall enheter i tilbud -NumberOfUnitsCustomerOrders=Number of units on sales orders +NumberOfUnitsCustomerOrders=Antall enheter på salgsordre NumberOfUnitsCustomerInvoices=Antall enheter i kundefakturaer -NumberOfUnitsSupplierProposals=Number of units on vendor proposals -NumberOfUnitsSupplierOrders=Number of units on purchase orders -NumberOfUnitsSupplierInvoices=Number of units on vendor invoices -EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. +NumberOfUnitsSupplierProposals=Antall enheter på leverandørtilbud +NumberOfUnitsSupplierOrders=Antall enheter på innkjøpsordre +NumberOfUnitsSupplierInvoices=Antall enheter på leverandørfakturaer +NumberOfUnitsContracts=Antall enheter i kontrakter +EMailTextInterventionAddedContact=En ny intervensjon %s har blitt tildelt deg. EMailTextInterventionValidated=Intervensjonen %s har blitt validert. -EMailTextInvoiceValidated=Invoice %s has been validated. -EMailTextInvoicePayed=Invoice %s has been paid. -EMailTextProposalValidated=Proposal %s has been validated. -EMailTextProposalClosedSigned=Proposal %s has been closed signed. -EMailTextOrderValidated=Order %s has been validated. -EMailTextOrderApproved=Order %s has been approved. -EMailTextOrderValidatedBy=Order %s has been recorded by %s. -EMailTextOrderApprovedBy=Order %s has been approved by %s. -EMailTextOrderRefused=Order %s has been refused. -EMailTextOrderRefusedBy=Order %s has been refused by %s. -EMailTextExpeditionValidated=Shipping %s has been validated. -EMailTextExpenseReportValidated=Expense report %s has been validated. -EMailTextExpenseReportApproved=Expense report %s has been approved. -EMailTextHolidayValidated=Leave request %s has been validated. -EMailTextHolidayApproved=Leave request %s has been approved. +EMailTextInvoiceValidated=Faktura %s er validert. +EMailTextInvoicePayed=Faktura %s er betalt. +EMailTextProposalValidated=Tilbud %s er validert. +EMailTextProposalClosedSigned=Tilbud %s er lukket, signert. +EMailTextOrderValidated=Ordre %s er validert. +EMailTextOrderApproved=Ordre %s er godkjent. +EMailTextOrderValidatedBy=Ordre %s har blitt registrert av %s. +EMailTextOrderApprovedBy=Ordre %s har blitt godkjent av %s. +EMailTextOrderRefused=Ordre%s har blitt avvist. +EMailTextOrderRefusedBy=Ordre %s har blitt avvist av %s. +EMailTextExpeditionValidated=Forsendelse %s er validert. +EMailTextExpenseReportValidated=Utgiftsrapport %s er validert. +EMailTextExpenseReportApproved=Utgiftsrapport %s er godkjent. +EMailTextHolidayValidated=Permisjonsforespørsel %s er validert. +EMailTextHolidayApproved=Permisjonsforespørsel %s er godkjent. ImportedWithSet=Datasett for import DolibarrNotification=Automatisk varsling ResizeDesc=Skriv inn ny bredde eller ny høyde. BxH forhold vil bli beholdt . @@ -214,7 +216,7 @@ NewLength=Ny bredde NewHeight=Ny høyde NewSizeAfterCropping=Ny størrelse etter beskjæring DefineNewAreaToPick=Definer nytt område på bildet for å hente (venstreklikk på bildet og dra til du kommer til motsatt hjørne) -CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image +CurrentInformationOnImage=Dette verktøyet ble utviklet for å hjelpe deg med å endre størrelse eller beskjære et bilde. Dette er informasjonen om gjeldende redigert bilde ImageEditor=Billedbehandler YouReceiveMailBecauseOfNotification=Du mottar denne meldingen fordi din e-post har blitt lagt til listen over mål for å bli informert om spesielle hendelser i %s programvare av %s. YouReceiveMailBecauseOfNotification2=Denne hendelsen er følgende: @@ -245,11 +247,11 @@ YourPasswordMustHaveAtLeastXChars=Passordet ditt må ha minst %s %s' som vanligvis er forbudt som dynamisk innhold (se skjulte alternativer WEBSITE_PHP_ALLOW_xxx for å øke listen over tillatte kommandoer). NotAllowedToAddDynamicContent=Du har ikke tillatelse til å legge til eller redigere PHP dynamisk innhold på nettsteder. Be om tillatelse eller behold koden i php-kodene uendret. -ReplaceWebsiteContent=Erstatt nettsideinnhold +ReplaceWebsiteContent=Søk eller erstatt nettstedsinnhold DeleteAlsoJs=Slett også alle javascript-filer som er spesifikke for denne nettsiden? DeleteAlsoMedias=Slett også alle mediefiler som er spesifikke for denne nettsiden? # Export -MyWebsitePages=My website pages +MyWebsitePages=Mine nettsider diff --git a/htdocs/langs/nb_NO/withdrawals.lang b/htdocs/langs/nb_NO/withdrawals.lang index ce42e5e20a0..12a9ddada5f 100644 --- a/htdocs/langs/nb_NO/withdrawals.lang +++ b/htdocs/langs/nb_NO/withdrawals.lang @@ -69,8 +69,8 @@ WithBankUsingBANBIC=For bankkontoer som bruker IBAN/BIC/SWIFT BankToReceiveWithdraw=Mottakende bankkonto CreditDate=Kreditt på WithdrawalFileNotCapable=Kan ikke ikke generere kvitteringsfil for tilbaketrekking for landet ditt %s (Landet er ikke støttet) -ShowWithdraw=Show Direct Debit Order -IfInvoiceNeedOnWithdrawPaymentWontBeClosed=However, if invoice has at least one direct debit payment order not yet processed, it won't be set as paid to allow prior withdrawal management. +ShowWithdraw=Vis direkte debitordre +IfInvoiceNeedOnWithdrawPaymentWontBeClosed=Men, hvis fakturaen har minst én avbestillingsordre som ikke er behandlet ennå, blir den ikke satt som betalt for å tillate tidligere håndtering av tilbaketrekninger. DoStandingOrdersBeforePayments=Under denne fanen kan du be om en direktedebet-betalingsordre .Når dette er gjort, kan du gå inn i menyen Bank-> direktedebet-ordre for å håndtere betalingsoppdraget .Når betalingsoppdraget er lukket, vil betaling på fakturaen automatisk bli registrert, og fakturaen lukkes hvis restbeløpet er null. WithdrawalFile=Tilbaketrekkingsfil SetToStatusSent=Sett status til "Fil Sendt" diff --git a/htdocs/langs/nl_BE/accountancy.lang b/htdocs/langs/nl_BE/accountancy.lang index 119e3b4882f..5e684f25fe2 100644 --- a/htdocs/langs/nl_BE/accountancy.lang +++ b/htdocs/langs/nl_BE/accountancy.lang @@ -22,7 +22,6 @@ EndProcessing=Verwerking beëindigd Lineofinvoice=Factuur lijn Docdate=Datum Docref=Artikelcode -ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Third-party account not defined or third party unknown. Blocking error. TotalVente=Totaal omzet voor belastingen AccountingJournalType2=Verkoop AccountingJournalType3=Inkoop diff --git a/htdocs/langs/nl_BE/admin.lang b/htdocs/langs/nl_BE/admin.lang index 2ffd6272541..429474d0fd5 100644 --- a/htdocs/langs/nl_BE/admin.lang +++ b/htdocs/langs/nl_BE/admin.lang @@ -1,6 +1,21 @@ # Dolibarr language file - Source file is en_US - admin VersionLastInstall=Versie van eerste installatie +FileCheck=Fileset Integriteitscontrole +FileCheckDesc=Met deze tool kunt u de integriteit van bestanden en de instellingen van uw toepassing controleren door elk bestand te vergelijken met het officiële bestand. De waarde van sommige setup-constanten kan ook worden gecontroleerd. U kunt dit hulpprogramma gebruiken om te bepalen of bestanden zijn gewijzigd (bijvoorbeeld door een hacker). +FileIntegrityIsOkButFilesWereAdded=Controle van de integriteit van bestanden is verstreken, maar er zijn enkele nieuwe bestanden toegevoegd. +FileIntegritySomeFilesWereRemovedOrModified=Controle van de integriteit van bestanden is mislukt. Sommige bestanden zijn gewijzigd, verwijderd of toegevoegd. +GlobalChecksum=Globale checksum +RemoteSignature=Remote distant handtekening (betrouwbaarder) +FilesModified=Gewijzigde bestanden +FilesAdded=Bestanden toegevoegd +AvailableOnlyOnPackagedVersions=Het lokale bestand voor integriteitscontrole is alleen beschikbaar als de toepassing is geïnstalleerd vanuit een officieel pakket +XmlNotFound=Xml-integriteitsbestand van toepassing niet gevonden +SessionSavePath=Sessie opslaglocatie ConfirmPurgeSessions=Ben je zeker dat je alle sessies wil wissen? De connectie van elke gebruiker zal worden verbroken (uitgezonderd jezelf). +NoSessionListWithThisHandler=Save session handler geconfigureerd in uw PHP staat niet toe dat alle lopende sessies worden getoond. +ConfirmLockNewSessions=Weet je zeker dat je elke nieuwe Dolibarr-verbinding wilt beperken tot jezelf? Alleen gebruiker %s kan daarna nog een verbinding maken. +Sessions=Gebruikers Sessie +NoSessionFound=Uw PHP-configuratie lijkt het toevoegen van actieve sessies niet toe te staan. De map die wordt gebruikt om sessies op te slaan ( %s ) kan worden beveiligd (bijvoorbeeld door OS-machtigingen of door PHP-richtlijn open_basedir). DBStoringCharset=Databasekarakterset voor het opslaan van gegevens DBSortingCharset=Databasekarakterset voor het sorteren van gegevens UserSetup=Gebruikersbeheerinstellingen @@ -11,7 +26,6 @@ MenusDesc=Menubeheerders stellen de inhoud van de 2 menubalken in (horizontaal e MenusEditorDesc=De menu editor laat je toe om aangepaste menu-invoer te definiëren. Wees voorzichtig bij het gebruik van deze functionaliteit, om instabiele en permanent onvindbare menus te voorkomen.
Sommige modules voegen menu-meldingen toe (in menu Alles meestal). Indien u per ongeluk sommige van deze meldingen zou verwijderen, dan kan u deze herstellen door de module eerst uit te schakelen en opnieuw in te schakelen. SystemToolsArea=Systeemwerksetoverzicht PurgeDeleteLogFile=Verwijder logbestanden, inclusief %s  gedefinieerd voor Syslog module (geen risico om gegevens te verliezen) -PurgeDeleteTemporaryFiles=Verwijder alle tijdelijke bestanden (geen risico op verlies van gegevens) PurgeNothingToDelete=Geen map of bestanden om te verwijderen. PurgeAuditEvents=Verwijder alle gebeurtenisen ConfirmPurgeAuditEvents=Ben je zeker dat je alle veiligheidsgebeurtenissen wil verwijderen? Alle veiligheidslogboeken zullen worden verwijderd, en geen andere bestanden worden verwijderd diff --git a/htdocs/langs/nl_BE/agenda.lang b/htdocs/langs/nl_BE/agenda.lang index 6ba8ec0c085..04f2b85cd6e 100644 --- a/htdocs/langs/nl_BE/agenda.lang +++ b/htdocs/langs/nl_BE/agenda.lang @@ -2,8 +2,11 @@ EventReports=Gebeurtenisrapporten ToUserOfGroup=Aan elke gebruiker in groep ViewPerType=Overzicht per type +AgendaAutoActionDesc=Hier kunt u gebeurtenissen definiëren die u Dolibarr automatisch in Agenda wilt laten maken. Als er niets wordt gecontroleerd, worden alleen handmatige acties opgenomen in logboeken en weergegeven in Agenda. Automatisch bijhouden van zakelijke acties die worden uitgevoerd op objecten (validatie, statuswijziging), wordt niet opgeslagen. +AgendaSetupOtherDesc=Deze pagina biedt opties voor het exporteren van uw Dolibarr-evenementen naar een externe agenda (Thunderbird, Google Agenda, enz.) EventRemindersByEmailNotEnabled=Herinneringen via email was niet ingeschakeld in %s van module setup. NewCompanyToDolibarr=Derde %s aangemaakt +COMPANY_DELETEInDolibarr=Derden (externen) %s verwijderd ContractValidatedInDolibarr=Contract %s goedgekeurd CONTRACT_DELETEInDolibarr=Contract %s geannuleerd MemberModifiedInDolibarr=Lid %s werd aangepast @@ -12,7 +15,15 @@ MemberSubscriptionModifiedInDolibarr=Abonnement %s voor lid %s aangepast ShipmentValidatedInDolibarr=Shipment %s goedgekeurd ShipmentClassifyClosedInDolibarr=Verzending %s werd geclassificeerd als gefactureerd ShipmentUnClassifyCloseddInDolibarr=Verzending %s werd geclassificieerd als opnieuw geopend +ShipmentBackToDraftInDolibarr=Verzending %s zet om naar conceptstatus ShipmentDeletedInDolibarr=Shipment %s gewist +ProposalSentByEMail=Commercieel voorstel %s verzonden per e-mail +ContractSentByEMail=Contract %s verzonden per e-mail +OrderSentByEMail=Verkooporder %s verzonden per e-mail +InvoiceSentByEMail=Klantfactuur %s per e-mail verzonden +SupplierOrderSentByEMail=Bestelling %s per e-mail verzonden +SupplierInvoiceSentByEMail=Leveranciersfactuur %s verzonden per e-mail +ShippingSentByEMail=Verzending %s verzonden per e-mail ProposalDeleted=Offerte verwijderd EXPENSE_REPORT_CREATEInDolibarr=Onkostenrapport %s aangemaakt EXPENSE_REPORT_VALIDATEInDolibarr=Onkostenrapport %s gevalideerd @@ -20,6 +31,11 @@ EXPENSE_REPORT_APPROVEInDolibarr=Onkostenrapport %s goedgekeurd EXPENSE_REPORT_DELETEInDolibarr=Onkostenrapport %s verwijderd EXPENSE_REPORT_REFUSEDInDolibarr=Onkostenrapport %s geweigerd PROJECT_MODIFYInDolibarr=Project %s gewijzigd +TICKET_CREATEInDolibarr=Ticket %s aangemaakt +TICKET_MODIFYInDolibarr=Ticket %s aangepast +TICKET_ASSIGNEDInDolibarr=Ticket %s toegewezen +TICKET_CLOSEInDolibarr=Ticket %s gesloten +TICKET_DELETEInDolibarr=Ticket %s verwijderd AgendaModelModule=Document sjablonen voor een gebeurtenis AgendaUrlOptionsNotAdmin=logina=!%s om de uitvoer van acties te beperken die niet werden toegewezen aan de gebruiker %s. AgendaUrlOptions4=logint=%s om de uitvoer van acties te beperken die aan de gebruiker %s is toegewezen. (eigenaar en anderen). diff --git a/htdocs/langs/nl_BE/contracts.lang b/htdocs/langs/nl_BE/contracts.lang index 149dc3ee2eb..7fb625a9a17 100644 --- a/htdocs/langs/nl_BE/contracts.lang +++ b/htdocs/langs/nl_BE/contracts.lang @@ -1,6 +1,24 @@ # Dolibarr language file - Source file is en_US - contracts +ShowContractOfService=Toon servicecontract NewContractSubscription=Nieuwe contracten/abonnementen +ActivateAllOnContract=Activeer alle diensten +ConfirmDeleteAContract=Weet je zeker dat je dit contract en alle bijbehorende services wilt verwijderen? +ConfirmValidateContract=Weet je zeker dat je dit contract wilt valideren onder de naam %s ? +ConfirmActivateAllOnContract=Hiermee worden alle services geopend (nog niet actief). Weet je zeker dat je alle diensten wil openen? +ConfirmCloseContract=Hiermee worden alle diensten gesloten (actief of niet). Weet je zeker dat je dit contract wilt sluiten? +ConfirmCloseService=Weet je zeker dat je deze dienst wilt afsluiten met de datum %s ? +ConfirmActivateService=Weet je zeker dat je deze dienst wilt activeren met de datum %s ? +LastContracts=Laatste %s-contracten +LastModifiedServices=Laatste %s gewijzigde diensten DateStartPlanned=Geplande startdatum DateStartPlannedShort=Geplande startdatum DateEndPlanned=Geplande einddatum DateEndPlannedShort=Geplande einddatum +BoardRunningServices=Lopende diensten +CloseRefusedBecauseOneServiceActive=Contract kan niet worden gesloten omdat er ten minste één open dienst op staat +ActivateAllContracts=Activeer alle contractregels +ConfirmDeleteContractLine=Weet je zeker dat je deze contractregel wilt verwijderen? +ConfirmCloneContract=Weet u zeker als u event %s wilt klonen? +LowerDateEndPlannedShort=Eerdere geplande einddatum van actieve diensten +SendContractRef=Contractinformatie __REF__ +OtherContracts=Andere contracten diff --git a/htdocs/langs/nl_BE/interventions.lang b/htdocs/langs/nl_BE/interventions.lang index 937ada94ffc..e1ec9e29b85 100644 --- a/htdocs/langs/nl_BE/interventions.lang +++ b/htdocs/langs/nl_BE/interventions.lang @@ -1,4 +1,5 @@ # Dolibarr language file - Source file is en_US - interventions +InterventionSentByEMail=Interventie %s per e-mail verzonden InterventionsArea=Interventieruimte DraftFichinter=Concept interventie LastModifiedInterventions=Laatste %s gemodificeerde interventies diff --git a/htdocs/langs/nl_BE/ticket.lang b/htdocs/langs/nl_BE/ticket.lang index 0b54b422afb..b59d26af5bc 100644 --- a/htdocs/langs/nl_BE/ticket.lang +++ b/htdocs/langs/nl_BE/ticket.lang @@ -2,6 +2,9 @@ Permission56001=Zie tickets Permission56002=Wijzig tickets 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 TicketTypeShortBUGSOFT=Software storing TicketTypeShortBUGHARD=Hardware storing TicketTypeShortOTHER=Ander @@ -10,24 +13,31 @@ ErrorBadEmailAddress=Veld '%s' onjuist MenuTicketMyAssignNonClosed=Mijn open tickets TypeContact_ticket_external_SUPPORTCLI=Klantcontact / incident volgen TypeContact_ticket_external_CONTRIBUTOR=Externe bijdrager +Notify_TICKET_SENTBYMAIL=Verzend ticketbericht per e-mail Read=Lezen Assigned=Toegewezen InProgress=Bezig +NeedMoreInformation=Wachten op informatie Closed=Afgesloten +Category=Analytische code Severity=Strengheid TicketSetup=Installatie van ticketmodule TicketPublicAccess=Een openbare interface die geen identificatie vereist, is beschikbaar op de volgende URL +TicketSetupDictionaries=Het type ticket, Gradatie en analytische codes kunnen vanuit woordenboeken worden geconfigureerd TicketParamModule=Module variabele instelling TicketParamMail=E-mail instellen TicketEmailNotificationFrom=Meldingsmail van TicketEmailNotificationFromHelp=Gebruikt als antwoord op het ticketbericht door een voorbeeld TicketEmailNotificationTo=Meldingen e-mail naar TicketEmailNotificationToHelp=Stuur e-mailmeldingen naar dit adres. +TicketNewEmailBodyLabel=Tekstbericht verzonden na het maken van een ticket TicketNewEmailBodyHelp=De tekst die hier wordt opgegeven, wordt in de e-mail ingevoegd die bevestigt dat er een nieuw ticket is gemaakt in de openbare interface. Informatie over de raadpleging van het ticket wordt automatisch toegevoegd. TicketParamPublicInterface=Openbare interface-instellingen TicketsEmailMustExist=Een bestaand e-mailadres vereisen om een ​​ticket te maken TicketsEmailMustExistHelp=In de openbare interface moet het e-mailadres al in de database zijn ingevuld om een ​​nieuw ticket te maken. PublicInterface=Openbare interface +TicketUrlPublicInterfaceLabelAdmin=Alternatieve URL voor openbare interface +TicketUrlPublicInterfaceHelpAdmin=Het is mogelijk om een alias voor de webserver te definiëren en zo de openbare interface beschikbaar te maken met een andere URL (de server moet optreden als een proxy voor deze nieuwe URL) TicketPublicInterfaceTextHomeLabelAdmin=Welkomsttekst van de openbare interface TicketPublicInterfaceTextHome=U kunt een ondersteuningsticket of -weergave maken die bestaat uit het ID-trackingticket. TicketPublicInterfaceTextHomeHelpAdmin=De tekst die hier wordt gedefinieerd, wordt weergegeven op de startpagina van de openbare interface. @@ -37,6 +47,7 @@ TicketPublicInterfaceTextHelpMessageLabelAdmin=Hulp tekst bij het bericht TicketPublicInterfaceTextHelpMessageHelpAdmin=Deze tekst verschijnt boven het berichtinvoergedeelte van de gebruiker. ExtraFieldsTicket=Extra attributen TicketCkEditorEmailNotActivated=HTML-editor is niet geactiveerd. Plaats alstublieft de inhoud van FCKEDITOR_ENABLE_MAIL op 1 om deze te krijgen. +TicketsDisableEmail=Stuur geen e-mails voor het aanmaken van tickets of het opnemen van berichten TicketsDisableEmailHelp=Standaard worden e-mails verzonden wanneer nieuwe tickets of berichten worden aangemaakt. Schakel deze optie in om * alle * e-mailmeldingen uit te schakelen TicketsLogEnableEmail=Schakel logboek per e-mail in TicketsLogEnableEmailHelp=Bij elke wijziging wordt een e-mail ** verzonden naar elk contact ** dat aan het ticket is gekoppeld. @@ -46,12 +57,14 @@ TicketsShowCompanyLogo=Geef het logo van het bedrijf weer in de openbare interfa TicketsShowCompanyLogoHelp=Schakel deze optie in om het logo van het hoofdbedrijf te verbergen op de pagina's van de openbare interface TicketsEmailAlsoSendToMainAddress=Stuur ook een bericht naar het hoofd e-mailadres TicketsEmailAlsoSendToMainAddressHelp=Schakel deze optie in om een ​​e-mail te sturen naar het e-mailadres "Kennisgevings e-mail van" (zie onderstaande instellingen) +TicketsLimitViewAssignedOnly=Beperk de weergave tot tickets die zijn toegewezen aan de huidige gebruiker (niet effectief voor externe gebruikers, altijd beperkt tot de derde partij waarvan ze afhankelijk zijn) TicketsLimitViewAssignedOnlyHelp=Alleen tickets die aan de huidige gebruiker zijn toegewezen, zijn zichtbaar. Is niet van toepassing op een gebruiker met rechten voor ticket beheer. TicketsActivatePublicInterface=Activeer de publieke interface TicketsActivatePublicInterfaceHelp=Met de openbare interface kunnen bezoekers tickets maken. TicketsAutoAssignTicket=Wijs automatisch de gebruiker toe die het ticket heeft gemaakt TicketsAutoAssignTicketHelp=Bij het maken van een ticket kan de gebruiker automatisch worden toegewezen aan het ticket. TicketNumberingModules=Nummeringsmodule tickets +TicketNotifyTiersAtCreation=Breng externen op de hoogte tijdens het maken TicketList=Lijst met tickets TicketViewNonClosedOnly=Bekijk alleen open tickets TicketStatByStatus=Tickets op status @@ -98,6 +111,7 @@ LinkToAContract=Link naar een contract TicketMailExchanges=Mail-uitwisselingen TicketInitialMessageModified=Oorspronkelijk bericht aangepast TicketNotNotifyTiersAtCreate=Het bedrijf niet melden bij de creatie +Unread=Ongelezen NoLogForThisTicket=Nog geen log voor dit ticket TicketSystem=Ticket-systeem ShowListTicketWithTrackId=Geef ticketlijst weer vanaf track ID diff --git a/htdocs/langs/nl_NL/accountancy.lang b/htdocs/langs/nl_NL/accountancy.lang index a9c274e87fb..c815dc9d158 100644 --- a/htdocs/langs/nl_NL/accountancy.lang +++ b/htdocs/langs/nl_NL/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Resultaat grootboekrekening (Verlies) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Afsluiten journaal ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Grootboekrekening kruisposten (dagboeken) DONATION_ACCOUNTINGACCOUNT=Grootboeknummer voor donaties diff --git a/htdocs/langs/nl_NL/admin.lang b/htdocs/langs/nl_NL/admin.lang index deaa6104f3c..fd7b4ac1aae 100644 --- a/htdocs/langs/nl_NL/admin.lang +++ b/htdocs/langs/nl_NL/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxen uit tabel ExtrafieldLink=Link naar een object ComputedFormula=Berekend veld ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Gebruikte library voor generen PDF LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Creëren / wijzigen van diensten Permission534=Diensten verwijderen Permission536=Inzien / beheren van verborgen diensten Permission538=Diensten exporteren -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Bekijk donaties Permission702=Creëren / wijzigen donaties Permission703=Verwijderen donaties @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/nl_NL/bills.lang b/htdocs/langs/nl_NL/bills.lang index 925a56c4613..00421a77b3b 100644 --- a/htdocs/langs/nl_NL/bills.lang +++ b/htdocs/langs/nl_NL/bills.lang @@ -10,7 +10,7 @@ BillsSuppliersUnpaid=Onbetaalde leveranciersfacturen BillsSuppliersUnpaidForCompany=Onbetaalde leveranciersfacturen voor %s BillsLate=Betalingsachterstand BillsStatistics=Statistieken afnemersfacturen -BillsStatisticsSuppliers=Vendors invoices statistics +BillsStatisticsSuppliers=Statistieken leveranciersfacturen DisabledBecauseDispatchedInBookkeeping=Uitgeschakeld omdat de factuur werd verzonden naar de boekhouding DisabledBecauseNotLastInvoice=Uitgeschakeld omdat factuur niet kan worden gewist. Er zijn vervolg-facturen aangemaakt en hierdoor zullen gaten ontstaan in de factuurteller. DisabledBecauseNotErasable=Uitgeschakeld om dat het niet verwijderd kan worden @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma factuur InvoiceProFormaDesc=Een proforma factuur is een voorlopige factuur en een orderbevestiging. Het is geen officiële factuur, maar bedoeld voor afnemers in het buitenland om bijvoorbeeld een vergunning aan te vragen of de inklaring voor te bereiden. Ze worden ook gebruikt voor het aanvragen van een Letter of Credit (L/C). InvoiceReplacement=Vervangingsfactuur InvoiceReplacementAsk=Vervangingsfactuur voor factuur -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Creditnota InvoiceAvoirAsk=Creditnota te corrigeren factuur InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). @@ -317,8 +317,8 @@ InvoiceDateCreation=Aanmaakdatum factuur InvoiceStatus=Factuurstatus InvoiceNote=Factuurnota InvoicePaid=Factuur betaald -OrderBilled=Order billed -DonationPaid=Donation paid +OrderBilled=Bestelling gefactureerd +DonationPaid=Betaalde donatie PaymentNumber=Betalingsnummer RemoveDiscount=Verwijder korting WatermarkOnDraftBill=Watermerk over conceptfacturen (niets indien leeg) @@ -397,7 +397,7 @@ PaymentConditionShort14D=14 dagen PaymentCondition14D=14 dagen PaymentConditionShort14DENDMONTH=Einde maand over 14 dagen PaymentCondition14DENDMONTH=Binnen 14 dagen na het einde van de maand -FixAmount=Fixed amount +FixAmount=Vast bedrag VarAmount=Variabel bedrag (%% tot.) VarAmountOneLine=Variable amount (%% tot.) - 1 line with label '%s' # PaymentType @@ -413,8 +413,8 @@ PaymentTypeCHQ=Cheque PaymentTypeShortCHQ=Cheque PaymentTypeTIP=TIP (Documenten tegen betaling) PaymentTypeShortTIP=Betaling fooi -PaymentTypeVAD=Online payment -PaymentTypeShortVAD=Online payment +PaymentTypeVAD=Online betaling +PaymentTypeShortVAD=Online betaling PaymentTypeTRA=Bankcheque PaymentTypeShortTRA=Ontwerp PaymentTypeFAC=Factor @@ -457,11 +457,11 @@ UseLine=Toepassen UseDiscount=Gebruik korting UseCredit=Kredietbeoordelingen UseCreditNoteInInvoicePayment=Verminderen van de betaling met deze credit nota -MenuChequeDeposits=Check Deposits +MenuChequeDeposits=Controleer stortingen MenuCheques=Cheques -MenuChequesReceipts=Check receipts +MenuChequesReceipts=Controleer ontvangsten NewChequeDeposit=Nieuw depot -ChequesReceipts=Check receipts +ChequesReceipts=Controleer ontvangsten ChequesArea=Check deposits area ChequeDeposits=Check deposits Cheques=Cheques diff --git a/htdocs/langs/nl_NL/companies.lang b/htdocs/langs/nl_NL/companies.lang index d5711ccbe11..2b869938cff 100644 --- a/htdocs/langs/nl_NL/companies.lang +++ b/htdocs/langs/nl_NL/companies.lang @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Vastgelegde leverancier kortingen (toegekend do SupplierAbsoluteDiscountMy=Vastgelegde klant kortingen (toegekend door uzelf) DiscountNone=Geen Vendor=Verkoper +Supplier=Verkoper AddContact=Nieuwe contactpersoon AddContactAddress=Nieuw contact/adres EditContact=Bewerk contact / adres diff --git a/htdocs/langs/nl_NL/other.lang b/htdocs/langs/nl_NL/other.lang index 7a9587eebd0..7b9814a2c68 100644 --- a/htdocs/langs/nl_NL/other.lang +++ b/htdocs/langs/nl_NL/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Aantal klant facturen NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Aantal eenheden in voorstel NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Aantal eenheden op klant facturen NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=De interventie %s is gevalideerd EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/nl_NL/website.lang b/htdocs/langs/nl_NL/website.lang index f466074cb2a..024e1b4b6e6 100644 --- a/htdocs/langs/nl_NL/website.lang +++ b/htdocs/langs/nl_NL/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/pl_PL/accountancy.lang b/htdocs/langs/pl_PL/accountancy.lang index 006ac65e13c..fae0558c485 100644 --- a/htdocs/langs/pl_PL/accountancy.lang +++ b/htdocs/langs/pl_PL/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Konto księgowe dla oczekujących DONATION_ACCOUNTINGACCOUNT=Konto księgowe dla zarejestrowanych dotatcji diff --git a/htdocs/langs/pl_PL/admin.lang b/htdocs/langs/pl_PL/admin.lang index 0ed44756d6d..7cf5c8b6e13 100644 --- a/htdocs/langs/pl_PL/admin.lang +++ b/htdocs/langs/pl_PL/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link do obiektu ComputedFormula=Obliczone pole ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Biblioteka używana do generowania plików PDF LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Tworzenie / modyfikacja usług Permission534=Usuwanie usług Permission536=Zobacz / zarządzaj ukrytymi usługami Permission538=Eksport usług -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Zobacz darowizny Permission702=Tworzenie / modyfikacja darowizn Permission703=Usuń darowizny @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/pl_PL/bills.lang b/htdocs/langs/pl_PL/bills.lang index 405d0077d50..55121d67d6c 100644 --- a/htdocs/langs/pl_PL/bills.lang +++ b/htdocs/langs/pl_PL/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma faktury InvoiceProFormaDesc=Faktura proforma jest obrazem prawdziwej faktury, ale nie ma jeszcze wartości księgowych. InvoiceReplacement=Duplikat faktury InvoiceReplacementAsk=Duplikat faktury do faktury -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Nota kredytowa InvoiceAvoirAsk=Edytuj notatkę do skorygowania faktury InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/pl_PL/companies.lang b/htdocs/langs/pl_PL/companies.lang index c0643cb0aa2..42623e23dd3 100644 --- a/htdocs/langs/pl_PL/companies.lang +++ b/htdocs/langs/pl_PL/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias (handlowy, znak firmowy, ...) AliasNameShort=Alias Name Companies=Firmy CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=Żaden Vendor=Vendor +Supplier=Vendor AddContact=Stwórz konktakt AddContactAddress=Stwórz kontakt/adres EditContact=Edytuj kontakt diff --git a/htdocs/langs/pl_PL/other.lang b/htdocs/langs/pl_PL/other.lang index 0b45c36de1d..031e65c7c41 100644 --- a/htdocs/langs/pl_PL/other.lang +++ b/htdocs/langs/pl_PL/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Ilość faktur klientów NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=Interwencja %s zatwierdzona EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/pl_PL/website.lang b/htdocs/langs/pl_PL/website.lang index b53162bf594..be2a003ec32 100644 --- a/htdocs/langs/pl_PL/website.lang +++ b/htdocs/langs/pl_PL/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/pt_BR/accountancy.lang b/htdocs/langs/pt_BR/accountancy.lang index 9804fdb4c55..a72182b0755 100644 --- a/htdocs/langs/pt_BR/accountancy.lang +++ b/htdocs/langs/pt_BR/accountancy.lang @@ -144,7 +144,7 @@ DescThirdPartyReport=Consulte aqui a lista de clientes e fornecedores de terceir ListAccounts=Lista das contas contábeis UnknownAccountForThirdparty=Conta de terceiros desconhecida. Nós usaremos %s UnknownAccountForThirdpartyBlocking=Conta de terceiros desconhecida. Erro de bloqueio -ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Conta de terceiros não definida ou desconhecida de terceiros. Erro de bloqueio. +ThirdpartyAccountNotDefinedOrThirdPartyUnknownBlocking=Conta de terceiros não definida ou desconhecida de terceiros. Erro de bloqueio. UnknownAccountForThirdpartyAndWaitingAccountNotDefinedBlocking=Conta de terceiros desconhecida e conta em espera não definida. Erro de bloqueio Pcgtype=Plano de Contas Pcgsubtype=Subgrupo de Contas diff --git a/htdocs/langs/pt_BR/admin.lang b/htdocs/langs/pt_BR/admin.lang index 9878c50a066..147b7dbabcc 100644 --- a/htdocs/langs/pt_BR/admin.lang +++ b/htdocs/langs/pt_BR/admin.lang @@ -120,7 +120,6 @@ SystemToolsAreaDesc=Essa área dispõem de funções administrativas. Use esse m Purge=Purgar (apagar tudo) PurgeAreaDesc=Esta página permite deletar todos os arquivos gerados ou armazenados pelo Dolibarr (arquivos temporários ou todos os arquivos no diretório %s). Este recurso é fornecido como uma solução alternativa aos usuários cujo a instalação esteja hospedado num servidor que impeça o acesso as pastas onde os arquivos gerados pelo Dolibarr são armazenados, para excluí-los. PurgeDeleteLogFile=Excluir os arquivos de registro, incluindo o %s definido pelo módulo Syslog (não há risco de perda de dados) -PurgeDeleteTemporaryFiles=Excluir todos os arquivos temporários (sem risco de perca de dados) PurgeDeleteTemporaryFilesShort=Excluir arquivos temporários PurgeDeleteAllFilesInDocumentsDir=Eliminar todos os arquivos do diretório %s. Isto irá excluir todos documentos (Terceiros, faturas, ...), arquivos carregados no módulo ECM, Backups e arquivos temporários PurgeRunNow=Purgar(Apagar) Agora diff --git a/htdocs/langs/pt_PT/accountancy.lang b/htdocs/langs/pt_PT/accountancy.lang index 9cd6b2dc65f..7e3445ffca9 100644 --- a/htdocs/langs/pt_PT/accountancy.lang +++ b/htdocs/langs/pt_PT/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Conta contabilística de espera DONATION_ACCOUNTINGACCOUNT=Conta contabilística para registar donativos diff --git a/htdocs/langs/pt_PT/admin.lang b/htdocs/langs/pt_PT/admin.lang index 5f8e5ed45c0..dec7048306a 100644 --- a/htdocs/langs/pt_PT/admin.lang +++ b/htdocs/langs/pt_PT/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Caixas de marcação da tabela ExtrafieldLink=Vincular a um objeto ComputedFormula=Campo calculado ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Deixar esse campo em branco significa que esse valor será armazenado sem criptografia (o campo deve ser oculto apenas com estrela na tela).
Defina 'auto' para usar a regra de criptografia padrão para salvar a senha no banco de dados (o valor lido será o hash apenas, nenhuma maneira de recuperar o valor original) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Biblioteca utilizada para gerar PDF LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Criar/modificar serviços Permission534=Eliminar serviços Permission536=Ver/gerir serviços ocultos Permission538=Exportar serviços -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Consultar donativos Permission702=Criar/modificar donativos Permission703=Eliminar donativos @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/pt_PT/bills.lang b/htdocs/langs/pt_PT/bills.lang index e0f25e98f61..cc737fc2d1d 100644 --- a/htdocs/langs/pt_PT/bills.lang +++ b/htdocs/langs/pt_PT/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Fatura Pró-Forma InvoiceProFormaDesc=A Fatura Pró-Forma é uma imagem de uma fatura, mas não tem valor contabilístico. InvoiceReplacement=Fatura de Substituição InvoiceReplacementAsk=Fatura de Substituição para a Fatura -InvoiceReplacementDesc= A fatura de substituição é usada para cancelar e substituir completamente uma fatura sem nenhum pagamento já recebido.

Nota: Somente faturas sem pagamento podem ser substituídas. Se a fatura que você substituir ainda não estiver fechada, ela será automaticamente fechada para "abandonada". +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Nota de Crédito InvoiceAvoirAsk=Nota de crédito para corrigir a fatura InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/pt_PT/companies.lang b/htdocs/langs/pt_PT/companies.lang index 70f9cae441e..393abc36064 100644 --- a/htdocs/langs/pt_PT/companies.lang +++ b/htdocs/langs/pt_PT/companies.lang @@ -28,7 +28,7 @@ AliasNames=Pseudónimo (comercial, marca registada, ...) AliasNameShort=Nome do alias Companies=Empresas CountryIsInEEC=País faz parte da Comunidade Económica Europeia -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Descontos de fornecedor fixos (inseridos por to SupplierAbsoluteDiscountMy=Descontos de fornecedor fixos (inseridos por si) DiscountNone=Nenhuma Vendor=Fornecedor +Supplier=Fornecedor AddContact=Criar contacto AddContactAddress=Novo contacto/morada EditContact=Editar contato / endereço diff --git a/htdocs/langs/pt_PT/other.lang b/htdocs/langs/pt_PT/other.lang index d93c411bb32..fff2fab03d4 100644 --- a/htdocs/langs/pt_PT/other.lang +++ b/htdocs/langs/pt_PT/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Número de faturas a clientes NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Número de unidades nos orçamentos NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Número de unidades em faturas a clientes NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=Uma nova intervenção %s foi atribuída a você. EMailTextInterventionValidated=Intervenção %s validados EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/pt_PT/website.lang b/htdocs/langs/pt_PT/website.lang index c98603548d7..45e4472c601 100644 --- a/htdocs/langs/pt_PT/website.lang +++ b/htdocs/langs/pt_PT/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/ro_RO/accountancy.lang b/htdocs/langs/ro_RO/accountancy.lang index aa81f9c0a8d..472c02c9452 100644 --- a/htdocs/langs/ro_RO/accountancy.lang +++ b/htdocs/langs/ro_RO/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Contul contabil rezultat (pierdere) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Jurnal de închidere ACCOUNTING_ACCOUNT_TRANSFER_CASH=Contul contabil al transferului bancar în tranziție +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Contul contabil de așteptare DONATION_ACCOUNTINGACCOUNT=Contul contabil pentru a înregistra donații diff --git a/htdocs/langs/ro_RO/admin.lang b/htdocs/langs/ro_RO/admin.lang index 97849658f83..8f9e5dc09fd 100644 --- a/htdocs/langs/ro_RO/admin.lang +++ b/htdocs/langs/ro_RO/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Căsuțele de selectare din tabel ExtrafieldLink=Link către un obiect ComputedFormula=Câmp calculat ComputedFormulaDesc=Puteți introduce aici o formulă care utilizează alte proprietăți ale obiectului sau orice codare PHP pentru a obține o valoare dinamică calculată. Puteți utiliza orice formule compatibile PHP, inclusiv operatorul de stare "?" și următorul obiect global:$db, $conf, $langs, $mysoc, $user, $object .
AVERTISMENT Doar unele proprietăţi ale $obiect pot fi disponibile. Dacă aveți nevoie de proprietăți care nu sunt încărcate, trebuie doar să vă aduceți obiectul în formula dvs. ca în cel de-al doilea exemplu.
Utilizarea unui câmp calculat înseamnă că nu vă puteți introduce nici o valoare din interfață. De asemenea, dacă există o eroare de sintaxă, formula poate să nu redea nimic.

Exemplul formulei:
$object->id < 10? round($object-> id / 2, 2): ($object->id + 2 * $user-> id) * (int) substr($mysoc->zip, 1, 2)

Exemplu de reîncărcare a obiectului
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ?$reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Alt exemplu de formula pentru forțarea încărcării obiectului și a obiectului său părinte:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: "Proiectul părinte nu a fost găsit" +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Lăsând acest câmp necompletat înseamnă că această valoare va fi stocată fără criptare (câmpul trebuie ascuns numai cu stea pe ecran).
Setarea "auto" pentru utilizarea regulii de criptare implicită pentru a salva parola în baza de date (atunci valoarea citită va fi hash numai, nici o şansă de a recupera valoarea inițială) ExtrafieldParamHelpselect=Lista de valori trebuie să fie linii cu format cheie,valoare (unde cheia nu poate fi "0")

de exemplu:
1,valoare1
2,valoare2
code3,valoare3
...

Pentru a avea lista în funcție de o altă listă de atribute complementare:
1, valoare1| opţiuni_ parent_list_code : parent_key
2,valoare2|opţiuni_ parent_list_code : parent_key

Pentru a avea lista în funcție de altă listă:
1, valoare1| parent_list_code : parent_key
2, valoare2| parent_list_code : parent_key ExtrafieldParamHelpcheckbox=Lista de valori trebuie să fie linii cu format cheie,valoare ( cheia nu poate fi "0")

de exemplu:
1,valoare1
2,valoare2
3,valoare3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=Lista de valori trebuie să fie linii cu format cheie,v ExtrafieldParamHelpsellist=Lista de valori provine dintr-un tabel
Sintaxă: table_name: label_field: id_field :: filter
Exemplu: c_typent: libelle: id :: filter

- idfilter este obligatoriu o cheie primară
- filtrul poate fi un test simplu (de exemplu, activ = 1) pentru a afișa numai valoarea activă
Puteți utiliza, de asemenea, $ID$ în filtrul care este ID-ul curent al obiectului curent
Pentru a face SELECT în filtru utilizați $SEL$
dacă vrei să filtrezi în extracâmpuri foloseste sintaxa extra.fieldcode = ... (unde codul de câmp este codul extra-câmpului)

Pentru a avea lista în funcție de o altă listă de atribute complementare:
c_typent: libelle: id: options_ parent_list_code |parent_column: filter

Pentru a avea lista în funcție de altă listă:
c_typent: libelle: id: parent_list_code | parent_column: filtru ExtrafieldParamHelpchkbxlst=Lista de valori vine dintr-un tabel
Sintaxă: table_name:label_field:id_field::filter
Examplu: c_typent:libelle:id::filter

filtrul poate fi un simplu test (ex active=1) pentru a afişa doar valoarea activă
De asemenea se poate utiliza $ID$ în filtrul care este ID-ul curent al obiectului curent
Pentru a face o SELECTARE în filtru folosiţi $SEL$
dacă doriţi să filtraţi în extracâmpuri folosiţi sintaxa extra.fieldcode=... (unde codul câmpului este codul extracâmpului)

Pentru a avea lista în funcție de o altă listă de atribute complementare:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

Pentru a avea lista în funcție de o altă listă :
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parametrii trebuie să fie ObjectName: Classpath
Sintaxă: ObjectName: Classpath
Exemple:
Societe:societe/class/societe.class.php
Contact: contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Bibliotecă utilizată pentru generarea PDF-urilor LocalTaxDesc=Unele țări pot aplica două sau trei taxe pe fiecare linie de facturare. Dacă este cazul, alegeți tipul pentru a doua și a treia taxă și rata acestora. Tipuri posibile sunt:
1: taxa locală se aplică produselor și serviciilor fără TVA (localtax se calculează pe valoare fără taxă)
2: taxa locală se aplică produselor și serviciilor, inclusiv TVA (localtax se calculează în funcție de valoare+ taxa principală )
3: taxa locală se aplică produselor fără TVA (localtax se calculează pe valoare fără taxă)
4: taxa locală se aplică produselor şi includ tva (localtax se calculeaza pe valoare + TVA principală)
5: taxa locală se aplică serviciilor fără TVA (localtax se calculează pe valoarea fără TVA)
6: taxa locală se aplică serviciilor, inclusiv TVA (localtax se calculează pe sumă + taxă) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Creare / Modificare servicii Permission534=Ştergere servicii Permission536=A se vedea / administra serviciile ascunse Permission538=Exportul de servicii -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Citiţi donaţii Permission702=Creare / Modificare donaţii Permission703=Ştergere donaţii @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/ro_RO/bills.lang b/htdocs/langs/ro_RO/bills.lang index 1018e4a2b24..61886b2fa25 100644 --- a/htdocs/langs/ro_RO/bills.lang +++ b/htdocs/langs/ro_RO/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Factură Proformă InvoiceProFormaDesc=Factura Proformă este o imagine a adevăratei facturi, dar nu are nici o valoare contabilă. InvoiceReplacement=Factură de Înlocuire InvoiceReplacementAsk=Factură de Înlocuire a altei facturi -InvoiceReplacementDesc=  Înlocuire factură este folosită pentru a anula și înlocui complet o factură fără plata primită deja.

Notă: Numai facturile fără plată pot fi înlocuite. În cazul în care factura pe care o înlocuiți nu este încă închisă, va fi închisă automat la "abandonat" +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Nota de credit InvoiceAvoirAsk=Nota de credit pentru a corecta factura InvoiceAvoirDesc= Nota de credit este o factură negativă utilizată pentru a corecta faptul că o factură arată o sumă care diferă de suma plătită efectiv (de exemplu, clientul a plătit prea mult din greșeală sau nu va plăti suma completă din momentul returnării unor produse). diff --git a/htdocs/langs/ro_RO/companies.lang b/htdocs/langs/ro_RO/companies.lang index 37948d05eaa..a109434b4bb 100644 --- a/htdocs/langs/ro_RO/companies.lang +++ b/htdocs/langs/ro_RO/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias nume (comercial, marca inregistrata, ...) AliasNameShort=Porecla Companies=Societăţi CountryIsInEEC=Țara se află în interiorul Comunității Economice Europene -PriceFormatInCurrentLanguage=Formatul prețului în limba curentă +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Numele terț ThirdPartyEmail=E-mail terț ThirdParty=Terț @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Reduceri absolute ale furnizorului (introduse d SupplierAbsoluteDiscountMy=Reduceri absolute ale furnizorilor (introduse de dvs.) DiscountNone=Niciunul Vendor=Furnizor +Supplier=Furnizor AddContact=Creare contact AddContactAddress=Creare contact/adresă EditContact=Editare contact diff --git a/htdocs/langs/ro_RO/other.lang b/htdocs/langs/ro_RO/other.lang index 49f96d76d85..8dd02e9abd7 100644 --- a/htdocs/langs/ro_RO/other.lang +++ b/htdocs/langs/ro_RO/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Numărul de facturi pentru clienți NumberOfSupplierProposals=Numărul de propuneri de furnizori NumberOfSupplierOrders=Numărul de ordine de cumpărare NumberOfSupplierInvoices=Numărul facturilor furnizorilor +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Numărul de unități pe propuneri NumberOfUnitsCustomerOrders=Numărul de unități din comenzile de vânzări NumberOfUnitsCustomerInvoices=Numărul de unități pe facturile clienților NumberOfUnitsSupplierProposals=Numărul de unități pe propunerile furnizorilor NumberOfUnitsSupplierOrders=Numărul de unități din comenzile de achiziție NumberOfUnitsSupplierInvoices=Numărul de unități pe facturile furnizorului +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A fost atribuită o nouă intervenție %s. EMailTextInterventionValidated=Intervenţia %s validată EMailTextInvoiceValidated=Factura %s a fost validată. diff --git a/htdocs/langs/ro_RO/website.lang b/htdocs/langs/ro_RO/website.lang index 88d70505887..5a688b89cce 100644 --- a/htdocs/langs/ro_RO/website.lang +++ b/htdocs/langs/ro_RO/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=Niciun site nu a fost creat încă. Creați primul. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/ru_RU/accountancy.lang b/htdocs/langs/ru_RU/accountancy.lang index b4c2e9a6f16..99e4fefd472 100644 --- a/htdocs/langs/ru_RU/accountancy.lang +++ b/htdocs/langs/ru_RU/accountancy.lang @@ -13,10 +13,10 @@ ACCOUNTING_EXPORT_ENDLINE=Select the carriage return type ACCOUNTING_EXPORT_PREFIX_SPEC=Укажите префикс для имени файла ThisService=This service ThisProduct=This product -DefaultForService=Default for service -DefaultForProduct=Default for product +DefaultForService=По умолчанию для услуги +DefaultForProduct=По умолчанию для товара CantSuggest=Can't suggest -AccountancySetupDoneFromAccountancyMenu=Most setup of the accountancy is done from the menu %s +AccountancySetupDoneFromAccountancyMenu=Больше настроек бухгалтерии выполняется из меню %s ConfigAccountingExpert=Конфигурация бухгалтерского модуля Journalization=Журналирование Journaux=Журналы @@ -26,23 +26,23 @@ Chartofaccounts=Схема учётных записей CurrentDedicatedAccountingAccount=Current dedicated account AssignDedicatedAccountingAccount=New account to assign InvoiceLabel=Invoice label -OverviewOfAmountOfLinesNotBound=Overview of amount of lines not bound to an accounting account -OverviewOfAmountOfLinesBound=Overview of amount of lines already bound to an accounting account -OtherInfo=Other information -DeleteCptCategory=Remove accounting account from group -ConfirmDeleteCptCategory=Are you sure you want to remove this accounting account from the accounting account group? +OverviewOfAmountOfLinesNotBound=Обзор количества строк, не привязанных к учётному счёту +OverviewOfAmountOfLinesBound=Обзор количества строк, привязанных к учётному счёту +OtherInfo=Дополнительная информация +DeleteCptCategory=Удалить учётный счёт из группы +ConfirmDeleteCptCategory=Вы действительно хотите удалить этот учетный счет из группы бухгалтерских счетов? JournalizationInLedgerStatus=Status of journalization AlreadyInGeneralLedger=Already journalized in ledgers NotYetInGeneralLedger=Not yet journalized in ledgers GroupIsEmptyCheckSetup=Group is empty, check setup of the personalized accounting group -DetailByAccount=Show detail by account -AccountWithNonZeroValues=Accounts with non-zero values -ListOfAccounts=List of accounts +DetailByAccount=Показать детали счета +AccountWithNonZeroValues=Счета с ненулевыми значениями +ListOfAccounts=Список счетов CountriesInEEC=Countries in EEC CountriesNotInEEC=Countries not in EEC CountriesInEECExceptMe=Countries in EEC except %s CountriesExceptMe=All countries except %s -AccountantFiles=Export accounting documents +AccountantFiles=Экспорт бухгалтерских документов MainAccountForCustomersNotDefined=Main accounting account for customers not defined in setup MainAccountForSuppliersNotDefined=Main accounting account for vendors not defined in setup @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations @@ -270,7 +271,7 @@ AccountingJournalType2=Продажи AccountingJournalType3=Покупки AccountingJournalType4=Банк AccountingJournalType5=Expenses report -AccountingJournalType8=Inventory +AccountingJournalType8=Инвентарная ведомость AccountingJournalType9=Has-new ErrorAccountingJournalIsAlreadyUse=This journal is already use AccountingAccountForSalesTaxAreDefinedInto=Note: Accounting account for Sales tax are defined into menu %s - %s @@ -339,8 +340,8 @@ ToBind=Lines to bind UseMenuToSetBindindManualy=Lines not yet bound, use menu
%s to make the binding manually ## Import -ImportAccountingEntries=Accounting entries -DateExport=Date export -WarningReportNotReliable=Warning, this report is not based on the Ledger, so does not contains transaction modified manually in the Ledger. If your journalization is up to date, the bookkeeping view is more accurate. -ExpenseReportJournal=Expense Report Journal -InventoryJournal=Inventory Journal +ImportAccountingEntries=Бухгалтерские записи +DateExport=Дата экспорта +WarningReportNotReliable=Внимание, этот отчет не основан на Гроссбухе, поэтому не содержит транзакции, измененные вручную в Гроссбухе. Если журналирование актуально, бухгалтерский учет будет более точным. +ExpenseReportJournal=Журнал отчетов о затратах +InventoryJournal=Журнал инвентарного учета diff --git a/htdocs/langs/ru_RU/admin.lang b/htdocs/langs/ru_RU/admin.lang index c46c80ab9f8..08836e9e900 100644 --- a/htdocs/langs/ru_RU/admin.lang +++ b/htdocs/langs/ru_RU/admin.lang @@ -9,35 +9,35 @@ VersionExperimental=Экспериментальная VersionDevelopment=Разработка VersionUnknown=Неизвестно VersionRecommanded=Рекомендуемые -FileCheck=Fileset Integrity Checks -FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to determine if any files have been modified (e.g by a hacker). +FileCheck=Проверка целостности файлов +FileCheckDesc=Этот инструмент позволяет проверить целостность файлов и настройки вашего приложения, сравнивая каждый файл с официальным. Значение некоторых установочных констант также может быть проверено. Вы можете использовать этот инструмент, чтобы определить, были ли какие-либо файлы изменены (например, хакером). FileIntegrityIsStrictlyConformedWithReference=Целостность файлов строго соответствует ссылке. -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added. +FileIntegrityIsOkButFilesWereAdded=Проверка целостности файлов пройдена, однако были добавлены новые файлы. FileIntegritySomeFilesWereRemovedOrModified=Ошибка проверки целостности файлов. Некоторые файлы были изменены, удалены или добавлены. GlobalChecksum=Глобальная контрольная сумма MakeIntegrityAnalysisFrom=Сделайте анализ целостности файлов приложений LocalSignature=Встроенная локальная подпись (менее надежная) -RemoteSignature=Удаленная дальняя подпись (более надежная) +RemoteSignature=Подпись на удаленном сервере (более надежная) FilesMissing=Отсутсвующие файлы FilesUpdated=Обновлённые файлы FilesModified=Модифицированные файлы FilesAdded=Добавленные файлы FileCheckDolibarr=Проверка целостности файлов приложений -AvailableOnlyOnPackagedVersions=The local file for integrity checking is only available when the application is installed from an official package -XmlNotFound=Xml Integrity Файл приложения не найден +AvailableOnlyOnPackagedVersions=Локальный файл для проверки целостности доступен только тогда, когда приложение установлено из официального пакета +XmlNotFound=Xml-файл целостности приложения не найден SessionId=ID сессии SessionSaveHandler=Обработчик для сохранения сессий -SessionSavePath=Session save location +SessionSavePath=Место сохранения сессии PurgeSessions=Очистка сессий ConfirmPurgeSessions=Вы хотите завершить все сессии? Это действие отключит всех пользователей (кроме вас). -NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions. +NoSessionListWithThisHandler=Обработчик сохраненных сеансов, настроенный в вашем PHP, не позволяет листинг всех запущенных сессий. LockNewSessions=Заблокировать новые подключения -ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user %s will be able to connect after that. +ConfirmLockNewSessions=Вы уверены, что хотите ограничить любое новое подключение Dolibarr к себе? Только пользователь %s сможет подключиться после этого. UnlockNewSessions=Удалить блокировку подключений YourSession=Ваша сессия -Sessions=Users Sessions +Sessions=Пользовательские сессии WebUserGroup=Пользователь / группа Web-сервера -NoSessionFound=Your PHP configuration seems to not allow listing of active sessions. The directory used to save sessions (%s) may be protected (for example by OS permissions or by PHP directive open_basedir). +NoSessionFound=Кажется, ваша конфигурация PHP не позволяет отображать активные сеансы. Каталог, используемый для сохранения сеансов ( %s ), может быть защищен (например, разрешениями ОС или директивой PHP open_basedir). DBStoringCharset=Кодировка базы данных для хранения данных DBSortingCharset=Кодировка базы данных для сортировки данных ClientCharset=Клиентская кодировка @@ -51,11 +51,11 @@ InternalUsers=Внутренние пользователи ExternalUsers=Внешние пользователи GUISetup=Внешний вид SetupArea=Настройка -UploadNewTemplate=Загрузить новый шаблон (ы) +UploadNewTemplate=Загрузить новый шаблон(ы) FormToTestFileUploadForm=Форма для проверки загрузки файлов (в зависимости от настройки) IfModuleEnabled=Примечание: "Да" влияет только тогда, когда модуль %s включен -RemoveLock=Remove/rename file %s if it exists, to allow usage of the Update/Install tool. -RestoreLock=Restore file %s, with read permission only, to disable any further use of the Update/Install tool. +RemoveLock=Удалите/переименуйте файл %s, если он существует, чтобы разрешить использование инструмента обновления/установки. +RestoreLock=Восстановите файл %s с разрешением только для чтение, чтобы отключить дальнейшее использование инструмента обновления/установки. SecuritySetup=Настройка безопасности SecurityFilesDesc=Определите здесь параметры, связанные с безопасностью загрузки файлов. ErrorModuleRequirePHPVersion=Ошибка, этот модуль требует PHP версии %s или выше @@ -66,16 +66,16 @@ Dictionary=Словари ErrorReservedTypeSystemSystemAuto=Значение 'system' и 'systemauto' для типа зарезервировано. Вы можете использовать значение 'user' для добавления вашей собственной записи ErrorCodeCantContainZero=Код не может содержать значение 0 DisableJavascript=Отключить JavaScript и Ajax функции -DisableJavascriptNote=Note: For test or debug purpose. For optimization for blind person or text browsers, you may prefer to use the setup on the profile of user -UseSearchToSelectCompanyTooltip=Кроме того, если у вас есть большое количество третьих лиц (> 100 000), вы можете увеличить скорость, установив постоянную COMPANY_DONOTSEARCH_ANYWHERE на 1 в Setup-> Other. Затем поиск будет ограничен началом строки. -UseSearchToSelectContactTooltip=Кроме того, если у вас есть большое количество третьих лиц (> 100 000), вы можете увеличить скорость, установив постоянную связь CONTACT_DONOTSEARCH_ANYWHERE в 1 в Setup-> Other. Затем поиск будет ограничен началом строки. -DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.
This may increase performance if you have a large number of third parties, but it is less convenient. -DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.
This may increase performance if you have a large number of contacts, but it is less convenient) -NumberOfKeyToSearch=Number of characters to trigger search: %s -NumberOfBytes=Number of Bytes -SearchString=Search string +DisableJavascriptNote=Примечание. Для тестирования или отладки. Для оптимизации для слепых или текстовых браузеров, вы можете использовать настройки в профиле пользователя. +UseSearchToSelectCompanyTooltip=Кроме того, если у вас есть большое количество контрагентов (> 100 000), вы можете увеличить скорость, установив постоянную COMPANY_DONOTSEARCH_ANYWHERE на 1 в Настройка-Доп.настройки. Затем поиск будет ограничен началом строки. +UseSearchToSelectContactTooltip=Кроме того, если у вас есть большое количество контрагентов (> 100 000), вы можете увеличить скорость, установив постоянную COMPANY_DONOTSEARCH_ANYWHERE на 1 в Настройка-Доп.настройки. Затем поиск будет ограничен началом строки. +DelaiedFullListToSelectCompany=Ожидание нажатия клавиши, прежде чем загружать содержимое списка Контрагентов.
Это может повысить производительность, если у вас много контрагентов, но это менее удобно. +DelaiedFullListToSelectContact=Ожидание нажатия клавиши, прежде чем загружать содержимое списка Контактов.
Это может увеличить производительность, если у вас большое количество контактов, но это менее удобно +NumberOfKeyToSearch=Количество символов для запуска поиска: %s +NumberOfBytes=Количество байт +SearchString=Строка поиска NotAvailableWhenAjaxDisabled=Недоступно при отключенном Ajax -AllowToSelectProjectFromOtherCompany=В документе третьей стороны можно выбрать проект, связанный с другой третьей стороной +AllowToSelectProjectFromOtherCompany=В документе контрагента можно выбрать проект, связанный с другим контрагентом JavascriptDisabled=JavaScript отключен UsePreviewTabs=Использовать вкладки предпросмотра ShowPreview=Предварительный просмотр @@ -83,7 +83,7 @@ PreviewNotAvailable=Предварительный просмотр не дос ThemeCurrentlyActive=Текущая тема CurrentTimeZone=Текущий часовой пояс в настройках PHP MySQLTimeZone=Часовой пояс БД (MySQL) -TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered). +TZHasNoEffect=Даты хранятся и возвращаются сервером базы данных, как если бы они хранились в виде переданной строки. Часовой пояс действует только при использовании функции UNIX_TIMESTAMP (которая не должна использоваться Dolibarr, поэтому часовая зона (TZ) базы данных не должна иметь никакого эффекта, даже если она изменилась после ввода данных). Space=Пробел Table=Таблица Fields=Поля @@ -94,7 +94,7 @@ NextValueForInvoices=Следующее значение (счета-факту NextValueForCreditNotes=Следующее значение (кредитные авизо) NextValueForDeposit=Следующее значение (первоначальный взнос) NextValueForReplacements=Следующее значение (замены) -MustBeLowerThanPHPLimit=Note: your PHP configuration currently limits the maximum filesize for upload to %s %s, irrespective of the value of this parameter +MustBeLowerThanPHPLimit=Примечание: ваша конфигурация PHP в настоящее время ограничивает максимальный размер файла для загрузки до %s %s, независимо от значения этого параметра NoMaxSizeByPHPLimit=Примечание: в вашей конфигурации PHP установлено no limit MaxSizeForUploadedFiles=Максимальный размер загружаемых файлов (0 для запрещения каких-либо загрузок) UseCaptchaCode=Использовать графический код (CAPTCHA) на странице входа @@ -102,8 +102,8 @@ AntiVirusCommand= Полный путь к антивирусной команд AntiVirusCommandExample= Пример для ClamWin: C: \\ Program Files (x86) \\ ClamWin \\ Bin \\ clamscan.exe
Пример для ClamAV: / USR / BIN / clamscan AntiVirusParam= Дополнительные параметры командной строки AntiVirusParamExample= Пример для ClamWin: --database="C:\\Program Files (x86)\\ClamWin\\lib" -ComptaSetup=Установка модуля контрагентов -UserSetup=Установка управления пользователями +ComptaSetup=Настройка модуля бухгалтерского учета +UserSetup=Настройка управления пользователями MultiCurrencySetup=Многовалютная настройка MenuLimits=Точность и ограничения MenuIdParent=ID родительского меню @@ -114,14 +114,14 @@ NotConfigured=Модуль/Приложение не настроен Active=Активная SetupShort=Настройка OtherOptions=Другие настройки -OtherSetup=Other Setup +OtherSetup=Другие настройки CurrentValueSeparatorDecimal=Десятичный разделитель CurrentValueSeparatorThousand=Разделитель разрядов Destination=Назначение IdModule=ID модуля IdPermissions=ID прав доступа LanguageBrowserParameter=Параметр %s -LocalisationDolibarrParameters=Localization parameters +LocalisationDolibarrParameters=Параметры локализации ClientTZ=Часовой пояс пользователя ClientHour=Время клиента (пользователя) OSTZ=Часовой пояс сервера @@ -129,11 +129,11 @@ PHPTZ=Часовой пояс PHP сервера DaylingSavingTime=Летнее время CurrentHour=Время PHP (на PHP-сервере) CurrentSessionTimeOut=Тайм-аут текущей сессии -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris" -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server. +YouCanEditPHPTZ=Чтобы установить другой часовой пояс PHP (не обязательно), вы можете попробовать добавить файл .htaccess с такой строкой, как «SetEnv TZ Europe/Paris» +HoursOnThisPageAreOnServerTZ=Внимание, в отличие от других экранов, часы на этой странице не в вашем часовом поясе, а в часовом поясе сервера. Box=Виджет Boxes=Виджеты -MaxNbOfLinesForBoxes=Max. number of lines for widgets +MaxNbOfLinesForBoxes=Макс. количество строк для виджета AllWidgetsWereEnabled=Доступны все доступные виджеты PositionByDefault=Порядок по умолчанию Position=Позиция @@ -141,17 +141,17 @@ MenusDesc=Менеджеры меню позволяют настраивать MenusEditorDesc=Редактор меню позволяет задавать собственные пункты в меню. Используйте это осторожно, что бы избежать нестабильности и всегда недоступных пунктов меню.
Некоторые модули добавляют пункты меню (в основном в меню Все). Если вы удалите некоторые из них по ошибке, вы можете восстановить их отключив или включив модуль повторно. MenuForUsers=Меню для пользователей LangFile=.lang файл -Language_en_US_es_MX_etc=Language (en_US, es_MX, ...) +Language_en_US_es_MX_etc=Язык (en_US, es_MX, ...) System=Система SystemInfo=Информация о системе SystemToolsArea=Раздел системных настроек -SystemToolsAreaDesc=This area provides administration functions. Use the menu to choose the required feature. +SystemToolsAreaDesc=Эта область обеспечивает функции администрирования. Используйте меню, чтобы выбрать необходимую функцию. Purge=Очистить -PurgeAreaDesc=This page allows you to delete all files generated or stored by Dolibarr (temporary files or all files in %s directory). Using this feature is not normally necessary. It is provided as a workaround for users whose Dolibarr is hosted by a provider that does not offer permissions to delete files generated by the web server. +PurgeAreaDesc=Эта страница позволяет вам удалить все файлы, созданные или сохраненные Dolibarr (временные файлы или все файлы в каталоге %s ). Использование этой функции обычно не требуется. Он предоставляется в качестве обходного пути для пользователей, чей Dolibarr размещен поставщиком, который не предлагает разрешения на удаление файлов, созданных веб-сервером. PurgeDeleteLogFile=Удаление файлов журналов, включая %s определенный для модуля Syslog (без риска потери данных) -PurgeDeleteTemporaryFiles=Delete all temporary files (no risk of losing data). Note: Deletion is done only if the temp directory was created 24 hours ago. +PurgeDeleteTemporaryFiles=Удалить все временные файлы (без риска потери данных). Примечание: Удаление выполняется только в том случае, если временный каталог был создан 24 часа назад. PurgeDeleteTemporaryFilesShort=Удаление временных файлов -PurgeDeleteAllFilesInDocumentsDir=Delete all files in directory: %s.
This will delete all generated documents related to elements (third parties, invoices etc...), files uploaded into the ECM module, database backup dumps and temporary files. +PurgeDeleteAllFilesInDocumentsDir=Удалить все файлы в каталоге: %s .
Это удалит все сгенерированные документы, связанные с элементами (контрагенты, счета и т.д.), файлы, загруженные в модуль ECM, резервные копии базы данных и временные файлы. PurgeRunNow=Очистить сейчас PurgeNothingToDelete=Нет директории или файла для удаления. PurgeNDirectoriesDeleted=Удалено %s файлов или каталогов. @@ -164,16 +164,16 @@ Restore=Восстановить RunCommandSummary=Резервное копирование запущено следующей командой BackupResult=Результат резервного копирования BackupFileSuccessfullyCreated=Файл резервной копии успешно создан -YouCanDownloadBackupFile=The generated file can now be downloaded +YouCanDownloadBackupFile=Созданный файл теперь можно скачать NoBackupFileAvailable=Нет файлов резервной копии. ExportMethod=Метод экспорта ImportMethod=Метод импорта ToBuildBackupFileClickHere=Для создания файла резервной копии нажмите здесь. -ImportMySqlDesc=To import a MySQL backup file, you may use phpMyAdmin via your hosting or use the mysql command from the Command line.
For example: +ImportMySqlDesc=Чтобы импортировать файл резервной копии MySQL, вы можете использовать phpMyAdmin через ваш хостинг или использовать команду mysql из командной строки.
Например: ImportPostgreSqlDesc=Для импорта файла резервной копии, вы должны использовать команду pg_restore из командной строки: ImportMySqlCommand=%s %s < mybackupfile.sql ImportPostgreSqlCommand=%s %s mybackupfile.sql -FileNameToGenerate=Filename for backup: +FileNameToGenerate=Имя файла резервной копии: Compression=Сжатие CommandsToDisableForeignKeysForImport=Команда отключения внешних ключей при импорте CommandsToDisableForeignKeysForImportWarning=Обязательно, если вы хотите иметь возможность для последующего восстановления sql dump @@ -195,15 +195,15 @@ IgnoreDuplicateRecords= Игнорировать ошибки дублирующ AutoDetectLang=Автоопределение (язык браузера) FeatureDisabledInDemo=Функция отключена в демо - FeatureAvailableOnlyOnStable=Функция доступна только в официальных стабильных версиях -BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it. +BoxesDesc=Виджеты - это компоненты, показывающие некоторую информацию, которую можно добавить для персонализации некоторых страниц. Вы можете выбрать отображать или нет виджет, выбрав целевую страницу и нажав «Активировать», или щелкнув корзину, чтобы отключить ее. OnlyActiveElementsAreShown=Показаны только элементы из включенных модулей -ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button (at end of module line) to enable/disable a module/application. +ModulesDesc=Модули/приложения определяют, какие функции доступны в программном обеспечении. Некоторые модули требуют предоставления разрешений пользователям после активации модуля. Нажмите кнопку включения/выключения (в конце строки модуля), чтобы включить/отключить модуль/приложение. ModulesMarketPlaceDesc=В интернете вы можете найти больше модулей для загрузки... -ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab %s. +ModulesDeployDesc=Если разрешения вашей файловой системе позволяют, вы можете использовать этот инструмент для развертывания внешнего модуля. Модуль будет виден на вкладке %s . ModulesMarketPlaces=Поиск внешних приложений/модулей ModulesDevelopYourModule=Разработка собственного приложения/модулей -ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you. -DOLISTOREdescriptionLong=Instead of switching on www.dolistore.com web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)... +ModulesDevelopDesc=Вы также можете разработать свой собственный модуль или найти партнера для его разработки. +DOLISTOREdescriptionLong=Вместо того чтобы переключаться на сайт www.dolistore.com для поиска внешнего модуля, вы можете использовать этот встроенный инструмент, который будет выполнять поиск для вас (может быть медленным, нужен доступ в Интернет) ... NewModule=Новый FreeModule=Свободно CompatibleUpTo=Совместимость с версией %s @@ -213,10 +213,10 @@ SeeInMarkerPlace=См. На рынке Updated=Обновлено Nouveauté=Новое AchatTelechargement=Купить/Скачать -GoModuleSetupArea=To deploy/install a new module, go to the Module setup area: %s. +GoModuleSetupArea=Чтобы развернуть/установить новый модуль, перейдите в область настройки модуля: %s . DoliStoreDesc=DoliStore, официальный магазин внешних модулей Dolibarr ERP / CRM -DoliPartnersDesc=List of companies providing custom-developed modules or features.
Note: since Dolibarr is an open source application, anyone experienced in PHP programming may develop a module. -WebSiteDesc=External websites for more add-on (non-core) modules... +DoliPartnersDesc=Список компаний, предоставляющих индивидуально разработанные модули или функции.
Примечание: поскольку Dolibarr является приложением с открытым исходным кодом, любой , кто имеет опыт программирования на PHP, может разработать модуль. +WebSiteDesc=Внешние веб-сайты для дополнительных модулей (неосновных) ... DevelopYourModuleDesc=Некоторые решения для разработки собственного модуля ... URL=Ссылка BoxesAvailable=Доступные виджеты @@ -229,29 +229,29 @@ Required=Обязательный UsedOnlyWithTypeOption=Используется только для некоторых вариантов повестки дня Security=Безопасность Passwords=Пароли -DoNotStoreClearPassword=Encrypt passwords stored in database (NOT as plain-text). It is strongly recommended to activate this option. -MainDbPasswordFileConfEncrypted=Encrypt database password stored in conf.php. It is strongly recommended to activate this option. +DoNotStoreClearPassword=Шифрование паролей, хранящихся в базе данных (НЕ в виде простого текста). Настоятельно рекомендуем активировать эту опцию. +MainDbPasswordFileConfEncrypted=Зашифруйте пароль базы данных, хранящийся в conf.php. Настоятельно рекомендуем активировать эту опцию. InstrucToEncodePass=Чтобы поместить зашифрованный пароль в conf.php файл, замените строку
$dolibarr_main_db_pass ="..."
на
$dolibarr_main_db_pass"=crypted:%s" InstrucToClearPass=Чтобы поместить не зашифрованный пароль в conf.php файл, замените строку
$dolibarr_main_db_pass="crypted:..."
на
$dolibarr_main_db_pass="%s" -ProtectAndEncryptPdfFiles=Protect generated PDF files. This is NOT recommended as it breaks bulk PDF generation. +ProtectAndEncryptPdfFiles=Защита сгенерированных PDF-файлов. Это НЕ рекомендуется, поскольку это нарушает массовую генерацию PDF. ProtectAndEncryptPdfFilesDesc=Защита документов PDF допускает чтение и распечатку любым приложением просмотра файлов PDF. Однако редактирование и копирование не возможно. Использование этой возможности не позволит глобальное объединение файлов PDF. Feature=Возможность DolibarrLicense=Лицензия Developpers=Разработчики / авторы -OfficialWebSite=Dolibarr official web site +OfficialWebSite=Официальный сайт Dolibarr OfficialWebSiteLocal=Локальный веб-сайт (%s) -OfficialWiki=Dolibarr documentation / Wiki +OfficialWiki=Документация Dolibarr / Wiki OfficialDemo=Демонстрация возможностей Dolibarr в интернете -OfficialMarketPlace=Официальный магазин внешних модулей / дополнений +OfficialMarketPlace=Официальный магазин внешних модулей/дополнений OfficialWebHostingService=Рекомендуемые сервисы веб-хостинга (облачный хостинг) ReferencedPreferredPartners=Предпочитаемые партнёры OtherResources=Другие источники -ExternalResources=External Resources +ExternalResources=Внешние Ресурсы SocialNetworks=Социальные сети ForDocumentationSeeWiki=Для получения документации пользователя или разработчика (документация, часто задаваемые вопросы...),
посетите Dolibarr Wiki:
%s ForAnswersSeeForum=Для любых других вопросов / помощи, вы можете использовать форум Dolibarr:
%s -HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr. -HelpCenterDesc2=Some of these resources are only available in english. +HelpCenterDesc1=Вот некоторые ресурсы для получения помощи и поддержки с Dolibarr. +HelpCenterDesc2=Некоторые из этих ресурсов доступны только на английском языке . CurrentMenuHandler=Обработчик текущего меню MeasuringUnit=Единица измерения LeftMargin=Левое поле @@ -266,42 +266,42 @@ NoticePeriod=Период уведомления NewByMonth=Новые по месяцам Emails=Электронная почта EMailsSetup=Настройка электронной почты -EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary. +EMailsDesc=Эта страница позволяет вам переопределить параметры PHP по умолчанию для отправки электронной почты. В большинстве случаев в ОС Unix / Linux настройка PHP правильная, и эти параметры не нужны. EmailSenderProfiles=Профили отправителей электронной почты -MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: %s) -MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: %s) -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems) -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems) -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: %s) +MAIN_MAIL_SMTP_PORT=Порт SMTP/SMTPS (значение по умолчанию в php.ini: %s ) +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (значение по умолчанию в php.ini: %s ) +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=Порт SMTP / SMTPS (не определен в PHP в Unix-подобных системах) +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP / SMTPS Host (не определен в PHP в Unix-подобных системах) +MAIN_MAIL_EMAIL_FROM=Адрес электронной почты отправителя для автоматической отправки электронных писем (значение по умолчанию в php.ini: %s ) MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent) -MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to -MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos) +MAIN_MAIL_AUTOCOPY_TO= Копировать (СК) все отправленные письма в +MAIN_DISABLE_ALL_MAILS=Отключить всю отправку электронной почты (для тестирования или демонстрации) MAIN_MAIL_FORCE_SENDTO=Отправляйте все электронные письма (вместо реальных получателей, для целей тестирования) -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list -MAIN_MAIL_SENDMODE=Email sending method -MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication) -MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication) -MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption -MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption -MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature -MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim -MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector -MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing -MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos) +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Добавить сотрудников с электронной почтой в список разрешенных получателей +MAIN_MAIL_SENDMODE=Способ отправки электронной почты +MAIN_MAIL_SMTPS_ID=SMTP ID (если отправляющий сервер требует аутентификации) +MAIN_MAIL_SMTPS_PW=Пароль SMTP (если отправляющий сервер требует аутентификации) +MAIN_MAIL_EMAIL_TLS=Использовать шифрование TLS (SSL) +MAIN_MAIL_EMAIL_STARTTLS=Использовать шифрование TLS (STARTTLS) +MAIN_MAIL_EMAIL_DKIM_ENABLED=Используйте DKIM для создания подписи электронной почты +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Домен электронной почты для использования с DKIM +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Имя селектора DKIM +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Закрытый ключ для подписи DKIM +MAIN_DISABLE_ALL_SMS=Отключить всю отправку SMS (для тестирования или демонстрации) MAIN_SMS_SENDMODE=Метод, используемый для передачи SMS -MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending -MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email) +MAIN_MAIL_SMS_FROM=Номер телефона отправителя по умолчанию для отправки SMS +MAIN_MAIL_DEFAULT_FROMTYPE=Электронная почта отправителя по умолчанию для отправки вручную (электронная почта пользователя или компании) UserEmail=Электронная почта пользователя -CompanyEmail=Company Email +CompanyEmail=Электронная почта компании FeatureNotAvailableOnLinux=Функция недоступна на Unix подобных систем. Проверьте вашу программу для отправки почты локально. -SubmitTranslation=If the translation for this language is not complete or you find errors, you can correct this by editing files in directory langs/%s and submit your change to www.transifex.com/dolibarr-association/dolibarr/ +SubmitTranslation=Если перевод для этого языка не завершен или вы обнаружили ошибки, вы можете исправить это, отредактировав файлы в каталоге langs / %s и отправив свое изменение по адресу www.transifex.com/dolibarr-association/dolibarr/ SubmitTranslationENUS=Если перевод для этого языка не завершен или вы обнаружите ошибки, вы можете исправить это, отредактировав файлы в каталог langs/%s и отправив измененные файлы на dolibarr.org/forum или для разработчиков на github.com/Dolibarr/dolibarr. ModuleSetup=Настройка модуля ModulesSetup=Настройка Модулей/Приложений ModuleFamilyBase=Система -ModuleFamilyCrm=Customer Relationship Management (CRM) -ModuleFamilySrm=Vendor Relationship Management (VRM) -ModuleFamilyProducts=Product Management (PM) +ModuleFamilyCrm=Управление взаимоотношениями с клиентами (CRM) +ModuleFamilySrm=Управление взаимоотношениями с поставщиками (VRM) +ModuleFamilyProducts=Управление продуктом (PM) ModuleFamilyHr=Управление персоналом (HR) ModuleFamilyProjects=Проекты / Совместная работа ModuleFamilyOther=Другое @@ -309,25 +309,25 @@ ModuleFamilyTechnic=Много-модульные инструменты ModuleFamilyExperimental=Экспериментальные модули ModuleFamilyFinancial=Финансовые модули (Бухгалтерия / Казначейство) ModuleFamilyECM=Управление электронным содержимым (ECM) -ModuleFamilyPortal=Websites and other frontal application +ModuleFamilyPortal=Сайты и другие интерфейсные приложения ModuleFamilyInterface=Интерфейсы с внешними системами MenuHandlers=Обработчики меню MenuAdmin=Редактор меню DoNotUseInProduction=Не используйте в производстве -ThisIsProcessToFollow=Upgrade procedure: +ThisIsProcessToFollow=Процедура обновления: ThisIsAlternativeProcessToFollow=Это альтернативная настройка для обработки вручную: StepNb=Шаг %s -FindPackageFromWebSite=Find a package that provides the features you need (for example on the official web site %s). -DownloadPackageFromWebSite=Download package (for example from the official web site %s). -UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into your Dolibarr server directory: %s -UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:
%s -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: %s. +FindPackageFromWebSite=Найдите пакет, который предоставит нужные вам функции (например, на официальном веб-сайте %s). +DownloadPackageFromWebSite=Скачать пакет (например, с официального сайта %s). +UnpackPackageInDolibarrRoot=Распакуйте упакованные файлы в каталог вашего сервера Dolibarr: %s +UnpackPackageInModulesRoot=Чтобы развернуть/установить внешний модуль, распакуйте/разархивируйте упакованные файлы в каталог сервера, предназначенный для внешних модулей:
%s +SetupIsReadyForUse=Развертывание модуля завершено. Однако вы должны включить и настроить модуль в своем приложении, перейдя на страницу настройки модулей: %s . NotExistsDirect=Альтернативная корневая директория не задана.
InfDirAlt=Начиная с 3-ей версии, можно определить альтернативный корневой каталог. Это позволяет вам хранить в специальном каталоге, плагины и настраиваемые шаблоны.
Просто создайте каталог в корне Dolibarr (например: custom).
InfDirExample=
Затем объявите его в файле conf.php
$dolibarr_main_url_root_alt = '/custom'
$dolibarr_main_document_root_alt ='/path/of/dolibarr/htdocs/custom'
Если эти строки комментируются с помощью ''#", чтобы включить их, просто раскомментируйте, удалив символ "#''. -YouCanSubmitFile=Alternatively, you may upload the module .zip file package: +YouCanSubmitFile=Кроме того, вы можете загрузить файл пакета .zip: CurrentVersion=Текущая версия Dolibarr -CallUpdatePage=Browse to the page that updates the database structure and data: %s. +CallUpdatePage=Перейдите на страницу, которая обновляет структуру базы данных и данные: %s. LastStableVersion=Последняя стабильная версия LastActivationDate=Последняя дата активации LastActivationAuthor=Последний активированный автор @@ -351,55 +351,55 @@ ErrorCantUseRazIfNoYearInMask= Ошибка, не может использов ErrorCantUseRazInStartedYearIfNoYearMonthInMask=Ошибка, не возможно использовать опцию @ если последовательность {yy}{mm} или {yyyy}{mm} не в маске. UMask=UMask параметр для новых файлов в файловых системах Unix / Linux / BSD / Mac. UMaskExplanation=Этот параметр позволяет определить набор прав по умолчанию для файлов, созданных Dolibarr на сервере (при загрузке, например).
Это должно быть восьмеричное значение (например, 0666 означает, читать и записывать сможет каждый).
Этот параметр бесполезен на Windows-сервере. -SeeWikiForAllTeam=Take a look at the Wiki page for a list of contributors and their organization +SeeWikiForAllTeam=Посмотрите на вики-странице список участников и их организации. UseACacheDelay= Задержка для кэширования при экспорте в секундах (0 или пусто для отключения кэширования) DisableLinkToHelpCenter=Скрыть ссылку "нужна помощь или поддержка" на странице авторизации DisableLinkToHelp=Скрыть ссылку интернет-справки "%s" -AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed. -ConfirmPurge=Are you sure you want to execute this purge?
This will permanently delete all your data files with no way to restore them (ECM files, attached files...). +AddCRIfTooLong=Отсутствует автоматическое перенос текста, слишком длинный текст не будет отображаться в документах. При необходимости перенесите строке вручную в текстовой области. +ConfirmPurge=Вы уверены, что хотите выполнить эту очистку?
Это навсегда удалит все ваши файлы данных без возможности их восстановления (файлы ECM, вложенные файлы ...). MinLength=Минимальная длина LanguageFilesCachedIntoShmopSharedMemory=Файлы .lang, загружены в общую памяти LanguageFile=Языковой файл -ExamplesWithCurrentSetup=Examples with current configuration +ExamplesWithCurrentSetup=Примеры с текущей конфигурацией ListOfDirectories=Список каталогов с шаблонами OpenDocument -ListOfDirectoriesForModelGenODT=Список каталогов содержащих файлы шаблонов в форматеOpenDocument.

Укажите здесь полный пусть к каталогу.
Каждый каталог с новой строки.
Для добавления каталога GED-модулей, добавьте здесь DOL_DATA_ROOT/ecm/yourdirectoryname.

Файлы в этих каталогах должны заканчиваться символами .odt или .ods. -NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories +ListOfDirectoriesForModelGenODT=Список каталогов, содержащих файлы шаблонов в формате OpenDocument.

Укажите здесь полный путь к каталогу.
Каждый каталог с новой строки.
Чтобы добавить каталог GED-модуля, добавьте здесь DOL_DATA_ROOT/ecm/yourdirectoryname .

Файлы в этих каталогах должны заканчиваться на .odt или .ods . +NumberOfModelFilesFound=Количество файлов шаблонов ODT/ODS, найденных в этих каталогах ExampleOfDirectoriesForModelGen=Примеры синтаксиса:
C: \\ MYDIR
/ home / mydir
DOL_DATA_ROOT / ecm / ecmdir FollowingSubstitutionKeysCanBeUsed=
Прежде чем сохранить шаблоны в этих каталогах прочитайте документацию на Wiki чтобы узнать, как создать свой шаблоны ODT документов: FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template FirstnameNamePosition=Расположение Имени / Фамилиии -DescWeather=The following images will be shown on the dashboard when the number of late actions reach the following values: +DescWeather=Следующие изображения будут отображаться на Информ-панели, когда количество последних действий достигнет следующих значений: KeyForWebServicesAccess=Ключ к использованию веб-служб (параметр "dolibarrkey" в веб-службах) TestSubmitForm=Форма тестового ввода -ThisForceAlsoTheme=Using this menu manager will also use its own theme whatever the user choice. Also this menu manager specialized for smartphones does not work on all smartphone. Use another menu manager if you experience problems with yours. +ThisForceAlsoTheme=При использовании этого менеджера меню также будет использоваться собственная тема независимо от выбора пользователя. Также этот менеджер меню, специализированный для смартфонов, работает не на всех смартфонах. Используйте другой менеджер меню, если у вас возникли проблемы с вашим. ThemeDir=Каталог тем оформления -ConnectionTimeout=Connection timeout +ConnectionTimeout=Время соединения вышло ResponseTimeout=Время ожидания ответа SmsTestMessage=Пробное сообщение от __PHONEFROM__ к ​​__PHONETO__ ModuleMustBeEnabledFirst=Для использования этой функции необходимо сначала включить модуль %s SecurityToken=Ключ для шифрования URL-адресов -NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external vendor, but you can find some on %s +NoSmsEngine=Менеджер отправления SMS недоступен. Диспетчер отправления SMS не устанавливается вместе с дистрибутивом по умолчанию, поскольку он зависит от внешнего поставщика, но некоторые из них можно найти на %s. PDF=PDF -PDFDesc=Global options for PDF generation. -PDFAddressForging=Rules for address boxes -HideAnyVATInformationOnPDF=Hide all information related to Sales Tax / VAT +PDFDesc=Общие опции для генерации PDF. +PDFAddressForging=Правила для зоны адреса +HideAnyVATInformationOnPDF=Скрыть всю информацию, связанную с налогом с продаж / НДС PDFRulesForSalesTax=Правила для налога с продаж/НДС PDFLocaltax=Правила для %s -HideLocalTaxOnPDF=Hide %s rate in column Tax Sale -HideDescOnPDF=Hide products description -HideRefOnPDF=Hide products ref. -HideDetailsOnPDF=Hide product lines details +HideLocalTaxOnPDF=Скрыть ставку %s в колонке Налог +HideDescOnPDF=Скрыть описание товара +HideRefOnPDF=Скрыть ссылки на продукты. +HideDetailsOnPDF=Скрыть детали о линейки продуктов PlaceCustomerAddressToIsoLocation=Используйте французскую стандартную позицию (La Poste) для позиции адреса клиента Library=Библиотека UrlGenerationParameters=Параметры безопасных URL`ов SecurityTokenIsUnique=Использовать уникальный параметр securekey для каждого URL EnterRefToBuildUrl=Введите ссылку на объект %s GetSecuredUrl=Получить рассчитанный URL -ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons +ButtonHideUnauthorized=Скрыть кнопки для пользователей без прав администратора для несанкционированных действий вместо отображения серых отключенных кнопок OldVATRates=Предыдущее значение НДС NewVATRates=Новое значение НДС PriceBaseTypeToChange=Изменять базовые цены на определенную величину -MassConvert=Launch bulk conversion +MassConvert=Запустить пакетное преобразование String=Строка TextLong=Длинный текст HtmlText=Html текст @@ -416,21 +416,24 @@ ExtrafieldSelect = Выбрать из списка ExtrafieldSelectList = Выбрать из таблицы ExtrafieldSeparator=Разделитель (не поле) ExtrafieldPassword=Пароль -ExtrafieldRadio=Radio buttons (one choice only) +ExtrafieldRadio=Радио кнопки (только один выбор) ExtrafieldCheckBox=Флажок ExtrafieldCheckBoxFromList=Флажки из таблицы ExtrafieldLink=Ссылка на объект ComputedFormula=Вычисленное поле -ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' -ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) -ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key -ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... -ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... -ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 -ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 -ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ComputedFormulaDesc=Вы можете ввести здесь формулу, используя другие свойства объекта или любую кодировку PHP, чтобы получить динамически вычисленное значение. Вы можете использовать любые PHP-совместимые формулы, включая "?" оператор условия и следующий глобальный объект: 1$db, $conf, $langs, $mysoc, $user, $object1 . 2 3ВНИМАНИЕ3 : могут быть доступны только некоторые свойства $object. Если нужные вам свойства не загружены, просто извлеките объект в формулу, как во втором примере.
Использование вычисляемого поля означает, что вы не можете ввести себе любое значение из интерфейса. Также, если есть синтаксическая ошибка, формула может ничего не возвращать.

Пример формулы:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Пример для перезагрузки объекта
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Другой пример формулы для принудительной загрузки объекта и его родительского объекта:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Родительский проект не найден' +Computedpersistent=Сохранить вычисленное поле +ComputedpersistentDesc=Вычисленные дополнительные поля будут сохранены в базе данных, однако значение будет пересчитано только при изменении объекта этого поля. Если вычисляемое поле зависит от других объектов или глобальных данных, это значение может быть неправильным!! +ExtrafieldParamHelpPassword=Оставьте это поле пустым, чтобы значение хранилось без шифрования (поле должно быть скрыто только звездочкой на экране).
Установите 'auto', чтобы использовать правило шифрования по умолчанию для сохранения пароля в базе данных (тогда считываемое значение будет только хешем, никакой возможности восстановить исходное значение) +ExtrafieldParamHelpselect=Список значений должен быть строками формата: ключ, значение (где ключ не может быть равен 0)

например:
1, значение1
2, значение2
code3, значение3
...

Чтобы иметь список в зависимости от другого списка дополнительных атрибутов:
1, значение1|options_ parent_list_code : parent_key
2, значение2|options_ parent_list_code : parent_key

Чтобы иметь список в зависимости от другого списка:
1, значение1 | parent_list_code : parent_key
2, значение2 | parent_list_code : parent_key +ExtrafieldParamHelpcheckbox=Список значений должен быть строками с форматом: ключ, значение (где ключ не может быть равен 0)

например:
1, значение1
2, значение2
3, значение3
... +ExtrafieldParamHelpradio=Список значений должен быть строками с форматом: ключ, значение (где ключ не может быть равен 0)

например:
1, значение1
2, значение2
3, значение3
... +ExtrafieldParamHelpsellist=Список значений поступает из таблицы
Синтаксис: table_name:label_field:id_field::filter
Пример: c_typent:libelle:id:: filter

-idfilter - обязательно первичный ключ int
- фильтр может быть простым тестом (например, active = 1) для отображения только активного значения
Вы также можете использовать $ID$ в фильтре с текущим идентификатором текущего объекта.
Чтобы сделать SELECT в фильтре, используйте $SEL$
если вы хотите фильтровать extrafields, используйте синтаксис extra.fieldcode = ... (где code field - это код extrafields)

Чтобы иметь список в зависимости от другого списка дополнительных атрибутов:
c_typent:libelle:id:options_ parent_list_code|parent_column:filter

Чтобы иметь список в зависимости от другого списка:
c_typent:libelle:id: parent_list_code|parent_column:filter +ExtrafieldParamHelpchkbxlst=Список значений поступает из таблицы
Синтаксис: table_name:label_field:id_field::filter
Пример: c_typent: libelle:id::filter

Фильтр может быть простым тестом (например, active = 1) для отображения только активного значения
Вы также можете использовать $ID$ в фильтре с текущим идентификатором текущего объекта.
Чтобы сделать SELECT в фильтре, используйте $SEL$
если вы хотите фильтровать extrafield, используйте синтаксис extra.fieldcode = ... (где code field - это код extrafield)

Чтобы иметь список в зависимости от другого списка дополнительных атрибутов:
c_typent:libelle:id: options_ parent_list_code|parent_column: filter

Чтобы иметь список в зависимости от другого списка:
c_typent: ibelle:id:parent_list_code|parent_column:filter +ExtrafieldParamHelplink=Параметры должны быть ObjectName:Classpath
Синтаксис: ObjectName:Classpath
Примеры:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Оставьте пустым для простого разделителя
Установите 1 для сворачивающегося разделителя (открытый по умолчанию)
Установите 2 для сворачивающегося разделителя (свернут по умолчанию) LibraryToBuildPDF=Библиотека используемая для создания PDF-файлов -LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) +LocalTaxDesc=Некоторые страны могут применять два или три налога на каждую позицию счета. Если это так, выберите тип второго и третьего налога и его ставку. Возможные типы:
1: местный налог применяется к продуктам и услугам без НДС (местный налог рассчитывается на сумму без налога)
2: местный налог применяется к продуктам и услугам, включая НДС (местный налог рассчитывается на сумму + основной налог)
3: местный налог применяется к продуктам без НДС (местный налог рассчитывается на сумму без налога)
4: местный налог применяется к продуктам, включая НДС (местный налог рассчитывается на сумму + основной НДС)
5: местный налог применяется к услугам без НДС (местный налог рассчитывается на сумму без налога)
6: местный налог применяется к услугам, включая НДС (местный налог рассчитывается на сумму + налог) SMS=SMS LinkToTestClickToDial=Введите номер телефона для отображения ссылки с целью проверки ClickToDial-адреса пользователя %s RefreshPhoneLink=Обновить ссылку @@ -440,40 +443,40 @@ DefaultLink=Ссылка по умолчанию SetAsDefault=Установить по умолчанию ValueOverwrittenByUserSetup=Предупреждение: это значение может быть перезаписано в настройках пользователя (каждый пользователь может задать свои настройки ссылки ClickToDial) ExternalModule=Внешний модуль - установлен в директорию %s -BarcodeInitForthird-parties=Mass barcode init for third-parties +BarcodeInitForthird-parties=Массовая инициализация штрих-кода для контрагентов BarcodeInitForProductsOrServices=Массовое создание или удаление штрих-кода для Товаров или Услуг CurrentlyNWithoutBarCode=В настоящее время у вас есть %sзапись на %s%s без определенного штрих-кода. InitEmptyBarCode=Начальное значения для следующих %s пустых записей EraseAllCurrentBarCode=Стереть все текущие значения штрих-кодов ConfirmEraseAllCurrentBarCode=Вы действительно хотите удалить все текущие значения штрих-кода? AllBarcodeReset=Все значения штрих-кодов были удалены -NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the Barcode module setup. +NoBarcodeNumberingTemplateDefined=В настройках модуля штрих-кода не включен шаблон нумерации. EnableFileCache=Включить кеш файлов -ShowDetailsInPDFPageFoot=Add more details into footer, such as company address or manager names (in addition to professional ids, company capital and VAT number). -NoDetails=No additional details in footer +ShowDetailsInPDFPageFoot=Добавьте дополнительные сведения в нижний колонтитул, такие как адрес компании или имена менеджеров (в дополнение к профессиональным идентификаторам, капиталу компании и номеру НДС). +NoDetails=Никаких дополнительных подробностей в нижнем колонтитуле DisplayCompanyInfo=Показать адрес компании DisplayCompanyManagers=Отображать имена менеджеров DisplayCompanyInfoAndManagers=Отображать имена адресов и менеджеров компаний -EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible. -ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code -ModuleCompanyCodeSupplierAquarium=%s followed by vendor code for a vendor accounting code +EnableAndSetupModuleCron=Если вы хотите, чтобы этот повторяющийся счет генерировался автоматически, модуль * %s * должен быть включен и правильно настроен. В противном случае генерация счетов должна производиться вручную из этого шаблона с помощью кнопки * Создать *. Обратите внимание, что даже если вы включили автоматическую генерацию, вы все равно можете не опасаясь запустить ручную генерацию. Генерация дубликатов за один и тот же период невозможна. +ModuleCompanyCodeCustomerAquarium=%s, за которым следует код клиента для кода учетной записи клиента +ModuleCompanyCodeSupplierAquarium=%s, за которым следует код поставщика для кода учетной записи поставщика ModuleCompanyCodePanicum=Верните пустой учетный код. -ModuleCompanyCodeDigitaria=Accounting code depends on third-party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third-party code. +ModuleCompanyCodeDigitaria=Бухгалтерский код зависит от кода контрагента. Код состоит из символа «C» в первой позиции, за которым следуют первые 5 символов кода контрагента. Use3StepsApproval=По умолчанию заказы на поставку должны быть созданы и одобрены двумя разными пользователями (один шаг/пользователь для создания и один шаг/пользователь для одобрения. Обратите внимание, что если у пользователя есть как разрешение на создание и утверждение, достаточно одного шага/пользователя) , Вы можете задать эту опцию, чтобы ввести утверждение третьего шага/пользователя, если сумма превышает выделенное значение (так что потребуется 3 шага: 1 = валидация, 2 = первое утверждение и 3 = второе одобрение, если суммы достаточно).
Установите это для пустого, если достаточно одного утверждения (2 шага), установите его на очень низкое значение (0,1), если требуется второе утверждение (3 шага). UseDoubleApproval=Используйте одобрение на 3 шага, когда сумма (без налога) выше ... -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not theirs, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).
If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider. +WarningPHPMail=ПРЕДУПРЕЖДЕНИЕ. Часто лучше настроить исходящую электронную почту, чтобы использовать почтовый сервер вашего провайдера вместо настроек по умолчанию. Некоторые провайдеры электронной почты (например, Yahoo) не позволяют отправлять электронную почту с другого сервера, не их собственного сервера. Ваша текущая настройка использует сервер приложения для отправки электронной почты, а не сервер вашего провайдера электронной почты, поэтому некоторые получатели (совместимые с ограничительным протоколом DMARC) спросят вашего провайдера электронной почты, могут ли они принять вашу электронную почту, а некоторые провайдеры электронной почты (например, Yahoo) может ответить «нет», потому что сервер не принадлежит им, поэтому некоторые из отправленных вами писем могут быть не приняты (будьте осторожны и с квотой отправки вашего провайдера электронной почты).
Если у вашего провайдера электронной почты (например, Yahoo) есть это ограничение, вы должны изменить настройки электронной почты, чтобы выбрать другой метод «SMTP-сервер» и ввести SMTP-сервер и учетные данные, предоставленные вашим провайдером электронной почты. WarningPHPMail2=Если вашему SMTP-провайдеру электронной почты необходимо ограничить почтовый клиент некоторыми IP-адресами (это очень редко), это IP-адрес почтового пользователя (MUA) для вашего приложения ERP CRM: %s. ClickToShowDescription=Нажмите, чтобы посмотреть описание -DependsOn=This module needs the module(s) -RequiredBy=Этому модулю требуется модуль (модулями) -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field. -PageUrlForDefaultValues=You must enter the relative path of the page URL. If you include parameters in URL, the default values will be effective if all parameters are set to same value. -PageUrlForDefaultValuesCreate=
Example:
For the form to create a new third party, it is %s.
For URL of external modules installed into custom directory, do not include the "custom/", so use path like mymodule/mypage.php and not custom/mymodule/mypage.php.
If you want default value only if url has some parameter, you can use %s -PageUrlForDefaultValuesList=
Example:
For the page that lists third parties, it is %s.
For URL of external modules installed into custom directory, do not include the "custom/" so use a path like mymodule/mypagelist.php and not custom/mymodule/mypagelist.php.
If you want default value only if url has some parameter, you can use %s -AlsoDefaultValuesAreEffectiveForActionCreate=Also note that overwritting default values for form creation works only for pages that were correctly designed (so with parameter action=create or presend...) -EnableDefaultValues=Enable customization of default values -EnableOverwriteTranslation=Enable usage of overwritten translation -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation. +DependsOn=Этот модуль нуждается в модуле (модулях) +RequiredBy=Этот модуль требуется для модуля (модулей) +TheKeyIsTheNameOfHtmlField=Это имя поля HTML. Необходимы технические знания, чтобы прочитать содержимое HTML-страницы, чтобы получить ключевое имя поля. +PageUrlForDefaultValues=Вы должны ввести относительный путь URL страницы. Если вы укажете параметры в URL-адресе, значения по умолчанию будут эффективны, если все параметры будут установлены на одно и то же значение. +PageUrlForDefaultValuesCreate=
Пример:
Для формы создания нового контрагента, это %s .
Для URL внешних модулей, установленных в пользовательский каталог, не добавляйте «custom /», поэтому используйте путь mymodule/mypage.php, а не custom/mymodule / mypage.php.
Если вы хотите использовать значение по умолчанию, только если в url есть какой-либо параметр, вы можете использовать %s +PageUrlForDefaultValuesList=
Пример:
Для страницы, на которой перечислены контрагенты, это %s .
Для URL-адресов внешних модулей, установленных в пользовательский каталог, не включайте «custom /», и используйте путь как mymodule/mypagelist.php, а не custom/mymodule/mypagelist.php.
Если вы хотите использовать значение по умолчанию, только если в url есть какой-либо параметр, вы можете использовать %s +AlsoDefaultValuesAreEffectiveForActionCreate=Также обратите внимание, что перезапись значений по умолчанию для создания формы работает только для страниц, которые были правильно созданы (так с параметром action = create или presend ...) +EnableDefaultValues=Включить настройку значений по умолчанию +EnableOverwriteTranslation=Разрешить использование переписанного перевода +GoIntoTranslationMenuToChangeThis=Для ключа с этим кодом найден перевод. Чтобы изменить это значение, вы должны отредактировать его из Главная-Настройки-Перевод. WarningSettingSortOrder=Предупреждение, установка порядка сортировки по умолчанию может привести к технической ошибке при переходе на страницу списка, если поле является неизвестным. Если у вас возникла такая ошибка, вернитесь на эту страницу, чтобы удалить порядок сортировки по умолчанию и восстановить поведение по умолчанию. Field=Поле ProductDocumentTemplates=Шаблоны документов для создания документа продукта @@ -482,55 +485,55 @@ WatermarkOnDraftExpenseReports=Водяной знак по отчетам о р AttachMainDocByDefault=Установите это значение в 1, если вы хотите приложить основной документ к электронной почте по умолчанию (если применимо) FilesAttachedToEmail=Прикрепить файл SendEmailsReminders=Отправить напоминания по электронной почте -davDescription=Setup a WebDAV server +davDescription=Настройте сервер WebDAV DAVSetup=Настройка модуля DAV -DAV_ALLOW_PRIVATE_DIR=Enable the generic private directory (WebDAV dedicated directory named "private" - login required) -DAV_ALLOW_PRIVATE_DIRTooltip=The generic private directory is a WebDAV directory anybody can access with its application login/pass. -DAV_ALLOW_PUBLIC_DIR=Enable the generic public directory (WebDAV dedicated directory named "public" - no login required) -DAV_ALLOW_PUBLIC_DIRTooltip=The generic public directory is a WebDAV directory anybody can access (in read and write mode), with no authorization required (login/password account). -DAV_ALLOW_ECM_DIR=Enable the DMS/ECM private directory (root directory of the DMS/ECM module - login required) -DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Similarly as access from the web interface, you will need a valid login/password with adecuate permissions to access it. +DAV_ALLOW_PRIVATE_DIR=Включить общий частный каталог (выделенный каталог WebDAV с именем «private» - требуется вход в систему) +DAV_ALLOW_PRIVATE_DIRTooltip=Общий частный каталог - это каталог WebDAV, к которому любой может получить доступ с помощью своего логина/пароля. +DAV_ALLOW_PUBLIC_DIR=Включить общий публичный каталог (выделенный каталог WebDAV с именем «public» - вход в систему не требуется) +DAV_ALLOW_PUBLIC_DIRTooltip=Общий публичный каталог - это каталог WebDAV, к которому может получить доступ каждый (в режиме чтения и записи) без авторизации (логин/пароль). +DAV_ALLOW_ECM_DIR=Включить приватный каталог DMS/ECM (корневой каталог модуля DMS/ECM - требуется вход в систему) +DAV_ALLOW_ECM_DIRTooltip=Корневой каталог, куда все файлы загружаются вручную при использовании модуля DMS/ECM. Аналогично доступу через веб-интерфейс, вам потребуется действующий логин/пароль с соответствующими разрешениями для доступа к нему. # Modules Module0Name=Пользователи и Группы Module0Desc=Управление Пользователями / Сотрудниками и Группами -Module1Name=Third Parties -Module1Desc=Companies and contacts management (customers, prospects...) +Module1Name=Контрагенты +Module1Desc=Управление компаниями и контактами (клиенты, потенциальные клиенты ...) Module2Name=Коммерческие Module2Desc=Коммерческое управление -Module10Name=Accounting (simplified) -Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table. +Module10Name=Бухгалтерский учет (упрощенный) +Module10Desc=Простые бухгалтерские отчеты (журналы, обороты) на основе содержимого базы данных. Не использует таблицы гроссбуха. Module20Name=Предложения Module20Desc=Управление коммерческими предложеними -Module22Name=Mass Emailings -Module22Desc=Manage bulk emailing +Module22Name=Массовые рассылки +Module22Desc=Управление массовой рассылкой Module23Name=Энергия Module23Desc=Мониторинг потребления энергии -Module25Name=Sales Orders -Module25Desc=Sales order management +Module25Name=Заказы на продажу +Module25Desc=Управление заказами на продажу Module30Name=Счета-фактуры -Module30Desc=Management of invoices and credit notes for customers. Management of invoices and credit notes for suppliers +Module30Desc=Управление счетами и кредитными авизо для клиентов. Управление счетами и кредитными авизо для поставщиков Module40Name=Поставщики -Module40Desc=Vendors and purchase management (purchase orders and billing) +Module40Desc=Поставщики и управление закупками (заказы на покупку и выставление счетов) Module42Name=Отчет об ошибках Module42Desc=Средства регистрации (file, syslog, ...). Такие журналы предназначены для технических/отладочных целей. Module49Name=Редакторы Module49Desc=Управления редактором Module50Name=Продукция -Module50Desc=Management of Products +Module50Desc=Управление продуктами Module51Name=Массовые рассылки Module51Desc=Управление массовыми бумажными отправлениями Module52Name=Акции -Module52Desc=Stock management (for products only) +Module52Desc=Управление запасами (только для продуктов) Module53Name=Услуги -Module53Desc=Management of Services +Module53Desc=Управление Услугами Module54Name=Контакты/Подписки -Module54Desc=Management of contracts (services or recurring subscriptions) +Module54Desc=Управление контрактами (услуги или периодические подписки) Module55Name=Штрих-коды Module55Desc=Управление штрих-кодами Module56Name=Телефония Module56Desc=Интеграция телефонии -Module57Name=Bank Direct Debit payments -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries. +Module57Name=Прямые банковские платежи +Module57Desc=Управление платежными поручениями с прямым дебитом. Включает создание файла SEPA для европейских стран. Module58Name=ClickToDial Module58Desc=Интеграция с системами НажатьДляЗвонка (Asterisk, ...) Module59Name=Bookmark4u @@ -540,115 +543,115 @@ Module70Desc=Управление мероприятиями Module75Name=Транспортные расходы Module75Desc=Управление транспортными расходами Module80Name=Отгрузки -Module80Desc=Shipments and delivery note management -Module85Name=Banks & Cash +Module80Desc=Управление отгрузками и накладными +Module85Name=Банки и Наличные Module85Desc=Управление банковскими счетами или наличными -Module100Name=External Site -Module100Desc=Add a link to an external website as a main menu icon. Website is shown in a frame under the top menu. +Module100Name=Внешний сайт +Module100Desc=Добавьте ссылку на внешний сайт в виде значка главного меню. Сайт отображается в рамке под верхним меню. Module105Name=Mailman и SPIP Module105Desc=Модуль интерфейса для рассылок Mailman или SPIP Module200Name=LDAP -Module200Desc=LDAP directory synchronization +Module200Desc=Синхронизация каталогов LDAP Module210Name=PostNuke Module210Desc=Интергация с PostNuke Module240Name=Экспорт данных Module240Desc=Инструмент для экспорта данных Dolibarr (с ассистентами) Module250Name=Импорт данных -Module250Desc=Tool to import data into Dolibarr (with assistants) +Module250Desc=Инструмент для импорта данных в Dolibarr (с помощниками) Module310Name=Участники Module310Desc=Управление участниками фонда Module320Name=RSS-канал -Module320Desc=Add a RSS feed to Dolibarr pages -Module330Name=Bookmarks & Shortcuts -Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access -Module400Name=Projects or Leads -Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view. +Module320Desc=Добавить канал RSS на страницы Dolibarr +Module330Name=Закладки и Ярлыки +Module330Desc=Создавайте ярлыки, всегда доступные, для внутренних или внешних страниц, к которым вы часто обращаетесь +Module400Name=Проекты или Сделки +Module400Desc=Управление проектами, сделками/возможностями и/или задачами. Вы также можете назначить любой элемент (счет-фактура, заказ, предложение, мероприятия, ...) проекту и видеть в срезе представление проекта. Module410Name=Веб-календарь Module410Desc=Интеграция веб-календаря -Module500Name=Taxes & Special Expenses -Module500Desc=Управление другими расходами (налоги на продажу, социальные или налоговые налоги, дивиденды, ...) +Module500Name=Налоги и специальные расходы +Module500Desc=Управление другими расходами (НДС, социальные или налоговые расходы, дивиденды, ...) Module510Name=Зарплаты -Module510Desc=Record and track employee payments +Module510Desc=Записывать и отслеживать выплаты сотрудникам Module520Name=Ссуды Module520Desc=Управление ссудами Module600Name=Уведомления -Module600Desc=Send email notifications triggered by a business event: per user (setup defined on each user), per third-party contacts (setup defined on each third party) or by specific emails -Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders for agenda events, go into the setup of module Agenda. +Module600Desc=Отправка уведомлений по электронной почте, инициированных бизнес-событием: для каждого пользователя (настройка, определенная для каждого пользователя), для сторонних контактов (настройка, определенная для каждого контрагента) или для определенных электронных писем +Module600Long=Обратите внимание, что этот модуль отправляет электронные письма в режиме реального времени, когда происходит определенное деловое событие. Если вы ищете функцию для отправки напоминаний по электронной почте для событий в повестке дня, перейдите к настройке модуля Agenda. Module610Name=Варианты продукта -Module610Desc=Creation of product variants (color, size etc.) +Module610Desc=Создание вариантов продукта (цвет, размер и т.д.) Module700Name=Пожертвования Module700Desc=Управление пожертвованиями -Module770Name=Expense Reports -Module770Desc=Manage expense reports claims (transportation, meal, ...) -Module1120Name=Vendor Commercial Proposals -Module1120Desc=Запросить коммерческое предложение и цены продавца +Module770Name=Отчеты о расходах +Module770Desc=Управление и утверждение отчетов о расходах (транспорт, питание, ...) +Module1120Name=Коммерческие предложения поставщика +Module1120Desc=Запросить коммерческое предложение и цены поставщика Module1200Name=Mantis Module1200Desc=Интеграция с Mantis Module1520Name=Создание документов -Module1520Desc=Mass email document generation +Module1520Desc=Массовая генерация документов по электронной почте Module1780Name=Теги/Категории Module1780Desc=Создание тегов/категорий (продукции, клиентов, поставщиков, контактов или участников) Module2000Name=Текстовый редактор WYSIWYG -Module2000Desc=Allow text fields to be edited/formatted using CKEditor (html) +Module2000Desc=Разрешить редактирование/форматирование текстовых полей с помощью CKEditor (html) Module2200Name=Динамическое ценообразование -Module2200Desc=Use maths expressions for auto-generation of prices +Module2200Desc=Используйте математические выражения для автогенерации цен Module2300Name=Запланированные задания -Module2300Desc=Запланированное управление заданиями (псевдоним cron или chrono table) +Module2300Desc=Управление запланированными заданиями (alias cron или chrono table) Module2400Name=События/Повестка дня -Module2400Desc=Track events. Log automatic events for tracking purposes or record manual events or meetings. This is the principal module for good Customer or Vendor Relationship Management. +Module2400Desc=Отслеживать события. Журнал автоматических событий для отслеживания или записи вручную событий или встреч. Это основной модуль для хорошего управления взаимоотношениями с клиентами или поставщиками. Module2500Name=DMS / ECM -Module2500Desc=Система управления документами / Управление электронным контентом. Автоматическая организация ваших сгенерированных или сохраненных документов. Поделитесь им, когда вам нужно. +Module2500Desc=Система управления документами / Управление электронным контентом. Автоматическая организация ваших сгенерированных или сохраненных документов. Поделитесь ими, когда вам нужно. Module2600Name=API/Веб-службы (SOAP-сервер) Module2600Desc=Включение Dolibarr SOAP сервера предоставляющего API-сервис Module2610Name= API/веб-службы (сервер REST) Module2610Desc=Включить сервер REST для Dolibarr, предоставляющий услуги API Module2660Name=Вызовите WebServices (клиент SOAP) -Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Purchase orders are currently supported.) +Module2660Desc=Включить клиент веб-служб Dolibarr (может использоваться для передачи данных/запросов на внешние серверы. В настоящее время поддерживаются только заказы на покупку.) Module2700Name=Всемирно распознаваемый аватар -Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access +Module2700Desc=Используйте онлайн-сервис Gravatar (www.gravatar.com), чтобы показывать фотографию пользователей/участников (связанную с их электронной почтой). Нужен доступ в интернет Module2800Desc=FTP-клиент Module2900Name=GeoIPMaxmind Module2900Desc=Подключение к службе GeoIP MaxMind для преобразования IP-адреса в название страны Module3200Name=Неограниченные архивы -Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries. -Module4000Name=Менеджер отдела кадров +Module3200Desc=Включите неизменяемый журнал деловых событий. События архивируются в режиме реального времени. Журнал представляет собой доступную только для чтения таблицу связанных событий, которые можно экспортировать. Этот модуль может быть обязательным для некоторых стран. +Module4000Name=Управление персоналом Module4000Desc=Управление персоналом (управление отделом, контракты и чувства сотрудников) Module5000Name=Группы компаний Module5000Desc=Управление группами компаний Module6000Name=Бизнес-Процесс Module6000Desc=Управление рабочим процессом (автоматическое создание объекта и/или автоматическое изменение статуса) Module10000Name=Веб-сайты -Module10000Desc=Create websites (public) with a WYSIWYG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the internet with your own domain name. -Module20000Name=Leave Request Management -Module20000Desc=Define and track employee leave requests -Module39000Name=Product Lots -Module39000Desc=Lots, serial numbers, eat-by/sell-by date management for products -Module40000Name=Multicurrency -Module40000Desc=Use alternative currencies in prices and documents +Module10000Desc=Создавайте веб-сайты (общедоступные) с помощью редактора WYSIWYG. Просто настройте свой веб-сервер (Apache, Nginx, ...), чтобы он указывал на выделенный каталог Dolibarr, чтобы он был онлайн в Интернете с вашим собственным доменным именем. +Module20000Name=Управление запросами на отпуск +Module20000Desc=Определить и отслеживать запросы сотрудников на отпуск +Module39000Name=Товарные партии +Module39000Desc=Управление Партиями, серийными номерами, датой/временем продажи продуктов +Module40000Name=Мульти валюта +Module40000Desc=Используйте альтернативные валюты в ценах и документах Module50000Name=PayBox -Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make ad-hoc payments or payments related to a specific Dolibarr object (invoice, order etc...) +Module50000Desc=Предложите покупателям страницу оплаты через PayBox (кредитные / дебетовые карты). Это может быть использовано, чтобы позволить вашим клиентам осуществлять специальные платежи или платежи, связанные с конкретным объектом Dolibarr (счет, заказ и т. д.) Module50100Name=POS SimplePOS -Module50100Desc=Point of Sale module SimplePOS (simple POS). +Module50100Desc=Модуль торговой точки SimplePOS (простой POS). Module50150Name=POS TakePOS -Module50150Desc=Point of Sale module TakePOS (touchscreen POS). +Module50150Desc=Модуль торговой точки TakePOS (POS с сенсорным экраном). Module50200Name=Paypal -Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make ad-hoc payments or payments related to a specific Dolibarr object (invoice, order etc...) +Module50200Desc=Предложите клиентам страницу онлайн-платежей PayPal (учетная запись PayPal или кредитные / дебетовые карты). Это может быть использовано, чтобы позволить вашим клиентам осуществлять специальные платежи или платежи, связанные с конкретным объектом Dolibarr (счет, заказ и т. д.) Module50300Name=Stripe -Module50300Desc=Offer customers a Stripe online payment page (credit/debit cards). This can be used to allow your customers to make ad-hoc payments or payments related to a specific Dolibarr object (invoice, order etc...) -Module50400Name=Accounting (double entry) -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats. +Module50300Desc=Предложите клиентам страницу онлайн-оплаты Stripe (кредитные / дебетовые карты). Это может быть использовано, чтобы позволить вашим клиентам осуществлять специальные платежи или платежи, связанные с конкретным объектом Dolibarr (счет, заказ и т. д.) +Module50400Name=Бухгалтерский учет (двойная запись) +Module50400Desc=Управление бухгалтерским учетом (двойные записи, поддержка гроссбуха и вспомогательных книг). Экспорт книги в несколько других форматов бухгалтерского программного обеспечения. Module54000Name=Модуль PrintIPP -Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server). +Module54000Desc=Прямая печать (без открытия документов) с использованием интерфейса Cups IPP (принтер должен быть виден с сервера, а CUPS должен быть установлен на сервере). Module55000Name=Голосование, обзор или голосование -Module55000Desc=Create online polls, surveys or votes (like Doodle, Studs, RDVz etc...) +Module55000Desc=Создавайте онлайн-опросы, обзоры или голосования (например, Doodle, Studs, RDVz и т. Д.) Module59000Name=Наценки Module59000Desc=Модуль управления наценками Module60000Name=Комиссии Module60000Desc=Модуль управления комиссиями Module62000Name=Обязанности по доставке товаров -Module62000Desc=Add features to manage Incoterms +Module62000Desc=Добавить функции для управления Инкотермс Module63000Name=Ресурсы -Module63000Desc=Manage resources (printers, cars, rooms, ...) for allocating to events +Module63000Desc=Управление ресурсами (принтеры, машины, комнаты, ...) для распределения на события Permission11=Просмотр счетов-фактур клиентов Permission12=Создание/Изменение счета-фактуры Permission13=Аннулирование счетов-фактур @@ -668,9 +671,9 @@ Permission32=Создание / изменение продукции / услу Permission34=Удаленные продукция / услуги Permission36=Просмотр / управление скрытой продукцией / услугами Permission38=Экспорт продукции -Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet) -Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks -Permission44=Delete projects (shared project and projects I'm contact for) +Permission41=Просмотрите проекты и задачи (общий проект и мои проекты). Можно также ввести время, затраченное на вас или ваших подчиненных, на назначенные задачи (расписание) +Permission42=Создание/изменение проектов (общий и мои проекты). Может также создавать задачи и назначать пользователей для проекта и задач +Permission44=Удалить проекты (общие и мои проекты) Permission45=Экспорт проектов Permission61=Смотреть мероприятия Permission62=Создание / измение мероприятий @@ -701,25 +704,25 @@ Permission104=Проверка отправок Permission106=Экспортировать отправки Permission109=Удалить отправки Permission111=Читать финансовую отчетность -Permission112=Создать / изменить / удалить и сравнить сделоки -Permission113=Настройка финансовых учётных записей (создание, изменение категорий) -Permission114=Reconcile transactions +Permission112=Создать / изменить / удалить и сравнить сделки +Permission113=Настройка финансовых счетов (создание, изменение категорий) +Permission114=Сверить транзакции Permission115=Экспорт операций и выписок со счета Permission116=Перераспределение средств между счетами -Permission117=Manage checks dispatching +Permission117=Управление диспетчеризацией чеков Permission121=Просмотр контрагентов, связанных с пользователем Permission122=Создать / изменить контрагентов, связанных с пользователем Permission125=Удалить контрагентов, связанных с пользователем Permission126=Экспорт контрагентов -Permission141=Read all projects and tasks (also private projects for which I am not a contact) -Permission142=Create/modify all projects and tasks (also private projects for which I am not a contact) +Permission141=Просмотреть все проекты и задачи (в том числе частные проекты, в которыми я не контактное лицо) +Permission142=Создать/изменить все проекты и задачи (также частные проекты, для которых я не контактное лицо) Permission144=Удалить все проекты и задачи (так же частные проекты в которых я не контактное лицо) Permission146=Посмотреть провайдеров Permission147=Посмотреть статистику -Permission151=Посмотреть заказанные прямые дебетные платежи -Permission152=Создать / изменить заказанные прямые дебетные платежи -Permission153=Отправка / Передача заказанных прямых дебетовых платежей -Permission154=Record Credits/Rejections of direct debit payment orders +Permission151=Посмотреть платежные поручения с прямым дебетом +Permission152=Создать/Изменить платежные поручения с прямым дебетом +Permission153=Отправка/Передача платежных поручений с прямым дебетом +Permission154=Запись зачетов/отказов платежных поручений с прямым дебетом Permission161=Посмотреть котракты/подписки Permission162=Создать/изменить котракты/подписки Permission163=Активировать услугу/подписку в контракте @@ -732,14 +735,14 @@ Permission173=Удалить транспортные расходы Permission174=Просмотр поездок и расходов Permission178=Экспорт транспортных расходов Permission180=Посмотреть поставщиков -Permission181=Read purchase orders -Permission182=Create/modify purchase orders -Permission183=Validate purchase orders -Permission184=Approve purchase orders -Permission185=Order or cancel purchase orders -Permission186=Receive purchase orders -Permission187=Close purchase orders -Permission188=Cancel purchase orders +Permission181=Просмотреть заказы на покупку +Permission182=Создание/изменение заказов на покупку +Permission183=Проверка заказов на покупку +Permission184=Утвердить заказы на покупку +Permission185=Заказать или отменить заказы на покупку +Permission186=Получать заказы на покупку +Permission187=Закрыть заказы на покупку +Permission188=Отменить заказы на покупку Permission192=Создать строки Permission193=Отмена строк Permission194=Read the bandwidth lines @@ -750,10 +753,10 @@ Permission205=Управление подключениями Permission206=Посмотреть соединения Permission211=Посмотреть Телефонию Permission212=Заказ линий -Permission213=Включить строки +Permission213=Включить линию Permission214=Настройка телефонии Permission215=Настройка провайдеров -Permission221=Посмотреть отправки электронной почты +Permission221=Посмотреть переписку Permission222=Создать / изменить отправки электронной почты (тема, получатели ...) Permission223=Проверка отправки электронной почты (разрешение на отправку) Permission229=Удалить отправки электронной почты @@ -767,12 +770,12 @@ Permission244=Посмотреть содержание скрытых кате Permission251=Посмотреть других пользователей и группы PermissionAdvanced251=Посмотреть других пользователей Permission252=Посмотреть права доступа других пользователей -Permission253=Create/modify other users, groups and permissions +Permission253=Создание/изменение других пользователей, групп и разрешений PermissionAdvanced253=Создать / изменить внутренних / внешних пользователей и права доступа Permission254=Создать / изменить только внешних пользователей Permission255=Изменить пароли других пользователей Permission256=Удалить или отключить других пользователей -Permission262=Extend access to all third parties (not only third parties for which that 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=Расширить доступ ко всем контрагентам (не только контрагентам, для которых этот пользователь является торговым представителем).
Не действует для внешних пользователей (всегда ограничены предложениями, заказами, счетами, контрактами и т. д.).
Не действует для проектов (только правила разрешений, видимости и назначения). Permission271=Читать CA Permission272=Читать счета Permission273=Выпуск счетов @@ -782,10 +785,10 @@ Permission283=Удалить контакты Permission286=Экспортировать контакты Permission291=Читать тарифы Permission292=Установка разрешений на тарифы -Permission293=Modify customer's tariffs -Permission300=Read barcodes -Permission301=Create/modify barcodes -Permission302=Delete barcodes +Permission293=Изменить тарифы клиента +Permission300=Читать штрих-коды +Permission301=Создание/изменение штрих-кодов +Permission302=Удалить штрих-коды Permission311=Читать услуги Permission312=Назначить услугу/подписку договору Permission331=Читать закладки @@ -804,10 +807,10 @@ Permission401=Читать скидки Permission402=Создать / изменить скидки Permission403=Проверить скидки Permission404=Удалить скидки -Permission430=Use Debug Bar -Permission511=Read payments of salaries -Permission512=Create/modify payments of salaries -Permission514=Delete payments of salaries +Permission430=Использовать панель отладки +Permission511=Просмотр выплаты зарплат +Permission512=Создание/изменение выплат зарплат +Permission514=Удалить выплаты зарплаты Permission517=Экспорт зарплат Permission520=Открыть ссуды Permission522=Создать/изменить ссуды @@ -819,9 +822,9 @@ Permission532=Создать / изменить услуги Permission534=Удаление услуг Permission536=Смотреть / Управлять скрытыми услугами Permission538=Экспорт услуг -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Просмотр ведомости материалов +Permission651=Создание/обновление ведомостей материалов +Permission652=Удалить списки материалов Permission701=Просмотр пожертвований Permission702=Создание / изменение пожертвований Permission703=Удаление пожертвований @@ -841,34 +844,34 @@ Permission1101=Просмотр доставки заказов Permission1102=Создание / изменение доставки заказов Permission1104=Подтверждение доставки заказов Permission1109=Удаление доставки заказов -Permission1121=Read supplier proposals -Permission1122=Create/modify supplier proposals -Permission1123=Validate supplier proposals -Permission1124=Send supplier proposals -Permission1125=Delete supplier proposals -Permission1126=Close supplier price requests +Permission1121=Просмотр предложения поставщиков +Permission1122=Создание/изменение предложений поставщиков +Permission1123=Проверить предложения поставщика +Permission1124=Отправить предложения поставщика +Permission1125=Удалить предложения поставщиков +Permission1126=Закрыть запрос цены поставщика Permission1181=Просмотр поставщиков -Permission1182=Read purchase orders -Permission1183=Create/modify purchase orders -Permission1184=Validate purchase orders -Permission1185=Approve purchase orders -Permission1186=Order purchase orders -Permission1187=Acknowledge receipt of purchase orders -Permission1188=Delete purchase orders -Permission1190=Approve (second approval) purchase orders +Permission1182=Просмотреть заказы на покупку +Permission1183=Создание/изменение заказов на покупку +Permission1184=Проверка заказов на покупку +Permission1185=Утвердить заказы на покупку +Permission1186=Заказать заказы на покупку +Permission1187=Подтвердить получение заказов на покупку +Permission1188=Удалить заказы на покупку +Permission1190=Утвердить (второе утверждение) заказы на покупку Permission1201=Получите результат экспорта Permission1202=Создание / Изменение экспорта -Permission1231=Read vendor invoices -Permission1232=Create/modify vendor invoices -Permission1233=Validate vendor invoices -Permission1234=Delete vendor invoices -Permission1235=Send vendor invoices by email -Permission1236=Export vendor invoices, attributes and payments -Permission1237=Export purchase orders and their details +Permission1231=Просмотреть счета поставщиков +Permission1232=Создание/изменение счетов поставщиков +Permission1233=Проверка счетов поставщиков +Permission1234=Удалить счета поставщиков +Permission1235=Отправить счета поставщика по электронной почте +Permission1236=Экспорт счетов, атрибутов и платежей поставщиков +Permission1237=Экспорт заказов на покупку и их детали Permission1251=Запуск массового импорта внешних данных в базу данных (загрузка данных) Permission1321=Экспорт клиентом счета-фактуры, качества и платежей Permission1322=Повторно открыть оплаченный счет -Permission1421=Export sales orders and attributes +Permission1421=Экспорт заказов на продажу и атрибутов Permission2401=Посмотреть действия (события или задачи), связанные с его учетной записью Permission2402=Создание / изменение / удаление действий (события или задачи), связанные с его учетной записью Permission2403=Удаление действий (задачи, события или) связанных с его учетной записью @@ -882,17 +885,17 @@ Permission2503=Отправить или удалить документы Permission2515=Настройка директорий документов Permission2801=Использовать FTP клиент в режиме только чтения (только просмотр и загрузка файлов) Permission2802=Использовать FTP клиент в режиме записи (удаление или выгрузка файлов) -Permission3200=Read archived events and fingerprints -Permission4001=See employees -Permission4002=Create employees -Permission4003=Delete employees -Permission4004=Export employees -Permission10001=Read website content -Permission10002=Create/modify website content (html and javascript content) -Permission10003=Create/modify website content (dynamic php code). Dangerous, must be reserved to restricted developers. -Permission10005=Delete website content -Permission20001=Read leave requests (your leave and those of your subordinates) -Permission20002=Create/modify your leave requests (your leave and those of your subordinates) +Permission3200=Просмотреть архивированные события +Permission4001=Смотреть сотрудников +Permission4002=Создать сотрудников +Permission4003=Удалить сотрудников +Permission4004=Экспорт сотрудников +Permission10001=Смотреть содержание сайта +Permission10002=Создание/изменение содержимого веб-сайта (HTML и JavaScript) +Permission10003=Создание/изменение содержимого сайта (динамический PHP-код). Опасно, должно быть зарезервировано для разработчиков с ограниченным доступом. +Permission10005=Удалить контент сайта +Permission20001=Просмотр запросов на отпуск (ваш отпуск и ваших подчиненных) +Permission20002=Создайте/измените ваши запросы на отпуск (ваш отпуск и отпуск ваших подчиненных) Permission20003=Удалить заявления на отпуск Permission20004=Читайте все запросы на отпуск (даже пользователь не подчиняется) Permission20005=Создавать/изменять запросы на отпуск для всех (даже для пользователей, не подчиненных) @@ -901,22 +904,22 @@ Permission23001=Просмотр Запланированных задач Permission23002=Создать/обновить Запланированную задачу Permission23003=Удалить Запланированную задачу Permission23004=Выполнить запланированную задачу -Permission50101=Use Point of Sale +Permission50101=Использовать точку продажи Permission50201=Просмотр транзакций Permission50202=Импорт транзакций -Permission50401=Bind products and invoices with accounting accounts -Permission50411=Read operations in ledger -Permission50412=Write/Edit operations in ledger -Permission50414=Delete operations in ledger -Permission50415=Delete all operations by year and journal in ledger -Permission50418=Export operations of the ledger -Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year -Permission50440=Manage chart of accounts, setup of accountancy -Permission51001=Read assets -Permission51002=Create/Update assets -Permission51003=Delete assets -Permission51005=Setup types of asset +Permission50401=Связать продукты и счета с учетными записями +Permission50411=Просмотр операций в бухгалтерской книге +Permission50412=Операции записи/редактирования в бухгалтерской книге +Permission50414=Удалить операции в бухгалтерской книге +Permission50415=Удалить все операции по году и журналу в бухгалтерской книге +Permission50418=Экспортные операций бухгалтерской книги +Permission50420=Отчеты и отчеты об экспорте (оборот, баланс, журналы, бухгалтерская книга) +Permission50430=Определить и закрыть финансовый период +Permission50440=Управление структурой счетов, настройка бухгалтерского учета +Permission51001=Просмотр активов +Permission51002=Создать/обновить активы +Permission51003=Удалить активы +Permission51005=Настройка типов актива Permission54001=Печать Permission55001=Открыть опросы Permission55002=Создать/изменить опросы @@ -927,76 +930,76 @@ Permission63001=Чтение ресурсов Permission63002=Создание/изменение ресурсов Permission63003=Удалить ресурсы Permission63004=Свяжите ресурсы с повесткой дня -DictionaryCompanyType=Third-party types -DictionaryCompanyJuridicalType=Third-party legal entities +DictionaryCompanyType=Типы контрагента +DictionaryCompanyJuridicalType=Правовая форма контрагента DictionaryProspectLevel=Потенциальный клиент -DictionaryCanton=States/Provinces +DictionaryCanton=Штат/Провинция DictionaryRegion=Регионы DictionaryCountry=Страны DictionaryCurrency=Валюты -DictionaryCivility=Title of civility +DictionaryCivility=Обращение DictionaryActions=Тип мероприятия -DictionarySocialContributions=Types of social or fiscal taxes +DictionarySocialContributions=Типы социальных или налоговых сборов DictionaryVAT=Значения НДС или налога с продаж DictionaryRevenueStamp=Количество налоговых марок -DictionaryPaymentConditions=Payment Terms -DictionaryPaymentModes=Payment Modes +DictionaryPaymentConditions=Условия оплаты +DictionaryPaymentModes=Способы оплаты DictionaryTypeContact=Типы Контактов/Адресов -DictionaryTypeOfContainer=Website - Type of website pages/containers +DictionaryTypeOfContainer=Веб-сайт - Тип страниц сайта/контейнеров DictionaryEcotaxe=Экологический налог Ecotax (WEEE) DictionaryPaperFormat=Форматы бумаги -DictionaryFormatCards=Card formats +DictionaryFormatCards=Форматы карт DictionaryFees=Отчет о расходах - Типы строк отчета о расходах DictionarySendingMethods=Способы доставки -DictionaryStaff=Number of Employees +DictionaryStaff=Количество работников DictionaryAvailability=Задержка доставки DictionaryOrderMethods=Методы заказов DictionarySource=Происхождение Коммерческих предложений / Заказов DictionaryAccountancyCategory=Персонализированные группы для отчетов DictionaryAccountancysystem=Модели для диаграммы счетов DictionaryAccountancyJournal=Бухгалтерские журналы -DictionaryEMailTemplates=Email Templates +DictionaryEMailTemplates=Шаблоны электронной почты DictionaryUnits=Единицы -DictionaryMeasuringUnits=Measuring Units +DictionaryMeasuringUnits=Единицы измерения DictionaryProspectStatus=Статус потенциального клиента -DictionaryHolidayTypes=Types of leave -DictionaryOpportunityStatus=Lead status for project/lead +DictionaryHolidayTypes=Типы отпуска +DictionaryOpportunityStatus=Правовой статус проекта/сделки DictionaryExpenseTaxCat=Отчет о расходах - Категории транспорта DictionaryExpenseTaxRange=Отчет о расходах - Диапазон по транспортной категории SetupSaved=Настройки сохранены SetupNotSaved=Установки не сохранены -BackToModuleList=Back to Module list -BackToDictionaryList=Back to Dictionaries list +BackToModuleList=Вернуться к списку модулей +BackToDictionaryList=Вернуться к списку словарей TypeOfRevenueStamp=Тип налоговой печати -VATManagement=Sales Tax Management -VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sales Tax rate follows the active standard rule:
If the seller is not subject to Sales tax, then Sales tax defaults to 0. End of rule.
If the (seller's country = buyer's country), then the Sales tax by default equals the Sales tax of the product in the seller's country. End of rule.
If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default VAT is 0. This rule is dependant on the seller's country - please consult with your accountant. The VAT should be paid by the buyer to the customs office in their country and not to the seller. End of rule.
If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community VAT number) then the VAT defaults to the VAT rate of the seller's country. End of rule.
If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community VAT number), then the VAT is 0 by default. End of rule.
In any other case the proposed default is Sales tax=0. End of rule. -VATIsNotUsedDesc=By default the proposed Sales tax is 0 which can be used for cases like associations, individuals or small companies. -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real). A system in which VAT is declared. -VATIsNotUsedExampleFR=In France, it means associations that are non Sales tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sales tax in franchise) and paid a franchise Sales tax without any Sales tax declaration. This choice will display the reference "Non applicable Sales tax - art-293B of CGI" on invoices. +VATManagement=Управление налогом с продаж +VATIsUsedDesc=По умолчанию при создании потенциальных клиентов, счетов, заказов и т. д. ставка налога с продаж соответствует действующему стандартному правилу:
Если продавец не облагается налогом с продаж, по умолчанию налог с продаж равен 0. Конец правила.
Если (страна продавца = страна покупателя), то налог с продаж по умолчанию равен налогу с продаж продукта в стране продавца. Конец правила.
Если продавец и покупатель находятся в Европейском сообществе, а товары относятся к транспортным товарам (перевозка, доставка, авиакомпания), НДС по умолчанию равен 0. Это правило зависит от страны продавца - пожалуйста, проконсультируйтесь с вашим бухгалтером. НДС должен быть оплачен покупателем на таможне в их стране, а не продавцу. Конец правила.
Если продавец и покупатель находятся в Европейском сообществе, а покупатель не является компанией (с зарегистрированным номером НДС внутри Сообщества), то НДС по умолчанию устанавливается по ставке НДС страны продавца. Конец правила.
Если продавец и покупатель находятся в Европейском сообществе, а покупатель является компанией (с зарегистрированным номером НДС внутри Сообщества), то по умолчанию НДС равен 0. Конец правила.
В любом другом случае предлагаемым значением по умолчанию является налог с продаж = 0. Конец правила. +VATIsNotUsedDesc=По умолчанию предлагаемый налог с продаж равен 0, и его можно использовать в таких случаях, как ассоциации, частные лица или небольшие компании. +VATIsUsedExampleFR=Во Франции это означает компании или организации, имеющие реальную фискальную систему (упрощенная реальная или обычная реальная). Система, в которой декларируется НДС. +VATIsNotUsedExampleFR=Во Франции это означает ассоциации, которые не декларируют НДС, или компании, организации или либеральные профессии, которые выбрали фискальную систему микропредприятий (НДС во франшизе) и уплатили налог на франшизу без какой-либо декларации НДС. При выборе этого варианта в счетах будет отображаться ссылка "Non applicable Sales tax - art-293B of CGI" («НДС не применяется - art-293B CGI»). ##### Local Taxes ##### LTRate=Ставка LocalTax1IsNotUsed=Не использовать второй налог -LocalTax1IsUsedDesc=Use a second type of tax (other than first one) -LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one) +LocalTax1IsUsedDesc=Используйте второй тип налога (кроме первого) +LocalTax1IsNotUsedDesc=Не используйте другой вид налога (кроме первого) LocalTax1Management=Второй тип налога LocalTax1IsUsedExample= LocalTax1IsNotUsedExample= LocalTax2IsNotUsed=Не использовать третий налог -LocalTax2IsUsedDesc=Use a third type of tax (other than first one) -LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one) +LocalTax2IsUsedDesc=Используйте третий тип налога (кроме первого) +LocalTax2IsNotUsedDesc=Не используйте другой вид налога (кроме первого) LocalTax2Management=Третий тип налога LocalTax2IsUsedExample= LocalTax2IsNotUsedExample= -LocalTax1ManagementES=RE управления -LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:
If the buyer is not subjected to RE, RE by default=0. End of rule.
If the buyer is subjected to RE then the RE by default. End of rule.
+LocalTax1ManagementES=Управление недвижимостью +LocalTax1IsUsedDescES=Ставка RE (real estate - налог на недвижимость) по умолчанию при создании потенциальных клиентов, счетов, заказов и т.д. Следует действующему стандартному правилу:
Если покупатель не подвергается RE, RE по умолчанию = 0. Конец правила.
Если покупатель подвергается RE, то RE по умолчанию. Конец правила.
LocalTax1IsNotUsedDescES=По умолчанию предлагается RE 0. Конец правления. LocalTax1IsUsedExampleES=В Испании они являются профессионалами с учетом некоторых конкретных разделов испанский ИАЭ. LocalTax1IsNotUsedExampleES=В Испании они являются профессиональными и общества и при условии соблюдения определенных слоев испанского ИАЭ. LocalTax2ManagementES=IRPF управления -LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:
If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.
If the seller is subjected to IRPF then the IRPF by default. End of rule.
+LocalTax2IsUsedDescES=Ставка IRPF (подоходный налог для физических лиц) по умолчанию при создании потенциальных клиентов, счетов-фактур, заказов и т.д. Соответствует действующему стандартному правилу:
Если продавец не подвергается IRPF, то IRPF по умолчанию = 0. Конец правила.
Если продавец подвергается IRPF, то IRPF по умолчанию. Конец правила.
LocalTax2IsNotUsedDescES=По умолчанию предлагается IRPF 0. Конец правления. -LocalTax2IsUsedExampleES=В Испании, фрилансеры и независимые специалисты, которые оказывают услуги и компаний, которые выбрали налоговой системы модулей. -LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules. +LocalTax2IsUsedExampleES=В Испании работают фрилансеры и независимые профессионалы, предлагающие услуги, и компании, которые выбрали налоговую систему модулей. +LocalTax2IsNotUsedExampleES=В Испании это предприятия, не подпадающие под налоговую систему модулей. CalcLocaltax=Отчеты о местных налогах CalcLocaltax1=Продажи-Покупки CalcLocaltax1Desc=Отчёты о местных налогах - это разница между местными налогами с продаж и покупок @@ -1006,16 +1009,16 @@ CalcLocaltax3=Продажи CalcLocaltax3Desc=Отчёты о местных налогах - это итог местных налогов с продаж LabelUsedByDefault=Метки, используемые по умолчанию, если нет перевода можно найти код LabelOnDocuments=Этикетка на документах -LabelOrTranslationKey=Label or translation key -ValueOfConstantKey=Value of constant -NbOfDays=No. of days +LabelOrTranslationKey=Метка или ключ перевода +ValueOfConstantKey=Значение константы +NbOfDays=Кол-во дней AtEndOfMonth=На конец месяца CurrentNext=Текущая/Следующая Offset=Сдвиг AlwaysActive=Всегда активный Upgrade=Обновление MenuUpgrade=Обновление / Расширение -AddExtensionThemeModuleOrOther=Развертывание/установить внешний модуль/приложения +AddExtensionThemeModuleOrOther=Развертывание/установка внешнего модуля/приложения WebServer=Веб-сервер DocumentRootServer=Корневой каталог Веб-сервера DataRootServer=Каталог фалов данных @@ -1033,7 +1036,7 @@ DatabaseUser=Пользователь базы данных DatabasePassword=Пароль базы данных Tables=Таблицы TableName=Наименование таблицы -NbOfRecord=No. of records +NbOfRecord=Кол-во записей Host=Сервер DriverType=Тип драйвера SummarySystem=Обзор системной информации @@ -1045,14 +1048,14 @@ Skin=Тема оформления DefaultSkin=Тема по умолчанию MaxSizeList=Максимальная длина списка DefaultMaxSizeList=Максимальная длина по умолчанию для списков -DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card) +DefaultMaxSizeShortList=Максимальная длина по умолчанию для коротких списков (т.е. в карточке клиента) MessageOfDay=Сообщение дня MessageLogin=Сообщение на странице входа LoginPage=Страница авторизации BackgroundImageLogin=Фоновое изображение PermanentLeftSearchForm=Постоянный поиск формы на левом меню -DefaultLanguage=Default language -EnableMultilangInterface=Enable multilanguage support +DefaultLanguage=Язык по умолчанию +EnableMultilangInterface=Включить поддержку мультиязычности EnableShowLogo=Показать логотип на левом меню CompanyInfo=Компания/Организация CompanyIds=Company/Organization identities @@ -1070,28 +1073,28 @@ OwnerOfBankAccount=Владелец банковского счета %s BankModuleNotActive=Модуль Банковских счетов не активирован ShowBugTrackLink=Показать ссылку "%s" Alerts=Предупреждения -DelaysOfToleranceBeforeWarning=Delay before displaying a warning alert for: -DelaysOfToleranceDesc=Set the delay before an alert icon %s is shown onscreen for the late element. -Delays_MAIN_DELAY_ACTIONS_TODO=Planned events (agenda events) not completed -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Project not closed in time -Delays_MAIN_DELAY_TASKS_TODO=Planned task (project tasks) not completed -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Order not processed -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Purchase order not processed -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Proposal not closed -Delays_MAIN_DELAY_PROPALS_TO_BILL=Proposal not billed +DelaysOfToleranceBeforeWarning=Задержка перед отображением предупреждения о: +DelaysOfToleranceDesc=Установите задержку до того, как значок предупреждения %s будет отображаться на экране для последнего элемента. +Delays_MAIN_DELAY_ACTIONS_TODO=Запланированные события (события повестки дня) не завершены +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Проект не закрыт во время +Delays_MAIN_DELAY_TASKS_TODO=Запланированная задача (задачи проекта) не выполнена +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Заказ не обработан +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Заказ на покупку не обработан +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Предложение не закрыто +Delays_MAIN_DELAY_PROPALS_TO_BILL=Предложение не выставлено Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Service to activate -Delays_MAIN_DELAY_RUNNING_SERVICES=Expired service -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Unpaid vendor invoice -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Unpaid customer invoice -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Pending bank reconciliation -Delays_MAIN_DELAY_MEMBERS=Delayed membership fee -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Check deposit not done -Delays_MAIN_DELAY_EXPENSEREPORTS=Expense report to approve -SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured. -SetupDescription2=The following two sections are mandatory (the two first entries in the Setup menu): -SetupDescription3=%s -> %s
Basic parameters used to customize the default behavior of your application (e.g for country-related features). -SetupDescription4=%s -> %s
This software is a suite of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module. -SetupDescription5=Other Setup menu entries manage optional parameters. +Delays_MAIN_DELAY_RUNNING_SERVICES=Просроченная услуга +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Неоплаченный счет поставщика +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Неоплаченный счет клиента +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=В ожидании банковской сверки +Delays_MAIN_DELAY_MEMBERS=Задержка членского взноса +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Чековый депозит не сделан +Delays_MAIN_DELAY_EXPENSEREPORTS=Отчет о расходах для утверждения +SetupDescription1=Перед началом использования Dolibarr необходимо определить параметры и включить/настроить модули. +SetupDescription2=Следующие два раздела являются обязательными (две первые записи в меню настройки): +SetupDescription3=%s -> %s
Основные параметры, используемые для настройки поведения вашего приложения по умолчанию (например, для функций, связанных со страной). +SetupDescription4=%s -> %s
Это программное обеспечение представляет собой набор из множества модулей/приложений, все более или менее независимые. Модули, соответствующие вашим потребностям, должны быть включены и настроены. Новые пункты/опции добавляются в меню при активации модуля. +SetupDescription5=Другие пункты меню настройки управляют дополнительными параметрами. LogEvents=Безопасность ревизии события Audit=Аудит InfoDolibarr=О Dolibarr @@ -1105,83 +1108,83 @@ BrowserName=Имя браузера BrowserOS=Операционная система браузера ListOfSecurityEvents=Список Dolibarr безопасность события SecurityEventsPurged=Безопасность событий очищены -LogEventDesc=Enable logging for specific security events. Administrators the log via menu %s - %s. Warning, this feature can generate a large amount of data in the database. +LogEventDesc=Включите ведение журнала для определенных событий безопасности. Администраторы журнала через меню %s - %s . Предупреждение, эта функция может генерировать большой объем данных в базе данных. AreaForAdminOnly=Параметры настройки могут быть установлены только пользователем администратора . SystemInfoDesc=Система информации разного техническую информацию Вы получите в режиме только для чтения и видимые только для администраторов. -SystemAreaForAdminOnly=This area is available to administrator users only. Dolibarr user permissions cannot change this restriction. -CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page. -AccountantDesc=If you have an external accountant/bookkeeper, you can edit here its information. -AccountantFileNumber=Accountant code -DisplayDesc=Parameters affecting the look and behaviour of Dolibarr can be modified here. +SystemAreaForAdminOnly=Эта область доступна только для администраторов. Пользовательские разрешения Dolibarr не могут изменить это ограничение. +CompanyFundationDesc=Редактировать информацию о компании/организации. Нажмите кнопку «%s» или «%s» внизу страницы. +AccountantDesc=Если у вас есть внешний бухгалтер/бухгалтер, вы можете отредактировать здесь эту информацию. +AccountantFileNumber=Код бухгалтера +DisplayDesc=Параметры, влияющие на внешний вид и поведение Dolibarr, могут быть изменены здесь. AvailableModules=Доступное приложение/модули -ToActivateModule=Чтобы активировать модуль, перейдите на настройку зоны. +ToActivateModule=Чтобы активировать модуль, перейдите в место настройки (Главная-Настройки-Модули/Приложения). SessionTimeOut=Тайм-аут для сессии -SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every %s/%s access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).
Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is. +SessionExplanation=Это число гарантирует, что сеанс никогда не истечет до этой задержки, если очиститель сеанса выполняется внутренним чистильщиком сессии PHP (и ничем иным). Внутренний чистильщик сессии PHP не гарантирует, что сессия истечет после этой задержки. Он истечет после этой задержки и при запуске чистильщика сессии, поэтому каждый доступ %s / %s , но только во время доступа, сделанного другими сеансами (если значение равно 0, это означает, что очистка сеанса выполняется только внешним процессом) ,
Примечание: на некоторых серверах с внешним механизмом очистки сеансов (cron под debian, ubuntu ...) сеансы могут быть уничтожены после периода, определенного внешней установкой, независимо от того, какое значение здесь введено. TriggersAvailable=Доступные триггеры -TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory htdocs/core/triggers. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...). +TriggersDesc=Триггеры - это файлы, которые изменят поведение рабочего процесса Dolibarr после копирования в каталог htdocs/core/triggers . Они реализуют новые действия, активированные в событиях Dolibarr (создание новой компании, проверка счетов, ...). TriggerDisabledByName=Триггеры этого файла отключено NORUN-суффикс в названии. -TriggerDisabledAsModuleDisabled=Триггеры в этом файле будут отключены как модуль %s отключен. -TriggerAlwaysActive=Триггеры в этом файле, всегда активны, независимо являются активированный Dolibarr модули. -TriggerActiveAsModuleActive=Триггеры в этом файле действуют как модуль %s включен. -GeneratedPasswordDesc=Choose the method to be used for auto-generated passwords. +TriggerDisabledAsModuleDisabled=Триггеры в этом файле отключены, так как модуль %s отключен. +TriggerAlwaysActive=Триггеры в этом файле, всегда активны, независимо являются активированными модули Dolibarr . +TriggerActiveAsModuleActive=Триггеры в этом файле активны, так как модуль %s включен. +GeneratedPasswordDesc=Выберите метод, который будет использоваться для автоматически сгенерированных паролей. DictionaryDesc=Вставьте все справочные данные. Вы можете добавить свои значения по умолчанию. -ConstDesc=This page allows you to edit (override) parameters not available in other pages. These are mostly reserved parameters for developers/advanced troubleshooting. For a full list of the parameters available see here. +ConstDesc=Эта страница позволяет редактировать (переопределять) параметры, недоступные на других страницах. Это в основном зарезервированные параметры для разработчиков / расширенного поиска неисправностей. Полный список доступных параметров смотрите здесь. MiscellaneousDesc=Все остальные параметры, связанные с безопасностью, определены здесь. LimitsSetup=Пределы / Точная настройка -LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here -MAIN_MAX_DECIMALS_UNIT=Max. decimals for unit prices -MAIN_MAX_DECIMALS_TOT=Max. decimals for total prices -MAIN_MAX_DECIMALS_SHOWN=Max. decimals for prices shown on screen. Add an ellipsis ... after this parameter (e.g. "2...") if you want to see "..." suffixed to the truncated price. -MAIN_ROUNDING_RULE_TOT=Step of rounding range (for countries where rounding is done on something other than base 10. For example, put 0.05 if rounding is done by 0.05 steps) +LimitsDesc=Вы можете определить пределы, точности и оптимизации, используемые Dolibarr здесь +MAIN_MAX_DECIMALS_UNIT=Максимум. десятичные дроби для цен за единицу +MAIN_MAX_DECIMALS_TOT=Максимум. десятичные дроби для общих цен +MAIN_MAX_DECIMALS_SHOWN=Максимум. десятичные дроби для цен, отображаемых на экране . Добавьте многоточие ... после этого параметра (например,"2 ..."), если вы хотите видеть суффикс " ... " к усеченной цене. +MAIN_ROUNDING_RULE_TOT=Диапазон шага округления (для стран, где округление выполняется не на основе 10. Например, укажите 0,05, если округление выполняется с шагом 0,05) UnitPriceOfProduct=Чистая цена единицы продукта -TotalPriceAfterRounding=Total price (excl/vat/incl tax) after rounding -ParameterActiveForNextInputOnly=Параметр эффективным для следующего ввода только -NoEventOrNoAuditSetup=No security event has been logged. This is normal if Audit has not been enabled in the "Setup - Security - Events" page. -NoEventFoundWithCriteria=No security event has been found for this search criteria. +TotalPriceAfterRounding=Общая стоимость (включая налоги / НДС) с округлением +ParameterActiveForNextInputOnly=Параметр эффективен только для следующего ввода +NoEventOrNoAuditSetup=Событие безопасности не было зарегистрировано. Это нормально, если на странице «Настройка - Безопасность - События» не был включен аудит. +NoEventFoundWithCriteria=Для этого критерия поиска событие безопасности не найдено. SeeLocalSendMailSetup=См. вашей локальной настройки Sendmail -BackupDesc=A complete backup of a Dolibarr installation requires two steps. -BackupDesc2=Backup the contents of the "documents" directory (%s) containing all uploaded and generated files. This will also include all the dump files generated in Step 1. -BackupDesc3=Backup the structure and contents of your database (%s) into a dump file. For this, you can use the following assistant. -BackupDescX=The archived directory should be stored in a secure place. +BackupDesc=Полное резервное копирование установки Dolibarr требует двух шагов. +BackupDesc2=Резервное копирование содержимого каталога «documents» ( %s ), содержащего все загруженные и сгенерированные файлы. Это также будет включать все файлы дампа, сгенерированные на шаге 1. +BackupDesc3=Резервное копирование структуры и содержимого вашей базы данных (%s ) в файл дампа. Для этого вы можете использовать следующий помощник. +BackupDescX=Архивный каталог должен храниться в безопасном месте. BackupDescY=Генерируемый файла дампа следует хранить в надежном месте. -BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended. -RestoreDesc=To restore a Dolibarr backup, two steps are required. -RestoreDesc2=Restore the backup file (zip file for example) of the "documents" directory to a new Dolibarr installation or into this current documents directory (%s). -RestoreDesc3=Restore the database structure and data from a backup dump file into the database of the new Dolibarr installation or into the database of this current installation (%s). Warning, once the restore is complete, you must use a login/password, that existed from the backup time/installation to connect again.
To restore a backup database into this current installation, you can follow this assistant. +BackupPHPWarning=Резервное копирование не может быть гарантировано с помощью этого метода. Предыдущий метод рекомендуется. +RestoreDesc=Чтобы восстановить резервную копию Dolibarr, необходимо выполнить два шага. +RestoreDesc2=Восстановить файл резервной копии (например, zip-файл) каталога «документы» в новую установку Dolibarr или в этот текущий каталог документов ( %s ). +RestoreDesc3=Восстановить структуру базы данных и данные из файла резервной копии в базу данных новой установки Dolibarr или в базу данных текущей установки ( %s ). Предупреждение: после завершения восстановления вы должны использовать логин / пароль, который существовал во время резервного копирования / установки, чтобы снова подключиться.
Чтобы восстановить резервную копию базы данных в этой текущей установке, вы можете следовать этому помощнику. RestoreMySQL=Иvпорт MySQL -ForcedToByAModule= Это правило вынуждены %s на активированный модуль -PreviousDumpFiles=Existing backup files -WeekStartOnDay=First day of the week -RunningUpdateProcessMayBeRequired=Running the upgrade process seems to be required (Program version %s differs from Database version %s) +ForcedToByAModule= Это правило принудительно активируется модулем %s. +PreviousDumpFiles=Существующие файлы резервных копий +WeekStartOnDay=Первый день недели +RunningUpdateProcessMayBeRequired=Похоже требуется запуск процесса обновления (версия программы %s отличается от версии базы данных %s) YouMustRunCommandFromCommandLineAfterLoginToUser=Вы должны запустить эту команду из командной строки после Войти в оболочку с пользователем %s. YourPHPDoesNotHaveSSLSupport=SSL функций, не доступных в PHP DownloadMoreSkins=Дополнительные шкуры для загрузки -SimpleNumRefModelDesc=Returns the reference number with format %syymm-nnnn where yy is year, mm is month and nnnn is sequential with no reset -ShowProfIdInAddress=Show professional id with addresses -ShowVATIntaInAddress=Hide intra-Community VAT number with addresses +SimpleNumRefModelDesc=Возвращать справочный в формате %syymm-nnnn, где yy - год, mm - месяц, а nnnn - последовательность без сброса +ShowProfIdInAddress=Показать профессиональный идентификатор с адресами +ShowVATIntaInAddress=Скрыть номер НДС внутри Сообщества с адресами TranslationUncomplete=Частичный перевод -MAIN_DISABLE_METEO=Disable meteorological view +MAIN_DISABLE_METEO=Отключить просмотр погоды MeteoStdMod=Стандартный режим MeteoStdModEnabled=Стандартный режим включен MeteoPercentageMod=Процентный режим MeteoPercentageModEnabled=Включен режим процента MeteoUseMod=Нажмите, чтобы использовать%s TestLoginToAPI=Испытание Войти в API -ProxyDesc=Some features of Dolibarr require internet access. Define here the internet connection parameters such as access through a proxy server if necessary. -ExternalAccess=External/Internet Access -MAIN_PROXY_USE=Use a proxy server (otherwise access is direct to the internet) -MAIN_PROXY_HOST=Proxy server: Name/Address -MAIN_PROXY_PORT=Proxy server: Port -MAIN_PROXY_USER=Proxy server: Login/User -MAIN_PROXY_PASS=Proxy server: Password -DefineHereComplementaryAttributes=Define here any additional/custom attributes that you want to be included for: %s +ProxyDesc=Некоторые функции Dolibarr требуют доступа в Интернет. Определите здесь параметры интернет-соединения, такие как доступ через прокси-сервер, если это необходимо. +ExternalAccess=Внешний доступ +MAIN_PROXY_USE=Использовать прокси-сервер (в противном случае прямой доступ в интернет) +MAIN_PROXY_HOST=Прокси-сервер: имя / адрес +MAIN_PROXY_PORT=Прокси-сервер: Порт +MAIN_PROXY_USER=Прокси-сервер: Логин +MAIN_PROXY_PASS=Прокси-сервер: пароль +DefineHereComplementaryAttributes=Определите здесь любые дополнительные / пользовательские атрибуты, которые вы хотите включить для: %s ExtraFields=Дополнительные атрибуты ExtraFieldsLines=Дополнительные атрибуты (строки) ExtraFieldsLinesRec=Дополнительные атрибуты (шаблоны счетов-фактур) ExtraFieldsSupplierOrdersLines=Дополнительные атбрибуты (строки заказа) ExtraFieldsSupplierInvoicesLines=Дополнительные атрибуты (строки счёта) -ExtraFieldsThirdParties=Complementary attributes (third party) -ExtraFieldsContacts=Complementary attributes (contacts/address) +ExtraFieldsThirdParties=Дополнительные атрибуты (контрагент) +ExtraFieldsContacts=Дополнительные атрибуты (контакты/адрес) ExtraFieldsMember=Дополнительные атрибуты (Участник) ExtraFieldsMemberType=Дополнительные атрибуты (тип Участника) ExtraFieldsCustomerInvoices=Дополнительные атрибуты (Счета-Фактуры) @@ -1195,13 +1198,13 @@ AlphaNumOnlyLowerCharsAndNoSpace=только латинские строчны SendmailOptionNotComplete=Предупреждение, на некоторых системах Linux, для отправки электронной почты из электронной почты, Sendmail выполнения установки должны conatins опцию-ба (параметр mail.force_extra_parameters в файле php.ini). Если некоторые получатели не получают электронные письма, попытке изменить этот параметр с PHP mail.force_extra_parameters =-ба). PathToDocuments=Путь к документам PathDirectory=Каталог -SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages. +SendmailOptionMayHurtBuggedMTA=Функция отправки почты с использованием метода «PHP mail direct» будет генерировать почтовое сообщение, которое может быть неправильно проанализировано некоторыми получающими почтовыми серверами. В результате некоторые письма не могут быть прочитаны людьми, использующие эти платформы с ошибками. Это касается некоторых интернет-провайдеров (например, Orange во Франции). Это не проблема с Dolibarr или PHP, а с принимающим почтовым сервером. Однако вы можете добавить опцию MAIN_FIX_FOR_BUGGED_MTA в 1 в меню «Настройка - Другие настройки», тем самым подправив изменить Dolibarr, чтобы избежать этого. Однако могут возникнуть проблемы с другими серверами, которые строго используют стандарт SMTP. Другое решение (рекомендуется) - использовать метод «Библиотека сокетов SMTP», который не имеет недостатков. TranslationSetup=Настройка перевода TranslationKeySearch=Поиск ключа перевода или строки TranslationOverwriteKey=Перезаписать строку перевода -TranslationDesc=How to set the display language:
* Default/Systemwide: menu Home -> Setup -> Display
* Per user: Click on the username at the top of the screen and modify the User Display Setup tab on the user card. +TranslationDesc=Как установить язык отображения:
* По умолчанию/для всей системы: меню Главная-Настройки-Внешний вид
* Для каждого пользователя: нажмите на имя пользователя в верхней части экрана и измените вкладку « Настройка отображения пользователя » на карточке пользователя. TranslationOverwriteDesc=Вы также можете переопределить строки, заполняющие следующую таблицу. Выберите свой язык из раскрывающегося списка «%s», вставьте строку перевода в «%s» и ваш новый перевод в «%s» -TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use +TranslationOverwriteDesc2=Вы можете использовать другую вкладку, чтобы узнать, какой ключ перевода использовать TranslationString=Строка перевода CurrentTranslationString=Текущая строка перевода WarningAtLeastKeyOrTranslationRequired=Критерии поиска требуются, по крайней мере, для строки ключа или перевода @@ -1212,86 +1215,86 @@ TotalNumberOfActivatedModules=Активированное приложение/ YouMustEnableOneModule=Вы должны включить минимум 1 модуль ClassNotFoundIntoPathWarning=Class %s not found in PHP path YesInSummer=Да летом -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are available to external users (irrespective of the permissions of such users) and only if permissions are granted:
+OnlyFollowingModulesAreOpenedToExternalUsers=Обратите внимание, что только следующие модули доступны для внешних пользователей (независимо от разрешений этих пользователей) и только при наличии разрешений:
SuhosinSessionEncrypt=Хранилище сессий шифровано системой SUHOSIN ConditionIsCurrently=Текущее состояние %s -YouUseBestDriver=You use driver %s which is the best driver currently available. -YouDoNotUseBestDriver=You use driver %s but driver %s is recommended. -NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization. +YouUseBestDriver=Вы используете драйвер %s, который является лучшим драйвером, доступным в настоящее время. +YouDoNotUseBestDriver=Вы используете драйвер %s, но рекомендуется драйвер %s. +NbOfProductIsLowerThanNoPb=У вас есть только %s товаров/услуг в базе данных. Это не требуебует никакой оптимизации. SearchOptim=Поисковая оптимизация -YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response. -BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance. -BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari. +YouHaveXProductUseSearchOptim=У вас есть продукты %s в базе данных. Вы должны добавить константу PRODUCT_DONOTSEARCH_ANYWHERE равную 1 в Главная-Настройки-Другие настройки. Ограничьте поиск началом строк, что позволяет базе данных использовать индексы, и вы будете получать быстрый ответ. +BrowserIsOK=Вы используете веб-браузер %s. Этот браузер подходит в отношении безопасности и производительности. +BrowserIsKO=Вы используете веб-браузер %s. Этот браузер, как известно, является плохим выбором по безопасности, производительности и надежности. Мы рекомендуем использовать Firefox, Chrome, Opera или Safari. XDebugInstalled=XDebug загружен. XCacheInstalled=XCache загружен. AddRefInList=Display Customer/Vendor ref. info list (select list or combobox) and most of hyperlink.
Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp". AddAdressInList=Display Customer/Vendor adress info list (select list or combobox)
Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp". -AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties. +AskForPreferredShippingMethod=Запросить предпочтительный способ доставки для контрагентов. FieldEdition=Редакция поля %s FillThisOnlyIfRequired=Например, +2 (заполняйте это поле только тогда, когда ваш часовой пояс отличается от того, который используется на сервере) GetBarCode=Получить штрих-код ##### Module password generation PasswordGenerationStandard=Возврат пароля, полученных в соответствии с внутренними Dolibarr алгоритма: 8 символов, содержащих общие цифры и символы в нижнем регистре. -PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually. +PasswordGenerationNone=Не предлагать сгенерированный пароль. Пароль должен быть введен вручную. PasswordGenerationPerso=Верните пароль в соответствии с вашей личной конфигурацией. SetupPerso=Согласно вашей конфигурации PasswordPatternDesc=Описание шаблона паролей ##### Users setup ##### -RuleForGeneratedPasswords=Rules to generate and validate passwords -DisableForgetPasswordLinkOnLogonPage=Do not show the "Password Forgotten" link on the Login page -UsersSetup=Пользователь модуля установки -UserMailRequired=Email required to create a new user +RuleForGeneratedPasswords=Правила генерации и проверки паролей +DisableForgetPasswordLinkOnLogonPage=Не показывать ссылку «Забыли пароль» на странице входа +UsersSetup=Настройка модуля пользователя +UserMailRequired=Требуется электронная почта для создания нового пользователя ##### HRM setup ##### -HRMSetup=Настройка модуля HRM +HRMSetup=Настройка модуля HRM (Отдела кадров) ##### Company setup ##### -CompanySetup=Предприятия модуль настройки -CompanyCodeChecker=Options for automatic generation of customer/vendor codes -AccountCodeManager=Options for automatic generation of customer/vendor accounting codes -NotificationsDesc=Email notifications can be sent automatically for some Dolibarr events.
Recipients of notifications can be defined: -NotificationsDescUser=* per user, one user at a time. -NotificationsDescContact=* per third-party contacts (customers or vendors), one contact at a time. -NotificationsDescGlobal=* or by setting global email addresses in this setup page. -ModelModules=Document Templates -DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...) -WatermarkOnDraft=Watermark по проекту документа +CompanySetup=Настройка модуля Компании +CompanyCodeChecker=Опции для автоматической генерации кодов клиентов/поставщиков +AccountCodeManager=Опции для автоматической генерации учетных кодов клиентов/поставщиков +NotificationsDesc=Уведомления по электронной почте могут быть отправлены автоматически для некоторых событий Dolibarr.
Получатели уведомлений могут быть определены: +NotificationsDescUser=* на пользователя, по одному пользователю за раз. +NotificationsDescContact=* на контрагента (клиенты или поставщики), по одному контакту за раз. +NotificationsDescGlobal=* или установив глобальные адреса электронной почты на этой странице настроек. +ModelModules=Шаблоны документов +DocumentModelOdt=Генерация документов из шаблонов OpenDocument (файлы .ODT / .ODS из LibreOffice, OpenOffice, KOffice, TextEdit, ...) +WatermarkOnDraft=Водяной знак в проекте документа JSOnPaimentBill=Активировать фунцию автозаполнения строк платежа в платёжной форме -CompanyIdProfChecker=Rules for Professional IDs +CompanyIdProfChecker=Правила для отраслевой идентификации MustBeUnique=Должно быть уникальным? -MustBeMandatory=Mandatory to create third parties (if VAT number or type of company defined) ? +MustBeMandatory=Обязательно ли создавать контрагентов (если указан номер НДС или тип компании)? MustBeInvoiceMandatory=Обязательно проверять счета-фактуры? TechnicalServicesProvided=Предоставляемые технические услуги #####DAV ##### -WebDAVSetupDesc=This is the link to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that needs an existing login account/password for access. -WebDavServer=Root URL of %s server: %s +WebDAVSetupDesc=Это ссылка для доступа к каталогу WebDAV. Он содержит «общедоступный» каталог, открытый для любого пользователя, знающего URL (если доступ к общедоступному каталогу разрешен), и «личный» каталог, которому для доступа требуется существующая учетная запись / пароль. +WebDavServer=Корневой URL-адрес сервера %s: %s ##### Webcal setup ##### WebCalUrlForVCalExport=Экспорт ссылка на %s формате доступна на следующую ссылку: %s ##### Invoices ##### -BillsSetup=Счета модуль настройки -BillsNumberingModule=Счета и кредитных нот нумерации модуль -BillsPDFModules=Счет документы моделей -BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type +BillsSetup=Настройка модуля Счетов +BillsNumberingModule=Модель нумерации счетов и кредитных нот +BillsPDFModules=Модели счетов-фактур +BillsPDFModulesAccordindToInvoiceType=Модели документов счета в соответствии с типом счета PaymentsPDFModules=Модели платежных документов -ForceInvoiceDate=Силы дата счета-фактуры для подтверждения даты -SuggestedPaymentModesIfNotDefinedInInvoice=Предлагаемые платежи на счета в режиме по умолчанию, если не определено в счете-фактуре -SuggestPaymentByRIBOnAccount=Suggest payment by withdrawal on account -SuggestPaymentByChequeToAddress=Suggest payment by check to -FreeLegalTextOnInvoices=Свободный текст о счетах-фактурах +ForceInvoiceDate=Принудительно приравнять дату выставления счета к дате проверки +SuggestedPaymentModesIfNotDefinedInInvoice=Предложенный способ оплаты по умолчанию, если иной не определен в счете +SuggestPaymentByRIBOnAccount=Предложить оплату выводом средств на счет +SuggestPaymentByChequeToAddress=Предложить оплату чеком на +FreeLegalTextOnInvoices=Свободный текст на счетах-фактурах WatermarkOnDraftInvoices=Водяные знаки на черновиках счетов-фактур ("Нет" если пусто) PaymentsNumberingModule=Модель нумерации платежей -SuppliersPayment=Vendor payments -SupplierPaymentSetup=Vendor payments setup +SuppliersPayment=Платежи поставщику +SupplierPaymentSetup=Настройка платежей поставщику ##### Proposals ##### -PropalSetup=Коммерческие предложения модуль настройки -ProposalsNumberingModules=Коммерческие предложения нумерации модулей -ProposalsPDFModules=Коммерческие предложения документы моделей -SuggestedPaymentModesIfNotDefinedInProposal=Suggested payments mode on proposal by default if not defined for proposal -FreeLegalTextOnProposal=Свободный текст на коммерческие предложения +PropalSetup=Настройка модуля Коммерческих предложений +ProposalsNumberingModules=Модели нумерации Коммерческих предложений +ProposalsPDFModules=Модели документов Коммерческого предложения +SuggestedPaymentModesIfNotDefinedInProposal=Предлагаемый способ оплаты по предложению по умолчанию, если иной не определено предложением +FreeLegalTextOnProposal=Свободный текст на Коммерческих предложениях WatermarkOnDraftProposal=Водяные знаки на черновиках Коммерческих предложений ("Нет" если пусто) BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL=Запрос банковского счёта для предложения ##### SupplierProposal ##### SupplierProposalSetup=Настройка модуля запросов цен поставщиков -SupplierProposalNumberingModules=Price requests suppliers numbering models -SupplierProposalPDFModules=Price requests suppliers documents models +SupplierProposalNumberingModules=Модели нумерации ценовых запросов поставщиков +SupplierProposalPDFModules=Модели документов ценовых запросов поставщиков FreeLegalTextOnSupplierProposal=Свободный текст на запросе цены у поставщиков WatermarkOnDraftSupplierProposal=Водяной знак на проекте запроса цены у поставщиков (нет знака, если пустое) BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_PROPOSAL=Запросите банковский счет назначения ценового запроса @@ -1299,22 +1302,22 @@ WAREHOUSE_ASK_WAREHOUSE_DURING_ORDER=Попросите источник скл ##### Suppliers Orders ##### BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_ORDER=Запросить адрес банковского счета для заказа на поставку ##### Orders ##### -OrdersSetup=Sales Orders management setup -OrdersNumberingModules=Приказы нумерации модулей +OrdersSetup=Настройка управления заказами на продажу +OrdersNumberingModules=Модели нумерации заказов OrdersModelModule=Заказ документов моделей -FreeLegalTextOnOrders=Свободный текст распоряжения +FreeLegalTextOnOrders=Свободный текст на Заказах WatermarkOnDraftOrders=Водяные знаки на черновиках Заказов ("Нет" если пусто) ShippableOrderIconInList=Добавьте значок в список заказов, который указывает, может ли заказ быть отправлен -BANK_ASK_PAYMENT_BANK_DURING_ORDER=Запросите адрес банковского счета для заказа +BANK_ASK_PAYMENT_BANK_DURING_ORDER=Запросить счет получателя заказа ##### Interventions ##### -InterventionsSetup=Выступления модуль настройки +InterventionsSetup=Настройка модуля вмешательств FreeLegalTextOnInterventions=Дополнительный текст на документах посредничества FicheinterNumberingModules=Вмешательство нумерации модулей TemplatePDFInterventions=Вмешательство карту документы моделей WatermarkOnDraftInterventionCards=Водяной знак на документах посредничества (нет если не задано) ##### Contracts ##### ContractsSetup=Настройка модуля Договоры/подписки -ContractsNumberingModules=Контракты нумерации модулей +ContractsNumberingModules=Модуль нумерации контрактов TemplatePDFContracts=Модели документов контрактов FreeLegalTextOnContracts=Дополнительный текст к доворам WatermarkOnDraftContractCards=Водяной знак на черновиках контрактов ("Нет" если пусто) @@ -1322,17 +1325,17 @@ WatermarkOnDraftContractCards=Водяной знак на черновиках MembersSetup=Настройка модуля участников MemberMainOptions=Основные настройки AdherentLoginRequired= Управление логином для каждого пользователя -AdherentMailRequired=Email required to create a new member +AdherentMailRequired=Требуется электронная почта для создания нового участника MemberSendInformationByMailByDefault=Чекбокс отправить по почте подтверждение членов по умолчанию -VisitorCanChooseItsPaymentMode=Visitor can choose from available payment modes -MEMBER_REMINDER_EMAIL=Enable automatic reminder by email of expired subscriptions. Note: Module %s must be enabled and correctly setup to send reminders. +VisitorCanChooseItsPaymentMode=Посетитель может выбрать один из доступных способов оплаты +MEMBER_REMINDER_EMAIL=Включить автоматическое напоминание по электронной почте о просроченных подписках. Примечание. Модуль %s должен быть включен и правильно настроен для отправки напоминаний. ##### LDAP setup ##### LDAPSetup=Установка LDAP LDAPGlobalParameters=Глобальные параметры LDAPUsersSynchro=Пользователи LDAPGroupsSynchro=Группы LDAPContactsSynchro=Контакты -LDAPMembersSynchro=Члены +LDAPMembersSynchro=Участники LDAPMembersTypesSynchro=Типы участников LDAPSynchronization=LDAP синхронизация LDAPFunctionsNotAvailableOnPHP=LDAP функции не availbale на PHP @@ -1347,7 +1350,7 @@ LDAPSynchronizeMembersTypes=Organization of foundation's members types in LDAP LDAPPrimaryServer=Первичный сервер LDAPSecondaryServer=Вторичный сервер LDAPServerPort=Порт сервера -LDAPServerPortExample=Default port: 389 +LDAPServerPortExample=Порт по умолчанию: 389 LDAPServerProtocolVersion=Версия протокола LDAPServerUseTLS=Использовать TLS LDAPServerUseTLSExample=Ваш LDAP сервер использования TLS @@ -1394,59 +1397,59 @@ LDAPTestSynchroMemberType=Тестирование синхронизации т LDAPTestSearch= Тестировать поиск LDAP LDAPSynchroOK=Синхронизация успешные испытания LDAPSynchroKO=Сбой синхронизации тест -LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates +LDAPSynchroKOMayBePermissions=Неудачный тест синхронизации. Проверьте, правильно ли настроено соединение с сервером и разрешены ли обновления LDAP LDAPTCPConnectOK=TCP connect to LDAP server successful (Server=%s, Port=TCP соединение с сервером LDAP успешного (Server= %s, Порт= %s) LDAPTCPConnectKO=TCP connect to LDAP server failed (Server=%s, Port=TCP соединение с сервером LDAP Failed (Server= %s, Порт= %s) -LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s) -LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s) +LDAPBindOK=Подключение / проверка подлинности при подключении к серверу LDAP прошла успешно (сервер = %s, порт = %s, Admin = %s, пароль = %s) +LDAPBindKO=Ошибка подключения / аутентификации на сервере LDAP (Server = %s, Port = %s, Admin = %s, Password = %s) LDAPSetupForVersion3=LDAP-сервер настроен для версии 3 LDAPSetupForVersion2=LDAP-сервер настроен для версии 2 LDAPDolibarrMapping=Dolibarr Картирование LDAPLdapMapping=LDAP Картирование LDAPFieldLoginUnix=Логин (Unix) -LDAPFieldLoginExample=Example: uid +LDAPFieldLoginExample=Пример: UID LDAPFilterConnection=Фильтр поиска -LDAPFilterConnectionExample=Example: &(objectClass=inetOrgPerson) +LDAPFilterConnectionExample=Пример: &(objectClass=inetOrgPerson) LDAPFieldLoginSamba=Логин (самба, activedirectory) -LDAPFieldLoginSambaExample=Example: samaccountname +LDAPFieldLoginSambaExample=Пример: samaccountname LDAPFieldFullname=Фамилия Имя -LDAPFieldFullnameExample=Example: cn -LDAPFieldPasswordNotCrypted=Password not encrypted -LDAPFieldPasswordCrypted=Password encrypted -LDAPFieldPasswordExample=Example: userPassword -LDAPFieldCommonNameExample=Example: cn +LDAPFieldFullnameExample=Пример: cn +LDAPFieldPasswordNotCrypted=Пароль не зашифрован +LDAPFieldPasswordCrypted=Пароль зашифрован +LDAPFieldPasswordExample=Пример: userPassword +LDAPFieldCommonNameExample=Пример: cn LDAPFieldName=Имя -LDAPFieldNameExample=Example: sn +LDAPFieldNameExample=Пример: sn LDAPFieldFirstName=Имя -LDAPFieldFirstNameExample=Example: givenName +LDAPFieldFirstNameExample=Пример: данноеимя LDAPFieldMail=Адрес электронной почты -LDAPFieldMailExample=Example: mail +LDAPFieldMailExample=Пример: почта LDAPFieldPhone=Профессиональные телефонные номера -LDAPFieldPhoneExample=Example: telephonenumber +LDAPFieldPhoneExample=Пример: телефонныйномер LDAPFieldHomePhone=Личный номер телефона -LDAPFieldHomePhoneExample=Example: homephone +LDAPFieldHomePhoneExample=Пример: домашнийтелефон LDAPFieldMobile=Сотовый телефон -LDAPFieldMobileExample=Example: mobile +LDAPFieldMobileExample=Пример: мобильныйтелефон LDAPFieldFax=Номер факса -LDAPFieldFaxExample=Example: facsimiletelephonenumber +LDAPFieldFaxExample=Пример: факсимильныйномертелефона LDAPFieldAddress=Улица -LDAPFieldAddressExample=Example: street +LDAPFieldAddressExample=Пример: улица LDAPFieldZip=Zip -LDAPFieldZipExample=Example: postalcode +LDAPFieldZipExample=Пример: почтовыйиндекс LDAPFieldTown=Город -LDAPFieldTownExample=Example: l +LDAPFieldTownExample=Пример: л LDAPFieldCountry=Страна LDAPFieldDescription=Описание -LDAPFieldDescriptionExample=Example: description +LDAPFieldDescriptionExample=Пример: описание LDAPFieldNotePublic=Общая записка -LDAPFieldNotePublicExample=Example: publicnote +LDAPFieldNotePublicExample=Пример: публичнаязаметка LDAPFieldGroupMembers= Члены группы -LDAPFieldGroupMembersExample= Example: uniqueMember +LDAPFieldGroupMembersExample= Пример: uniqueMember LDAPFieldBirthdate=Дата рождения LDAPFieldCompany=Компания -LDAPFieldCompanyExample=Example: o +LDAPFieldCompanyExample=Пример: o LDAPFieldSid=SID -LDAPFieldSidExample=Example: objectsid +LDAPFieldSidExample=Пример: objectsid LDAPFieldEndLastSubscription=Дата окончания подписки LDAPFieldTitle=Должность LDAPFieldTitleExample=Например, заголовок @@ -1460,40 +1463,40 @@ LDAPDescMembersTypes=На этой странице вы можете опред LDAPDescValues=Пример значения для OpenLDAP с загружены следующие схемы: core.schema, cosine.schema, inetorgperson.schema). Если вы используете thoose ценности и OpenLDAP, модифицировать LDAP конфигурационный файл slapd.conf, чтобы все thoose схемы загрузки. ForANonAnonymousAccess=Для аутентифицированных доступа (для записи, например) PerfDolibarr=Настройки производительности/отчёты о оптимизации -YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance. -NotInstalled=Not installed, so your server is not slowed down by this. +YouMayFindPerfAdviceHere=Эта страница содержит некоторые проверки или советы, связанные с производительностью. +NotInstalled=Не установлен, поэтому ваш сервер от этого не замедлится. ApplicativeCache=Прикладной кеш -MemcachedNotAvailable=Не найдено аддитивного кэша. Вы можете повысить производительность, установив кэш-сервер Memcached и модуль, способный использовать этот сервер кеша.
Более подробная информация здесь. http: //wiki.dolibarr.org/index.php/Module_MemCached_EN.
. Заметьте, что многие веб-хостинг-провайдеры не предоставляют такой сервер кеша. +MemcachedNotAvailable=Аппликативный кеш не найден. Вы можете повысить производительность, установив кеш-сервер Memcached и модуль, способный использовать этот кеш-сервер.
Более подробная информация здесь http://wiki.dolibarr.org/index.php/Module_MemCached_EN .
Обратите внимание, что многие веб-хостинг-провайдеры не предоставляют такой кеш-сервер. MemcachedModuleAvailableButNotSetup=Модуль memcached для прикладного кэша найден, но настройка модуля не завершена. MemcachedAvailableAndSetup=Включен модуль memcached, предназначенный для использования сервера memcached. OPCodeCache=Кэш OPCode -NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad). +NoOPCodeCacheFound=Кэш OPCode не найден. Возможно, вы используете кэш OPCode, отличный от XCache или eAccelerator (хорошо), или, возможно, у вас нет кэша OPCode (очень плохо). HTTPCacheStaticResources=Кеш HTTP для статичных ресурсов (файлы стилей, изображений, скриптов) FilesOfTypeCached=Файлы типа %s кешируются HTTP сервером FilesOfTypeNotCached=Файлы типа %s не кешируются HTTP сервером FilesOfTypeCompressed=Файлы типа %s сжимаются HTTP сервером FilesOfTypeNotCompressed=Файлы типа %s сжимаются не HTTP сервером CacheByServer=Кэшируется сервером -CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000" +CacheByServerDesc=Например, используя директиву Apache "ExpiresByType image/gif A2592000" CacheByClient=Кэшируется браузером CompressionOfResources=Сжатие HTTP заголовков -CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE" +CompressionOfResourcesDesc=Например, используя директиву Apache "AddOutputFilterByType DEFLATE" TestNotPossibleWithCurrentBrowsers=Такое автоматическое обнаружение невозможно с текущими браузерами -DefaultValuesDesc=Here you may define the default value you wish to use when creating a new record, and/or default filters or the sort order when you list records. -DefaultCreateForm=Default values (to use on forms) +DefaultValuesDesc=Здесь вы можете определить значение по умолчанию, которое вы хотите использовать при создании новой записи, и/или фильтры по умолчанию или порядок сортировки при перечислении записей. +DefaultCreateForm=Значения по умолчанию (для использования в формах) DefaultSearchFilters=Фильтры поиска по умолчанию DefaultSortOrder=Заказы сортировки по умолчанию DefaultFocus=Поля фокусировки по умолчанию -DefaultMandatory=Mandatory form fields +DefaultMandatory=Обязательные поля формы ##### Products ##### -ProductSetup=Продукты модуль настройки -ServiceSetup=Услуги установки модуля -ProductServiceSetup=Продукты и услуги установки модулей -NumberOfProductShowInSelect=Maximum number of products to show in combo select lists (0=no limit) -ViewProductDescInFormAbility=Display product descriptions in forms (otherwise shown in a tooltip popup) +ProductSetup=Настройка модуля Продуктов +ServiceSetup=Настройка модуля Услуг +ProductServiceSetup=Настройка модулей Продуктов и Услуг +NumberOfProductShowInSelect=Максимальное количество товаров для отображения в комбинированных списках выбора (0 = без ограничений) +ViewProductDescInFormAbility=Отображать описания продуктов в формах (в противном случае отображается во всплывающей подсказке) MergePropalProductCard=Активировать в продукте/услуге Вложенные файлы вставить опцию объединить PDF-документ продукта в предложение PDF azur, если продукт/услуга находится в предложении -ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party -UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string. +ViewProductDescInThirdpartyLanguageAbility=Отображать описания продуктов на языке контрагентов +UseSearchToSelectProductTooltip=Также, если у вас есть большое количество продуктов (> 100 000), вы можете увеличить скорость, установив постоянное значение PRODUCT_DONOTSEARCH_ANYWHERE равное 1 в меню «Настройка» - «Другие настройки». Поиск будет ограничен началом строки. UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient) SetDefaultBarcodeTypeProducts=Стандартный вид штрих-кода, используемого для продуктов SetDefaultBarcodeTypeThirdParties=Стандартный вид штрих-кода, используемого для третьих сторон @@ -1502,7 +1505,7 @@ ProductCodeChecker= Модуль для генерации кода продук ProductOtherConf= Конфигурация Товаров / Услуг IsNotADir=Не является каталогом! ##### Syslog ##### -SyslogSetup=Настройка модуля системного журнала +SyslogSetup=Настройка модуля Системного журнала SyslogOutput=Вход выходных SyslogFacility=Фонд SyslogLevel=Уровень @@ -1514,14 +1517,14 @@ CompressSyslogs=Сжатие и резервное копирование фай SyslogFileNumberOfSaves=Журнал резервных копий ConfigureCleaningCronjobToSetFrequencyOfSaves=Настроить очистку запланированного задания для установки частоты резервного копирования журнала ##### Donations ##### -DonationsSetup=Пожертвования модуль настройки +DonationsSetup=Настройка модуля Пожертвования DonationsReceiptModel=Шаблон дарения получения ##### Barcode ##### -BarcodeSetup=Штрих-код установки -PaperFormatModule=Версия для печати формата модуля -BarcodeEncodeModule=Штрих-кодирование типа -CodeBarGenerator=Штрих-код генератор -ChooseABarCode=Нет генератором определена +BarcodeSetup=Настройка штрих-кода +PaperFormatModule=Модуль Формата печати +BarcodeEncodeModule=Тип кодировки штрих-кода +CodeBarGenerator=Генератор штрих-кода +ChooseABarCode=Генератор не определен FormatNotSupportedByGenerator=Формат не поддерживается этим генератором BarcodeDescEAN8=Штрих-код типа EAN8 BarcodeDescEAN13=Штрих-код типа EAN13 @@ -1535,31 +1538,31 @@ GenbarcodeLocation=Путь для запуска к утилите генера BarcodeInternalEngine=Внутренние средства управления BarCodeNumberManager=Менеджер для автоматического определения номеров штрих-кода ##### Prelevements ##### -WithdrawalsSetup=Setup of module Direct Debit payments +WithdrawalsSetup=Настройка модуля платежей с прямым дебетированием ##### ExternalRSS ##### -ExternalRSSSetup=Внешние RSS импорт установки +ExternalRSSSetup=Настройка внешнего импорта RSS NewRSS=Новые RSS Feed RSSUrl=Ссылка RSS RSSUrlExample=Интересные RSS-ленты ##### Mailing ##### -MailingSetup=Отправка модуля настройки -MailingEMailFrom=Sender email (From) for emails sent by emailing module +MailingSetup=Настройка почтового модуля +MailingEMailFrom=Модуль Адресанта (от кого) для отправки писем по электронной почте MailingEMailError=Return Email (Errors-to) for emails with errors MailingDelay=Время ожидания в секундах перед отправкой следующего сообщения ##### Notification ##### -NotificationSetup=Email Notification module setup -NotificationEMailFrom=Sender email (From) for emails sent by the Notifications module +NotificationSetup=Настройка модуля Уведомления по электронной почте +NotificationEMailFrom=Электронная почта отправителя (От кого) для писем, отправленных модулем Уведомлений FixedEmailTarget=Получатель ##### Sendings ##### -SendingsSetup=Shipping module setup -SendingsReceiptModel=Отправка получения модели -SendingsNumberingModules=Отправки нумерации модулей -SendingsAbility=Поддержка листов доставки для доставки клиентов +SendingsSetup=Настройка модуля доставки +SendingsReceiptModel=Модель отправки квитанции +SendingsNumberingModules=Модули нумерации отправлений +SendingsAbility=Поддержка накладных для доставки клиенту NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated. FreeLegalTextOnShippings=Дополнительный текст для поставок ##### Deliveries ##### -DeliveryOrderNumberingModules=Продукция Поставки получения нумерации модуль -DeliveryOrderModel=Продукция Поставки получения модели +DeliveryOrderNumberingModules=Модуль нумерации чеков поставки продукции +DeliveryOrderModel=Шаблон бланка товарного чека DeliveriesOrderAbility=Поддержка продуктов, поставки квитанции FreeLegalTextOnDeliveryReceipts=Бесплатная доставка по тексту квитанции ##### FCKeditor ##### @@ -1573,27 +1576,27 @@ FCKeditorForUserSignature=Редактор WYSIWIG для создания/из FCKeditorForMail=WYSIWIG создание/издание для всей почты (кроме Tools-> eMailing) ##### Stock ##### StockSetup=Настройка модуля запаса -IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup. +IfYouUsePointOfSaleCheckModule=Если вы используете модуль торговой точки (POS), предоставленный по умолчанию, или внешний модуль, эта установка может быть проигнорирована вашим модулем POS. Большинство POS-модулей по умолчанию предназначены для немедленного создания счета-фактуры и уменьшения складских запасов независимо от имеющихся здесь опций. Поэтому, если вам нужно или не нужно уменьшать запас при регистрации продажи в вашем POS, проверьте также настройку вашего POS-модуля. ##### Menu ##### MenuDeleted=Удаленное Меню Menus=Меню TreeMenuPersonalized=Персонализированная меню -NotTopTreeMenuPersonalized=Персонализированные меню, не связанные с верхним меню ввода +NotTopTreeMenuPersonalized=Персонализированные меню, не связанные с пунктом верхнего меню NewMenu=Новое меню Menu=Выбор меню MenuHandler=Меню обработчик -MenuModule=Источник модуль +MenuModule=Исходный модуль HideUnauthorizedMenu= Скрыть несанкционированного меню (серый) DetailId=Идентификатор меню -DetailMenuHandler=Меню обработчик где показывать новое меню -DetailMenuModule=Имя модуля, если меня из модуля +DetailMenuHandler=Обработчик меню, где показывать новое меню +DetailMenuModule=Имя модуля, если пункт меню взят из модуля DetailType=Тип меню (вверху или слева) DetailTitre=Меню ярлык или этикетку код для перевода -DetailUrl=URL, где меня отправить вам (абсолютный URL ссылку или внешние ссылки с http://) -DetailEnabled=Условие, чтобы показать или не вступления +DetailUrl=URL-адрес, по которому вам отправляется меню (абсолютная ссылка или внешняя ссылка с http: //) +DetailEnabled=Условие показать или нет запись DetailRight=Условие для отображения несанкционированным серого меню -DetailLangs=Ланг имя ярлыка код перевода -DetailUser=Стажер / Extern / Все +DetailLangs=Имя файла Lang для перевода кода метки +DetailUser=Стажер / Внештатный / Все Target=Цель DetailTarget=Target for links (_blank top opens a new window) DetailLevel=Уровень (-1: верхнее меню, 0: заголовок меню> 0 меню и подменю) @@ -1602,7 +1605,7 @@ DeleteMenu=Удалить меню ConfirmDeleteMenu=Вы действительно хотите удалить запись меню %s? FailedToInitializeMenu=Не удалось инициализировать меню ##### Tax ##### -TaxSetup=Налоги, социальные или налоговые налоги и установка модулей дивидендов +TaxSetup=Настройка модуля НДС, социальные или налоговые сборов и дивидендов OptionVatMode=НДС к оплате OptionVATDefault=Стандартная основа OptionVATDebitOption=Принцип начисления @@ -1619,12 +1622,12 @@ SupposedToBeInvoiceDate=Счет дата, используемая Buy=Покупать Sell=Продавать InvoiceDateUsed=Счет дата, используемая -YourCompanyDoesNotUseVAT=В вашей компании определено, что вы не используете НДС (Home - Setup - Company / Organization), поэтому для настройки нет параметров НДС. -AccountancyCode=Учетный код +YourCompanyDoesNotUseVAT=В вашей компании определено, что вы не используете НДС (Главная - Настройки - Компания/Организация), поэтому для настройки нет параметров НДС. +AccountancyCode=Бухгалтерский код AccountancyCodeSell=Бух. код продаж AccountancyCodeBuy=Бух. код покупок ##### Agenda ##### -AgendaSetup=Акции и повестки модуль настройки +AgendaSetup=Настройка модуля событий и повестки дня PasswordTogetVCalExport=Ключевые разрешить экспорт ссылке PastDelayVCalExport=Не экспортировать события старше AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events) @@ -1637,26 +1640,26 @@ AGENDA_REMINDER_BROWSER=Enable event reminder on user's browser (when eve AGENDA_REMINDER_BROWSER_SOUND=Включить звуковое оповещение AGENDA_SHOW_LINKED_OBJECT=Показывать связанный объект в представлении повестки дня ##### Clicktodial ##### -ClickToDialSetup=Нажмите для набора модуля настройки +ClickToDialSetup=Настройка модуля Click To Dial ClickToDialUrlDesc=Url звонившего, когда клик по пиктограмме телефона сделан. В URL-адресе вы можете использовать теги
__PHONETO__, которые будут заменены на номер телефона человека для вызова
__PHONEFROM__, который будет заменен номером телефона вызывающего абонента (вашего)
__LOGIN__, который будет заменен на clicktodial login (определенном на карточке пользователя)
__PASS__, который будет заменен кликтодиальным паролем (определяется на карточке пользователя). -ClickToDialDesc=This module makea phone numbers clickable links. A click on the icon will make your phone call the number. This can be used to call a call-center system from Dolibarr that can call the phone number on a SIP system for example. +ClickToDialDesc=Этот модуль делает номера телефонов кликабельными ссылками. Нажатие на значок заставит ваш телефонный номер позвонить. Это можно использовать для вызова системы call-центра из Dolibarr, которая может, например, позвонить по номеру телефона в системе SIP. ClickToDialUseTelLink=Используйте только ссылку «tel:» на номера телефонов 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. ##### Point Of Sale (CashDesk) ##### CashDesk=Point of Sale -CashDeskSetup=Point of Sales module setup +CashDeskSetup=Настройка модуля «Точка продаж» CashDeskThirdPartyForSell=Default generic third party to use for sales CashDeskBankAccountForSell=Денежные счета, используемого для продает CashDeskBankAccountForCheque= Default account to use to receive payments by check CashDeskBankAccountForCB= Учетной записи для использования на получение денежных выплат по кредитным картам -CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock). +CashDeskDoNotDecreaseStock=Отключить уменьшение запаса, когда продажа осуществляется из торговой точки (если «нет», уменьшение запаса производится для каждой продажи, совершаемой из POS, независимо от опции, установленной в модуле Запас). CashDeskIdWareHouse=Ускорить и ограничить склад для уменьшения запасов StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled -StockDecreaseForPointOfSaleDisabledbyBatch=Stock decrease in POS is not compatible with module Serial/Lot management (currently active) so stock decrease is disabled. +StockDecreaseForPointOfSaleDisabledbyBatch=Уменьшение запаса в POS не совместимо с модулем Управление сериями/партиями (в настоящее время активно), поэтому уменьшение запаса отключено CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required. ##### Bookmark ##### -BookmarkSetup=Закладка Настройка модуля -BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu. +BookmarkSetup=Настройка модуля Закладки +BookmarkDesc=Этот модуль позволяет вам управлять закладками. Вы также можете добавить ярлыки на любые страницы Dolibarr или внешние веб-сайты в левом меню. NbOfBoomarkToShow=Максимальное количество закладок, отображаемых в меню слева ##### WebServices ##### WebServicesSetup=Webservices модуль настройки @@ -1670,42 +1673,42 @@ ApiProductionMode=Включить режим производства (это ApiExporerIs=Вы можете исследовать и тестировать API по URL-адресу OnlyActiveElementsAreExposed=Выделяются только элементы из разрешенных модулей ApiKey=Ключ для API -WarningAPIExplorerDisabled=Исследователь API отключен. API-интерфейс API не требуется для предоставления услуг API. Это инструмент для разработчика для поиска/тестирования API REST. Если вам нужен этот инструмент, перейдите в настройку модуля API REST, чтобы активировать его. +WarningAPIExplorerDisabled=Проводник API отключен. Обозреватель API не обязан предоставлять службы API. Это инструмент для разработчика, чтобы найти / протестировать REST API. Если вам нужен этот инструмент, зайдите в настройку модуля API REST, чтобы активировать его. ##### Bank ##### -BankSetupModule=Банк модуль настройки +BankSetupModule=Настройка Банковского модуля FreeLegalTextOnChequeReceipts=Free text on check receipts -BankOrderShow=Порядок отображения банковских счетов для стран, использующих "подробную номер банковского" +BankOrderShow=Порядок отображения банковских счетов для стран, использующих «подробный номер банка» BankOrderGlobal=Общий BankOrderGlobalDesc=Генеральный порядок отображения BankOrderES=Испанский BankOrderESDesc=Испанская порядок отображения -ChequeReceiptsNumberingModule=Check Receipts Numbering Module +ChequeReceiptsNumberingModule=Модуль Проверки чеков ##### Multicompany ##### -MultiCompanySetup=Компания Multi-модуль настройки +MultiCompanySetup=Настройка модуля Корпорация ##### Suppliers ##### -SuppliersSetup=Vendor module setup +SuppliersSetup=Настройка модуля Поставщика SuppliersCommandModel=Complete template of purchase order (logo...) SuppliersInvoiceModel=Полный шаблон счета-фактуры поставщика (логотип ...) SuppliersInvoiceNumberingModel=Vendor invoices numbering models IfSetToYesDontForgetPermission=Если установлено "Да", не забудьте дать доступ группам или пользователям, разрешённым для повторного утверждения ##### GeoIPMaxmind ##### -GeoIPMaxmindSetup=GeoIP MaxMind модуля установки +GeoIPMaxmindSetup=Настройка модуля GeoIP Maxmind PathToGeoIPMaxmindCountryDataFile=Путь к файлу Maxmind, который требуется для геолокации.
Например,
/usr/local/share/GeoIP/GeoIP.dat
/usr/share/GeoIP/GeoIP.dat NoteOnPathLocation=Обратите внимание, что Ваш IP, чтобы страны файл данных должен быть в директории вашего PHP может читать (Проверьте ваши установки PHP open_basedir и файловой системы разрешений). YouCanDownloadFreeDatFileTo=Вы можете скачать бесплатную демонстрационную версию страны GeoIP MaxMind файл на %s. YouCanDownloadAdvancedDatFileTo=Вы также можете скачать более полную версию, с обновлениями, в стране GeoIP MaxMind файл на %s. TestGeoIPResult=Испытание преобразование IP -> страны ##### Projects ##### -ProjectsNumberingModules=Проекты нумерации модуль -ProjectsSetup=Проект модуля установки -ProjectsModelModule=доклад документ проекта модели +ProjectsNumberingModules=Модуль нумерации проектов +ProjectsSetup=Настройка модуля проекта +ProjectsModelModule=Модель отчета по проекту TasksNumberingModules=Модуль нумерации Задач TaskModelModule=Документы с отчетами о задачах UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.
This may improve performance if you have a large number of projects, but it is less convenient. ##### ECM (GED) ##### ##### Fiscal Year ##### -AccountingPeriods=Сроки учета -AccountingPeriodCard=Период учета +AccountingPeriods=Учетные периоды +AccountingPeriodCard=Отчетный период NewFiscalYear=Новый отчетный период OpenFiscalYear=Открытый отчетный период CloseFiscalYear=Закрытый отчетный период @@ -1719,7 +1722,7 @@ NbNumMin=Минимальное количество цифр NbSpeMin=Минимальное количество специальных символов NbIteConsecutive=Максимальное количество повторяющихся повторяющихся одинаковых символов NoAmbiCaracAutoGeneration=Не используйте похожие символы ("1","l","i","|","0","O") для автоматической генерации -SalariesSetup=Настройка зарплатного модуля +SalariesSetup=Настройка модуля Зарплаты SortOrder=Порядок сортировки Format=Формат TypePaymentDesc=0:Customer payment type, 1:Vendor payment type, 2:Both customers and suppliers payment type @@ -1730,7 +1733,7 @@ ExpenseReportsIkSetup=Настройка модуля Отчеты о расхо ExpenseReportsRulesSetup=Настройка модуля Отчеты о расходах - Правила ExpenseReportNumberingModules=Модуль нумерации отчетов о расходах NoModueToManageStockIncrease=Был активирован модуль, способный управлять автоматическим увеличением запасов. Увеличение запасов будет производиться только вручную. -YouMayFindNotificationsFeaturesIntoModuleNotification=You may find options for email notifications by enabling and configuring the module "Notification". +YouMayFindNotificationsFeaturesIntoModuleNotification=Вы можете найти опции для уведомлений по электронной почте, включив и настроив модуль «Уведомления». ListOfNotificationsPerUser=Список уведомлений на пользователя * ListOfNotificationsPerUserOrContact=List of notifications (events) available per user* or per contact** ListOfFixedNotifications=List of Fixed Notifications @@ -1778,7 +1781,7 @@ ExpectedChecksum=Ожидаемая контрольная сумма CurrentChecksum=Текущая контрольная сумма ForcedConstants=Требуемые постоянные значения MailToSendProposal=Предложения клиенту -MailToSendOrder=Sales orders +MailToSendOrder=Заказы на продажу MailToSendInvoice=Счета клиента MailToSendShipment=Отгрузки MailToSendIntervention=Проектные работы @@ -1821,22 +1824,22 @@ AddSubstitutions=Добавить замены клавиш DetectionNotPossible=Обнаружение невозможно UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call) ListOfAvailableAPIs=Список доступных API -activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise +activateModuleDependNotSatisfied=Модуль "%s" зависит от модуля "%s", который отсутствует, поэтому модуль "%1$s" может работать неправильно. Пожалуйста, установите модуль "%2$s" или отключите модуль "%1$s", если вы хотите быть в безопасности от неожиданностей CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter $dolibarr_main_restrict_os_commands in the conf.php file. LandingPage=Целевая страница -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments +SamePriceAlsoForSharedCompanies=Если вы используете модуль мультикомпания с выбором «Единая цена», цена также будет одинаковой для всех компаний, если продукты распределены между окружениями. ModuleEnabledAdminMustCheckRights=Модуль активирован. Разрешения для активированного модуля (модулей) были предоставлены только администраторам. Возможно, вам потребуется предоставить разрешения другим пользователям или группам вручную, если это необходимо. UserHasNoPermissions=This user has no permissions defined TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")
Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)
Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s") BaseCurrency=Справочная валюта компании (перейдите в настройку компании, чтобы изменить это) -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016). -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated. -WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software. +WarningNoteModuleInvoiceForFrenchLaw=Этот модуль %s соответствует французским законам (Loi Finance 2016). +WarningNoteModulePOSForFrenchLaw=Этот модуль %s соответствует французским законам (Loi Finance 2016), поскольку модуль необратимых журналов активируется автоматически. +WarningInstallationMayBecomeNotCompliantWithLaw=Вы пытаетесь установить модуль %s, который является внешним модулем. Активация внешнего модуля означает, что вы доверяете издателю этого модуля и уверены, что этот модуль не оказывает негативного влияния на поведение вашего приложения и соответствует законодательству вашей страны (%s). Если модуль вводит незаконную функцию, вы несете ответственность за использование нелегального программного обеспечения. MAIN_PDF_MARGIN_LEFT=Левый отступ в PDF MAIN_PDF_MARGIN_RIGHT=Правый отступ PDF MAIN_PDF_MARGIN_TOP=Верхний отступ PDF MAIN_PDF_MARGIN_BOTTOM=Нижний отступ PDF -NothingToSetup=There is no specific setup required for this module. +NothingToSetup=Для этого модуля не требуется никаких специальных настроек. SetToYesIfGroupIsComputationOfOtherGroups=Установите для этого значение yes, если эта группа является вычислением других групп EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2') SeveralLangugeVariatFound=Было найдено несколько вариантов языка @@ -1848,9 +1851,9 @@ HelpOnTooltip=Help text to show on tooltip HelpOnTooltipDesc=Put text or a translation key here for the text to show in a tooltip when this field appears in a form YouCanDeleteFileOnServerWith=You can delete this file on the server with Command Line:
%s ChartLoaded=Chart of account loaded -SocialNetworkSetup=Setup of module Social Networks +SocialNetworkSetup=Настройка модуля Социальные сети EnableFeatureFor=Enable features for %s -VATIsUsedIsOff=Note: The option to use Sales Tax or VAT has been set to Off in the menu %s - %s, so Sales tax or Vat used will always be 0 for sales. +VATIsUsedIsOff=Примечание: В меню %s - %s для параметра «Использовать налог с продаж или НДС» было установлено значение Выкл. , поэтому для продаж всегда используется 0 налога с продаж или НДС. SwapSenderAndRecipientOnPDF=Swap sender and recipient address position on PDF documents FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields 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. EmailCollector=Email collector @@ -1886,7 +1889,7 @@ ECMAutoTree=Show automatic ECM tree OperationParamDesc=Define values to use for action, or how to extract values. For example:
objproperty1=SET:abc
objproperty1=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:abc
objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)
options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. OpeningHours=Opening hours OpeningHoursDesc=Enter here the regular opening hours of your company. -ResourceSetup=Configuration of Resource module +ResourceSetup=Конфигурация модуля Ресурсов UseSearchToSelectResource=Используйте форму поиска, чтобы выбрать ресурс (а не раскрывающийся список). DisabledResourceLinkUser=Отключить функцию привязки ресурса к пользователям DisabledResourceLinkContact=Отключить функцию привязки ресурса к контактам @@ -1897,7 +1900,7 @@ MAIN_OPTIMIZEFORTEXTBROWSER=Simplify interface for blind person MAIN_OPTIMIZEFORTEXTBROWSERDesc=Enable this option if you are a blind person, or if you use the application from a text browser like Lynx or Links. ThisValueCanOverwrittenOnUserLevel=This value can be overwritten by each user from its user page - tab '%s' DefaultCustomerType=Default thirdparty type for "New customer" creation form -ABankAccountMustBeDefinedOnPaymentModeSetup=Note: The bank account must be defined on the module of each payment mode (Paypal, Stripe, ...) to have this feature working. +ABankAccountMustBeDefinedOnPaymentModeSetup=Примечание. Банковский счет должен быть указан в модуле каждого способа оплаты (Paypal, Stripe, ...), чтобы эта функция работала. RootCategoryForProductsToSell=Root category of products to sell RootCategoryForProductsToSellDesc=If defined, only products inside this category or childs of this category will be available in the Point Of Sale DebugBar=Debug Bar @@ -1908,7 +1911,7 @@ LogsLinesNumber=Number of lines to show on logs tab UseDebugBar=Use the debug bar DEBUGBAR_LOGS_LINES_NUMBER=Number of last log lines to keep in console WarningValueHigherSlowsDramaticalyOutput=Warning, higher values slows dramaticaly output -DebugBarModuleActivated=Module debugbar is activated and slows dramaticaly the interface +DebugBarModuleActivated=Модуль отладки активируется и резко замедляет интерфейс EXPORTS_SHARE_MODELS=Export models are share with everybody ExportSetup=Setup of module Export InstanceUniqueID=Unique ID of the instance @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/ru_RU/bills.lang b/htdocs/langs/ru_RU/bills.lang index 9d8cac3c0a1..eedacc9143d 100644 --- a/htdocs/langs/ru_RU/bills.lang +++ b/htdocs/langs/ru_RU/bills.lang @@ -20,12 +20,12 @@ InvoiceStandardDesc=Такой вид счёта является общим. InvoiceDeposit=Down payment invoice InvoiceDepositAsk=Down payment invoice InvoiceDepositDesc=This kind of invoice is done when a down payment has been received. -InvoiceProForma=Формальный счёт +InvoiceProForma=Предварительный счет InvoiceProFormaAsk=Формальный счёт InvoiceProFormaDesc=Формальный счёт является образом оригинального счёта, но не имеет бухгалтерской учетной записи. InvoiceReplacement=Замена счета-фактуры InvoiceReplacementAsk=Замена счета-фактуры на другой -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Кредитовое авизо InvoiceAvoirAsk=Кредитовое авизо для исправления счета-фактуры InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). @@ -70,7 +70,7 @@ ConfirmConvertToReduc=Do you want to convert this %s into an absolute discount? ConfirmConvertToReduc2=The amount will be saved among all discounts and could be used as a discount for a current or a future invoice for this customer. ConfirmConvertToReducSupplier=Do you want to convert this %s into an absolute discount? ConfirmConvertToReducSupplier2=The amount will be saved among all discounts and could be used as a discount for a current or a future invoice for this vendor. -SupplierPayments=Vendor payments +SupplierPayments=Платежи поставщику ReceivedPayments=Полученные платежи ReceivedCustomersPayments=Платежи, полученные от покупателей PayedSuppliersPayments=Payments paid to vendors @@ -88,8 +88,8 @@ CodePaymentMode=Payment Type (code) LabelPaymentMode=Payment Type (label) PaymentModeShort=Payment Type PaymentTerm=Payment Term -PaymentConditions=Payment Terms -PaymentConditionsShort=Payment Terms +PaymentConditions=Условия оплаты +PaymentConditionsShort=Условия оплаты PaymentAmount=Сумма платежа PaymentHigherThanReminderToPay=Платеж больше, чем в напоминании об оплате HelpPaymentHigherThanReminderToPay=Attention, the payment amount of one or more bills is higher than the outstanding amount to pay.
Edit your entry, otherwise confirm and consider creating a credit note for the excess received for each overpaid invoice. diff --git a/htdocs/langs/ru_RU/blockedlog.lang b/htdocs/langs/ru_RU/blockedlog.lang index 22383133f41..25d4540bff2 100644 --- a/htdocs/langs/ru_RU/blockedlog.lang +++ b/htdocs/langs/ru_RU/blockedlog.lang @@ -1,36 +1,36 @@ -BlockedLog=Unalterable Logs +BlockedLog=Неизменяемые логи Field=Поле BlockedLogDesc=This module tracks some events into an unalterable log (that you can't modify once recorded) into a block chain, in real time. This module provides compatibility with requirements of laws of some countries (like France with the law Finance 2016 - Norme NF525). Fingerprints=Archived events and fingerprints FingerprintsDesc=This is the tool to browse or extract the unalterable logs. Unalterable logs are generated and archived locally into a dedicated table, in real time when you record a business event. You can use this tool to export this archive and save it into an external support (some countries, like France, ask that you do it every year). Note that, there is no feature to purge this log and every change tried to be done directly into this log (by a hacker for example) will be reported with a non-valid fingerprint. If you really need to purge this table because you used your application for a demo/test purpose and want to clean your data to start your production, you can ask your reseller or integrator to reset your database (all your data will be removed). CompanyInitialKey=Company initial key (hash of genesis block) BrowseBlockedLog=Unalterable logs -ShowAllFingerPrintsMightBeTooLong=Show all archived logs (might be long) -ShowAllFingerPrintsErrorsMightBeTooLong=Show all non-valid archive logs (might be long) +ShowAllFingerPrintsMightBeTooLong=Показать все архивные логи (может быть долго) +ShowAllFingerPrintsErrorsMightBeTooLong=Показать все недействительные архивные логи (может быть долго) DownloadBlockChain=Download fingerprints -KoCheckFingerprintValidity=Archived log entry is not valid. It means someone (a hacker?) has modified some data of this re after it was recorded, or has erased the previous archived record (check that line with previous # exists). -OkCheckFingerprintValidity=Archived log record is valid. The data on this line was not modified and the entry follows the previous one. +KoCheckFingerprintValidity=Архивные записи недействительна. Это значит, что кто-то (хакер?) изменил некоторые данные этого после того, как они были записаны, или удалил предыдущую архивную запись (проверьте, что строка с предыдущим # существует). +OkCheckFingerprintValidity=Архивная запись в журнале действительна. Данные в этой строке не были изменены, и запись следует за предыдущей. OkCheckFingerprintValidityButChainIsKo=Archived log seems valid compared to previous one but the chain was corrupted previously. AddedByAuthority=Stored into remote authority NotAddedByAuthorityYet=Not yet stored into remote authority -ShowDetails=Show stored details +ShowDetails=Показать сохраненные данные logPAYMENT_VARIOUS_CREATE=Payment (not assigned to an invoice) created logPAYMENT_VARIOUS_MODIFY=Payment (not assigned to an invoice) modified logPAYMENT_VARIOUS_DELETE=Payment (not assigned to an invoice) logical deletion logPAYMENT_ADD_TO_BANK=Payment added to bank -logPAYMENT_CUSTOMER_CREATE=Customer payment created +logPAYMENT_CUSTOMER_CREATE=Платеж клиента создан logPAYMENT_CUSTOMER_DELETE=Customer payment logical deletion -logDONATION_PAYMENT_CREATE=Donation payment created +logDONATION_PAYMENT_CREATE=Платеж пожертвования создан logDONATION_PAYMENT_DELETE=Donation payment logical deletion -logBILL_PAYED=Customer invoice paid -logBILL_UNPAYED=Customer invoice set unpaid +logBILL_PAYED=Счет клиента оплачен +logBILL_UNPAYED=Неоплаченный счет клиента logBILL_VALIDATE=Проверка векселя logBILL_SENTBYMAIL=Customer invoice send by mail logBILL_DELETE=Customer invoice logically deleted logMODULE_RESET=Module BlockedLog was disabled logMODULE_SET=Module BlockedLog was enabled -logDON_VALIDATE=Donation validated -logDON_MODIFY=Donation modified +logDON_VALIDATE=Пожертвование подтверждено +logDON_MODIFY=Пожертвование изменено logDON_DELETE=Donation logical deletion logMEMBER_SUBSCRIPTION_CREATE=Member subscription created logMEMBER_SUBSCRIPTION_MODIFY=Member subscription modified diff --git a/htdocs/langs/ru_RU/bookmarks.lang b/htdocs/langs/ru_RU/bookmarks.lang index c6009dfc922..701f235600f 100644 --- a/htdocs/langs/ru_RU/bookmarks.lang +++ b/htdocs/langs/ru_RU/bookmarks.lang @@ -6,15 +6,15 @@ ListOfBookmarks=Список закладок EditBookmarks=Список/редактирование закладок NewBookmark=Новая закладка ShowBookmark=Показать закладку -OpenANewWindow=Открыть новое окно -ReplaceWindow=Заменить текущее окно -BookmarkTargetNewWindowShort=Новое окно -BookmarkTargetReplaceWindowShort=Текущее окно -BookmarkTitle=Название закладки +OpenANewWindow=Открыть новую вкладку +ReplaceWindow=Заменить текущую вкладку +BookmarkTargetNewWindowShort=Новая вкладка +BookmarkTargetReplaceWindowShort=Текущая вкладка +BookmarkTitle=Имя закладки UrlOrLink=URL BehaviourOnClick=Поведение когда выбран URL закладки CreateBookmark=Создать закладку -SetHereATitleForLink=Установите название для закладки -UseAnExternalHttpLinkOrRelativeDolibarrLink=Используйте внешний HTTP URL или относительный Dolibarr URL -ChooseIfANewWindowMustBeOpenedOnClickOnBookmark=Выберите если связанную страницу необходимо открыть в новом окне +SetHereATitleForLink=Задать имя закладки +UseAnExternalHttpLinkOrRelativeDolibarrLink=Использовать внешнюю/абсолютную ссылку (https://URL) или внутреннюю/относительную ссылку (/DOLIBARR_ROOT/ htdocs /...) +ChooseIfANewWindowMustBeOpenedOnClickOnBookmark=Выберите, должна ли связанная страница открываться в текущей вкладке или в новой вкладке BookmarksManagement=Управление закладками diff --git a/htdocs/langs/ru_RU/boxes.lang b/htdocs/langs/ru_RU/boxes.lang index d79c6632395..3f1f3835168 100644 --- a/htdocs/langs/ru_RU/boxes.lang +++ b/htdocs/langs/ru_RU/boxes.lang @@ -1,29 +1,29 @@ # Dolibarr language file - Source file is en_US - boxes -BoxLoginInformation=Login Information -BoxLastRssInfos=RSS Information -BoxLastProducts=Latest %s Products/Services -BoxProductsAlertStock=Stock alerts for products -BoxLastProductsInContract=Latest %s contracted products/services -BoxLastSupplierBills=Latest Vendor invoices -BoxLastCustomerBills=Latest Customer invoices -BoxOldestUnpaidCustomerBills=Oldest unpaid customer invoices -BoxOldestUnpaidSupplierBills=Oldest unpaid vendor invoices -BoxLastProposals=Latest commercial proposals -BoxLastProspects=Latest modified prospects -BoxLastCustomers=Latest modified customers -BoxLastSuppliers=Latest modified suppliers -BoxLastCustomerOrders=Latest sales orders -BoxLastActions=Latest actions -BoxLastContracts=Latest contracts -BoxLastContacts=Latest contacts/addresses -BoxLastMembers=Latest members -BoxFicheInter=Latest interventions +BoxLoginInformation=Информация для входа +BoxLastRssInfos=RSS информация +BoxLastProducts=Последние %s Продукты/ Услуги +BoxProductsAlertStock=Имеющиеся оповещения для продуктов +BoxLastProductsInContract=Последние %s контрактные продукты/услуги +BoxLastSupplierBills=Последние счета поставщиков +BoxLastCustomerBills=Последние счета клиентов +BoxOldestUnpaidCustomerBills=Старые неоплаченные счета клиентов +BoxOldestUnpaidSupplierBills=Старые неоплаченные счета поставщиков +BoxLastProposals=Последние коммерческие предложения +BoxLastProspects=Последние изменения потенциальных клиентов +BoxLastCustomers=Последние изменения клиентов +BoxLastSuppliers=Последние изменения поставщиков +BoxLastCustomerOrders=Последние заказы +BoxLastActions=Последние действия +BoxLastContracts=Последние контракты +BoxLastContacts=Последние контакты/адреса +BoxLastMembers=Последние участники +BoxFicheInter=Последние вмешательства BoxCurrentAccounts=Open accounts balance -BoxTitleLastRssInfos=Latest %s news from %s -BoxTitleLastProducts=Products/Services: last %s modified -BoxTitleProductsAlertStock=Products: stock alert -BoxTitleLastSuppliers=Latest %s recorded suppliers -BoxTitleLastModifiedSuppliers=Vendors: last %s modified +BoxTitleLastRssInfos=Последние %s новостей от %s +BoxTitleLastProducts=Продукты/Услуги: последних %s изменений +BoxTitleProductsAlertStock=Продукты: имеющиеся оповещения +BoxTitleLastSuppliers=Последние %s зарегистрированные поставщики +BoxTitleLastModifiedSuppliers=Продавцы: последнее %s изменений BoxTitleLastModifiedCustomers=Customers: last %s modified BoxTitleLastCustomersOrProspects=Latest %s customers or prospects BoxTitleLastCustomerBills=Latest %s Customer invoices @@ -35,53 +35,53 @@ BoxTitleOldestUnpaidCustomerBills=Customer Invoices: oldest %s unpaid BoxTitleOldestUnpaidSupplierBills=Vendor Invoices: oldest %s unpaid BoxTitleCurrentAccounts=Open Accounts: balances BoxTitleLastModifiedContacts=Contacts/Addresses: last %s modified -BoxMyLastBookmarks=Bookmarks: latest %s +BoxMyLastBookmarks=Закладки: последние %s BoxOldestExpiredServices=Старейшие активных истек услуги BoxLastExpiredServices=Latest %s oldest contacts with active expired services BoxTitleLastActionsToDo=Latest %s actions to do BoxTitleLastContracts=Latest %s modified contracts -BoxTitleLastModifiedDonations=Latest %s modified donations +BoxTitleLastModifiedDonations=Последние %sизмененные пожертвования BoxTitleLastModifiedExpenses=Latest %s modified expense reports BoxGlobalActivity=Глобальная активность (фактуры, предложения, заказы) -BoxGoodCustomers=Good customers +BoxGoodCustomers=Хорошие клиенты BoxTitleGoodCustomers=%s Good customers FailedToRefreshDataInfoNotUpToDate=Failed to refresh RSS flux. Latest successful refresh date: %s -LastRefreshDate=Latest refresh date +LastRefreshDate=Дата последнего обновления NoRecordedBookmarks=Закладки не созданы. ClickToAdd=Нажмите здесь, чтобы добавить. NoRecordedCustomers=Нет зарегистрированных клиентов NoRecordedContacts=Нет введенных контактов NoActionsToDo=Нет действий для выполнения -NoRecordedOrders=No recorded sales orders +NoRecordedOrders=Нет зарегистрированных заказов на продажу NoRecordedProposals=Нет зарегистрированных предложений -NoRecordedInvoices=No recorded customer invoices -NoUnpaidCustomerBills=No unpaid customer invoices -NoUnpaidSupplierBills=No unpaid vendor invoices -NoModifiedSupplierBills=No recorded vendor invoices +NoRecordedInvoices=Нет зарегистрированных счетов клиентов +NoUnpaidCustomerBills=Нет неоплаченных счетов клиентов +NoUnpaidSupplierBills=Нет неоплаченных счетов поставщиков +NoModifiedSupplierBills=Нет зарегистрированных счетов поставщиков NoRecordedProducts=Нет зарегистрированных товаров / услуг NoRecordedProspects=Нет зарегистрированных потенциальных клиентов NoContractedProducts=Нет законтрактованных товаров / услуг NoRecordedContracts=Нет введенных договоров NoRecordedInterventions=Нет записанных мероприятий -BoxLatestSupplierOrders=Latest purchase orders -NoSupplierOrder=No recorded purchase order -BoxCustomersInvoicesPerMonth=Customer Invoices per month +BoxLatestSupplierOrders=Последние заказы на покупку +NoSupplierOrder=Нет зарегистрированного заказа на покупку +BoxCustomersInvoicesPerMonth=Счета клиентов в месяц BoxSuppliersInvoicesPerMonth=Vendor Invoices per month -BoxCustomersOrdersPerMonth=Sales Orders per month +BoxCustomersOrdersPerMonth=Заказы на продажу в месяц BoxSuppliersOrdersPerMonth=Vendor Orders per month BoxProposalsPerMonth=Предложений в месяц -NoTooLowStockProducts=No products are under the low stock limit -BoxProductDistribution=Products/Services Distribution +NoTooLowStockProducts=Нет товаров на складе с запасом ниже установленного +BoxProductDistribution=Дистрибуция Продуктов/Услуг ForObject=On %s -BoxTitleLastModifiedSupplierBills=Vendor Invoices: last %s modified -BoxTitleLatestModifiedSupplierOrders=Vendor Orders: last %s modified -BoxTitleLastModifiedCustomerBills=Customer Invoices: last %s modified +BoxTitleLastModifiedSupplierBills=Счета поставщиков: последнее %s изменений +BoxTitleLatestModifiedSupplierOrders=Заказы поставщиков: последнее %s изменений +BoxTitleLastModifiedCustomerBills=Счета клиентов: последнее %s изменений BoxTitleLastModifiedCustomerOrders=Sales Orders: last %s modified BoxTitleLastModifiedPropals=Latest %s modified proposals ForCustomersInvoices=Счета-фактуры Покупателей ForCustomersOrders=Заказы клиентов ForProposals=Предложения LastXMonthRolling=The latest %s month rolling -ChooseBoxToAdd=Add widget to your dashboard -BoxAdded=Widget was added in your dashboard -BoxTitleUserBirthdaysOfMonth=Birthdays of this month +ChooseBoxToAdd=Добавить виджет на вашу панель +BoxAdded=Виджет был добавлен на вашу панель +BoxTitleUserBirthdaysOfMonth=Дни рождения в этом месяце diff --git a/htdocs/langs/ru_RU/cashdesk.lang b/htdocs/langs/ru_RU/cashdesk.lang index 2a83680e420..b6ea72c8f0c 100644 --- a/htdocs/langs/ru_RU/cashdesk.lang +++ b/htdocs/langs/ru_RU/cashdesk.lang @@ -14,7 +14,7 @@ ShoppingCart=Корзина NewSell=Новые продать AddThisArticle=Добавить эту статью RestartSelling=Вернитесь на продажу -SellFinished=Sale complete +SellFinished=Продажа завершена PrintTicket=Печать билетов NoProductFound=Ни одна статья найдены ProductFound=продукт найден @@ -37,17 +37,17 @@ PointOfSaleShort=POS CloseBill=Close Bill Floors=Floors Floor=Floor -AddTable=Add table +AddTable=Добавить таблицу Place=Place TakeposConnectorNecesary='TakePOS Connector' required OrderPrinters=Order printers -SearchProduct=Search product +SearchProduct=Поиск товара Receipt=Квитанция -Header=Header -Footer=Footer -AmountAtEndOfPeriod=Amount at end of period (day, month or year) -TheoricalAmount=Theorical amount -RealAmount=Real amount +Header=Заголовок +Footer=Нижний колонтитул +AmountAtEndOfPeriod=Сумма на конец периода (день, месяц или год) +TheoricalAmount=Теоретическая сумма +RealAmount=Действительная сумма CashFenceDone=Cash fence done for the period NbOfInvoices=Кол-во счетов-фактур Paymentnumpad=Type of Pad to enter payment @@ -61,11 +61,11 @@ NoPaimementModesDefined=No paiment mode defined in TakePOS configuration TicketVatGrouped=Group VAT by rate in tickets AutoPrintTickets=Automatically print tickets EnableBarOrRestaurantFeatures=Enable features for Bar or Restaurant -ConfirmDeletionOfThisPOSSale=Do your confirm the deletion of this current sale ? +ConfirmDeletionOfThisPOSSale=Подтверждаете ли вы удаление этой продажи? History=История -ValidateAndClose=Validate and close -Terminal=Terminal -NumberOfTerminals=Number of Terminals -TerminalSelect=Select terminal you want to use: +ValidateAndClose=Подтвердить и закрыть +Terminal=Терминал +NumberOfTerminals=Количество терминалов +TerminalSelect=Выберите терминал, который хотите использовать: POSTicket=POS Ticket BasicPhoneLayout=Use basic layout for phones diff --git a/htdocs/langs/ru_RU/categories.lang b/htdocs/langs/ru_RU/categories.lang index 0166ec07b6c..1b29f114966 100644 --- a/htdocs/langs/ru_RU/categories.lang +++ b/htdocs/langs/ru_RU/categories.lang @@ -1,23 +1,23 @@ # Dolibarr language file - Source file is en_US - categories Rubrique=Тег/Категория Rubriques=Теги/Категории -RubriquesTransactions=Tags/Categories of transactions +RubriquesTransactions=Теги/Категории транзакций categories=теги/категории NoCategoryYet=Нет созданных тегов/категорий данного типа In=В AddIn=Добавить в modify=изменить -Classify=Добавить +Classify=Классифицировать CategoriesArea=Раздел тегов/категорий ProductsCategoriesArea=Раздел тегов/категорий товаров/услуг -SuppliersCategoriesArea=Vendors tags/categories area +SuppliersCategoriesArea=Раздел тегов/категорий поставщиков CustomersCategoriesArea=Раздел тегов/категорий клиентов MembersCategoriesArea=Раздел тегов/категорий участников ContactsCategoriesArea=Раздел тегов/категорий контактов AccountsCategoriesArea=Accounts tags/categories area -ProjectsCategoriesArea=Projects tags/categories area -UsersCategoriesArea=Users tags/categories area -SubCats=Sub-categories +ProjectsCategoriesArea=Раздел тегов/категорий проектов +UsersCategoriesArea=Раздел тегов/категорий пользователей +SubCats=Подкатегории CatList=Список тегов/категорий NewCategory=Новый тег/категория ModifCat=Изменить тег/категорию @@ -27,64 +27,64 @@ CreateThisCat=Создать этот (эту) тег/категорию NoSubCat=Нет подкатегории. SubCatOf=Подкатегория FoundCats=Найденные теги/категории -ImpossibleAddCat=Impossible to add the tag/category %s +ImpossibleAddCat=Невозможно добавить тег/категорию %s WasAddedSuccessfully=%s успешно добавлена. ObjectAlreadyLinkedToCategory=Элемент уже связан с этим тегом/категорией -ProductIsInCategories=Product/service is linked to following tags/categories -CompanyIsInCustomersCategories=This third party is linked to following customers/prospects tags/categories -CompanyIsInSuppliersCategories=This third party is linked to following vendors tags/categories -MemberIsInCategories=This member is linked to following members tags/categories -ContactIsInCategories=This contact is linked to following contacts tags/categories +ProductIsInCategories=Продукт/услуга связаны со следующими тегами/категориями +CompanyIsInCustomersCategories=Данное третье лицо связано со следующими тегами/категориями клиентов/потенциальных клиентов +CompanyIsInSuppliersCategories=Данное третье лицо связано со следующими тегами/категориями поставщиков +MemberIsInCategories=Данный участник связан со следующими тегами/категориями участников +ContactIsInCategories=Этот контакт связан со следующими тэгами/категориями контактов ProductHasNoCategory=У этого продукта/услуги нет тегов/категорий -CompanyHasNoCategory=This third party is not in any tags/categories +CompanyHasNoCategory=У этой третьей стороны нет тэгов/категорий MemberHasNoCategory=У этого участника нет тегов/категорий ContactHasNoCategory=Это контакт не имеет тега или не принадлежит категории -ProjectHasNoCategory=This project is not in any tags/categories -ClassifyInCategory=Add to tag/category +ProjectHasNoCategory=У этого проекта нет тегов/категорий +ClassifyInCategory=Добавить в тег/категорию NotCategorized=Без тега/категории CategoryExistsAtSameLevel=Категория к таким кодом уже существует ContentsVisibleByAllShort=Содержимое доступно всем ContentsNotVisibleByAllShort=Содержание не доступно всем DeleteCategory=Удалить тег/категорию -ConfirmDeleteCategory=Are you sure you want to delete this tag/category? +ConfirmDeleteCategory=Вы уверены, что хотите удалить этот тег/категорию? NoCategoriesDefined=Не задан тег/категория -SuppliersCategoryShort=Vendors tag/category -CustomersCategoryShort=Customers tag/category -ProductsCategoryShort=Products tag/category -MembersCategoryShort=Members tag/category -SuppliersCategoriesShort=Vendors tags/categories +SuppliersCategoryShort=Тег/категория поставщиков +CustomersCategoryShort=Тег/категория клиентов +ProductsCategoryShort=Тег/категория продуктов +MembersCategoryShort=Тег/категория участников +SuppliersCategoriesShort=Теги/категории производителей CustomersCategoriesShort=Теги/категории клиентов -ProspectsCategoriesShort=Prospects tags/categories -CustomersProspectsCategoriesShort=Cust./Prosp. tags/categories +ProspectsCategoriesShort=Теги/категории проектов +CustomersProspectsCategoriesShort=Теги/категории Клиентов/Потенциальных клиентов ProductsCategoriesShort=Теги/категории товаров MembersCategoriesShort=Теги/категории участников ContactCategoriesShort=Теги/категории контактов AccountsCategoriesShort=Accounts tags/categories -ProjectsCategoriesShort=Projects tags/categories -UsersCategoriesShort=Users tags/categories +ProjectsCategoriesShort=Теги/категории Проектов +UsersCategoriesShort=Теги/категории пользователей ThisCategoryHasNoProduct=В этой категории нет товаров. -ThisCategoryHasNoSupplier=This category does not contain any vendor. +ThisCategoryHasNoSupplier=В этой категории нет ни одного поставщика. ThisCategoryHasNoCustomer=В этой категории нет покупателей. ThisCategoryHasNoMember=В этой категории нет участников. ThisCategoryHasNoContact=Эта категория не содержит ни одного контакта ThisCategoryHasNoAccount=This category does not contain any account. -ThisCategoryHasNoProject=This category does not contain any project. +ThisCategoryHasNoProject=В этой категории нет ни одного проекта CategId=ID тега/категории CatSupList=List of vendor tags/categories CatCusList=Список тегов/категорий клиента/потенциального клиента CatProdList=Список тегов/категорий товаров CatMemberList=Список тегов/категорий участников -CatContactList=List of contact tags/categories +CatContactList=Список тегов/категорий контактов CatSupLinks=Связи между поставщиками и тегами/категориями CatCusLinks=Связи между клиентами/потенц. клиентами и тегами/категориями CatProdLinks=Связи между продуктами/услугами и тегами/категориями -CatProJectLinks=Links between projects and tags/categories +CatProJectLinks=Связи между проектами и тегами/категориями DeleteFromCat=Удалить из тега/категории ExtraFieldsCategories=Дополнительные атрибуты CategoriesSetup=Настройка тегов/категорий CategorieRecursiv=Автоматическая ссылка на родительский тег/категорию -CategorieRecursivHelp=If option is on, when you add a product into a subcategory, product will also be added into the parent category. +CategorieRecursivHelp=Если опция включена, то при добавлении товара в подкатегорию товар также будет добавлен в родительскую категорию. AddProductServiceIntoCategory=Добавить следующий товар/услугу ShowCategory=Показать тег/категорию ByDefaultInList=By default in list -ChooseCategory=Choose category +ChooseCategory=Выберите категорию diff --git a/htdocs/langs/ru_RU/commercial.lang b/htdocs/langs/ru_RU/commercial.lang index 0016a1c5b31..aeaf2e67936 100644 --- a/htdocs/langs/ru_RU/commercial.lang +++ b/htdocs/langs/ru_RU/commercial.lang @@ -1,19 +1,19 @@ # Dolibarr language file - Source file is en_US - commercial -Commercial=Коммерция +Commercial=Управление запасами CommercialArea=Раздел коммерции Customer=Клиент Customers=Клиенты Prospect=Потенциальный клиент Prospects=Потенциальные клиенты -DeleteAction=Delete an event -NewAction=New event +DeleteAction=Удалить событие +NewAction=Новое событие AddAction=Создать событие -AddAnAction=Create an event +AddAnAction=Создать событие AddActionRendezVous=Создать назначенное событие -ConfirmDeleteAction=Are you sure you want to delete this event? +ConfirmDeleteAction=Вы уверены, что хотите удалить это событие? CardAction=Карточка события -ActionOnCompany=Related company -ActionOnContact=Related contact +ActionOnCompany=Связанная компания +ActionOnContact=Связанный контакт TaskRDVWith=Встреча с %s ShowTask=Показать задачу ShowAction=Показать действий @@ -52,17 +52,17 @@ ActionAC_TEL=Телефонный звонок ActionAC_FAX=Отправить факс ActionAC_PROP=Отправить предложение по Email ActionAC_EMAIL=Отправить электронное письмо -ActionAC_EMAIL_IN=Reception of Email +ActionAC_EMAIL_IN=Прием электронной почты ActionAC_RDV=Встречи ActionAC_INT=Вмешательство на сайте ActionAC_FAC=Отправить платежную ActionAC_REL=Отправить платежную (напоминание) ActionAC_CLO=Закрыть ActionAC_EMAILING=Отправить по электронной почте масса -ActionAC_COM=Отправить заказ по почте +ActionAC_COM=Отправить заказ на продажу по почте ActionAC_SHIP=Отправить доставку по почте -ActionAC_SUP_ORD=Send purchase order by mail -ActionAC_SUP_INV=Send vendor invoice by mail +ActionAC_SUP_ORD=Отправить заказ на покупку по почте +ActionAC_SUP_INV=Отправить счет поставщика по почте ActionAC_OTH=Другой ActionAC_OTH_AUTO=Мероприятия созданные автоматически ActionAC_MANUAL=Мероприятия, созданные вручную @@ -71,10 +71,10 @@ ActionAC_OTH_AUTOShort=Auto Stats=Статистика продаж StatusProsp=Проспект статус DraftPropals=Проект коммерческих предложений -NoLimit=No limit +NoLimit=Нет ограничений ToOfferALinkForOnlineSignature=Link for online signature WelcomeOnOnlineSignaturePage=Welcome to the page to accept commercial proposals from %s -ThisScreenAllowsYouToSignDocFrom=This screen allow you to accept and sign, or refuse, a quote/commercial proposal +ThisScreenAllowsYouToSignDocFrom=Этот экран позволяет вам принять и подписать или отклонить предложение или коммерческое предложение ThisIsInformationOnDocumentToSign=This is information on document to accept or refuse SignatureProposalRef=Signature of quote/commercial proposal %s FeatureOnlineSignDisabled=Feature for online signing disabled or document generated before the feature was enabled diff --git a/htdocs/langs/ru_RU/companies.lang b/htdocs/langs/ru_RU/companies.lang index 2973b8cc419..75936a1639c 100644 --- a/htdocs/langs/ru_RU/companies.lang +++ b/htdocs/langs/ru_RU/companies.lang @@ -5,14 +5,14 @@ SelectThirdParty=Выберите контрагента ConfirmDeleteCompany=Вы хотите удалить компанию и всю связанную с ней информацию? DeleteContact=Удалить контакт ConfirmDeleteContact=Удалить этот контакт и всю связанную с ним информацию? -MenuNewThirdParty=New Third Party -MenuNewCustomer=New Customer -MenuNewProspect=New Prospect -MenuNewSupplier=New Vendor +MenuNewThirdParty=Новый контрагент +MenuNewCustomer=Новый Клиент +MenuNewProspect=Новый Потенциальный клиент +MenuNewSupplier=Новый Продавец MenuNewPrivateIndividual=Новое физическое лицо NewCompany=Новая компания (перспектива, клиент, поставщик) -NewThirdParty=New Third Party (prospect, customer, vendor) -CreateDolibarrThirdPartySupplier=Создайте стороннего поставщика (поставщика) +NewThirdParty=Новый контрагент (потенциальный клиент, клиент, поставщик) +CreateDolibarrThirdPartySupplier=Создать контрагента (поставщика) CreateThirdPartyOnly=Создать контрагента CreateThirdPartyAndContact=Создать контрагента и связанный контакт ProspectionArea=Область потенциальных клиентов @@ -20,28 +20,28 @@ IdThirdParty=Код контрагента IdCompany=Код компании IdContact=Код контакта Contacts=Контакты -ThirdPartyContacts=Third-party contacts -ThirdPartyContact=Third-party contact/address +ThirdPartyContacts=Контакты контрагента +ThirdPartyContact=Контакт/адрес контрагента Company=Компания CompanyName=Название компании AliasNames=Название псевдонима (коммерческий, торговая марка, ...) -AliasNameShort=Alias Name +AliasNameShort=Псевдоним Companies=Компании -CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language -ThirdPartyName=Third-party name -ThirdPartyEmail=Third-party email -ThirdParty=Third-party -ThirdParties=Third-parties +CountryIsInEEC=Страна внутри Европейского Экономического Сообщества +PriceFormatInCurrentLanguage=Формат отображения цены в текущем языке и валюте +ThirdPartyName=Имя контрагента +ThirdPartyEmail= E-mail контрагента +ThirdParty=Контрагент +ThirdParties=Контрагенты ThirdPartyProspects=Потенциальные клиенты ThirdPartyProspectsStats=Потенциальные клиенты ThirdPartyCustomers=Покупатели ThirdPartyCustomersStats=Заказчики ThirdPartyCustomersWithIdProf12=Покупатели с %s или %s ThirdPartySuppliers=Вендоры -ThirdPartyType=Third-party type +ThirdPartyType=Тип контрагента Individual=Физическое лицо -ToCreateContactWithSameName=Will automatically create a contact/address with same information as the third party under the third party. In most cases, even if your third party is a physical person, creating a third party alone is enough. +ToCreateContactWithSameName=Будет автоматически создан контакт/адрес с той информацией которая связывает контрагента с контрагентом. В большинстве случаев, даже если контрагент является физическим лицом, достаточно создать одного контрагента. ParentCompany=Материнская компания Subsidiaries=Филиалы ReportByMonth=Отчет за месяц @@ -53,7 +53,7 @@ Lastname=Фамилия Firstname=Имя PostOrFunction=Должность UserTitle=Название -NatureOfThirdParty=Природа третьей стороны +NatureOfThirdParty=Свойство контрагента Address=Адрес State=Штат/Провинция StateShort=Штат @@ -70,19 +70,19 @@ Chat=Чат PhonePro=Раб. телефон PhonePerso=Личн. телефон PhoneMobile=Мобильный -No_Email=Refuse bulk emailings +No_Email=Отказаться от массовых рассылок Fax=Факс Zip=Почтовый индекс Town=Город Web=Web Poste= Должность -DefaultLang=Language default -VATIsUsed=Sales tax used -VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers +DefaultLang=Язык по умолчанию +VATIsUsed=Используется налог с продаж +VATIsUsedWhenSelling=Это определяет, включает ли этот контрагент налог с продаж или нет, когда выставляет счет своим клиентам VATIsNotUsed=Налог с продаж не используется -CopyAddressFromSoc=Copy address from third-party details -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects -ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor vendor, discounts are not available +CopyAddressFromSoc=Копировать адрес из данных контрагента +ThirdpartyNotCustomerNotSupplierSoNoRef=Контрагент не является ни клиентом, ни поставщиком, нет справочных объектов +ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Контрагент не является ни клиентом, ни поставщиком, скидки не предоставляются PaymentBankAccount=Банковские реквизиты OverAllProposals=Предложения OverAllOrders=Заказы @@ -257,8 +257,8 @@ ProfId1DZ=RC ProfId2DZ=Art. ProfId3DZ=NIF ProfId4DZ=NIS -VATIntra=VAT ID -VATIntraShort=VAT ID +VATIntra=Код плательщика НДС +VATIntraShort=Код плательщика НДС VATIntraSyntaxIsValid=Синтаксис корректен VATReturn=Возврат НДС ProspectCustomer=Потенц. клиент / Покупатель @@ -271,22 +271,23 @@ CustomerRelativeDiscountShort=Относительная скидка CustomerAbsoluteDiscountShort=Абсолютная скидка CompanyHasRelativeDiscount=Этот покупатель имеет скидку по умолчанию %s%% CompanyHasNoRelativeDiscount=Этот клиент не имеет относительной скидки по умолчанию -HasRelativeDiscountFromSupplier=You have a default discount of %s%% from this vendor -HasNoRelativeDiscountFromSupplier=You have no default relative discount from this vendor -CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for %s %s -CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for %s %s +HasRelativeDiscountFromSupplier=У вас есть скидка по умолчанию %s%% от этого поставщика +HasNoRelativeDiscountFromSupplier=У вас нет скидки по умолчанию от этого поставщика +CompanyHasAbsoluteDiscount=У этого клиента есть скидки (кредиты или авансовые платежи) на %s %s +CompanyHasDownPaymentOrCommercialDiscount=У этого клиента есть скидки (коммерческая, авансовые платежи) на %s %s CompanyHasCreditNote=Этот клиент все еще имеет кредитный лимит или авансовый платеж за %s %s -HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this vendor -HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for %s %s from this vendor -HasDownPaymentOrCommercialDiscountFromSupplier=You have discounts available (commercial, down payments) for %s %s from this vendor -HasCreditNoteFromSupplier=You have credit notes for %s %s from this vendor +HasNoAbsoluteDiscountFromSupplier=У вас нет скидки на кредит от этого поставщика +HasAbsoluteDiscountFromSupplier=У вас есть скидки (кредиты или авансовые платежи) на %s %s от этого поставщика +HasDownPaymentOrCommercialDiscountFromSupplier=У вас есть скидки (коммерческие, авансовые платежи) на %s %s от этого поставщика +HasCreditNoteFromSupplier=У вас есть кредиты на %s %s от этого поставщика CompanyHasNoAbsoluteDiscount=Этот клиент не имеет дисконтный кредит CustomerAbsoluteDiscountAllUsers=Абсолютные скидки клиентов (предоставляются всеми пользователями) CustomerAbsoluteDiscountMy=Абсолютные скидки клиентов (предоставляются сами) SupplierAbsoluteDiscountAllUsers=Абсолютные скидки продавца (введенные всеми пользователями) SupplierAbsoluteDiscountMy=Абсолютные скидки продавца (введены самим) DiscountNone=Нет -Vendor=Vendor +Vendor=Поставщик +Supplier=Поставщик AddContact=Создать контакт AddContactAddress=Создать контакт/адрес EditContact=Изменить контакт / адреса @@ -302,22 +303,22 @@ AddThirdParty=Создать контрагента DeleteACompany=Удалить компанию PersonalInformations=Личные данные AccountancyCode=Бухгалтерский счёт -CustomerCode=Customer Code -SupplierCode=Vendor Code -CustomerCodeShort=Customer Code -SupplierCodeShort=Vendor Code -CustomerCodeDesc=Customer Code, unique for all customers -SupplierCodeDesc=Vendor Code, unique for all vendors +CustomerCode=Код Клиента +SupplierCode=Код Поставщика +CustomerCodeShort=Код клиента +SupplierCodeShort=Код Поставщика +CustomerCodeDesc=Код Клиента, уникальный для каждого клиента +SupplierCodeDesc=Код Поставщика, уникальный для каждого поставщика RequiredIfCustomer=Требуется, если контрагент является покупателем или потенциальным клиентом -RequiredIfSupplier=Требуется, если сторонняя сторона является поставщиком -ValidityControledByModule=Validity controlled by module -ThisIsModuleRules=Rules for this module +RequiredIfSupplier=Требуется, если контрагент является поставщиком +ValidityControledByModule=Актуальность контролируется модулем +ThisIsModuleRules=Правила для этого модуля ProspectToContact=Потенциальный клиент для связи CompanyDeleted=Компания " %s" удалена из базы данных. ListOfContacts=Список контактов/адресов ListOfContactsAddresses=Список контактов/адресов -ListOfThirdParties=List of Third Parties -ShowCompany=Show Third Party +ListOfThirdParties=Список контрагентов +ShowCompany=Показать контрагента ShowContact=Показать контакт ContactsAllShort=Все (без фильтра) ContactType=Вид контакт @@ -332,21 +333,21 @@ NoContactForAnyProposal=Этот контакт не является конта NoContactForAnyContract=Этот контакт не является контактом договора NoContactForAnyInvoice=Этот контакт не является контактом счета-фактуры NewContact=Новый контакт/адрес -NewContactAddress=New Contact/Address +NewContactAddress=Новый контакт/адрес MyContacts=Мои контакты Capital=Капитал CapitalOf=Столица %s EditCompany=Изменить компанию ThisUserIsNot=Этот пользователь не является перспективой, клиентом и поставщиком VATIntraCheck=Проверить -VATIntraCheckDesc=The VAT ID must include the country prefix. The link %s uses the European VAT checker service (VIES) which requires internet access from the Dolibarr server. +VATIntraCheckDesc=Идентификатор НДС должен включать префикс страны. Ссылка %s использует европейскую службу проверки НДС (VIES), для которой требуется доступ в Интернет с сервера Dolibarr. VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do -VATIntraCheckableOnEUSite=Check the intra-Community VAT ID on the European Commission website -VATIntraManualCheck=You can also check manually on the European Commission website %s +VATIntraCheckableOnEUSite=Проверьте идентификатора НДС на веб-сайте Европейской комиссии +VATIntraManualCheck=Вы также можете проверить его вручную на сайте Европейской Комиссии %s ErrorVATCheckMS_UNAVAILABLE=Проверка невозможна. Сервис проверки не предоставляется государством-членом ЕС (%s). -NorProspectNorCustomer=Not prospect, nor customer -JuridicalStatus=Legal Entity Type -Staff=Employees +NorProspectNorCustomer=Не потенциальный клиент, не клиент +JuridicalStatus=Тип юридического лица +Staff=Сотрудники ProspectLevelShort=Потенциальный ProspectLevel=Потенциальный клиент ContactPrivate=Личный @@ -367,7 +368,7 @@ TE_MEDIUM=Средняя компания TE_ADMIN=Гос. орган TE_SMALL=Малая компания TE_RETAIL=Розничная торговля -TE_WHOLE=Wholesaler +TE_WHOLE=Оптовик TE_PRIVATE=Физическое лицо TE_OTHER=Другое StatusProspect-1=Не контактировать @@ -386,14 +387,14 @@ ExportCardToFormat=Экспорт карточки в формате ContactNotLinkedToCompany=Контакт не связан с каким-либо контрагентом DolibarrLogin=Имя пользователя Dolibarr NoDolibarrAccess=Нет доступа к Dolibarr -ExportDataset_company_1=Third-parties (companies/foundations/physical people) and their properties -ExportDataset_company_2=Contacts and their properties -ImportDataset_company_1=Third-parties and their properties -ImportDataset_company_2=Third-parties additional contacts/addresses and attributes -ImportDataset_company_3=Third-parties Bank accounts -ImportDataset_company_4=Third-parties Sales representatives (assign sales representatives/users to companies) -PriceLevel=Price Level -PriceLevelLabels=Price Level Labels +ExportDataset_company_1=Контрагенты (компании/фонды/ физические лица) и их свойства +ExportDataset_company_2=Контакты и их свойства +ImportDataset_company_1=Контрагенты и их свойства +ImportDataset_company_2=Дополнительные контакты/адреса и атрибуты контрагентов +ImportDataset_company_3=Банковские счета контрагентов +ImportDataset_company_4=Торговые представители контрагентов (назначить торговых представителей/пользователей для компаний) +PriceLevel=Уровень цены +PriceLevelLabels=Метки уровня цены DeliveryAddress=Адрес доставки AddAddress=Добавить адрес SupplierCategory=Категория поставщика @@ -402,16 +403,16 @@ DeleteFile=Удалить файл ConfirmDeleteFile=Вы уверены, что хотите удалить этот файл? AllocateCommercial=Назначить торгового представителя Organization=Организация -FiscalYearInformation=Fiscal Year +FiscalYearInformation=Финансовый год FiscalMonthStart=Первый месяц финансового года -YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification. +YouMustAssignUserMailFirst=Вы должны создать адрес электронной почты для этого пользователя, прежде чем сможете добавить уведомление по электронной почте. YouMustCreateContactFirst=Для добавления электронных уведомлений вы должны сначала указать действующий email контрагента -ListSuppliersShort=List of Vendors -ListProspectsShort=List of Prospects -ListCustomersShort=List of Customers -ThirdPartiesArea=Third Parties/Contacts -LastModifiedThirdParties=Last %s modified Third Parties -UniqueThirdParties=Total of Third Parties +ListSuppliersShort=Список Поставщиков +ListProspectsShort=Список Потенциальных клиентов +ListCustomersShort=Список Клиентов +ThirdPartiesArea=Контрагенты/Контакты +LastModifiedThirdParties=Последнее %s изменение контрагентов +UniqueThirdParties=Всего контрагентов InActivity=Открытые ActivityCeased=Закрыто ThirdPartyIsClosed=Закрывшиеся контрагенты @@ -420,22 +421,22 @@ CurrentOutstandingBill=Валюта неуплаченного счёта OutstandingBill=Максимальный неуплаченный счёт OutstandingBillReached=Достигнут максимум не оплаченных счетов OrderMinAmount=Минимальная сумма заказа -MonkeyNumRefModelDesc=Return a number with 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 sequence with no break and no return to 0. +MonkeyNumRefModelDesc=Возвращает число в формате %syymm-nnnn для кода клиента и %syymm-nnnn для кода поставщика, где yy - год, mm - месяц, а nnnn - последовательность без разрыва и без сброса. LeopardNumRefModelDesc=Код покупателю/поставщику не присваивается. Он может быть изменен в любое время. ManagingDirectors=Имя управляющего или управляющих (Коммерческого директора, директора, президента...) MergeOriginThirdparty=Копия контрагента (контрагент которого вы хотите удалить) MergeThirdparties=Объединить контрагентов -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted. +ConfirmMergeThirdparties=Вы уверены, что хотите объединить этого контрагента с текущим? Все связанные объекты (счета, заказы, ...) будут перемещены в текущего контрагента, а этот контрагент будет удален. ThirdpartiesMergeSuccess=Третьи стороны были объединены SaleRepresentativeLogin=Логин торгового представителя SaleRepresentativeFirstname=Имя торгового представителя SaleRepresentativeLastname=Фамилия торгового представителя ErrorThirdpartiesMerge=При удалении третьих сторон произошла ошибка. Проверьте журнал. Изменения были отменены. -NewCustomerSupplierCodeProposed=Customer or Vendor code already used, a new code is suggested +NewCustomerSupplierCodeProposed=Код Клиента или Поставщика уже используется, предлагается новый код #Imports -PaymentTypeCustomer=Payment Type - Customer -PaymentTermsCustomer=Payment Terms - Customer -PaymentTypeSupplier=Payment Type - Vendor -PaymentTermsSupplier=Payment Term - Vendor -MulticurrencyUsed=Use Multicurrency +PaymentTypeCustomer=Тип оплаты - Клиент +PaymentTermsCustomer=Условия оплаты - Клиент +PaymentTypeSupplier=Тип оплаты - Поставщик +PaymentTermsSupplier=Условия оплаты - Поставщик +MulticurrencyUsed=Использовать Мультивалютность MulticurrencyCurrency=Валюта diff --git a/htdocs/langs/ru_RU/compta.lang b/htdocs/langs/ru_RU/compta.lang index 8c7cd9b904e..bb264b10e93 100644 --- a/htdocs/langs/ru_RU/compta.lang +++ b/htdocs/langs/ru_RU/compta.lang @@ -25,7 +25,7 @@ PaymentsNotLinkedToInvoice=Платежи, не связанные с какой PaymentsNotLinkedToUser=Платежи, не связанные с какой-либо пользователь Profit=Прибыль AccountingResult=Accounting result -BalanceBefore=Balance (before) +BalanceBefore=Баланс (до) Balance=Баланс Debit=Дебет Credit=Кредит @@ -232,7 +232,7 @@ ACCOUNTING_ACCOUNT_SUPPLIER=Accounting account used for vendor third parties ACCOUNTING_ACCOUNT_SUPPLIER_Desc=The dedicated accounting account defined on third party card will be used for Subledger accounting only. This one will be used for General Ledger and as default value of Subledger accounting if dedicated vendor accounting account on third party is not defined. ConfirmCloneTax=Confirm the clone of a social/fiscal tax CloneTaxForNextMonth=Клонировать для следующего месяца -SimpleReport=Simple report +SimpleReport=Простой отчет AddExtraReport=Extra reports (add foreign and national customer report) OtherCountriesCustomersReport=Foreign customers report BasedOnTwoFirstLettersOfVATNumberBeingDifferentFromYourCompanyCountry=Based on the two first letters of the VAT number being different from your own company's country code diff --git a/htdocs/langs/ru_RU/contracts.lang b/htdocs/langs/ru_RU/contracts.lang index 0801db8362a..ae376c0ebc6 100644 --- a/htdocs/langs/ru_RU/contracts.lang +++ b/htdocs/langs/ru_RU/contracts.lang @@ -64,7 +64,8 @@ DateStartRealShort=Реальная дата начала DateEndReal=Реальная дата окончания DateEndRealShort=Реальная дата окончания CloseService=Закрыть услугу -BoardRunningServices=Истекшие запущенные услуги +BoardRunningServices=Services running +BoardExpiredServices=Просроченные услуги ServiceStatus=Статус услуги DraftContracts=Проекты договоров CloseRefusedBecauseOneServiceActive=Contract can't be closed as there is at least one open service on it @@ -86,9 +87,9 @@ StandardContractsTemplate=Стандартный шаблон контракта ContactNameAndSignature=Для %s, имя и подпись OnlyLinesWithTypeServiceAreUsed=Только строки с типом "Услуга" могут быть клонированы. ConfirmCloneContract=Are you sure you want to clone the contract %s? -LowerDateEndPlannedShort=Lower planned end date of active services +LowerDateEndPlannedShort=Нижняя запланированная дата завершения активных услуг SendContractRef=Contract information __REF__ -OtherContracts=Other contracts +OtherContracts=Другие контракты ##### Types de contacts ##### TypeContact_contrat_internal_SALESREPSIGN=Торговый представитель подписания контракта TypeContact_contrat_internal_SALESREPFOLL=Торговый представитель последующего договора diff --git a/htdocs/langs/ru_RU/cron.lang b/htdocs/langs/ru_RU/cron.lang index b61a771f133..c21b1597510 100644 --- a/htdocs/langs/ru_RU/cron.lang +++ b/htdocs/langs/ru_RU/cron.lang @@ -6,26 +6,26 @@ Permission23102 = Создать/обновить Запланированную Permission23103 = Удалить Запланированную задачу Permission23104 = Выполнить запланированную задачу # Admin -CronSetup= Настройки запланированных заданий +CronSetup=Настройки запланированных заданий URLToLaunchCronJobs=URL to check and launch qualified cron jobs OrToLaunchASpecificJob=Или проверить и запустить специальную задачу KeyForCronAccess=Ключ безопасности для запуска запланированных заданий FileToLaunchCronJobs=Command line to check and launch qualified cron jobs CronExplainHowToRunUnix=В системах Unix-like вы должны задать crontab для выполнения команды каждые 5 минут. -CronExplainHowToRunWin=В Майкрософт Windows © вы должны использовать Планировщик для запуска команды каждые 5 минут. +CronExplainHowToRunWin=On Microsoft(tm) Windows environment you can use Scheduled Task tools to run the command line each 5 minutes CronMethodDoesNotExists=Class %s does not contains any method %s CronJobDefDesc=Cron job profiles are defined into the module descriptor file. When module is activated, they are loaded and available so you can administer the jobs from the admin tools menu %s. CronJobProfiles=List of predefined cron job profiles # Menu -EnabledAndDisabled=Enabled and disabled +EnabledAndDisabled=Включено и отключено # Page list CronLastOutput=Latest run output CronLastResult=Latest result code CronCommand=Команда CronList=Запланированные задания CronDelete=Удалить запланированные задания -CronConfirmDelete=Are you sure you want to delete these scheduled jobs? -CronExecute=Launch scheduled job +CronConfirmDelete=Вы уверены, что хотите удалить эти запланированные задания? +CronExecute=Запустить запланированное задание CronConfirmExecute=Are you sure you want to execute these scheduled jobs now? CronInfo=Scheduled job module allows to schedule jobs to execute them automatically. Jobs can also be started manually. CronTask=Задание @@ -42,8 +42,8 @@ CronModule=Модуль CronNoJobs=Нет зарегистрированных заданий CronPriority=Приоритет CronLabel=Наименование -CronNbRun=Кол-во запусков -CronMaxRun=Max number launch +CronNbRun=Number of launches +CronMaxRun=Maximum number of launches CronEach=Каждый JobFinished=Задание запущено и завершено #Page card @@ -61,11 +61,11 @@ CronStatusInactiveBtn=Выключать CronTaskInactive=Задание отключено CronId=ID CronClassFile=Filename with class -CronModuleHelp=Name of Dolibarr module directory (also work with external Dolibarr module).
For exemple to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for module is
product -CronClassFileHelp=The relative path and file name to load (path is relative to web server root directory).
For exemple to call the fetch method of Dolibarr Product object htdocs/product/class/product.class.php, the value for class file name is
product/class/product.class.php -CronObjectHelp=The object name to load.
For exemple to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for class file name is
Product -CronMethodHelp=The object method to launch.
For exemple to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for method is
fetch -CronArgsHelp=The method arguments.
For exemple to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for paramters can be
0, ProductRef +CronModuleHelp=Name of Dolibarr module directory (also work with external Dolibarr module).
For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for module is
product +CronClassFileHelp=The relative path and file name to load (path is relative to web server root directory).
For example to call the fetch method of Dolibarr Product object htdocs/product/class/product.class.php, the value for class file name is
product/class/product.class.php +CronObjectHelp=The object name to load.
For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for class file name is
Product +CronMethodHelp=The object method to launch.
For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for method is
fetch +CronArgsHelp=The method arguments.
For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for paramters can be
0, ProductRef CronCommandHelp=Команда для выполнения CronCreateJob=Создать новое запланированное задание CronFrom=От @@ -79,5 +79,5 @@ CronCannotLoadObject=Class file %s was loaded, but object %s was not found into UseMenuModuleToolsToAddCronJobs=Go into menu "Home - Admin tools - Scheduled jobs" to see and edit scheduled jobs. JobDisabled=Job disabled MakeLocalDatabaseDumpShort=Local database backup -MakeLocalDatabaseDump=Create a local database dump. Parameters are: compression ('gz' or 'bz' or 'none'), backup type ('mysql' or 'pgsql'), 1, 'auto' or filename to build, number of backup files to keep +MakeLocalDatabaseDump=Create a local database dump. Parameters are: compression ('gz' or 'bz' or 'none'), backup type ('mysql', 'pgsql', 'auto'), 1, 'auto' or filename to build, number of backup files to keep WarningCronDelayed=Attention, for performance purpose, whatever is next date of execution of enabled jobs, your jobs may be delayed to a maximum of %s hours, before being run. diff --git a/htdocs/langs/ru_RU/dict.lang b/htdocs/langs/ru_RU/dict.lang index 3ef17a8324b..867b14f2fde 100644 --- a/htdocs/langs/ru_RU/dict.lang +++ b/htdocs/langs/ru_RU/dict.lang @@ -116,7 +116,7 @@ CountryHM=Остров Херд и Макдональд CountryVA=Папский Престол (Государство-город Ватикан) CountryHN=Гондурас CountryHK=Гонконг -CountryIS=Iceland +CountryIS=Исландия CountryIN=Индия CountryID=Индонезия CountryIR=Иран @@ -131,7 +131,7 @@ CountryKI=Кирибати CountryKP=Северная Корея CountryKR=Южная Корея CountryKW=Кувейт -CountryKG=Kyrgyzstan +CountryKG=Киргизия CountryLA=Лаосский CountryLV=Латвия CountryLB=Ливан @@ -139,7 +139,7 @@ CountryLS=Лесото CountryLR=Либерия CountryLY=Ливийская CountryLI=Лихтенштейн -CountryLT=Lithuania +CountryLT=Литва CountryLU=Люксембург CountryMO=Макао CountryMK=Македонии, бывшей югославской Республики @@ -290,10 +290,10 @@ CurrencyXOF=Франков КФА ЦБЗАГ CurrencySingXOF=Франк КФА ЦБЗАГ CurrencyXPF=CFP франков CurrencySingXPF=Франк КФП -CurrencyCentEUR=cents +CurrencyCentEUR=центы CurrencyCentSingEUR=цент -CurrencyCentINR=paisa -CurrencyCentSingINR=paise +CurrencyCentINR=пайсы +CurrencyCentSingINR=пайса CurrencyThousandthSingTND=тысячный #### Input reasons ##### DemandReasonTypeSRC_INTE=Интернет @@ -307,7 +307,7 @@ DemandReasonTypeSRC_WOM=Из уст в уста DemandReasonTypeSRC_PARTNER=Партнер DemandReasonTypeSRC_EMPLOYEE=Сотрудник DemandReasonTypeSRC_SPONSORING=Спонсорство -DemandReasonTypeSRC_SRC_CUSTOMER=Incoming contact of a customer +DemandReasonTypeSRC_SRC_CUSTOMER=Входящая связь с клиентом #### Paper formats #### PaperFormatEU4A0=Формат 4A0 PaperFormatEU2A0=Формат 2A0 diff --git a/htdocs/langs/ru_RU/donations.lang b/htdocs/langs/ru_RU/donations.lang index 002b3d1b7b7..108a50827bf 100644 --- a/htdocs/langs/ru_RU/donations.lang +++ b/htdocs/langs/ru_RU/donations.lang @@ -6,7 +6,7 @@ Donor=Донор AddDonation=Создать пожертование NewDonation=Новое пожертвование DeleteADonation=Удалить пожертование -ConfirmDeleteADonation=Are you sure you want to delete this donation? +ConfirmDeleteADonation=Вы уверены, что хотите удалить это пожертвование? ShowDonation=Показать пожертование PublicDonation=Общественное пожертвование DonationsArea=Пожертвования @@ -21,7 +21,7 @@ DonationDatePayment=Дата платежа ValidPromess=Подтвердить обещание DonationReceipt=Получатель пожертования DonationsModels=Модели документов для подтверждение получения пожертвования -LastModifiedDonations=Latest %s modified donations +LastModifiedDonations=Последние %sизмененные пожертвования DonationRecipient=Получатель пожертования IConfirmDonationReception=Получатель объявляет приём, как пожертвование, в следующем размере MinimumAmount=Минимальное пожертвование %s @@ -31,4 +31,4 @@ DONATION_ART200=Если вы обеспокоены, показывать вы DONATION_ART238=Если вы обеспокоены, показывать выдержку статьи 238 из CGI DONATION_ART885=Если вы обеспокоены, показывать выдержку статьи 885 из CGI DonationPayment=Платёж пожертвования -DonationValidated=Donation %s validated +DonationValidated= Пожертвование %s подтверждено diff --git a/htdocs/langs/ru_RU/ecm.lang b/htdocs/langs/ru_RU/ecm.lang index 75f3092ad49..2f3e3377b45 100644 --- a/htdocs/langs/ru_RU/ecm.lang +++ b/htdocs/langs/ru_RU/ecm.lang @@ -1,5 +1,5 @@ # Dolibarr language file - Source file is en_US - ecm -ECMNbOfDocs=No. of documents in directory +ECMNbOfDocs=Количество документов в каталоге ECMSection=Директория ECMSectionManual=Директория в ручном режиме ECMSectionAuto=Директория в автоматическом режиме @@ -33,9 +33,9 @@ ECMDocsByProducts=Документы, связанные с продуктами ECMDocsByProjects=Документы, связанные с проектрами ECMDocsByUsers=Документы, связанные с пользователями ECMDocsByInterventions=Документы, связанные с меропрятиями -ECMDocsByExpenseReports=Documents linked to expense reports -ECMDocsByHolidays=Documents linked to holidays -ECMDocsBySupplierProposals=Documents linked to supplier proposals +ECMDocsByExpenseReports=Документы, связанные с отчетами о расходах +ECMDocsByHolidays=Документы, связанные с отпусками +ECMDocsBySupplierProposals=Documents linked to vendor proposals ECMNoDirectoryYet=Директория не создана ShowECMSection=Показать директорию DeleteSection=Удаление директории diff --git a/htdocs/langs/ru_RU/help.lang b/htdocs/langs/ru_RU/help.lang index e28a5f74611..6e0f564a311 100644 --- a/htdocs/langs/ru_RU/help.lang +++ b/htdocs/langs/ru_RU/help.lang @@ -1,7 +1,7 @@ # Dolibarr language file - Source file is en_US - help CommunitySupport=Поддержка через Форум/Wiki EMailSupport=Поддержка по email -RemoteControlSupport=Поддержка через Интернет в реальном времени/удаленно +RemoteControlSupport=Online real-time / remote support OtherSupport=Другие виды поддержки ToSeeListOfAvailableRessources=Связаться/Смотреть имеющиеся ресурсы: HelpCenter=Справочный центр diff --git a/htdocs/langs/ru_RU/holiday.lang b/htdocs/langs/ru_RU/holiday.lang index f9c08748017..0288ac3768f 100644 --- a/htdocs/langs/ru_RU/holiday.lang +++ b/htdocs/langs/ru_RU/holiday.lang @@ -1,7 +1,7 @@ # Dolibarr language file - Source file is en_US - holiday HRM=Отдел кадров -Holidays=Leave -CPTitreMenu=Leave +Holidays=Отпуск +CPTitreMenu=Отпуск MenuReportMonth=Ежемесячная выписка MenuAddCP=New leave request NotActiveModCP=You must enable the module Leave to view this page. diff --git a/htdocs/langs/ru_RU/hrm.lang b/htdocs/langs/ru_RU/hrm.lang index ead8b8c54d2..ba41b26f209 100644 --- a/htdocs/langs/ru_RU/hrm.lang +++ b/htdocs/langs/ru_RU/hrm.lang @@ -5,13 +5,13 @@ Establishments=Establishments Establishment=Establishment NewEstablishment=New establishment DeleteEstablishment=Delete establishment -ConfirmDeleteEstablishment=Are-you sure to delete this establishment? +ConfirmDeleteEstablishment=Are you sure you wish to delete this establishment? OpenEtablishment=Open establishment CloseEtablishment=Close establishment # Dictionary DictionaryDepartment=HRM - Department list DictionaryFunction=HRM - Function list # Module -Employees=Employees +Employees=Сотрудники Employee=Сотрудник NewEmployee=New employee diff --git a/htdocs/langs/ru_RU/main.lang b/htdocs/langs/ru_RU/main.lang index 2358fc8d01d..16888bfd4c2 100644 --- a/htdocs/langs/ru_RU/main.lang +++ b/htdocs/langs/ru_RU/main.lang @@ -40,7 +40,7 @@ ErrorFileDoesNotExists=Файл %s не существует ErrorFailedToOpenFile=Не удалось открыть файл %s ErrorCanNotCreateDir=Не удалось создать папку %s ErrorCanNotReadDir=Не удалось прочитать папку %s -ErrorConstantNotDefined=Параметр s% не определен +ErrorConstantNotDefined=Параметр %s не определен ErrorUnknown=Неизвестная ошибка ErrorSQL=Ошибка SQL ErrorLogoFileNotFound=Файл логотипа '%s' не найден @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Не удалось отправить почту (отп ErrorFileNotUploaded=Файл не был загружен. Убедитесь, что его размер не превышает максимально допустимое значение, свободное место имеется на диске, и файл с таким же именем не существует в этом каталоге. ErrorInternalErrorDetected=Обнаружена ошибка ErrorWrongHostParameter=Неверный параметр хоста -ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again. -ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record. +ErrorYourCountryIsNotDefined=Ваша страна не определена. Перейдите Главная-Настройки-Редактировать и снова отправьте форму. +ErrorRecordIsUsedByChild=Не удалось удалить эту запись. Эта запись используется, по крайней мере, одной дочерней записью. ErrorWrongValue=Неправильное значение ErrorWrongValueForParameterX=Неправильное значение параметра %s ErrorNoRequestInError=В ошибке нет никаких запросов -ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later. +ErrorServiceUnavailableTryLater=Служба недоступна. Попробуйте позже. ErrorDuplicateField=Повторяющееся значение в уникальном поле -ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back. -ErrorConfigParameterNotDefined=Parameter %s is not defined in the Dolibarr config file conf.php. +ErrorSomeErrorWereFoundRollbackIsDone=Были обнаружены некоторые ошибки. Изменения были отменены. +ErrorConfigParameterNotDefined=Параметр %s не определен в конфигурационном файле Dolibarr conf.php . ErrorCantLoadUserFromDolibarrDatabase=Не удалось найти пользователя %s в базе данных Dolibarr. ErrorNoVATRateDefinedForSellerCountry=Ошибка, ставки НДС не установлены для страны '%s'. ErrorNoSocialContributionForSellerCountry=Ошибка, не определен тип социальных/налоговых взносов для страны %s. ErrorFailedToSaveFile=Ошибка, не удалось сохранить файл. -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a existing warehouse -MaxNbOfRecordPerPage=Max. number of records per page +ErrorCannotAddThisParentWarehouse=Вы пытаетесь добавить родительский склад, который уже является дочерним по отношению к существующему складу +MaxNbOfRecordPerPage=Макс. количество записей на странице NotAuthorized=Вы не авторизованы чтобы сделать это. SetDate=Установить дату SelectDate=Выбрать дату @@ -78,15 +78,15 @@ FileRenamed=Файл успешно переименован FileGenerated=Файл успешно создан FileSaved=Файл сохранен FileUploaded=Файл успешно загружен -FileTransferComplete=File(s) uploaded successfully +FileTransferComplete=Файл(ы) успешно загружены FilesDeleted=Файл(ы) успешно удалены FileWasNotUploaded=Файл выбран как вложение, но пока не загружен. Для этого нажмите "Вложить файл". -NbOfEntries=No. of entries +NbOfEntries=Кол-во записей GoToWikiHelpPage=Читать интернет-справку (необходим доступ к Интернету) GoToHelpPage=Читать помощь RecordSaved=Запись сохранена RecordDeleted=Запись удалена -RecordGenerated=Record generated +RecordGenerated=Запись сгенерирована LevelOfFeature=Уровень возможностей NotDefined=Неопределено DolibarrInHttpAuthenticationSoPasswordUseless=Режим аутентификации Dolibarr установлен в %s в файле конфигурации conf.php.
Это означает, что Dolibarr хранит пароли во внешней базе, поэтому изменение этого поля может не помочь. @@ -96,13 +96,13 @@ PasswordForgotten=Забыли пароль? NoAccount=Нет аккаунта? SeeAbove=См. выше HomeArea=Главная -LastConnexion=Last login -PreviousConnexion=Previous login +LastConnexion=Последний вход +PreviousConnexion=Предыдущий вход PreviousValue=Предыдущее значение ConnectedOnMultiCompany=Подключено к объекту ConnectedSince=Подключено с AuthenticationMode=Режим аутентификации -RequestedUrl=Запрашиваемый Url +RequestedUrl=Запрашиваемый URL DatabaseTypeManager=Менеджер типов баз данных RequestLastAccessInError=Ошибка при последнем запросе доступа к базе данных ReturnCodeLastAccessInError=Код ошибки при последнем запросе доступа к базе данных @@ -119,7 +119,7 @@ PrecisionUnitIsLimitedToXDecimals=Dolibarr был настроен на огра DoTest=Проверка ToFilter=Фильтр NoFilter=Нет фильтра -WarningYouHaveAtLeastOneTaskLate=Warning, you have at least one element that has exceeded the tolerance time. +WarningYouHaveAtLeastOneTaskLate=Внимание, у вас есть хотя бы один элемент, который превысил допустимое время. yes=да Yes=Да no=нет @@ -153,9 +153,9 @@ RemoveLink=Удалить ссылку AddToDraft=Добавить к черновику Update=Обновить Close=Закрыть -CloseBox=Удалить виджет с главного экрана +CloseBox=Удалить виджет с Информ-панели Confirm=Подтвердить -ConfirmSendCardByMail=Do you really want to send the content of this card by mail to %s? +ConfirmSendCardByMail=Отправить содержимое этой карты по почте на %s ? Delete=Удалить Remove=Удалить Resiliate=Завершить @@ -170,7 +170,7 @@ Save=Сохранить SaveAs=Сохранить как TestConnection=Проверка подключения ToClone=Дублировать -ConfirmClone=Choose data you want to clone: +ConfirmClone=Выберите данные для клонирования: NoCloneOptionsSpecified=Данные для дублирования не определены. Of=из Go=Выполнить @@ -182,10 +182,10 @@ ShowCardHere=Показать карточку Search=Поиск SearchOf=Поиск Valid=Действительный -Approve=Одобрить +Approve=Утвердить Disapprove=Не утверждать ReOpen=Переоткрыть -Upload=Upload +Upload=Загрузить ToLink=Ссылка Select=Выбор Choose=Выберите @@ -200,9 +200,9 @@ Groups=Группы NoUserGroupDefined=Не задана группа для пользователя Password=Пароль PasswordRetype=Повторите ваш пароль -NoteSomeFeaturesAreDisabled=Обратите внимание, что многие возможности/модули отключены в этой демонстрации. +NoteSomeFeaturesAreDisabled=Обратите внимание, что многие функции/модули отключены в этой демонстрации. Name=Имя -NameSlashCompany=Name / Company +NameSlashCompany=Имя / Компания Person=Персона Parameter=Параметр Parameters=Параметры @@ -224,8 +224,8 @@ Family=Семья Description=Описание Designation=Описание DescriptionOfLine=Описание строки -DateOfLine=Date of line -DurationOfLine=Duration of line +DateOfLine=Дата строки +DurationOfLine=Продолжительность строки Model=Шаблон документа DefaultModel=Шаблон документа по-умолчанию Action=Действие @@ -237,7 +237,7 @@ Numero=Номер Limit=Лимит Limits=Лимиты Logout=Выход -NoLogoutProcessWithAuthMode=Нет возможности разрыва соединения с этим режимим аунтетификации %s +NoLogoutProcessWithAuthMode=Нет возможности разрыва соединения с этим режимом аунтетификации %s Connection=Логин Setup=Настройка Alert=Оповещение @@ -309,12 +309,12 @@ Yesterday=Вчера Tomorrow=Завтра Morning=Утро Afternoon=После полудня -Quadri=Квадри +Quadri=Квартал MonthOfDay=Месяц дня HourShort=ч MinuteShort=мин. Rate=Курс -CurrencyRate=Текущий уровень конверсии +CurrencyRate=Курс обмена валют UseLocalTax=Включить налог Bytes=Байт KiloBytes=Килобайт @@ -333,49 +333,49 @@ Copy=Копировать Paste=Вставить Default=По умолчанию DefaultValue=Значение по умолчанию -DefaultValues=Default values/filters/sorting +DefaultValues=Значения/фильтры/сортировка по умолчанию Price=Цена PriceCurrency=Цена (валюта) UnitPrice=Цена за единицу -UnitPriceHT=Unit price (excl.) -UnitPriceHTCurrency=Unit price (excl.) (currency) +UnitPriceHT=Цена за единицу (без учета налога) +UnitPriceHTCurrency=Цена за единицу (без налога) (валюта) UnitPriceTTC=Цена за единицу PriceU=Цена ед. PriceUHT=Цена ед. (нетто) -PriceUHTCurrency=цена (текущая) -PriceUTTC=Цена ед. (с тарой) +PriceUHTCurrency=Цена (валюта) +PriceUTTC=Цена ед. (с налогом) Amount=Сумма AmountInvoice=Сумма счета-фактуры AmountInvoiced=Сумма выставленного счета AmountPayment=Сумма платежа -AmountHTShort=Amount (excl.) +AmountHTShort=Сумма (без налога) AmountTTCShort=Сумма (вкл-я налог) -AmountHT=Amount (excl. tax) +AmountHT=Сумма (без налога) AmountTTC=Сумма (вкл-я налог) AmountVAT=Сумма НДС -MulticurrencyAlreadyPaid=Already paid, original currency +MulticurrencyAlreadyPaid=Уже оплачено, в исходной валюте MulticurrencyRemainderToPay=Осталось оплатить, в оригинальной валюте MulticurrencyPaymentAmount=Сумма платежа, в оригинальной валюте -MulticurrencyAmountHT=Amount (excl. tax), original currency -MulticurrencyAmountTTC=Сумма (брутто), в исходной валюте +MulticurrencyAmountHT=Сумма (без налога), исходная валюта +MulticurrencyAmountTTC=Сумма (с налогом), в исходной валюте MulticurrencyAmountVAT=Сумма налога, в исходной валюте AmountLT1=Сумма налога 2 AmountLT2=Сумма налога 3 AmountLT1ES=Сумма RE -AmountLT2ES=Сумма IRPF +AmountLT2ES=Сумма НДФЛ AmountTotal=Общая сумма AmountAverage=Средняя сумма -PriceQtyMinHT=Price quantity min. (excl. tax) -PriceQtyMinHTCurrency=Price quantity min. (excl. tax) (currency) +PriceQtyMinHT=Цена за мин. количество (без налога) +PriceQtyMinHTCurrency=Цена за мин. количество (без налога) (валюта) Percentage=Процент Total=Всего SubTotal=Подитог -TotalHTShort=Total (excl.) -TotalHT100Short=Total 100%% (excl.) -TotalHTShortCurrency=Total (excl. in currency) +TotalHTShort=Всего (без налога) +TotalHT100Short=Всего 100%% (без налога) +TotalHTShortCurrency=Всего (без налога в \nоригинальной валюте) TotalTTCShort=Всего (вкл-я налог) -TotalHT=Total (excl. tax) -TotalHTforthispage=Total (excl. tax) for this page +TotalHT=Всего (без налога) +TotalHTforthispage=Всего (без налога) для этой страницы Totalforthispage=Итого для этой страницы TotalTTC=Всего (вкл-я налог) TotalTTCToYourCredit=Всего (вкл-я налог) с Вашей кредитной @@ -387,9 +387,9 @@ TotalLT1ES=Всего RE TotalLT2ES=Всего IRPF TotalLT1IN=Всего CGST TotalLT2IN=Всего SGST -HT=Excl. tax +HT=Без налога TTC=Вкл-я налог -INCVATONLY=Inc. НДС +INCVATONLY=вкл. НДС INCT=включая все налоги VAT=НДС VATIN=IGST @@ -403,7 +403,7 @@ LT1ES=RE LT2ES=IRPF LT1IN=CGST LT2IN=SGST -LT1GC=Additionnal cents +LT1GC=Дополнительные центы VATRate=Ставка НДС VATCode=Код ставки налога VATNPR=Налоговая ставка NPR @@ -411,7 +411,7 @@ DefaultTaxRate=Ставка налога по умолчанию Average=Среднее Sum=Сумма Delta=Разница -RemainToPay=Оставаться в оплате +RemainToPay=Осталось заплатить Module=Модуль/Приложение Modules=Модули/Приложения Option=Опция @@ -424,7 +424,7 @@ Favorite=Избранное ShortInfo=Инфо Ref=Ссылка ExternalRef=Внешний источник -RefSupplier=Ссылка продавец +RefSupplier=Ссылка поставщика RefPayment=Ссылка на оплату CommercialProposalsShort=Коммерческие предложения Comment=Комментарий @@ -436,15 +436,15 @@ ActionNotApplicable=Не применяется ActionRunningNotStarted=Не начато ActionRunningShort=Выполняется ActionDoneShort=Завершено -ActionUncomplete=Incomplete +ActionUncomplete=Не завершено LatestLinkedEvents=Последние связанные события %s -CompanyFoundation=Компания / организация +CompanyFoundation=Компания/Организация Accountant=Бухгалтер -ContactsForCompany=Контакты для этого контрагента контрагента +ContactsForCompany=Контакты для этого контрагента ContactsAddressesForCompany=Контакты/Адреса для этого контрагента AddressesForCompany=Адреса для этого контарагента -ActionsOnCompany=Events for this third party -ActionsOnContact=Events for this contact/address +ActionsOnCompany=События для этого контрагента +ActionsOnContact=Событие для этого контакта/адреса ActionsOnMember=События этого участника ActionsOnProduct=События об этом продукте NActionsLate=% с опозданием @@ -462,8 +462,8 @@ Generate=Создать Duration=Продолжительность TotalDuration=Общая продолжительность Summary=Общее -DolibarrStateBoard=Database Statistics -DolibarrWorkBoard=Open Items +DolibarrStateBoard=Статистика базы данных +DolibarrWorkBoard=Открытые позиции NoOpenedElementToProcess=Нет открытого элемента для обработки Available=Доступно NotYetAvailable=Пока не доступно @@ -477,7 +477,7 @@ and=и or=или Other=Другой Others=Другие -OtherInformations=Other information +OtherInformations=Дополнительная информация Quantity=Количество Qty=Кол-во ChangedBy=Изменен @@ -491,11 +491,11 @@ Reporting=Отчет Reportings=Отчеты Draft=Черновик Drafts=Черновики -StatusInterInvoiced=Invoiced +StatusInterInvoiced=Выставлен счет Validated=Подтверждено Opened=Открытые -OpenAll=Open (All) -ClosedAll=Closed (All) +OpenAll=Открыто (Все) +ClosedAll=Закрыто (все) New=Новый Discount=Скидка Unknown=Неизвестно @@ -505,7 +505,7 @@ OriginalSize=Оригинальный размер Received=Получено Paid=Оплачено Topic=Тема -ByCompanies=По компаниям +ByCompanies=По контрагентам ByUsers=Пользователь Links=Ссылки Link=Ссылка @@ -517,7 +517,7 @@ None=Никакой NoneF=Никакой NoneOrSeveral=Нет или несколько Late=Поздно -LateDesc=An item is defined as Delayed as per the system configuration in menu Home - Setup - Alerts. +LateDesc=Элемент определяется как «Задержанный» согласно конфигурации системы в меню «Домой» - «Настройка» - «Оповещения». NoItemLate=Нет позднего пункта Photo=Изображение Photos=Изображения @@ -565,29 +565,29 @@ MonthShort09=сен MonthShort10=окт MonthShort11=ноя MonthShort12=дек -MonthVeryShort01=J -MonthVeryShort02=Пт -MonthVeryShort03=Пн +MonthVeryShort01=Я +MonthVeryShort02=Ф +MonthVeryShort03=М MonthVeryShort04=A -MonthVeryShort05=Пн -MonthVeryShort06=J -MonthVeryShort07=J +MonthVeryShort05=М +MonthVeryShort06=И +MonthVeryShort07=И MonthVeryShort08=A -MonthVeryShort09=Вс +MonthVeryShort09=С MonthVeryShort10=O -MonthVeryShort11=N -MonthVeryShort12=D +MonthVeryShort11=Н +MonthVeryShort12=Д AttachedFiles=Присоединенные файлы и документы JoinMainDoc=Присоединить основной документ DateFormatYYYYMM=ГГГГ-ММ DateFormatYYYYMMDD=ГГГГ-ММ-ДД DateFormatYYYYMMDDHHMM=ГГГГ-ММ-ДД ЧЧ:СС ReportName=Имя отчета -ReportPeriod=Отчетный период +ReportPeriod=Период отчета ReportDescription=Описание Report=Отчет Keyword=Ключевое слово -Origin=Оригинальный +Origin=Происхождение Legend=Легенда Fill=Заполнить Reset=Сбросить @@ -595,7 +595,7 @@ File=Файл Files=Файлы NotAllowed=Недопустимо ReadPermissionNotAllowed=Разрешение на чтение не предоставлено -AmountInCurrency=Сумма в валюте %s +AmountInCurrency=Сумма в %s валюте Example=Пример Examples=Примеры NoExample=Нет примеров @@ -637,15 +637,15 @@ FeatureNotYetSupported=Функция не поддерживается CloseWindow=Закрыть окно Response=Ответ Priority=Приоритет -SendByMail=Send by email +SendByMail=Послать по электронной почте MailSentBy=Email отправлен TextUsedInTheMessageBody=Текст Email SendAcknowledgementByMail=Отправить подтверждение на электронную почту SendMail=Отправить письмо Email=Адрес электронной почты NoEMail=Нет Email -AlreadyRead=Already read -NotRead=Not read +AlreadyRead=Прочитано +NotRead=Не прочитано NoMobilePhone=Нет мобильного телефона Owner=Владелец FollowingConstantsWillBeSubstituted=Следующие константы будут подменять соответствующие значения. @@ -658,9 +658,9 @@ ValueIsValid=Значение корректено ValueIsNotValid=Значение не действительно RecordCreatedSuccessfully=Запись успешно создана RecordModifiedSuccessfully=Запись успешно изменена -RecordsModified=%s record(s) modified -RecordsDeleted=%s record(s) deleted -RecordsGenerated=%s record(s) generated +RecordsModified=%s запись(ей) изменено +RecordsDeleted=%s запись(ей) удалено +RecordsGenerated=%s запись(ей) создано AutomaticCode=Автоматический код FeatureDisabled=Функция отключена MoveBox=Переместить виджет @@ -673,11 +673,11 @@ CompleteOrNoMoreReceptionExpected=Завершено или ничего бол ExpectedValue=Ожидаемое значение PartialWoman=Частичное TotalWoman=Всего -NeverReceived=Никогда не получено +NeverReceived=Не было получено Canceled=Отменено YouCanChangeValuesForThisListFromDictionarySetup=Можно изменить содержание этого списка в Главная - Настройка - Словари YouCanChangeValuesForThisListFrom=Можно изменить значения этого списка из меню %s -YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup +YouCanSetDefaultValueInModuleSetup=Вы можете установить значение по умолчанию, используемое при создании новой записи в настройках модуля Color=Цвет Documents=Связанные файлы Documents2=Документы @@ -685,7 +685,7 @@ UploadDisabled=Загрузка отключена MenuAccountancy=Бухгалтерия MenuECM=Документы MenuAWStats=AWStats -MenuMembers=Члены +MenuMembers=Участники MenuAgendaGoogle=Google agenda ThisLimitIsDefinedInSetup=Лимит Dolibarr (Меню Главная-Настройки-Безопасность): %s Кб, лимит PHP: %s Кб NoFileFound=Нет документов, сохраненных в этом каталоге @@ -709,23 +709,23 @@ Notes=Примечания AddNewLine=Добавить новую строку AddFile=Добавить файл FreeZone=Не предопределенный продукт/услуга -FreeLineOfType=Free-text item, type: +FreeLineOfType=Элемент произвольного текста, набрать: CloneMainAttributes=Клонирование объекта с его основными атрибутами -ReGeneratePDF=Re-generate PDF +ReGeneratePDF=Повторно сгенерировать PDF PDFMerge=Слияние PDF Merge=Слияние DocumentModelStandardPDF=Стандартные PDF-шаблоны PrintContentArea=Показать страницу для печати области основного содержимого MenuManager=Менеджер меню -WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode: only login %s is allowed to use the application in this mode. +WarningYouAreInMaintenanceMode=Внимание, вы находитесь в режиме обслуживания: только пользователь %s может использовать приложение в этом режиме. CoreErrorTitle=Системная ошибка CoreErrorMessage=Извините, произошла ошибка. Для получения большей информации свяжитесь с системным администратором для проверки технических событий или отключения $dolibarr_main_prod=1. CreditCard=Кредитная карта ValidatePayment=Подтвердть платёж CreditOrDebitCard=Кредитная или дебетовая карта FieldsWithAreMandatory=Поля с %s являются обязательными -FieldsWithIsForPublic=Fields with %s are shown in public list of members. If you don't want this, uncheck the "public" box. -AccordingToGeoIPDatabase=(according to GeoIP conversion) +FieldsWithIsForPublic=Поля с %s отображаются в общедоступном списке участников. Если вы не хотите этого, снимите флажок «публичный». +AccordingToGeoIPDatabase=(согласно преобразования GeoIP) Line=Строка NotSupported=Не поддерживается RequiredField=Обязательное поле @@ -733,8 +733,8 @@ Result=Результат ToTest=Тест ValidateBefore=Карточка должна быть проверена, прежде чем использовать эту функцию Visibility=Видимость -Totalizable=Totalizable -TotalizableDesc=This field is totalizable in list +Totalizable=Суммирование +TotalizableDesc=Это поле суммируемо в списке Private=Частный Hidden=Скрытый Resources=Ресурсы @@ -748,43 +748,43 @@ IM=Мгновенный обмен сообщениями NewAttribute=Новый атрибут AttributeCode=Код атрибута URLPhoto=Адрес фотографии/логотипа -SetLinkToAnotherThirdParty=Ссылка на другой третьей стороне +SetLinkToAnotherThirdParty=Ссылка на другого контрагента LinkTo=Ссылка к LinkToProposal=Ссылка для предложения LinkToOrder=Ссылка для заказа LinkToInvoice=Ссылка для счета -LinkToTemplateInvoice=Link to template invoice -LinkToSupplierOrder=Link to purchase order -LinkToSupplierProposal=Link to vendor proposal -LinkToSupplierInvoice=Link to vendor invoice +LinkToTemplateInvoice=Ссылка на шаблон счета +LinkToSupplierOrder=Ссылка на заказ на покупку +LinkToSupplierProposal=Ссылка на предложение поставщика +LinkToSupplierInvoice=Ссылка на счет поставщика LinkToContract=Ссылка на контакт LinkToIntervention=Ссылка на мероприятие -CreateDraft=Создать проект +CreateDraft=Создать черновик SetToDraft=Назад к черновику ClickToEdit=Нажмите, чтобы изменить -ClickToRefresh=Click to refresh +ClickToRefresh=Нажмите для обновления EditWithEditor=Изменить с помощью CKEditor EditWithTextEditor=Редактировать с помощью текстового редактора EditHTMLSource=Редактировать HTML-источник -ObjectDeleted=Объект удален %s +ObjectDeleted=Объект %s удален ByCountry=По стране -ByTown=В городе +ByTown=по городу ByDate=По дате -ByMonthYear=В месяц / год +ByMonthYear=по месяцу/году ByYear=По годам ByMonth=по месяцам -ByDay=Днем -BySalesRepresentative=По торговым представителем +ByDay=по дням +BySalesRepresentative=По торговым представителям LinkedToSpecificUsers=Связан с особым контактом пользователя NoResults=Нет результатов -AdminTools=Admin Tools +AdminTools=Инструменты администратора SystemTools=Системные инструменты ModulesSystemTools=Настройки модулей Test=Тест Element=Элемент -NoPhotoYet=Пока недо доступных изображений -Dashboard=Начальная страница -MyDashboard=My Dashboard +NoPhotoYet=Пока нет доступных изображений +Dashboard=Информ-панель +MyDashboard=Моя Информ-панель Deductible=Подлежащий вычету from=от toward=к @@ -807,7 +807,7 @@ PrintFile=Печать файл %s ShowTransaction=Показать транзакцию на банковском счете ShowIntervention=Показать посредничества ShowContract=Показать договор -GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide. +GoIntoSetupToChangeLogo=Перейдите в раздел «Главная» - «Настройка» - «Компания», чтобы изменить логотип, или выберите «Главная» - «Настройка» - «Внешний вид», чтобы скрыть. Deny=Запретить Denied=Запрещено ListOf=Список %s @@ -820,77 +820,77 @@ Mandatory=Обязательно Hello=Здравствуйте GoodBye=До свидания Sincerely=С уважением, -DeleteLine=Удалить строки +DeleteLine=Удалить строку ConfirmDeleteLine=Вы точно хотите удалить эту строку? NoPDFAvailableForDocGenAmongChecked=PDF не доступен для документов созданных из выбранных записей -TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records. +TooManyRecordForMassAction=Слишком много записей выбрано для пакетного действия. Действие ограничено списком из %s записей. NoRecordSelected=Нет выделенных записей -MassFilesArea=Пространство для массовых действий с файлами -ShowTempMassFilesArea=Показать область для массовых действий с файлами -ConfirmMassDeletion=Bulk Delete confirmation -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record(s)? +MassFilesArea=Пространство для пакетных действий с файлами +ShowTempMassFilesArea=Показать область для пакетных действий с файлами +ConfirmMassDeletion=Подтверждение пакетного удаления +ConfirmMassDeletionQuestion=Вы уверены, что хотите удалить %s выбранных записей? RelatedObjects=Связанные объекты -ClassifyBilled=Классифицировать счета -ClassifyUnbilled=Классифицировать невыполненные +ClassifyBilled=Классифицировать выставленные счета +ClassifyUnbilled=Классифицировать невыполненные счета Progress=Прогресс -ProgressShort=Progr. +ProgressShort=Прогресс FrontOffice=Дирекция BackOffice=Бэк-офис View=Вид Export=Экспорт Exports=Экспорт -ExportFilteredList=Экспорт списка фильтров +ExportFilteredList=Экспорт отфильтрованного списка ExportList=Экспорт списка ExportOptions=Настройки экспорта -IncludeDocsAlreadyExported=Include docs already exported -ExportOfPiecesAlreadyExportedIsEnable=Export of pieces already exported is enable -ExportOfPiecesAlreadyExportedIsDisable=Export of pieces already exported is disable -AllExportedMovementsWereRecordedAsExported=All exported movements were recorded as exported -NotAllExportedMovementsCouldBeRecordedAsExported=Not all exported movements could be recorded as exported +IncludeDocsAlreadyExported=Включенные документы уже экспортированы +ExportOfPiecesAlreadyExportedIsEnable=Экспорт уже экспортированных частей включен +ExportOfPiecesAlreadyExportedIsDisable=Экспорт уже экспортированных частей отключен +AllExportedMovementsWereRecordedAsExported=Все экспортированные движения были зарегистрированы как экспортировано +NotAllExportedMovementsCouldBeRecordedAsExported=Не все экспортированные движения могут быть зарегистрированы как экспортировано Miscellaneous=Разное Calendar=Календарь GroupBy=Группировка по... ViewFlatList=Вид плоским списком RemoveString=Удалить строку '%s' -SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at https://transifex.com/projects/p/dolibarr/ to add your improvements. +SomeTranslationAreUncomplete=Некоторые из предлагаемых языков пакетов могут быть переведены только частично или могут содержать ошибки. Пожалуйста, помогите исправить ваш язык, зарегистрировавшись по адресу https://transifex.com/projects/p/dolibarr/, чтобы добавить свои улучшения. DirectDownloadLink=Прямая ссылка для скачивания (общедоступная/внешняя) DirectDownloadInternalLink=Прямая ссылка для скачивания (требуется регистрация и необходимые разрешения) Download=Загрузка DownloadDocument=Скачать документ ActualizeCurrency=Обновить текущий курс Fiscalyear=Финансовый год -ModuleBuilder=Module and Application Builder +ModuleBuilder=Конструктор Модулей и Приложений SetMultiCurrencyCode=Настройка валюты BulkActions=Массовые действия ClickToShowHelp=Нажмите для отображения подсказок -WebSite=Website +WebSite=Веб-сайт WebSites=Веб-сайты -WebSiteAccounts=Website accounts +WebSiteAccounts=Аккаунты сайта ExpenseReport=Отчёт о затратах ExpenseReports=Отчёты о затратах HR=Кадры HRAndBank=Кадры и Банк AutomaticallyCalculated=Автоматический подсчет TitleSetToDraft=Вернуться к черновику -ConfirmSetToDraft=Are you sure you want to go back to Draft status? +ConfirmSetToDraft=Вы уверены, что хотите вернуть статус Черновик? ImportId=Импорт идентификатора Events=События -EMailTemplates=Email templates -FileNotShared=File not shared to external public +EMailTemplates=Шаблоны электронной почты +FileNotShared=Файл не доступен для внешних пользователей Project=Проект Projects=Проекты -LeadOrProject=Lead | Project -LeadsOrProjects=Leads | Projects -Lead=Lead -Leads=Leads -ListOpenLeads=List open leads -ListOpenProjects=List open projects -NewLeadOrProject=New lead or project +LeadOrProject=Сделка | Проект +LeadsOrProjects=Сделки | Проекты +Lead=Сделка +Leads=Сделки +ListOpenLeads=Список открытых сделок +ListOpenProjects=Список открытых проектов +NewLeadOrProject=Новая сделка или проект Rights=Права доступа LineNb=Номер строки IncotermLabel=Обязанности по доставке товаров -TabLetteringCustomer=Customer lettering -TabLetteringSupplier=Vendor lettering +TabLetteringCustomer=Обозначение клиента +TabLetteringSupplier=Обозначение поставщика Monday=Понедельник Tuesday=Вторник Wednesday=Среда @@ -938,7 +938,7 @@ SearchIntoProjects=Проекты SearchIntoTasks=Задание SearchIntoCustomerInvoices=Счета клиента SearchIntoSupplierInvoices=Счета-фактуры поставщика -SearchIntoCustomerOrders=Sales orders +SearchIntoCustomerOrders=Заказы на продажу SearchIntoSupplierOrders=Заказы SearchIntoCustomerProposals=Предложения клиенту SearchIntoSupplierProposals=Предложения поставщиков @@ -946,16 +946,16 @@ SearchIntoInterventions=Мероприятия SearchIntoContracts=Договоры SearchIntoCustomerShipments=Отгрузки клиентам SearchIntoExpenseReports=Отчёты о затратах -SearchIntoLeaves=Leave -SearchIntoTickets=Tickets +SearchIntoLeaves=Отпуск +SearchIntoTickets=Заявки CommentLink=Комментарии NbComments=Количество комментариев CommentPage=Комментарии CommentAdded=Комментарий добавлен CommentDeleted=Комментарий удален Everybody=Общий проект -PayedBy=Paid by -PayedTo=Paid to +PayedBy=Оплачивается +PayedTo=Оплатить до Monthly=ежемесячно Quarterly=Ежеквартальный Annual=годовой @@ -964,18 +964,18 @@ Remote=Удаленный LocalAndRemote=Локальные и удаленные KeyboardShortcut=Сочетание клавиш AssignedTo=Ответств. -Deletedraft=Удалить проект -ConfirmMassDraftDeletion=Draft mass delete confirmation +Deletedraft=Удалить черновик +ConfirmMassDraftDeletion=Подтверждение пакетного удаления Черновиков FileSharedViaALink=Файл, общий доступ по ссылке -SelectAThirdPartyFirst=Select a third party first... -YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode -Inventory=Inventory -AnalyticCode=Analytic code -TMenuMRP=MRP -ShowMoreInfos=Show More Infos -NoFilesUploadedYet=Please upload a document first -SeePrivateNote=See private note -PaymentInformation=Payment information -ValidFrom=Valid from -ValidUntil=Valid until -NoRecordedUsers=No users +SelectAThirdPartyFirst=Сначала выберите контрагента ... +YouAreCurrentlyInSandboxMode=В настоящее время вы в %s режиме "песочницы" +Inventory=Инвентаризация +AnalyticCode=Аналитический код +TMenuMRP=ППМ +ShowMoreInfos=Показать больше информации +NoFilesUploadedYet=Пожалуйста, загрузите сначала документ +SeePrivateNote=Смотреть личную заметку +PaymentInformation=Платежная информация +ValidFrom=Действительно с +ValidUntil=Действительно до +NoRecordedUsers=Нет пользователей diff --git a/htdocs/langs/ru_RU/orders.lang b/htdocs/langs/ru_RU/orders.lang index 78bbbe496b1..d8e19ddf9e1 100644 --- a/htdocs/langs/ru_RU/orders.lang +++ b/htdocs/langs/ru_RU/orders.lang @@ -17,7 +17,7 @@ SupplierOrder=Purchase order SuppliersOrders=Заказы SuppliersOrdersRunning=Current purchase orders CustomerOrder=Sales Order -CustomersOrders=Sales Orders +CustomersOrders=Заказы на продажу CustomersOrdersRunning=Current sales orders CustomersOrdersAndOrdersLines=Sales orders and order details OrdersDeliveredToBill=Sales orders delivered to bill diff --git a/htdocs/langs/ru_RU/other.lang b/htdocs/langs/ru_RU/other.lang index 93c750185ee..dec0f019432 100644 --- a/htdocs/langs/ru_RU/other.lang +++ b/htdocs/langs/ru_RU/other.lang @@ -48,7 +48,7 @@ Notify_COMPANY_CREATE=Третья партия, созданная Notify_COMPANY_SENTBYMAIL=Mails sent from third party card Notify_BILL_VALIDATE=Проверка векселя Notify_BILL_UNVALIDATE=Счёт клиента не подтверждён -Notify_BILL_PAYED=Customer invoice paid +Notify_BILL_PAYED=Счет клиента оплачен Notify_BILL_CANCEL=Счёт клиента отменён Notify_BILL_SENTBYMAIL=Клиенту счет-фактура высылается по почте Notify_BILL_SUPPLIER_VALIDATE=Vendor invoice validated @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=Посредничество %s проверено. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/ru_RU/resource.lang b/htdocs/langs/ru_RU/resource.lang index 8f778006f60..11ab6d3ba69 100644 --- a/htdocs/langs/ru_RU/resource.lang +++ b/htdocs/langs/ru_RU/resource.lang @@ -5,7 +5,7 @@ DeleteResource=Удалить ресурс ConfirmDeleteResourceElement=Подтвердите удаление ресурса для этого элемента NoResourceInDatabase=Нет ресурсов в базе данных NoResourceLinked=Нет связанных ресурсов - +ActionsOnResource=События из этого ресурсе ResourcePageIndex=Список ресурсов ResourceSingular=Ресурс ResourceCard=Карточка ресурса diff --git a/htdocs/langs/ru_RU/salaries.lang b/htdocs/langs/ru_RU/salaries.lang index b8079813a21..a9ed4d4a6f7 100644 --- a/htdocs/langs/ru_RU/salaries.lang +++ b/htdocs/langs/ru_RU/salaries.lang @@ -1,21 +1,21 @@ # Dolibarr language file - Source file is en_US - salaries -SALARIES_ACCOUNTING_ACCOUNT_PAYMENT=Accounting account used for user third parties -SALARIES_ACCOUNTING_ACCOUNT_PAYMENT_Desc=The dedicated accounting account defined on user card will be used for Subledger accounting only. This one will be used for General Ledger and as default value of Subledger accounting if dedicated user accounting account on user is not defined. -SALARIES_ACCOUNTING_ACCOUNT_CHARGE=Accounting account by default for wage payments +SALARIES_ACCOUNTING_ACCOUNT_PAYMENT=Учет используется для пользователей контрагентов +SALARIES_ACCOUNTING_ACCOUNT_PAYMENT_Desc=Выделенный бухгалтерский счет, указанный в карточке пользователя, будет использоваться только для учета во вспомогательной книги. Этот будет использоваться для Главной книги и в качестве значения по умолчанию для учета вспомогательной книги, если выделенная пользовательский бухгалтерский счет для пользователя не определен. +SALARIES_ACCOUNTING_ACCOUNT_CHARGE=Бухгалтерский счет по умолчанию для выплат заработной платы Salary=Зарплата Salaries=Зарплаты NewSalaryPayment=Новая выплата зарплаты -AddSalaryPayment=Add salary payment +AddSalaryPayment=Добавить выплату зарплаты SalaryPayment=Выплата зарплаты SalariesPayments=Выплата зарплат ShowSalaryPayment=Показать выплату зарплаты -THM=Average hourly rate -TJM=Average daily rate +THM=Средняя почасовая ставка +TJM=Среднесуточная ставка CurrentSalary=Текущая зарплата -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 -SalariesStatistics=Salary statistics +THMDescription=Это значение может использоваться для расчета затрат времени, затраченного на проект, введенный пользователями, если используется модуль Проектов +TJMDescription=Это значение в настоящее время только для информации и не используется для каких-либо расчетов +LastSalaries=Последние%s выплат зарплаты +AllSalaries=Все выплаты зарплаты +SalariesStatistics=Статистика зарплаты # Export -SalariesAndPayments=Salaries and payments +SalariesAndPayments=Заработная плата и выплаты diff --git a/htdocs/langs/ru_RU/stocks.lang b/htdocs/langs/ru_RU/stocks.lang index ca909e13642..8e06ef743fb 100644 --- a/htdocs/langs/ru_RU/stocks.lang +++ b/htdocs/langs/ru_RU/stocks.lang @@ -165,7 +165,7 @@ inventoryCreatePermission=Create new inventory inventoryReadPermission=View inventories inventoryWritePermission=Update inventories inventoryValidatePermission=Validate inventory -inventoryTitle=Inventory +inventoryTitle=Инвентарная ведомость inventoryListTitle=Inventories inventoryListEmpty=No inventory in progress inventoryCreateDelete=Create/Delete inventory @@ -181,7 +181,7 @@ inventoryMvtStock=By inventory inventoryWarningProductAlreadyExists=This product is already into list SelectCategory=Категория фильтр SelectFournisseur=Vendor filter -inventoryOnDate=Inventory +inventoryOnDate=Инвентарная ведомость INVENTORY_DISABLE_VIRTUAL=Virtual product (kit): do not decrement stock of a child product INVENTORY_USE_MIN_PA_IF_NO_LAST_PA=Use the buy price if no last buy price can be found INVENTORY_USE_INVENTORY_DATE_FROM_DATEMVT=Stock movement has date of inventory diff --git a/htdocs/langs/ru_RU/suppliers.lang b/htdocs/langs/ru_RU/suppliers.lang index d9cea9beb00..d3fb1c16512 100644 --- a/htdocs/langs/ru_RU/suppliers.lang +++ b/htdocs/langs/ru_RU/suppliers.lang @@ -1,4 +1,4 @@ -# Dolibarr language file - Source file is en_US - suppliers +# Dolibarr language file - Source file is en_US - vendors Suppliers=Поставщики SuppliersInvoice=Vendor invoice ShowSupplierInvoice=Show Vendor Invoice @@ -15,15 +15,15 @@ SomeSubProductHaveNoPrices=Для некоторых подтоваров не AddSupplierPrice=Add buying price ChangeSupplierPrice=Change buying price SupplierPrices=Vendor prices -ReferenceSupplierIsAlreadyAssociatedWithAProduct=Этот поставщик ссылок уже связан со ссылкой: %s +ReferenceSupplierIsAlreadyAssociatedWithAProduct=This vendor reference is already associated with a product: %s NoRecordedSuppliers=No vendor recorded SupplierPayment=Vendor payment SuppliersArea=Vendor area RefSupplierShort=Ref. поставщик Availability=Доступность -ExportDataset_fournisseur_1=Vendor invoices list and invoice lines +ExportDataset_fournisseur_1=Vendor invoices and invoice details ExportDataset_fournisseur_2=Vendor invoices and payments -ExportDataset_fournisseur_3=Purchase orders and order lines +ExportDataset_fournisseur_3=Purchase orders and order details ApproveThisOrder=Утвердить этот заказ ConfirmApproveThisOrder=Are you sure you want to approve order %s? DenyingThisOrder=Отменить этот заказ @@ -35,13 +35,13 @@ ListOfSupplierProductForSupplier=List of products and prices for vendor %s%s
? -ConfirmDeleteUser=Are you sure you want to delete user %s? -ConfirmDeleteGroup=Are you sure you want to delete group %s? -ConfirmEnableUser=Are you sure you want to enable user %s? -ConfirmReinitPassword=Are you sure you want to generate a new password for user %s? -ConfirmSendNewPassword=Are you sure you want to generate and send new password for user %s? +ConfirmDisableUser=Вы уверены, что хотите отключить пользователя %s ? +ConfirmDeleteUser=Вы уверены, что хотите удалить пользователя %s ? +ConfirmDeleteGroup=Вы уверены, что хотите удалить группу %s ? +ConfirmEnableUser=Вы уверены, что хотите включить пользователя %s ? +ConfirmReinitPassword=Вы уверены, что хотите сгенерировать новый пароль для пользователя %s ? +ConfirmSendNewPassword=Вы уверены, что хотите сгенерировать и отправить новый пароль для пользователя %s ? NewUser=Новый пользователь CreateUser=Создать пользователя LoginNotDefined=Логин не определен. @@ -34,8 +34,8 @@ ListOfUsers=Список пользователей SuperAdministrator=Супер Администратор SuperAdministratorDesc=Администратор со всеми правами AdministratorDesc=Администратор -DefaultRights=Default Permissions -DefaultRightsDesc=Define here the default permissions that are automatically granted to a new user (to modify permissions for existing users, go to the user card). +DefaultRights=Разрешения по умолчанию +DefaultRightsDesc=Определите здесь разрешения по умолчанию , которые автоматически предоставляются новому пользователю (чтобы изменить разрешения для существующих пользователей, перейдите в карточку пользователя). DolibarrUsers=Пользователи Dolibarr LastName=Фамилия FirstName=Имя @@ -44,12 +44,12 @@ NewGroup=Новая группа CreateGroup=Создать группу RemoveFromGroup=Удалить из группы PasswordChangedAndSentTo=Пароль изменен и направил в %s. -PasswordChangeRequest=Request to change password for %s +PasswordChangeRequest=Запрос на изменение пароля для %s PasswordChangeRequestSent=Запрос на изменение пароля для %s направлено %s. -ConfirmPasswordReset=Confirm password reset +ConfirmPasswordReset=Подтвердите сброс пароля MenuUsersAndGroups=Пользователи и Группы -LastGroupsCreated=Latest %s groups created -LastUsersCreated=Latest %s users created +LastGroupsCreated=Последние %s созданные группы +LastUsersCreated=Последние %s созданных пользователя ShowGroup=Показать группы ShowUser=Показать пользователей NonAffectedUsers=Расходы пользователей @@ -64,13 +64,13 @@ LinkedToDolibarrThirdParty=Ссылка на Dolibarr третья сторон CreateDolibarrLogin=Создать аккаунт Dolibarr CreateDolibarrThirdParty=Создание третьей стороной LoginAccountDisableInDolibarr=Счет-инвалидов в Dolibarr. -UsePersonalValue=Использование личных ценностей +UsePersonalValue=Использовать личные предпочтения InternalUser=Внутренний пользователь -ExportDataset_user_1=Users and their properties +ExportDataset_user_1=Пользователи и их свойства DomainUser=Домен пользователя %s Reactivate=Возобновить -CreateInternalUserDesc=This form allows you to create an internal user in your company/organization. To create an external user (customer, vendor etc. ..), use the button 'Create Dolibarr User' from that third-party's contact card. -InternalExternalDesc=An internal user is a user that is part of your company/organization.
An external user is a customer, vendor or other.

In both cases, permissions defines rights on Dolibarr, also external user can have a different menu manager than internal user (See Home - Setup - Display) +CreateInternalUserDesc=Эта форма позволяет вам создать внутреннего пользователя в вашей компании. Чтобы создать внешнего пользователя (клиента, поставщика и т.д.), используйте кнопку «Создать пользователя Dolibarr» из карточки контакта этого контрагента. +InternalExternalDesc=Внутренний пользователь - это пользователь, который является частью вашей компании.
Внешний пользователь - это клиент, продавец или кто-то другой.

В обоих случаях права доступа определяют права в Dolibarr, также внешний пользователь может иметь менеджер меню, отличный от внутреннего пользователя (см. Главная - Настройка - Внешний вид). PermissionInheritedFromAGroup=Разрешение предоставляется, поскольку унаследовал от одного из пользователей в группы. Inherited=Унаследованный UserWillBeInternalUser=Созданный пользователь будет внутреннего пользователя (потому что не связаны с определенным третьим лицам) @@ -85,28 +85,28 @@ UserDeleted=Пользователь %s удален NewGroupCreated=Создана группа %s GroupModified=Группа %s изменена GroupDeleted=Удалена группа %s -ConfirmCreateContact=Are you sure you want to create a Dolibarr account for this contact? -ConfirmCreateLogin=Are you sure you want to create a Dolibarr account for this member? -ConfirmCreateThirdParty=Are you sure you want to create a third party for this member? +ConfirmCreateContact=Вы уверены, что хотите создать учетную запись Dolibarr для этого контакта? +ConfirmCreateLogin=Вы уверены, что хотите создать учетную запись Dolibarr для этого участника? +ConfirmCreateThirdParty=Вы уверены, что хотите создать контрагента для этого участника? LoginToCreate=Логин для создания NameToCreate=Имя третьей стороной для создания YourRole=Ваша роль YourQuotaOfUsersIsReached=Квота активных пользователей будет достигнута! -NbOfUsers=No. of users -NbOfPermissions=No. of permissions +NbOfUsers=Кол-во пользователей +NbOfPermissions=Кол-во разрешений DontDowngradeSuperAdmin=Только суперамин может понизить суперамин HierarchicalResponsible=Руководитель HierarchicView=Иерархический вид UseTypeFieldToChange=Использьзуйте поле Тип для изменения OpenIDURL=OpenID URL LoginUsingOpenID=Использовать OpenID для входа -WeeklyHours=Hours worked (per week) -ExpectedWorkedHours=Expected worked hours per week +WeeklyHours=Отработанные часы (в неделю) +ExpectedWorkedHours=Ожидаемое отработанное время за неделю ColorUser=Цвет пользователя -DisabledInMonoUserMode=Disabled in maintenance mode -UserAccountancyCode=User accounting code -UserLogoff=User logout -UserLogged=User logged -DateEmployment=Employment Start Date -DateEmploymentEnd=Employment End Date -CantDisableYourself=You can't disable your own user record +DisabledInMonoUserMode=Отключено в режиме обслуживания +UserAccountancyCode=Код учета пользователя +UserLogoff=Выход пользователя +UserLogged=Пользователь вошел +DateEmployment=Дата начала трудоустройства +DateEmploymentEnd=Дата окончания занятости +CantDisableYourself=Вы не можете отключить свою собственную запись пользователя diff --git a/htdocs/langs/ru_RU/website.lang b/htdocs/langs/ru_RU/website.lang index 42bffa2f68c..619b8022065 100644 --- a/htdocs/langs/ru_RU/website.lang +++ b/htdocs/langs/ru_RU/website.lang @@ -1,7 +1,7 @@ # Dolibarr language file - Source file is en_US - website Shortname=Код WebsiteSetupDesc=Create here the websites you wish to use. Then go into menu Websites to edit them. -DeleteWebsite=Delete website +DeleteWebsite=Удалить сайт ConfirmDeleteWebsite=Are you sure you want to delete this web site? All its pages and content will also be removed. WEBSITE_TYPE_CONTAINER=Type of page/container WEBSITE_PAGE_EXAMPLE=Web page to use as example @@ -70,7 +70,7 @@ IDOfPage=Id of page Banner=Banner BlogPost=Blog post WebsiteAccount=Website account -WebsiteAccounts=Website accounts +WebsiteAccounts=Аккаунты сайта AddWebsiteAccount=Create web site account BackToListOfThirdParty=Back to list for Third Party DisableSiteFirst=Disable website first @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/ru_RU/workflow.lang b/htdocs/langs/ru_RU/workflow.lang index 98227e18291..bfacde3683f 100644 --- a/htdocs/langs/ru_RU/workflow.lang +++ b/htdocs/langs/ru_RU/workflow.lang @@ -1,20 +1,20 @@ # Dolibarr language file - Source file is en_US - workflow WorkflowSetup=Установка модуля Рабочих процессов -WorkflowDesc=Данный модуль предназначен для изменения поведения автоматических действий в приложении. По умолчанию рабочий процесс открыт (вы можете делать вещи в произвольном порядке). Вы можете включить автоматические действия, которые вам необходимы. +WorkflowDesc=Этот модуль предусматривает автоматические действия. По умолчанию рабочий процесс открыт (вы можете делать все в нужном вам порядке), но здесь вы можете включить какие-либо автоматические действия. ThereIsNoWorkflowToModify=Для активированных модулей нет доступных изменений рабочего процесса. # Autocreate -descWORKFLOW_PROPAL_AUTOCREATE_ORDER=Automatically create a customer order after a commercial proposal is signed (new order will have same amount than proposal) -descWORKFLOW_PROPAL_AUTOCREATE_INVOICE=Automatically create a customer invoice after a commercial proposal is signed (new invoice will have same amount than proposal) +descWORKFLOW_PROPAL_AUTOCREATE_ORDER=Automatically create a sales order after a commercial proposal is signed (the new order will have same amount as the proposal) +descWORKFLOW_PROPAL_AUTOCREATE_INVOICE=Automatically create a customer invoice after a commercial proposal is signed (the new invoice will have same amount as the proposal) descWORKFLOW_CONTRACT_AUTOCREATE_INVOICE=Автоматически создавать счет клиента после проверки договора -descWORKFLOW_ORDER_AUTOCREATE_INVOICE=Automatically create a customer invoice after a customer order is closed (new invoice will have same amount than order) +descWORKFLOW_ORDER_AUTOCREATE_INVOICE=Automatically create a customer invoice after a sales order is closed (the new invoice will have same amount as the order) # Autoclassify customer proposal or order -descWORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL=Classify linked source proposal(s) to billed when customer order is set to billed (and if amount of the order is same than total amount of signed linked proposals) -descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=Classify linked source proposal(s) to billed when customer invoice is validated (and if amount of the invoice is same than total amount of signed linked proposals) -descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Classify linked source customer order(s) to billed when customer invoice is validated (and if amount of the invoice is same than total amount of linked orders) -descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Classify linked source customer order(s) to billed when customer invoice is set to paid (and if amount of the invoice is same than total amount of linked orders) -descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Classify linked source customer order to shipped when a shipment is validated (and if quantity shipped by all shipments is the same as in the order to update) -# Autoclassify supplier order -descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Classify linked source vendor proposal(s) to billed when vendor invoice is validated (and if amount of the invoice is same than total amount of linked proposals) -descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Classify linked source purchase order(s) to billed when vendor invoice is validated (and if amount of the invoice is same than total amount of linked orders) -AutomaticCreation=Automatic creation -AutomaticClassification=Automatic classification +descWORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL=Classify linked source proposal as billed when sales order is set to billed (and if the amount of the order is the same as the total amount of the signed linked proposal) +descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=Classify linked source proposal as billed when customer invoice is validated (and if the amount of the invoice is the same as the total amount of the signed linked proposal) +descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Classify linked source sales order as billed when customer invoice is validated (and if the amount of the invoice is the same as the total amount of the linked order) +descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Classify linked source sales order as billed when customer invoice is set to paid (and if the amount of the invoice is the same as the total amount of the linked order) +descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Classify linked source sales order as shipped when a shipment is validated (and if the quantity shipped by all shipments is the same as in the order to update) +# Autoclassify purchase order +descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Classify linked source vendor proposal as billed when vendor invoice is validated (and if the amount of the invoice is the same as the total amount of the linked proposal) +descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Classify linked source purchase order as billed when vendor invoice is validated (and if the amount of the invoice is the same as the total amount of the linked order) +AutomaticCreation=Автоматическое создание +AutomaticClassification=Автоматическая классификация diff --git a/htdocs/langs/sk_SK/accountancy.lang b/htdocs/langs/sk_SK/accountancy.lang index e7127eb165b..ec2439d5d71 100644 --- a/htdocs/langs/sk_SK/accountancy.lang +++ b/htdocs/langs/sk_SK/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Účtovný účet čakania DONATION_ACCOUNTINGACCOUNT=Účtovný účet na registráciu darov diff --git a/htdocs/langs/sk_SK/admin.lang b/htdocs/langs/sk_SK/admin.lang index 45c31a47e0d..a4156dc9f84 100644 --- a/htdocs/langs/sk_SK/admin.lang +++ b/htdocs/langs/sk_SK/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Odkaz na objekt ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Knižnica používaná pre generovanie PDF LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Vytvoriť / upraviť služby Permission534=Odstrániť služby Permission536=Pozri / správa skryté služby Permission538=Export služieb -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Prečítajte si dary Permission702=Vytvoriť / upraviť dary Permission703=Odstrániť dary @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/sk_SK/bills.lang b/htdocs/langs/sk_SK/bills.lang index 0a0e51aa0bb..e59e132e721 100644 --- a/htdocs/langs/sk_SK/bills.lang +++ b/htdocs/langs/sk_SK/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma faktúra InvoiceProFormaDesc=Proforma faktúra je obraz skutočnej faktúry, ale nemá evidencia hodnotu. InvoiceReplacement=Náhradné faktúra InvoiceReplacementAsk=Náhradné faktúra faktúry -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Dobropis InvoiceAvoirAsk=Dobropis opraviť faktúru InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/sk_SK/companies.lang b/htdocs/langs/sk_SK/companies.lang index 50b6a7b65c6..30d71912379 100644 --- a/htdocs/langs/sk_SK/companies.lang +++ b/htdocs/langs/sk_SK/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias name (commercial, trademark, ...) AliasNameShort=Alias Name Companies=Firmy CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=Nikto Vendor=Vendor +Supplier=Vendor AddContact=Vytvoriť kontakt AddContactAddress=Vytvoriť kontakt/adresu EditContact=Upraviť kontakt diff --git a/htdocs/langs/sk_SK/other.lang b/htdocs/langs/sk_SK/other.lang index 8a2735cfc58..1978f4eabcf 100644 --- a/htdocs/langs/sk_SK/other.lang +++ b/htdocs/langs/sk_SK/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=Zásah %s bol overený. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/sk_SK/website.lang b/htdocs/langs/sk_SK/website.lang index 9678b6fd948..00ccd033492 100644 --- a/htdocs/langs/sk_SK/website.lang +++ b/htdocs/langs/sk_SK/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/sl_SI/accountancy.lang b/htdocs/langs/sl_SI/accountancy.lang index ad54ed949cf..9ece7db19d0 100644 --- a/htdocs/langs/sl_SI/accountancy.lang +++ b/htdocs/langs/sl_SI/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/sl_SI/admin.lang b/htdocs/langs/sl_SI/admin.lang index 2991502b826..025ffcef4df 100644 --- a/htdocs/langs/sl_SI/admin.lang +++ b/htdocs/langs/sl_SI/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Poveži z objektom ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Kreiranje/spreminjanje storitev Permission534=Brisanje storitev Permission536=Pregled/upravljanje skritih storitev Permission538=Izvoz storitev -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Branje donacij Permission702=Kreiranje/spreminjanje donacij Permission703=Delete donacij @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/sl_SI/bills.lang b/htdocs/langs/sl_SI/bills.lang index f818dd4b127..199397eed37 100644 --- a/htdocs/langs/sl_SI/bills.lang +++ b/htdocs/langs/sl_SI/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Predračun InvoiceProFormaDesc=Predračun izgleda enako kot račun, vendar nima računovodske vrednosti. InvoiceReplacement=Nadomestni račun InvoiceReplacementAsk=Nadomestni račun za račun -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Dobropis InvoiceAvoirAsk=Dobropis za korekcijo računa InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/sl_SI/companies.lang b/htdocs/langs/sl_SI/companies.lang index 8d52f86f18f..ab68d02ed39 100644 --- a/htdocs/langs/sl_SI/companies.lang +++ b/htdocs/langs/sl_SI/companies.lang @@ -28,7 +28,7 @@ AliasNames=Drugo ime (komercialno, blagovna znamka, ...) AliasNameShort=Alias Name Companies=Podjetja CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=Brez popusta Vendor=Vendor +Supplier=Vendor AddContact=Ustvari kntakt AddContactAddress=Ustvari naslov EditContact=Uredi osebo / naslov diff --git a/htdocs/langs/sl_SI/other.lang b/htdocs/langs/sl_SI/other.lang index e413a5da13f..aebd453a307 100644 --- a/htdocs/langs/sl_SI/other.lang +++ b/htdocs/langs/sl_SI/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=Potrjena intervencija %s EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/sl_SI/website.lang b/htdocs/langs/sl_SI/website.lang index 4a37a3efb93..3244952145a 100644 --- a/htdocs/langs/sl_SI/website.lang +++ b/htdocs/langs/sl_SI/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/sq_AL/accountancy.lang b/htdocs/langs/sq_AL/accountancy.lang index 076a59f3bea..8e1a61cb5bd 100644 --- a/htdocs/langs/sq_AL/accountancy.lang +++ b/htdocs/langs/sq_AL/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/sq_AL/admin.lang b/htdocs/langs/sq_AL/admin.lang index 1704e1b7cb0..c7a844db4d2 100644 --- a/htdocs/langs/sq_AL/admin.lang +++ b/htdocs/langs/sq_AL/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Create/modify services Permission534=Delete services Permission536=See/manage hidden services Permission538=Export services -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Read donations Permission702=Create/modify donations Permission703=Delete donations @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/sq_AL/bills.lang b/htdocs/langs/sq_AL/bills.lang index 3000a7ae4c6..6d410dc879e 100644 --- a/htdocs/langs/sq_AL/bills.lang +++ b/htdocs/langs/sq_AL/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma invoice InvoiceProFormaDesc=Proforma invoice is an image of a true invoice but has no accountancy value. InvoiceReplacement=Replacement invoice InvoiceReplacementAsk=Replacement invoice for invoice -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Credit note InvoiceAvoirAsk=Credit note to correct invoice InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/sq_AL/companies.lang b/htdocs/langs/sq_AL/companies.lang index 27a292f7fbb..c4d7ea97a06 100644 --- a/htdocs/langs/sq_AL/companies.lang +++ b/htdocs/langs/sq_AL/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias name (commercial, trademark, ...) AliasNameShort=Alias Name Companies=Kompanitë CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=None Vendor=Vendor +Supplier=Vendor AddContact=Create contact AddContactAddress=Create contact/address EditContact=Edit contact diff --git a/htdocs/langs/sq_AL/other.lang b/htdocs/langs/sq_AL/other.lang index dd2fa132429..84e2ff12857 100644 --- a/htdocs/langs/sq_AL/other.lang +++ b/htdocs/langs/sq_AL/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=The intervention %s has been validated. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/sq_AL/website.lang b/htdocs/langs/sq_AL/website.lang index 534756ac932..0ee00aff7c0 100644 --- a/htdocs/langs/sq_AL/website.lang +++ b/htdocs/langs/sq_AL/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/sr_RS/accountancy.lang b/htdocs/langs/sr_RS/accountancy.lang index c567bb5ba78..02d455a8817 100644 --- a/htdocs/langs/sr_RS/accountancy.lang +++ b/htdocs/langs/sr_RS/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/sr_RS/admin.lang b/htdocs/langs/sr_RS/admin.lang index c4d811485cb..1ac61447847 100644 --- a/htdocs/langs/sr_RS/admin.lang +++ b/htdocs/langs/sr_RS/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Create/modify services Permission534=Delete services Permission536=See/manage hidden services Permission538=Export services -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Read donations Permission702=Create/modify donations Permission703=Delete donations @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/sr_RS/bills.lang b/htdocs/langs/sr_RS/bills.lang index 14b1c76b888..41751c9406f 100644 --- a/htdocs/langs/sr_RS/bills.lang +++ b/htdocs/langs/sr_RS/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Predračun InvoiceProFormaDesc=Predračun je neobavezujući dokument koji ima sve karakteristike računa. InvoiceReplacement=Zamenski račun InvoiceReplacementAsk=Zamenski račun za račun -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Knjižno odobrenje (kredit nota) InvoiceAvoirAsk=Knjižno odobrenje za korekciju računa InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/sr_RS/companies.lang b/htdocs/langs/sr_RS/companies.lang index 91a8d7d6a6b..039365081a4 100644 --- a/htdocs/langs/sr_RS/companies.lang +++ b/htdocs/langs/sr_RS/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias (komercijalni) AliasNameShort=Alias Name Companies=Kompanije CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=Nema Vendor=Vendor +Supplier=Vendor AddContact=kreiraj kontakt AddContactAddress=Kreiraj kontakt/adresuz EditContact=Izmeni kontakt diff --git a/htdocs/langs/sr_RS/other.lang b/htdocs/langs/sr_RS/other.lang index 706ad39a5be..34e997d52f1 100644 --- a/htdocs/langs/sr_RS/other.lang +++ b/htdocs/langs/sr_RS/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=Intervencija %s je potvrđena. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/sv_SE/accountancy.lang b/htdocs/langs/sv_SE/accountancy.lang index 1e46c6e213c..a97e82d5dfe 100644 --- a/htdocs/langs/sv_SE/accountancy.lang +++ b/htdocs/langs/sv_SE/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Resultaträkningskonto (förlust) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Loggbok för stängning ACCOUNTING_ACCOUNT_TRANSFER_CASH=Redovisningskonto övergångsöverföring +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Redovisningskonto för väntan DONATION_ACCOUNTINGACCOUNT=Redovisningskonto för att registrera donationer diff --git a/htdocs/langs/sv_SE/admin.lang b/htdocs/langs/sv_SE/admin.lang index b967f1948a8..1118f400fe0 100644 --- a/htdocs/langs/sv_SE/admin.lang +++ b/htdocs/langs/sv_SE/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Kryssrutor från bordet ExtrafieldLink=Länk till ett objekt ComputedFormula=Beräknat fält ComputedFormulaDesc=Du kan ange här en formel med andra objektegenskaper eller någon PHP-kodning för att få ett dynamiskt beräknat värde. Du kan använda alla PHP-kompatibla formler inklusive "?" tillståndsoperatör och följande globala objekt: $ db, $ conf, $ längd, $ mysoc, $ user, $ object .
VARNING : Endast vissa egenskaper på $ -objekt kan vara tillgängliga. Om du behöver en egenskap inte laddad, hämta bara objektet i din formel som i det andra exemplet.
Med ett beräknat fält kan du inte ange något värde från gränssnittet själv. Om det också finns ett syntaxfel kan inte formeln returnera någonting.

Exempel på formel:
$ objekt-> id < 10 ? round($object-> id / 2, 2): ($ objekt-> id + 2 * $ användar-> id) * (int) substr ($ mysoc-> zip, 1, 2 )

Exempel på att ladda objektet
(($ reloadedobj = new Societe ($ db)) && ($ reloadedobj-> hämta ($ obj-> id? $ Obj-> id: ($ obj-> rowid? $ Obj- > rowid: $ object-> id))> 0))? $ reloadedobj-> array_options ['options_extrafieldkey'] * $ reloadedobj-> kapital / 5: '-1'

Ett annat exempel på formel för att tvinga belastning av objekt och dess moderobjekt:
(($ reloadedobj = new Task ($ db )) && ($ reloadedobj-> hämta ($ object-> id)> 0) && ($ secondloadedobj = nytt projekt ($ db)) && ($ secondloadedobj-> hämta ($ reloadedobj-> fk_project)> 0))? $ secondloadedobj-> ref: 'Föräldraprojekt hittades inte' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Om du lämnar fältet tomt betyder det att detta värde kommer att sparas utan kryptering (fältet måste bara döljas med stjärnan på skärmen).
Ange 'auto' för att använda standardkrypteringsregeln för att spara lösenord i databasen (då är läsningsvärde endast ett hash, inget sätt att hämta originalvärdet) ExtrafieldParamHelpselect=Förteckning över värden måste vara linjer med formatnyckel, värde (där nyckel inte kan vara '0')

till exempel:
1, värde1
2, värde2
code3, värde3
...

För att få lista beroende på en annan komplementär attributlista:
1, värde1 | options_ parent_list_code : parent_key
2, value2 | options_ parent_list_code : parent_key

För att få listan beroende på en annan lista:
1, värde1 | parent_list_code : parent_key
2, värde2 | parent_list_code : parent_key ExtrafieldParamHelpcheckbox=Lista över värden måste vara rader med formatnyckel, värde (där nyckel inte kan vara '0')

till exempel:
1, värde1
2, värde2
3, värde3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=Lista över värden måste vara rader med formatnyckel, ExtrafieldParamHelpsellist=Lista över värden kommer från en tabell
Syntax: tabellnamn: label_field: id_field :: filter
Exempel: c_typent: libelle: id :: filter

- idfilter är nödvändigtvis en primär int nyckel
- filtret kan vara ett enkelt test = 1) för att visa endast aktivt värde
Du kan också använda $ ID $ i filterhäxa är det aktuella idet av nuvarande objekt
För att göra ett SELECT i filter använder du $ SEL $
om du vill filtrera på extrafält använder du syntax extra.fieldcode = ... (där fältkoden är koden för extrafältet)

För att få listan beroende på en annan komplementär attributlista:
c_typent: libelle: id: options_ parent_list_code | parent_column: filter

För att ha listan beror på en annan lista:
c_typent: libelle: id: parent_list_code | parent_column: filter ExtrafieldParamHelpchkbxlst=Lista över värden kommer från en tabell
Syntax: tabellnamn: label_field: id_field :: filter
Exempel: c_typent: libelle: id :: filter

filtret kan vara ett enkelt test (t.ex. aktiv = 1) för att visa endast aktivt värde
Du kan också använda $ ID $ i filterhäxa är nuvarande ID för nuvarande objekt
För att göra ett SELECT i filter använd $ SEL $
om du vill filtrera på extrafält använder syntax extra.fieldcode = ... (där fältkoden är kod för extrafält)

För att få listan beroende på en annan komplementär attributlista:
c_typent: libelle: id: options_ parent_list_code | parent_column: filter

För att få listan beroende på en annan lista:
c_typent: libelle: id: parent_list_code | parent_column: filter ExtrafieldParamHelplink=Parametrar måste vara ObjectName: Classpath
Syntax: ObjectName: Classpath
Exempel:
Societe: societe / class / societe.class.php
Kontakt: kontakt / class / contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Bibliotek som används för PDF-generering LocalTaxDesc=Vissa länder kan ansöka om två eller tre skatter på varje faktura. Om så är fallet, välj typ för andra och tredje skatt och dess skattesats. Möjlig typ är:
1: Lokal skatt gäller för produkter och tjänster utan moms (localtax beräknas på belopp utan skatt)
2: Lokal skatt gäller för produkter och tjänster inklusive moms (lokal skatt beräknas på belopp + huvudskatt)
3: lokal skatt tillämpas på varor utan moms (lokal skatt beräknas på belopp utan skatt)
4: Lokal skatt gäller för produkter inklusive moms (lokal skatt beräknas på belopp + huvudskatt)
5: Lokal skatt gäller för tjänster utan moms (lokal skatt beräknas på belopp utan skatt)
6: Lokal skatt gäller för tjänster inklusive moms (lokal skatt beräknas på belopp + skatt) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Skapa / modifiera tjänster Permission534=Ta bort tjänster Permission536=Se / Hantera dolda tjänster Permission538=Exportera tjänster -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Läs donationer Permission702=Skapa / ändra donationer Permission703=Ta bort donationer @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/sv_SE/bills.lang b/htdocs/langs/sv_SE/bills.lang index 87ba06c3f74..738c2068c9d 100644 --- a/htdocs/langs/sv_SE/bills.lang +++ b/htdocs/langs/sv_SE/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma faktura InvoiceProFormaDesc=Proforma faktura är en bild av en sann faktura men har ingen bokföring värde. InvoiceReplacement=Ersättnings faktura InvoiceReplacementAsk=Ersättnings faktura för faktura -InvoiceReplacementDesc=  Ersättningsfaktura används för att avbryta och helt ersätta en faktura utan betalning som redan tagits emot.

Obs! Endast fakturor utan betalning på den kan bytas ut. Om fakturan du byter inte är avslutad stängs den automatiskt för att "överge". +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Kreditnota InvoiceAvoirAsk=Kreditnota att korrigera fakturan InvoiceAvoirDesc= kreditnota är en negativ faktura som används för att korrigera det faktum att en faktura visar ett belopp som skiljer sig från det belopp som faktiskt betalats (t.ex. kunden betalade för mycket av misstag eller betalar inte hela beloppet eftersom vissa produkter returnerades) . diff --git a/htdocs/langs/sv_SE/companies.lang b/htdocs/langs/sv_SE/companies.lang index c4a75a1afaa..098c3c073b4 100644 --- a/htdocs/langs/sv_SE/companies.lang +++ b/htdocs/langs/sv_SE/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias namn (kommersiellt, varumärke, ...) AliasNameShort=Alias namn Companies=Företag CountryIsInEEC=Landet ligger inom Europeiska ekonomiska gemenskapen -PriceFormatInCurrentLanguage=Prisformat i nuvarande språk +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Namn på tredjepart ThirdPartyEmail=Tredjeparts e-post ThirdParty=Tredjepart @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absoluta leverantörsrabatter (angivna av alla SupplierAbsoluteDiscountMy=Absoluta leverantörsrabatter (angivna av dig själv) DiscountNone=Ingen Vendor=Säljare +Supplier=Vendor AddContact=Skapa kontakt AddContactAddress=Skapa kontakt / adress EditContact=Redigera kontakt / adress diff --git a/htdocs/langs/sv_SE/other.lang b/htdocs/langs/sv_SE/other.lang index 93d2115b9be..71012c57976 100644 --- a/htdocs/langs/sv_SE/other.lang +++ b/htdocs/langs/sv_SE/other.lang @@ -20,7 +20,7 @@ ZipFileGeneratedInto=Zip-fil genererad till %s . DocFileGeneratedInto=Doc-filen genereras till %s . JumpToLogin=Förbindelse förlorad. Gå till inloggningssidan ... MessageForm=Meddelande på onlinebetalningsformulär -MessageOK=Meddelande på retursidan för en validerad betalning +MessageOK=Meddelande på retursidan för en bekräftat betalning MessageKO=Meddelande på retursidan för en avbokad betalning ContentOfDirectoryIsNotEmpty=Innehållet i den här katalogen är inte tomt. DeleteAlsoContentRecursively=Kontrollera att allt innehåll rekursivt raderas @@ -31,13 +31,13 @@ NextYearOfInvoice=Följande år med fakturadatum DateNextInvoiceBeforeGen=Datum för nästa faktura (före generationen) DateNextInvoiceAfterGen=Datum för nästa faktura (efter generation) -Notify_ORDER_VALIDATE=Försäljningsorder validerad +Notify_ORDER_VALIDATE=Försäljningsorder bekräftat Notify_ORDER_SENTBYMAIL=Försäljningsorder skickad via post Notify_ORDER_SUPPLIER_SENTBYMAIL=Beställningsorder skickad via e-post Notify_ORDER_SUPPLIER_VALIDATE=Beställningsorder registrerad Notify_ORDER_SUPPLIER_APPROVE=Köporder godkänd Notify_ORDER_SUPPLIER_REFUSE=Inköpsorder nekades -Notify_PROPAL_VALIDATE=Kunden förslag validerade +Notify_PROPAL_VALIDATE=Kunden förslag bekräftades Notify_PROPAL_CLOSE_SIGNED=Kundförslaget är undertecknat Notify_PROPAL_CLOSE_REFUSED=Kundförslaget stängdes vägrade Notify_PROPAL_SENTBYMAIL=Kommersiell förslag skickas per post @@ -46,22 +46,22 @@ Notify_WITHDRAW_CREDIT=Credit tillbakadragande Notify_WITHDRAW_EMIT=Isue tillbakadragande Notify_COMPANY_CREATE=Tredje part som skapats Notify_COMPANY_SENTBYMAIL=Post som skickas från tredjepartskort -Notify_BILL_VALIDATE=Kundfaktura validerade +Notify_BILL_VALIDATE=Kundfaktura bekräftades Notify_BILL_UNVALIDATE=Kundfakturan Fraktpris saknas Notify_BILL_PAYED=Kundfaktura betalad Notify_BILL_CANCEL=Kundfaktura avbryts Notify_BILL_SENTBYMAIL=Kundfaktura skickas per post -Notify_BILL_SUPPLIER_VALIDATE=Leverantörsfaktura validerad +Notify_BILL_SUPPLIER_VALIDATE=Leverantörsfaktura bekräftat Notify_BILL_SUPPLIER_PAYED=Leverantörsfaktura betalad Notify_BILL_SUPPLIER_SENTBYMAIL=Leverantörsfaktura skickad via post Notify_BILL_SUPPLIER_CANCELED=Leverantörsfaktura inställd -Notify_CONTRACT_VALIDATE=Kontrakt validerade -Notify_FICHEINTER_VALIDATE=Intervention validerade +Notify_CONTRACT_VALIDATE=Kontrakt bekräftades +Notify_FICHEINTER_VALIDATE=Intervention bekräftades Notify_FICHINTER_ADD_CONTACT=Tillagd kontakt till insats Notify_FICHINTER_SENTBYMAIL=Ingripande skickas per post -Notify_SHIPPING_VALIDATE=Frakt validerade +Notify_SHIPPING_VALIDATE=Frakt bekräftades Notify_SHIPPING_SENTBYMAIL=Leverans skickas per post -Notify_MEMBER_VALIDATE=Medlem validerade +Notify_MEMBER_VALIDATE=Medlem bekräftades Notify_MEMBER_MODIFY=Medlem modifierad Notify_MEMBER_SUBSCRIPTION=Medlem tecknat Notify_MEMBER_RESILIATE=Medlem avslutad @@ -70,9 +70,9 @@ Notify_PROJECT_CREATE=Projekt skapande Notify_TASK_CREATE=Task skapade Notify_TASK_MODIFY=Task modifierad Notify_TASK_DELETE=Uppgift utgår -Notify_EXPENSE_REPORT_VALIDATE=Expense rapport validerad (godkännande krävs) +Notify_EXPENSE_REPORT_VALIDATE=Utläggsrapport bekräftat (godkännande krävs) Notify_EXPENSE_REPORT_APPROVE=Kostnadsrapport godkänd -Notify_HOLIDAY_VALIDATE=Lämna förfrågan validerad (godkännande krävs) +Notify_HOLIDAY_VALIDATE=Lämna förfrågan bekräftat (godkännande krävs) Notify_HOLIDAY_APPROVE=Lämna förfrågan godkänd SeeModuleSetup=Se inställning av modul %s NbOfAttachedFiles=Antal bifogade filer / dokument @@ -112,12 +112,12 @@ ValidatedBy=Bekräftad av %s ClosedBy=Stängt av %s CreatedById=Användarkod som skapade ModifiedById=Användar-ID som gjorde senaste ändringen -ValidatedById=Användarkod som validerats +ValidatedById=Användarkod som bekräftats CanceledById=Användar-ID som annulleras ClosedById=Användar-ID som stängd CreatedByLogin=Användarinloggning som skapade ModifiedByLogin=Användarinloggning som gjorde senaste ändringen -ValidatedByLogin=Användarinloggning som validerats +ValidatedByLogin=Användarinloggning som bekräftats CanceledByLogin=Användarinloggning som annullerats ClosedByLogin=Användarinloggning som stängde FileWasRemoved=Arkiv %s togs bort @@ -184,28 +184,30 @@ NumberOfCustomerInvoices=Antal kundfakturor NumberOfSupplierProposals=Antal leverantörsförslag NumberOfSupplierOrders=Antal inköpsorder NumberOfSupplierInvoices=Antal leverantörsfakturor +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Antal enheter på förslag NumberOfUnitsCustomerOrders=Antal enheter på försäljningsorder NumberOfUnitsCustomerInvoices=Antal enheter på kundfakturor NumberOfUnitsSupplierProposals=Antal enheter på leverantörsförslag NumberOfUnitsSupplierOrders=Antal enheter på inköpsorder NumberOfUnitsSupplierInvoices=Antal enheter på leverantörsfakturor +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=Ett nytt ingripande %s har tilldelats dig. -EMailTextInterventionValidated=Interventionen %s har validerats. -EMailTextInvoiceValidated=Faktura %s har validerats. +EMailTextInterventionValidated=Interventionen %s har bekräftats. +EMailTextInvoiceValidated=Faktura %s har bekräftats. EMailTextInvoicePayed=Faktura %s har betalats. -EMailTextProposalValidated=Förslag %s har validerats. +EMailTextProposalValidated=Förslag %s har bekräftats. EMailTextProposalClosedSigned=Förslag %s har avslutats undertecknat. -EMailTextOrderValidated=Order %s har validerats. +EMailTextOrderValidated=Order %s har bekräftats. EMailTextOrderApproved=Beställningen %s har godkänts. EMailTextOrderValidatedBy=Order %s har spelats in av %s. EMailTextOrderApprovedBy=Beställningen %s har godkänts av %s. EMailTextOrderRefused=Beställningen %s har vägrats. EMailTextOrderRefusedBy=Beställningen %s har blivit nekad av %s. -EMailTextExpeditionValidated=Frakt %s har validerats. -EMailTextExpenseReportValidated=Kostnadsrapport %s har validerats. +EMailTextExpeditionValidated=Frakt %s har bekräftats. +EMailTextExpenseReportValidated=Kostnadsrapport %s har bekräftats. EMailTextExpenseReportApproved=Kostnadsrapport %s har godkänts. -EMailTextHolidayValidated=Lämna förfrågan %s har validerats. +EMailTextHolidayValidated=Lämna förfrågan %s har bekräftats. EMailTextHolidayApproved=Förfrågan %s har godkänts. ImportedWithSet=Import dataunderlaget DolibarrNotification=Automatisk anmälan @@ -246,10 +248,10 @@ YourPasswordHasBeenReset=Ditt lösenord har återställts framgångsrikt ApplicantIpAddress=Sökandens IP-adress SMSSentTo=SMS skickat till %s MissingIds=Saknande ID -ThirdPartyCreatedByEmailCollector=Third party created by email collector from email MSGID %s -ContactCreatedByEmailCollector=Contact/address created by email collector from email MSGID %s -ProjectCreatedByEmailCollector=Project created by email collector from email MSGID %s -TicketCreatedByEmailCollector=Ticket created by email collector from email MSGID %s +ThirdPartyCreatedByEmailCollector=Tredje part skapad av e-post samlare från e-post MSGID %s +ContactCreatedByEmailCollector=Kontakt / adress skapad via e-post samlare från email MSGID %s +ProjectCreatedByEmailCollector=Projekt skapat av e-post samlare från email MSGID %s +TicketCreatedByEmailCollector=Biljett skapad av e-post samlare från email MSGID %s ##### Export ##### ExportsArea=Export område @@ -268,5 +270,5 @@ WEBSITE_IMAGEDesc=Relativ sökväg i bildmediet. Du kan hålla det tomt eftersom WEBSITE_KEYWORDS=Nyckelord LinesToImport=Rader att importera -MemoryUsage=Memory usage -RequestDuration=Duration of request +MemoryUsage=Minnesanvändning +RequestDuration=Varaktighet för förfrågan diff --git a/htdocs/langs/sv_SE/website.lang b/htdocs/langs/sv_SE/website.lang index bdecce66d17..cc934e66abc 100644 --- a/htdocs/langs/sv_SE/website.lang +++ b/htdocs/langs/sv_SE/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=Ingen hemsida har skapats än. Skapa en första. GoTo=Gå till DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/sw_SW/accountancy.lang b/htdocs/langs/sw_SW/accountancy.lang index bb141cb9eb0..758d9c340a5 100644 --- a/htdocs/langs/sw_SW/accountancy.lang +++ b/htdocs/langs/sw_SW/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/sw_SW/admin.lang b/htdocs/langs/sw_SW/admin.lang index 9eaa12ec9be..f30d6edd9f7 100644 --- a/htdocs/langs/sw_SW/admin.lang +++ b/htdocs/langs/sw_SW/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Create/modify services Permission534=Delete services Permission536=See/manage hidden services Permission538=Export services -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Read donations Permission702=Create/modify donations Permission703=Delete donations @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/sw_SW/bills.lang b/htdocs/langs/sw_SW/bills.lang index c9d46e4ffff..4f114d4df1c 100644 --- a/htdocs/langs/sw_SW/bills.lang +++ b/htdocs/langs/sw_SW/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma invoice InvoiceProFormaDesc=Proforma invoice is an image of a true invoice but has no accountancy value. InvoiceReplacement=Replacement invoice InvoiceReplacementAsk=Replacement invoice for invoice -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Credit note InvoiceAvoirAsk=Credit note to correct invoice InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/sw_SW/companies.lang b/htdocs/langs/sw_SW/companies.lang index 77bd4f8a445..578f5cb8920 100644 --- a/htdocs/langs/sw_SW/companies.lang +++ b/htdocs/langs/sw_SW/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias name (commercial, trademark, ...) AliasNameShort=Alias Name Companies=Companies CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=None Vendor=Vendor +Supplier=Vendor AddContact=Create contact AddContactAddress=Create contact/address EditContact=Edit contact diff --git a/htdocs/langs/sw_SW/other.lang b/htdocs/langs/sw_SW/other.lang index a6802140be3..8a5ccdbab5c 100644 --- a/htdocs/langs/sw_SW/other.lang +++ b/htdocs/langs/sw_SW/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=The intervention %s has been validated. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/th_TH/accountancy.lang b/htdocs/langs/th_TH/accountancy.lang index b895dec5004..32ea494ec01 100644 --- a/htdocs/langs/th_TH/accountancy.lang +++ b/htdocs/langs/th_TH/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/th_TH/admin.lang b/htdocs/langs/th_TH/admin.lang index 1dc638b8ef8..bd4dd75398a 100644 --- a/htdocs/langs/th_TH/admin.lang +++ b/htdocs/langs/th_TH/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=เชื่อมโยงไปยังวัตถุ ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=สร้าง / แก้ไขบริการ Permission534=ลบบริการ Permission536=ดู / จัดการบริการซ่อน Permission538=บริการส่งออก -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=อ่านบริจาค Permission702=สร้าง / แก้ไขการบริจาค Permission703=ลบบริจาค @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/th_TH/bills.lang b/htdocs/langs/th_TH/bills.lang index b1eaa9aec89..17b76759851 100644 --- a/htdocs/langs/th_TH/bills.lang +++ b/htdocs/langs/th_TH/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=ใบแจ้งหนี้ Proforma InvoiceProFormaDesc=ใบแจ้งหนี้ Proforma คือภาพของใบแจ้งหนี้ที่แท้จริง แต่มีค่าไม่มีบัญชี InvoiceReplacement=เปลี่ยนใบแจ้งหนี้ InvoiceReplacementAsk=ใบแจ้งหนี้แทนใบแจ้งหนี้ -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=ใบลดหนี้ InvoiceAvoirAsk=ใบลดหนี้ใบแจ้งหนี้ที่ถูกต้อง InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/th_TH/companies.lang b/htdocs/langs/th_TH/companies.lang index 9e6f8e210b1..c51b7af54ee 100644 --- a/htdocs/langs/th_TH/companies.lang +++ b/htdocs/langs/th_TH/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias name (commercial, trademark, ...) AliasNameShort=Alias Name Companies=บริษัท CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=ไม่ Vendor=Vendor +Supplier=Vendor AddContact=สร้างรายชื่อผู้ติดต่อ AddContactAddress=สร้างการติดต่อ / ที่อยู่ EditContact=ติดต่อแก้ไข diff --git a/htdocs/langs/th_TH/other.lang b/htdocs/langs/th_TH/other.lang index 8d6d1865935..f1c06d24a6d 100644 --- a/htdocs/langs/th_TH/other.lang +++ b/htdocs/langs/th_TH/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=การแทรกแซง% s ได้รับการตรวจสอบ EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/th_TH/website.lang b/htdocs/langs/th_TH/website.lang index 5b59ac7627d..9b9de86aa07 100644 --- a/htdocs/langs/th_TH/website.lang +++ b/htdocs/langs/th_TH/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/tr_TR/accountancy.lang b/htdocs/langs/tr_TR/accountancy.lang index 109fb69160e..abce087b09e 100644 --- a/htdocs/langs/tr_TR/accountancy.lang +++ b/htdocs/langs/tr_TR/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Muhasebe hesabının bekletilmesi DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/tr_TR/admin.lang b/htdocs/langs/tr_TR/admin.lang index 29901665231..4ec639898e0 100644 --- a/htdocs/langs/tr_TR/admin.lang +++ b/htdocs/langs/tr_TR/admin.lang @@ -105,7 +105,7 @@ AntiVirusParamExample= ClamWin için örnek: --database="C:\\Program Files (x86) ComptaSetup=Muhasebe modülü ayarları UserSetup=Kullanıcı yönetimi ayarları MultiCurrencySetup=Çoklu para birimi ayarları -MenuLimits=Sınırlar ve doğruluk +MenuLimits=Sınırlar ve Doğruluk MenuIdParent=Ana menü Kimliği DetailMenuIdParent=Ana menü Kimliği (bir üst menü için boş) DetailPosition=Menü konumunu tanımlamak için sıralamanumarası @@ -149,7 +149,7 @@ SystemToolsAreaDesc=Bu alan yönetim işlevlerini sunar. İstenilen özelliği s Purge=Temizleme PurgeAreaDesc=Bu sayfa Dolibarr tarafından oluşturulan veya depolanan tüm dosyaları silmenizi sağlar (%s dizinindeki geçici veya tüm dosyalar). Bu özelliğin kullanılması normalde gerekli değildir. Bu araç, Dolibarr yazılımı web sunucusu tarafından oluşturulan dosyaların silinmesine izin vermeyen bir sağlayıcı tarafından barındırılan kullanıcılar için geçici bir çözüm olarak sunulur. PurgeDeleteLogFile=Syslog modülü için tanımlı %s dosyası da dahil olmak üzere günlük dosyalarını sil (veri kaybetme riskiniz yoktur) -PurgeDeleteTemporaryFiles=Delete all temporary files (no risk of losing data). Note: Deletion is done only if the temp directory was created 24 hours ago. +PurgeDeleteTemporaryFiles=Tüm geçici dosyaları sil (veri kaybetme riskiniz yoktur). Not: Geçici dizin eğer 24 saat önce oluşturulmuşsa silme işlemi tamamlanır. PurgeDeleteTemporaryFilesShort=Geçici dosyaları sil PurgeDeleteAllFilesInDocumentsDir=%s dizinindeki bütün dosyaları sil.
Bu işlem, öğelerle (üçüncü partiler, faturalar, v.s.) ilgili oluşturulan tüm dosyaları, ECM modülüne yüklenen dosyaları, veritabanı yedekleme dökümlerini ve geçici dosyaları silecektir. PurgeRunNow=Şimdi temizle @@ -160,7 +160,7 @@ PurgeAuditEvents=Tüm güvenlik etkinliklerini temizle ConfirmPurgeAuditEvents=Tüm güvenlik etkinliklerini temizlemek istediğinizden emin misiniz? Tüm güvenlik günlükleri silinecek olup, başka veriler silinmeyecektir. GenerateBackup=Yedekleme oluştur Backup=Yedekleme -Restore=Geri yükleme +Restore=Geri Yükleme RunCommandSummary=Yedekleme aşağıdaki komut ile başlatılmıştır BackupResult=Yedekleme sonucu BackupFileSuccessfullyCreated=Yedekleme dosyası başarıyla oluşturuldu @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Tablodan onay kutuları ExtrafieldLink=Bir nesneye bağlantı ComputedFormula=Hesaplanmış alan ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=PDF oluşturmada kullanılan kütüphane LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -482,7 +485,7 @@ WatermarkOnDraftExpenseReports=Taslak gider raporlarındaki filigran AttachMainDocByDefault=Ana belgeyi varsayılan olarak e-postaya eklemek istiyorsanız bunu 1 olarak ayarlayın (uygunsa) FilesAttachedToEmail=Dosya ekle SendEmailsReminders=Gündem hatırlatıcılarını e-posta ile gönder -davDescription=Setup a WebDAV server +davDescription=Bir WebDAV sunucusu kurun DAVSetup=DAV modülü kurulumu DAV_ALLOW_PRIVATE_DIR=Enable the generic private directory (WebDAV dedicated directory named "private" - login required) DAV_ALLOW_PRIVATE_DIRTooltip=The generic private directory is a WebDAV directory anybody can access with its application login/pass. @@ -592,7 +595,7 @@ Module2000Name=WYSIWYG düzenleyici Module2000Desc=CKEditor (html) kullanarak metin alanlarının düzenlenmesine/biçimlendirilmesine olanak sağlayın Module2200Name=Dinamik Fiyatlar Module2200Desc=Otomatik fiyat üretimi için matematiksel ifadeler kullanın -Module2300Name=Planlı işler +Module2300Name=Planlı İşler Module2300Desc=Scheduled jobs management (alias cron or chrono table) Module2400Name=Etkinlik/Gündem Module2400Desc=Etkinlikleri takip edin. İzleme amacıyla otomatik etkinlikleri günlüğe geçirin veya manuel etkinlikleri ya da toplantıları kaydedin. Bu, iyi bir Müşteri veya Tedarikçi İlişkileri Yönetimi için temel modüldür. @@ -819,9 +822,9 @@ Permission532=Hizmet oluştur/değiştir Permission534=Hizmet sil Permission536=Gizli hizmetleri gör/yönet Permission538=Hizmet dışaaktar -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Bağış oluştur/değiştir Permission702=Bağış sil Permission703=Bağış sil @@ -844,7 +847,7 @@ Permission1109=Teslim emri sil Permission1121=Read supplier proposals Permission1122=Create/modify supplier proposals Permission1123=Validate supplier proposals -Permission1124=Send supplier proposals +Permission1124=Tedarikçi tekliflerini gönder Permission1125=Delete supplier proposals Permission1126=Close supplier price requests Permission1181=Tedarikçi oku @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1096,8 +1099,8 @@ LogEvents=Güvenlik denetimi etkinlikleri Audit=Denetim InfoDolibarr=Dolibarr Bilgileri InfoBrowser=Tarayıcı Bilgileri -InfoOS=OS Bilgileri -InfoWebServer=Web Sunucusu Hakkında +InfoOS=İşletim Sistemi Bilgileri +InfoWebServer=Web Sunucusu Bilgileri InfoDatabase=Veritabanı Bilgileri InfoPHP=PHP Bilgileri InfoPerf=Performans Bilgileri @@ -1238,7 +1241,7 @@ SetupPerso=Yapılandırmanıza göre PasswordPatternDesc=Parola modeli açıklaması ##### Users setup ##### RuleForGeneratedPasswords=Parola oluşturma ve doğrulama kuralları -DisableForgetPasswordLinkOnLogonPage=Oturum açma sayfasında “Parola mı unutuldu?” bağlantısını gösterme +DisableForgetPasswordLinkOnLogonPage=Oturum açma sayfasında “Parolanızı mı unuttunuz?” bağlantısını gösterme UsersSetup=Kullanıcılar modülü kurulumu UserMailRequired=Yeni bir kullanıcı oluşturmak için e-posta gerekli ##### HRM setup ##### @@ -1924,4 +1927,4 @@ UrlForIFTTT=IFTTT için URL bitiş noktası YouWillFindItOnYourIFTTTAccount=Onu IFTTT hesabınızda bulacaksınız EndPointFor=%s için bitiş noktası: %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/tr_TR/agenda.lang b/htdocs/langs/tr_TR/agenda.lang index b6741221ac2..698842f32e7 100644 --- a/htdocs/langs/tr_TR/agenda.lang +++ b/htdocs/langs/tr_TR/agenda.lang @@ -129,7 +129,7 @@ AddEvent=Etkinlik oluştur MyAvailability=Uygunluğum ActionType=Etkinlik türü DateActionBegin=Etkinlik başlangıç tarihi -ConfirmCloneEvent=%s etkinliğini çoğaltmak istediğinizden emin misiniz? +ConfirmCloneEvent=%s etkinliğinin kopyasını oluşturmak istediğinizden emin misiniz? RepeatEvent=Etkinliği tekrarla EveryWeek=Her hafta EveryMonth=Her ay diff --git a/htdocs/langs/tr_TR/assets.lang b/htdocs/langs/tr_TR/assets.lang index c27d995824a..4c5f9631093 100644 --- a/htdocs/langs/tr_TR/assets.lang +++ b/htdocs/langs/tr_TR/assets.lang @@ -22,13 +22,13 @@ AccountancyCodeAsset = Muhasebe kodu (varlık) AccountancyCodeDepreciationAsset = Muhasebe kodu (amortisman varlık hesabı) AccountancyCodeDepreciationExpense = Muhasebe kodu (amortisman gideri hesabı) NewAssetType=Yeni varlık türü -AssetsTypeSetup=Asset type setup -AssetTypeModified=Asset type modified +AssetsTypeSetup=Varlık türü ayarları +AssetTypeModified=Varlık türü değiştirildi AssetType=Varlık türü AssetsLines=Varlıklar DeleteType=Sil -DeleteAnAssetType=Delete an asset type -ConfirmDeleteAssetType=Are you sure you want to delete this asset type? +DeleteAnAssetType=Bir varlık türü sil +ConfirmDeleteAssetType=Bu varlık türünü silmek istediğinizden emin misiniz? ShowTypeCard='%s' türünü göster # Module label 'ModuleAssetsName' @@ -42,7 +42,7 @@ ModuleAssetsDesc = Varlık açıklaması AssetsSetup = Varlık kurulumu Settings = Ayarlar AssetsSetupPage = Varlık kurulum sayfası -ExtraFieldsAssetsType = Complementary attributes (Asset type) +ExtraFieldsAssetsType = Tamamlayıcı öznitelikler (Varlık türü) AssetsType=Varlık türü AssetsTypeId=Varlık türü ID'si AssetsTypeLabel=Varlık türü etiketi @@ -53,7 +53,7 @@ AssetsTypes=Varlık türleri # MenuAssets = Varlıklar MenuNewAsset = Yeni varlık -MenuTypeAssets = Yeni varlıklar +MenuTypeAssets = Varlık türleri MenuListAssets = Liste MenuNewTypeAssets = Yeni MenuListTypeAssets = Liste diff --git a/htdocs/langs/tr_TR/banks.lang b/htdocs/langs/tr_TR/banks.lang index e3bbbb68146..b2bebf41130 100644 --- a/htdocs/langs/tr_TR/banks.lang +++ b/htdocs/langs/tr_TR/banks.lang @@ -9,13 +9,13 @@ BankAccount=Banka hesabı BankAccounts=Banka hesapları BankAccountsAndGateways=Banka hesapları | Ağ geçitleri ShowAccount=Hesabı Göster -AccountRef=Ticari hesap ref -AccountLabel=Ticari hesap adı +AccountRef=Ticari hesap referansı +AccountLabel=Ticari hesap etiketi CashAccount=Kasa hesabı CashAccounts=Kasa hesapları CurrentAccounts=Cari hesaplar SavingAccounts=Mevduat hesapları -ErrorBankLabelAlreadyExists=Ticari hesap adı zaten var +ErrorBankLabelAlreadyExists=Ticari hesap etiketi zaten var BankBalance=Bakiye BankBalanceBefore=Önceki bakiye BankBalanceAfter=Sonraki bakiye @@ -26,8 +26,8 @@ EndBankBalance=Kapanış bakiyesi CurrentBalance=Güncel bakiye FutureBalance=Gelecek bakiye ShowAllTimeBalance=Bakiyeyi başlangıçtan göster -AllTime=Başlangıç -Reconciliation=Uzlaşma +AllTime=Başlangıçtan +Reconciliation=Uzlaştırma RIB=Banka Hesap Numarası IBAN=IBAN numarası BIC=BIC/SWIFT kodu @@ -37,22 +37,22 @@ IbanValid=BAN geçerli IbanNotValid=BAN geçerli değil StandingOrders=Otomatik Ödeme talimatları StandingOrder=Otomatik ödeme talimatı -AccountStatement=Hesap özeti -AccountStatementShort=Özet -AccountStatements=Hesap özetleri -LastAccountStatements=Son hesap özetleri +AccountStatement=Hesap ekstresi +AccountStatementShort=Ekstre +AccountStatements=Hesap ekstresi +LastAccountStatements=Son hesap ekstreleri IOMonthlyReporting=Aylık raporlama BankAccountDomiciliation=Banka adresi BankAccountCountry=Hesap ülkesi BankAccountOwner=Hesap sahibi adı BankAccountOwnerAddress=Hesap sahibi adresi -RIBControlError=Integrity check of values failed. This means the information for this account number is not complete or is incorrect (check country, numbers and IBAN). +RIBControlError=Değerlerin bütünlük kontrolü başarısız oldu. Bu da, bu hesap numarası bilgilerinin tamamlanmamış veya yanlış olduğu anlamına gelir (ülkeyi, numaraları ve IBAN'ı kontrol edin). CreateAccount=Hesap oluştur NewBankAccount=Yeni hesap NewFinancialAccount=Yeni ticari hesap MenuNewFinancialAccount=Yeni ticari hesap EditFinancialAccount=Hesap düzenle -LabelBankCashAccount=Banka veya kasa adı +LabelBankCashAccount=Banka veya kasa etiketi AccountType=Hesap türü BankType0=Mevduat hesabı BankType1=Vadesiz banka ya da kredi kartı hesabı @@ -65,36 +65,36 @@ Account=Hesap BankTransactionByCategories=Kategorilere göre banka kayıtları BankTransactionForCategory=%s kategorisi için banka kayıtları RemoveFromRubrique=Kategori bağlantısını kaldır -RemoveFromRubriqueConfirm=Giriş ve kategori arasındaki bağlantıyı kaldırmak istediğinizden emin misiniz? +RemoveFromRubriqueConfirm=Kayıt ve kategori arasındaki bağlantıyı kaldırmak istediğinizden emin misiniz? ListBankTransactions=Banka kayıtlarının listesi IdTransaction=İşlem Kimliği BankTransactions=Banka kayıtları -BankTransaction=Banka girişi +BankTransaction=Banka kaydı ListTransactions=Kayıtları listele ListTransactionsByCategory=Kayıtları/Kategorileri listele -TransactionsToConciliate=Uzlaştırılacak girişler +TransactionsToConciliate=Uzlaştırılacak kayıtlar Conciliable=Uzlaştırılabilir Conciliate=Uzlaştır -Conciliation=Uzlaşma -SaveStatementOnly=Yalnızca bildirimi kaydet +Conciliation=Uzlaştırma +SaveStatementOnly=Yalnızca ekstreyi kaydet ReconciliationLate=Uzlaştırma gecikmiş -IncludeClosedAccount=Kapalı hesapları içer +IncludeClosedAccount=Kapalı hesapları dahil et OnlyOpenedAccount=Yalnızca açık hesaplar AccountToCredit=Alacak hesabı AccountToDebit=Borç hesabı -DisableConciliation=Bu hesap için uzlaşma özelliğini engelle -ConciliationDisabled=Uzlaşma özelliği engelli -LinkedToAConciliatedTransaction=Uzlaştırılmış bir girişe bağlı +DisableConciliation=Bu hesap için uzlaşma özelliğini devre dışı bırak +ConciliationDisabled=Uzlaşma özelliği devre dışı +LinkedToAConciliatedTransaction=Uzlaştırılmış bir kayda bağlı StatusAccountOpened=Açık StatusAccountClosed=Kapalı -AccountIdShort=Numarası +AccountIdShort=Numara LineRecord=İşlem -AddBankRecord=Giriş ekle -AddBankRecordLong=El ile giriş ekle +AddBankRecord=Kayıt ekle +AddBankRecordLong=Kaydı manuel olarak ekle Conciliated=Uzlaştırıldı ConciliatedBy=Uzlaştıran DateConciliating=Uzlaştırma tarihi -BankLineConciliated=Giriş uzlaştırıldı +BankLineConciliated=Kayıt uzlaştırıldı Reconciled=Uzlaştırıldı NotReconciled=Uzlaştırılmadı CustomerInvoicePayment=Müşteri ödemesi @@ -104,8 +104,8 @@ WithdrawalPayment=Borç ödeme talimatı SocialContributionPayment=Sosyal/mali vergi ödemesi BankTransfer=Banka havalesi BankTransfers=Banka havaleleri -MenuBankInternalTransfer=İç aktarım -TransferDesc=Transfer from one account to another, Dolibarr will write two records (a debit in source account and a credit in target account). The same amount (except sign), label and date will be used for this transaction) +MenuBankInternalTransfer=İç transfer +TransferDesc=Bir hesaptan başka bir hesaba transfer sırasında Dolibarr iki kayıt yazacaktır (kaynak hesaba borç ve hedef hesaba kredi). Bu işlem için aynı tutar (işaret hariç), etiket ve tarih kullanılacaktır. TransferFrom=Kimden TransferTo=Kime TransferFromToDone=%s den %s nin %s %s ne bir transfer kaydedildi. @@ -118,9 +118,9 @@ BankChecks=Banka çekleri BankChecksToReceipt=Ödeme için bekleyen çekler ShowCheckReceipt=Çek tahsilat makbuzunu göster NumberOfCheques=Çek sayısı -DeleteTransaction=Girişi sil -ConfirmDeleteTransaction=Bu girişi silmek istediğinizden emin misiniz? -ThisWillAlsoDeleteBankRecord=Bu, oluşturulan banka girişini de silecektir +DeleteTransaction=Kaydı sil +ConfirmDeleteTransaction=Bu kaydı silmek istediğinizden emin misiniz? +ThisWillAlsoDeleteBankRecord=Bu, oluşturulan banka kaydını da silecektir BankMovements=Hareketler PlannedTransactions=Planlanmış girişler Graph=Grafikler @@ -132,16 +132,16 @@ PaymentNumberUpdateFailed=Ödeme numarası güncellenemedi PaymentDateUpdateSucceeded=Ödeme tarihi güncellemesi başarılı PaymentDateUpdateFailed=Ödeme tarihi güncellenemedi Transactions=İşlemler -BankTransactionLine=Banka girişi +BankTransactionLine=Banka kaydı AllAccounts=Tüm banka ve kasa hesapları BackToAccount=Hesaba geri dön ShowAllAccounts=Tüm hesaplar için göster -FutureTransaction=Future transaction. Unable to reconcile. +FutureTransaction=Gelecekteki işlem. Uzlaştırılamıyor. SelectChequeTransactionAndGenerate=Çek mevduat makbuzuna dahil etmek için çekleri seç/filtrele ve "Oluştur" butonuna tıkla. -InputReceiptNumber=Uzlaştırma ile ilişkili banka hesap özetini seç. Sıralanabilir bir sayısal değer kullan: YYYYMM ya da YYYYMMDD +InputReceiptNumber=Uzlaştırma ile ilişkili banka ekstresini seç. Sıralanabilir bir sayısal değer kullan: YYYYMM ya da YYYYMMDD EventualyAddCategory=Sonunda, kayıtları sınıflandırmak için bir kategori belirtin ToConciliate=Uzlaştırılsın mı? -ThenCheckLinesAndConciliate=Sonra, banka hesap özetindeki kalemleri işaretleyin ve tıklayın +ThenCheckLinesAndConciliate=Sonra, banka hesap özetindeki satırları işaretleyin ve tıklayın DefaultRIB=Varsayılan BAN AllRIB=Tüm BAN LabelRIB=BAN Etiketi @@ -152,18 +152,18 @@ RejectCheck=Çek döndü ConfirmRejectCheck=Bu çeki reddedildi olarak işaretlemek istediğinizden emin misiniz? RejectCheckDate=Dönen çekin tarihi CheckRejected=Çek döndü -CheckRejectedAndInvoicesReopened=Çek döndü ve fatura yeniden açık yapıldı +CheckRejectedAndInvoicesReopened=Çek döndü ve faturalar yeniden açıldı BankAccountModelModule=Banka hesapları için belge şablonları -DocumentModelSepaMandate=Template of SEPA mandate. Useful for European countries in EEC only. +DocumentModelSepaMandate=SEPA yetkisi şablonu. Sadece EEC’deki Avrupa ülkeleri için kullanışlıdır. DocumentModelBan=BAN bilgisini içeren bir sayfayı yazdırmak için şablon -NewVariousPayment=New miscellaneous payment -VariousPayment=Miscellaneous payment +NewVariousPayment=Yeni çeşitli ödeme +VariousPayment=Çeşitli ödeme VariousPayments=Çeşitli ödemeler -ShowVariousPayment=Show miscellaneous payment +ShowVariousPayment=Çeşitli ödemeyi göster AddVariousPayment=Çeşitli ödeme ekle -SEPAMandate=SEPA mandate -YourSEPAMandate=Your SEPA mandate -FindYourSEPAMandate=This is your SEPA mandate to authorize our company to make direct debit order to your bank. Return it signed (scan of the signed document) or send it by mail to -AutoReportLastAccountStatement=Automatically fill the field 'number of bank statement' with last statement number when making reconciliation +SEPAMandate=SEPA yetkisi +YourSEPAMandate=SEPA yetkiniz +FindYourSEPAMandate=Bu, şirketimizin bankanıza otomatik ödeme talimatı verebilme yetkisi için SEPA yetkinizdir. İmzalayarak iade edin (imzalı belgeyi tarayarak) veya e-mail ile gönderin +AutoReportLastAccountStatement=Uzlaşma yaparken 'banka hesap özeti numarasını' en son hesap özeti numarası ile otomatik olarak doldur CashControl=POS cash fence NewCashFence=New cash fence diff --git a/htdocs/langs/tr_TR/bills.lang b/htdocs/langs/tr_TR/bills.lang index c7ea5eba0b8..53d372c93fd 100644 --- a/htdocs/langs/tr_TR/bills.lang +++ b/htdocs/langs/tr_TR/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma fatura InvoiceProFormaDesc=Proforma fatura gerçek faturanın bir görüntüsüdür ancak muhasebe değeri yoktur. InvoiceReplacement=Fatura değiştirme InvoiceReplacementAsk=Fatura değiştirme yapılacak fatura -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=İade faturası InvoiceAvoirAsk=Fatura düzeltmek için iade faturası InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). @@ -323,7 +323,7 @@ PaymentNumber=Ödeme numarası RemoveDiscount=İndirimi kaldır WatermarkOnDraftBill=Taslak faturaların üzerinde filigran (eğer boşsa hiçbirşey yok) InvoiceNotChecked=Seçilen yok fatura -ConfirmCloneInvoice=%s faturasını kopyalamak istediğinizden emin misiniz? +ConfirmCloneInvoice=%s faturasının kopyasını oluşturmak istediğinizden emin misiniz? DisabledBecauseReplacedInvoice=Eylem engellendi, çünkü fatura değiştirilmiştir DescTaxAndDividendsArea=This area presents a summary of all payments made for special expenses. Only records with payments during the fixed year are included here. NbOfPayments=Ödeme sayısı diff --git a/htdocs/langs/tr_TR/categories.lang b/htdocs/langs/tr_TR/categories.lang index f2b04bf28ab..9b784c6cb1e 100644 --- a/htdocs/langs/tr_TR/categories.lang +++ b/htdocs/langs/tr_TR/categories.lang @@ -16,7 +16,7 @@ MembersCategoriesArea=Üyeler etiketleri/kategorileri alanı ContactsCategoriesArea=Kişi etiketleri/kategorileri alanı AccountsCategoriesArea=Hesap etiketleri/kategorileri alanı ProjectsCategoriesArea=Proje etiket/kategori alanı -UsersCategoriesArea=Kullanıcı etiketleri/kategorileri alanı +UsersCategoriesArea=Kullanıcı Etiketleri/Kategorileri Alanı SubCats=Alt kategoriler CatList= Etiketler/kategoriler listesi NewCategory=Yeni etiket/kategori diff --git a/htdocs/langs/tr_TR/companies.lang b/htdocs/langs/tr_TR/companies.lang index 52b78fbb0c1..d86609361ce 100644 --- a/htdocs/langs/tr_TR/companies.lang +++ b/htdocs/langs/tr_TR/companies.lang @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Mutlak satıcı indirimleri (tüm kullanıcıla SupplierAbsoluteDiscountMy=Mutlak satıcı indirimleri (tarafınızdan girilen) DiscountNone=Hiçbiri Vendor=Tedarikçi +Supplier=Tedarikçi AddContact=Kişi oluştur AddContactAddress=Kişi/adres oluştur EditContact=Kişi düzenle diff --git a/htdocs/langs/tr_TR/compta.lang b/htdocs/langs/tr_TR/compta.lang index 43d301f2742..b25063d0875 100644 --- a/htdocs/langs/tr_TR/compta.lang +++ b/htdocs/langs/tr_TR/compta.lang @@ -230,8 +230,8 @@ ACCOUNTING_ACCOUNT_CUSTOMER=Müşteri üçüncü partileri için kullanılan muh ACCOUNTING_ACCOUNT_CUSTOMER_Desc=The dedicated accounting account defined on third party card will be used for Subledger accounting only. This one will be used for General Ledger and as default value of Subledger accounting if dedicated customer accounting account on third party is not defined. ACCOUNTING_ACCOUNT_SUPPLIER=Tedarikçi üçüncü partileri için kullanılan muhasebe hesabı ACCOUNTING_ACCOUNT_SUPPLIER_Desc=The dedicated accounting account defined on third party card will be used for Subledger accounting only. This one will be used for General Ledger and as default value of Subledger accounting if dedicated vendor accounting account on third party is not defined. -ConfirmCloneTax=Confirm the clone of a social/fiscal tax -CloneTaxForNextMonth=Sonraki aya kopyala +ConfirmCloneTax=Sosyal/mali vergi kopyasının oluşturulmasını onayla +CloneTaxForNextMonth=Sonraki ay için kopyasını oluştur SimpleReport=Basit rapor AddExtraReport=Extra reports (add foreign and national customer report) OtherCountriesCustomersReport=Yabancı müşteri raporu diff --git a/htdocs/langs/tr_TR/contracts.lang b/htdocs/langs/tr_TR/contracts.lang index 7e77ee65d6d..89a94bed22c 100644 --- a/htdocs/langs/tr_TR/contracts.lang +++ b/htdocs/langs/tr_TR/contracts.lang @@ -85,8 +85,8 @@ ListOfServicesToExpire=Süresi dolacak Hizmetler Listesi NoteListOfYourExpiredServices=Bu listede yalnızca satış temsilcisi olarak atandığınız üçüncü partilere ait hizmet sözleşmeleri bulunur. StandardContractsTemplate=Standart sözleşme kalıbı ContactNameAndSignature=%s için, ad ve imza -OnlyLinesWithTypeServiceAreUsed=Yalnızca "Hizmet" türündeki satırlar klonlanacaktır. -ConfirmCloneContract=%s sözleşmesini kopyalamak istediğinizden emin misiniz? +OnlyLinesWithTypeServiceAreUsed=Yalnızca "Hizmet" türündeki satırların kopyası oluşturulacaktır. +ConfirmCloneContract=%s sözleşmesinin kopyasını oluşturmak istediğinizden emin misiniz? LowerDateEndPlannedShort=Aktif hizmetlerin planlı alt bitiş tarihi SendContractRef=Sözleşme bilgileri __REF__ OtherContracts=Diğer sözleşmeler diff --git a/htdocs/langs/tr_TR/cron.lang b/htdocs/langs/tr_TR/cron.lang index edb5df20f91..34939dd94f3 100644 --- a/htdocs/langs/tr_TR/cron.lang +++ b/htdocs/langs/tr_TR/cron.lang @@ -22,10 +22,10 @@ EnabledAndDisabled=Etkin ve engelli CronLastOutput=En son çalıştırma çıktısı CronLastResult=En son sonuç kodu CronCommand=Komut -CronList=Planlı işler +CronList=Planlı İşler CronDelete=Planlı işleri sil CronConfirmDelete=Bu zamanlanmış işleri silmek istediğinizden emin misiniz? -CronExecute=Planlı işleri yükle +CronExecute=Planlı işi başlat CronConfirmExecute=Bu zamanlanmış işleri şimdi yürütmek istediğinizden emin misiniz? CronInfo=Zamanlanmış iş modülü, işlerin otomatik olarak yürütülmesi için planlanmasına izin verir. İşler manuel olarak da başlatılabilir. CronTask=İş @@ -76,7 +76,7 @@ CronType_method=Call method of a PHP Class CronType_command=Kabuk komutu CronCannotLoadClass=Cannot load class file %s (to use class %s) CronCannotLoadObject=Class file %s was loaded, but object %s was not found into it -UseMenuModuleToolsToAddCronJobs=Planlı işleri görmek ve düzenlemek için "Giriş - Yönetici Ayarları - Planlı işler" menüsüne git. +UseMenuModuleToolsToAddCronJobs=Planlı işleri görmek ve düzenlemek için "Giriş - Yönetici Araçları - Planlı İşler" menüsüne git. JobDisabled=İş engellendi MakeLocalDatabaseDumpShort=Yerel veritabanı yedeklemesi MakeLocalDatabaseDump=Create a local database dump. Parameters are: compression ('gz' or 'bz' or 'none'), backup type ('mysql', 'pgsql', 'auto'), 1, 'auto' or filename to build, number of backup files to keep diff --git a/htdocs/langs/tr_TR/errors.lang b/htdocs/langs/tr_TR/errors.lang index 37125f78940..714b9d6c9ac 100644 --- a/htdocs/langs/tr_TR/errors.lang +++ b/htdocs/langs/tr_TR/errors.lang @@ -228,8 +228,8 @@ WarningPassIsEmpty=Uyarı, veritabanı parolası boş. Bu bir güvenlik açığ WarningConfFileMustBeReadOnly=Uyarı, web sunucusu tarafından yapılandırma dosyanızın (htdocs/conf/conf.php) üzerine üzerine yazılabilir.Bu ciddi bir güvenlik açığıdır. Web sunucusun kullandığı sistem kullanıcısının çalışması için dosyadaki izinleri sadece okumaya değiştirin. Windows ve disk için FAT biçimini kullanıyorsanız, bu dosya sisteminin dosya izinleri eklemek izin vermediğini bilmelisiniz, bu nedenle tamamen güvenli olamaz. WarningsOnXLines=%s kaynak satırlarındaki uyarılar WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup. -WarningLockFileDoesNotExists=Warning, once setup is finished, you must disable the installation/migration tools by adding a file install.lock into directory %s. Omitting the creation of this file is a grave security risk. -WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup). +WarningLockFileDoesNotExists=Uyarı: Kurulum tamamlandıktan sonra install.lock dosyasını %s dizinine ekleyerek yükleme/taşıma araçlarını devre dışı bırakmanız gerekir. Bu dosyanın oluşturulmasını ihmal etmek büyük bir güvenlik riskidir. +WarningUntilDirRemoved=Güvenlik açığı bulunduğu sürece tüm güvenlik uyarıları (sadece yönetici olan kullanıcılar tarafından görülür) aktif olarak kalacaktır (Ayarlar->Diğer Ayarlar bölümüne MAIN_REMOVE_INSTALL_WARNING sabitini ekleyerek uyarıları engelleyebilirsiniz). WarningCloseAlways=Uyarı, kaynak ve hedef öğeleri arasında tutar farklı da olsa kapanış yapılır. Bu özelliği dikkatlice etkinleştirin. WarningUsingThisBoxSlowDown=Uyarı, bu kutuyu kullanmak kutuyu gösteren tüm sayfaları ciddi olarak yavaşlatır. WarningClickToDialUserSetupNotComplete=Kullanıcınızın ClickToDial bilgileri ayarı tamamlanmamış (kullanıcı kartınızdaki ClickToDial tabına bakın) diff --git a/htdocs/langs/tr_TR/install.lang b/htdocs/langs/tr_TR/install.lang index 72d3d7dce74..e8c02440978 100644 --- a/htdocs/langs/tr_TR/install.lang +++ b/htdocs/langs/tr_TR/install.lang @@ -11,7 +11,7 @@ ConfFileReload=Yapılandırma dosyasındaki parametreleri yeniden yükleme. PHPSupportSessions=Bu PHP oturumları destekliyor. PHPSupportPOSTGETOk=Bu PHP GÖNDER ve AL değişkenlerini destekliyor. PHPSupportPOSTGETKo=It's possible your PHP setup does not support variables POST and/or GET. Check the parameter variables_order in php.ini. -PHPSupportGD=This PHP supports GD graphical functions. +PHPSupportGD=Bu PHP, GD grafiksel işlevleri destekliyor. PHPSupportCurl=Bu PHP, Curl'u destekliyor. PHPSupportUTF8=Bu PHP, UTF8 işlevlerini destekliyor. PHPSupportIntl=Bu PHP, Intl fonksiyonlarını destekliyor. diff --git a/htdocs/langs/tr_TR/interventions.lang b/htdocs/langs/tr_TR/interventions.lang index f725f6553f2..0a7ffb30836 100644 --- a/htdocs/langs/tr_TR/interventions.lang +++ b/htdocs/langs/tr_TR/interventions.lang @@ -19,7 +19,7 @@ ConfirmDeleteIntervention=Bu müdahaleyi silmek istediğinizden emin misiniz? ConfirmValidateIntervention=Bu müdahaleyi %s adıyla doğrulamak istediğinizden emin misiniz? ConfirmModifyIntervention=Bu müdahaleyi değiştirmek istediğinizden emin misiniz? ConfirmDeleteInterventionLine=Bu müdahale satırını silmek istediğinizden emin misiniz? -ConfirmCloneIntervention=Bu müdahaleyi kopyalamak istediğinizden emin misiniz? +ConfirmCloneIntervention=Bu müdahalenin kopyasını oluşturmak istediğinizden emin misiniz? NameAndSignatureOfInternalContact=Müdahalenin adı ve imzası: NameAndSignatureOfExternalContact=Müşterinin adı ve imzası: DocumentModelStandard=Müdahaleler için standart belge modeli diff --git a/htdocs/langs/tr_TR/mails.lang b/htdocs/langs/tr_TR/mails.lang index dbdba7c025d..4ae97915eae 100644 --- a/htdocs/langs/tr_TR/mails.lang +++ b/htdocs/langs/tr_TR/mails.lang @@ -60,9 +60,9 @@ EMailTestSubstitutionReplacedByGenericValues=Test modunu kullanırken, yedek de MailingAddFile=Bu dosyayı ekle NoAttachedFiles=Ekli dosya yok BadEMail=E-posta için hatalı değer -ConfirmCloneEMailing=Bu e-postayı kopyalamak istediğinizden emin misiniz? -CloneContent=Mesajı klonla -CloneReceivers=Alıcıları klonla +ConfirmCloneEMailing=Bu e-postanın kopyasını oluşturmak istediğinizden emin misiniz? +CloneContent=Mesajın kopyasını oluştur +CloneReceivers=Alıcıların kopyasını oluştur DateLastSend=Son gönderim tarihi DateSending=Gönderme tarihi SentTo=%s ye gönderilen @@ -105,10 +105,10 @@ MailNoChangePossible=Doğrulanmış e-postaların alıcıları değiştirilemez SearchAMailing=Eposta ara SendMailing=E-posta gönder SentBy=Gönderen -MailingNeedCommand=Sending an emailing can be performed from command line. Ask your server administrator to launch the following command to send the emailing to all recipients: +MailingNeedCommand=Bir e-posta gönderimi komut satırından gerçekleştirilebilir. E-postayı tüm alıcılara göndermek için sunucu yöneticinizden aşağıdaki komutu başlatmasını isteyin: MailingNeedCommand2=Bunula birlikte, oturum tarafından gönderilecek ençok e-posta sayılı MAILING_LIMIT_SENDBYWEB parametresini ekleyerek çevrim içi olarak gönderebilirsiniz. Bunu için Giriş-Kurulum-Diğer menüsüne gidin. ConfirmSendingEmailing=Direkt olarak bu ekrandan e-posta göndermek istiyorsanız, lütfen e-postayı tarayıcınızdan şimdi göndermek istediğinizden emin olduğunuzu onaylayın. -LimitSendingEmailing=Not: Web arayüzünden e-posta gönderimi güvenlik ve süre aşımı yüzünden birçok kez yapılmıştır, her gönderme oturumu başına %s alıcıya +LimitSendingEmailing=Not: Web arayüzünden e-posta gönderimi, güvenlik ve süre aşımı nedenlerinden dolayı birkaç defada gerçekleştirilir, her gönderim girişiminde tek seferde %s alıcıya gönderim yapılır. TargetsReset=Listeyi temizle ToClearAllRecipientsClickHere=Bu e-posta alıcı listesini temizlemek için burayı tıkla ToAddRecipientsChooseHere=Listeden seçerek alıcıları ekle diff --git a/htdocs/langs/tr_TR/main.lang b/htdocs/langs/tr_TR/main.lang index 115ca6ceeb0..4edc9cbc7a4 100644 --- a/htdocs/langs/tr_TR/main.lang +++ b/htdocs/langs/tr_TR/main.lang @@ -92,7 +92,7 @@ NotDefined=Tanımlanmamış DolibarrInHttpAuthenticationSoPasswordUseless=conf.php yapılandırma dosyasındaki Dolibarr kimlik doğrulama modu %s olarak ayarlanmış.
Bu demektir ki; veritabanı parolası Dolibarr dışıdır, yani bu alanı değiştirmek hiçbir etki yaratmaz. Administrator=Yönetici Undefined=Tanımlanmamış -PasswordForgotten=Parola mı unutuldu? +PasswordForgotten=Parolanızı mı unuttunuz? NoAccount=Hesap yok mu? SeeAbove=Yukarı bak HomeArea=Giriş @@ -169,9 +169,9 @@ NotValidated=Doğrulanmadı Save=Kaydet SaveAs=Farklı kaydet TestConnection=Deneme bağlantısı -ToClone=Klonla -ConfirmClone=Çoğaltmak istediğiniz verileri seçin: -NoCloneOptionsSpecified=Klonlanacak hiçbir veri tanımlanmamış. +ToClone=Kopyasını oluştur +ConfirmClone=Kopyasını oluşturmak istediğiniz verileri seçin: +NoCloneOptionsSpecified=Kopyası oluşturulacak hiçbir veri tanımlanmamış. Of=ile ilgili Go=Git Run=Yürüt @@ -333,7 +333,7 @@ Copy=Kopyala Paste=Yapıştır Default=Varsayılan DefaultValue=Varsayılan değer -DefaultValues=Varsayılan değerler/filtreler/sıralama +DefaultValues=Varsayılan Değerler/Filtreler/Sıralama Price=Fiyat PriceCurrency=Fiyat (para birimi) UnitPrice=Birim fiyat @@ -648,7 +648,7 @@ AlreadyRead=Zaten okundu NotRead=Okunmayan NoMobilePhone=Cep telefonu yok Owner=Sahibi -FollowingConstantsWillBeSubstituted=Aşağıdaki değişmezler uygun değerlerin yerine konacaktır. +FollowingConstantsWillBeSubstituted=Aşağıdaki değişmezler uygun değerlerin yerine konacaktır Refresh=Yenile BackToList=Listeye dön GoBack=Geri dön @@ -710,7 +710,7 @@ AddNewLine=Yeni satır ekle AddFile=Dosya ekle FreeZone=Önceden tanımlanmış bir ürün/hizmet değil FreeLineOfType=Serbest metin öğesi, tür: -CloneMainAttributes=Nesneyi ana öznitelikleri ile klonla +CloneMainAttributes=Ana öznitelikleri ile birlikte nesnenin kopyasını oluştur. ReGeneratePDF=PDF'yi yeniden oluştur PDFMerge=PDF Birleştir Merge=Birleştir @@ -875,7 +875,7 @@ TitleSetToDraft=Taslağa geri dön ConfirmSetToDraft=Taslak durumuna geri dönmek istediğinizden emin misiniz? ImportId=İçe aktarma ID'si Events=Etkinlikler -EMailTemplates=E-posta şablonları +EMailTemplates=E-posta Şablonları FileNotShared=File not shared to external public Project=Proje Projects=Projeler diff --git a/htdocs/langs/tr_TR/orders.lang b/htdocs/langs/tr_TR/orders.lang index dbe2d77cbf0..eb87dc59bf9 100644 --- a/htdocs/langs/tr_TR/orders.lang +++ b/htdocs/langs/tr_TR/orders.lang @@ -110,7 +110,7 @@ OrderMode=Sipariş yöntemi AuthorRequest=Siparişi yazan UserWithApproveOrderGrant=Kullanıcılara "sipariş onaylama" izin hakkı verilmiştir.. PaymentOrderRef=Sipariş %s ödemesi -ConfirmCloneOrder=Bu siparişi kopyalamak istediğinizden emin misiniz %s? +ConfirmCloneOrder=%s siparişinin kopyasını oluşturmak istediğinizden emin misiniz? DispatchSupplierOrder=Receiving purchase order %s FirstApprovalAlreadyDone=İlk onay zaten yapılmış SecondApprovalAlreadyDone=İkinci onaylama zaten yapılmış diff --git a/htdocs/langs/tr_TR/other.lang b/htdocs/langs/tr_TR/other.lang index 89e49e2cdfe..913cef5ab06 100644 --- a/htdocs/langs/tr_TR/other.lang +++ b/htdocs/langs/tr_TR/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Müşteri faturalarının sayısı NumberOfSupplierProposals=Tedarikçi tekliflerinin sayısı NumberOfSupplierOrders=Tedarikçi siparişi sayısı NumberOfSupplierInvoices=Tedarikçi siparişlerinin sayısı +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Tekliflerdeki birim sayısı NumberOfUnitsCustomerOrders=Müşteri siparişlerindeki birim sayısı NumberOfUnitsCustomerInvoices=Müşteri faturalarındaki birim sayısı NumberOfUnitsSupplierProposals=Tedarikçi tekliflerinde yer alan birim sayısı NumberOfUnitsSupplierOrders=Tedarikçi siparişlerindeki birim sayısı NumberOfUnitsSupplierInvoices=Tedarikçi faturalarındaki birim sayısı +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=Yeni bir müdahale %s size atandı. EMailTextInterventionValidated=Müdahele %s doğrulanmıştır. EMailTextInvoiceValidated=Fatura %s doğrulandı. diff --git a/htdocs/langs/tr_TR/products.lang b/htdocs/langs/tr_TR/products.lang index 5266a52fe58..46b15d67da5 100644 --- a/htdocs/langs/tr_TR/products.lang +++ b/htdocs/langs/tr_TR/products.lang @@ -77,7 +77,7 @@ CantBeLessThanMinPrice=Satış fiyatı bu ürün için izin verilen en düşük ContractStatusClosed=Kapalı ErrorProductAlreadyExists=%s Referanslı bir ürün zaten var var. ErrorProductBadRefOrLabel=Referans veya etiket için yanlış değer. -ErrorProductClone=Ürün ya da hizmetin klonlanmasına çalışılırken bir sorun oluştu. +ErrorProductClone=Ürün ya da hizmetin kopyasını oluşturmaya çalışırken bir sorun oluştu. ErrorPriceCantBeLowerThanMinPrice=Hata, fiyat en düşük fiyattan daha düşük olamaz. Suppliers=Tedarikçiler SupplierRef=Tedarikçi Ürün Kodu @@ -145,11 +145,11 @@ ListProductByPopularity=Popülerliğine göre ürün listesi ListServiceByPopularity=Popülerliğine göre hizmetler listesi Finished=Bitmiş ürün RowMaterial=Ham madde -ConfirmCloneProduct=%s ürünü ve siparişi klonlamak istediğinizden emin misiniz? -CloneContentProduct=Ürün/hizmet ile ilgili tüm temel bilgileri kopyalayın -ClonePricesProduct=Fiyatları çoğalt -CloneCompositionProduct=Sanal ürünü/hizmeti çoğalt (kopyala) -CloneCombinationsProduct=Ürün varyantlarını kopyala +ConfirmCloneProduct=%s ürünü ve siparişinin kopyasını oluşturmak istediğinizden emin misiniz? +CloneContentProduct=Ürün/hizmet ile ilgili tüm temel bilgilerin kopyasını oluştur +ClonePricesProduct=Fiyatların kopyasını oluştur +CloneCompositionProduct=Sanal ürünü/hizmetin kopyasını oluştur +CloneCombinationsProduct=Ürün değişkenlerinin kopyasını oluştur ProductIsUsed=Bu ürün kullanılır. NewRefForClone=Yeni ürün/hizmet ref. SellingPrices=Satış fiyatları diff --git a/htdocs/langs/tr_TR/projects.lang b/htdocs/langs/tr_TR/projects.lang index d0aeae12e7d..76bf661efa6 100644 --- a/htdocs/langs/tr_TR/projects.lang +++ b/htdocs/langs/tr_TR/projects.lang @@ -134,13 +134,13 @@ TaskIsNotAssignedToUser=Görev kullanıcıya atanmadı. Görevi şimdi atamak i ErrorTimeSpentIsEmpty=Harcanan süre boş ThisWillAlsoRemoveTasks=Bu eylem aynı zamanda projenin tüm görevlerini (şu andaki %s görevleri) ve tüm harcanan süre girişlernii siler . IfNeedToUseOtherObjectKeepEmpty=Eğer bazı nesneler başka bir üçüncü partiye aitse (fatura, sipariş, ...), oluşturulması için bu projeye bağlanmalıdır, projenin birden çok üçüncü partiye bağlı olması için bunu boş bırakın. -CloneTasks=Görev klonla -CloneContacts=Kişi klonla -CloneNotes=Not klonla -CloneProjectFiles=Birleşik proje dosyalarını kopyala +CloneTasks=Görevlerin kopyasını oluştur +CloneContacts=Kişilerin kopyasını oluştur +CloneNotes=Notların kopyasını oluştur +CloneProjectFiles=Dosyalara eklenen projenin kopyasını oluştur CloneTaskFiles=Birleşik görev(ler) dosyalarını kopyala (görev(ler) kopyalanmışsa) CloneMoveDate=Proje/görev tarihleri şu andan itibaren güncellensin mi? -ConfirmCloneProject=Bu projeyi kopyalamak istediğinizden emin misiniz? +ConfirmCloneProject=Bu projenin kopyasını oluşturmak istediğinizden emin misiniz? ProjectReportDate=Change task dates according to new project start date ErrorShiftTaskDate=Görev tarihini yeni proje başlama tarihine göre kaydırmak olası değil ProjectsAndTasksLines=Projeler ve görevler diff --git a/htdocs/langs/tr_TR/propal.lang b/htdocs/langs/tr_TR/propal.lang index ea4962de9ab..360c19f714d 100644 --- a/htdocs/langs/tr_TR/propal.lang +++ b/htdocs/langs/tr_TR/propal.lang @@ -56,7 +56,7 @@ CopyPropalFrom=Varolan teklifi kopyalayarak teklif oluştur CreateEmptyPropal=Boş veya Ürünler/Hizmetler listesinden ticari teklif oluştur DefaultProposalDurationValidity=Varsayılan teklif geçerlilik süresi (gün olarak) UseCustomerContactAsPropalRecipientIfExist=Use contact/address with type 'Contact following-up proposal' if defined instead of third party address as proposal recipient address -ConfirmClonePropal=Ticari teklifi çoğaltmak istediğinizden emin misiniz? %s? +ConfirmClonePropal=%s teklifinin kopyasını oluşturmak istediğinizden emin misiniz? ConfirmReOpenProp=Ticari teklifi geri açmak istediğinizden emin misiniz %s? ProposalsAndProposalsLines=Teklif ve satırları ProposalLine=Teklif satırı diff --git a/htdocs/langs/tr_TR/resource.lang b/htdocs/langs/tr_TR/resource.lang index 25e8cbd1af6..16d96685df4 100644 --- a/htdocs/langs/tr_TR/resource.lang +++ b/htdocs/langs/tr_TR/resource.lang @@ -1,11 +1,11 @@ # Dolibarr language file - Source file is en_US - resource MenuResourceIndex=Kaynaklar -MenuResourceAdd=Yeni kaynaklar +MenuResourceAdd=Yeni Kaynaklar DeleteResource=Kaynak sil ConfirmDeleteResourceElement=Bu öğe için kaynağı silmeyi onayla NoResourceInDatabase=Veritabanında kaynak yok NoResourceLinked=Bağlantılı kaynak yok - +ActionsOnResource=Bu kaynakla ilgili etkinlikler ResourcePageIndex=Kaynak listesi ResourceSingular=Kaynak ResourceCard=Kaynak kartı diff --git a/htdocs/langs/tr_TR/supplier_proposal.lang b/htdocs/langs/tr_TR/supplier_proposal.lang index 9e120f15ccb..f623341419c 100644 --- a/htdocs/langs/tr_TR/supplier_proposal.lang +++ b/htdocs/langs/tr_TR/supplier_proposal.lang @@ -34,7 +34,7 @@ SupplierProposalStatusSignedShort=Kabul edildi SupplierProposalStatusNotSignedShort=Reddedildi CopyAskFrom=Varolan bir isteği kopyalayarak fiyat isteği oluştur CreateEmptyAsk=Boş istek oluştur -ConfirmCloneAsk=Fiyat talebini çoğaltmak istediğinizden emin misiniz %s? +ConfirmCloneAsk=%s fiyat talebinin kopyasını oluşturmak istediğinizden emin misiniz? ConfirmReOpenAsk=Fiyat talebini geri açmak istediğinizden emin misiniz %s? SendAskByMail=Fiyat isteğini e-posta ile gönder SendAskRef=Fiyat isteği %s gönderiliyor diff --git a/htdocs/langs/tr_TR/ticket.lang b/htdocs/langs/tr_TR/ticket.lang index 0f9c9ce4fde..5d03c756d59 100644 --- a/htdocs/langs/tr_TR/ticket.lang +++ b/htdocs/langs/tr_TR/ticket.lang @@ -268,7 +268,7 @@ SeeThisTicketIntomanagementInterface=Yönetim arayüzünde destek bildirimini g TicketPublicInterfaceForbidden=Destek bildirimi için genel arayüz etkin değil ErrorEmailOrTrackingInvalid=Takip numarası veya e-posta için hatalı değer OldUser=Eski kullanıcı -NewUser=Yeni kullanıcı +NewUser=Yeni Kullanıcı NumberOfTicketsByMonth=Aylık destek bildirim sayısı NbOfTickets=Destek bildirim sayısı # notifications diff --git a/htdocs/langs/tr_TR/trips.lang b/htdocs/langs/tr_TR/trips.lang index 03783401b6c..dfb2ee21b93 100644 --- a/htdocs/langs/tr_TR/trips.lang +++ b/htdocs/langs/tr_TR/trips.lang @@ -109,7 +109,7 @@ NoTripsToExportCSV=Bu dönem için dışaaktarılacak gider raporu yok. ExpenseReportPayment=Gider raporu ödemesi ExpenseReportsToApprove=Onaylanacak gider raporları ExpenseReportsToPay=Ödenecek gider raporları -ConfirmCloneExpenseReport=Bu gider raporunu kopyalamak istediğinizden emin misiniz? +ConfirmCloneExpenseReport=Bu gider raporunun kopyasını oluşturmak istediğinizden emin misiniz? ExpenseReportsIk=Expense report milles index ExpenseReportsRules=Gider raporu kuralları ExpenseReportIkDesc=You can modify the calculation of kilometers expense by category and range who they are previously defined. d is the distance in kilometers diff --git a/htdocs/langs/tr_TR/users.lang b/htdocs/langs/tr_TR/users.lang index 21feef75fa1..50b800b2d52 100644 --- a/htdocs/langs/tr_TR/users.lang +++ b/htdocs/langs/tr_TR/users.lang @@ -26,11 +26,11 @@ ConfirmDeleteGroup=%s grubunu silmek istediğinizden emin misiniz? ConfirmEnableUser=%s kullanıcısını etkinleştirmek istediğinizden emin misiniz? ConfirmReinitPassword=%skullanıcısı için yeni bir şifre oluşturmak istediğinizden emin misiniz? ConfirmSendNewPassword=%s kullanıcısı için yeni şifre oluşturmak ve göndermek istediğinizden emin misiniz? -NewUser=Yeni kullanıcı +NewUser=Yeni Kullanıcı CreateUser=Kullanıcı oluştur LoginNotDefined=Kullanıcı adı tanımlı değil. NameNotDefined=Ad tanımlı değil. -ListOfUsers=Kullanıcı listesi +ListOfUsers=Kullanıcı Listesi SuperAdministrator=Süper Yönetici SuperAdministratorDesc=Yöneticinin tüm hakları AdministratorDesc=Yönetici @@ -39,8 +39,8 @@ DefaultRightsDesc=Burada, yeni bir kullanıcıya otomatik olarak verilen DolibarrUsers=Dolibarr kullanıcıları LastName=Soyadı FirstName=Adı -ListOfGroups=Grupların listesi -NewGroup=Yeni grup +ListOfGroups=Grupların Listesi +NewGroup=Yeni Grup CreateGroup=Grup oluştur RemoveFromGroup=Gruptan kaldır PasswordChangedAndSentTo=Parola değiştirildi ve %s e gönderildi. @@ -96,7 +96,7 @@ NbOfUsers=Kullanıcı sayısı NbOfPermissions=İzinlerin sayısı DontDowngradeSuperAdmin=Yalnızca bir SuperAdmin, bir SuperAdmin’inin derecesini düşürebilir HierarchicalResponsible=Yönetici -HierarchicView=Sıradüzeni görünümü +HierarchicView=Sıradüzeni Görünümü UseTypeFieldToChange=Değiştirmek için Alan türünü kullan OpenIDURL=OpenID URL LoginUsingOpenID=Oturum açmak için OpenID kullan diff --git a/htdocs/langs/tr_TR/website.lang b/htdocs/langs/tr_TR/website.lang index 85648d7cc51..9914ef2475d 100644 --- a/htdocs/langs/tr_TR/website.lang +++ b/htdocs/langs/tr_TR/website.lang @@ -53,8 +53,8 @@ YouCanCreatePageOrImportTemplate=Yeni bir sayfa oluşturabilir veya tam bir web SyntaxHelp=Belirli sözdizimi ipuçları hakkında yardım YouCanEditHtmlSourceckeditor=Düzenleyicideki "Kaynak" düğmesini kullanarak HTML kaynak kodunu düzenleyebilirsiniz YouCanEditHtmlSource=
You can include PHP code into this source using tags <?php ?>. The following global variables are available: $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs.

You can also include content of another Page/Container with the following syntax:
<?php includeContainer('alias_of_container_to_include'); ?>

You can make a redirect to another Page/Container with the following syntax (Note: do not output any content before a redirect):
<?php redirectToContainer('alias_of_container_to_redirect_to'); ?>

To add a link to another page, use the syntax:
<a href="alias_of_page_to_link_to.php">mylink<a>

To include a link to download a file stored into the documents directory, use the document.php wrapper:
Example, for a file into documents/ecm (need to be logged), syntax is:
<a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext">
For a file into documents/medias (open directory for public access), syntax is:
<a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext">
For a file shared with a share link (open access using the sharing hash key of file), syntax is:
<a href="/document.php?hashp=publicsharekeyoffile">

To include an image stored into the documents directory, use the viewimage.php wrapper:
Example, for an image into documents/medias (open directory for public access), syntax is:
<img src="/viewimage.php?modulepart=medias&file=[relative_dir/]filename.ext">
-ClonePage=Sayfa/kapsayıcı kopyala -CloneSite=Siteyi kopyala +ClonePage=Sayfa/kapsayıcı kopyasını oluştur +CloneSite=Sitenin kopyasını oluştur SiteAdded=Web sitesi eklendi ConfirmClonePage=Please enter code/alias of new page and if it is a translation of the cloned page. PageIsANewTranslation=Yeni sayfa mevcut sayfanın çevirisi mi? @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=Henüz bir web sitesi oluşturulmadı. Önce bir tane ol GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Web sitesi içeriğini değiştir +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Bu web sitesine özgü tüm javascript dosyaları da silinsin mi? DeleteAlsoMedias=Bu web sitesine özgü tüm medya dosyaları da silinsin mi? # Export diff --git a/htdocs/langs/uk_UA/accountancy.lang b/htdocs/langs/uk_UA/accountancy.lang index 2f8b14ad135..2c0c96bb664 100644 --- a/htdocs/langs/uk_UA/accountancy.lang +++ b/htdocs/langs/uk_UA/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/uk_UA/admin.lang b/htdocs/langs/uk_UA/admin.lang index fe7d48b8ac7..2aa26a32a3b 100644 --- a/htdocs/langs/uk_UA/admin.lang +++ b/htdocs/langs/uk_UA/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Create/modify services Permission534=Delete services Permission536=See/manage hidden services Permission538=Export services -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Read donations Permission702=Create/modify donations Permission703=Delete donations @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/uk_UA/bills.lang b/htdocs/langs/uk_UA/bills.lang index 3c30ae87f85..667a89a60fe 100644 --- a/htdocs/langs/uk_UA/bills.lang +++ b/htdocs/langs/uk_UA/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Рахунок проформа InvoiceProFormaDesc=Рахунок проформа є образом оригінального рахунку, але не має бухгалтерського облікового запису. InvoiceReplacement=Заміна рахунка-фактури InvoiceReplacementAsk=Заміна рахунка-фактури на інший -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Кредитове авізо InvoiceAvoirAsk=Кредитове авізо для коригування рахунка-фактури InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/uk_UA/companies.lang b/htdocs/langs/uk_UA/companies.lang index 499828f5eac..96ef561910b 100644 --- a/htdocs/langs/uk_UA/companies.lang +++ b/htdocs/langs/uk_UA/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias name (commercial, trademark, ...) AliasNameShort=Alias Name Companies=Companies CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=None Vendor=Vendor +Supplier=Vendor AddContact=Create contact AddContactAddress=Create contact/address EditContact=Edit contact diff --git a/htdocs/langs/uk_UA/other.lang b/htdocs/langs/uk_UA/other.lang index a6802140be3..8a5ccdbab5c 100644 --- a/htdocs/langs/uk_UA/other.lang +++ b/htdocs/langs/uk_UA/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=The intervention %s has been validated. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/uk_UA/website.lang b/htdocs/langs/uk_UA/website.lang index 2f387580ebc..55d7800c55c 100644 --- a/htdocs/langs/uk_UA/website.lang +++ b/htdocs/langs/uk_UA/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/uz_UZ/accountancy.lang b/htdocs/langs/uz_UZ/accountancy.lang index bb141cb9eb0..758d9c340a5 100644 --- a/htdocs/langs/uz_UZ/accountancy.lang +++ b/htdocs/langs/uz_UZ/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/uz_UZ/admin.lang b/htdocs/langs/uz_UZ/admin.lang index 9eaa12ec9be..f30d6edd9f7 100644 --- a/htdocs/langs/uz_UZ/admin.lang +++ b/htdocs/langs/uz_UZ/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Create/modify services Permission534=Delete services Permission536=See/manage hidden services Permission538=Export services -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Read donations Permission702=Create/modify donations Permission703=Delete donations @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/uz_UZ/bills.lang b/htdocs/langs/uz_UZ/bills.lang index c9d46e4ffff..4f114d4df1c 100644 --- a/htdocs/langs/uz_UZ/bills.lang +++ b/htdocs/langs/uz_UZ/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma invoice InvoiceProFormaDesc=Proforma invoice is an image of a true invoice but has no accountancy value. InvoiceReplacement=Replacement invoice InvoiceReplacementAsk=Replacement invoice for invoice -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Credit note InvoiceAvoirAsk=Credit note to correct invoice InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/uz_UZ/companies.lang b/htdocs/langs/uz_UZ/companies.lang index 77bd4f8a445..578f5cb8920 100644 --- a/htdocs/langs/uz_UZ/companies.lang +++ b/htdocs/langs/uz_UZ/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias name (commercial, trademark, ...) AliasNameShort=Alias Name Companies=Companies CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=None Vendor=Vendor +Supplier=Vendor AddContact=Create contact AddContactAddress=Create contact/address EditContact=Edit contact diff --git a/htdocs/langs/uz_UZ/other.lang b/htdocs/langs/uz_UZ/other.lang index a6802140be3..8a5ccdbab5c 100644 --- a/htdocs/langs/uz_UZ/other.lang +++ b/htdocs/langs/uz_UZ/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=The intervention %s has been validated. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/vi_VN/accountancy.lang b/htdocs/langs/vi_VN/accountancy.lang index f5d169e2819..68b3358d211 100644 --- a/htdocs/langs/vi_VN/accountancy.lang +++ b/htdocs/langs/vi_VN/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/vi_VN/admin.lang b/htdocs/langs/vi_VN/admin.lang index 788eb246e10..634eb06628e 100644 --- a/htdocs/langs/vi_VN/admin.lang +++ b/htdocs/langs/vi_VN/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Hộp đánh dấu từ bảng ExtrafieldLink=Liên kết với một đối tượng ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Tạo/chỉnh sửa dịch vụ Permission534=Xóa dịch vụ Permission536=Xem/quản lý dịch vụ ẩn Permission538=Xuất dữ liệu Dịch vụ -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Đọc thông tin Tài trợ Permission702=Tạo/sửa đổi Tài trợ Permission703=Xóa tài trợ @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1038,24 +1041,24 @@ Host=Máy chủ DriverType=Driver type SummarySystem=Tóm tắt thông tin hệ thống SummaryConst=Danh sách của tất cả các thông số cài đặt Dolibarr -MenuCompanySetup=Company/Organization +MenuCompanySetup=Thông Tin Công ty/Tổ chức DefaultMenuManager= Quản lý menu chuẩn DefaultMenuSmartphoneManager=Quản lý menu smartphone Skin=Chủ đề giao diện DefaultSkin=Chủ đề giao diện mặc định MaxSizeList=Chiều dài tối đa cho danh sách DefaultMaxSizeList=Default max length for lists -DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card) +DefaultMaxSizeShortList=Độ dài tối đa mặc định cho danh sách ngắn (ví dụ: trong thẻ khách hàng) MessageOfDay=Tin trong ngày MessageLogin=Tin trang đăng nhập -LoginPage=Login page -BackgroundImageLogin=Background image +LoginPage=Trang đăng nhập +BackgroundImageLogin=Hình nền PermanentLeftSearchForm=Forrm tìm kiếm cố định trên menu bên trái -DefaultLanguage=Default language +DefaultLanguage=Ngôn ngữ mặc định EnableMultilangInterface=Enable multilanguage support EnableShowLogo=Hiển thị logo trên menu bên trái -CompanyInfo=Company/Organization -CompanyIds=Company/Organization identities +CompanyInfo=Thông Tin Công ty/Tổ chức +CompanyIds=Danh tính công ty / tổ chức CompanyName=Tên CompanyAddress=Địa chỉ CompanyZip=Zip @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/vi_VN/bills.lang b/htdocs/langs/vi_VN/bills.lang index 81329694431..d04d4324fcd 100644 --- a/htdocs/langs/vi_VN/bills.lang +++ b/htdocs/langs/vi_VN/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Hóa đơn hình thức InvoiceProFormaDesc=Hóa đơn hình thức là một hình ảnh của một hóa đơn thực, nhưng không có giá trị kế toán. InvoiceReplacement=Hóa đơn thay thế InvoiceReplacementAsk=Hóa đơn thay thế cho hóa đơn -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Giấy báo có InvoiceAvoirAsk=Giấy báo có để chỉnh sửa hóa đơn InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/vi_VN/companies.lang b/htdocs/langs/vi_VN/companies.lang index 9b4d372c507..521bc7dd9a4 100644 --- a/htdocs/langs/vi_VN/companies.lang +++ b/htdocs/langs/vi_VN/companies.lang @@ -28,7 +28,7 @@ AliasNames=Tên viết tắt (tài chính, thương hiệu) AliasNameShort=Alias Name Companies=Các công ty CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=Không Vendor=Vendor +Supplier=Vendor AddContact=Tạo liên lạc AddContactAddress=Tạo liên lạc/địa chỉ EditContact=Sửa liên lạc diff --git a/htdocs/langs/vi_VN/main.lang b/htdocs/langs/vi_VN/main.lang index 773fafc037d..145e971080c 100644 --- a/htdocs/langs/vi_VN/main.lang +++ b/htdocs/langs/vi_VN/main.lang @@ -438,7 +438,7 @@ ActionRunningShort=In progress ActionDoneShort=Đã hoàn tất ActionUncomplete=Incomplete LatestLinkedEvents=Latest %s linked events -CompanyFoundation=Company/Organization +CompanyFoundation=Thông Tin Công ty/Tổ chức Accountant=Accountant ContactsForCompany=Liên lạc cho bên thứ ba này ContactsAddressesForCompany=Liên lạc/địa chỉ cho bên thứ ba này diff --git a/htdocs/langs/vi_VN/other.lang b/htdocs/langs/vi_VN/other.lang index 85181e6ae01..b972dccd38f 100644 --- a/htdocs/langs/vi_VN/other.lang +++ b/htdocs/langs/vi_VN/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=Sự can thiệp% s đã được xác nhận. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/vi_VN/website.lang b/htdocs/langs/vi_VN/website.lang index 3bc8b32f9f0..becbd99d3ac 100644 --- a/htdocs/langs/vi_VN/website.lang +++ b/htdocs/langs/vi_VN/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/zh_CN/accountancy.lang b/htdocs/langs/zh_CN/accountancy.lang index 402922e3079..1d3e23e0f66 100644 --- a/htdocs/langs/zh_CN/accountancy.lang +++ b/htdocs/langs/zh_CN/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=会计科目-等待 DONATION_ACCOUNTINGACCOUNT=会计科目-登记捐款 diff --git a/htdocs/langs/zh_CN/admin.lang b/htdocs/langs/zh_CN/admin.lang index 6373129e03e..93299ace4fa 100644 --- a/htdocs/langs/zh_CN/admin.lang +++ b/htdocs/langs/zh_CN/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=表格中的复选框 ExtrafieldLink=连接到对象 ComputedFormula=计算字段 ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=已使用资料库以支持生成PDF文件 LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=短信 @@ -819,9 +822,9 @@ Permission532=创建/变更服务 Permission534=删除服务 Permission536=查看/隐藏服务管理 Permission538=导出服务 -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=读取捐款资料 Permission702=创建/变更捐款资料 Permission703=删除捐款资料 @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/zh_CN/bills.lang b/htdocs/langs/zh_CN/bills.lang index 050f8cca90a..f4dd4ef5c4e 100644 --- a/htdocs/langs/zh_CN/bills.lang +++ b/htdocs/langs/zh_CN/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=形式发票 InvoiceProFormaDesc=形式发票是发票的形式,但其没有真正的会计价值。 InvoiceReplacement=更换发票 InvoiceReplacementAsk=为发票更换发票 -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=信用记录 InvoiceAvoirAsk=更正发票的信用记录 InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/zh_CN/companies.lang b/htdocs/langs/zh_CN/companies.lang index eed56f75f47..75d57bf28d8 100644 --- a/htdocs/langs/zh_CN/companies.lang +++ b/htdocs/langs/zh_CN/companies.lang @@ -28,7 +28,7 @@ AliasNames=别名(商号,商标,...) AliasNameShort=别名 Companies=公司 CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=绝对供应商折扣(由所有用户输入 SupplierAbsoluteDiscountMy=绝对供应商折扣(由您自己输入) DiscountNone=无 Vendor=Vendor +Supplier=Vendor AddContact=创建联系人 AddContactAddress=创建联系人/地址 EditContact=编辑联系人/地址 diff --git a/htdocs/langs/zh_CN/other.lang b/htdocs/langs/zh_CN/other.lang index 81364a5ce11..b493c21cea8 100644 --- a/htdocs/langs/zh_CN/other.lang +++ b/htdocs/langs/zh_CN/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=客户发票数量 NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=提案上的单位数量 NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=客户发票上的单位数量 NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=干预%s已被验证。 EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/zh_CN/website.lang b/htdocs/langs/zh_CN/website.lang index a92bfcf66ad..377f56e059b 100644 --- a/htdocs/langs/zh_CN/website.lang +++ b/htdocs/langs/zh_CN/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/zh_TW/accountancy.lang b/htdocs/langs/zh_TW/accountancy.lang index be9027cf959..97893293e5c 100644 --- a/htdocs/langs/zh_TW/accountancy.lang +++ b/htdocs/langs/zh_TW/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=等待的會計項目 DONATION_ACCOUNTINGACCOUNT=註冊捐款的會計項目 diff --git a/htdocs/langs/zh_TW/admin.lang b/htdocs/langs/zh_TW/admin.lang index e139e03077d..107124b2198 100644 --- a/htdocs/langs/zh_TW/admin.lang +++ b/htdocs/langs/zh_TW/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=從表格來的確認框 ExtrafieldLink=連線到物件 ComputedFormula=計算欄位 ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- 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 ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

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 ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=PDF產生器使用程式庫 LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=簡訊 @@ -819,9 +822,9 @@ Permission532=建立/修改服務 Permission534=刪除服務 Permission536=查看/管理隱藏服務 Permission538=匯出服務 -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=讀取捐款 Permission702=建立/修改捐款 Permission703=刪除捐款 @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/zh_TW/bills.lang b/htdocs/langs/zh_TW/bills.lang index 9733329db6b..c4f511537f2 100644 --- a/htdocs/langs/zh_TW/bills.lang +++ b/htdocs/langs/zh_TW/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=形式發票 InvoiceProFormaDesc=形式發票是發票的形象,但沒有真實的會計價值。 InvoiceReplacement=更換發票 InvoiceReplacementAsk=更換發票的發票 -InvoiceReplacementDesc=更換發票僅用於取消或代替未付款項但已收貨的發票。

注意:僅有未付款發票才可被更換。若被更換發票尚未被關閉,系統將自動'放棄'此發票。 +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=貸方通知單 InvoiceAvoirAsk=貸方通知單到正確發票 InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/zh_TW/companies.lang b/htdocs/langs/zh_TW/companies.lang index f8750f08d2e..af9bea70e1e 100644 --- a/htdocs/langs/zh_TW/companies.lang +++ b/htdocs/langs/zh_TW/companies.lang @@ -28,7 +28,7 @@ AliasNames=別名(商業的,商標,...) AliasNameShort=別名 Companies=公司 CountryIsInEEC=在歐盟區的國家 -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=完整的供應商折扣(由全體用戶授 SupplierAbsoluteDiscountMy=完整的供應商折扣(由您授權) DiscountNone=無 Vendor=供應商 +Supplier=供應商 AddContact=建立聯絡人資訊 AddContactAddress=建立聯絡資訊及地址 EditContact=編輯聯絡人/地址 diff --git a/htdocs/langs/zh_TW/other.lang b/htdocs/langs/zh_TW/other.lang index 36361e8dcef..d894069ac8b 100644 --- a/htdocs/langs/zh_TW/other.lang +++ b/htdocs/langs/zh_TW/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=提案/建議書的單位數量 NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=幹預%s已被驗證。 EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/zh_TW/website.lang b/htdocs/langs/zh_TW/website.lang index 82a20e8535b..5b9f2881147 100644 --- a/htdocs/langs/zh_TW/website.lang +++ b/htdocs/langs/zh_TW/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export From 389976699c335420671ccd031593eca5be8844e9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 24 Jul 2019 16:29:50 +0200 Subject: [PATCH 814/828] Fix responsive --- htdocs/core/class/html.form.class.php | 2 +- htdocs/core/class/html.formprojet.class.php | 2 +- htdocs/projet/tasks/time.php | 4 +++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 6c5ed3c23f0..713b18582eb 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -1679,7 +1679,7 @@ class Form $out .= ajax_combobox($htmlname); // do not use maxwidthonsmartphone by default. Set it by caller so auto size to 100% will work when not defined - $out.= ''; if ($show_empty && !$multiple) $out.= ''."\n"; if ($show_every) $out.= ''."\n"; diff --git a/htdocs/core/class/html.formprojet.class.php b/htdocs/core/class/html.formprojet.class.php index 057f977fadb..8e01e93b66e 100644 --- a/htdocs/core/class/html.formprojet.class.php +++ b/htdocs/core/class/html.formprojet.class.php @@ -367,7 +367,7 @@ class FormProjets include_once DOL_DOCUMENT_ROOT . '/core/lib/ajax.lib.php'; $comboenhancement = ajax_combobox($htmlname, '', 0, $forcefocus); $out.=$comboenhancement; - $morecss='minwidth200 maxwidth500'; + $morecss='minwidth200imp maxwidth500'; } if (empty($option_only)) { diff --git a/htdocs/projet/tasks/time.php b/htdocs/projet/tasks/time.php index 766c2b38e2d..8501ae3c88c 100644 --- a/htdocs/projet/tasks/time.php +++ b/htdocs/projet/tasks/time.php @@ -959,6 +959,7 @@ if (($id > 0 || ! empty($ref)) || $projectidforalltimes > 0) print ''."\n"; if (! empty($id)) print ''; + print '
'; // You can use div-table-responsive-no-min if you dont need reserved height for your table print ''; print ''; @@ -1002,7 +1003,7 @@ if (($id > 0 || ! empty($ref)) || $projectidforalltimes > 0) else $userid = $contactsofproject[0]; if ($projectstatic->public) $contactsofproject = array(); - print $form->select_dolusers((GETPOST('userid')?GETPOST('userid'):$userid), 'userid', 0, '', 0, '', $contactsofproject, 0, 0, 0, '', 0, $langs->trans("ResourceNotAssignedToProject"), 'maxwidth200'); + print $form->select_dolusers((GETPOST('userid', 'int')?GETPOST('userid', 'int'):$userid), 'userid', 0, '', 0, '', $contactsofproject, 0, 0, 0, '', 0, $langs->trans("ResourceNotAssignedToProject"), 'maxwidth200'); } else { @@ -1044,6 +1045,7 @@ if (($id > 0 || ! empty($ref)) || $projectidforalltimes > 0) print ''; print '
'; + print '
'; print '
'; } From 151075402fa62023570461e2e0423578e97acd38 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 24 Jul 2019 17:15:25 +0200 Subject: [PATCH 815/828] css --- htdocs/core/lib/project.lib.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/project.lib.php b/htdocs/core/lib/project.lib.php index efcfeca61dd..a164c03a2d8 100644 --- a/htdocs/core/lib/project.lib.php +++ b/htdocs/core/lib/project.lib.php @@ -371,7 +371,7 @@ function projectLinesa(&$inc, $parent, &$lines, &$level, $var, $showproject, &$t $numlines=count($lines); // We declare counter as global because we want to edit them into recursive call - global $total_projectlinesa_spent,$total_projectlinesa_planned,$total_projectlinesa_spent_if_planned,$total_projectlinesa_tobill,$total_projectlinesa_billed; + global $total_projectlinesa_spent, $total_projectlinesa_planned, $total_projectlinesa_spent_if_planned, $total_projectlinesa_tobill, $total_projectlinesa_billed; if ($level == 0) { $total_projectlinesa_spent=0; @@ -491,9 +491,13 @@ function projectLinesa(&$inc, $parent, &$lines, &$level, $var, $showproject, &$t //else print ''; for ($k = 0 ; $k < $level ; $k++) { - print "     "; + print '
'; } print $lines[$i]->label; + for ($k = 0 ; $k < $level ; $k++) + { + print '
'; + } if ($showlineingray) print ''; //else print '
'; print "
'),this.$element.append(this.$stage.parent()),this.replace(this.$element.children().not(this.$stage.parent())),this.$element.is(":visible")?this.refresh():this.invalidate("width"),this.$element.removeClass(this.options.loadingClass).addClass(this.options.loadedClass),this.registerEventHandlers(),this.leave("initializing"),this.trigger("initialized")},e.prototype.setup=function(){var b=this.viewport(),c=this.options.responsive,d=-1,e=null;c?(a.each(c,function(a){a<=b&&a>d&&(d=Number(a))}),e=a.extend({},this.options,c[d]),"function"==typeof e.stagePadding&&(e.stagePadding=e.stagePadding()),delete e.responsive,e.responsiveClass&&this.$element.attr("class",this.$element.attr("class").replace(new RegExp("("+this.options.responsiveClass+"-)\\S+\\s","g"),"$1"+d))):e=a.extend({},this.options),this.trigger("change",{property:{name:"settings",value:e}}),this._breakpoint=d,this.settings=e,this.invalidate("settings"),this.trigger("changed",{property:{name:"settings",value:this.settings}})},e.prototype.optionsLogic=function(){this.settings.autoWidth&&(this.settings.stagePadding=!1,this.settings.merge=!1)},e.prototype.prepare=function(b){var c=this.trigger("prepare",{content:b});return c.data||(c.data=a("<"+this.settings.itemElement+"/>").addClass(this.options.itemClass).append(b)),this.trigger("prepared",{content:c.data}),c.data},e.prototype.update=function(){for(var b=0,c=this._pipe.length,d=a.proxy(function(a){return this[a]},this._invalidated),e={};b0)&&this._pipe[b].run(e),b++;this._invalidated={},!this.is("valid")&&this.enter("valid")},e.prototype.width=function(a){switch(a=a||e.Width.Default){case e.Width.Inner:case e.Width.Outer:return this._width;default:return this._width-2*this.settings.stagePadding+this.settings.margin}},e.prototype.refresh=function(){this.enter("refreshing"),this.trigger("refresh"),this.setup(),this.optionsLogic(),this.$element.addClass(this.options.refreshClass),this.update(),this.$element.removeClass(this.options.refreshClass),this.leave("refreshing"),this.trigger("refreshed")},e.prototype.onThrottledResize=function(){b.clearTimeout(this.resizeTimer),this.resizeTimer=b.setTimeout(this._handlers.onResize,this.settings.responsiveRefreshRate)},e.prototype.onResize=function(){return!!this._items.length&&(this._width!==this.$element.width()&&(!!this.$element.is(":visible")&&(this.enter("resizing"),this.trigger("resize").isDefaultPrevented()?(this.leave("resizing"),!1):(this.invalidate("width"),this.refresh(),this.leave("resizing"),void this.trigger("resized")))))},e.prototype.registerEventHandlers=function(){a.support.transition&&this.$stage.on(a.support.transition.end+".owl.core",a.proxy(this.onTransitionEnd,this)),this.settings.responsive!==!1&&this.on(b,"resize",this._handlers.onThrottledResize),this.settings.mouseDrag&&(this.$element.addClass(this.options.dragClass),this.$stage.on("mousedown.owl.core",a.proxy(this.onDragStart,this)),this.$stage.on("dragstart.owl.core selectstart.owl.core",function(){return!1})),this.settings.touchDrag&&(this.$stage.on("touchstart.owl.core",a.proxy(this.onDragStart,this)),this.$stage.on("touchcancel.owl.core",a.proxy(this.onDragEnd,this)))},e.prototype.onDragStart=function(b){var d=null;3!==b.which&&(a.support.transform?(d=this.$stage.css("transform").replace(/.*\(|\)| /g,"").split(","),d={x:d[16===d.length?12:4],y:d[16===d.length?13:5]}):(d=this.$stage.position(),d={x:this.settings.rtl?d.left+this.$stage.width()-this.width()+this.settings.margin:d.left,y:d.top}),this.is("animating")&&(a.support.transform?this.animate(d.x):this.$stage.stop(),this.invalidate("position")),this.$element.toggleClass(this.options.grabClass,"mousedown"===b.type),this.speed(0),this._drag.time=(new Date).getTime(),this._drag.target=a(b.target),this._drag.stage.start=d,this._drag.stage.current=d,this._drag.pointer=this.pointer(b),a(c).on("mouseup.owl.core touchend.owl.core",a.proxy(this.onDragEnd,this)),a(c).one("mousemove.owl.core touchmove.owl.core",a.proxy(function(b){var d=this.difference(this._drag.pointer,this.pointer(b));a(c).on("mousemove.owl.core touchmove.owl.core",a.proxy(this.onDragMove,this)),Math.abs(d.x)0^this.settings.rtl?"left":"right";a(c).off(".owl.core"),this.$element.removeClass(this.options.grabClass),(0!==d.x&&this.is("dragging")||!this.is("valid"))&&(this.speed(this.settings.dragEndSpeed||this.settings.smartSpeed),this.current(this.closest(e.x,0!==d.x?f:this._drag.direction)),this.invalidate("position"),this.update(),this._drag.direction=f,(Math.abs(d.x)>3||(new Date).getTime()-this._drag.time>300)&&this._drag.target.one("click.owl.core",function(){return!1})),this.is("dragging")&&(this.leave("dragging"),this.trigger("dragged"))},e.prototype.closest=function(b,c){var d=-1,e=30,f=this.width(),g=this.coordinates();return this.settings.freeDrag||a.each(g,a.proxy(function(a,h){return"left"===c&&b>h-e&&bh-f-e&&b",g[a+1]||h-f)&&(d="left"===c?a+1:a),d===-1},this)),this.settings.loop||(this.op(b,">",g[this.minimum()])?d=b=this.minimum():this.op(b,"<",g[this.maximum()])&&(d=b=this.maximum())),d},e.prototype.animate=function(b){var c=this.speed()>0;this.is("animating")&&this.onTransitionEnd(),c&&(this.enter("animating"),this.trigger("translate")),a.support.transform3d&&a.support.transition?this.$stage.css({transform:"translate3d("+b+"px,0px,0px)",transition:this.speed()/1e3+"s"}):c?this.$stage.animate({left:b+"px"},this.speed(),this.settings.fallbackEasing,a.proxy(this.onTransitionEnd,this)):this.$stage.css({left:b+"px"})},e.prototype.is=function(a){return this._states.current[a]&&this._states.current[a]>0},e.prototype.current=function(a){if(a===d)return this._current;if(0===this._items.length)return d;if(a=this.normalize(a),this._current!==a){var b=this.trigger("change",{property:{name:"position",value:a}});b.data!==d&&(a=this.normalize(b.data)),this._current=a,this.invalidate("position"),this.trigger("changed",{property:{name:"position",value:this._current}})}return this._current},e.prototype.invalidate=function(b){return"string"===a.type(b)&&(this._invalidated[b]=!0,this.is("valid")&&this.leave("valid")),a.map(this._invalidated,function(a,b){return b})},e.prototype.reset=function(a){a=this.normalize(a),a!==d&&(this._speed=0,this._current=a,this.suppress(["translate","translated"]),this.animate(this.coordinates(a)),this.release(["translate","translated"]))},e.prototype.normalize=function(a,b){var c=this._items.length,e=b?0:this._clones.length;return!this.isNumeric(a)||c<1?a=d:(a<0||a>=c+e)&&(a=((a-e/2)%c+c)%c+e/2),a},e.prototype.relative=function(a){return a-=this._clones.length/2,this.normalize(a,!0)},e.prototype.maximum=function(a){var b,c,d,e=this.settings,f=this._coordinates.length;if(e.loop)f=this._clones.length/2+this._items.length-1;else if(e.autoWidth||e.merge){for(b=this._items.length,c=this._items[--b].width(),d=this.$element.width();b--&&(c+=this._items[b].width()+this.settings.margin,!(c>d)););f=b+1}else f=e.center?this._items.length-1:this._items.length-e.items;return a&&(f-=this._clones.length/2),Math.max(f,0)},e.prototype.minimum=function(a){return a?0:this._clones.length/2},e.prototype.items=function(a){return a===d?this._items.slice():(a=this.normalize(a,!0),this._items[a])},e.prototype.mergers=function(a){return a===d?this._mergers.slice():(a=this.normalize(a,!0),this._mergers[a])},e.prototype.clones=function(b){var c=this._clones.length/2,e=c+this._items.length,f=function(a){return a%2===0?e+a/2:c-(a+1)/2};return b===d?a.map(this._clones,function(a,b){return f(b)}):a.map(this._clones,function(a,c){return a===b?f(c):null})},e.prototype.speed=function(a){return a!==d&&(this._speed=a),this._speed},e.prototype.coordinates=function(b){var c,e=1,f=b-1;return b===d?a.map(this._coordinates,a.proxy(function(a,b){return this.coordinates(b)},this)):(this.settings.center?(this.settings.rtl&&(e=-1,f=b+1),c=this._coordinates[b],c+=(this.width()-c+(this._coordinates[f]||0))/2*e):c=this._coordinates[f]||0,c=Math.ceil(c))},e.prototype.duration=function(a,b,c){return 0===c?0:Math.min(Math.max(Math.abs(b-a),1),6)*Math.abs(c||this.settings.smartSpeed)},e.prototype.to=function(a,b){var c=this.current(),d=null,e=a-this.relative(c),f=(e>0)-(e<0),g=this._items.length,h=this.minimum(),i=this.maximum();this.settings.loop?(!this.settings.rewind&&Math.abs(e)>g/2&&(e+=f*-1*g),a=c+e,d=((a-h)%g+g)%g+h,d!==a&&d-e<=i&&d-e>0&&(c=d-e,a=d,this.reset(c))):this.settings.rewind?(i+=1,a=(a%i+i)%i):a=Math.max(h,Math.min(i,a)),this.speed(this.duration(c,a,b)),this.current(a),this.$element.is(":visible")&&this.update()},e.prototype.next=function(a){a=a||!1,this.to(this.relative(this.current())+1,a)},e.prototype.prev=function(a){a=a||!1,this.to(this.relative(this.current())-1,a)},e.prototype.onTransitionEnd=function(a){if(a!==d&&(a.stopPropagation(),(a.target||a.srcElement||a.originalTarget)!==this.$stage.get(0)))return!1;this.leave("animating"),this.trigger("translated")},e.prototype.viewport=function(){var d;return this.options.responsiveBaseElement!==b?d=a(this.options.responsiveBaseElement).width():b.innerWidth?d=b.innerWidth:c.documentElement&&c.documentElement.clientWidth?d=c.documentElement.clientWidth:console.warn("Can not detect viewport width."),d},e.prototype.replace=function(b){this.$stage.empty(),this._items=[],b&&(b=b instanceof jQuery?b:a(b)),this.settings.nestedItemSelector&&(b=b.find("."+this.settings.nestedItemSelector)),b.filter(function(){return 1===this.nodeType}).each(a.proxy(function(a,b){b=this.prepare(b),this.$stage.append(b),this._items.push(b),this._mergers.push(1*b.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)},this)),this.reset(this.isNumeric(this.settings.startPosition)?this.settings.startPosition:0),this.invalidate("items")},e.prototype.add=function(b,c){var e=this.relative(this._current);c=c===d?this._items.length:this.normalize(c,!0),b=b instanceof jQuery?b:a(b),this.trigger("add",{content:b,position:c}),b=this.prepare(b),0===this._items.length||c===this._items.length?(0===this._items.length&&this.$stage.append(b),0!==this._items.length&&this._items[c-1].after(b),this._items.push(b),this._mergers.push(1*b.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)):(this._items[c].before(b),this._items.splice(c,0,b),this._mergers.splice(c,0,1*b.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)),this._items[e]&&this.reset(this._items[e].index()),this.invalidate("items"),this.trigger("added",{content:b,position:c})},e.prototype.remove=function(a){a=this.normalize(a,!0),a!==d&&(this.trigger("remove",{content:this._items[a],position:a}),this._items[a].remove(),this._items.splice(a,1),this._mergers.splice(a,1),this.invalidate("items"),this.trigger("removed",{content:null,position:a}))},e.prototype.preloadAutoWidthImages=function(b){b.each(a.proxy(function(b,c){this.enter("pre-loading"),c=a(c),a(new Image).one("load",a.proxy(function(a){c.attr("src",a.target.src),c.css("opacity",1),this.leave("pre-loading"),!this.is("pre-loading")&&!this.is("initializing")&&this.refresh()},this)).attr("src",c.attr("src")||c.attr("data-src")||c.attr("data-src-retina"))},this))},e.prototype.destroy=function(){this.$element.off(".owl.core"),this.$stage.off(".owl.core"),a(c).off(".owl.core"),this.settings.responsive!==!1&&(b.clearTimeout(this.resizeTimer),this.off(b,"resize",this._handlers.onThrottledResize));for(var d in this._plugins)this._plugins[d].destroy();this.$stage.children(".cloned").remove(),this.$stage.unwrap(),this.$stage.children().contents().unwrap(),this.$stage.children().unwrap(),this.$element.removeClass(this.options.refreshClass).removeClass(this.options.loadingClass).removeClass(this.options.loadedClass).removeClass(this.options.rtlClass).removeClass(this.options.dragClass).removeClass(this.options.grabClass).attr("class",this.$element.attr("class").replace(new RegExp(this.options.responsiveClass+"-\\S+\\s","g"),"")).removeData("owl.carousel")},e.prototype.op=function(a,b,c){var d=this.settings.rtl;switch(b){case"<":return d?a>c:a":return d?ac;case">=":return d?a<=c:a>=c;case"<=":return d?a>=c:a<=c}},e.prototype.on=function(a,b,c,d){a.addEventListener?a.addEventListener(b,c,d):a.attachEvent&&a.attachEvent("on"+b,c)},e.prototype.off=function(a,b,c,d){a.removeEventListener?a.removeEventListener(b,c,d):a.detachEvent&&a.detachEvent("on"+b,c)},e.prototype.trigger=function(b,c,d,f,g){var h={item:{count:this._items.length,index:this.current()}},i=a.camelCase(a.grep(["on",b,d],function(a){return a}).join("-").toLowerCase()),j=a.Event([b,"owl",d||"carousel"].join(".").toLowerCase(),a.extend({relatedTarget:this},h,c));return this._supress[b]||(a.each(this._plugins,function(a,b){b.onTrigger&&b.onTrigger(j)}),this.register({type:e.Type.Event,name:b}),this.$element.trigger(j),this.settings&&"function"==typeof this.settings[i]&&this.settings[i].call(this,j)),j},e.prototype.enter=function(b){a.each([b].concat(this._states.tags[b]||[]),a.proxy(function(a,b){this._states.current[b]===d&&(this._states.current[b]=0),this._states.current[b]++},this))},e.prototype.leave=function(b){a.each([b].concat(this._states.tags[b]||[]),a.proxy(function(a,b){this._states.current[b]--},this))},e.prototype.register=function(b){if(b.type===e.Type.Event){if(a.event.special[b.name]||(a.event.special[b.name]={}),!a.event.special[b.name].owl){var c=a.event.special[b.name]._default;a.event.special[b.name]._default=function(a){return!c||!c.apply||a.namespace&&a.namespace.indexOf("owl")!==-1?a.namespace&&a.namespace.indexOf("owl")>-1:c.apply(this,arguments)},a.event.special[b.name].owl=!0}}else b.type===e.Type.State&&(this._states.tags[b.name]?this._states.tags[b.name]=this._states.tags[b.name].concat(b.tags):this._states.tags[b.name]=b.tags,this._states.tags[b.name]=a.grep(this._states.tags[b.name],a.proxy(function(c,d){return a.inArray(c,this._states.tags[b.name])===d},this)))},e.prototype.suppress=function(b){a.each(b,a.proxy(function(a,b){this._supress[b]=!0},this))},e.prototype.release=function(b){a.each(b,a.proxy(function(a,b){delete this._supress[b]},this))},e.prototype.pointer=function(a){var c={x:null,y:null};return a=a.originalEvent||a||b.event,a=a.touches&&a.touches.length?a.touches[0]:a.changedTouches&&a.changedTouches.length?a.changedTouches[0]:a,a.pageX?(c.x=a.pageX,c.y=a.pageY):(c.x=a.clientX,c.y=a.clientY),c},e.prototype.isNumeric=function(a){return!isNaN(parseFloat(a))},e.prototype.difference=function(a,b){return{x:a.x-b.x,y:a.y-b.y}},a.fn.owlCarousel=function(b){var c=Array.prototype.slice.call(arguments,1);return this.each(function(){var d=a(this),f=d.data("owl.carousel");f||(f=new e(this,"object"==typeof b&&b),d.data("owl.carousel",f),a.each(["next","prev","to","destroy","refresh","replace","add","remove"],function(b,c){f.register({type:e.Type.Event,name:c}),f.$element.on(c+".owl.carousel.core",a.proxy(function(a){a.namespace&&a.relatedTarget!==this&&(this.suppress([c]),f[c].apply(this,[].slice.call(arguments,1)),this.release([c]))},f))})),"string"==typeof b&&"_"!==b.charAt(0)&&f[b].apply(f,c)})},a.fn.owlCarousel.Constructor=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._interval=null,this._visible=null,this._handlers={"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoRefresh&&this.watch()},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers)};e.Defaults={autoRefresh:!0,autoRefreshInterval:500},e.prototype.watch=function(){this._interval||(this._visible=this._core.$element.is(":visible"),this._interval=b.setInterval(a.proxy(this.refresh,this),this._core.settings.autoRefreshInterval))},e.prototype.refresh=function(){this._core.$element.is(":visible")!==this._visible&&(this._visible=!this._visible,this._core.$element.toggleClass("owl-hidden",!this._visible),this._visible&&this._core.invalidate("width")&&this._core.refresh())},e.prototype.destroy=function(){var a,c;b.clearInterval(this._interval);for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(c in Object.getOwnPropertyNames(this))"function"!=typeof this[c]&&(this[c]=null)},a.fn.owlCarousel.Constructor.Plugins.AutoRefresh=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._loaded=[],this._handlers={"initialized.owl.carousel change.owl.carousel resized.owl.carousel":a.proxy(function(b){if(b.namespace&&this._core.settings&&this._core.settings.lazyLoad&&(b.property&&"position"==b.property.name||"initialized"==b.type))for(var c=this._core.settings,e=c.center&&Math.ceil(c.items/2)||c.items,f=c.center&&e*-1||0,g=(b.property&&b.property.value!==d?b.property.value:this._core.current())+f,h=this._core.clones().length,i=a.proxy(function(a,b){this.load(b)},this);f++-1||(e.each(a.proxy(function(c,d){var e,f=a(d),g=b.devicePixelRatio>1&&f.attr("data-src-retina")||f.attr("data-src");this._core.trigger("load",{element:f,url:g},"lazy"),f.is("img")?f.one("load.owl.lazy",a.proxy(function(){f.css("opacity",1),this._core.trigger("loaded",{element:f,url:g},"lazy")},this)).attr("src",g):(e=new Image,e.onload=a.proxy(function(){f.css({"background-image":'url("'+g+'")',opacity:"1"}),this._core.trigger("loaded",{element:f,url:g},"lazy")},this),e.src=g)},this)),this._loaded.push(d.get(0)))},e.prototype.destroy=function(){var a,b;for(a in this.handlers)this._core.$element.off(a,this.handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.Lazy=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._handlers={"initialized.owl.carousel refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoHeight&&this.update()},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoHeight&&"position"==a.property.name&&this.update()},this),"loaded.owl.lazy":a.proxy(function(a){a.namespace&&this._core.settings.autoHeight&&a.element.closest("."+this._core.settings.itemClass).index()===this._core.current()&&this.update()},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers)};e.Defaults={autoHeight:!1,autoHeightClass:"owl-height"},e.prototype.update=function(){var b=this._core._current,c=b+this._core.settings.items,d=this._core.$stage.children().toArray().slice(b,c),e=[],f=0;a.each(d,function(b,c){e.push(a(c).height())}),f=Math.max.apply(null,e),this._core.$stage.parent().height(f).addClass(this._core.settings.autoHeightClass)},e.prototype.destroy=function(){var a,b;for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.AutoHeight=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._videos={},this._playing=null,this._handlers={"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.register({type:"state",name:"playing",tags:["interacting"]})},this),"resize.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.video&&this.isInFullScreen()&&a.preventDefault()},this),"refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._core.is("resizing")&&this._core.$stage.find(".cloned .owl-video-frame").remove()},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&"position"===a.property.name&&this._playing&&this.stop()},this),"prepared.owl.carousel":a.proxy(function(b){if(b.namespace){var c=a(b.content).find(".owl-video");c.length&&(c.css("display","none"),this.fetch(c,a(b.content)))}},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers),this._core.$element.on("click.owl.video",".owl-video-play-icon",a.proxy(function(a){this.play(a)},this))};e.Defaults={video:!1,videoHeight:!1,videoWidth:!1},e.prototype.fetch=function(a,b){var c=function(){return a.attr("data-vimeo-id")?"vimeo":a.attr("data-vzaar-id")?"vzaar":"youtube"}(),d=a.attr("data-vimeo-id")||a.attr("data-youtube-id")||a.attr("data-vzaar-id"),e=a.attr("data-width")||this._core.settings.videoWidth,f=a.attr("data-height")||this._core.settings.videoHeight,g=a.attr("href");if(!g)throw new Error("Missing video URL.");if(d=g.match(/(http:|https:|)\/\/(player.|www.|app.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com)|vzaar\.com)\/(video\/|videos\/|embed\/|channels\/.+\/|groups\/.+\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/),d[3].indexOf("youtu")>-1)c="youtube";else if(d[3].indexOf("vimeo")>-1)c="vimeo";else{if(!(d[3].indexOf("vzaar")>-1))throw new Error("Video URL not supported.");c="vzaar"}d=d[6],this._videos[g]={type:c,id:d,width:e,height:f},b.attr("data-video",g),this.thumbnail(a,this._videos[g])},e.prototype.thumbnail=function(b,c){var d,e,f,g=c.width&&c.height?'style="width:'+c.width+"px;height:"+c.height+'px;"':"",h=b.find("img"),i="src",j="",k=this._core.settings,l=function(a){e='
',d=k.lazyLoad?'
':'
',b.after(d),b.after(e)};if(b.wrap('
"),this._core.settings.lazyLoad&&(i="data-src",j="owl-lazy"),h.length)return l(h.attr(i)),h.remove(),!1;"youtube"===c.type?(f="//img.youtube.com/vi/"+c.id+"/hqdefault.jpg",l(f)):"vimeo"===c.type?a.ajax({type:"GET",url:"//vimeo.com/api/v2/video/"+c.id+".json",jsonp:"callback",dataType:"jsonp",success:function(a){f=a[0].thumbnail_large,l(f)}}):"vzaar"===c.type&&a.ajax({type:"GET",url:"//vzaar.com/api/videos/"+c.id+".json",jsonp:"callback",dataType:"jsonp",success:function(a){f=a.framegrab_url,l(f)}})},e.prototype.stop=function(){this._core.trigger("stop",null,"video"),this._playing.find(".owl-video-frame").remove(),this._playing.removeClass("owl-video-playing"),this._playing=null,this._core.leave("playing"),this._core.trigger("stopped",null,"video")},e.prototype.play=function(b){var c,d=a(b.target),e=d.closest("."+this._core.settings.itemClass),f=this._videos[e.attr("data-video")],g=f.width||"100%",h=f.height||this._core.$stage.height();this._playing||(this._core.enter("playing"),this._core.trigger("play",null,"video"),e=this._core.items(this._core.relative(e.index())),this._core.reset(e.index()),"youtube"===f.type?c='':"vimeo"===f.type?c='':"vzaar"===f.type&&(c=''),a('
'+c+"
").insertAfter(e.find(".owl-video")),this._playing=e.addClass("owl-video-playing"))},e.prototype.isInFullScreen=function(){var b=c.fullscreenElement||c.mozFullScreenElement||c.webkitFullscreenElement;return b&&a(b).parent().hasClass("owl-video-frame")},e.prototype.destroy=function(){var a,b;this._core.$element.off("click.owl.video");for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.Video=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this.core=b,this.core.options=a.extend({},e.Defaults,this.core.options),this.swapping=!0,this.previous=d,this.next=d,this.handlers={"change.owl.carousel":a.proxy(function(a){a.namespace&&"position"==a.property.name&&(this.previous=this.core.current(),this.next=a.property.value)},this),"drag.owl.carousel dragged.owl.carousel translated.owl.carousel":a.proxy(function(a){a.namespace&&(this.swapping="translated"==a.type)},this),"translate.owl.carousel":a.proxy(function(a){a.namespace&&this.swapping&&(this.core.options.animateOut||this.core.options.animateIn)&&this.swap()},this)},this.core.$element.on(this.handlers)};e.Defaults={animateOut:!1,animateIn:!1},e.prototype.swap=function(){if(1===this.core.settings.items&&a.support.animation&&a.support.transition){this.core.speed(0);var b,c=a.proxy(this.clear,this),d=this.core.$stage.children().eq(this.previous),e=this.core.$stage.children().eq(this.next),f=this.core.settings.animateIn,g=this.core.settings.animateOut;this.core.current()!==this.previous&&(g&&(b=this.core.coordinates(this.previous)-this.core.coordinates(this.next),d.one(a.support.animation.end,c).css({left:b+"px"}).addClass("animated owl-animated-out").addClass(g)),f&&e.one(a.support.animation.end,c).addClass("animated owl-animated-in").addClass(f))}},e.prototype.clear=function(b){a(b.target).css({left:""}).removeClass("animated owl-animated-out owl-animated-in").removeClass(this.core.settings.animateIn).removeClass(this.core.settings.animateOut),this.core.onTransitionEnd()},e.prototype.destroy=function(){var a,b;for(a in this.handlers)this.core.$element.off(a,this.handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)}, - a.fn.owlCarousel.Constructor.Plugins.Animate=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._timeout=null,this._paused=!1,this._handlers={"changed.owl.carousel":a.proxy(function(a){a.namespace&&"settings"===a.property.name?this._core.settings.autoplay?this.play():this.stop():a.namespace&&"position"===a.property.name&&this._core.settings.autoplay&&this._setAutoPlayInterval()},this),"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoplay&&this.play()},this),"play.owl.autoplay":a.proxy(function(a,b,c){a.namespace&&this.play(b,c)},this),"stop.owl.autoplay":a.proxy(function(a){a.namespace&&this.stop()},this),"mouseover.owl.autoplay":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()},this),"mouseleave.owl.autoplay":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.play()},this),"touchstart.owl.core":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()},this),"touchend.owl.core":a.proxy(function(){this._core.settings.autoplayHoverPause&&this.play()},this)},this._core.$element.on(this._handlers),this._core.options=a.extend({},e.Defaults,this._core.options)};e.Defaults={autoplay:!1,autoplayTimeout:5e3,autoplayHoverPause:!1,autoplaySpeed:!1},e.prototype.play=function(a,b){this._paused=!1,this._core.is("rotating")||(this._core.enter("rotating"),this._setAutoPlayInterval())},e.prototype._getNextTimeout=function(d,e){return this._timeout&&b.clearTimeout(this._timeout),b.setTimeout(a.proxy(function(){this._paused||this._core.is("busy")||this._core.is("interacting")||c.hidden||this._core.next(e||this._core.settings.autoplaySpeed)},this),d||this._core.settings.autoplayTimeout)},e.prototype._setAutoPlayInterval=function(){this._timeout=this._getNextTimeout()},e.prototype.stop=function(){this._core.is("rotating")&&(b.clearTimeout(this._timeout),this._core.leave("rotating"))},e.prototype.pause=function(){this._core.is("rotating")&&(this._paused=!0)},e.prototype.destroy=function(){var a,b;this.stop();for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.autoplay=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){"use strict";var e=function(b){this._core=b,this._initialized=!1,this._pages=[],this._controls={},this._templates=[],this.$element=this._core.$element,this._overrides={next:this._core.next,prev:this._core.prev,to:this._core.to},this._handlers={"prepared.owl.carousel":a.proxy(function(b){b.namespace&&this._core.settings.dotsData&&this._templates.push('
'+a(b.content).find("[data-dot]").addBack("[data-dot]").attr("data-dot")+"
")},this),"added.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.dotsData&&this._templates.splice(a.position,0,this._templates.pop())},this),"remove.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.dotsData&&this._templates.splice(a.position,1)},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&"position"==a.property.name&&this.draw()},this),"initialized.owl.carousel":a.proxy(function(a){a.namespace&&!this._initialized&&(this._core.trigger("initialize",null,"navigation"),this.initialize(),this.update(),this.draw(),this._initialized=!0,this._core.trigger("initialized",null,"navigation"))},this),"refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._initialized&&(this._core.trigger("refresh",null,"navigation"),this.update(),this.draw(),this._core.trigger("refreshed",null,"navigation"))},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this.$element.on(this._handlers)};e.Defaults={nav:!1,navText:["prev","next"],navSpeed:!1,navElement:"div",navContainer:!1,navContainerClass:"owl-nav",navClass:["owl-prev","owl-next"],slideBy:1,dotClass:"owl-dot",dotsClass:"owl-dots",dots:!0,dotsEach:!1,dotsData:!1,dotsSpeed:!1,dotsContainer:!1},e.prototype.initialize=function(){var b,c=this._core.settings;this._controls.$relative=(c.navContainer?a(c.navContainer):a("
").addClass(c.navContainerClass).appendTo(this.$element)).addClass("disabled"),this._controls.$previous=a("<"+c.navElement+">").addClass(c.navClass[0]).html(c.navText[0]).prependTo(this._controls.$relative).on("click",a.proxy(function(a){this.prev(c.navSpeed)},this)),this._controls.$next=a("<"+c.navElement+">").addClass(c.navClass[1]).html(c.navText[1]).appendTo(this._controls.$relative).on("click",a.proxy(function(a){this.next(c.navSpeed)},this)),c.dotsData||(this._templates=[a("
").addClass(c.dotClass).append(a("")).prop("outerHTML")]),this._controls.$absolute=(c.dotsContainer?a(c.dotsContainer):a("
").addClass(c.dotsClass).appendTo(this.$element)).addClass("disabled"),this._controls.$absolute.on("click","div",a.proxy(function(b){var d=a(b.target).parent().is(this._controls.$absolute)?a(b.target).index():a(b.target).parent().index();b.preventDefault(),this.to(d,c.dotsSpeed)},this));for(b in this._overrides)this._core[b]=a.proxy(this[b],this)},e.prototype.destroy=function(){var a,b,c,d;for(a in this._handlers)this.$element.off(a,this._handlers[a]);for(b in this._controls)this._controls[b].remove();for(d in this.overides)this._core[d]=this._overrides[d];for(c in Object.getOwnPropertyNames(this))"function"!=typeof this[c]&&(this[c]=null)},e.prototype.update=function(){var a,b,c,d=this._core.clones().length/2,e=d+this._core.items().length,f=this._core.maximum(!0),g=this._core.settings,h=g.center||g.autoWidth||g.dotsData?1:g.dotsEach||g.items;if("page"!==g.slideBy&&(g.slideBy=Math.min(g.slideBy,g.items)),g.dots||"page"==g.slideBy)for(this._pages=[],a=d,b=0,c=0;a=h||0===b){if(this._pages.push({start:Math.min(f,a-d),end:a-d+h-1}),Math.min(f,a-d)===f)break;b=0,++c}b+=this._core.mergers(this._core.relative(a))}},e.prototype.draw=function(){var b,c=this._core.settings,d=this._core.items().length<=c.items,e=this._core.relative(this._core.current()),f=c.loop||c.rewind;this._controls.$relative.toggleClass("disabled",!c.nav||d),c.nav&&(this._controls.$previous.toggleClass("disabled",!f&&e<=this._core.minimum(!0)),this._controls.$next.toggleClass("disabled",!f&&e>=this._core.maximum(!0))),this._controls.$absolute.toggleClass("disabled",!c.dots||d),c.dots&&(b=this._pages.length-this._controls.$absolute.children().length,c.dotsData&&0!==b?this._controls.$absolute.html(this._templates.join("")):b>0?this._controls.$absolute.append(new Array(b+1).join(this._templates[0])):b<0&&this._controls.$absolute.children().slice(b).remove(),this._controls.$absolute.find(".active").removeClass("active"),this._controls.$absolute.children().eq(a.inArray(this.current(),this._pages)).addClass("active"))},e.prototype.onTrigger=function(b){var c=this._core.settings;b.page={index:a.inArray(this.current(),this._pages),count:this._pages.length,size:c&&(c.center||c.autoWidth||c.dotsData?1:c.dotsEach||c.items)}},e.prototype.current=function(){var b=this._core.relative(this._core.current());return a.grep(this._pages,a.proxy(function(a,c){return a.start<=b&&a.end>=b},this)).pop()},e.prototype.getPosition=function(b){var c,d,e=this._core.settings;return"page"==e.slideBy?(c=a.inArray(this.current(),this._pages),d=this._pages.length,b?++c:--c,c=this._pages[(c%d+d)%d].start):(c=this._core.relative(this._core.current()),d=this._core.items().length,b?c+=e.slideBy:c-=e.slideBy),c},e.prototype.next=function(b){a.proxy(this._overrides.to,this._core)(this.getPosition(!0),b)},e.prototype.prev=function(b){a.proxy(this._overrides.to,this._core)(this.getPosition(!1),b)},e.prototype.to=function(b,c,d){var e;!d&&this._pages.length?(e=this._pages.length,a.proxy(this._overrides.to,this._core)(this._pages[(b%e+e)%e].start,c)):a.proxy(this._overrides.to,this._core)(b,c)},a.fn.owlCarousel.Constructor.Plugins.Navigation=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){"use strict";var e=function(c){this._core=c,this._hashes={},this.$element=this._core.$element,this._handlers={"initialized.owl.carousel":a.proxy(function(c){c.namespace&&"URLHash"===this._core.settings.startPosition&&a(b).trigger("hashchange.owl.navigation")},this),"prepared.owl.carousel":a.proxy(function(b){if(b.namespace){var c=a(b.content).find("[data-hash]").addBack("[data-hash]").attr("data-hash");if(!c)return;this._hashes[c]=b.content}},this),"changed.owl.carousel":a.proxy(function(c){if(c.namespace&&"position"===c.property.name){var d=this._core.items(this._core.relative(this._core.current())),e=a.map(this._hashes,function(a,b){return a===d?b:null}).join();if(!e||b.location.hash.slice(1)===e)return;b.location.hash=e}},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this.$element.on(this._handlers),a(b).on("hashchange.owl.navigation",a.proxy(function(a){var c=b.location.hash.substring(1),e=this._core.$stage.children(),f=this._hashes[c]&&e.index(this._hashes[c]);f!==d&&f!==this._core.current()&&this._core.to(this._core.relative(f),!1,!0)},this))};e.Defaults={URLhashListener:!1},e.prototype.destroy=function(){var c,d;a(b).off("hashchange.owl.navigation");for(c in this._handlers)this._core.$element.off(c,this._handlers[c]);for(d in Object.getOwnPropertyNames(this))"function"!=typeof this[d]&&(this[d]=null)},a.fn.owlCarousel.Constructor.Plugins.Hash=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){function e(b,c){var e=!1,f=b.charAt(0).toUpperCase()+b.slice(1);return a.each((b+" "+h.join(f+" ")+f).split(" "),function(a,b){if(g[b]!==d)return e=!c||b,!1}),e}function f(a){return e(a,!0)}var g=a("").get(0).style,h="Webkit Moz O ms".split(" "),i={transition:{end:{WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd",transition:"transitionend"}},animation:{end:{WebkitAnimation:"webkitAnimationEnd",MozAnimation:"animationend",OAnimation:"oAnimationEnd",animation:"animationend"}}},j={csstransforms:function(){return!!e("transform")},csstransforms3d:function(){return!!e("perspective")},csstransitions:function(){return!!e("transition")},cssanimations:function(){return!!e("animation")}};j.csstransitions()&&(a.support.transition=new String(f("transition")),a.support.transition.end=i.transition.end[a.support.transition]),j.cssanimations()&&(a.support.animation=new String(f("animation")),a.support.animation.end=i.animation.end[a.support.animation]),j.csstransforms()&&(a.support.transform=new String(f("transform")),a.support.transform3d=j.csstransforms3d())}(window.Zepto||window.jQuery,window,document); - - -/** - * @module RD Navbar - * @author Evgeniy Gusarov - * @see https://ua.linkedin.com/pub/evgeniy-gusarov/8a/a40/54a - * @version 2.2.5 - */ -/** - * @module RD Navbar - * @author Evgeniy Gusarov - * @version 2.2.5 - */ -(function() { - var isTouch; - - isTouch = "ontouchstart" in window; - - (function($, document, window) { - - /** - * Creates a RDNavbar. - * @class RDNavbar. - * @public - * @param {HTMLElement} element - The element to create the RDNavbar for. - * @param {Object} [options] - The options - */ - var RDNavbar; - RDNavbar = (function() { - - /** - * Default options for RDNavbar. - * @protected - */ - RDNavbar.prototype.Defaults = { - layout: 'rd-navbar-static', - deviceLayout: 'rd-navbar-fixed', - focusOnHover: true, - focusOnHoverTimeout: 800, - linkedElements: ["html"], - domAppend: true, - stickUp: true, - stickUpClone: true, - stickUpOffset: '100%', - anchorNav: true, - anchorNavSpeed: 400, - anchorNavOffset: 0, - anchorNavEasing: 'swing', - autoHeight: true, - responsive: { - 0: { - layout: "rd-navbar-fixed", - deviceLayout: "rd-navbar-fixed", - focusOnHover: false, - stickUp: false - }, - 992: { - layout: "rd-navbar-static", - deviceLayout: "rd-navbar-static", - focusOnHover: true, - stickUp: true - } - }, - callbacks: { - onToggleSwitch: false, - onToggleClose: false, - onDomAppend: false, - onDropdownOver: false, - onDropdownOut: false, - onDropdownToggle: false, - onDropdownClose: false, - onStuck: false, - onUnstuck: false, - onAnchorChange: false - } - }; - - function RDNavbar(element, options) { - - /** - * Current options set - * @public - */ - this.options = $.extend(true, {}, this.Defaults, options); - - /** - * Plugin element - * @public - */ - this.$element = $(element); - - /** - * Plugin element clone - * @public - */ - this.$clone = null; - - /** - * Additional references - * @public - */ - this.$win = $(window); - this.$doc = $(document); - this.currentLayout = this.options.layout; - this.loaded = false; - this.focusOnHover = this.options.focusOnHover; - this.focusTimer = false; - this.cloneTimer = false; - this.isStuck = false; - this.initialize(); - } - - - /** - * Initializes the RDNavbar. - * @protected - */ - - RDNavbar.prototype.initialize = function() { - var ctx; - ctx = this; - ctx.$element.addClass("rd-navbar").addClass(ctx.options.layout); - if (isTouch) { - ctx.$element.addClass("rd-navbar--is-touch"); - } - if (ctx.options.domAppend) { - ctx.createNav(ctx); - } - if (ctx.options.stickUpClone) { - ctx.createClone(ctx); - } - ctx.$element.addClass('rd-navbar-original'); - ctx.addAdditionalClassToToggles('.rd-navbar-original', 'toggle-original', 'toggle-original-elements'); - ctx.applyHandlers(ctx); - ctx.offset = ctx.$element.offset().top; - ctx.height = ctx.$element.outerHeight(); - ctx.loaded = true; - return ctx; - }; - - - /** - * Changes {ctx.$element} layout basing on screen resolution - * @protected - */ - - RDNavbar.prototype.resize = function(ctx, e) { - var targetElement, targetLayout; - targetLayout = isTouch ? ctx.getOption('deviceLayout') : ctx.getOption('layout'); - targetElement = ctx.$element.add(ctx.$clone); - if (targetLayout !== ctx.currentLayout || !ctx.loaded) { - ctx.switchClass(targetElement, ctx.currentLayout, targetLayout); - if (ctx.options.linkedElements != null) { - $.grep(ctx.options.linkedElements, function(link, index) { - return ctx.switchClass(link, ctx.currentLayout + '-linked', targetLayout + '-linked'); - }); - } - ctx.currentLayout = targetLayout; - } - ctx.focusOnHover = ctx.getOption('focusOnHover'); - return ctx; - }; - - - /** - * Toggles bar stickup on scroll - * @protected - */ - - RDNavbar.prototype.stickUp = function(ctx, e) { - var scrollTop, stickUp, stickUpOffset, targetElement, threshold; - stickUp = ctx.getOption("stickUp"); - if ($('html').hasClass('ios') || ctx.$element.hasClass('rd-navbar-fixed')) { - stickUp = false; - } - scrollTop = ctx.$doc.scrollTop(); - targetElement = ctx.$clone != null ? ctx.$clone : ctx.$element; - stickUpOffset = ctx.getOption('stickUpOffset'); - threshold = (typeof stickUpOffset === 'string' ? (stickUpOffset.indexOf('%') > 0 ? parseFloat(stickUpOffset) * ctx.height / 100 : parseFloat(stickUpOffset)) : stickUpOffset); - if (stickUp) { - if ((scrollTop >= threshold && !ctx.isStuck) || (scrollTop < threshold && ctx.isStuck)) { - ctx.$element.add(ctx.$clone).find('[data-rd-navbar-toggle]').each(function() { - $.proxy(ctx.closeToggle, this)(ctx, false); - }).end().find('.rd-navbar-submenu').removeClass('opened').removeClass('focus'); - if (scrollTop >= threshold && !ctx.isStuck && !ctx.$element.hasClass('rd-navbar-fixed')) { - if (ctx.options.callbacks.onStuck) { - ctx.options.callbacks.onStuck.call(ctx); - } - - - setTimeout(function(){ - if (e.type === 'resize') { - ctx.switchClass(targetElement, '', 'rd-navbar--is-stuck'); - } else { - targetElement.addClass('rd-navbar--is-stuck'); - } - ctx.isStuck = true; - }, navigator.platform.match(/(Mac)/i) ? 10 : 0); - - } else { - if (e.type === 'resize') { - ctx.switchClass(targetElement, 'rd-navbar--is-stuck', ''); - } else { - targetElement.removeClass('rd-navbar--is-stuck').one('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd', $.proxy(ctx.resizeWrap, ctx, e)); - } - ctx.isStuck = false; - if (ctx.options.callbacks.onUnstuck) { - ctx.options.callbacks.onUnstuck.call(ctx); - } - } - } - } else { - ctx.$element.find('.rd-navbar-submenu').removeClass('opened').removeClass('focus'); - if (ctx.isStuck) { - ctx.switchClass(targetElement, 'rd-navbar--is-stuck', ''); - ctx.isStuck = false; - ctx.resizeWrap(e); - } - } - return ctx; - }; - - - /** - * Resizes an external wrap of navbar - * @protected - */ - - RDNavbar.prototype.resizeWrap = function(e) { - var $wrap, ctx; - ctx = this; - if ((ctx.$clone == null) && !ctx.isStuck) { - $wrap = ctx.$element.parent(); - if (!ctx.getOption('autoHeight')) { - $wrap.css('height', 'auto'); - return; - } - ctx.height = ctx.$element.outerHeight(); - if (e.type === 'resize') { - $wrap.addClass('rd-navbar--no-transition').css('height', ctx.height); - $wrap[0].offsetHeight; - return $wrap.removeClass('rd-navbar--no-transition'); - } else { - return $wrap.css('height', ctx.height); - } - } - }; - - - /** - * Creates additional DOM for navigation functionality - * @protected - */ - - RDNavbar.prototype.createNav = function(ctx) { - ctx.$element.find('.rd-navbar-dropdown, .rd-navbar-megamenu').each(function() { - var $this, rect; - $this = $(this); - rect = this.getBoundingClientRect(); - if ($this.hasClass('rd-navbar-megamenu')) { - return $this.parent().addClass('rd-navbar--has-megamenu'); - } else { - return $this.parent().addClass('rd-navbar--has-dropdown'); - } - }).parents("li").addClass("rd-navbar-submenu"); - $('').insertAfter('.rd-navbar-nav li.rd-navbar-submenu > a'); - if (ctx.options.callbacks.onDomAppend) { - ctx.options.callbacks.onDomAppend.call(this); - } - return ctx; - }; - - - /** - * Creates navbar clone to stick up - * @protected - */ - - RDNavbar.prototype.createClone = function(ctx) { - ctx.$clone = ctx.$element.clone().insertAfter(ctx.$element).addClass('rd-navbar--is-clone'); - ctx.addAdditionalClassToToggles('.rd-navbar--is-clone', 'toggle-cloned', 'toggle-cloned-elements'); - return ctx; - }; - - - /** - * Closes all toggles on outside click of each item - * @protected - */ - - RDNavbar.prototype.closeToggle = function(ctx, e) { - var $items, $target, additionalToggleElClass, additionalToogleClass, collapse, linkedElements, needClose; - $target = $(e.target); - collapse = false; - linkedElements = this.getAttribute('data-rd-navbar-toggle'); - if (ctx.options.stickUpClone && ctx.isStuck) { - additionalToogleClass = '.toggle-cloned'; - additionalToggleElClass = '.toggle-cloned-elements'; - needClose = !$target.hasClass('toggle-cloned'); - } else { - additionalToogleClass = '.toggle-original'; - additionalToggleElClass = '.toggle-original-elements'; - needClose = !$target.hasClass('toggle-original'); - } - if (e.target !== this && !$target.parents(additionalToogleClass + '[data-rd-navbar-toggle]').length && !$target.parents(additionalToggleElClass).length && linkedElements && needClose) { - $items = $(this).parents('body').find(linkedElements).add($(this).parents('.rd-navbar')[0]); - $items.each(function() { - if (!collapse) { - return collapse = (e.target === this || $.contains(this, e.target)) === true; - } - }); - if (!collapse) { - $items.add(this).removeClass('active'); - if (ctx.options.callbacks.onToggleClose) { - ctx.options.callbacks.onToggleClose.call(this, ctx); - } - } - } - return this; - }; - - - /** - * Switches toggle - * @protected - */ - - RDNavbar.prototype.switchToggle = function(ctx, e) { - var additionalToggleElClass, linkedElements, navbarClass; - e.preventDefault(); - if ($(this).hasClass('toggle-cloned')) { - navbarClass = '.rd-navbar--is-clone'; - additionalToggleElClass = '.toggle-cloned-elements'; - } else { - navbarClass = '.rd-navbar-original'; - additionalToggleElClass = '.toggle-original-elements'; - } - if (linkedElements = this.getAttribute('data-rd-navbar-toggle')) { - $(navbarClass + ' [data-rd-navbar-toggle]').not(this).each(function() { - var deactivateElements; - if (deactivateElements = this.getAttribute('data-rd-navbar-toggle')) { - return $(this).parents('body').find(navbarClass + ' ' + deactivateElements + additionalToggleElClass).add(this).add($.inArray('.rd-navbar', deactivateElements.split(/\s*,\s*/i)) > -1 ? $(this).parents('body')[0] : false).removeClass('active'); - } - }); - $(this).parents('body').find(navbarClass + ' ' + linkedElements + additionalToggleElClass).add(this).add($.inArray('.rd-navbar', linkedElements.split(/\s*,\s*/i)) > -1 ? $(this).parents('.rd-navbar')[0] : false).toggleClass('active'); - } - if (ctx.options.callbacks.onToggleSwitch) { - ctx.options.callbacks.onToggleSwitch.call(this, ctx); - } - return this; - }; - - - /** - * Triggers submenu popup to be shown on mouseover - * @protected - */ - - RDNavbar.prototype.dropdownOver = function(ctx, timer) { - var $this; - if (ctx.focusOnHover) { - $this = $(this); - clearTimeout(timer); - if (ctx.options.callbacks.onDropdownOver) { - if (!ctx.options.callbacks.onDropdownOver.call(this, ctx)){ - return this; - } - } - - $this.addClass('focus').siblings().removeClass('opened').each(ctx.dropdownUnfocus); - } - return this; - }; - - - /** - * Triggers submenu popup to be shown on mouseover - * @protected - */ - - RDNavbar.prototype.dropdownTouch = function(ctx, timer) { - var $this, hasFocus; - $this = $(this); - clearTimeout(timer); - if (ctx.focusOnHover) { - hasFocus = false; - if ($this.hasClass('focus')) { - hasFocus = true; - } - if (!hasFocus) { - $this.addClass('focus').siblings().removeClass('opened').each(ctx.dropdownUnfocus); - return false; - } - if (ctx.options.callbacks.onDropdownOver) { - ctx.options.callbacks.onDropdownOver.call(this, ctx); - } - } - return this; - }; - - - /** - * Triggers submenu popop to be hidden on mouseout - * @protected - */ - - RDNavbar.prototype.dropdownOut = function(ctx, timer) { - var $this; - if (ctx.focusOnHover) { - $this = $(this); - $this.one('mouseenter.navbar', function() { - return clearTimeout(timer); - }); - - if (ctx.options.callbacks.onDropdownOut) { - ctx.options.callbacks.onDropdownOut.call(this, ctx); - } - clearTimeout(timer); - - timer = setTimeout($.proxy(ctx.dropdownUnfocus, this, ctx), ctx.options.focusOnHoverTimeout); - } - return this; - }; - - - /** - * Removes a focus from submenu - * @protected - */ - - RDNavbar.prototype.dropdownUnfocus = function(ctx) { - var $this; - $this = $(this); - $this.find('li.focus').add(this).removeClass('focus'); - return this; - }; - - - /** - * Closes submenu - * @protected - */ - - RDNavbar.prototype.dropdownClose = function(ctx, e) { - var $this; - if (e.target !== this && !$(e.target).parents('.rd-navbar-submenu').length) { - $this = $(this); - $this.find('li.focus').add(this).removeClass('focus').removeClass('opened'); - if (ctx.options.callbacks.onDropdownClose) { - ctx.options.callbacks.onDropdownClose.call(this, ctx); - } - } - return this; - }; - - - /** - * Toggles submenu popup to be shown on trigger click - * @protected - */ - - RDNavbar.prototype.dropdownToggle = function(ctx) { - $(this).toggleClass('opened').siblings().removeClass('opened'); - if (ctx.options.callbacks.onDropdownToggle) { - ctx.options.callbacks.onDropdownToggle.call(this, ctx); - } - return this; - }; - - - /** - * Scrolls the page to triggered anchor - * @protected - */ - - RDNavbar.prototype.goToAnchor = function(ctx, e) { - var $anchor, hash; - hash = this.hash; - $anchor = $(hash); - - if (!ctx.getOption('anchorNav')){ - return false; - } - - if ($anchor.length) { - e.preventDefault(); - $('html, body').stop().animate({ - 'scrollTop': $anchor.offset().top + ctx.getOption('anchorNavOffset') + 1 - }, ctx.getOption('anchorNavSpeed'), ctx.getOption('anchorNavEasing'), function() { - return ctx.changeAnchor(hash); - }); - } - return this; - }; - - - /** - * Highlight an active anchor - * @protected - */ - - RDNavbar.prototype.activateAnchor = function(e) { - var $anchor, $item, $link, ctx, docHeight, hash, i, link, links, navOffset, scrollTop, winHeight; - ctx = this; - scrollTop = ctx.$doc.scrollTop(); - winHeight = ctx.$win.height(); - docHeight = ctx.$doc.height(); - navOffset = ctx.getOption('anchorNavOffset'); - - if (!ctx.options.anchorNav){ - return false; - } - - if (scrollTop + winHeight > docHeight - 50) { - $anchor = $('[data-type="anchor"]').last(); - if ($anchor.length) { - if ($anchor.offset().top >= scrollTop) { - hash = '#' + $anchor.attr("id"); - $item = $('.rd-navbar-nav a[href^="' + hash + '"]').parent(); - if (!$item.hasClass('active')) { - $item.addClass('active').siblings().removeClass('active'); - if (ctx.options.callbacks.onAnchorChange) { - ctx.options.callbacks.onAnchorChange.call($anchor[0], ctx); - } - } - } - } - return $anchor; - } else { - links = $('.rd-navbar-nav a[href^="#"]').get(); - for (i in links) { - link = links[i]; - $link = $(link); - hash = $link.attr('href'); - // @CHANGE LDR - if (hash != '#') $anchor = $(hash); - else $anchor = ''; - //$anchor = $(hash); - if ($anchor.length) { - if ($anchor.offset().top + navOffset <= scrollTop && $anchor.offset().top + $anchor.outerHeight() > scrollTop) { - $link.parent().addClass('active').siblings().removeClass('active'); - if (ctx.options.callbacks.onAnchorChange) { - ctx.options.callbacks.onAnchorChange.call($anchor[0], ctx); - } - } - } - } - } - return null; - }; - - - /** - * Returns current anchor - * @protected - */ - - RDNavbar.prototype.getAnchor = function() { - if (history) { - if (history.state) { - return history.state.id; - } - } - return null; - }; - - - /** - * Changes current page anchor - * @protected - */ - - RDNavbar.prototype.changeAnchor = function(hash) { - if (history) { - if (history.state) { - if (history.state.id !== hash) { - history.replaceState({ - 'anchorId': hash - }, null, hash); - } else { - history.pushState({ - 'anchorId': hash - }, null, hash); - } - } else { - history.pushState({ - 'anchorId': hash - }, null, hash); - } - } - return this; - }; - - - /** - * Applies all JS event handlers - * @protected - */ - - RDNavbar.prototype.applyHandlers = function(ctx) { - if (ctx.options.responsive != null) { - ctx.$win.on('resize.navbar', $.proxy(ctx.resize, ctx.$win[0], ctx)).on('resize.navbar', $.proxy(ctx.resizeWrap, ctx)).on('resize.navbar', $.proxy(ctx.stickUp, (ctx.$clone != null ? ctx.$clone : ctx.$element), ctx)).on('orientationchange.navbar', $.proxy(ctx.resize, ctx.$win[0], ctx)).trigger('resize.navbar'); - } - ctx.$doc.on('scroll.navbar', $.proxy(ctx.stickUp, (ctx.$clone != null ? ctx.$clone : ctx.$element), ctx)).on('scroll.navbar', $.proxy(ctx.activateAnchor, ctx)); - ctx.$element.add(ctx.$clone).find('[data-rd-navbar-toggle]').each(function() { - var $this; - $this = $(this); - $this.on('click', $.proxy(ctx.switchToggle, this, ctx)); - return $this.parents('body').on('click', $.proxy(ctx.closeToggle, this, ctx)); - }); - ctx.$element.add(ctx.$clone).find('.rd-navbar-submenu').each(function() { - var $this, timer; - $this = $(this); - timer = $this.parents(".rd-navbar--is-clone").length ? ctx.cloneTimer : ctx.focusTimer; - $this.on('mouseleave.navbar', $.proxy(ctx.dropdownOut, this, ctx, timer)); - $this.find('> a').on('mouseenter.navbar', $.proxy(ctx.dropdownOver, this, ctx, timer)); - $this.find('> a').on('touchstart.navbar', $.proxy(ctx.dropdownTouch, this, ctx, timer)); - $this.find('> .rd-navbar-submenu-toggle').on('click', $.proxy(ctx.dropdownToggle, this, ctx)); - return $this.parents('body').on('click', $.proxy(ctx.dropdownClose, this, ctx)); - }); - ctx.$element.add(ctx.$clone).find('.rd-navbar-nav a[href^="#"]').each(function() { - return $(this).on('click', $.proxy(ctx.goToAnchor, this, ctx)); - }); - - ctx.$element.find('.rd-navbar-dropdown, .rd-navbar-megamenu').each(function() { - var $this, rect; - $this = $(this); - rect = this.getBoundingClientRect(); - if ((rect.left + $this.outerWidth()) >= window.innerWidth - 10) { - this.className += ' rd-navbar-open-left'; - } else if ((rect.left - $this.outerWidth()) <= 10) { - this.className += ' rd-navbar-open-right'; - } - }); - - return ctx; - }; - - - /** - * Switches classes of elements without transition - * @protected - */ - - RDNavbar.prototype.switchClass = function(element, before, after) { - var obj; - obj = element instanceof jQuery ? element : $(element); - obj.addClass('rd-navbar--no-transition').removeClass(before).addClass(after); - obj[0].offsetHeight; - return obj.removeClass('rd-navbar--no-transition'); - }; - - - /** - * Gets specific option of plugin - * @protected - */ - - RDNavbar.prototype.getOption = function(key) { - var point, targetPoint; - for (point in this.options.responsive) { - if (point <= window.innerWidth) { - targetPoint = point; - } - } - if ((this.options.responsive != null) && (this.options.responsive[targetPoint][key] != null)) { - return this.options.responsive[targetPoint][key]; - } else { - return this.options[key]; - } - }; - - - /** - * Add additional class to navbar toggles to identify it when navbar is cloned - * @protected - */ - - RDNavbar.prototype.addAdditionalClassToToggles = function(navbarClass, toggleAdditionalClass, toggleElAdditionalClass) { - return $(navbarClass).find('[data-rd-navbar-toggle]').each(function() { - var toggleElement; - $(this).addClass(toggleAdditionalClass); - toggleElement = this.getAttribute('data-rd-navbar-toggle'); - return $(this).parents('body').find(navbarClass).find(toggleElement).addClass(toggleElAdditionalClass); - }); - }; - - return RDNavbar; - - })(); - - /** - * The jQuery Plugin for the RD Navbar - * @public - */ - $.fn.extend({ - RDNavbar: function(options) { - var $this; - $this = $(this); - if (!$this.data('RDNavbar')) { - return $this.data('RDNavbar', new RDNavbar(this, options)); - } - } - - /** - * RD Navbar window export - * @public - */ - }); - return window.RDNavbar = RDNavbar; - })(window.jQuery, document, window); - - - /** - * The Plugin AMD export - * @public - */ - - if (typeof module !== "undefined" && module !== null) { - module.exports = window.RDNavbar; - } else if (typeof define === 'function' && define.amd) { - define(["jquery"], function() { - 'use strict'; - return window.RDNavbar; - }); - } - -}).call(this); - - -/** - * @module Device.js - * @see https://github.com/matthewhudson/device.js - * @license MIT - */ -(function(){var n,e,o,t,i,r,d,a,c,l;e=window.device,n={},window.device=n,t=window.document.documentElement,l=window.navigator.userAgent.toLowerCase(),n.ios=function(){return n.iphone()||n.ipod()||n.ipad()},n.iphone=function(){return!n.windows()&&i("iphone")},n.ipod=function(){return i("ipod")},n.ipad=function(){return i("ipad")},n.android=function(){return!n.windows()&&i("android")},n.androidPhone=function(){return n.android()&&i("mobile")},n.androidTablet=function(){return n.android()&&!i("mobile")},n.blackberry=function(){return i("blackberry")||i("bb10")||i("rim")},n.blackberryPhone=function(){return n.blackberry()&&!i("tablet")},n.blackberryTablet=function(){return n.blackberry()&&i("tablet")},n.windows=function(){return i("windows")},n.windowsPhone=function(){return n.windows()&&i("phone")},n.windowsTablet=function(){return n.windows()&&i("touch")&&!n.windowsPhone()},n.fxos=function(){return(i("(mobile;")||i("(tablet;"))&&i("; rv:")},n.fxosPhone=function(){return n.fxos()&&i("mobile")},n.fxosTablet=function(){return n.fxos()&&i("tablet")},n.meego=function(){return i("meego")},n.cordova=function(){return window.cordova&&"file:"===location.protocol},n.nodeWebkit=function(){return"object"==typeof window.process},n.mobile=function(){return n.androidPhone()||n.iphone()||n.ipod()||n.windowsPhone()||n.blackberryPhone()||n.fxosPhone()||n.meego()},n.tablet=function(){return n.ipad()||n.androidTablet()||n.blackberryTablet()||n.windowsTablet()||n.fxosTablet()},n.desktop=function(){return!n.tablet()&&!n.mobile()},n.television=function(){var n,e=["googletv","viera","smarttv","internet.tv","netcast","nettv","appletv","boxee","kylo","roku","dlnadoc","roku","pov_tv","hbbtv","ce-html"];for(n=0;n1},n.landscape=function(){return window.innerHeight/window.innerWidth<1},n.noConflict=function(){return window.device=e,this},i=function(n){return-1!==l.indexOf(n)},d=function(n){var e;return e=new RegExp(n,"i"),t.className.match(e)},o=function(n){var e=null;d(n)||(e=t.className.replace(/^\s+|\s+$/g,""),t.className=e+" "+n)},c=function(n){d(n)&&(t.className=t.className.replace(" "+n,""))},n.ios()?n.ipad()?o("ios ipad tablet"):n.iphone()?o("ios iphone mobile"):n.ipod()&&o("ios ipod mobile"):n.android()?o(n.androidTablet()?"android tablet":"android mobile"):n.blackberry()?o(n.blackberryTablet()?"blackberry tablet":"blackberry mobile"):n.windows()?o(n.windowsTablet()?"windows tablet":n.windowsPhone()?"windows mobile":"desktop"):n.fxos()?o(n.fxosTablet()?"fxos tablet":"fxos mobile"):n.meego()?o("meego mobile"):n.nodeWebkit()?o("node-webkit"):n.television()?o("television"):n.desktop()&&o("desktop"),n.cordova()&&o("cordova"),r=function(){n.landscape()?(c("portrait"),o("landscape")):(c("landscape"),o("portrait"))},a=Object.prototype.hasOwnProperty.call(window,"onorientationchange")?"orientationchange":"resize",window.addEventListener?window.addEventListener(a,r,!1):window.attachEvent?window.attachEvent(a,r):window[a]=r,r(),"function"==typeof define&&"object"==typeof define.amd&&define.amd?define(function(){return n}):"undefined"!=typeof module&&module.exports?module.exports=n:window.device=n}).call(this); - - -/** - * @module UIToTop - * @author Matt Varone - * @see http://www.mattvarone.com/web-design/uitotop-jquery-plugin/ - * @license MIT - */ -!function(o){o.fn.UItoTop=function(n){var e={text:"",min:500,scrollSpeed:800,containerID:"ui-to-top",containerClass:"ui-to-top fa fa-angle-up",easingType:"easeIn"},t=o.extend(e,n),i="#"+t.containerID;o("body").append(''+t.text+""),o(i).click(function(){return o("html, body").stop().animate({scrollTop:0},t.scrollSpeed,t.easingType),!1}),o(window).scroll(function(){var n=o(window).scrollTop();"undefined"==typeof document.body.style.maxHeight&&o(i).css({position:"absolute",top:o(window).scrollTop()+o(window).height()-50}),n>t.min?o(i).stop(!0,!0).addClass("active"):o(i).removeClass("active")})}}(jQuery); - - -/** - * @module Abstract base class for collection plugins v1.0.1. - * @author Keith Wood - * @see http://keith-wood.name/countdown.html - * @license MIT - */ -(function(){var j=false;window.JQClass=function(){};JQClass.classes={};JQClass.extend=function extender(f){var g=this.prototype;j=true;var h=new this();j=false;for(var i in f){h[i]=typeof f[i]=='function'&&typeof g[i]=='function'?(function(d,e){return function(){var b=this._super;this._super=function(a){return g[d].apply(this,a||[])};var c=e.apply(this,arguments);this._super=b;return c}})(i,f[i]):f[i]}function JQClass(){if(!j&&this._init){this._init.apply(this,arguments)}}JQClass.prototype=h;JQClass.prototype.constructor=JQClass;JQClass.extend=extender;return JQClass}})();(function($){JQClass.classes.JQPlugin=JQClass.extend({name:'plugin',defaultOptions:{},regionalOptions:{},_getters:[],_getMarker:function(){return'is-'+this.name},_init:function(){$.extend(this.defaultOptions,(this.regionalOptions&&this.regionalOptions[''])||{});var c=camelCase(this.name);$[c]=this;$.fn[c]=function(a){var b=Array.prototype.slice.call(arguments,1);if($[c]._isNotChained(a,b)){return $[c][a].apply($[c],[this[0]].concat(b))}return this.each(function(){if(typeof a==='string'){if(a[0]==='_'||!$[c][a]){throw'Unknown method: '+a;}$[c][a].apply($[c],[this].concat(b))}else{$[c]._attach(this,a)}})}},setDefaults:function(a){$.extend(this.defaultOptions,a||{})},_isNotChained:function(a,b){if(a==='option'&&(b.length===0||(b.length===1&&typeof b[0]==='string'))){return true}return $.inArray(a,this._getters)>-1},_attach:function(a,b){a=$(a);if(a.hasClass(this._getMarker())){return}a.addClass(this._getMarker());b=$.extend({},this.defaultOptions,this._getMetadata(a),b||{});var c=$.extend({name:this.name,elem:a,options:b},this._instSettings(a,b));a.data(this.name,c);this._postAttach(a,c);this.option(a,b)},_instSettings:function(a,b){return{}},_postAttach:function(a,b){},_getMetadata:function(d){try{var f=d.data(this.name.toLowerCase())||'';f=f.replace(/'/g,'"');f=f.replace(/([a-zA-Z0-9]+):/g,function(a,b,i){var c=f.substring(0,i).match(/"/g);return(!c||c.length%2===0?'"'+b+'":':b+':')});f=$.parseJSON('{'+f+'}');for(var g in f){var h=f[g];if(typeof h==='string'&&h.match(/^new Date\((.*)\)$/)){f[g]=eval(h)}}return f}catch(e){return{}}},_getInst:function(a){return $(a).data(this.name)||{}},option:function(a,b,c){a=$(a);var d=a.data(this.name);if(!b||(typeof b==='string'&&c==null)){var e=(d||{}).options;return(e&&b?e[b]:e)}if(!a.hasClass(this._getMarker())){return}var e=b||{};if(typeof b==='string'){e={};e[b]=c}this._optionsChanged(a,d,e);$.extend(d.options,e)},_optionsChanged:function(a,b,c){},destroy:function(a){a=$(a);if(!a.hasClass(this._getMarker())){return}this._preDestroy(a,this._getInst(a));a.removeData(this.name).removeClass(this._getMarker())},_preDestroy:function(a,b){}});function camelCase(c){return c.replace(/-([a-z])/g,function(a,b){return b.toUpperCase()})}$.JQPlugin={createPlugin:function(a,b){if(typeof a==='object'){b=a;a='JQPlugin'}a=camelCase(a);var c=camelCase(b.name);JQClass.classes[c]=JQClass.classes[a].extend(b);new JQClass.classes[c]()}}})(jQuery); - - -/** - * @module Moment JS - * @authors Tim Wood, Iskren Chernev, Moment.js contributors - * @see https://ua.linkedin.com/in/rafael-shayvolodyan-3a297b96 - * @version 2.12.0 - * @license MIT - */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.moment=e()}(this,function(){"use strict";function t(){return Xn.apply(null,arguments)}function e(t){Xn=t}function n(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function i(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function s(t,e){var n,i=[];for(n=0;n0)for(n in Kn)i=Kn[n],s=e[i],c(s)||(t[i]=s);return t}function m(e){f(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),ti===!1&&(ti=!0,t.updateOffset(this),ti=!1)}function _(t){return t instanceof m||null!=t&&null!=t._isAMomentObject}function y(t){return 0>t?Math.ceil(t):Math.floor(t)}function g(t){var e=+t,n=0;return 0!==e&&isFinite(e)&&(n=y(e)),n}function p(t,e,n){var i,s=Math.min(t.length,e.length),r=Math.abs(t.length-e.length),a=0;for(i=0;s>i;i++)(n&&t[i]!==e[i]||!n&&g(t[i])!==g(e[i]))&&a++;return a+r}function v(e){t.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function D(t,e){var n=!0;return a(function(){return n&&(v(t+"\nArguments: "+Array.prototype.slice.call(arguments).join(", ")+"\n"+(new Error).stack),n=!1),e.apply(this,arguments)},e)}function M(t,e){ei[t]||(v(e),ei[t]=!0)}function S(t){return t instanceof Function||"[object Function]"===Object.prototype.toString.call(t)}function Y(t){return"[object Object]"===Object.prototype.toString.call(t)}function w(t){var e,n;for(n in t)e=t[n],S(e)?this[n]=e:this["_"+n]=e;this._config=t,this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)}function k(t,e){var n,i=a({},t);for(n in e)r(e,n)&&(Y(t[n])&&Y(e[n])?(i[n]={},a(i[n],t[n]),a(i[n],e[n])):null!=e[n]?i[n]=e[n]:delete i[n]);return i}function T(t){null!=t&&this.set(t)}function b(t){return t?t.toLowerCase().replace("_","-"):t}function O(t){for(var e,n,i,s,r=0;r0;){if(i=W(s.slice(0,e).join("-")))return i;if(n&&n.length>=e&&p(s,n,!0)>=e-1)break;e--}r++}return null}function W(t){var e=null;if(!ii[t]&&"undefined"!=typeof module&&module&&module.exports)try{e=ni._abbr,require("./locale/"+t),x(e)}catch(n){}return ii[t]}function x(t,e){var n;return t&&(n=c(e)?P(t):U(t,e),n&&(ni=n)),ni._abbr}function U(t,e){return null!==e?(e.abbr=t,null!=ii[t]?(M("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale"),e=k(ii[t]._config,e)):null!=e.parentLocale&&(null!=ii[e.parentLocale]?e=k(ii[e.parentLocale]._config,e):M("parentLocaleUndefined","specified parentLocale is not defined yet")),ii[t]=new T(e),x(t),ii[t]):(delete ii[t],null)}function G(t,e){if(null!=e){var n;null!=ii[t]&&(e=k(ii[t]._config,e)),n=new T(e),n.parentLocale=ii[t],ii[t]=n,x(t)}else null!=ii[t]&&(null!=ii[t].parentLocale?ii[t]=ii[t].parentLocale:null!=ii[t]&&delete ii[t]);return ii[t]}function P(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return ni;if(!n(t)){if(e=W(t))return e;t=[t]}return O(t)}function C(){return Object.keys(ii)}function F(t,e){var n=t.toLowerCase();si[n]=si[n+"s"]=si[e]=t}function H(t){return"string"==typeof t?si[t]||si[t.toLowerCase()]:void 0}function L(t){var e,n,i={};for(n in t)r(t,n)&&(e=H(n),e&&(i[e]=t[n]));return i}function V(e,n){return function(i){return null!=i?(I(this,e,i),t.updateOffset(this,n),this):N(this,e)}}function N(t,e){return t.isValid()?t._d["get"+(t._isUTC?"UTC":"")+e]():NaN}function I(t,e,n){t.isValid()&&t._d["set"+(t._isUTC?"UTC":"")+e](n)}function A(t,e){var n;if("object"==typeof t)for(n in t)this.set(n,t[n]);else if(t=H(t),S(this[t]))return this[t](e);return this}function R(t,e,n){var i=""+Math.abs(t),s=e-i.length,r=t>=0;return(r?n?"+":"":"-")+Math.pow(10,Math.max(0,s)).toString().substr(1)+i}function E(t,e,n,i){var s=i;"string"==typeof i&&(s=function(){return this[i]()}),t&&(ui[t]=s),e&&(ui[e[0]]=function(){return R(s.apply(this,arguments),e[1],e[2])}),n&&(ui[n]=function(){return this.localeData().ordinal(s.apply(this,arguments),t)})}function j(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function z(t){var e,n,i=t.match(ri);for(e=0,n=i.length;n>e;e++)ui[i[e]]?i[e]=ui[i[e]]:i[e]=j(i[e]);return function(s){var r="";for(e=0;n>e;e++)r+=i[e]instanceof Function?i[e].call(s,t):i[e];return r}}function Z(t,e){return t.isValid()?(e=$(e,t.localeData()),oi[e]=oi[e]||z(e),oi[e](t)):t.localeData().invalidDate()}function $(t,e){function n(t){return e.longDateFormat(t)||t}var i=5;for(ai.lastIndex=0;i>=0&&ai.test(t);)t=t.replace(ai,n),ai.lastIndex=0,i-=1;return t}function q(t,e,n){Ti[t]=S(e)?e:function(t,i){return t&&n?n:e}}function J(t,e){return r(Ti,t)?Ti[t](e._strict,e._locale):new RegExp(B(t))}function B(t){return Q(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,n,i,s){return e||n||i||s}))}function Q(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function X(t,e){var n,i=e;for("string"==typeof t&&(t=[t]),"number"==typeof e&&(i=function(t,n){n[e]=g(t)}),n=0;ni;i++){if(s=o([2e3,i]),n&&!this._longMonthsParse[i]&&(this._longMonthsParse[i]=new RegExp("^"+this.months(s,"").replace(".","")+"$","i"),this._shortMonthsParse[i]=new RegExp("^"+this.monthsShort(s,"").replace(".","")+"$","i")),n||this._monthsParse[i]||(r="^"+this.months(s,"")+"|^"+this.monthsShort(s,""),this._monthsParse[i]=new RegExp(r.replace(".",""),"i")),n&&"MMMM"===e&&this._longMonthsParse[i].test(t))return i;if(n&&"MMM"===e&&this._shortMonthsParse[i].test(t))return i;if(!n&&this._monthsParse[i].test(t))return i}}function rt(t,e){var n;if(!t.isValid())return t;if("string"==typeof e)if(/^\d+$/.test(e))e=g(e);else if(e=t.localeData().monthsParse(e),"number"!=typeof e)return t;return n=Math.min(t.date(),et(t.year(),e)),t._d["set"+(t._isUTC?"UTC":"")+"Month"](e,n),t}function at(e){return null!=e?(rt(this,e),t.updateOffset(this,!0),this):N(this,"Month")}function ot(){return et(this.year(),this.month())}function ut(t){return this._monthsParseExact?(r(this,"_monthsRegex")||lt.call(this),t?this._monthsShortStrictRegex:this._monthsShortRegex):this._monthsShortStrictRegex&&t?this._monthsShortStrictRegex:this._monthsShortRegex}function dt(t){return this._monthsParseExact?(r(this,"_monthsRegex")||lt.call(this),t?this._monthsStrictRegex:this._monthsRegex):this._monthsStrictRegex&&t?this._monthsStrictRegex:this._monthsRegex}function lt(){function t(t,e){return e.length-t.length}var e,n,i=[],s=[],r=[];for(e=0;12>e;e++)n=o([2e3,e]),i.push(this.monthsShort(n,"")),s.push(this.months(n,"")),r.push(this.months(n,"")),r.push(this.monthsShort(n,""));for(i.sort(t),s.sort(t),r.sort(t),e=0;12>e;e++)i[e]=Q(i[e]),s[e]=Q(s[e]),r[e]=Q(r[e]);this._monthsRegex=new RegExp("^("+r.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+s.join("|")+")$","i"),this._monthsShortStrictRegex=new RegExp("^("+i.join("|")+")$","i")}function ht(t){var e,n=t._a;return n&&-2===d(t).overflow&&(e=n[Wi]<0||n[Wi]>11?Wi:n[xi]<1||n[xi]>et(n[Oi],n[Wi])?xi:n[Ui]<0||n[Ui]>24||24===n[Ui]&&(0!==n[Gi]||0!==n[Pi]||0!==n[Ci])?Ui:n[Gi]<0||n[Gi]>59?Gi:n[Pi]<0||n[Pi]>59?Pi:n[Ci]<0||n[Ci]>999?Ci:-1,d(t)._overflowDayOfYear&&(Oi>e||e>xi)&&(e=xi),d(t)._overflowWeeks&&-1===e&&(e=Fi),d(t)._overflowWeekday&&-1===e&&(e=Hi),d(t).overflow=e),t}function ct(t){var e,n,i,s,r,a,o=t._i,u=Ri.exec(o)||Ei.exec(o);if(u){for(d(t).iso=!0,e=0,n=zi.length;n>e;e++)if(zi[e][1].exec(u[1])){s=zi[e][0],i=zi[e][2]!==!1;break}if(null==s)return void(t._isValid=!1);if(u[3]){for(e=0,n=Zi.length;n>e;e++)if(Zi[e][1].exec(u[3])){r=(u[2]||" ")+Zi[e][0];break}if(null==r)return void(t._isValid=!1)}if(!i&&null!=r)return void(t._isValid=!1);if(u[4]){if(!ji.exec(u[4]))return void(t._isValid=!1);a="Z"}t._f=s+(r||"")+(a||""),bt(t)}else t._isValid=!1}function ft(e){var n=$i.exec(e._i);return null!==n?void(e._d=new Date(+n[1])):(ct(e),void(e._isValid===!1&&(delete e._isValid,t.createFromInputFallback(e))))}function mt(t,e,n,i,s,r,a){var o=new Date(t,e,n,i,s,r,a);return 100>t&&t>=0&&isFinite(o.getFullYear())&&o.setFullYear(t),o}function _t(t){var e=new Date(Date.UTC.apply(null,arguments));return 100>t&&t>=0&&isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t),e}function yt(t){return gt(t)?366:365}function gt(t){return t%4===0&&t%100!==0||t%400===0}function pt(){return gt(this.year())}function vt(t,e,n){var i=7+e-n,s=(7+_t(t,0,i).getUTCDay()-e)%7;return-s+i-1}function Dt(t,e,n,i,s){var r,a,o=(7+n-i)%7,u=vt(t,i,s),d=1+7*(e-1)+o+u;return 0>=d?(r=t-1,a=yt(r)+d):d>yt(t)?(r=t+1,a=d-yt(t)):(r=t,a=d),{year:r,dayOfYear:a}}function Mt(t,e,n){var i,s,r=vt(t.year(),e,n),a=Math.floor((t.dayOfYear()-r-1)/7)+1;return 1>a?(s=t.year()-1,i=a+St(s,e,n)):a>St(t.year(),e,n)?(i=a-St(t.year(),e,n),s=t.year()+1):(s=t.year(),i=a),{week:i,year:s}}function St(t,e,n){var i=vt(t,e,n),s=vt(t+1,e,n);return(yt(t)-i+s)/7}function Yt(t,e,n){return null!=t?t:null!=e?e:n}function wt(e){var n=new Date(t.now());return e._useUTC?[n.getUTCFullYear(),n.getUTCMonth(),n.getUTCDate()]:[n.getFullYear(),n.getMonth(),n.getDate()]}function kt(t){var e,n,i,s,r=[];if(!t._d){for(i=wt(t),t._w&&null==t._a[xi]&&null==t._a[Wi]&&Tt(t),t._dayOfYear&&(s=Yt(t._a[Oi],i[Oi]),t._dayOfYear>yt(s)&&(d(t)._overflowDayOfYear=!0),n=_t(s,0,t._dayOfYear),t._a[Wi]=n.getUTCMonth(),t._a[xi]=n.getUTCDate()),e=0;3>e&&null==t._a[e];++e)t._a[e]=r[e]=i[e];for(;7>e;e++)t._a[e]=r[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[Ui]&&0===t._a[Gi]&&0===t._a[Pi]&&0===t._a[Ci]&&(t._nextDay=!0,t._a[Ui]=0),t._d=(t._useUTC?_t:mt).apply(null,r),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[Ui]=24)}}function Tt(t){var e,n,i,s,r,a,o,u;e=t._w,null!=e.GG||null!=e.W||null!=e.E?(r=1,a=4,n=Yt(e.GG,t._a[Oi],Mt(Ft(),1,4).year),i=Yt(e.W,1),s=Yt(e.E,1),(1>s||s>7)&&(u=!0)):(r=t._locale._week.dow,a=t._locale._week.doy,n=Yt(e.gg,t._a[Oi],Mt(Ft(),r,a).year),i=Yt(e.w,1),null!=e.d?(s=e.d,(0>s||s>6)&&(u=!0)):null!=e.e?(s=e.e+r,(e.e<0||e.e>6)&&(u=!0)):s=r),1>i||i>St(n,r,a)?d(t)._overflowWeeks=!0:null!=u?d(t)._overflowWeekday=!0:(o=Dt(n,i,s,r,a),t._a[Oi]=o.year,t._dayOfYear=o.dayOfYear)}function bt(e){if(e._f===t.ISO_8601)return void ct(e);e._a=[],d(e).empty=!0;var n,i,s,r,a,o=""+e._i,u=o.length,l=0;for(s=$(e._f,e._locale).match(ri)||[],n=0;n0&&d(e).unusedInput.push(a),o=o.slice(o.indexOf(i)+i.length),l+=i.length),ui[r]?(i?d(e).empty=!1:d(e).unusedTokens.push(r),tt(r,i,e)):e._strict&&!i&&d(e).unusedTokens.push(r);d(e).charsLeftOver=u-l,o.length>0&&d(e).unusedInput.push(o),d(e).bigHour===!0&&e._a[Ui]<=12&&e._a[Ui]>0&&(d(e).bigHour=void 0),e._a[Ui]=Ot(e._locale,e._a[Ui],e._meridiem),kt(e),ht(e)}function Ot(t,e,n){var i;return null==n?e:null!=t.meridiemHour?t.meridiemHour(e,n):null!=t.isPM?(i=t.isPM(n),i&&12>e&&(e+=12),i||12!==e||(e=0),e):e}function Wt(t){var e,n,i,s,r;if(0===t._f.length)return d(t).invalidFormat=!0,void(t._d=new Date(NaN));for(s=0;sr)&&(i=r,n=e));a(t,n||e)}function xt(t){if(!t._d){var e=L(t._i);t._a=s([e.year,e.month,e.day||e.date,e.hour,e.minute,e.second,e.millisecond],function(t){return t&&parseInt(t,10)}),kt(t)}}function Ut(t){var e=new m(ht(Gt(t)));return e._nextDay&&(e.add(1,"d"),e._nextDay=void 0),e}function Gt(t){var e=t._i,s=t._f;return t._locale=t._locale||P(t._l),null===e||void 0===s&&""===e?h({nullInput:!0}):("string"==typeof e&&(t._i=e=t._locale.preparse(e)),_(e)?new m(ht(e)):(n(s)?Wt(t):s?bt(t):i(e)?t._d=e:Pt(t),l(t)||(t._d=null),t))}function Pt(e){var r=e._i;void 0===r?e._d=new Date(t.now()):i(r)?e._d=new Date(+r):"string"==typeof r?ft(e):n(r)?(e._a=s(r.slice(0),function(t){return parseInt(t,10)}),kt(e)):"object"==typeof r?xt(e):"number"==typeof r?e._d=new Date(r):t.createFromInputFallback(e)}function Ct(t,e,n,i,s){var r={};return"boolean"==typeof n&&(i=n,n=void 0),r._isAMomentObject=!0,r._useUTC=r._isUTC=s,r._l=n,r._i=t,r._f=e,r._strict=i,Ut(r)}function Ft(t,e,n,i){return Ct(t,e,n,i,!1)}function Ht(t,e){var i,s;if(1===e.length&&n(e[0])&&(e=e[0]),!e.length)return Ft();for(i=e[0],s=1;st&&(t=-t,n="-"),n+R(~~(t/60),2)+e+R(~~t%60,2)})}function Rt(t,e){var n=(e||"").match(t)||[],i=n[n.length-1]||[],s=(i+"").match(Xi)||["-",0,0],r=+(60*s[1])+g(s[2]);return"+"===s[0]?r:-r}function Et(e,n){var s,r;return n._isUTC?(s=n.clone(),r=(_(e)||i(e)?+e:+Ft(e))-+s,s._d.setTime(+s._d+r),t.updateOffset(s,!1),s):Ft(e).local()}function jt(t){return 15*-Math.round(t._d.getTimezoneOffset()/15)}function zt(e,n){var i,s=this._offset||0;return this.isValid()?null!=e?("string"==typeof e?e=Rt(Yi,e):Math.abs(e)<16&&(e=60*e),!this._isUTC&&n&&(i=jt(this)),this._offset=e,this._isUTC=!0,null!=i&&this.add(i,"m"),s!==e&&(!n||this._changeInProgress?ue(this,ne(e-s,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,t.updateOffset(this,!0),this._changeInProgress=null)),this):this._isUTC?s:jt(this):null!=e?this:NaN}function Zt(t,e){return null!=t?("string"!=typeof t&&(t=-t),this.utcOffset(t,e),this):-this.utcOffset()}function $t(t){return this.utcOffset(0,t)}function qt(t){return this._isUTC&&(this.utcOffset(0,t),this._isUTC=!1,t&&this.subtract(jt(this),"m")),this}function Jt(){return this._tzm?this.utcOffset(this._tzm):"string"==typeof this._i&&this.utcOffset(Rt(Si,this._i)),this}function Bt(t){return this.isValid()?(t=t?Ft(t).utcOffset():0,(this.utcOffset()-t)%60===0):!1}function Qt(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Xt(){if(!c(this._isDSTShifted))return this._isDSTShifted;var t={};if(f(t,this),t=Gt(t),t._a){var e=t._isUTC?o(t._a):Ft(t._a);this._isDSTShifted=this.isValid()&&p(t._a,e.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function Kt(){return this.isValid()?!this._isUTC:!1}function te(){return this.isValid()?this._isUTC:!1}function ee(){return this.isValid()?this._isUTC&&0===this._offset:!1}function ne(t,e){var n,i,s,a=t,o=null;return It(t)?a={ms:t._milliseconds,d:t._days,M:t._months}:"number"==typeof t?(a={},e?a[e]=t:a.milliseconds=t):(o=Ki.exec(t))?(n="-"===o[1]?-1:1,a={y:0,d:g(o[xi])*n,h:g(o[Ui])*n,m:g(o[Gi])*n,s:g(o[Pi])*n,ms:g(o[Ci])*n}):(o=ts.exec(t))?(n="-"===o[1]?-1:1,a={y:ie(o[2],n),M:ie(o[3],n),w:ie(o[4],n),d:ie(o[5],n),h:ie(o[6],n),m:ie(o[7],n),s:ie(o[8],n)}):null==a?a={}:"object"==typeof a&&("from"in a||"to"in a)&&(s=re(Ft(a.from),Ft(a.to)),a={},a.ms=s.milliseconds,a.M=s.months),i=new Nt(a),It(t)&&r(t,"_locale")&&(i._locale=t._locale),i}function ie(t,e){var n=t&&parseFloat(t.replace(",","."));return(isNaN(n)?0:n)*e}function se(t,e){var n={milliseconds:0,months:0};return n.months=e.month()-t.month()+12*(e.year()-t.year()),t.clone().add(n.months,"M").isAfter(e)&&--n.months,n.milliseconds=+e-+t.clone().add(n.months,"M"),n}function re(t,e){var n;return t.isValid()&&e.isValid()?(e=Et(e,t),t.isBefore(e)?n=se(t,e):(n=se(e,t),n.milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function ae(t){return 0>t?-1*Math.round(-1*t):Math.round(t)}function oe(t,e){return function(n,i){var s,r;return null===i||isNaN(+i)||(M(e,"moment()."+e+"(period, number) is deprecated. Please use moment()."+e+"(number, period)."),r=n,n=i,i=r),n="string"==typeof n?+n:n,s=ne(n,i),ue(this,s,t),this}}function ue(e,n,i,s){var r=n._milliseconds,a=ae(n._days),o=ae(n._months);e.isValid()&&(s=null==s?!0:s,r&&e._d.setTime(+e._d+r*i),a&&I(e,"Date",N(e,"Date")+a*i),o&&rt(e,N(e,"Month")+o*i),s&&t.updateOffset(e,a||o))}function de(t,e){var n=t||Ft(),i=Et(n,this).startOf("day"),s=this.diff(i,"days",!0),r=-6>s?"sameElse":-1>s?"lastWeek":0>s?"lastDay":1>s?"sameDay":2>s?"nextDay":7>s?"nextWeek":"sameElse",a=e&&(S(e[r])?e[r]():e[r]);return this.format(a||this.localeData().calendar(r,this,Ft(n)))}function le(){return new m(this)}function he(t,e){var n=_(t)?t:Ft(t);return this.isValid()&&n.isValid()?(e=H(c(e)?"millisecond":e),"millisecond"===e?+this>+n:+n<+this.clone().startOf(e)):!1}function ce(t,e){var n=_(t)?t:Ft(t);return this.isValid()&&n.isValid()?(e=H(c(e)?"millisecond":e),"millisecond"===e?+n>+this:+this.clone().endOf(e)<+n):!1}function fe(t,e,n){return this.isAfter(t,n)&&this.isBefore(e,n)}function me(t,e){var n,i=_(t)?t:Ft(t);return this.isValid()&&i.isValid()?(e=H(e||"millisecond"),"millisecond"===e?+this===+i:(n=+i,+this.clone().startOf(e)<=n&&n<=+this.clone().endOf(e))):!1}function _e(t,e){return this.isSame(t,e)||this.isAfter(t,e)}function ye(t,e){return this.isSame(t,e)||this.isBefore(t,e)}function ge(t,e,n){var i,s,r,a;return this.isValid()?(i=Et(t,this),i.isValid()?(s=6e4*(i.utcOffset()-this.utcOffset()),e=H(e),"year"===e||"month"===e||"quarter"===e?(a=pe(this,i),"quarter"===e?a/=3:"year"===e&&(a/=12)):(r=this-i,a="second"===e?r/1e3:"minute"===e?r/6e4:"hour"===e?r/36e5:"day"===e?(r-s)/864e5:"week"===e?(r-s)/6048e5:r),n?a:y(a)):NaN):NaN}function pe(t,e){var n,i,s=12*(e.year()-t.year())+(e.month()-t.month()),r=t.clone().add(s,"months");return 0>e-r?(n=t.clone().add(s-1,"months"),i=(e-r)/(r-n)):(n=t.clone().add(s+1,"months"),i=(e-r)/(n-r)),-(s+i)}function ve(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function De(){var t=this.clone().utc();return 0r&&(e=r),Ze.call(this,t,e,n,i,s))}function Ze(t,e,n,i,s){var r=Dt(t,e,n,i,s),a=_t(r.year,0,r.dayOfYear);return this.year(a.getUTCFullYear()),this.month(a.getUTCMonth()),this.date(a.getUTCDate()),this}function $e(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)}function qe(t){return Mt(t,this._week.dow,this._week.doy).week}function Je(){return this._week.dow}function Be(){return this._week.doy}function Qe(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")}function Xe(t){var e=Mt(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")}function Ke(t,e){return"string"!=typeof t?t:isNaN(t)?(t=e.weekdaysParse(t),"number"==typeof t?t:null):parseInt(t,10)}function tn(t,e){return n(this._weekdays)?this._weekdays[t.day()]:this._weekdays[this._weekdays.isFormat.test(e)?"format":"standalone"][t.day()]}function en(t){return this._weekdaysShort[t.day()]}function nn(t){return this._weekdaysMin[t.day()]}function sn(t,e,n){var i,s,r;for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),i=0;7>i;i++){if(s=Ft([2e3,1]).day(i),n&&!this._fullWeekdaysParse[i]&&(this._fullWeekdaysParse[i]=new RegExp("^"+this.weekdays(s,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[i]=new RegExp("^"+this.weekdaysShort(s,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[i]=new RegExp("^"+this.weekdaysMin(s,"").replace(".",".?")+"$","i")),this._weekdaysParse[i]||(r="^"+this.weekdays(s,"")+"|^"+this.weekdaysShort(s,"")+"|^"+this.weekdaysMin(s,""),this._weekdaysParse[i]=new RegExp(r.replace(".",""),"i")),n&&"dddd"===e&&this._fullWeekdaysParse[i].test(t))return i;if(n&&"ddd"===e&&this._shortWeekdaysParse[i].test(t))return i;if(n&&"dd"===e&&this._minWeekdaysParse[i].test(t))return i;if(!n&&this._weekdaysParse[i].test(t))return i}}function rn(t){if(!this.isValid())return null!=t?this:NaN;var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(t=Ke(t,this.localeData()),this.add(t-e,"d")):e}function an(t){if(!this.isValid())return null!=t?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")}function on(t){return this.isValid()?null==t?this.day()||7:this.day(this.day()%7?t:t-7):null!=t?this:NaN}function un(t){var e=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")}function dn(){return this.hours()%12||12}function ln(t,e){E(t,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)})}function hn(t,e){return e._meridiemParse}function cn(t){return"p"===(t+"").toLowerCase().charAt(0)}function fn(t,e,n){return t>11?n?"pm":"PM":n?"am":"AM"}function mn(t,e){e[Ci]=g(1e3*("0."+t))}function _n(){return this._isUTC?"UTC":""}function yn(){return this._isUTC?"Coordinated Universal Time":""}function gn(t){return Ft(1e3*t)}function pn(){return Ft.apply(null,arguments).parseZone()}function vn(t,e,n){var i=this._calendar[t];return S(i)?i.call(e,n):i}function Dn(t){var e=this._longDateFormat[t],n=this._longDateFormat[t.toUpperCase()];return e||!n?e:(this._longDateFormat[t]=n.replace(/MMMM|MM|DD|dddd/g,function(t){return t.slice(1)}),this._longDateFormat[t])}function Mn(){return this._invalidDate}function Sn(t){return this._ordinal.replace("%d",t)}function Yn(t){return t}function wn(t,e,n,i){var s=this._relativeTime[n];return S(s)?s(t,e,n,i):s.replace(/%d/i,t)}function kn(t,e){var n=this._relativeTime[t>0?"future":"past"];return S(n)?n(e):n.replace(/%s/i,e)}function Tn(t,e,n,i){var s=P(),r=o().set(i,e);return s[n](r,t)}function bn(t,e,n,i,s){if("number"==typeof t&&(e=t,t=void 0),t=t||"",null!=e)return Tn(t,e,n,s);var r,a=[];for(r=0;i>r;r++)a[r]=Tn(t,r,n,s);return a}function On(t,e){return bn(t,e,"months",12,"month")}function Wn(t,e){return bn(t,e,"monthsShort",12,"month")}function xn(t,e){return bn(t,e,"weekdays",7,"day")}function Un(t,e){return bn(t,e,"weekdaysShort",7,"day")}function Gn(t,e){return bn(t,e,"weekdaysMin",7,"day")}function Pn(){var t=this._data;return this._milliseconds=ws(this._milliseconds),this._days=ws(this._days),this._months=ws(this._months),t.milliseconds=ws(t.milliseconds),t.seconds=ws(t.seconds),t.minutes=ws(t.minutes),t.hours=ws(t.hours),t.months=ws(t.months),t.years=ws(t.years),this}function Cn(t,e,n,i){var s=ne(e,n);return t._milliseconds+=i*s._milliseconds,t._days+=i*s._days,t._months+=i*s._months,t._bubble()}function Fn(t,e){return Cn(this,t,e,1)}function Hn(t,e){return Cn(this,t,e,-1)}function Ln(t){return 0>t?Math.floor(t):Math.ceil(t)}function Vn(){var t,e,n,i,s,r=this._milliseconds,a=this._days,o=this._months,u=this._data;return r>=0&&a>=0&&o>=0||0>=r&&0>=a&&0>=o||(r+=864e5*Ln(In(o)+a),a=0,o=0),u.milliseconds=r%1e3,t=y(r/1e3),u.seconds=t%60,e=y(t/60),u.minutes=e%60,n=y(e/60),u.hours=n%24,a+=y(n/24),s=y(Nn(a)),o+=s,a-=Ln(In(s)),i=y(o/12),o%=12,u.days=a,u.months=o,u.years=i,this}function Nn(t){return 4800*t/146097}function In(t){return 146097*t/4800}function An(t){var e,n,i=this._milliseconds;if(t=H(t),"month"===t||"year"===t)return e=this._days+i/864e5,n=this._months+Nn(e),"month"===t?n:n/12;switch(e=this._days+Math.round(In(this._months)),t){case"week":return e/7+i/6048e5;case"day":return e+i/864e5;case"hour":return 24*e+i/36e5;case"minute":return 1440*e+i/6e4;case"second":return 86400*e+i/1e3;case"millisecond":return Math.floor(864e5*e)+i;default:throw new Error("Unknown unit "+t)}}function Rn(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*g(this._months/12)}function En(t){return function(){return this.as(t)}}function jn(t){return t=H(t),this[t+"s"]()}function zn(t){return function(){return this._data[t]}}function Zn(){return y(this.days()/7)}function $n(t,e,n,i,s){return s.relativeTime(e||1,!!n,t,i)}function qn(t,e,n){var i=ne(t).abs(),s=Is(i.as("s")),r=Is(i.as("m")),a=Is(i.as("h")),o=Is(i.as("d")),u=Is(i.as("M")),d=Is(i.as("y")),l=s=r&&["m"]||r=a&&["h"]||a=o&&["d"]||o=u&&["M"]||u=d&&["y"]||["yy",d];return l[2]=e,l[3]=+t>0,l[4]=n,$n.apply(null,l)}function Jn(t,e){return void 0===As[t]?!1:void 0===e?As[t]:(As[t]=e,!0)}function Bn(t){var e=this.localeData(),n=qn(this,!t,e);return t&&(n=e.pastFuture(+this,n)),e.postformat(n)}function Qn(){var t,e,n,i=Rs(this._milliseconds)/1e3,s=Rs(this._days),r=Rs(this._months);t=y(i/60),e=y(t/60),i%=60,t%=60,n=y(r/12),r%=12;var a=n,o=r,u=s,d=e,l=t,h=i,c=this.asSeconds();return c?(0>c?"-":"")+"P"+(a?a+"Y":"")+(o?o+"M":"")+(u?u+"D":"")+(d||l||h?"T":"")+(d?d+"H":"")+(l?l+"M":"")+(h?h+"S":""):"P0D"}var Xn,Kn=t.momentProperties=[],ti=!1,ei={};t.suppressDeprecationWarnings=!1;var ni,ii={},si={},ri=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,ai=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,oi={},ui={},di=/\d/,li=/\d\d/,hi=/\d{3}/,ci=/\d{4}/,fi=/[+-]?\d{6}/,mi=/\d\d?/,_i=/\d\d\d\d?/,yi=/\d\d\d\d\d\d?/,gi=/\d{1,3}/,pi=/\d{1,4}/,vi=/[+-]?\d{1,6}/,Di=/\d+/,Mi=/[+-]?\d+/,Si=/Z|[+-]\d\d:?\d\d/gi,Yi=/Z|[+-]\d\d(?::?\d\d)?/gi,wi=/[+-]?\d+(\.\d{1,3})?/,ki=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,Ti={},bi={},Oi=0,Wi=1,xi=2,Ui=3,Gi=4,Pi=5,Ci=6,Fi=7,Hi=8;E("M",["MM",2],"Mo",function(){return this.month()+1}),E("MMM",0,0,function(t){return this.localeData().monthsShort(this,t)}),E("MMMM",0,0,function(t){return this.localeData().months(this,t)}),F("month","M"),q("M",mi),q("MM",mi,li),q("MMM",function(t,e){return e.monthsShortRegex(t)}),q("MMMM",function(t,e){return e.monthsRegex(t)}),X(["M","MM"],function(t,e){e[Wi]=g(t)-1}),X(["MMM","MMMM"],function(t,e,n,i){var s=n._locale.monthsParse(t,i,n._strict);null!=s?e[Wi]=s:d(n).invalidMonth=t});var Li=/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/,Vi="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Ni="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),Ii=ki,Ai=ki,Ri=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/,Ei=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/,ji=/Z|[+-]\d\d(?::?\d\d)?/,zi=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Zi=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],$i=/^\/?Date\((\-?\d+)/i;t.createFromInputFallback=D("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(t){t._d=new Date(t._i+(t._useUTC?" UTC":""))}),E("Y",0,0,function(){var t=this.year();return 9999>=t?""+t:"+"+t}),E(0,["YY",2],0,function(){return this.year()%100}),E(0,["YYYY",4],0,"year"),E(0,["YYYYY",5],0,"year"),E(0,["YYYYYY",6,!0],0,"year"),F("year","y"),q("Y",Mi),q("YY",mi,li),q("YYYY",pi,ci),q("YYYYY",vi,fi),q("YYYYYY",vi,fi),X(["YYYYY","YYYYYY"],Oi),X("YYYY",function(e,n){n[Oi]=2===e.length?t.parseTwoDigitYear(e):g(e);}),X("YY",function(e,n){n[Oi]=t.parseTwoDigitYear(e)}),X("Y",function(t,e){e[Oi]=parseInt(t,10)}),t.parseTwoDigitYear=function(t){return g(t)+(g(t)>68?1900:2e3)};var qi=V("FullYear",!1);t.ISO_8601=function(){};var Ji=D("moment().min is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(){var t=Ft.apply(null,arguments);return this.isValid()&&t.isValid()?this>t?this:t:h()}),Bi=D("moment().max is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(){var t=Ft.apply(null,arguments);return this.isValid()&&t.isValid()?t>this?this:t:h()}),Qi=function(){return Date.now?Date.now():+new Date};At("Z",":"),At("ZZ",""),q("Z",Yi),q("ZZ",Yi),X(["Z","ZZ"],function(t,e,n){n._useUTC=!0,n._tzm=Rt(Yi,t)});var Xi=/([\+\-]|\d\d)/gi;t.updateOffset=function(){};var Ki=/^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?\d*)?$/,ts=/^(-)?P(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)W)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?$/;ne.fn=Nt.prototype;var es=oe(1,"add"),ns=oe(-1,"subtract");t.defaultFormat="YYYY-MM-DDTHH:mm:ssZ";var is=D("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(t){return void 0===t?this.localeData():this.locale(t)});E(0,["gg",2],0,function(){return this.weekYear()%100}),E(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Ie("gggg","weekYear"),Ie("ggggg","weekYear"),Ie("GGGG","isoWeekYear"),Ie("GGGGG","isoWeekYear"),F("weekYear","gg"),F("isoWeekYear","GG"),q("G",Mi),q("g",Mi),q("GG",mi,li),q("gg",mi,li),q("GGGG",pi,ci),q("gggg",pi,ci),q("GGGGG",vi,fi),q("ggggg",vi,fi),K(["gggg","ggggg","GGGG","GGGGG"],function(t,e,n,i){e[i.substr(0,2)]=g(t)}),K(["gg","GG"],function(e,n,i,s){n[s]=t.parseTwoDigitYear(e)}),E("Q",0,"Qo","quarter"),F("quarter","Q"),q("Q",di),X("Q",function(t,e){e[Wi]=3*(g(t)-1)}),E("w",["ww",2],"wo","week"),E("W",["WW",2],"Wo","isoWeek"),F("week","w"),F("isoWeek","W"),q("w",mi),q("ww",mi,li),q("W",mi),q("WW",mi,li),K(["w","ww","W","WW"],function(t,e,n,i){e[i.substr(0,1)]=g(t)});var ss={dow:0,doy:6};E("D",["DD",2],"Do","date"),F("date","D"),q("D",mi),q("DD",mi,li),q("Do",function(t,e){return t?e._ordinalParse:e._ordinalParseLenient}),X(["D","DD"],xi),X("Do",function(t,e){e[xi]=g(t.match(mi)[0],10)});var rs=V("Date",!0);E("d",0,"do","day"),E("dd",0,0,function(t){return this.localeData().weekdaysMin(this,t)}),E("ddd",0,0,function(t){return this.localeData().weekdaysShort(this,t)}),E("dddd",0,0,function(t){return this.localeData().weekdays(this,t)}),E("e",0,0,"weekday"),E("E",0,0,"isoWeekday"),F("day","d"),F("weekday","e"),F("isoWeekday","E"),q("d",mi),q("e",mi),q("E",mi),q("dd",ki),q("ddd",ki),q("dddd",ki),K(["dd","ddd","dddd"],function(t,e,n,i){var s=n._locale.weekdaysParse(t,i,n._strict);null!=s?e.d=s:d(n).invalidWeekday=t}),K(["d","e","E"],function(t,e,n,i){e[i]=g(t)});var as="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),os="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),us="Su_Mo_Tu_We_Th_Fr_Sa".split("_");E("DDD",["DDDD",3],"DDDo","dayOfYear"),F("dayOfYear","DDD"),q("DDD",gi),q("DDDD",hi),X(["DDD","DDDD"],function(t,e,n){n._dayOfYear=g(t)}),E("H",["HH",2],0,"hour"),E("h",["hh",2],0,dn),E("hmm",0,0,function(){return""+dn.apply(this)+R(this.minutes(),2)}),E("hmmss",0,0,function(){return""+dn.apply(this)+R(this.minutes(),2)+R(this.seconds(),2)}),E("Hmm",0,0,function(){return""+this.hours()+R(this.minutes(),2)}),E("Hmmss",0,0,function(){return""+this.hours()+R(this.minutes(),2)+R(this.seconds(),2)}),ln("a",!0),ln("A",!1),F("hour","h"),q("a",hn),q("A",hn),q("H",mi),q("h",mi),q("HH",mi,li),q("hh",mi,li),q("hmm",_i),q("hmmss",yi),q("Hmm",_i),q("Hmmss",yi),X(["H","HH"],Ui),X(["a","A"],function(t,e,n){n._isPm=n._locale.isPM(t),n._meridiem=t}),X(["h","hh"],function(t,e,n){e[Ui]=g(t),d(n).bigHour=!0}),X("hmm",function(t,e,n){var i=t.length-2;e[Ui]=g(t.substr(0,i)),e[Gi]=g(t.substr(i)),d(n).bigHour=!0}),X("hmmss",function(t,e,n){var i=t.length-4,s=t.length-2;e[Ui]=g(t.substr(0,i)),e[Gi]=g(t.substr(i,2)),e[Pi]=g(t.substr(s)),d(n).bigHour=!0}),X("Hmm",function(t,e,n){var i=t.length-2;e[Ui]=g(t.substr(0,i)),e[Gi]=g(t.substr(i))}),X("Hmmss",function(t,e,n){var i=t.length-4,s=t.length-2;e[Ui]=g(t.substr(0,i)),e[Gi]=g(t.substr(i,2)),e[Pi]=g(t.substr(s))});var ds=/[ap]\.?m?\.?/i,ls=V("Hours",!0);E("m",["mm",2],0,"minute"),F("minute","m"),q("m",mi),q("mm",mi,li),X(["m","mm"],Gi);var hs=V("Minutes",!1);E("s",["ss",2],0,"second"),F("second","s"),q("s",mi),q("ss",mi,li),X(["s","ss"],Pi);var cs=V("Seconds",!1);E("S",0,0,function(){return~~(this.millisecond()/100)}),E(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),E(0,["SSS",3],0,"millisecond"),E(0,["SSSS",4],0,function(){return 10*this.millisecond()}),E(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),E(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),E(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),E(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),E(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),F("millisecond","ms"),q("S",gi,di),q("SS",gi,li),q("SSS",gi,hi);var fs;for(fs="SSSS";fs.length<=9;fs+="S")q(fs,Di);for(fs="S";fs.length<=9;fs+="S")X(fs,mn);var ms=V("Milliseconds",!1);E("z",0,0,"zoneAbbr"),E("zz",0,0,"zoneName");var _s=m.prototype;_s.add=es,_s.calendar=de,_s.clone=le,_s.diff=ge,_s.endOf=We,_s.format=Me,_s.from=Se,_s.fromNow=Ye,_s.to=we,_s.toNow=ke,_s.get=A,_s.invalidAt=Ve,_s.isAfter=he,_s.isBefore=ce,_s.isBetween=fe,_s.isSame=me,_s.isSameOrAfter=_e,_s.isSameOrBefore=ye,_s.isValid=He,_s.lang=is,_s.locale=Te,_s.localeData=be,_s.max=Bi,_s.min=Ji,_s.parsingFlags=Le,_s.set=A,_s.startOf=Oe,_s.subtract=ns,_s.toArray=Pe,_s.toObject=Ce,_s.toDate=Ge,_s.toISOString=De,_s.toJSON=Fe,_s.toString=ve,_s.unix=Ue,_s.valueOf=xe,_s.creationData=Ne,_s.year=qi,_s.isLeapYear=pt,_s.weekYear=Ae,_s.isoWeekYear=Re,_s.quarter=_s.quarters=$e,_s.month=at,_s.daysInMonth=ot,_s.week=_s.weeks=Qe,_s.isoWeek=_s.isoWeeks=Xe,_s.weeksInYear=je,_s.isoWeeksInYear=Ee,_s.date=rs,_s.day=_s.days=rn,_s.weekday=an,_s.isoWeekday=on,_s.dayOfYear=un,_s.hour=_s.hours=ls,_s.minute=_s.minutes=hs,_s.second=_s.seconds=cs,_s.millisecond=_s.milliseconds=ms,_s.utcOffset=zt,_s.utc=$t,_s.local=qt,_s.parseZone=Jt,_s.hasAlignedHourOffset=Bt,_s.isDST=Qt,_s.isDSTShifted=Xt,_s.isLocal=Kt,_s.isUtcOffset=te,_s.isUtc=ee,_s.isUTC=ee,_s.zoneAbbr=_n,_s.zoneName=yn,_s.dates=D("dates accessor is deprecated. Use date instead.",rs),_s.months=D("months accessor is deprecated. Use month instead",at),_s.years=D("years accessor is deprecated. Use year instead",qi),_s.zone=D("moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779",Zt);var ys=_s,gs={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},ps={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},vs="Invalid date",Ds="%d",Ms=/\d{1,2}/,Ss={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},Ys=T.prototype;Ys._calendar=gs,Ys.calendar=vn,Ys._longDateFormat=ps,Ys.longDateFormat=Dn,Ys._invalidDate=vs,Ys.invalidDate=Mn,Ys._ordinal=Ds,Ys.ordinal=Sn,Ys._ordinalParse=Ms,Ys.preparse=Yn,Ys.postformat=Yn,Ys._relativeTime=Ss,Ys.relativeTime=wn,Ys.pastFuture=kn,Ys.set=w,Ys.months=nt,Ys._months=Vi,Ys.monthsShort=it,Ys._monthsShort=Ni,Ys.monthsParse=st,Ys._monthsRegex=Ai,Ys.monthsRegex=dt,Ys._monthsShortRegex=Ii,Ys.monthsShortRegex=ut,Ys.week=qe,Ys._week=ss,Ys.firstDayOfYear=Be,Ys.firstDayOfWeek=Je,Ys.weekdays=tn,Ys._weekdays=as,Ys.weekdaysMin=nn,Ys._weekdaysMin=us,Ys.weekdaysShort=en,Ys._weekdaysShort=os,Ys.weekdaysParse=sn,Ys.isPM=cn,Ys._meridiemParse=ds,Ys.meridiem=fn,x("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10,n=1===g(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+n}}),t.lang=D("moment.lang is deprecated. Use moment.locale instead.",x),t.langData=D("moment.langData is deprecated. Use moment.localeData instead.",P);var ws=Math.abs,ks=En("ms"),Ts=En("s"),bs=En("m"),Os=En("h"),Ws=En("d"),xs=En("w"),Us=En("M"),Gs=En("y"),Ps=zn("milliseconds"),Cs=zn("seconds"),Fs=zn("minutes"),Hs=zn("hours"),Ls=zn("days"),Vs=zn("months"),Ns=zn("years"),Is=Math.round,As={s:45,m:45,h:22,d:26,M:11},Rs=Math.abs,Es=Nt.prototype;Es.abs=Pn,Es.add=Fn,Es.subtract=Hn,Es.as=An,Es.asMilliseconds=ks,Es.asSeconds=Ts,Es.asMinutes=bs,Es.asHours=Os,Es.asDays=Ws,Es.asWeeks=xs,Es.asMonths=Us,Es.asYears=Gs,Es.valueOf=Rn,Es._bubble=Vn,Es.get=jn,Es.milliseconds=Ps,Es.seconds=Cs,Es.minutes=Fs,Es.hours=Hs,Es.days=Ls,Es.weeks=Zn,Es.months=Vs,Es.years=Ns,Es.humanize=Bn,Es.toISOString=Qn,Es.toString=Qn,Es.toJSON=Qn,Es.locale=Te,Es.localeData=be,Es.toIsoString=D("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Qn),Es.lang=is,E("X",0,0,"unix"),E("x",0,0,"valueOf"),q("x",Mi),q("X",wi),X("X",function(t,e,n){n._d=new Date(1e3*parseFloat(t,10))}),X("x",function(t,e,n){n._d=new Date(g(t))}),t.version="2.12.0",e(Ft),t.fn=ys,t.min=Lt,t.max=Vt,t.now=Qi,t.utc=o,t.unix=gn,t.months=On,t.isDate=i,t.locale=x,t.invalid=h,t.duration=ne,t.isMoment=_,t.weekdays=xn,t.parseZone=pn,t.localeData=P,t.isDuration=It,t.monthsShort=Wn,t.weekdaysMin=Gn,t.defineLocale=U,t.updateLocale=G,t.locales=C,t.weekdaysShort=Un,t.normalizeUnits=H,t.relativeTimeThreshold=Jn,t.prototype=ys;var js=t;return js}); - - -/** - * @module Slick - * @author Ken Wheeler - * @see http://kenwheeler.github.io/slick - * @version 1.6.0 - */ -!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):"undefined"!=typeof exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){"use strict";var b=window.Slick||{};b=function(){function c(c,d){var f,e=this;e.defaults={accessibility:!0,adaptiveHeight:!1,appendArrows:a(c),appendDots:a(c),arrows:!0,asNavFor:null,prevArrow:'',nextArrow:'',autoplay:!1,autoplaySpeed:3e3,centerMode:!1,centerPadding:"50px",cssEase:"ease",customPaging:function(b,c){return a(' -
- -
-
-